Установка и использование платформы
gRPC: передача данных конфиденциальных смарт-контрактов¶
Для передачи данных конфиденциальных смарт-контрактов служит gRPC сервис ConfidentialContractService.
Следующие методы сервиса описаны в protobuf-файле confidential_contract_service.proto:
ConfidentialCall,
ConfidentialExecutedTxByExecutableTxId,
GetContractKeys.
Важно
Типы данных полей для запросов и ответов указаны в protobuf-файле.
Важно
Вызов методов ConfidentialCall, ConfidentialExecutedTxByExecutableTxId, GetContractKeys доступен только при использовании oAuth токена с ролью ConfidentialContractUser или специального api-key.
ConfidentialCall¶
Метод ConfidentialCall принимает запрос ConfidentialCallRequest, содержащий следующие поля:
broadcast– флаг, который отражает необходимость бродкаста сформированной транзакции CallContract; по умолчанию имеет значениеtrue; значениеfalseиспользуется для формирования атомарного контейнера;commitmentVerification– флаг, который отражает необходимость сверки коммитмента входных данных и предоставления со стороны пользователя ключа для формирования коммитмента; по умолчанию имеет значениеfalse; при значенииfalseнода сама формирует ключ случайным образом и рассчитывает коммитмент;sender– адрес отправителя данных конфиденциального смарт-контракта;contractId– идентификатор конфиденциального смарт-контракта;contractVersion– версия конфиденциального смарт-контракта;params– при работе с транзакцией CallContract – входные данные конфиденциального смарт-контракта, представленные как массив объектов; вносятся при помощи следующих полей:key– ключ параметра;type– тип данных параметра;value– значение параметра.
timestamp– временная метка в формате Unix Timestamp (в миллисекундах), отмечающая время вызова смарт-контракта;atomicBadge– флаг, который отражает возможность включать транзакцию в атомарную транзакцию;fee– комиссия за транзакцию;feeAssetId– идентификатор токена комиссии;commitment– коммитмент;commitmentKey– ключ коммитмента.
Метод ConfidentialCall принимает все данные, необходимые, чтобы отправить транзакцию CallContract, отправляет её, и в ответе возвращает protobuf, в который входит транзакция CallContract версии 6 и confidentialInput конфиденциального смарт-контракта.
Примечание
REST метод POST /confidential-contracts/call аналогичен gRPC методу ConfidentialCall.
ConfidentialExecutedTxByExecutableTxId¶
Метод ConfidentialExecutedTxByExecutableTxId принимает запрос, содержащий идентификатор транзакции вызова конфиденциального смарт-контракта transaction_id.
Метод возвращает транзакцию записи результата исполнения конфиденциального смарт-контракта в его стейт (105.ExecutedContract версии 4), конфиденциальные входные данные для запуска контракта (ConfidentialInput) и конфиденциальные результаты исполнения контракта (ConfidentialOutput) участникам соответствующей политики (группы авторизации).
В свою очередь, транзакция 105.ExecutedContract содержит все поля транзакций 103. CreateContract, 104. CallContract, 107. UpdateContract смарт-контракта.
Примечание
REST метод GET /confidential-contracts/tx/{executable-tx-id} аналогичен gRPC методу ConfidentialExecutedTxByExecutableTxId.
Примечание
Существует аналогичный методу ConfidentialExecutedTxByExecutableTxId REST метод для обычных (не конфиденциальных) смарт-контрактов: GET /contracts/executed-tx-for/{id}.
GetContractKeys¶
Метод возвращает значения выбранных ключей из стейта конфиденциального смарт-контракта участникам соответствующей политики (группы авторизации). Результат исполнения смарт-контракта возвращается как key-value пары в виде массива объектов с указанием типа данных.
Примечание
Существует аналогичный методу GetContractKeys REST метод GET /confidential-contracts/{contractId}.
Примечание
Существует аналогичный методу GetContractKeys gRPC метод для обычных (не конфиденциальных) смарт-контрактов GetContractKeys.