Kako napisati WebAssembly pametni ugovor na mreži Ontology? 1. dio: Hrđa

Kako napisati WebAssembly pametni ugovor na mreži Ontology? 1. dio: Hrđa

Ontology Wasm tehnologija smanjuje troškove migracije dApp pametnih ugovora sa složenom poslovnom logikom na blockchain, čime se uvelike obogaćuje dApp ekosustav.

trenutno Ontologija Wasm Istovremeno podržava i Rust i C++ razvoj. Rust jezik bolje podržava Wasm, a generirani bajt kod je jednostavniji, što može dodatno smanjiti troškove ugovornih poziva. Tako, kako koristiti Rust za razvoj ugovora na mreži Ontology?

Razvoj WASM ugovora s Rustom

Stvorite ugovor

Naboj dobar je alat za izradu projekata i upravljanje paketima za Rust razvoj, koji pomaže programerima da bolje organiziraju interakciju koda i biblioteka trećih strana. Za stvaranje novog Ontology Wasm ugovora jednostavno pokrenite sljedeću naredbu:

Kako napisati WebAssembly pametni ugovor na mreži Ontology? 1. dio: Hrđa

Struktura projekta koju generira:

Kako napisati WebAssembly pametni ugovor na mreži Ontology? 1. dio: Hrđa

Datoteka Cargo.toml koristi se za postavljanje osnovnih informacija o projektu i podataka o ovisnoj knjižnici. Odjeljak [lib] datoteke mora biti postavljen na crate-type = ["cdylib"]. Datoteka lib.rs koristi se za pisanje logičkog koda ugovora. Osim toga, trebate dodati parametre ovisnosti u odjeljak [ovisnosti] konfiguracijske datoteke Cargo.toml:

Kako napisati WebAssembly pametni ugovor na mreži Ontology? 1. dio: Hrđa

Uz ovu ovisnost, programeri mogu pozvati sučelja koja su u interakciji s ontološkim blockchainom i alatima kao što je parametar serijalizacije.

Funkcija unosa ugovora

Svaki program ima funkciju unosa, poput glavne funkcije koju obično vidimo, ali ugovor nema glavnu funkciju. Kada se Wasm ugovor razvija pomoću Rusta, zadana funkcija invoke koristi se kao ulazna funkcija za korištenje ugovora. Naziv funkcije u Rustu bit će nejasan prilikom kompajliranja izvornog koda Rusta u bajt kod koji može izvršiti virtualni stroj. Kako bi se spriječilo kompajler od generiranja suvišnog koda i smanjila veličina ugovora, funkcija invoke dodaje #[no_mangle] napomenu.

Kako funkcija invoke dobiva parametre za izvršenje transakcije?

Biblioteka ontio_std pruža runtime::input() funkciju za dobivanje parametara za izvršenje transakcije. Programeri mogu koristiti ZeroCopySource za deserijalizaciju rezultirajućeg niza bajtova. U kojem je prvi pročitani niz bajtova naziv metode pozivanja, nakon čega slijede parametri metode.

Kako se vraća rezultat izvršenja ugovora?

Funkcija runtime::ret koju pruža biblioteka ontio_std vraća rezultat izvršenja metode.

Dovršena funkcija pozivanja izgleda ovako:

Kako napisati WebAssembly pametni ugovor na mreži Ontology? 1. dio: Hrđa

Serijalizacija i deserijalizacija podataka ugovora

U procesu razvoja ugovora, programeri uvijek nailaze na probleme sa serijalizacijom i deserijalizacijom, posebno s načinom pohranjivanja struct tipa podataka u bazu podataka i kako deserijalizirati niz bajtova pročitan iz baze podataka da bi se dobio struct tip podataka.

Biblioteka ontio_std pruža sučelja dekodera i kodera za serijalizaciju i deserijalizaciju podataka. Polja strukture također implementiraju sučelja dekodera i kodera tako da se struktura može serijalizirati i deserijalizirati. Instance klase Sink potrebne su kada su različiti tipovi podataka serijalizirani. Instanca klase Sink ima polje tipa skupa buf koje pohranjuje podatke tipa bajta, a svi serijalizirani podaci pohranjeni su u buf.

Za podatke fiksne duljine (npr.: bajt, u16, u32, u64, itd.), podaci se izravno pretvaraju u niz bajtova i zatim pohranjuju u buf; za podatke nefiksne duljine, prvo se mora serijalizirati duljina, a zatim Dpodaci (na primjer, cijeli brojevi bez predznaka nepoznate veličine, uključujući u16, u32 ili u64, itd.).

Deserijalizacija je upravo suprotno. Za svaku metodu serijalizacije postoji odgovarajuća metoda deserijalizacije. Deserijalizacija zahtijeva korištenje instanci klase Source. Ova instanca klase ima dva polja buf i pos. Buf se koristi za pohranjivanje podataka koji se deserijaliziraju, a pos se koristi za pohranjivanje trenutne pozicije čitanja. Kada se čita određena vrsta podataka, ako znate njihovu duljinu, možete je izravno čitati, za podatke nepoznate duljine — prvo pročitajte duljinu, a zatim pročitajte sadržaj.

Pristup i ažuriranje podataka u lancu

ontologija-wasm-cdt-hrđa - enkapsulirana operativna metoda za rad s podacima u lancu, koja je pogodna za programere za implementaciju operacija kao što su dodavanje, brisanje, promjena i upit podataka u lancu kako slijedi:

  • baza podataka::get(ključ) - služi za traženje podataka iz lanca, a ključ zahtijeva implementaciju AsRef sučelja;
  • baza podataka::put(ključ, vrijednost) - koristi se za pohranjivanje podataka na mreži. Key zahtijeva implementaciju AsRef sučelja, a value zahtijeva implementaciju Encoder sučelja;
  • baza podataka::delete(ključ) - služi za uklanjanje podataka iz lanca, a ključ zahtijeva implementaciju AsRef sučelja.

Testiranje ugovora

Kada se implementiraju metode ugovora, potreban nam je pristup podacima u lancu i potreban nam je odgovarajući virtualni stroj za izvršavanje bajt koda ugovora, tako da je općenito potrebno implementirati ugovor u lanac za testiranje. Ali ova metoda testiranja je problematična. Kako bi programerima olakšali testiranje ugovora, biblioteka ontio_std nudi lažni modul za testiranje. Ovaj modul pruža simulaciju podataka u krugu, olakšavajući programerima jedinično testiranje metoda u ugovoru. Mogu se pronaći konkretni primjeri здесь.

Otklanjanje pogrešaka ugovora

console::debug(msg) prikazuje informacije o ispravljanju pogrešaka dok ispravlja pogreške ugovora. Informacije o poruci bit će dodane u datoteku dnevnika čvora. Preduvjet je postaviti razinu datoteke dnevnika na način otklanjanja pogrešaka kada se izvodi lokalni ontološki testni čvor.

runtime::notify(msg) ispisuje odgovarajuće informacije o ispravljanju pogrešaka dok se ugovor ispravlja. Ova metoda će pohraniti podatke unesene u lanac i može se tražiti iz lanca pomoću metode getSmartCodeEvent.

Članak su preveli urednici Hashrate&Shares posebno za OntologyRussia. plakati

Jeste li programer? Pridružite se našoj tehnološkoj zajednici na Nesloga. Također, pogledajte Centar za razvojne programere na našoj web stranici, gdje možete pronaći alate za razvojne programere, dokumentaciju i još mnogo toga.

Ontologija

Izvor: www.habr.com

Dodajte komentar