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:
Ndondomeko ya polojekitiyi imapanga:
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:
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:
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.
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.