Kuidas kirjutada WebAssembly nutikat lepingut ontoloogiavõrgus? 1. osa: rooste

Kuidas kirjutada WebAssembly nutikat lepingut ontoloogiavõrgus? 1. osa: rooste

Ontoloogia Wasm-tehnoloogia vähendab keeruka äriloogikaga dApp nutikate lepingute plokiahelasse üleviimise kulusid, rikastades seeläbi oluliselt dApp-i ökosüsteemi.

praegu Ontoloogia Wasm Toetab samaaegselt nii Rusti kui ka C++ arendust. Rust-keel toetab Wasmi paremini ja genereeritud baitkood on lihtsam, mis võib veelgi vähendada lepingukõnede kulusid. Niisiis, kuidas kasutada Rusti ontoloogiavõrgu lepingu väljatöötamiseks?

WASM-i lepingu väljatöötamine Rustiga

Loo leping

last on hea projekti loomise ja pakettide haldamise tööriist Rust arenduse jaoks, mis aitab arendajatel koodi ja kolmandate osapoolte teekide interaktsiooni paremini korraldada. Uue Ontology Wasmi lepingu loomiseks käivitage lihtsalt järgmine käsk:

Kuidas kirjutada WebAssembly nutikat lepingut ontoloogiavõrgus? 1. osa: rooste

Selle loodud projekti struktuur:

Kuidas kirjutada WebAssembly nutikat lepingut ontoloogiavõrgus? 1. osa: rooste

Faili Cargo.toml kasutatakse projekti põhiteabe ja sõltuva teegi teabe seadistamiseks. Faili jaotis [lib] peab olema seatud väärtusele crate-type = ["cdylib"]. Lepingu loogikakoodi kirjutamiseks kasutatakse faili lib.rs. Lisaks peate konfiguratsioonifaili Cargo.toml jaotisesse [dependencies] lisama sõltuvusparameetrid:

Kuidas kirjutada WebAssembly nutikat lepingut ontoloogiavõrgus? 1. osa: rooste

Selle sõltuvuse abil saavad arendajad kutsuda liideseid, mis suhtlevad ontoloogia plokiahelaga ja tööriistadega, nagu serialiseerimisparameeter.

Lepingu sisestamise funktsioon

Igal programmil on sisendfunktsioon, nagu põhifunktsioon, mida me tavaliselt näeme, kuid lepingul pole põhifunktsiooni. Kui Wasmi leping töötatakse välja Rusti abil, kasutatakse lepingu kasutamiseks sisendfunktsioonina vaikimisi kutsumisfunktsiooni. Rusti funktsiooni nimi jääb Rusti lähtekoodi kompileerimisel baitkoodiks, mida saab käivitada virtuaalmasin, ebaselgeks. Selleks, et kompilaator ei genereeriks üleliigset koodi ja vähendaks lepingu suurust, lisab väljakutsumisfunktsioon märkuse #[no_mangle].

Kuidas saab kutsumisfunktsioon tehingu täitmiseks parameetrid?

Teek ontio_std pakub toimingu sooritamiseks vajalike parameetrite hankimiseks funktsiooni Runtime::input(). Arendajad saavad tulemuseks oleva baidimassiivi deserialiseerimiseks kasutada ZeroCopySource'i. Esimene loetud baitide massiiv on kutsumismeetodi nimi, millele järgneb meetodi parameetrid.

Kuidas tagastatakse lepingu täitmise tulemus?

Funktsioon Runtime::ret, mida pakub teegi ontio_std, tagastab meetodi täitmise tulemuse.

Lõpetatud kutsumisfunktsioon näeb välja selline:

Kuidas kirjutada WebAssembly nutikat lepingut ontoloogiavõrgus? 1. osa: rooste

Lepinguandmete järjestamine ja deserialiseerimine

Lepingute väljatöötamise käigus tekib arendajatel alati probleeme serialiseerimise ja deserialiseerimisega, täpsemalt sellega, kuidas andmebaasis struktuuri andmetüüpi salvestada ja kuidas andmebaasist loetud baidimassiivi deserialiseerida, et saada struktuuri andmetüüp.

Teek ontio_std pakub dekoodri ja kodeerija liideseid andmete serialiseerimiseks ja deserialiseerimiseks. Struktuuri väljad rakendavad ka dekoodri ja kodeerija liideseid, nii et struktuuri saab serialiseerida ja deserialiseerida. Erinevate andmetüüpide serialiseerimisel on nõutavad klassi Sink eksemplarid. Klassi Sink eksemplaril on set-type välja buf, mis salvestab baiditüübi andmed ja kõik jadaandmed salvestatakse buf-i.

Fikseeritud pikkusega andmete (nt: bait, u16, u32, u64 jne) puhul teisendatakse andmed otse baidimassiiviks ja salvestatakse seejärel buf-i; fikseerimata pikkusega andmete puhul tuleb kõigepealt järjestada pikkus, seejärel Ddata (näiteks tundmatu suurusega märgita täisarvud, sh u16, u32 või u64 jne).

Deserialiseerimine on täpselt vastupidine. Iga serialiseerimismeetodi jaoks on olemas vastav deserialiseerimismeetod. Deserialiseerimine nõuab klassi Source eksemplaride kasutamist. Sellel klassi eksemplaril on kaks välja buf ja pos. Buf kasutatakse deserialiseeritavate andmete salvestamiseks ja pos kasutatakse praeguse lugemiskoha salvestamiseks. Teatud tüüpi andmete lugemisel, kui teate nende pikkust, saate neid otse lugeda, teadmata pikkusega andmete puhul – kõigepealt lugege pikkust ja seejärel sisu.

Juurdepääs ahelas olevatele andmetele ja nende värskendamine

ontoloogia-wasm-cdt-rooste - kapseldatud töömeetod ahelas andmetega töötamiseks, mis on arendajatel mugav selliste toimingute rakendamiseks nagu ahela andmete lisamine, kustutamine, muutmine ja päringute tegemine järgmiselt:

  • andmebaas::get(võti) - kasutatakse andmete pärimiseks ahelast ja võti taotleb AsRef liidese juurutamist;
  • andmebaas::put(võti, väärtus) - kasutatakse andmete salvestamiseks võrku. Key nõuab AsRef liidese rakendamist ja väärtus nõuab kodeerija liidese rakendamist;
  • andmebaas::kustuta(võti) - kasutatakse andmete eemaldamiseks ahelast ja võti nõuab AsRefi liidese juurutamist.

Lepingu testimine

Kui lepingu meetodid on juurutatud, vajame juurdepääsu ahelas olevatele andmetele ja vajame lepingu baitkoodi täitmiseks sobivat virtuaalmasinat, seega on üldjuhul vaja leping ahelas testimiseks juurutada. Kuid see testimismeetod on problemaatiline. Et lepingute testimine arendajatel oleks lihtsam, pakub teek ontio_std testimiseks näidismoodulit. See moodul pakub vooluringis olevate andmete simulatsiooni, muutes arendajatel lihtsamaks lepingus toodud meetodite testimise. Konkreetseid näiteid võib leida siin.

Lepingu silumine

console::debug(msg) kuvab lepingu silumise ajal silumisinfot. Sõnumiteave lisatakse sõlme logifaili. Eeltingimus on logifaili taseme seadmine silumisrežiimile, kui kohalik ontoloogia testsõlm töötab.

runtime::notify(msg) väljastab lepingu silumise ajal sobiva silumise teabe. See meetod salvestab ahelasse sisestatud teabe ja seda saab ketist päringuid teha getSmartCodeEvent meetodi abil.

Artikli tõlkisid Hashrate&Sharesi toimetajad spetsiaalselt OntologyRussia jaoks. nutma

Kas olete arendaja? Liituge meie tehnikakogukonnaga aadressil Erimeelsused. Samuti vaadake Arendaja keskus meie veebisaidil, kust leiate arendajatööriistu, dokumentatsiooni ja palju muud.

Ontoloogia

Allikas: www.habr.com

Lisa kommentaar