Գործարքներ
Գործարքը ստորագրված խնդրանք է բլոկչեյնի վրա աշխատանք կատարելու համար: Գործադրելի օգտակար բեռը կարող է լինել հրահանգների կարգավորված հաջորդականություն , պայմանագրի զանգ, IVM բայթ կոդ կամ ապացուցված IVM գործարկում: Հիմնական պայմանագրերի կատարման մոդելի համար դիտարկեք :
Գործարքները կատարում են վիճակը փոխող կամ իրականացվող աշխատանքներ: Միայն ընթերցված ստուգումը օգտագործում է ստորագրված հարցումներ կամ հանրային ընթերցման վերջ կետեր եւ չի ստեղծում գործարք:
Պայմանավորված բլոկի մեջ ընդունված գործարքը պահվում է իր կատարման արդյունքով, ներառյալ կատարման մերժումը: Բլոկի մուտքագրումից առաջ մերժված դիմումները, ինչպիսիք են անվավեր փաթեթը կամ հերթով մերժված գործարքն, չեն պահվում բլոկում:
Գաղտնիությունը պահպանող ակտիվների տեղաշարժի համար դիտեք Անանուն գործարքներ. Անանուն փոխանցումները օգտագործում են պաշտպանված ակտիվներ, պարտավորություններ, չեղյալ հայտարարիչներ եւ զրոյական գիտելիքների ապացույցներ, փոխարենը հանրային հաշիվ-հաշվի հավասարակշռության փոփոխությունները։
Ընտրված թափանցիկ կատարման էֆեկտների վերաբերյալ ապացույցի փաստաթղթերի համար տես FastPQ. FastPQ օգտագործում է կատարման վկաները գործարքի սովորական կատարումից հետո եւ կառուցում է դետերմինիստիկ ապացույցի խմբաքանակներ աջակցվող պետության անցումների համար:
Փորձեք այն Taira
Օգտագործեք Explorer երթուղիները՝ առանց ստորագրման հաշիվի վերջին հանրային 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 ցուցակից եւ ստուգեք Explorer- ի մանրամասն երթուղին.
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, այնուհետեւ նախ ֆինանսավորեք ստորագրողին հանրային ջրահեղչի միջոցով.
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 վճարային ակտիվի մետադատները.
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} | Կարդացեք վերանորոգման կամ փրկության կանոնիկ վիճակը |
Համացանցից դուրս գործողությունը կառուցելուց առաջ ստուգեք ակտիվի պատրաստվածությունը.
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 բանալին:
Տիպիկ հոսքը հետեւյալն է.
- Պատրաստության հարցում եւ դադարեցում, եթե
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);