Skip to content

Գործարքներ

Գործարքը ստորագրված խնդրանք է բլոկչեյնի վրա աշխատանք կատարելու համար: Գործադրելի օգտակար բեռը կարող է լինել հրահանգների կարգավորված հաջորդականություն , պայմանագրի զանգ, IVM բայթ կոդ կամ ապացուցված IVM գործարկում: Հիմնական պայմանագրերի կատարման մոդելի համար դիտարկեք :

Գործարքները կատարում են վիճակը փոխող կամ իրականացվող աշխատանքներ: Միայն ընթերցված ստուգումը օգտագործում է ստորագրված հարցումներ կամ հանրային ընթերցման վերջ կետեր եւ չի ստեղծում գործարք:

Պայմանավորված բլոկի մեջ ընդունված գործարքը պահվում է իր կատարման արդյունքով, ներառյալ կատարման մերժումը: Բլոկի մուտքագրումից առաջ մերժված դիմումները, ինչպիսիք են անվավեր փաթեթը կամ հերթով մերժված գործարքն, չեն պահվում բլոկում:

Գաղտնիությունը պահպանող ակտիվների տեղաշարժի համար դիտեք Անանուն գործարքներ. Անանուն փոխանցումները օգտագործում են պաշտպանված ակտիվներ, պարտավորություններ, չեղյալ հայտարարիչներ եւ զրոյական գիտելիքների ապացույցներ, փոխարենը հանրային հաշիվ-հաշվի հավասարակշռության փոփոխությունները։

Ընտրված թափանցիկ կատարման էֆեկտների վերաբերյալ ապացույցի փաստաթղթերի համար տես FastPQ. FastPQ օգտագործում է կատարման վկաները գործարքի սովորական կատարումից հետո եւ կառուցում է դետերմինիստիկ ապացույցի խմբաքանակներ աջակցվող պետության անցումների համար:

Փորձեք այն Taira

Օգտագործեք Explorer երթուղիները՝ առանց ստորագրման հաշիվի վերջին հանրային 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 ցուցակից եւ ստուգեք Explorer- ի մանրամասն երթուղին.

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-ի վճարովի օրինակների համար պահեք ջրհեղեղի օգնականը Get 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, սպասեք եւ կրկին փորձեք նախքան գործարքի ինքնուրույն debugging- ը:

Այնուհետեւ գործարքը ներկայացնելու ժամանակ միացրեք 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"

Offline գործարքներ

Iroha ունի երկու անջատված գործարքների աշխատանքային հոսք.

  • Offline ստորագրումը ստեղծում է սովորական ստորագրված գործարք, մինչ ստորագրող սարքը անջատված է: Գործարքը չի մշակվում, քանի դեռ առցանց հաճախորդը ստորագրված փաթեթը չի ներկայացրել Torii, այնպես որ այն դեռ պետք է ճիշտ շղթան ID, լիազորություն, թույլտվություններ, վճարներ եւ գործարքի կյանքի տեւողությունը:
  • Kagemusha Offline Cash- ը բարձրանում է դրամապանակը, քանի դեռ այն առցանց է, աջակցում է ստացողի կողմից նախաձեռնված դրամապանակից դրամապիկի փոխանցումները, քանի դեռ երկու դրամապանները անջատված են, եւ կփոխհատուցի ստացված նոտայի վիճակը, երբ ստացողը վերադառնում է առցանց:

Torii-ը բացատրում է Kagemusha-ի ամբողջական կյանքի ցիկլը՝ /v1/offline/*:

մեթոդ եւ վերջնական կետՆպատակ
GET /v1/offline/readinessԳնահատեք Kagemusha պատրաստակամությունը մեկի համար 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 ապահովում է idempotency բանալին:

Տիպիկ հոսքը հետեւյալն է.

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