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

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

Ontology Wasm tehnoloogia alandab dApp'i, millel on keeruline Ă€riloogika, nutilepingute plokiahelasse ĂŒleviimise kulusid, rikastades sellega oluliselt dApp ökosĂŒsteemi.

Praegu Ontology Wasm toetab samaaegselt arendust nii Rust'i kui ka C++ keeles. Rust keelt toetab Wasm paremini ja genereeritud baitkood on lihtsam, mis vÔib veelgi vÀhendada lepingukutsude kulusid. Nii et kuidas kasutada Rust'i lepingute arendamiseks Ontology vÔrgus?

WASM lepingute arendamine Rust'i abil

Lepingu loomine

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

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

Projektistruktuur, mille see genereerib:

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

Fail Cargo.toml kasutatakse projekti pÔhiteabe ja sÔltuva raamatukogu teabe seadistamiseks. Sektsioon [lib] failis peab olema seadistatud vÀÀrtuseks crate-type = ["cdylib"]. Fail lib.rs kasutatakse lepinguloogika koodi kirjutamiseks. Lisaks peate lisama sÔltuvuste parameetrid konfiguratsiooni failis Cargo.toml sektsioonis [dependencies]:

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

Selle sÔltuvuse abil saavad arendajad kutsuda vÀlja liideseid, mis suhtlevad Ontology plokiahelaga, ja tööriistu, nagu nÀiteks serialiseerimise parameeter.

Lepingu sisendfunktsioon

Igal programmil on sisendfunktsioon, nagu nÀiteks main-funktsioon, mida me tavaliselt nÀeme, kuid lepingul ei ole main-funktsiooni. Kui Rust'iga arendatakse Wasm-lepingut, kasutatakse vaikimisi sisendfunktsioonina invoke-funktsiooni, et lepingut kasutada. Funktsiooni nimi Rust'is ei ole kompileerimisel selge, kui Rust'i lÀhtekood muudetakse baitkoodiks, mida saab tÀita virtuaalne masin. Et hoida kompilator Àra genereerimast liialdavat koodi ja vÀhendada lepingu suurust, lisab invoke-funktsioon annotatsiooni #[no_mangle].

Kuidas invoke-funktsioon saab parameetreid tehingu lÀbiviimiseks?

ontio_std raamatukogu pakub funktsiooni runtime::input(), et saada tehingu tÀitmiseks vajalikud parameetrid. Arendajad saavad kasutada ZeroCopySource'i saadud baitide massiivi deserialiseerimiseks. Esimene loetud baitide massiiv on invoke-meetodi nimi, jÀrgnev on meetodi parameetrid.

Kuidas tagastatakse lepingutÀidise tulemus?

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

LÔpetatud invoke-funktsioon nÀeb vÀlja jÀrgnev:

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

Lepingu andmete serialiseerimine ja deserialiseerimine

Lepingute arendamise protsessis seisavad arendajad alati silmitsi serialiseerimise ja deserialiseerimise probleemidega, nimelt sellega, kuidas salvestada struktuuri andme tĂŒĂŒpi andmed andmebaasi ja kuidas massiiv, mis loetakse andmebaasist, deserialiseerida, et saada struktuuri andme tĂŒĂŒpi andmed.

ontio_std raamatukogu pakub dekooderi ja kodeerija liideseid andmete serialiseerimiseks ja deserialiseerimiseks. Struktuuri struktuuri vĂ€ljad rakendavad samuti dekooderi ja kodeerija liideseid, et struktuur saaks olla serialiseeritud ja deserialiseeritud. Sink klassi eksemplarid on vajalikud erinevate andmete tĂŒĂŒpide serialiseerimisel. Sink klassi eksemplaril on set tĂŒĂŒpi vĂ€li buf, mis salvestab bait tĂŒĂŒpi andmed, ja kĂ”ik serialiseeritud andmed salvestatakse buf-i.

Fikseeritud pikkusega andmete puhul (nÀiteks: byte, u16, u32, u64 jne) muudetakse andmed otse baitide massiiviks ja salvestatakse then buf-i; fikseerimata pikkusega andmete puhul tuleb esmalt serialiseerida pikkus ja seejÀrel Ddata (nÀiteks mitte teada pikkusega tervete arvude, sealhulgas u16, u32 vÔi u64 jne).

Deserialiseerimine on otse vastupidine. Iga serialiseerimise meetodi jaoks on vastav deserialiseerimise meetod. Deserialiseerimine nĂ”uab Source klassi eksemplaride kasutamist. See klassi eksemplar sisaldab kahte vĂ€lja: buf ja pos. Buf'i kasutatakse andmete salvestamiseks, mis deserialiseeritakse, ja pos hoiab arvestatavat lugemispositsiooni. Kui loetakse spetsiifilist andme tĂŒĂŒpi, siis kui teate nende pikkust, saate neid otse lugeda; teadmata pikkusega andmete puhul looge esmalt pikkus, seejĂ€rel looge sisu.

Andmete juurde pÀÀsemine ja nende uuendamine plokiks

Ontology-wasm-cdt-rust — kapseldas operatsioonimeetodi andmete kĂ€sitlemiseks plokis, mis on arendajatele mugav, et teostada operatsioone nagu andmete lisamine, kustutamine, muutmine ja pĂ€ringud plokis jĂ€rgmiselt:

  • database::get(key) — kasutatakse andmete pĂ€rimiseks plokist, kus key kĂŒsib AsRef liidese rakendust;
  • database::put(key, value) — kasutatakse andmete salvestamiseks plokki. Key kĂŒsib AsRef liidese tĂ€itmist ning value kĂŒsib Encoder liidese rakendust;
  • database::delete(key) — kasutatakse andmete kustutamiseks plokist, kus key kĂŒsib AsRef liidese rakendust.

Lepingu testimine

Kui lepingute meetodid on rakendatud, on meil vajalik juurdepÀÀs andmetele plokis ja vajame vastavat virtuaalmasinat lepingute bytecode'i tĂ€itmiseks, seega on tavaliselt vajalik lepingu rakendamine plokis testimiseks. Kuid see testimismeetod on problemaatiline. Selleks, et arendajate jaoks oleks lepingute testimine lihtsam, pakub ontio_std raamatukogu mock-moduuli testimiseks. See modul simuleerib andmeid plokis, muutes arendajatele lepingus meetodite ĂŒksuste testimise lihtsamaks. Konkreetseid nĂ€iteid vĂ”ib leida siin.

Lepingu silumine

console::debug(msg) vÀljastab silumisinfot lepingu silumise ajal. Teave msg salvestatakse sÔlme logifaili. Tingimuseks on logifaili taseme seadmine silumismoodulisse, kui Ontology kohaliku test-sÔlme kÀitatakse.

runtime::notify(msg) vĂ€ljastab vastava silumisinfo lepingu silumisel. See meetod salvestab edastatud teabe plokki ja seda saab plokist kĂŒsida meetodi getSmartCodeEvent abil.

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

Oled sa arendaja? Liitu meie tehnilise kogukonnaga Discord. Samuti vaata Arendajate keskus meie veebisaidil, seal leiad arendaja tööriistad, dokumentatsiooni ja palju muud.

Ontology

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster