Установка и использование платформы

Разработка и применение смарт-контрактов

Определение и общее описание работы смарт-контрактов блокчейн-платформы Waves Enterprise приведено в статье Смарт-контракты.

Подготовка к работе

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

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

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

Также вы можете загрузить Docker-образ контракта из репозитория, не указанного в конфигурационном файле ноды, при помощи транзакции 103 CreateContract, инициирующей создание смарт-контракта. Подробнее см. раздел Создание и установка смарт-контракта, а также описание транзакции 103. CreateContract.

При работе в Mainnet в конфигурационном файле предустановлен открытый репозиторий Waves Enterprise.

Разработка смарт-контракта

Смарт-контракты блокчейн-платформы Waves Enterprise могут разрабатываться на любом предпочтительном вам языке программирования и реализовывать любые алгоритмы. Готовый код смарт-контракта упаковывается в Docker-образ с используемыми protobuf-файлами (при использовании gRPC) или параметрами авторизации смарт-контракта (при использовании REST API).

Важно

Начиная с релиза 1.12 (после активации фичи 1120) создание и вызов REST контрактов невозможны. В последующих релизах REST контракты невозможно будет исполнить. Рекомендуется использовать gRPC контракты вместо REST контрактов.

Примеры кода смарт-контрактов на Python с применением gRPC и REST API-методов для обмена данными с нодой, а также пошаговое руководство по созданию соответствующих Docker-образов приведены в следующих статьях:

Для разработки, тестирования и развертывания смарт-контрактов в публичных блокчейн сетях Waves Enterprise вы можете использовать инструментарии JS Сontract SDK Toolkit или Java/Kotlin Сontract SDK Toolkit. Они описаны в следующих разделах:

Загрузка смарт-контракта в репозиторий

Если вы работаете в блокчейн-сети Waves Enterprise Mainnet, то чтобы поместить ваш смарт-контракт в открытый репозиторий, свяжитесь со службой технической поддержки Waves Enterprise.

При работе в частной сети, загрузите Docker-образ смарт-контракта в собственный репозиторий Docker registry как описано ниже.

Размещение смарт-контракта в блокчейне

После загрузки смарт-контракта в репозиторий опубликуйте его в сети при помощи транзакции 103. CreateContract.

Для этого подпишите транзакцию посредством клиента блокчейн-платформы, метода sign REST API или метода JavaScript SDK.

Данные, возвращенные в ответе метода, подаются на вход при публикации транзакции 103.

Ниже приведены примеры подписания и отправки транзакции при помощи методов sign и broadcast. В примерах транзакции подписываются ключом, сохраненным в keystore ноды.

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

Примечание

Если в дальнейшем код смарт-контракта будет обновлён, то контракт необходимо будет опубликовать заново. Для этого используйте транзакцию 107. UpdateContract Transaction.

Важно

Смарт-контракт не помещается в блокчейн; в блокчейн попадает транзакция, в теле которой зафиксирован хэш Docker-образа, в который упакован код смарт-контракта. Таким образом хэш Docker образа смарт-контракта оказывается на всех нодах блокчейна, но сам смарт-контракт находится в репозитории Docker registry вне блокчейн сети.

Исполнение смарт-контракта

После размещения смарт-контракта в блокчейне он может быть вызван при помощи транзакции 104 CallContract Transaction.

Эта транзакция также может быть подписана и отправлена в блокчейн посредством клиента блокчейн-платформы, метода sign REST API или метода JavaScript SDK. При подписании транзакции 104 в поле contractId укажите идентификатор транзакции 103 для вызываемого смарт-контракта (поле id ответа метода sign).

Примеры подписания и отправки транзакции при помощи методов sign и broadcast с использованием ключа, сохраненного в keystore ноды: