Kaip parašyti išmaniąją „WebAssembly“ sutartį ontologijos tinkle? 1 dalis: Rūdys

Kaip parašyti išmaniąją „WebAssembly“ sutartį ontologijos tinkle? 1 dalis: Rūdys

„Ontology Wasm“ technologija sumažina „dApp“ išmaniųjų sutarčių, turinčių sudėtingą verslo logiką, perkėlimo į „blockchain“ išlaidas, taip labai praturtindama „dApp“ ekosistemą.

Dabar Ontologija Wasm Vienu metu palaiko Rust ir C++ plėtrą. Rust kalba geriau palaiko Wasm, o sugeneruotas baitinis kodas yra paprastesnis, o tai gali dar labiau sumažinti sutartinių skambučių kainą. Taigi, kaip naudoti Rust kuriant Ontologijos tinklo sutartį?

WASM sutarties su Rust kūrimas

Sukurti sutartį

krovinys yra geras „Rust“ kūrimo projektų kūrimo ir paketų valdymo įrankis, padedantis kūrėjams geriau organizuoti kodo ir trečiųjų šalių bibliotekų sąveiką. Norėdami sukurti naują Ontologijos Wasm sutartį, tiesiog paleiskite šią komandą:

Kaip parašyti išmaniąją „WebAssembly“ sutartį ontologijos tinkle? 1 dalis: Rūdys

Jo sukurta projekto struktūra:

Kaip parašyti išmaniąją „WebAssembly“ sutartį ontologijos tinkle? 1 dalis: Rūdys

Failas Cargo.toml naudojamas pagrindinei projekto informacijai ir priklausomos bibliotekos informacijai nustatyti. Failo skiltis [lib] turi būti nustatyta į crate-type = ["cdylib"]. Failas lib.rs naudojamas sutarties loginiam kodui rašyti. Be to, į Cargo.toml konfigūracijos failo skyrių [priklausomybės] turite įtraukti priklausomybės parametrus:

Kaip parašyti išmaniąją „WebAssembly“ sutartį ontologijos tinkle? 1 dalis: Rūdys

Turėdami šią priklausomybę, kūrėjai gali iškviesti sąsajas, kurios sąveikauja su ontologijos blokų grandine ir įrankiais, tokiais kaip serializacijos parametras.

Sutarties įvedimo funkcija

Kiekviena programa turi įvesties funkciją, kaip ir pagrindinė funkcija, kurią paprastai matome, tačiau sutartis neturi pagrindinės funkcijos. Kai Wasm sutartis kuriama naudojant Rust, numatytoji iškvietimo funkcija naudojama kaip sutarties naudojimo įvesties funkcija. „Rust“ funkcijos pavadinimas bus neaiškus, kai „Rust“ šaltinio kodas bus sudarytas į baitinį kodą, kurį gali vykdyti virtuali mašina. Kad kompiliatorius negeneruotų perteklinio kodo ir sumažintų sutarties dydį, iškvietimo funkcija prideda #[no_mangle] anotaciją.

Kaip iškvietimo funkcija gauna parametrus operacijai vykdyti?

Biblioteka ontio_std suteikia vykdymo laiko::input() funkciją, kad gautų parametrus operacijai vykdyti. Kūrėjai gali naudoti „ZeroCopySource“, kad deserializuoti gautą baitų masyvą. Kuriame pirmasis nuskaitytų baitų masyvas yra iškvietimo metodo pavadinimas, po kurio nurodomi metodo parametrai.

Kaip grąžinamas sutarties vykdymo rezultatas?

Funkcija Runtime::ret, kurią teikia ontio_std biblioteka, grąžina metodo vykdymo rezultatą.

Užbaigta iškvietimo funkcija atrodo taip:

Kaip parašyti išmaniąją „WebAssembly“ sutartį ontologijos tinkle? 1 dalis: Rūdys

Sutarčių duomenų nuoseklinimas ir nuoseklumas

Kurdami sutartis, kūrėjai visada susiduria su serializavimo ir serializavimo problemomis, ypač dėl to, kaip duomenų bazėje saugoti struktūros duomenų tipą ir kaip deserializuoti iš duomenų bazės nuskaitytą baitų masyvą, kad gautų struktūros duomenų tipą.

Ontio_std biblioteka suteikia dekoderio ir kodavimo sąsajas duomenų serializavimui ir deserializavimui. Struktūros laukuose taip pat įdiegtos dekoderio ir kodavimo sąsajos, kad struktūrą būtų galima serializuoti ir deserializuoti. Sink klasės egzemplioriai reikalingi, kai serializuojami įvairūs duomenų tipai. Sink klasės egzempliorius turi rinkinio tipo lauko buf, kuriame saugomi baitų tipo duomenys, o visi nuoseklūs duomenys saugomi buf.

Fiksuoto ilgio duomenų (pvz.: baitas, u16, u32, u64 ir kt.) duomenys tiesiogiai konvertuojami į baitų masyvą ir saugomi buf; nefiksuoto ilgio duomenims pirmiausia turi būti suskirstytas ilgis, po to Ddata (pavyzdžiui, nežinomo dydžio sveikieji skaičiai be ženklų, įskaitant u16, u32 arba u64 ir pan.).

Deserializacija yra visiškai priešinga. Kiekvienam serializacijos metodui yra atitinkamas deserializacijos metodas. Deserializavimui reikia naudoti šaltinio klasės egzempliorius. Šis klasės egzempliorius turi du laukus buf ir pos. Buf naudojamas duomenims, kurie turi būti serializuoti, saugoti, o poz – dabartinei skaitymo vietai išsaugoti. Kai skaitomi tam tikro tipo duomenys, jei žinote jų ilgį, galite juos perskaityti tiesiogiai, o nežinomo ilgio duomenis – pirmiausia perskaitykite ilgį, tada perskaitykite turinį.

Pasiekite ir atnaujinkite duomenis grandinėje

ontologija-wasm-cdt-rust - įtrauktas operatyvinis darbo su duomenimis grandinėje metodas, kuriuo kūrėjams patogu atlikti tokias operacijas kaip duomenų pridėjimas, trynimas, keitimas ir užklausų grandinėje:

  • duomenų bazė::get(raktas) - naudojamas duomenims iš grandinės užklausti, o raktas prašo įdiegti AsRef sąsają;
  • duomenų bazė::put(raktas, reikšmė) - naudojamas duomenims tinkle saugoti. Raktas reikalauja įdiegti AsRef sąsają, o vertė – kodavimo sąsajos diegimą;
  • duomenų bazė::ištrinti(raktas) - naudojamas duomenims pašalinti iš grandinės, o raktas reikalauja įdiegti AsRef sąsają.

Sutarties testavimas

Įdiegę sutarties metodus, mums reikia prieigos prie grandinės duomenų ir reikia tinkamos virtualios mašinos, kad galėtume vykdyti sutarties baito kodą, todėl paprastai būtina dislokuoti sutartį grandinėje testavimui. Tačiau šis tyrimo metodas yra problemiškas. Kad kūrėjams būtų lengviau išbandyti sutartis, ontio_std biblioteka pateikia bandomąjį modulį. Šis modulis suteikia grandinės duomenų modeliavimą, todėl kūrėjams lengviau atlikti sutartyje nurodytus metodus. Galima rasti konkrečių pavyzdžių čia.

Sutarties derinimas

console::debug(msg) rodo derinimo informaciją derinant sutartį. Pranešimo informacija bus įtraukta į mazgo žurnalo failą. Būtina sąlyga yra nustatyti žurnalo failo lygį derinimo režimu, kai veikia vietinis ontologijos bandymo mazgas.

Runtime::notify(msg) išveda atitinkamą derinimo informaciją, kol derinama sutartis. Šis metodas išsaugos į grandinę įvestą informaciją ir jos užklausą galima pateikti naudojant getSmartCodeEvent metodą.

Straipsnį Hashrate&Shares redaktoriai išvertė specialiai OntologyRussia. spustelėkite

Ar esate kūrėjas? Prisijunkite prie mūsų technologijų bendruomenės adresu Nesantaika. Be to, pažiūrėkite Kūrėjų centras mūsų svetainėje, kur galite rasti kūrėjo įrankių, dokumentacijos ir kt.

Ontologija

Šaltinis: www.habr.com

Добавить комментарий