Skip to content

Транзакции

Транзакция - это подписанное заявление на выполнение работы на блокчейне. инструкции, контрактный звонок, IVM байт-код, или доказанный IVM Убийство. Умные контракты для текущей модели исполнения контракта.

Транзакции выполняют работу, изменяющую состояние или выполняющуюся. Инспекция только для чтения использует подписанные запросы или публичные конечные точки чтения и не создаёт транзакцию.

Транзакция, допущенная к обязательному блоку, сохраняется с результатом ее исполнения, включая отказ от выполнения. Запросы, отклоненные до приема блоков, такие как недействительный конверт или сделка, отказавшаяся в очереди, не хранятся в блоке.

Для движения активов, обеспечивающих сохранение конфиденциальности, см. Анонимные транзакции.Анонимические транзакции используют защищенные банкноты активов, обязательства, аннулирующие и доказательства нулевого знания вместо изменений баланса между счетами.

Для доказательств о выбранных прозрачных эффектах исполнения см. FastPQ. FastPQ потребляет свидетелей исполнения после нормальной выполнения транзакции и создает детерминистические партии доказательств для поддерживаемых переходов состояния.

Попробуй на Taira

Используйте маршруты исследователя для проверки недавних публичных блоков Taira и статусов транзакций без подписанного счета:

bash
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 из списка и проверьте маршрут исследователя подробно:

bash
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, а затем сначала финансируйте подписавшегося через общественный кран:

bash
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 к представлению сделки:

bash
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}Читайте канонический статус дополнения или искупления

Проверяйте готовность актива перед созданием офлайн-операции:

bash
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 обеспечивает ключ к освобождению.

Типичный поток:

  1. Спросите о готовности и остановитесь, если ready является ложным или применяется какой-либо блокировщик.
  2. Используйте напечатанный Swift или JVM кошелек для создания канонического дополнения архива, подачи его и сохранения как состояния входной записки, так и операции ID до тех пор, пока операция не достигнет окончательного состояния цепи.
  3. При необходимости решать линейку регистрации получателя, создавать и проверять каждую передачу сверстников на местном уровне, а также сохранять состояние зашифрованной записки до признания передачи.
  4. Когда получатель находится в Интернете, создавайте архив канонического искупления, представьте его и опросите его ресурс работы до окончания.

Леджер не может наблюдать противоречивую передачу в автономном режиме до тех пор, пока состояние записи не вернется через онлайн-цикл жизни. Следовательно, политика кошелька и оператора должна обеспечивать ограничения стоимости, истечение срока действия, принятые эмитенты, долгосрочное локальное хранение; и окна примирения.

Вот пример создания новой сделки с Grant В этой сделке мышь предоставляет Алисе указанную роль (role_idПроверка . полный пример.

rust
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);