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 бойынша алым төлейтін мысалдар үшін кранның көмекшісін ден сақтаңыз, Taira бойынша Testnet XOR-ді 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 Артефакт жиынтығы. Сабақ, толықтыру және құнын өтеу өтiнiштерi 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);