Kuinka kirjoittaa WebAssembly-älysopimus ontologiaverkkoon? Osa 1: Ruoste

Kuinka kirjoittaa WebAssembly-älysopimus ontologiaverkkoon? Osa 1: Ruoste

Ontologia Wasm-teknologia vähentää kustannuksia, jotka aiheutuvat monimutkaisen liiketoimintalogiikkaan sisältyvien dApp-älysopimusten siirtämisestä lohkoketjuun, mikä rikastaa huomattavasti dApp-ekosysteemiä.

tällä hetkellä Ontologia Wasm Tukee samanaikaisesti sekä Rust- että C++ -kehitystä. Rust-kieli tukee Wasmia paremmin, ja luotu tavukoodi on yksinkertaisempi, mikä voi edelleen vähentää sopimuspuheluiden kustannuksia. Niin, kuinka käyttää Rustia kehittämään sopimus ontologiaverkostosta?

WASM-sopimuksen kehittäminen Rustin kanssa

Luo sopimus

lasti on hyvä projektien luonti- ja paketinhallintatyökalu Rust-kehitykseen, joka auttaa kehittäjiä organisoimaan paremmin koodin ja kolmannen osapuolen kirjastojen vuorovaikutusta. Luo uusi Ontology Wasm -sopimus suorittamalla seuraava komento:

Kuinka kirjoittaa WebAssembly-älysopimus ontologiaverkkoon? Osa 1: Ruoste

Sen luoma projektirakenne:

Kuinka kirjoittaa WebAssembly-älysopimus ontologiaverkkoon? Osa 1: Ruoste

Cargo.toml-tiedostoa käytetään projektin perustietojen ja riippuvien kirjastotietojen määrittämiseen. Tiedoston [lib]-osion on oltava crate-type = ["cdylib"]. Lib.rs-tiedostoa käytetään sopimuslogiikkakoodin kirjoittamiseen. Lisäksi sinun on lisättävä riippuvuusparametreja Cargo.toml-määritystiedoston [dependencies] -osioon:

Kuinka kirjoittaa WebAssembly-älysopimus ontologiaverkkoon? Osa 1: Ruoste

Tämän riippuvuuden avulla kehittäjät voivat kutsua rajapintoja, jotka ovat vuorovaikutuksessa ontologian lohkoketjun ja työkalujen, kuten serialisointiparametrin, kanssa.

Sopimuksen kirjaustoiminto

Jokaisella ohjelmalla on syöttötoiminto, kuten tavallisella päätoiminnolla, mutta sopimuksella ei ole päätoimintoa. Kun Wasm-sopimus kehitetään käyttämällä Rustia, oletusarvoista kutsutoimintoa käytetään sopimuksen käytön syöttötoimintona. Toiminnon nimi Rustissa jää epäselväksi, kun Rust-lähdekoodia käännetään tavukoodiksi, joka voidaan suorittaa virtuaalikoneen avulla. Estääkseen kääntäjää luomasta redundanttia koodia ja pienentämästä sopimuksen kokoa kutsufunktio lisää #[no_mangle]-merkinnän.

Miten kutsufunktio saa parametrit tapahtuman suorittamiseksi?

Ontio_std-kirjasto tarjoaa ajonaikaisen::input()-funktion parametrien saamiseksi tapahtuman suorittamista varten. Kehittäjät voivat käyttää ZeroCopySourcea sarjoittamaan tuloksena olevan tavutaulukon. Jossa ensimmäinen luettu tavujono on kutsumenetelmän nimi, jota seuraa menetelmän parametrit.

Miten sopimuksen täytäntöönpanon tulos palautetaan?

Ontio_std-kirjaston tarjoama runtime::ret-funktio palauttaa menetelmän suorituksen tuloksen.

Valmis kutsutoiminto näyttää tältä:

Kuinka kirjoittaa WebAssembly-älysopimus ontologiaverkkoon? Osa 1: Ruoste

Sopimustietojen sarjoittaminen ja sarjoittaminen

Kehittäessään sopimuksia kehittäjät törmäävät aina ongelmiin serialisoinnin ja deserialisoinnin kanssa, erityisesti sen suhteen, kuinka struct-tietotyyppi tallennetaan tietokantaan ja kuinka deserialisoidaan tietokannasta luettu tavutaulukko struct-tietotyypin saamiseksi.

Ontio_std-kirjasto tarjoaa dekooderi- ja enkooderiliitännät tietojen serialisointia ja deserialisointia varten. Rakenteen kentät toteuttavat myös dekooderin ja enkooderin rajapinnat, jotta rakenne voidaan serialisoida ja deserialisoida. Sink-luokan ilmentymiä tarvitaan, kun eri tietotyyppejä sarjotetaan. Sink-luokan ilmentymässä on set-type kenttäbuf, joka tallentaa tavutyyppitiedot, ja kaikki sarjoitetut tiedot tallennetaan bufiin.

Kiinteäpituisille tiedoille (esim. tavu, u16, u32, u64 jne.) tiedot muunnetaan suoraan tavutaulukkoon ja tallennetaan sitten buf-tiedostoon; ei-kiinteäpituisille tiedoille pitää ensin sarjoida pituus ja sitten Ddata (esimerkiksi tuntemattoman kokoiset etumerkittömät kokonaisluvut, mukaan lukien u16, u32 tai u64 jne.).

Deserialisaatio on täysin päinvastainen. Jokaiselle serialisointimenetelmälle on olemassa vastaava deserialisointimenetelmä. Deserialisointi edellyttää Source-luokan esiintymien käyttöä. Tässä luokkaesiintymässä on kaksi kenttää buf ja pos. Buf:a käytetään sarjoitettavan tiedon tallentamiseen ja pos:a nykyisen lukupaikan tallentamiseen. Kun tietyntyyppistä dataa luetaan, voit lukea sen suoraan, jos tiedät sen pituuden, jos kyseessä on tuntematon pituus – lue pituus ensin ja sitten sisältö.

Käytä ja päivitä ketjun tietoja

ontology-wasm-cdt-rust - kapseloi ketjussa olevien tietojen kanssa työskentelyyn toiminnallisen menetelmän, jonka avulla kehittäjät voivat toteuttaa toimintoja, kuten lisätä, poistaa, muuttaa ja kysellä tietoja ketjussa seuraavasti:

  • tietokanta::get(avain) - käytetään tietojen pyytämiseen ketjusta ja avain pyytää AsRef-rajapinnan toteutusta;
  • tietokanta::put(avain, arvo) - käytetään tietojen tallentamiseen verkkoon. Avain pyytää AsRef-rajapinnan toteuttamista ja arvo pyytää Encoder-liitännän toteutusta;
  • tietokanta::delete(avain) - käytetään tietojen poistamiseen ketjusta ja avain pyytää AsRef-rajapinnan toteutusta.

Sopimustestaus

Kun sopimuksen menetelmät otetaan käyttöön, tarvitsemme pääsyn ketjun tietoihin ja tarvitsemme sopivan virtuaalikoneen sopimuksen tavukoodin suorittamiseen, joten sopimus on yleensä tarpeen ottaa käyttöön ketjussa testausta varten. Mutta tämä testausmenetelmä on ongelmallinen. Jotta kehittäjien olisi helpompi testata sopimuksia, ontio_std-kirjasto tarjoaa testausta varten valemoduulin. Tämä moduuli simuloi piirin tietoja, mikä helpottaa kehittäjien yksikkötestausta sopimuksessa mainittujen menetelmien avulla. Konkreettisia esimerkkejä löytyy täällä.

Sopimusvirheenkorjaus

console::debug(msg) näyttää virheenkorjaustiedot sopimuksen virheenkorjauksen aikana. Viestitiedot lisätään solmun lokitiedostoon. Edellytyksenä on, että lokitiedostotaso asetetaan virheenkorjaustilaan, kun paikallinen ontologian testisolmu on käynnissä.

runtime::notify(msg) tulostaa asianmukaiset virheenkorjaustiedot, kun sopimusta korjataan. Tämä menetelmä tallentaa ketjuun syötetyt tiedot, ja ketjusta voidaan tiedustella getSmartCodeEvent-menetelmällä.

Hashrate&Sharesin toimittajat käänsivät artikkelin erityisesti OntologyRussialle. napsauttaa

Oletko kehittäjä? Liity tekniikkayhteisöömme osoitteessa Epäsopu. Katso myös Kehittäjäkeskus verkkosivustollamme, josta löydät kehittäjätyökalut, dokumentaatiot ja paljon muuta.

Ontologia

Lähde: will.com

Lisää kommentti