Kako napisati pametno pogodbo WebAssembly v omrežju Ontology? 1. del: Rja

Kako napisati pametno pogodbo WebAssembly v omrežju Ontology? 1. del: Rja

Tehnologija Ontology Wasm zmanjša stroške migracije pametnih pogodb dApp s kompleksno poslovno logiko v verigo blokov in s tem močno obogati ekosistem dApp.

Zdaj Ontologija Wasm Istočasno podpira razvoj Rust in C++. Jezik Rust bolje podpira Wasm, generirana bajtna koda pa je enostavnejša, kar lahko dodatno zniža stroške pogodbenih klicev. Torej, kako uporabiti Rust za razvoj pogodbe v omrežju Ontology?

Razvijanje pogodbe WASM z Rustom

Ustvarite pogodbo

Cargo je dobro orodje za ustvarjanje projektov in upravljanje paketov za razvoj Rust, ki razvijalcem pomaga bolje organizirati interakcijo kode in knjižnic tretjih oseb. Če želite ustvariti novo pogodbo Ontology Wasm, preprosto zaženite naslednji ukaz:

Kako napisati pametno pogodbo WebAssembly v omrežju Ontology? 1. del: Rja

Struktura projekta, ki jo ustvari:

Kako napisati pametno pogodbo WebAssembly v omrežju Ontology? 1. del: Rja

Datoteka Cargo.toml se uporablja za nastavitev osnovnih informacij o projektu in informacij o odvisni knjižnici. Razdelek [lib] datoteke mora biti nastavljen na crate-type = ["cdylib"]. Datoteka lib.rs se uporablja za pisanje pogodbene logične kode. Poleg tega morate dodati parametre odvisnosti v razdelek [odvisnosti] konfiguracijske datoteke Cargo.toml:

Kako napisati pametno pogodbo WebAssembly v omrežju Ontology? 1. del: Rja

S to odvisnostjo lahko razvijalci kličejo vmesnike, ki komunicirajo z verigo blokov Ontology, in orodji, kot je parameter serializacije.

Funkcija vnosa pogodbe

Vsak program ima funkcijo vnosa, kot je glavna funkcija, ki jo običajno vidimo, pogodba pa nima glavne funkcije. Ko je pogodba Wasm razvita z uporabo Rust, se privzeta funkcija invoke uporablja kot vhodna funkcija za uporabo pogodbe. Ime funkcije v Rustu bo nejasno pri prevajanju izvorne kode Rust v bajtno kodo, ki jo lahko izvede virtualni stroj. Da bi preprečili prevajalniku ustvarjanje odvečne kode in zmanjšali velikost pogodbe, funkcija invoke doda pripis #[no_mangle].

Kako funkcija invoke pridobi parametre za izvedbo transakcije?

Knjižnica ontio_std ponuja funkcijo runtime::input() za pridobivanje parametrov za izvedbo transakcije. Razvijalci lahko uporabijo ZeroCopySource za deserializacijo dobljenega niza bajtov. V katerem je prvo prebrano polje bajtov ime priklicne metode, ki mu sledijo parametri metode.

Kako se vrne rezultat izvedbe pogodbe?

Funkcija runtime::ret, ki jo ponuja knjižnica ontio_std, vrne rezultat izvedbe metode.

Dokončana funkcija priklica izgleda takole:

Kako napisati pametno pogodbo WebAssembly v omrežju Ontology? 1. del: Rja

Serializacija in deserializacija pogodbenih podatkov

V procesu razvijanja pogodb razvijalci vedno naletijo na težave s serializacijo in deserializacijo, zlasti s tem, kako shraniti podatkovni tip struct v bazo podatkov in kako deserializirati bajtno matriko, prebrano iz baze podatkov, da dobimo podatkovni tip struct.

Knjižnica ontio_std nudi vmesnike dekoderja in kodirnika za serializacijo in deserializacijo podatkov. Polja strukture implementirajo tudi vmesnika dekoderja in kodirnika, tako da je strukturo mogoče serializirati in deserializirati. Primerki razreda Sink so potrebni, ko so različni tipi podatkov serializirani. Primerek razreda Sink ima polje nastavljenega tipa buf, ki shranjuje podatke tipa bajt, vsi serializirani podatki pa so shranjeni v buf.

Za podatke s fiksno dolžino (npr.: bajt, u16, u32, u64 itd.) se podatki neposredno pretvorijo v niz bajtov in nato shranijo v buf; za podatke nefiksne dolžine je treba najprej serializirati dolžino, nato Ddata (na primer nepredznačena cela števila neznane velikosti, vključno z u16, u32 ali u64 itd.).

Deserializacija je pravo nasprotje. Za vsako metodo serializacije obstaja ustrezna metoda deserializacije. Deserializacija zahteva uporabo primerkov razreda Source. Ta primerek razreda ima dve polji buf in pos. Buf se uporablja za shranjevanje podatkov, ki jih je treba deserializirati, pos pa za shranjevanje trenutnega položaja branja. Ko se bere določena vrsta podatkov, če poznate njihovo dolžino, jih lahko preberete neposredno, za podatke neznane dolžine – najprej preberite dolžino, nato preberite vsebino.

Dostopajte in posodabljajte podatke v verigi

ontologija-wasm-cdt-rja - enkapsulirano operativno metodo za delo s podatki v verigi, ki je priročna za razvijalce za izvajanje operacij, kot so dodajanje, brisanje, spreminjanje in poizvedovanje podatkov v verigi, kot sledi:

  • baza podatkov::get(ključ) - uporablja se za zahtevanje podatkov iz verige, ključ pa zahteva implementacijo vmesnika AsRef;
  • baza podatkov::put(ključ, vrednost) - uporablja se za shranjevanje podatkov v omrežju. Key zahteva implementacijo vmesnika AsRef, value pa implementacijo vmesnika Encoder;
  • baza podatkov::delete(ključ) - uporablja se za odstranjevanje podatkov iz verige, ključ pa zahteva implementacijo vmesnika AsRef.

Pogodbeno testiranje

Ko so metode pogodbe implementirane, potrebujemo dostop do podatkov v verigi in potrebujemo ustrezen virtualni stroj za izvajanje bajtne kode pogodbe, zato je na splošno treba razmestiti pogodbo v verigi za testiranje. Toda ta metoda testiranja je problematična. Da bi razvijalcem olajšali testiranje pogodb, knjižnica ontio_std ponuja lažni modul za testiranje. Ta modul zagotavlja simulacijo podatkov v vezju, kar razvijalcem olajša enotno testiranje metod v pogodbi. Konkretne primere je mogoče najti tukaj.

Odpravljanje napak v pogodbi

console::debug(msg) prikaže informacije o odpravljanju napak med odpravljanjem napak v pogodbi. Informacije o sporočilu bodo dodane v datoteko dnevnika vozlišča. Predpogoj je nastavitev ravni dnevniške datoteke na način za odpravljanje napak, ko se izvaja lokalno testno vozlišče Ontology.

runtime::notify(msg) izpiše ustrezne informacije o odpravljanju napak, medtem ko se pogodba odpravlja napak. Ta metoda bo shranila informacije, vnesene v verigo, in jih je mogoče poizvedovati iz verige z uporabo metode getSmartCodeEvent.

Članek so posebej za OntologyRussia prevedli uredniki Hashrate&Shares. kliknite

Ste razvijalec? Pridružite se naši tehnični skupnosti na Razpad. Oglejte si tudi Center za razvijalce na naši spletni strani, kjer lahko najdete orodja za razvijalce, dokumentacijo in drugo.

Ontologija

Vir: www.habr.com

Dodaj komentar