Maitiro ekunyora sei WebAssembly smart kontrakiti pane Ontology network? Chikamu 1: Ngura

Maitiro ekunyora sei WebAssembly smart kontrakiti pane Ontology network? Chikamu 1: Ngura

Ontology Wasm tekinoroji inoderedza mutengo wekutama dApp smart zvibvumirano zvine yakaoma bhizinesi logic kune blockchain, nekudaro ichipfumisa zvakanyanya iyo dApp ecosystem.

Π’ настоящСС врСмя Ontology Wasm Panguva imwe chete inotsigira zvese Rust uye C ++ kukura. Mutauro weRust unotsigira Wasm zvirinani, uye iyo yakagadzirwa bytecode iri nyore, iyo inogona kuwedzera kuderedza mutengo wekufona kwekondirakiti. Saka, sei kushandisa Rust kugadzira kondirakiti pane Ontology network?

Kugadzira Chibvumirano cheWASM neRust

Gadzira kondirakiti

kago yakanaka yekugadzira purojekiti uye pasuru manejimendi chishandiso chekuvandudza Rust, iyo inobatsira vanogadzira kuronga zvirinani kupindirana kwekodhi uye echitatu-bato raibhurari. Kuti ugadzire chibvumirano chitsva cheOntology Wasm, ingo mhanya unotevera kuraira:

Maitiro ekunyora sei WebAssembly smart kontrakiti pane Ontology network? Chikamu 1: Ngura

Chimiro chepurojekiti inogadzira:

Maitiro ekunyora sei WebAssembly smart kontrakiti pane Ontology network? Chikamu 1: Ngura

Iyo Cargo.toml faira inoshandiswa kuseta yakakosha ruzivo rweprojekiti uye inotsamira raibhurari ruzivo. Iyo [lib] chikamu chefaira chinofanira kuiswa kune crate-type = ["cdylib"]. Iyo lib.rs faira inoshandiswa kunyora kodhi yekontrakiti. Pamusoro pezvo, iwe unofanirwa kuwedzera kutsamira paramita ku[dependencies] chikamu cheCargo.toml configuration file:

Maitiro ekunyora sei WebAssembly smart kontrakiti pane Ontology network? Chikamu 1: Ngura

Nekutsamira uku, vagadziri vanogona kufona mainterfaces anodyidzana neOntology blockchain uye maturusi akadai seriisalization parameter.

Kondirakiti yekupinda basa

Purogiramu yega yega ine basa rekuisa, sebasa guru ratinowanzoona, asi kondirakiti haina basa guru. Kana kondirakiti yeWasm ikagadzirwa uchishandisa Rust, iyo default invoke basa rinoshandiswa sebasa rekuisa kushandisa kondirakiti. Iro zita rebasa muRust harina kujeka kana uchigadzira Rust source kodhi mubytecode inogona kuitwa nemuchina chaiwo. Kudzivirira muunganidzi kuti asaburitse kodhi yakadhindwa uye kuderedza saizi yekontrakiti, basa rekukumbira rinowedzera #[no_mangle] chirevo.

Ko iyo invoke function inowana sei maparamendi ekuita kutengeserana?

Iyo ontio_std raibhurari inopa nguva yekumhanya ::input() basa kuti uwane ma paramita ekuita kutengeserana. Vagadziri vanogona kushandisa ZeroCopySource kushatisa iyo inoguma byte array. Imo mune yekutanga array yemabhaiti akaverengwa izita reinvoke nzira, rinoteverwa nemaitiro paramita.

Ko mhedzisiro yekuitwa kwekondirakiti inodzoswa sei?

Nguva yekumhanya :: ret basa rakapihwa ne ontio_std raibhurari inodzosa mhedzisiro yemaitiro ekuita.

Iyo inopedzwa invoke basa inoita seizvi:

Maitiro ekunyora sei WebAssembly smart kontrakiti pane Ontology network? Chikamu 1: Ngura

Serializing uye Deserializing Contract Data

Mukugadzira zvibvumirano, vagadziri vanogara vachisangana nematambudziko ekuita serialization uye deserialization, kunyanya nemachengeterwo emhando yedata data mudhatabhesi uye maitiro ekubvisa dhizaini yakaverengerwa kubva kudhatabhesi kuti uwane struct data mhando.

Iyo ontio_std raibhurari inopa decoder uye encoder interfaces yedata serialization uye deserialization. Iyo minda yechimiro inoisawo iyo decoder uye encoder interfaces kuitira kuti chimiro chigone kuiswa seri uye kubviswa. Mamiriro ekirasi yeSink anodiwa kana marudzi akasiyana-siyana e data akaiswa serialized. Muenzaniso weSink kirasi ine set-mhando yemunda buf inochengeta iyo byte type data, uye yese serialized data inochengetwa mubuf.

Nezve data yakarebeswa (semuenzaniso: byte, u16, u32, u64, nezvimwewo), iyo data inoshandurwa zvakananga kune byte array uye yozochengetwa mubuf; kune data yehurefu husina kugadzika, kureba kunofanirwa kutanga kunyorwa, ipapo Ddata (somuenzaniso, nhamba dzisina kunyorwa dzesaizi isingazivikanwe, kusanganisira u16, u32, kana u64, nezvimwewo).

Deserialization ndiyo yakanyatsopesana. Kune yega yega serialization nzira, kune inoenderana deserialization nzira. Deserialization inoda kushandiswa kwezviitiko zveiyo Source kirasi. Ichi chiitiko chekirasi chine minda miviri buf uye pos. Buf inoshandiswa kuchengetedza iyo data kuti ive deerialized uye pos inoshandiswa kuchengetedza ikozvino kuverenga chinzvimbo. Kana imwe mhando yedata iri kuverengwa, kana iwe uchiziva kureba kwayo, unogona kuiverenga zvakananga, kune data yehurefu husingazivikanwe-verenga kureba kutanga, wozoverenga zviri mukati.

Svika uye gadziridza data mucheni

ontology-wasm-cdt-rust - yakafukidzira nzira yekushanda yekushanda nedata mucheni, iyo yakanakira vanogadzira kuita maficha akadai sekuwedzera, kudzima, kuchinja uye kubvunza data mucheni sezvizvi:

  • database:: tora (kiyi) - inoshandiswa kukumbira data kubva kumaketani, uye zvikumbiro zvakakosha kushandiswa kweAsRef interface;
  • dhatabhesi::isa(kiyi, kukosha) - inoshandiswa kuchengetedza data pane network. Kiyi inokumbira kuitwa kweiyo AsRef interface, uye kukosha kunokumbira kuisirwa kweEncoder interface;
  • database::delete(kiyi) - inoshandiswa kubvisa data kubva muketani, uye zvikumbiro zvakakosha kushandiswa kweAsRef interface.

Contract test

Kana nzira dzekondirakiti dzaitwa, tinoda kuwana data iri pacheni uye tinoda muchina wakakodzera wekuti tiite bytecode yekondirakiti, saka kazhinji zvinodikanwa kuendesa kondirakiti pacheni yekuyedza. Asi iyi nzira yekuedza ine dambudziko. Kuita kuti zvive nyore kune vanogadzira kuyedza zvibvumirano, iyo ontio_std raibhurari inopa mock module yekuyedza. Iyi module inopa kuenzanisa kweiyo data mudunhu, zvichiita kuti zvive nyore kune vanogadzira unit kuyedza nzira dziri muchibvumirano. Mienzaniso chaiyo inogona kuwanikwa pano.

Contract Debugging

console ::debug(msg) inoratidza ruzivo rwekugadzirisa paunenge uchigadzirisa chibvumirano. Iyo msg ruzivo ichawedzerwa kune node log faira. Chinodiwa kuseta iyo regi faira nhanho kuti debug mode kana yemuno Ontology test node iri kushanda.

nguva yekumhanya ::notify(msg) inoburitsa ruzivo rwakakodzera rwekugadzirisa apo kondirakiti iri kugadziriswa. Iyi nzira inochengetedza ruzivo rwakapinda mucheni uye inogona kubvunzwa kubva kucheni uchishandisa iyo getSmartCodeEvent nzira.

Chinyorwa chakaturikirwa nevapepeti veHashrate&Shares kunyanya kuOntologyRussia. kuchema

Iwe uri mugadziri? Joinha tekinoroji yedu munharaunda pa Kurwisana. Uyezve, tarisa Developer Center pawebhusaiti yedu, kwaunogona kuwana maturusi ekuvandudza, zvinyorwa, nezvimwe.

Ontology

Source: www.habr.com

Voeg