Kodi mungalembe bwanji mgwirizano wanzeru wa WebAssembly pa netiweki ya Ontology? Gawo 1: Dzimbiri

Kodi mungalembe bwanji mgwirizano wanzeru wa WebAssembly pa netiweki ya Ontology? Gawo 1: Dzimbiri

Ukadaulo wa Ontology Wasm umachepetsa mtengo wosamutsa mapangano anzeru a dApp okhala ndi malingaliro ovuta abizinesi kupita ku blockchain, motero amalemeretsa kwambiri chilengedwe cha dApp.

Π’ настоящСС врСмя Ontology Wasm Imathandizira zonse Rust ndi C ++ chitukuko. Chilankhulo cha Rust chimathandizira Wasm bwino, ndipo bytecode yopangidwa ndi yosavuta, yomwe ingachepetsenso mtengo wa mafoni a mgwirizano. Choncho, momwe mungagwiritsire ntchito Rust kupanga mgwirizano pa netiweki ya Ontology?

Kupanga Mgwirizano wa WASM ndi Dzimbiri

Pangani mgwirizano

katundu ndi chida chabwino chopangira pulojekiti komanso chida chowongolera phukusi lachitukuko cha dzimbiri, chomwe chimathandiza otukula kukonza bwino kulumikizana kwa ma code ndi malaibulale a chipani chachitatu. Kuti mupange mgwirizano watsopano wa Ontology Wasm, ingoyendetsani lamulo ili:

Kodi mungalembe bwanji mgwirizano wanzeru wa WebAssembly pa netiweki ya Ontology? Gawo 1: Dzimbiri

Ndondomeko ya polojekitiyi imapanga:

Kodi mungalembe bwanji mgwirizano wanzeru wa WebAssembly pa netiweki ya Ontology? Gawo 1: Dzimbiri

Fayilo ya Cargo.toml imagwiritsidwa ntchito kukhazikitsa zambiri zamapulojekiti komanso zambiri zama library. Gawo la [lib] la fayilo liyenera kukhazikitsidwa kukhala mtundu wa crate = ["cdylib"]. Fayilo ya lib.rs imagwiritsidwa ntchito polemba code logic code. Kuphatikiza apo, muyenera kuwonjezera magawo odalira pagawo la [dependencies] la fayilo yosinthira ya Cargo.toml:

Kodi mungalembe bwanji mgwirizano wanzeru wa WebAssembly pa netiweki ya Ontology? Gawo 1: Dzimbiri

Ndi kudalira uku, Madivelopa amatha kuyimba zolumikizira zomwe zimalumikizana ndi blockchain ya Ontology ndi zida monga serialization parameter.

Ntchito yolowera kontrakiti

Pulogalamu iliyonse imakhala ndi ntchito yolowera, monga ntchito yayikulu yomwe timawona nthawi zambiri, koma mgwirizano ulibe ntchito yayikulu. Mgwirizano wa Wasm ukapangidwa pogwiritsa ntchito Rust, ntchito yoyitanitsa yosasinthika imagwiritsidwa ntchito ngati njira yolowera kuti mugwiritse ntchito mgwirizano. Dzina la ntchito mu Rust silidziwika bwino mukapanga Rust source code mu bytecode yomwe imatha kuchitidwa ndi makina enieni. Kuti mulepheretse wopanga mapulogalamu kuti asapange khodi yofunikira ndikuchepetsa kukula kwa mgwirizano, ntchito yoyitanitsa imawonjezera #[no_mangle] ndemanga.

Kodi ntchito ya invoke imapeza bwanji magawo kuti achite malonda?

Laibulale ya ontio_std imapereka nthawi yothamanga::input () ntchito kuti mupeze magawo kuti achite. Madivelopa atha kugwiritsa ntchito ZeroCopySource kuti asokoneze mndandanda wazotsatira. Momwe gulu loyamba la ma byte limawerengedwa ndi dzina la njira yoyitanitsa, ndikutsatiridwa ndi magawo a njira.

Kodi zotsatira za kuphedwa kwa kontrakiti zimabwezedwa bwanji?

Nthawi yothamanga :: ret ntchito yoperekedwa ndi laibulale ya ontio_std imabweretsa zotsatira za njira yochitira.

Ntchito yomaliza yomaliza ikuwoneka motere:

Kodi mungalembe bwanji mgwirizano wanzeru wa WebAssembly pa netiweki ya Ontology? Gawo 1: Dzimbiri

Kusanja ndi Kuchotsa Data ya Contract

Popanga makontrakitala, opanga nthawi zonse amakumana ndi zovuta za serialization ndi deserialization, makamaka momwe mungasungire mtundu wa data wa struct mu database ndi momwe mungasinthire ma byte array owerengedwa kuchokera ku database kuti mupeze mtundu wa data.

Laibulale ya ontio_std imapereka ma decoder ndi encoder interfaces kuti asamalize ndikuchotsa deta. Magawo a struct amagwiritsanso ntchito ma decoder ndi encoder interfaces kuti kapangidwe kake kasasunthike ndikuchotsedwa. Zochitika za kalasi ya Sink zimafunika pamene mitundu yosiyanasiyana ya deta yasinthidwa. Chitsanzo cha kalasi ya Sink ili ndi buf yamtundu wa seti yomwe imasunga deta yamtundu wa byte, ndipo deta yonse yosungidwa imasungidwa mu buf.

Pazidziwitso zautali wokhazikika (monga: byte, u16, u32, u64, etc.), deta imasinthidwa mwachindunji kukhala gulu la byte ndikusungidwa mu buf; pazambiri zautali wosakhazikika, utali uyenera kusanjidwa poyamba, kenako Ddata (mwachitsanzo, nambala zosasainidwa za kukula kosadziwika, kuphatikiza u16, u32, kapena u64, ndi zina).

Deserialization ndi zosiyana. Panjira iliyonse yotsatsira, pali njira yofananira yochotsa. Deserialization imafuna kugwiritsa ntchito zochitika za gulu la Source. Phunziroli lili ndi magawo awiri a buf ndi pos. Buf imagwiritsidwa ntchito kusungira deta kuti iwonongeke ndipo pos imagwiritsidwa ntchito kusunga momwe mukuwerengera panopa. Pamene mtundu wina wa deta ukuwerengedwa, ngati mukudziwa kutalika kwake, mukhoza kuwerenga molunjika, kwa deta yautali wosadziwika-werengani utali woyamba, kenako werengani zomwe zili mkati.

Pezani ndikusintha data mu tcheni

ontology-wasm-cdt-dzimbiri - yaphatikiza njira yogwirira ntchito yogwirira ntchito ndi data mu unyolo, womwe ndi wosavuta kwa opanga kuti agwiritse ntchito zinthu monga kuwonjezera, kufufuta, kusintha ndi kufunsira deta mu unyolo motere:

  • nkhokwe:: pezani (kiyi) - amagwiritsidwa ntchito popempha deta kuchokera ku unyolo, ndi zopempha zazikulu za kukhazikitsidwa kwa mawonekedwe a AsRef;
  • nkhokwe::ika (kiyi, mtengo) - amagwiritsidwa ntchito kusunga deta pa intaneti. Zofunikira zimapempha kukhazikitsidwa kwa mawonekedwe a AsRef, ndipo mtengo umapempha kukhazikitsidwa kwa mawonekedwe a Encoder;
  • nkhokwe::fufuta (kiyi) - amagwiritsidwa ntchito kuchotsa deta kuchokera ku unyolo, ndipo zofunikira zimapempha kukhazikitsidwa kwa mawonekedwe a AsRef.

Kuyesa kwa contract

Pamene njira za mgwirizano zikugwiritsidwa ntchito, timafunika kupeza deta pa unyolo ndipo timafunikira makina oyenerera kuti tigwiritse ntchito bytecode ya mgwirizano, choncho nthawi zambiri zimakhala zofunikira kuyika mgwirizano pa unyolo kuti uyesedwe. Koma njira yoyesera iyi ndi yovuta. Kuti zikhale zosavuta kwa opanga kuyesa makontrakitala, laibulale ya ontio_std imapereka gawo loyesa kuyesa. Gawoli limapereka chifaniziro cha data mudera, kupangitsa kuti zikhale zosavuta kwa opanga kuyesa njira zomwe zili mu mgwirizano. Zitsanzo zenizeni zingapezeke apa.

Contract Debugging

console ::debug(msg) imawonetsa zambiri za debug pamene mukukonza mgwirizano. Zambiri za msg zidzawonjezedwa ku fayilo ya node. Chofunikira ndikukhazikitsa mulingo wa fayilo ya chipika kuti mukonze zolakwika pomwe node yoyeserera ya Ontology yapafupi ikugwira ntchito.

Runtime::notify(msg) imatulutsa zidziwitso zoyenera zowongolera pomwe mgwirizano ukukonzedwa. Njirayi imasunga zomwe zalowetsedwa mu unyolo ndipo zitha kufunsidwa kuchokera pamndandanda pogwiritsa ntchito njira ya getSmartCodeEvent.

Nkhaniyi idamasuliridwa ndi akonzi a Hashrate&Shares makamaka a OntologyRussia. kulira

Kodi ndinu wopanga mapulogalamu? Lowani nawo gulu lathu laukadaulo ku Kusamvana. Komanso, yang'anani Developer Center patsamba lathu, komwe mungapeze zida zamapulogalamu, zolemba, ndi zina zambiri.

Ontology

Source: www.habr.com

Kuwonjezera ndemanga