Транзакции
Транзакция - это подписанное заявление на выполнение работы на блокчейне. инструкции, контрактный звонок, IVM байт-код, или доказанный IVM Убийство. Умные контракты для текущей модели исполнения контракта.
Транзакции выполняют работу, изменяющую состояние или выполняющуюся. Инспекция только для чтения использует подписанные запросы или публичные конечные точки чтения и не создаёт транзакцию.
Транзакция, допущенная к обязательному блоку, сохраняется с результатом ее исполнения, включая отказ от выполнения. Запросы, отклоненные до приема блоков, такие как недействительный конверт или сделка, отказавшаяся в очереди, не хранятся в блоке.
Для движения активов, обеспечивающих сохранение конфиденциальности, см. Анонимные транзакции.Анонимические транзакции используют защищенные банкноты активов, обязательства, аннулирующие и доказательства нулевого знания вместо изменений баланса между счетами.
Для доказательств о выбранных прозрачных эффектах исполнения см. FastPQ. FastPQ потребляет свидетелей исполнения после нормальной выполнения транзакции и создает детерминистические партии доказательств для поддерживаемых переходов состояния.
Попробуй на Taira
Используйте маршруты исследователя для проверки недавних публичных блоков Taira и статусов транзакций без подписанного счета:
curl -fsS 'https://taira.sora.org/v1/explorer/blocks?page=1&per_page=3' \
| jq '{pagination, blocks: [.items[] | {height, hash, transactions_total, transactions_rejected}]}'
curl -fsS 'https://taira.sora.org/v1/explorer/transactions?page=1&per_page=5' \
| jq '{pagination, txs: [.items[] | {hash, block, status, executable}]}'Чтобы следить за транзакцией, которую подала ваша приложение ранее, скопируйте hash из списка и проверьте маршрут исследователя подробно:
TX_HASH='<transaction-hash>'
curl -fsS "https://taira.sora.org/v1/explorer/transactions/$TX_HASH" \
| jq '{hash, block, status, authority, executable}'Для представления транзакции требуется подписанный конверт Norito, правильная цепочка ID, метаданные о сборах и счет Taira, финансируемый кранами.
Для примеров, оплачиваемых платой на Taira, сохранить помощник крана из Получайте Testnet XOR на Taira как taira_faucet_claim.py, а затем сначала финансируйте подписавшегося через общественный кран:
export TAIRA_ACCOUNT_ID='<TAIRA_I105_ACCOUNT_ID>'
export TAIRA_FEE_ASSET=6TEAJqbb8oEPmLncoNiMRbLEK6tw
curl -fsS https://taira.sora.org/v1/accounts/faucet/puzzle | jq .
python3 taira_faucet_claim.py "$TAIRA_ACCOUNT_ID"
iroha --config ./taira.client.toml ledger asset get \
--definition "$TAIRA_FEE_ASSET" \
--account "$TAIRA_ACCOUNT_ID"Если головоломка крана или маршрут претензии возвращается 502, подождите и попытайтесь снова, прежде чем дебгурировать саму транзакцию.
Затем присоедините метаданные актива сбора Taira к представлению сделки:
printf '{"gas_asset_id":"%s"}\n' "$TAIRA_FEE_ASSET" > taira.tx-metadata.json
iroha --config ./taira.client.toml \
--metadata ./taira.tx-metadata.json \
ledger transaction ping --msg "faucet-funded taira transaction"Оффлайн-транзакции
Iroha имеет два потока работы с офлайн-транзакциями:
- Оффлайн подпись создает нормальную подписанную транзакцию, в то время как подписывающее устройство отключено. Транзакция не обрабатывается до тех пор, пока онлайн-клиент не представит подписанный конверт Torii, поэтому ему все равно нужна правильная цепочка ID, полномочия, разрешения, сборы и срок службы транзакции.
- Кагемуша офлайн наличные деньги загружает кошелек, пока он находится в Интернете, поддерживает передачу кошелька-кошелька, инициированную получателем, когда оба кошелька не работают в Интернете и выкупает полученное состояние записки, когда получатель возвращается в Интернет.
Torii раскрывает полный жизненный цикл Kagemusha под /v1/offline/*:
| Метод и конечный пункт | Цель . |
|---|---|
GET /v1/offline/readiness | Оценить готовность Кагемуши для одного asset_definition_id |
POST /v1/offline/receiver-lineage | Разрешить подтверждающую активную регистрационную линию для подписанного заявления получателя |
POST /v1/offline/top-up | Представьте подписанную операцию по переполнению с интернета на офлайн |
POST /v1/offline/redeem | Представьте подписанную операцию выкупа в офлайн режиме |
GET /v1/offline/operations/{operation_id} | Читайте канонический статус дополнения или искупления |
Проверяйте готовность актива перед созданием офлайн-операции:
curl -fsS --get https://taira.sora.org/v1/offline/readiness \
--data-urlencode 'asset_definition_id=<canonical_asset_definition_id>' \
| jq '{ready, blockers, artifact_set}'Готовность связывает кошелек с активным мостом . ABI 21 и удостоверенные V4 Сборник артефактов. Линейка, дополнение и запросы о выкупе используют application/x-norito Дополнение и возвращение 202 Accepted с а Location заголовок, указывающий на ресурс операции; встроенная операция не нулевая ID обеспечивает ключ к освобождению.
Типичный поток:
- Спросите о готовности и остановитесь, если
readyявляется ложным или применяется какой-либо блокировщик. - Используйте напечатанный Swift или JVM кошелек для создания канонического дополнения архива, подачи его и сохранения как состояния входной записки, так и операции ID до тех пор, пока операция не достигнет окончательного состояния цепи.
- При необходимости решать линейку регистрации получателя, создавать и проверять каждую передачу сверстников на местном уровне, а также сохранять состояние зашифрованной записки до признания передачи.
- Когда получатель находится в Интернете, создавайте архив канонического искупления, представьте его и опросите его ресурс работы до окончания.
Леджер не может наблюдать противоречивую передачу в автономном режиме до тех пор, пока состояние записи не вернется через онлайн-цикл жизни. Следовательно, политика кошелька и оператора должна обеспечивать ограничения стоимости, истечение срока действия, принятые эмитенты, долгосрочное локальное хранение; и окна примирения.
Вот пример создания новой сделки с Grant В этой сделке мышь предоставляет Алисе указанную роль (role_idПроверка . полный пример.
let grant_role = Grant::account_role(role_id, alice_id);
let grant_role_tx = TransactionBuilder::new(chain_id, mouse_id)
.with_instructions([grant_role])
.sign(mouse_private_key);