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

Пример смарт-контракта с использованием REST API

Важно

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

Описание и листинг программы

В разделе рассматривается пример создания и запуска простого смарт-контракта. Контракт выполняет инкремент переданного на вход числа при каждом вызове.

Листинг программы:

Пошаговое описание работы:

  • Программа ожидает получить структуру данных в формате json с полем params;

  • считывает значение поля а;

  • возвращает результат в виде значения поля «{a}+1» в формате json.

Пример входящих параметров:

"params":[
    {
        "key":"a",
        "type":"integer",
        "value":1
    }
]

Авторизация смарт-контракта c REST API

Для работы с REST API ноды смарт-контракту необходима авторизация. Чтобы смарт-контракт корректно работал с методами API, выполните следующие действия:

  1. В переменных окружения смарт-контракта должны быть определены следующие параметры:

  • NODE_API – URL-адрес к REST API ноды ;

  • API_TOKEN – токен авторизации для смарт-контракта;

  • COMMAND – команды для создания и вызова смарт-контракта;

  • TX – транзакция, необходимая Docker-контракту для работы (103 - 107).

  1. Разработчик Docker-контракта присваивает значение переменной API_TOKEN заголовку запроса X-Contract-Api-Token. В переменную API_TOKEN нода прописывает JWT-токен авторизации при создании и выполнении контракта.

  2. Код контракта должен передавать полученный токен в заголовке запроса (X-Contract-Api-Token) при каждом обращении к API ноды.

Создание смарт-контракта

1. Поместите файл contract.py с кодом в директорию, которая будет содержать файлы вашего смарт-контракта.

2. Создайте shell-скрипт run.sh, который будет запускать код смарт-контракта в контейнере:

#!/bin/sh

python contract.py

Поместите файл run.sh в корневую директорию вашего смарт-контракта.

3. Создайте сценарный файл Dockerfile для сборки и управления запуском смарт-контракта. При разработке на Python основой образа вашего смарт-контракта может служить официальный образ Python на основе Alpine Linux python:alpine3.8.

Пример Dockerfile:

FROM python:alpine3.8
ADD contract.py /
ADD run.sh /
RUN chmod +x run.sh
CMD exec /bin/sh -c "trap : TERM INT; (while true; do sleep 1000; done) & wait"

Поместите Dockerfile в корневую директорию вашего смарт-контракта.

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

Если вы работаете в частной сети, соберите смарт-контракт самостоятельно и разместите его в собственном репозитории.