MultiChain 2.1: переменные и библиотеки

Исходный узел: 1587135

Делаем смарт-фильтры намного умнее

Сегодня мы рады выпустить MultiChain 2.1 с двумя важными новыми функциями для разработчиков MultiChain.

Полтора года назад MultiChain 2.0 представил Умные Фильтры, которые позволяют встроить пользовательскую логику в цепочку блоков для проверки транзакций и данных. Умные фильтры концептуально похожи на «умные контракты», предоставляемые другими платформами блокчейнов, но имеют другую конструкцию, чтобы соответствовать более быстрой модели транзакций MultiChain.

Смарт-фильтры бывают двух видов - фильтры транзакций и фильтры потоков. Фильтр транзакций проверяет внутричейн-транзакции в целом, проверяя их входы, выходы и метаданные. Если транзакция не проходит фильтр, она отклоняется каждым узлом сети. Фильтр потока проверяет отдельные элементы, записанные в Поток MultiChain, просматривая их ключи, издателя (ов) и данные внутри или вне сети в JSON, текстовом или двоичном формате. Если элемент не проходит фильтр, он помечается как недопустимый, и его данные скрываются каждым узлом, подписанным на поток.

Оба типа смарт-фильтров написаны на JavaScript и работают в детерминированной версии Google. V8, сверхбыстрый движок JavaScript, который поддерживает Chrome, Node.js и многие другие платформы. Простые фильтры легко кодировать и понимать - например, вот фильтр потока, который проверяет, что элементы имеют как минимум два ключа:

функция filterstreamitem() { var item=getfilterstreamitem(); // функция обратного вызова if (item.keys.length2) return «Требуется как минимум два ключа»; }

В целом, мы получили отличные отзывы о смарт-фильтрах, но мы также неоднократно слышали о двух способах их улучшения. Во-первых, многим пользователям нужны фильтры, которые могут считывать информацию, которая находится в цепочке блоков, но не в проверяемой транзакции или элементе потока. Сценарии использования включают изменение списка разрешенных стран, обменных курсов, предоставляемых внешним «оракулом», или переключение для переключения определенных правил.

Во-вторых, некоторые разработчики хотят использовать набор функций JavaScript в нескольких фильтрах без дублирования кода. Они также хотят иметь возможность обновлять эти функции, исправлять ошибку или покрывать некоторые новые ситуации, не отключая существующие фильтры и не создавая вместо них новые. Например, общий код может содержать логику для конкретного приложения, стороннюю библиотеку для проверки JSON или анализа содержимого PDF.

Мультичейн 2.1 вводит два новых типа сущностей в цепочке, переменные и библиотеки, чтобы ответить на эти потребности.

Переменные

Начнем с переменных MultiChain. Они работают так же, как и в обычных языках программирования, но с особенностями блокчейна. В блокчейне можно создать любое количество именованных переменных. Каждая переменная имеет динамический набор адресов, которым разрешено обновлять свое значение, и этим набором управляет один или несколько администраторов переменных (по умолчанию только создатель переменной). Переменные создаются или обновляются в транзакции блокчейна, которую можно отправить с помощью простой высокоуровневой команды API. В качестве альтернативы API нижнего уровня можно использовать для создания сложных транзакций, которые атомарно устанавливают одну или несколько переменных, записывают элементы потока, переносят активы, изменяют разрешения и т. Д.

Само значение переменной может содержать любую структуру JSON, включая числа, строки, логические значения, вложенные объекты и массивы, и хранится в цепочке в эффективном УБЖСОН формат сериализации. Конечно, смарт-фильтры могут запрашивать текущее значение переменной с помощью простой функции обратного вызова. Но поскольку это блокчейн, также доступна полная история значений переменных и писателей, и ее можно получить частично или полностью с помощью другой функции обратного вызова. Чтобы упростить разработку, эти обратные вызовы также доступны через API, ориентированный на приложения.

Библиотеки

Перейдем к библиотекам, которые являются старшими братьями переменных. Как и в случае с переменными, в цепочке блоков можно создать любое количество именованных библиотек. Но у библиотек есть более богатая модель для обновления с тремя доступными режимами: неизменный, мгновениеи подлежит утверждению.

Когда истощается неизменный библиотека создана, ее код изменить нельзя. Библиотека с мгновение обновления могут быть изменены как переменная с набором адресов, которые могут индивидуально заменять ее код. Но в библиотеке с подлежит утверждению обновления, обновление применяется только после одобрения определенной частью глобальных администраторов блокчейна. Этот последний режим обеспечивает отличный компромисс между безопасностью и гибкостью.

Код библиотеки написан на обычном JavaScript и определяет одну или несколько функций для использования смарт-фильтрами. Как и в случае с переменными, библиотеки создаются или обновляются в специальной транзакции, которая легко отправляется с помощью API. Когда смарт-фильтр создается, его необходимые библиотеки предоставляются в необязательном параметре. Библиотека всегда запускается в контексте фильтра, которому она требуется, поэтому она может использовать обратные вызовы Smart Filter там, где это необходимо. MultiChain предоставляет обширную функциональность для тестирования (и отката) библиотек и их обновлений локально перед внесением изменений в блокчейн.

Подводя итоги

Как и все функции, относящиеся к правилам блокчейна, переменные и библиотеки доступны как в редакции MultiChain 2.1 для сообщества, так и в версии Enterprise. Наша документация для разработчиков содержит подробное описание нового API JSON-RPC и Обратные вызовы Smart Filter имеется в наличии. Чтобы использовать новые функции в уже работающей цепочке блоков, сначала перенесите узлы в MultiChain 2.1, затем модернизация протокол цепочки до версии 20012.

Ну и что дальше? В ближайшие месяцы мы сосредоточимся на некоторой детальной и интенсивной внутренней работе, чтобы улучшить производительность и параллелизм MultiChain при значительной нагрузке. Это повысит скорость отклика приложений, которым необходимо запрашивать узел, пока он продолжает обрабатывать сотни или тысячи новых транзакций в секунду.

А пока все мы в команде MultiChain желаем нашим пользователям и клиентам здоровья и здравомыслия на год вперед. Мы знаем, что сейчас трудные времена для всех, и надеемся вернуться к нормальному ритму встреч и конференций, как только это станет безопасным.

Пожалуйста, оставьте любые комментарии на LinkedIn.

Отметка времени:

Больше от многоцепочечного