Ako napísať inteligentnú zmluvu WebAssembly v sieti Ontology? Časť 1: Hrdza

Ako napísať inteligentnú zmluvu WebAssembly v sieti Ontology? Časť 1: Hrdza

Technológia Ontology Wasm znižuje náklady na prenos inteligentných zmlúv dApp so zložitou obchodnou logikou do blockchainu, čím výrazne obohacuje ekosystém dApp.

v súčasnosti Ontológia Wasm súčasne podporuje vývoj v Rust aj C++. Jazyk Rust lepšie podporuje Wasm a generovaný bajtkód je jednoduchší, čo môže ešte viac znížiť náklady na zmluvné hovory. takže, ako použiť Rust na vývoj zmluvy v sieti Ontology?

Vypracovanie zmluvy WASM pomocou Rust

Vytvorenie zmluvy

náklad je dobrý nástroj na vytváranie projektov a správu balíkov pri vývoji programov v Ruste, ktorý pomáha vývojárom lepšie organizovať interakciu kódu a knižníc tretích strán. Ak chcete vytvoriť nový kontrakt Ontology Wasm, jednoducho spustite nasledujúci príkaz:

Ako napísať inteligentnú zmluvu WebAssembly v sieti Ontology? Časť 1: Hrdza

Štruktúra projektu, ktorú generuje:

Ako napísať inteligentnú zmluvu WebAssembly v sieti Ontology? Časť 1: Hrdza

Súbor Cargo.toml sa používa na konfiguráciu základných informácií o projekte a závislých informácií o knižnici. Časť [lib] v súbore musí byť nastavená na Crate-type = [“cdylib”]. Súbor lib.rs sa používa na kódovanie logiky kontraktu. Okrem toho musíte pridať parametre závislosti do sekcie [dependencies] konfiguračného súboru Cargo.toml:

Ako napísať inteligentnú zmluvu WebAssembly v sieti Ontology? Časť 1: Hrdza

Pomocou tejto závislosti môžu vývojári volať rozhrania, ktoré interagujú s blockchainom Ontológie a nástrojmi, ako je napríklad parameter serializácie.

Funkcia vstupu do zmluvy

Každý program má vstupnú funkciu, ako je hlavná funkcia, ktorú zvyčajne vidíme, ale zmluva nemá hlavnú funkciu. Pri vývoji zmluvy Wasm pomocou Rust sa funkcia invoke štandardne používa ako vstupná funkcia na používanie zmluvy. Názov funkcie v Ruste bude nejasný pri kompilácii zdrojového kódu Rust do bajtkódu, ktorý môže spustiť virtuálny stroj. Aby sa zabránilo kompilátoru generovať redundantný kód a aby sa zmenšila veľkosť kontraktu, funkcia invoke pridá anotáciu #[no_mangle].

Ako funkcia vyvolávania prijíma parametre na vykonanie transakcie?

Knižnica ontio_std poskytuje funkciu runtime::input() na príjem parametrov na vykonanie transakcie. Vývojári môžu použiť ZeroCopySource na deserializáciu výsledného bajtového poľa. V ktorom prvé prečítanie bajtového poľa je názov metódy invoke, za ktorým nasledujú parametre metódy.

Ako sa vráti výsledok plnenia zmluvy?

Funkcia runtime::ret, ktorú poskytuje knižnica ontio_std, vracia výsledok vykonania metódy.

Dokončená funkcia vyvolania vyzerá takto:

Ako napísať inteligentnú zmluvu WebAssembly v sieti Ontology? Časť 1: Hrdza

Serializácia a deserializácia zmluvných údajov

V procese vývoja zmlúv sa vývojári vždy stretávajú s problémami serializácie a deserializácie, konkrétne s tým, ako uložiť dátový typ struct do databázy a ako deserializovať bajtové pole načítané z databázy, aby sa získal dátový typ struct.

Knižnica ontio_std poskytuje rozhrania dekodéra a kódovača na serializáciu a deserializáciu údajov. Polia struct tiež implementujú rozhrania dekodéra a kódovača, takže štruktúra môže byť serializovaná a deserializovaná. Inštancie triedy Sink sú potrebné, keď sa serializujú rôzne typy údajov. Inštancia triedy Sink má pole typu set-type buf, ktoré ukladá dáta typu bajtu a všetky serializované dáta sú uložené v buf.

Pre dáta s pevnou dĺžkou (napr.: bajt, u16, u32, u64 atď.) sa dáta priamo skonvertujú do poľa bajtov a potom sa uložia do buf; v prípade údajov s nepevnou dĺžkou musíte najskôr serializovať dĺžku a potom údaje D (napríklad celé čísla bez znamienka neznámej veľkosti vrátane u16, u32 alebo u64 atď.).

Deserializácia je presný opak. Pre každú metódu serializácie existuje zodpovedajúca metóda deserializácie. Deserializácia vyžaduje použitie inštancií triedy Source. Táto inštancia triedy má dve polia buf a pos. Buf sa používa na uloženie údajov, ktoré budú deserializované a pos sa používa na uloženie aktuálnej polohy čítania. Keď sa číta konkrétny typ údajov, ak poznáte jeho dĺžku, môžete si ho prečítať priamo, pri údajoch neznámej dĺžky najskôr prečítajte dĺžku a až potom obsah.

Prístup k údajom v reťazci a ich aktualizácia

Ontológia-wasm-cdt-hrdza - zapuzdrená operačná metóda na prácu s údajmi v reťazci, ktorá je vhodná pre vývojárov na implementáciu operácií, ako je pridávanie, mazanie, zmena a dopytovanie údajov v reťazci takto:

  • databáza::get(kľúč) - používa sa na vyžiadanie údajov z reťazca a kľúč vyžaduje implementáciu rozhrania AsRef;
  • databáza::put(kľúč, hodnota) - slúži na ukladanie dát v sieti. Implementácia kľúčových požiadaviek rozhrania AsRef a implementácia hodnotových požiadaviek rozhrania Encoder;
  • databáza::delete(kľúč) - sa používa na odstránenie údajov z reťazca a kľúč vyžaduje implementáciu rozhrania AsRef.

Zmluvné testovanie

Pri implementácii zmluvných metód potrebujeme prístup k údajom v reťazci a potrebujeme zodpovedajúci virtuálny stroj na vykonanie zmluvného bajtkódu, takže je zvyčajne potrebné nasadiť zmluvu do reťazca na testovanie. Táto testovacia metóda je však problematická. Aby bolo testovanie zmlúv pre vývojárov jednoduchšie, knižnica ontio_std poskytuje modul simulovaného testovania. Tento modul poskytuje simuláciu dát v reťazci, čo vývojárom uľahčuje jednotkové testovacie metódy v zmluve. Konkrétne príklady možno nájsť tu.

Ladenie zmluvy

console::debug(msg) vytlačí informácie o ladení počas ladenia zmluvy. Informácie msg budú vložené do súboru denníka uzla. Nevyhnutným predpokladom je nastaviť úroveň protokolového súboru na režim ladenia pri spustení lokálneho testovacieho uzla Ontológie.

runtime::notify(msg) vytlačí príslušné informácie o ladení počas ladenia zmluvy. Táto metóda uloží zadané informácie do reťazca a je možné z neho dopytovať pomocou metódy getSmartCodeEvent.

Článok bol preložený redaktormi Hashrate&Shares špeciálne pre OntologyRussia. cvaknutie

Ste vývojár? Pripojte sa k našej technickej komunite na zvar. Tiež sa pozrite na Vývojárske centrum na našej webovej stránke, kde nájdete vývojárske nástroje, dokumentáciu a ďalšie.

ontológie

Zdroj: hab.com

Pridať komentár