ჭკვიანი ხელშეკრულებები
Iroha ტრანზაქციები ახორციელებს Executable სასარგებლო ტვირთებს. მიმდინარე მონაცემთა მოდელი მხარს უჭერს:
Executable::Instructions: Iroha სპეციალური ინსტრუქციების რიგითი კომპლექტიExecutable::ContractCall: განთავსებული ხელშეკრულების ინსტანციის გვერდითი რეფერენციული მოწოდებაExecutable::Ivm: ბაიტების კოდი Iroha VMExecutable::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 იწვევს განთავსებულ ხელშეკრულების ინსტანციას მისამართით. გამოიყენეთ ეს, როდესაც ხელშეკარგულების კოდი ცალკე არის რეგისტრირებული და ტრანზაქციები უნდა მოიწვიოს იგი რეფერენციის ნაცვლად ყოველ ჯერზე ბაიტების კოდის თანხა.
საოპერაციო მიმართულებები
- კონტრაქტების დეტერმინისტური შენარჩუნება. კონტრაქტის ქცევა არ უნდა იყოს დამოკიდებული ადგილობრივი კედლის საათის დროზე, მასპინძელი ფაილების სისტემის მდგომარეობაზე, ქსელის ზარებზე ან სხვა თანატოლ-ლოკალური შეღწევებზე.
- ტვირთების კომპაქტური შენარჩუნება. დიდი ბაიტო კოდი ზრდის ტრანზაქციის ზომას და ბლოკზე გავრცელების ხარჯებს.
- უპირატესობას ანიჭებს წაკითხული ინსტრუქციები მარტივი რეგისტრაციის ცვლილებებისთვის. ისინი უფრო ადვილია აუდიტირება და უფრო იაფია შესრულება.
- კონტრაქტის განახლება და რეგისტრაციის ნებართვა მაღალი რისკის მქონე ოპერატიული კონტროლის სახით განიხილეთ.
იხილეთ ასევე: