Kā uzrakstīt WebAssembly viedo līgumu Ontoloģijas tīklā? 1. daļa: Rūsa

Kā uzrakstīt WebAssembly viedo līgumu Ontoloģijas tīklā? 1. daļa: Rūsa

Ontology Wasm tehnoloģija samazina izmaksas, kas saistītas ar dApp viedo līgumu ar sarežģītu biznesa loģiku migrēšanu uz blokķēdi, tādējādi ievērojami bagātinot dApp ekosistēmu.

Tagad Ontoloģija Wasm Vienlaicīgi atbalsta gan Rust, gan C++ izstrādi. Rust valoda labāk atbalsta Wasm, un ģenerētais baitkods ir vienkāršāks, kas var vēl vairāk samazināt līguma zvanu izmaksas. Tātad, kā izmantot Rust, lai izstrādātu līgumu Ontoloģijas tīklā?

WASM līguma izstrāde ar Rust

Izveidojiet līgumu

krava ir labs projektu izveides un pakotņu pārvaldības rīks Rust izstrādei, kas palīdz izstrādātājiem labāk organizēt koda un trešo pušu bibliotēku mijiedarbību. Lai izveidotu jaunu Ontology Wasm līgumu, vienkārši palaidiet šo komandu:

Kā uzrakstīt WebAssembly viedo līgumu Ontoloģijas tīklā? 1. daļa: Rūsa

Projekta struktūra, ko tas rada:

Kā uzrakstīt WebAssembly viedo līgumu Ontoloģijas tīklā? 1. daļa: Rūsa

Fails Cargo.toml tiek izmantots, lai iestatītu projekta pamatinformāciju un atkarīgās bibliotēkas informāciju. Faila sadaļai [lib] jābūt iestatītai uz crate-type = ["cdylib"]. Fails lib.rs tiek izmantots līguma loģikas koda rakstīšanai. Turklāt konfigurācijas faila Cargo.toml sadaļai [dependencies] ir jāpievieno atkarības parametri:

Kā uzrakstīt WebAssembly viedo līgumu Ontoloģijas tīklā? 1. daļa: Rūsa

Izmantojot šo atkarību, izstrādātāji var izsaukt saskarnes, kas mijiedarbojas ar ontoloģijas blokķēdi un rīkiem, piemēram, serializācijas parametru.

Līguma ievadīšanas funkcija

Katrai programmai ir ievades funkcija, piemēram, galvenā funkcija, ko mēs parasti redzam, bet līgumam nav galvenās funkcijas. Ja Wasm līgums tiek izstrādāts, izmantojot Rust, noklusējuma izsaukšanas funkcija tiek izmantota kā ievades funkcija līguma izmantošanai. Funkcijas nosaukums programmā Rust būs neskaidrs, kompilējot Rust pirmkodu baitkodā, ko var izpildīt virtuālā mašīna. Lai kompilators neģenerētu lieku kodu un samazinātu līguma lielumu, izsaukšanas funkcija pievieno anotāciju #[no_mangle].

Kā izsaukšanas funkcija iegūst parametrus, lai izpildītu darījumu?

Ontio_std bibliotēka nodrošina izpildlaika::input() funkciju, lai iegūtu parametrus darījuma izpildei. Izstrādātāji var izmantot ZeroCopySource, lai deserializētu iegūto baitu masīvu. Kurā pirmais lasītais baitu masīvs ir izsaukšanas metodes nosaukums, kam seko metodes parametri.

Kā tiek atgriezts līguma izpildes rezultāts?

Funkcija Runtime::ret, ko nodrošina ontio_std bibliotēka, atgriež metodes izpildes rezultātu.

Pabeigtā izsaukšanas funkcija izskatās šādi:

Kā uzrakstīt WebAssembly viedo līgumu Ontoloģijas tīklā? 1. daļa: Rūsa

Līgumu datu serializēšana un deserializēšana

Līgumu izstrādes procesā izstrādātājiem vienmēr rodas problēmas ar serializāciju un deserializāciju, jo īpaši ar to, kā datu bāzē saglabāt struktūras datu tipu un kā deserializēt no datu bāzes nolasītu baitu masīvu, lai iegūtu struktūras datu tipu.

Ontio_std bibliotēka nodrošina dekodētāja un kodētāja saskarnes datu serializācijai un deserializācijai. Struktūras lauki īsteno arī dekodētāja un kodētāja saskarnes, lai struktūru varētu serializēt un deserializēt. Sink klases gadījumi ir nepieciešami, ja tiek serializēti dažādi datu tipi. Sink klases instancē ir kopas tipa lauka buf, kas saglabā baitu tipa datus, un visi serializētie dati tiek glabāti buf.

Fiksēta garuma datiem (piemēram, baits, u16, u32, u64 utt.) dati tiek tieši pārvērsti baitu masīvā un pēc tam saglabāti buf; nefiksēta garuma datiem vispirms ir jāserializē garums, pēc tam Ddata (piemēram, nezināma izmēra veseli skaitļi bez paraksta, ieskaitot u16, u32 vai u64 utt.).

Deserializācija ir tieši pretēja. Katrai serializācijas metodei ir atbilstoša deserializācijas metode. Deserializācijai ir jāizmanto klases Source gadījumi. Šajā klases instancē ir divi lauki buf un poz. Buf tiek izmantots, lai saglabātu deserializējamos datus, un pozīcija tiek izmantota, lai saglabātu pašreizējo lasīšanas pozīciju. Kad tiek lasīti noteikta veida dati, ja zināt to garumu, varat tos nolasīt tieši, nezināma garuma datiem — vispirms izlasiet garumu, pēc tam izlasiet saturu.

Piekļūstiet un atjauniniet datus ķēdē

ontoloģija-wasm-cdt-rust - iekapsulēta darbības metode darbam ar datiem ķēdē, kas izstrādātājiem ir ērta, lai ieviestu tādas darbības kā datu pievienošana, dzēšana, mainīšana un vaicājumi ķēdē šādi:

  • datu bāze::get(atslēga) - tiek izmantots, lai pieprasītu datus no ķēdes, un atslēga pieprasa AsRef saskarnes ieviešanu;
  • datu bāze::put(atslēga, vērtība) - izmanto datu glabāšanai tīklā. Key pieprasa AsRef interfeisa ieviešanu, bet vērtība pieprasa kodētāja saskarnes ieviešanu;
  • datu bāze::dzēst(atslēga) - tiek izmantots, lai noņemtu datus no ķēdes, un atslēga pieprasa AsRef saskarnes ieviešanu.

Līguma pārbaude

Kad līguma metodes ir ieviestas, mums ir nepieciešama piekļuve ķēdes datiem un mums ir nepieciešama atbilstoša virtuālā mašīna, lai izpildītu līguma baitu kodu, tāpēc parasti ir nepieciešams ķēdē izvietot līgumu testēšanai. Bet šī pārbaudes metode ir problemātiska. Lai izstrādātājiem būtu vieglāk pārbaudīt līgumus, ontio_std bibliotēka nodrošina testēšanas moduli. Šis modulis nodrošina shēmas datu simulāciju, atvieglojot izstrādātājiem līgumā noteikto metožu vienību pārbaudi. Var atrast konkrētus piemērus šeit.

Līguma atkļūdošana

konsole::debug(msg) parāda atkļūdošanas informāciju līguma atkļūdošanas laikā. Ziņojuma informācija tiks pievienota mezgla žurnāla failam. Priekšnoteikums ir iestatīt žurnālfaila līmeni atkļūdošanas režīmā, kad darbojas lokālais ontoloģijas testa mezgls.

izpildlaiks::notify(msg) izvada atbilstošo atkļūdošanas informāciju, kamēr tiek veikta līguma atkļūdošana. Šī metode saglabās ķēdē ievadīto informāciju, un to var pieprasīt no ķēdes, izmantojot metodi getSmartCodeEvent.

Rakstu speciāli OntologyRussia tulkojuši Hashrate&Shares redaktori. raudāt

Vai jūs esat izstrādātājs? Pievienojieties mūsu tehnoloģiju kopienai vietnē Neatbilstība. Apskatiet arī Izstrādātāju centrs mūsu vietnē, kur varat atrast izstrādātāju rīkus, dokumentāciju un daudz ko citu.

Ontoloģiju

Avots: www.habr.com

Pievieno komentāru