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

REST API: работа с конфиденциальными смарт-контрактами

https://img.shields.io/badge/auth-required-orange.svg

Для работы с конфиденциальными смарт-контрактами предусмотрены методы группы confidential-contracts.

POST /confidential-contracts/call

Для передачи данных конфиденциальных смарт-контрактов вне блокчейна служит REST метод POST /confidential-contracts/call.

Важно

Вызов метода POST /confidential-contracts/call доступен только при использовании oAuth токена с ролью ConfidentialContractUser или специального api-key.

Метод POST /confidential-contracts/call недоступен для контрактов без поддержки конфиденциальности (isConfidential = false).

Метод POST /confidential-contracts/call возвращает ошибку, если среди участников группы авторизации (политики) менее трёх нод с ролью contract-validator.

В запросе метода указываются следующие данные:

  • broadcast – флаг, который отражает необходимость бродкаста сформированной транзакции CallContract; по умолчанию имеет значение true; значение false используется для формирования атомарного контейнера;

  • commitmentVerification – флаг, который отражает необходимость сверки коммитмента входных данных и предоставления со стороны пользователя ключа для формирования коммитмента; по умолчанию имеет значение false; при значении false нода сама формирует ключ случайным образом и рассчитывает коммитмент; если commitmentVerification имеет значение true, и пользователь не передал commitment или commitmentKey, либо передал неверно сформированное значение commitment или неверный commitmentKey, метод возвращает ошибку;

  • sender – адрес отправителя данных конфиденциального смарт-контракта;

  • contractId – идентификатор конфиденциального смарт-контракта;

  • contractVersion – версия конфиденциального смарт-контракта;

  • params – при работе с транзакцией CallContract – входные данные конфиденциального смарт-контракта, представленные как массив объектов; вносятся при помощи следующих полей:

    • key – ключ параметра;

    • type – тип данных параметра;

    • value – значение параметра.

  • timestamp – временная метка в формате Unix Timestamp (в миллисекундах), отмечающая время вызова смарт-контракта;

  • atomicBadge – флаг, который отражает возможность включать транзакцию в атомарную транзакцию;

  • fee – комиссия за транзакцию;

  • feeAssetId – идентификатор токена комиссии;

  • commitment – коммитмент;

  • commitmentKey – ключ коммитмента.

Метод POST /confidential-contracts/call принимает все данные, необходимые, чтобы отправить транзакцию CallContract версии 6, отправляет её, и в ответе возвращает protobuf, в который входит транзакция CallContract версии 6 и конфиденциальные входные данные для запуска конфиденциального смарт-контракта (ConfidentialInput).

Пример ответа:

Примечание

REST методу POST /confidential-contracts/call аналогичен gRPC метод ConfidentialCall.

GET ​/confidential-contracts/{contractId}

Метод возвращает значения выбранных ключей из стейта конфиденциального смарт-контракта участникам соответствующей политики (группы авторизации).

Важно

Вызов метода GET ​/confidential-contracts/{contractId} доступен только участникам соответствующей политики и только при использовании oAuth токена с ролью ConfidentialContractUser или специального api-key.

В запросе метода GET ​/confidential-contracts/{contractId} указываются следующие данные:

  • contractId – идентификатор смарт-контракта;

  • limit – ограничение количества выводимых блоков данных;

  • offset – количество блоков данных для пропуска в выводе;

  • matches – опциональный параметр для составления регулярного выражения, по которому фильтруются ключи.

Пример ответа для участников политики:

Пример ответа для адреса, который не является участником политики:

Примечание

Существуют аналогичные методы для обычных смарт-контрактов: GET /contracts/{contractId} и POST /contracts/{contractId}.

GET /confidential-contracts/tx/{executable-tx-id}

Метод возвращает транзакцию записи результата исполнения конфиденциального смарт-контракта в его стейт (105.ExecutedContract версии 4), конфиденциальные входные данные для запуска контракта (ConfidentialInput) и конфиденциальные результаты исполнения контракта (ConfidentialOutput) участникам соответствующей политики (группы авторизации).

В свою очередь, транзакция 105.ExecutedContract содержит все поля транзакций 103. CreateContract, 104. CallContract, 107. UpdateContract смарт-контракта.

Важно

Вызов метода GET /confidential-contracts/tx/{executable-tx-id} доступен только участникам соответствующей политики при использовании oAuth токена с ролью ConfidentialContractUser или специального api-key.

Пример ответа для участников политики:

Пример ответа для адреса, который не является участником политики:

Примечание

Существует аналогичный метод для обычных смарт-контрактов: GET /contracts/executed-tx-for/{id}.