Giunsa pagsulat ang usa ka Smart nga kontrata sa WebAssembly sa network sa Ontology? Bahin 1: Rust

Giunsa pagsulat ang usa ka Smart nga kontrata sa WebAssembly sa network sa Ontology? Bahin 1: Rust

Ang Ontology Wasm nga teknolohiya nagpamenos sa gasto sa pagbalhin sa dApp smart nga mga kontrata nga adunay komplikadong lohika sa negosyo ngadto sa blockchain, sa ingon nagpauswag pag-ayo sa dApp ecosystem.

Π’ настоящСС врСмя Ontology Wasm Dungan nga nagsuporta sa Rust ug C++ development. Ang Rust nga pinulongan nagsuporta sa Wasm nga mas maayo, ug ang namugna nga bytecode mas simple, nga makapakunhod pa sa gasto sa mga tawag sa kontrata. Busa, unsaon paggamit ang Rust aron makahimo og kontrata sa Ontology network?

Pagpalambo sa usa ka Kontrata sa WASM nga adunay Rust

Paghimo og kontrata

Cargo usa ka maayo nga paghimo sa proyekto ug himan sa pagdumala sa pakete alang sa pagpalambo sa Rust, nga nagtabang sa mga developer nga mas maayo nga maorganisar ang interaksyon sa code ug mga librarya sa ikatulo nga partido. Aron makahimo og bag-ong kontrata sa Ontology Wasm, padagana lang ang mosunod nga sugo:

Giunsa pagsulat ang usa ka Smart nga kontrata sa WebAssembly sa network sa Ontology? Bahin 1: Rust

Ang istruktura sa proyekto nga gihimo niini:

Giunsa pagsulat ang usa ka Smart nga kontrata sa WebAssembly sa network sa Ontology? Bahin 1: Rust

Ang Cargo.toml file gigamit sa pag-set up sa batakang impormasyon sa proyekto ug nagsalig nga impormasyon sa librarya. Ang [lib] nga seksyon sa file kinahanglan nga ibutang sa crate-type = ["cdylib"]. Ang lib.rs file gigamit sa pagsulat sa contract logic code. Dugang pa, kinahanglan nimong idugang ang dependency parameters sa [dependencies] nga seksyon sa Cargo.toml configuration file:

Giunsa pagsulat ang usa ka Smart nga kontrata sa WebAssembly sa network sa Ontology? Bahin 1: Rust

Uban niini nga pagsalig, ang mga developers makatawag sa mga interface nga nakig-interact sa Ontology blockchain ug mga himan sama sa serialization parameter.

Kontrata entry function

Ang matag programa adunay input function, sama sa main function nga kasagaran natong makita, pero ang kontrata walay main function. Kung ang usa ka kontrata sa Wasm gihimo gamit ang Rust, ang default invoke function gigamit ingon ang input function aron magamit ang kontrata. Ang ngalan sa usa ka function sa Rust dili klaro kung gi-compile ang Rust source code ngadto sa bytecode nga mahimong ipatuman sa usa ka virtual machine. Aron mapugngan ang compiler sa pagmugna og redundant code ug pagpakunhod sa gidak-on sa kontrata, ang invoke function nagdugang sa #[no_mangle] annotation.

Giunsa makuha sa function sa invoke ang mga parameter aron mapatuman ang usa ka transaksyon?

Ang ontio_std nga librarya naghatag ug runtime::input() function para makuha ang mga parametro aron mapatuman ang usa ka transaksyon. Mahimong gamiton sa mga developer ang ZeroCopySource aron deserialize ang resulta nga byte array. Kung diin ang una nga han-ay sa mga byte nga gibasa mao ang ngalan sa pamaagi sa pag-invoke, gisundan sa mga parameter sa pamaagi.

Giunsa pagbalik ang resulta sa pagpatuman sa kontrata?

Ang runtime :: ret function nga gihatag sa ontio_std library nagbalik sa resulta sa usa ka pamaagi sa pagpatuman.

Ang nahuman nga function sa pag-invoke ingon niini:

Giunsa pagsulat ang usa ka Smart nga kontrata sa WebAssembly sa network sa Ontology? Bahin 1: Rust

Pagserialize ug Deserializing Data sa Kontrata

Sa proseso sa pagpalambo sa mga kontrata, ang mga developers kanunay nga adunay mga problema sa serialization ug deserialization, ilabi na kung unsaon pagtipig sa usa ka struct data type sa database ug kung unsaon pag-deserialize ang usa ka byte array nga gibasa gikan sa database aron makakuha og struct data type.

Ang ontio_std library naghatag ug decoder ug encoder interface para sa data serialization ug deserialization. Ang mga natad sa usa ka istruktura nagpatuman usab sa mga interface sa decoder ug encoder aron ang istruktura mahimo nga serialized ug deserialized. Ang mga pananglitan sa klase sa Sink gikinahanglan kung ang lainlaing mga tipo sa datos gi-serialize. Ang usa ka pananglitan sa Sink class adunay set-type nga field buf nga nagtipig sa byte type data, ug ang tanang serialized data gitipigan sa buf.

Para sa fixed length data (eg: byte, u16, u32, u64, etc.), ang data direktang gi-convert ngadto sa byte array ug dayon gitipigan sa buf; para sa datos nga dili pirmi ang gitas-on, ang gitas-on kinahanglang i-serialize una, unya ang Ddata (pananglitan, unsigned integers sa wala mailhi nga gidak-on, lakip ang u16, u32, o u64, ug uban pa).

Ang deserialization mao ang eksaktong kaatbang. Alang sa matag pamaagi sa serialization, adunay katugbang nga pamaagi sa deserialization. Ang deseryalisasyon nanginahanglan sa paggamit sa mga higayon sa klase sa Tinubdan. Kini nga klase nga instance adunay duha ka field buf ug pos. Ang Buf gigamit sa pagtipig sa mga datos nga ma-deserialize ug ang pos gigamit sa pagtipig sa kasamtangan nga posisyon sa pagbasa. Kung ang usa ka partikular nga tipo sa datos gibasa, kung nahibal-an nimo ang gitas-on niini, mahimo nimo kining basahon direkta, alang sa datos nga wala mahibal-an ang gitas-on-basaha una ang gitas-on, dayon basaha ang sulud.

Pag-access ug pag-update sa datos sa kadena

ontology-wasm-cdt-rust - gi-encapsulated ang usa ka pamaagi sa operasyon alang sa pagtrabaho sa mga datos sa kadena, nga sayon ​​​​alang sa mga developers sa pagpatuman sa mga operasyon sama sa pagdugang, pagtangtang, pag-usab ug pagpangutana sa datos sa kadena sama sa mosunod:

  • database::kuhaa(key) - gigamit sa paghangyo sa datos gikan sa kadena, ug ang yawe naghangyo sa pagpatuman sa AsRef interface;
  • database::butang(key, value) - gigamit sa pagtipig sa datos sa network. Key hangyo sa pagpatuman sa AsRef interface, ug bili hangyo sa pagpatuman sa Encoder interface;
  • database::pagtangtang(key) - gigamit sa pagtangtang sa datos gikan sa kadena, ug ang yawe naghangyo sa pagpatuman sa AsRef interface.

Pagsulay sa kontrata

Kung gipatuman ang mga pamaagi sa usa ka kontrata, kinahanglan namon ang pag-access sa datos sa kadena ug kinahanglan namon ang usa ka angay nga virtual machine aron ipatuman ang bytecode sa kontrata, mao nga kasagaran kinahanglan nga i-deploy ang kontrata sa kadena alang sa pagsulay. Apan kini nga pamaagi sa pagsulay adunay problema. Aron mas sayon ​​alang sa mga developers sa pagsulay sa mga kontrata, ang ontio_std librarya naghatag ug mock module alang sa pagsulay. Kini nga module naghatag og usa ka simulation sa data sa sirkito, sa paghimo niini nga mas sayon ​​alang sa developers sa yunit pagsulay sa mga pamaagi sa kontrata. Makit-an ang piho nga mga pananglitan dinhi.

Pag-debug sa Kontrata

console::debug(msg) nagpakita sa impormasyon sa debug samtang nag-debug sa usa ka kontrata. Ang impormasyon sa mensahe idugang sa node log file. Ang usa ka kinahanglanon mao ang pagbutang sa lebel sa log file sa debug mode kung ang lokal nga Ontology test node nagdagan.

runtime::notify(msg) outputs sa tukma nga debug nga impormasyon samtang ang kontrata gi-debug. Kini nga pamaagi magtipig sa impormasyon nga gisulod sa kadena ug mahimong pangutan-on gikan sa kadena gamit ang getSmartCodeEvent nga pamaagi.

Ang artikulo gihubad sa mga editor sa Hashrate&Shares labi na alang sa OntologyRussia. naghilak

Ikaw ba usa ka developer? Apil sa among tech nga komunidad sa Pagsabut. Usab, tan-awa ang Developer Center sa among website, diin makit-an nimo ang mga gamit sa developer, dokumentasyon, ug uban pa.

Ontology

Source: www.habr.com

Idugang sa usa ka comment