MultiChain 2.1: Zmienne i biblioteki

Węzeł źródłowy: 1587135

Inteligentne filtry są o wiele inteligentniejsze

Dzisiaj z przyjemnością udostępniamy MultiChain 2.1 z dwiema ważnymi nowymi funkcjami dla programistów MultiChain.

Półtora roku temu wprowadzono MultiChain 2.0 Inteligentne filtry, które umożliwiają osadzenie niestandardowej logiki w łańcuchu bloków w celu sprawdzania poprawności transakcji i danych. Inteligentne filtry są koncepcyjnie podobne do „inteligentnych kontraktów” dostarczanych przez inne platformy blockchain, ale mają inny projekt, aby pasowały do ​​szybszego modelu transakcyjnego MultiChain.

Inteligentne filtry występują w dwóch odmianach — filtry transakcyjne i filtry strumieniowe. Filtr transakcji weryfikuje całość transakcji w łańcuchu, badając ich dane wejściowe, wyjściowe i metadane. Jeśli transakcja nie przejdzie przez filtr, jest odrzucana przez każdy węzeł w sieci. Filtr strumienia sprawdza poprawność poszczególnych elementów zapisanych w a Strumień MultiChain, patrząc na ich klucze, wydawców oraz dane w łańcuchu lub poza łańcuchem, w formacie JSON, tekstowym lub binarnym. Jeśli element nie przejdzie przez filtr, jest oznaczany jako nieprawidłowy, a jego dane są ukrywane przez każdy węzeł subskrybujący strumień.

Oba typy inteligentnych filtrów są napisane w JavaScript i działają w deterministycznej wersji Google V8, superszybki silnik JavaScript, który napędza Chrome, Node.js i wiele innych platform. Proste filtry są łatwe do zakodowania i zrozumienia — na przykład tutaj jest filtr strumienia, który sprawdza, czy elementy mają co najmniej dwa klucze:

funkcja filterstreamitem() { var item=getfilterstreamitem(); // funkcja wywołania zwrotnego if (item.keys.length2) zwraca „Wymagane co najmniej dwa klucze”; }

Ogólnie rzecz biorąc, otrzymaliśmy świetne opinie na temat inteligentnych filtrów, ale wielokrotnie słyszeliśmy również o dwóch sposobach ulepszenia ich. Po pierwsze, wielu użytkowników chce filtrów, które mogą odczytywać informacje znajdujące się w łańcuchu bloków, ale nie w sprawdzanej transakcji lub elemencie strumienia. Przypadki użycia obejmują zmieniającą się listę dozwolonych krajów, kursy wymiany dostarczane przez zewnętrzną „wyrocznię” lub przełącznik do przełączania niektórych reguł.

Po drugie, niektórzy programiści chcą używać zestawu funkcji JavaScript w wielu filtrach bez powielania kodu. Chcą także mieć możliwość aktualizacji tych funkcji, naprawienia błędu lub uwzględnienia nowych sytuacji, bez wyłączania istniejących filtrów i tworzenia nowych w ich miejsce. Na przykład udostępniony kod może zawierać logikę specyficzną dla aplikacji, bibliotekę innej firmy do sprawdzania poprawności plików JSON lub analizowania zawartości pliku PDF.

Wielołańcuchowy 2.1 wprowadza dwa nowe typy jednostek on-chain, zmienne i biblioteki, aby odpowiedzieć na te potrzeby.

Zmienne

Zacznijmy od zmiennych MultiChain. Działają one podobnie jak w zwykłych językach programowania, ale z dodatkiem łańcucha blokowego. W łańcuchu bloków można utworzyć dowolną liczbę nazwanych zmiennych. Każda zmienna ma dynamiczny zestaw adresów, który może aktualizować swoją wartość, a tym zestawem zarządza jeden lub więcej administratorów zmiennych (domyślnie tylko twórca zmiennej). Zmienne są tworzone lub aktualizowane w transakcji blockchain, którą można wysłać za pomocą prostej komendy API wysokiego poziomu. Alternatywnie, interfejsy API niższego poziomu mogą być używane do tworzenia złożonych transakcji, które atomowo ustawiają jedną lub więcej zmiennych, zapisują elementy strumienia, przesyłają zasoby, zmieniają uprawnienia i tak dalej.

Sama wartość zmiennej może zawierać dowolną strukturę JSON, w tym liczby, ciągi znaków, wartości logiczne, zagnieżdżone obiekty i tablice, i jest przechowywana w łańcuchu w wydajnym UBJSON formacie serializacji. Oczywiście Inteligentne filtry mogą sprawdzać bieżącą wartość zmiennej za pomocą prostej funkcji wywołania zwrotnego. Ale ponieważ jest to łańcuch blokowy, dostępna jest również pełna historia wartości i autorów zmiennych, którą można odzyskać częściowo lub w całości za pomocą innej funkcji wywołania zwrotnego. Aby ułatwić programowanie, te wywołania zwrotne są również dostępne za pośrednictwem interfejsu API skierowanego do aplikacji.

biblioteki

Przejdźmy do bibliotek, które są większym rodzeństwem zmiennych. Podobnie jak w przypadku zmiennych, w łańcuchu blokowym można utworzyć dowolną liczbę nazwanych bibliotek. Ale biblioteki mają bogatszy model aktualizacji, z trzema dostępnymi trybami – niezmienny, natychmiastowy, podlegający zatwierdzeniu.

Raz niezmienny tworzona jest biblioteka, jej kod nigdy nie może zostać zmieniony. Biblioteka z natychmiastowy aktualizacje można zmieniać jak zmienną, z zestawem adresów, które mogą indywidualnie zastępować jej kod. Ale w bibliotece z podlegający zatwierdzeniu aktualizacje, aktualizacja jest stosowana dopiero po zatwierdzeniu przez określoną część globalnych administratorów łańcucha bloków. Ten ostatni tryb zapewnia doskonały kompromis między bezpieczeństwem a elastycznością.

Kod biblioteki jest napisany w zwykłym języku JavaScript i definiuje jedną lub więcej funkcji, których mają używać Inteligentne filtry. Podobnie jak w przypadku zmiennych, biblioteki są tworzone lub aktualizowane w specjalnej transakcji, łatwo wysyłanej za pomocą API. Gdy tworzony jest filtr inteligentny, jego wymagane biblioteki są udostępniane w opcjonalnym parametrze. Biblioteka zawsze działa w kontekście filtru, który tego wymaga, więc tam, gdzie to konieczne, może używać wywołań zwrotnych Inteligentnego Filtra. MultiChain zapewnia rozbudowaną funkcjonalność do testowania (i wycofywania) bibliotek i ich aktualizacji lokalnie przed wprowadzeniem zmian w łańcuchu bloków.

Zawijam to

Podobnie jak w przypadku wszystkich funkcji związanych z regułami łańcucha bloków, zmienne i biblioteki są dostępne zarówno w wersji Community, jak i Enterprise MultiChain 2.1. Nasza dokumentacja deweloperska zawiera szczegółowy opis nowości Interfejsy API JSON-RPC i Inteligentne wywołania zwrotne filtrów dostępny. Aby skorzystać z nowych funkcji w już działającym łańcuchu bloków, najpierw przeprowadź migrację węzłów do MultiChain 2.1, a następnie uaktualnienie protokół łańcucha do wersji 20012.

Więc, co dalej? W nadchodzących miesiącach skupimy się na szczegółowej i intensywnej pracy pod maską, aby poprawić wydajność i współbieżność MultiChain, gdy jest on pod znacznym obciążeniem. Zwiększy to szybkość reakcji aplikacji, które muszą wysyłać zapytania do węzła, podczas gdy ten nadal przetwarza setki lub tysiące nowych transakcji na sekundę.

W międzyczasie wszyscy w zespole MultiChain życzymy naszym użytkownikom i klientom zdrowia i rozsądku na nadchodzący rok. Wiemy, że to trudny czas dla wszystkich i nie możemy się doczekać powrotu do normalnego rytmu spotkań i konferencji, gdy tylko będzie to bezpieczne.

Prosimy o umieszczanie komentarzy na LinkedIn.

Znak czasu:

Więcej z Multichain