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

gRPC: получение информации о результатах исполнения вызова смарт-контракта

Для получения информации о результатах вызовов смарт-контрактов служит gRPC сервис ContractStatusService.

У сервиса есть два метода, описанных в protobuf-файле util_contract_status_service.proto:

  • ContractExecutionStatuses,

  • ContractsExecutionEvents.

Важно

Типы данных полей для запросов и ответов указаны в protobuf-файле.

Используйте метод ContractExecutionStatuses для получения информации о результатах исполнения вызова отдельного смарт-контракта. Метод принимает запрос ContractExecutionRequest, который требует ввода параметра tx_id – идентификатора вызывающей транзакции смарт-контракта, информацию о cостоянии которого необходимо получить.

Используйте метод ContractsExecutionEvents для подписки на поток (стрим) с результатами исполнения вызова всех смарт-контрактов. Метод не требует ввода входных параметров.

Важно

Помимо методов сервиса ContractStatusService, для получения информации о результатах исполнения вызова смарт-контракта можно использовать следующие методы сервиса ContractService:

Эти методы могут использоваться и как контрактные, и как публичные.

Информация о результатах исполнения вызова смарт-контракта

В ответе на запрос оба метода – ContractExecutionStatuses и ContractsExecutionEvents – возвращают следующие данные смарт-контракта:

  • senderAddress – адрес участника, который отправил смарт-контракт в блокчейн;

  • senderPublicKey – публичный ключ участника, который отправил смарт-контракт в блокчейн;

  • tx_id – идентификатор транзакции вызова смарт-контракта;

  • Status – информация об исполнении смарт-контракта:

    • 0 – успешно исполнен (SUCCESS);

    • 1 – бизнес ошибка, контракт не исполнен, вызов отклонён (ERROR);

    • 2 – системная ошибка в ходе исполнения смарт-контракта (FAILURE).

  • code – код ошибки в ходе выполнения смарт-контракта (при наличии);

  • message – сообщение о статусе транзакции; содержит дополнительную информацию о статусе, указанном в поле status, например,

    "message": "Smart contract transaction successfully mined";
    
  • timestamp – временная метка в формате Unix Timestamp, в миллисекундах, отмечающая время вызова смарт-контракта;

  • signature – подпись транзакции.

Примечание

REST метод GET /contracts/status/{id} возвращает ту же информацию, что и gRPC метод ContractExecutionStatuses.

Смотрите также