Установка и использование платформы
Разработка и применение смарт-контрактов¶
Определение и общее описание работы смарт-контрактов блокчейн-платформы Конфидент приведено в статье Смарт-контракты.
Подготовка к работе¶
Перед началом разработки смарт-контракта убедитесь, что на вашей машине установлен пакет ПО для контейнеризации приложений Docker.
Принципы работы с Docker изложены в официальной документации Docker.
Также убедитесь, что на используемой вами ноде настроено исполнение смарт-контрактов.
Если вы разрабатываете смарт-контракт для работы в частной сети, разверните собственный репозиторий для Docker-образов и укажите его адрес и учетные данные на вашем сервере в блоке remote-registries
конфигурационного файла ноды.
В этом блоке вы можете указать несколько репозиториев, если вам необходимо определить несколько мест хранения различных смарт-контрактов.
Также вы можете загрузить Docker-образ контракта из репозитория, не указанного в конфигурационном файле ноды, при помощи транзакции 103, инициирующей создание смарт-контракта.
Подробнее см. раздел Создание и установка смарт-контракта, а также описание транзакции 103.
Разработка смарт-контракта¶
Смарт-контракты блокчейн-платформы Конфидент могут разрабатываться на любом языке программирования и реализовывать любые алгоритмы. Готовый код смарт-контракта упаковывается в Docker-образ с protobuf-файлами, в которые упакованы используемые gRPC методы.
Пример кода смарт-контракта на Python с применением gRPC API-методов для обмена данными с нодой, а также пошаговое руководство по созданию соответствующего Docker-образа приведен в следующей статье:
Для разработки, тестирования и развертывания смарт-контрактов в блокчейн сетях Конфидент вы можете использовать инструментарии JS Сontract SDK Toolkit или Java/Kotlin Сontract SDK Toolkit. Они описаны в следующих разделах:
Загрузка смарт-контракта в репозиторий¶
При работе в частной сети, загрузите Docker-образ смарт-контракта в собственный репозиторий. Для этого выполните следующие шаги:
**1**. Запустите ваш репозиторий в контейнере:
docker run -d -p 5000:5000 --name my-registry-container my-registry:2
2. Перейдите в директорию, содержащую файлы смарт-контракта и сценарный файл Dockerfile с командами для сборки образа.
3. Соберите образ вашего смарт-контракта:
docker build -t my-contract .
4. Укажите имя образа и адрес его размещения в репозитории:
docker image tag my-contract my-registry:5000/my-contract
5. Запустите созданный вами контейнер репозитория:
docker start my-registry-container
6. Загрузите ваш смарт-контракт в репозиторий:
docker push my-registry:5000/my-contract
7. Получите информацию о смарт-контракте. Для этого выведите информацию о контейнере:
docker image ls|grep 'my-node:5000/my-contract'
Таким образом вы получите идентификатор контейнера. Выведите информацию о нем при помощи команды docker inspect
:
docker inspect my-contract-id
Пример ответа:
{
"Id": "sha256:57c2c2d2643da042ef8dd80010632ffdd11e3d2e3f85c20c31dce838073614dd",
"RepoTags": [
"wenode:latest"
],
"RepoDigests": [],
"Parent": "sha256:d91d2307057bf3bb5bd9d364f16cd3d7eda3b58edf2686e1944bcc7133f07913",
"Comment": "",
"Created": "2019-10-25T14:15:03.856072509Z",
"Container": "",
"ContainerConfig": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
Поле Id
– это идентификатор Docker-образа смарт-контракта, который вводится в поле ImageHash
транзакции 103 при создании смарт-контракта.
Размещение смарт-контракта в блокчейне¶
После загрузки смарт-контракта в репозиторий опубликуйте его в сети при помощи транзакции 103.CreateContract.
Для этого подпишите транзакцию посредством метода sign REST API или метода JavaScript SDK.
Важно
REST API метод transactions/sign доступен только в тестовом режиме PKI или при отключенном PKI, то есть, когда в конфигурационном файле ноды параметру node.crypto.pki.mode присвоено значение TEST
или OFF
. При использовании PKI метод /transactions/sign недоступен.
Данные, возвращенные в ответе метода, подаются на вход при публикации транзакции 103.
Ниже приведены примеры подписания и отправки транзакции при помощи методов sign
и broadcast
.
В примерах транзакции подписываются ключом, сохраненным в keystore ноды.
После того как транзакция 103. CreateContract, в которой указана ссылка на смарт-контракт в репозитории, будет опубликована, то есть записана в блок блокчейна в ходе раунда майнинга, пользователи сети смогут вызывать этот смарт-контракт.
Примечание
Если в дальнейшем код смарт-контракта будет обновлён, то контракт необходимо будет опубликовать заново. Для этого используйте транзакцию 107. UpdateContract Transaction.
Важно
Смарт-контракт не помещается в блокчейн; в блокчейн попадает транзакция, в теле которой зафиксирован хэш Docker-образа, в который упакован код смарт-контракта. Таким образом хэш Docker образа смарт-контракта оказывается на всех нодах блокчейна, но сам смарт-контракт находится в репозитории Docker registry вне блокчейн сети.
Исполнение смарт-контракта¶
После размещения смарт-контракта в блокчейне он может быть вызван при помощи транзакции 104 CallContract Transaction.
Эта транзакция также может быть подписана и отправлена в блокчейн посредством метода sign REST API или метода JavaScript SDK.
Важно
REST API метод transactions/sign доступен только в тестовом режиме PKI или при отключенном PKI, то есть, когда в конфигурационном файле ноды параметру node.crypto.pki.mode присвоено значение TEST
или OFF
. При использовании PKI метод /transactions/sign недоступен.
При подписании транзакции 104 в поле contractId
укажите идентификатор транзакции 103 для вызываемого смарт-контракта (поле id
ответа метода sign
).
Примеры подписания и отправки транзакции при помощи методов sign
и broadcast
с использованием ключа, сохраненного в keystore ноды: