Kuidas kirjutada smartsuut WebAssembly-s Ontology vÔrgus? Osa 1: Rust

Kuidas kirjutada smartsuut WebAssembly-s Ontology vÔrgus? Osa 1: Rust

Ontology Wasm tehnoloogia vĂ€hendab dApp i keerukate Ă€riloogikaga nutilepingute blockchain'i ĂŒleviimise kulusid, rikastades seelĂ€bi oluliselt dApp ekosĂŒsteemi.

Praegu Ontology Wasm toetab samaaegselt nii Rusti kui ka C++ programmeerimise. Rust toetab Wasm'i paremini, ja genereeritud baitkood on lihtsam, mis vÔib veelgi vÀhendada lepingute kutsumise kulusid. Seega, kuidas kasutada Rusti Ontology vÔrgus lepingute arendamiseks?

WASM lepingute arendamine Rusti abil

Lepingu loomine

Cargo on hea projektide loomise ja pakettide haldamise tööriist Rust'i rakenduste arendamiseks, mis aitab arendajatel paremini korraldada koodi ja kolmandate osapoolte teekide koostööd. Uue Ontology Wasm lepingu loomiseks lihtsalt kÀivitage jÀrgmine kÀsk:

Kuidas kirjutada smartsuut WebAssembly-s Ontology vÔrgus? Osa 1: Rust

Selle genereeritud projekti struktuur:

Kuidas kirjutada smartsuut WebAssembly-s Ontology vÔrgus? Osa 1: Rust

Fail Cargo.toml kasutatakse projekti pÔhiinfo ja sÔltuvuste teekide info seadistamiseks. Faili osa [lib] peab olema seatud vÀÀrtusele crate-type = ["cdylib"]. Fail lib.rs kasutatakse lepingu loogika koodi kirjutamiseks. Lisaks peate lisama sÔltuvuste parameetrid Cargo.toml konfigureerimise faili sektsiooni [dependencies]:

Kuidas kirjutada smartsuut WebAssembly-s Ontology vÔrgus? Osa 1: Rust

Selle sÔltuvuse abil saavad arendajad kutsuda liideseid, mis suhtlevad Ontology blockchain'iga, ja tööriistu, nagu serialiseerimise parameeter.

Lepingu sisenemismeetod

Igal programmil on sisenemismeetod, nagu nĂ€iteks main-meetod, mida me tavaliselt nĂ€eme, kuid lepingul ei ole main-meetodit. Kui arendatakse Wasm-lepingut Rusti abil, siis kasutatakse vaikimisi sisenemismeetodina invoke meetodit. Rustis on meetodi nimi kompilatsiooni ajal ebaselge, kui Rusti lĂ€htekood muudetakse baitkoodiks, mida vĂ”ib tĂ€ita virtuaalmasin. Kompilaatori ĂŒlemÀÀrase koodi genereerimise vĂ€ltimiseks ja lepingu suuruse vĂ€hendamiseks lisab invoke meetod annotatsiooni #[no_mangle].

Kuidas invoke meetod saab tehingu tÀitmiseks parameetreid?

Raamatukogu ontio_std pakub funktsiooni runtime::input () parameetrite saamiseks tehingu tÀitmiseks. Arendajad saavad kasutada ZeroCopySource'i saadud baitmassivi deserialiseerimiseks. Esimene loetud baitmass on invoke-meetodi nimi, seejÀrel meetodi parameetrid.

Kuidas tagastatakse lepingu tÀitmise tulemus?

Funktsioon runtime::ret, mille pakub ontio_std raamatukogu, tagastab meetodi tÀitmise tulemuse.

Valmis invoke funktsioon nÀeb vÀlja jÀrgmiselt:

Kuidas kirjutada smartsuut WebAssembly-s Ontology vÔrgus? Osa 1: Rust

Lepingu andmete serialiseerimine ja deserialiseerimine

Lepingute arendusprotsessis seisavad arendajad pidevalt silmitsi serialiseerimise ja deserialiseerimise probleemidega, eriti kuidas salvestada struct-tĂŒĂŒpi andmed andmebaasi ja kuidas deserialiseerida andmebaasist loetud baitmass, et saada struct-tĂŒĂŒpi andmed.

Raamatukogu ontio_std pakub dekooderite ja kooderite liideseid andmete serialiseerimiseks ja deserialiseerimiseks. Struct-i vĂ€ljad rakendavad samuti dekooderite ja kooderite liideseid, nii et struktuuri saab serialiseerida ja deserialiseerida. Erinevate andmetĂŒĂŒpide serialiseerimiseks on vajalik Sink klassi eksemplar. Sink klassi eksemplaris on set- tĂŒĂŒpi vĂ€li buf, mis salvestab baittĂŒĂŒpi andmed, ja kĂ”ik serialiseeritud andmed salvestatakse buf-i.

Fikseeritud pikkusega andmete puhul (nÀiteks: byte, u16, u32, u64 jne) andmed konverteeritakse otse baitmassiks ja seejÀrel salvestatakse buf-i; fikseerimata pikkusega andmete puhul peab kÔigepealt serialiseerima pikkuse ja seejÀrel andmed (nÀiteks teadmata suurusega positiivsed tÀisarvud, sealhulgas u16, u32 vÔi u64 jne).

Deserialiseerimine on otsene vastand. Iga serialiseerimise meetodi jaoks on vastav deserialiseerimise meetod. Deserialiseerimisprotsessis on vajalik Source klassi eksemplar. Sellel eksemplaril on kaks vĂ€ljad buf ja pos. Buf kasutatakse andmete hoidmiseks, mis tulevad deserialiseerimisele, ning pos kasutatakse hetke lugemise positsiooni hoidmiseks. Kui loetakse konkreetset andmetĂŒĂŒpi, siis kui tead nende pikkust, vĂ”id neid lugeda otse; teadmata pikkusega andmete puhul – kĂ”igepealt loe pikkus, ja seejĂ€rel sisu.

Andmete ligipÀÀs ja vÀrskendamine plokiahelas

Ontology-wasm-cdt-rust on kapseldanud operatiivmeetodi andmete töötlemiseks plokiahelas, mis on arendajatele mugav andmete lisamise, kustutamise, muutmise ja pÀrimise toimingute teostamiseks jÀrgmiste viisil:

  • database::get(key) kasutatakse andmete pĂ€rimiseks plokiahelast, kus key kĂŒsib AsRef liidese rakendust.
  • database::put(key, value) — kasutatakse andmete salvestamiseks vĂ”rgus. Key kĂŒsib AsRef liidese tĂ€itmist ja value kĂŒsib Encoder liidese rakendust;
  • database::delete(key) — kasutatakse andmete eemaldamiseks ahelast, samas kui key kĂŒsib AsRef liidese rakendust.

Lepingu testimine

Lepingu meetodite rakendamisel on meil juurdepÀÀs andmetele ahelas ja meil on vajalik vastav virtuaalne masin, et tĂ€ita lepingu lĂ€htekoodi. SeetĂ”ttu on lepingute testimiseks tavaliselt vajalik lepingu juurutamine ahelas. Kuid selline testimise meetod on probleemne. Arendajate testimise lihtsustamiseks pakub raamatukogu ontio_std mock-moodulit testimiseks. See moodul simuleerib ahelas andmeid, muutes arendajatele lepingu meetodite ĂŒksustestimise lihtsamaks. Konkreetseid nĂ€iteid vĂ”ib leida siit.

Lepingu tÔrkeotsing

console::debug(msg) vĂ€ljastab tĂ”rkeotsingu teavet lepingu tĂ”rkeotsingu ajal. Teave msg salvestatakse sĂ”lme logifaili. Kohustuslik tingimus on logifaili taseme seadmine tĂ”rkeotsingu reĆŸiimi, kui on kĂ€ivitatud kohaliku test-sĂ”lme Ontology.

runtime::notify(msg) vĂ€ljastab vastava tĂ”rkeotsingu teabe lepingu tĂ”rkeotsingu ajal. See meetod salvestab edastatud teabe ahelas ja seda saab kĂŒsida ahelast meetodi getSmartCodeEvent abil.

Artikkel on tÔlgitud Hashrate&Shares toimetuse poolt spetsiaalselt OntologyRussia jaoks. klik

Kas oled arendaja? Liitu meie tehnilise kogukonnaga Discord. Lisaks vaadake Arendajate keskus meie veebisaidil, kus leiate arendaja tööriistu, dokumentatsiooni ja palju muud.

Ontology

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster