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

Общая настройка платформы: настройка исполнения смарт-контрактов

Для работы со смарт-контрактами нода использует два типа соединения, для каждого из которых необходимо обеспечить защиту канала с помощью TLS:

  1. Соединение с docker-хостом – удалённой машиной, на которой запускаются смарт-контракты. На этой машине используется docker-библиотека, которая обращается на сокет по своим протоколам. Для неё можно включить опцию безопасного соединения, которое в этой документации обозначается как «docker-TLS». Соединение docker-TLS настраивается в секции node.docker-engine.docker-tls конфигурационного файла ноды; эта настройка описана ниже в этом разделе;

  2. Соединение, которое открывает запущенный смарт-контракт в сторону ноды по протоколу gRPC.

    Это подключение по API, так как точка подключения смарт-контракта к ноде такая же, как и для любого другого пользователя или приложения. Этот API настраивается в секции node.api.grpc, в частности для него необходимо обеспечить защиту канала TLS. Пример такой настройки дан в разделе Примеры конфигурационных файлов ноды.

Если вы планируете разработку и исполнение смарт-контрактов в вашем блокчейне, настройте параметры их исполнения в секции docker-engine конфигурационного файла ноды:

docker-engine {
  enable = yes
  integration-tests-mode-enable = no
  # docker-host = "unix:///var/run/docker.sock"
  execution-limits {
    startup-timeout = 10s
    timeout = 10s
    memory = 512
    memory-swap = 0
    }
  reuse-containers = yes
  remove-container-after = 10m
  allow-net-access = yes
  remote-registries = [
    {
     domain = "myregistry.com:5000"
     username = "user"
     password = "password"
    }
  ]
  check-registry-auth-on-startup = no
  # default-registry-domain = "registry.yourdomain.com"
  contract-execution-messages-cache {
    expire-after = 60m
    max-buffer-size = 10
    max-buffer-time = 100ms
    utx-cleanup-interval = 1m
    contract-error-quorum = 2
  }
  contract-auth-expires-in = 1m
  grpc-server {
    # host = "192.168.97.3"
    port = 6865
    }
  remove-container-on-fail = yes
  docker-tls {
    tls-verify = yes
    cert-path = "/node/certificates"
    }
  contracts-parallelism = 8
}
  • enable – включение обработки транзакций для Docker-контрактов.

  • integration-tests-mode-enable – режим тестирования Docker-контрактов. При включении этой опции смарт-контракты исполняются локально в контейнере.

  • docker-host – адрес демона docker (опционально). Если это поле закомментировано, адрес демона для исполнения смарт-контрактов будет взят из системного окружения.

  • startup-timeout – время, отводимое на создание контейнера контракта и его регистрацию в ноде (в секундах).

  • timeout – время, отводимое на выполнение контракта (в секундах).

  • memory – ограничение по памяти для контейнера контракта (в мегабайтах).

  • memory-swap – выделяемый объем виртуальной памяти для контейнера контракта (в мегабайтах).

  • reuse-containers – использование одного контейнера для нескольких контрактов, использующих один и тот же Docker-образ. Включение опции - yes, отключение - no.

  • remove-container-after – промежуток времени бездействия контейнера, по прошествии которого он будет удален.

  • allow-net-access – разрешение доступа к сети.

  • remote-registries – адреса Docker-репозиториев и настройки авторизации к ним.

  • check-registry-auth-on-startup – проверка авторизации для Docker-репозиториев при запуске ноды. Включение опции - yes, отключение - no.

  • default-registry-domain – адрес Docker-репозитория по умолчанию (опционально). Этот параметр используется, если в имени образа контракта не указан репозиторий.

  • contract-execution-messages-cache – секция настроек кэша со статусами исполнения транзакций по docker контрактам;

  • expire-after – время хранения статуса смарт-контракта.

  • max-buffer-size и max-buffer-time – настройки объема и времени хранения кэша статусов.

  • utx-cleanup-interval – интервал, по прошествии которого невалидные транзакции (со статусом Error) удаляются из UTX-пула ноды, которая не является майнером. Значение по умолчанию – 1m.

  • contract-error-quorum – минимальное количество полученных от разных нод-майнеров сообщений, в которых статус транзакции по вызову смарт-контракта содержит бизнес-ошибку (Error); когда указанное в параметре количество сообщений получено, транзакция удаляется из UTX-пула ноды, которая не является майнером. Значение по умолчанию – 2.

  • contract-auth-expires-in – время жизни токена авторизации, используемого смарт-контрактами для вызовов к ноде.

  • grpc-server – секция настроек gRPC сервера для работы Docker-контрактов с gRPC API.

  • host – сетевой адрес ноды (опционально).

  • port – порт gRPC-сервера. Укажите порт прослушивания gRPC-запросов, использующийся платформой.

  • remove-container-on-fail – удаление контейнера, если при его старте произошла ошибка. Включение опции – yes, отключение – no.

  • tls-verify – флаг включения или отключения канала связи по протоколу TLS; если установлено значение yes, то выполняется поиск сертификатов в директории, указанной в параметре certs-path; если указано значение no, то поиск сертификатов не выполняется.

    Важно

    При использовании алгоритмов ГОСТ криптографии взаимодействие должно осуществляться по каналу связи по протоколу TLS, то есть параметр tls-verify должен иметь значение yes.

  • certs-path – путь до директории с сертификатами для TLS; по умолчанию параметр имеет значение {node.directory}/certificates.

  • contracts-parallelism – параметр определяет количество параллельно выполняемых транзакций всех контейнеризированных смарт-контрактов. По умолчанию параметр имеет значение 8.