Шартномаи интеллектуалии WebAssembly -ро дар шабакаи Ontology чӣ гуна бояд нависед? Қисми 1: Rust

Шартномаи интеллектуалии WebAssembly -ро дар шабакаи Ontology чӣ гуна бояд нависед? Қисми 1: Rust

Технологияи Ontology Wasm арзиши интиқоли шартномаҳои интеллектуалии dApp-ро бо мантиқи мураккаби тиҷорӣ ба blockchain коҳиш медиҳад ва ба ин васила экосистемаи dApp-ро хеле ғанӣ мегардонад.

Ҳоло Онтология Васм Ҳамзамон рушди Rust ва C++-ро дастгирӣ мекунад. Забони Rust Wasm-ро беҳтар дастгирӣ мекунад ва байткоди тавлидшуда соддатар аст, ки метавонад минбаъд арзиши зангҳои шартномавиро коҳиш диҳад. Пас, чӣ тавр истифода Rust барои таҳияи шартнома дар шабакаи Ontology?

Таҳияи шартномаи WASM бо Rust

Шартнома созед

бор як воситаи хуби эҷоди лоиҳа ва идоракунии бастаҳо барои таҳияи Rust мебошад, ки ба таҳиягарон дар беҳтар ташкил кардани ҳамкории код ва китобхонаҳои тарафи сеюм кӯмак мекунад. Барои сохтани шартномаи нави Ontology Wasm, танҳо фармони зеринро иҷро кунед:

Шартномаи интеллектуалии WebAssembly -ро дар шабакаи Ontology чӣ гуна бояд нависед? Қисми 1: Rust

Сохтори лоиҳа, ки он тавлид мекунад:

Шартномаи интеллектуалии WebAssembly -ро дар шабакаи Ontology чӣ гуна бояд нависед? Қисми 1: Rust

Файли Cargo.toml барои насб кардани маълумоти асосии лоиҳа ва иттилооти китобхонаи вобаста истифода мешавад. Бахши [lib] файл бояд ба crate-type = ["cdylib"] таъин карда шавад. Файли lib.rs барои навиштани коди мантиқии шартнома истифода мешавад. Илова бар ин, ба шумо лозим аст, ки параметрҳои вобастагӣ ба қисмати [dependencies] файли конфигуратсияи Cargo.toml илова кунед:

Шартномаи интеллектуалии WebAssembly -ро дар шабакаи Ontology чӣ гуна бояд нависед? Қисми 1: Rust

Бо ин вобастагӣ, таҳиягарон метавонанд интерфейсҳоеро даъват кунанд, ки бо блокчейни Ontology ва асбобҳо ба монанди параметри сериализатсия ҳамкорӣ мекунанд.

Функсияи воридшавии шартнома

Ҳар як барнома дорои функсияи вурудӣ мебошад, ба монанди вазифаи асосие, ки мо одатан мебинем, аммо шартнома вазифаи асосӣ надорад. Вақте ки шартномаи Wasm бо истифода аз Rust таҳия карда мешавад, функсияи пешфарз даъват кардан ҳамчун функсияи вуруд барои истифодаи шартнома истифода мешавад. Номи функсия дар Rust ҳангоми тартиб додани коди сарчашмаи Rust ба байткоде, ки онро мошини виртуалӣ иҷро кардан мумкин аст, норавшан хоҳад буд. Барои пешгирӣ кардани компилятор аз тавлиди коди зиёдатӣ ва кам кардани андозаи шартнома, функсияи invoke тавзеҳи #[no_mangle] -ро илова мекунад.

Чӣ тавр функсияи даъват параметрҳоро барои иҷрои транзаксия ба даст меорад?

Китобхонаи ontio_std функсияи runtime::input()-ро барои ба даст овардани параметрҳо барои иҷрои транзаксия таъмин мекунад. Таҳиягарон метавонанд ZeroCopySource-ро истифода баранд, то массиви байтҳои натиҷашударо бесериалӣ кунанд. Дар он массиви якуми байтҳои хондашуда номи усули даъват ва пас аз он параметрҳои метод мебошад.

Натиҷаи иҷрои шартнома чӣ гуна баргардонида мешавад?

Функсияи runtime::ret, ки аз ҷониби китобхонаи ontio_std пешниҳод шудааст, натиҷаи иҷрои методро бармегардонад.

Функсияи даъвати анҷомшуда чунин менамояд:

Шартномаи интеллектуалии WebAssembly -ро дар шабакаи Ontology чӣ гуна бояд нависед? Қисми 1: Rust

Сериализатсия ва бесавод кардани маълумоти шартнома

Дар ҷараёни таҳияи қарордодҳо, таҳиягарон ҳамеша бо мушкилот бо силсиласозӣ ва бесериализатсия дучор мешаванд, махсусан дар бораи нигоҳ доштани навъи додаҳои сохторӣ дар пойгоҳи додаҳо ва чӣ гуна бесериализатсия кардани массиви байти аз пойгоҳи додаҳо хондашуда барои ба даст овардани навъи додаҳои сохтор.

Китобхонаи ontio_std интерфейсҳои декодер ва рамзгузорро барои сериализатсия ва сериализатсияи додаҳо таъмин мекунад. Майдонҳои сохтор инчунин интерфейсҳои декодер ва рамзгузорро амалӣ мекунанд, то сохтор метавонад силсилавӣ ва ғайрисериясозӣ шавад. Ҳангоми сериализатсия кардани намудҳои гуногуни додаҳо, намунаҳои синфи Sink талаб карда мешаванд. Як мисоли синфи Sink дорои буф-саҳрои навъи маҷмӯа мебошад, ки маълумоти навъи байтро нигоҳ медорад ва ҳама маълумоти силсилавӣ дар buf нигоҳ дошта мешаванд.

Барои маълумоти дарозии собит (масалан: байт, u16, u32, u64 ва ғайра), маълумот мустақиман ба массиви байт табдил дода мешавад ва сипас дар buf нигоҳ дошта мешавад; барои маълумоти дарозии собит, дарозӣ бояд аввал силсилавӣ карда шавад, баъд Ddata (масалан, ададҳои бутуни аломати номаълуми андозаи номаълум, аз ҷумла u16, u32 ё u64 ва ғайра).

Десериализатсия комилан баръакс аст. Барои ҳар як усули сериализатсия, усули мувофиқи сериализатсия мавҷуд аст. Десериализатсия истифодаи мисолҳои синфи Source-ро талаб мекунад. Ин мисоли синф ду майдони buf ва pos дорад. Buf барои нигоҳ доштани маълумоте, ки ба таври сериявӣ холӣ карда мешавад, истифода мешавад ва pos барои нигоҳ доштани мавқеи хониши ҷорӣ истифода мешавад. Ҳангоми хондани як навъи маълумот, агар шумо дарозии онро донед, шумо метавонед онро мустақиман хонед, барои маълумоти дарозии номаълум — аввал дарозиро хонед, баъд мундариҷаро хонед.

Дастрасӣ ва навсозии маълумот дар занҷир

онтология-васм-цдт-руст - усули амалиётии кор бо додаҳо дар занҷирро фаро гирифтааст, ки барои таҳиягарон барои иҷрои амалиётҳо ба монанди илова кардан, нест кардан, тағир додан ва дархост кардани маълумот дар занҷир қулай аст:

  • базаи маълумот :: даст (калид) - барои дархост кардани маълумот аз занҷир истифода мешавад ва калид барои татбиқи интерфейси AsRef дархост мекунад;
  • базаи маълумот:: гузоштан (калид, арзиш) - барои нигоҳ доштани маълумот дар шабака истифода мешавад. Калид татбиқи интерфейси AsRef-ро дархост мекунад ва арзиш татбиқи интерфейси Encoder-ро дархост мекунад;
  • базаи маълумот :: нест кардан (калид) - барои нест кардани маълумот аз занҷир истифода мешавад ва дархости калидӣ татбиқи интерфейси AsRef.

Санҷиши шартнома

Вақте ки усулҳои шартнома амалӣ мешаванд, ба мо дастрасӣ ба маълумот дар бораи занҷир лозим аст ва ба мо як мошини мувофиқи маҷозӣ барои иҷрои байт-коди шартнома лозим аст, аз ин рӯ ба таври умум зарур аст, ки шартномаро дар занҷир барои озмоиш ҷойгир кунем. Аммо ин усули санҷиш мушкил аст. Барои осонтар кардани таҳиягарон санҷиши шартномаҳо, китобхонаи ontio_std модули тақаллубиро барои санҷиш пешкаш мекунад. Ин модул моделсозии маълумотро дар схема таъмин мекунад ва барои таҳиягарон санҷиши усулҳои шартномаро осон мекунад. Мисолхои конкретй овардан мумкин аст дар ин ҷо.

Барқарорсозии шартнома

console::debug(msg) ҳангоми ислоҳи шартнома маълумоти ислоҳро нишон медиҳад. Маълумоти паёмӣ ба файли сабти гиреҳ илова карда мешавад. Ҳангоми кор кардани гиреҳи санҷиши маҳаллии Онтология, шарти ҳатмӣ муқаррар кардани сатҳи файли гузориш ба ҳолати дебаг аст.

runtime::notify(msg) маълумоти ислоҳи мувофиқро ҳангоми ислоҳи шартнома мебарорад. Ин усул маълумоти ба занҷир воридшударо нигоҳ медорад ва аз занҷир бо истифода аз усули getSmartCodeEvent дархост кардан мумкин аст.

Мақоларо муҳаррирони Hashrate&Shares махсусан барои OntologyRussia тарҷума кардаанд. гиря кардан

Оё шумо таҳиягар ҳастед? Ба ҷомеаи техникии мо ҳамроҳ шавед Беимкон. Ҳамчунин, як назар кунед Маркази таҳиякунанда дар вебсайти мо, ки дар он шумо метавонед асбобҳои таҳиякунанда, ҳуҷҷатҳо ва ғайраро пайдо кунед.

Ontology

Манбаъ: will.com

Илова Эзоҳ