При разработке приложений на блокчейне необходимо уметь писать смарт-контракты. Смарт-контракт похож на любой другой контракт в реальном мире, но он просто записывается в строчки кода и хранится в блокчейне.
Проблема с вводом данных в блокчейн
Любые введенные данные должны соответствовать правилам, установленным смарт-контрактом, чтобы они были приняты в блокчейн.
Основная идея кажется простой и убедительной. Но его реализация может вызвать трудности.
Например, архитектура Hyperledger® Fabric одной из платформ блокчейна, которую мы используем в DLT Labs, позволяет разработчику писать только самые базовые функции через свои смарт-контракты. Это называется код цепочки пользователя.
Если разработчик хочет реализовать ту же логику в сети, ему или ей потребуется вручную установить этот чейнкод на каждый созданный канал (примечание - в Fabric каналы являются блокчейнами в одной сети).
Это долго и утомительно.
Решение - плагин
Чтобы помочь разработчикам, в Hyperledger Fabric есть отдельная функция для включения системных цепных кодов. Системный цепной код не устанавливается и не создается с использованием предложений из SDK или интерфейса командной строки, как обычно это происходит с пользовательским цепным кодом.
Вместо этого он регистрируется и развертывается партнером при запуске. Чтобы включить эту возможность, нам нужно создать одноранговый узел с помощью тега сборки с именем «pluginsenabled».
В настоящее время Hyperledger Fabric поддерживает только системные цепные коды, написанные на Go. Это может показаться небольшой функцией, но при ее эффективном использовании она может позволить разработчикам использовать ее и реализовать функции, которые невозможно реализовать с помощью простого пользовательского цепного кода!
Процесс разработки любого системного чейнкода очень похож на пользовательский чейнкод. Здесь мы столкнулись с серьезной трудностью. Если вы обратитесь к документации Hyperledger Fabric, вы не сможете развернуть системный цепочный код.
По состоянию на январь 2019 года все сообщество Fabric решило отключить эту функцию по умолчанию, поскольку это может привести к некоторым проблемам с безопасностью для менее опытных разработчиков.
Если вы по-прежнему хотите включить и использовать эту функцию, вы можете сделать это, создав одноранговый образ с помощью тега сборки с именем «pluginsenabled».
Как связать вашего партнера с системным чейнкодом?
Существует 2 метода (статический и динамический с использованием подключаемых модулей Go) для связывания вашего однорангового узла с системным цепным кодом. Системный чейнкод лучше загружать как плагин динамически.
Таким образом, нет необходимости перестраивать пира каждый раз, когда в цепной код вносятся изменения. Одноранговый узел необходимо создать один раз, чтобы включить плагины.
8 шагов для развертывания системного чейнкода
- Напишите системный цепной код в go
- Скомпилируйте свой плагин go, используя флаг
-buildmode=plugin build
, чтобы создать файл библиотеки общих объектов (.so). - Сборка
-buildmode=plugin -o <output-file>.so <go-plugin>.go
- Создайте одноранговый узел, чтобы разрешить загрузку подключаемых модулей GO следующим образом:
DOCKER_DYNAMIC_LINK=true GO_TAGS+=” pluginsenabled” make peer-docker
Примечание. Не забудьте создать подключаемый модуль go на той же версии go версии Fabric, что и версия go.
- Запустите сеть, используя сформированный образ докера.
- Скопируйте файлы подключаемого модуля и файл .so в одноранговый узел Docker.
- Добавьте системный цепочный код и информацию о нем в файл конфигурации однорангового узла (core.yaml).
- Перезапустите одноранговый узел.
Обратите внимание: в системном цепном коде нет необходимости устанавливать или инициализировать его, отдельно выполняя команды в командной строке. Если вы выполнили все шаги правильно, цепной код для каждого канала автоматически создается на канале.
С этого момента можно действовать как обычный цепной код (с некоторыми дополнительными разрешениями).
Hyperledger Fabric - это проект, поддерживаемый Linux Foundation®, и Hyperledger является его зарегистрированным товарным знаком. DLT Labs является товарным знаком DLT Global, Inc.
Автор - Раджат Шарма, DLT Labs ™
Об авторе: Раджат - разработчик блокчейнов, который стремится понимать вещи на фундаментальном уровне и делиться ими как можно яснее.