Skip to content

Խելացի պայմանագրեր

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 կոչում է տեղադրված պայմանագրի առկայությունը հասցեով: Օգտագործեք դա, երբ պայմանագրի կոդը գրանցվում է առանձին եւ գործարքները պետք է կոչեն այն հղմամբ, այլ ոչ թե ամեն անգամ բայթային կոդը կրելու համար:

Օպերացիոն ուղեցույց

  • Պայմանագրերը պահեք դետերմինիստիկ: Պայմանագրի վարքագիծը չպետք է կախված լինի տեղական պատային ժամացույցի ժամանակից, հյուրընկալող ֆայլերի համակարգի վիճակից, ցանցային զանգերից կամ այլ գործընկերային տեղական մուտքերից:
  • Պահպանեք օգտակար բեռները համապարփակ: Մեծ բայթկոդը մեծացնում է գործարքի չափը եւ բլոկի տարածման ծախսերը:
  • Գլխավոր գրքի փոփոխությունների համար նախընտրում են տիպված հրահանգներ: Դրանք ավելի հեշտ է ստուգել եւ ավելի էժան է իրականացնել:
  • Պայմանագրի վերանորոգման եւ գրանցման թույլտվությունները դիտարկեք որպես բարձր ռիսկային շահագործման վերահսկողություն:

Նայեք նաեւ.