Խելացի պայմանագրեր
Iroha գործարքները կատարում են Executable օգտակար բեռներ: Ներկայիս տվյալների մոդելը աջակցում է հետեւյալը.
Executable::Instructions: Iroha հատուկ հրահանգների կարգավորված հավաքածուExecutable::ContractCall: տեղակայված պայմանագրի առկայության հետ կապված կողմնակի հղումExecutable::Ivm:Iroha VM բայթ կոդըExecutable::IvmProved: Iroha VM բայթային կոդ՝ նախահաշվարկված հրահանգների գերկատարման եւ ապացույցի պարտավորությունների հետ:
Kotodama-ն Iroha-ի բարձր մակարդակի խելացի պայմանագրերի լեզուն է։ .ko սկզբնաղբյուր ֆայլը կոմպիլացվում է դետերմինիստական IVM բայթկոդի, որը տեղակայման համար պայմանականորեն պահվում է որպես .to արտեֆակտ։ Kotodama-ն նախատեսված է միայն IVM-ի համար։ Այն նախատեսված չէ RISC-V-ի կամ WebAssembly-ի համար։
Առաջին թողարկումն աջակցում է միայն ABI-ի 1-ին տարբերակը։ syscall-ի և pointer-ABI-ի քաղաքականությունն անվերապահորեն կիրառվում է պայմանագրի ընդունման և կատարման ժամանակ․ կատարման ժամանակի համատեղելիության փոխարկիչ չկա։
Երբ պետք է օգտագործել խելացի պայմանագրեր
Օգտագործեք սովորական հրահանգներ, երբ գործարքը կարող է անմիջականորեն արտահայտվել.
- գրանցման կամ չեղարկման առարկաներ
- մինետ, այրման կամ փոխանցման ակտիվներ
- թարմացրեք մետադատները
- թույլտվություններ տրամադրել կամ չեղարկել
- գործարկել դիպչիչ
- Ստեղծված շղթայի պարամետրեր
Օգտագործեք խելացի պայմանագիր, երբ գործարքը պահանջում է փաթեթավորված տրամաբանություն, որը դժվար է արտահայտել որպես ստատիկ հրահանգների հաջորդականություն կամ երբ տեղակայված պայմանագրի առկայությունը պետք է կոչվի վկայակոչի միջոցով:
IVM Գործադրվողներ
Executable::Ivm պարունակում է կեղծ IVM բայթքոդ: Նոդները կատարում են այդ բայթկոդը շղթայի համար կազմված վազման ժամանակի սահմանների ներսում: Պահպանեք բայտկոդը փոքր եւ որոշիչ. պայմանագրերը գործարքների իրականացման մաս են կազմում եւ, հետեւաբար, ազդում են համաձայնության վրա.
Executable::IvmProved նախատեսված է ապացույցներ կրող հոսքերի համար: Այն պարունակում է:
- IVM բայթային կոդ
- դետերմինիստական հրահանգների ծածկում
- կատարման իրադարձությունների պարտավորություն
- գազի քաղաքականության պարտավորություն
ապացույցը կապում է ծածկույթը գործադրված բայթ կոդի հետ: Կախված խողովակաշարի քաղաքականությունից, վավերացողները կարող են ստուգել ապացույցը եւ կրկնօրինակել իրագործումը որպես լրացուցիչ անվտանգության ստուգում:
Պայմանագրային զանգեր
Executable::ContractCall կոչում է տեղադրված պայմանագրի առկայությունը հասցեով: Օգտագործեք դա, երբ պայմանագրի կոդը գրանցվում է առանձին եւ գործարքները պետք է կոչեն այն հղմամբ, այլ ոչ թե ամեն անգամ բայթային կոդը կրելու համար:
Օպերացիոն ուղեցույց
- Պայմանագրերը պահեք դետերմինիստիկ: Պայմանագրի վարքագիծը չպետք է կախված լինի տեղական պատային ժամացույցի ժամանակից, հյուրընկալող ֆայլերի համակարգի վիճակից, ցանցային զանգերից կամ այլ գործընկերային տեղական մուտքերից:
- Պահպանեք օգտակար բեռները համապարփակ: Մեծ բայթկոդը մեծացնում է գործարքի չափը եւ բլոկի տարածման ծախսերը:
- Գլխավոր գրքի փոփոխությունների համար նախընտրում են տիպված հրահանգներ: Դրանք ավելի հեշտ է ստուգել եւ ավելի էժան է իրականացնել:
- Պայմանագրի վերանորոգման եւ գրանցման թույլտվությունները դիտարկեք որպես բարձր ռիսկային շահագործման վերահսկողություն:
Նայեք նաեւ.