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

Проблема с вводом данных в блокчейн

Любые введенные данные должны соответствовать правилам, установленным смарт-контрактом, чтобы они были приняты в блокчейн.

Основная идея кажется простой и убедительной. Но его реализация может вызвать трудности.

Например, архитектура Hyperledger® Fabric одной из платформ блокчейна, которую мы используем в DLT Labs, позволяет разработчику писать только самые базовые функции через свои смарт-контракты. Это называется код цепочки пользователя.

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

Это долго и утомительно.

Решение - плагин

Чтобы помочь разработчикам, в Hyperledger Fabric есть отдельная функция для включения системных цепных кодов. Системный цепной код не устанавливается и не создается с использованием предложений из SDK или интерфейса командной строки, как обычно это происходит с пользовательским цепным кодом.

Вместо этого он регистрируется и развертывается партнером при запуске. Чтобы включить эту возможность, нам нужно создать одноранговый узел с помощью тега сборки с именем «pluginsenabled».

В настоящее время Hyperledger Fabric поддерживает только системные цепные коды, написанные на Go. Это может показаться небольшой функцией, но при ее эффективном использовании она может позволить разработчикам использовать ее и реализовать функции, которые невозможно реализовать с помощью простого пользовательского цепного кода!

Процесс разработки любого системного чейнкода очень похож на пользовательский чейнкод. Здесь мы столкнулись с серьезной трудностью. Если вы обратитесь к документации Hyperledger Fabric, вы не сможете развернуть системный цепочный код.

По состоянию на январь 2019 года все сообщество Fabric решило отключить эту функцию по умолчанию, поскольку это может привести к некоторым проблемам с безопасностью для менее опытных разработчиков.

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

Как связать вашего партнера с системным чейнкодом?

Существует 2 метода (статический и динамический с использованием подключаемых модулей Go) для связывания вашего однорангового узла с системным цепным кодом. Системный чейнкод лучше загружать как плагин динамически.

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

8 шагов для развертывания системного чейнкода

  1. Напишите системный цепной код в go
  2. Скомпилируйте свой плагин go, используя флаг -buildmode=plugin build, чтобы создать файл библиотеки общих объектов (.so).
  3. Сборка -buildmode=plugin -o <output-file>.so <go-plugin>.go
  4. Создайте одноранговый узел, чтобы разрешить загрузку подключаемых модулей GO следующим образом:
    DOCKER_DYNAMIC_LINK=true GO_TAGS+=” pluginsenabled” make peer-docker
    Примечание. Не забудьте создать подключаемый модуль go на той же версии go версии Fabric, что и версия go.
  5. Запустите сеть, используя сформированный образ докера.
  6. Скопируйте файлы подключаемого модуля и файл .so в одноранговый узел Docker.
  7. Добавьте системный цепочный код и информацию о нем в файл конфигурации однорангового узла (core.yaml).
  8. Перезапустите одноранговый узел.

Обратите внимание: в системном цепном коде нет необходимости устанавливать или инициализировать его, отдельно выполняя команды в командной строке. Если вы выполнили все шаги правильно, цепной код для каждого канала автоматически создается на канале.
С этого момента можно действовать как обычный цепной код (с некоторыми дополнительными разрешениями).



Hyperledger Fabric - это проект, поддерживаемый Linux Foundation®, и Hyperledger является его зарегистрированным товарным знаком. DLT Labs является товарным знаком DLT Global, Inc.

Автор - Раджат Шарма, DLT Labs

Об авторе: Раджат - разработчик блокчейнов, который стремится понимать вещи на фундаментальном уровне и делиться ими как можно яснее.