Установка и использование платформы
REST API: работа с конфиденциальными смарт-контрактами¶
Для работы с конфиденциальными смарт-контрактами предусмотрены методы группы 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/{contractId} gRPC метод: GetContractKeys.
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}.
Примечание
REST методу GET /confidential-contracts/tx/{executable-tx-id} аналогичен gRPC метод ConfidentialExecutedTxByExecutableTxId.