Ibhalwa kanjani inkontileka ehlakaniphile ye-WebAssembly kunethiwekhi ye-Ontology? Ingxenye 1: Ukugqwala

Ibhalwa kanjani inkontileka ehlakaniphile ye-WebAssembly kunethiwekhi ye-Ontology? Ingxenye 1: Ukugqwala

Ubuchwepheshe be-Ontology Wasm bunciphisa izindleko zokuthutha izinkontileka ezihlakaniphile ze-dApp ezinomqondo webhizinisi oyinkimbinkimbi ziye ku-blockchain, ngaleyo ndlela kucebise kakhulu i-dApp ecosystem.

В настоящее время I-Ontology Wasm Ngesikhathi esifanayo isekela kokubili ukuthuthukiswa kwe-Rust kanye ne-C++. Ulimi lwe-Rust lusekela i-Wasm kangcono, futhi i-bytecode eyenziwe ilula, enganciphisa nakakhulu izindleko zezingcingo zenkontileka. Ngakho, isetshenziswa kanjani i-Rust ukwakha inkontileka kunethiwekhi ye-Ontology?

Ukwakha Inkontileka ye-WASM neRust

Dala inkontileka

cargo iyithuluzi elihle lokudala iphrojekthi kanye nethuluzi lokuphatha iphakheji lokuthuthukiswa kwe-Rust, elisiza onjiniyela ukuhlela kangcono ukusebenzisana kwekhodi nemitapo yolwazi yezinkampani zangaphandle. Ukwakha inkontileka entsha ye-Ontology Wasm, mane usebenzise umyalo olandelayo:

Ibhalwa kanjani inkontileka ehlakaniphile ye-WebAssembly kunethiwekhi ye-Ontology? Ingxenye 1: Ukugqwala

Isakhiwo sephrojekthi esikhiqizayo:

Ibhalwa kanjani inkontileka ehlakaniphile ye-WebAssembly kunethiwekhi ye-Ontology? Ingxenye 1: Ukugqwala

Ifayela le-Cargo.toml lisetshenziselwa ukusetha ulwazi oluyisisekelo lwephrojekthi nolwazi oluncikile lwelabhulali. Isigaba esithi [lib] sefayela kufanele sisethelwe kuhlobo lwe-crate = ["cdylib"]. Ifayela le-lib.rs lisetshenziselwa ukubhala ikhodi yokucabanga yenkontileka. Ngaphezu kwalokho, udinga ukwengeza amapharamitha okuncika esigabeni [sokuncika] sefayela lokucushwa le-Cargo.toml:

Ibhalwa kanjani inkontileka ehlakaniphile ye-WebAssembly kunethiwekhi ye-Ontology? Ingxenye 1: Ukugqwala

Ngalokhu kuncika, abathuthukisi bangashayela izixhumanisi ezisebenzisana ne-Ontology blockchain namathuluzi afana nepharamitha yochungechunge.

Umsebenzi wokufaka inkontileka

Lonke uhlelo lunomsebenzi wokufaka, njengomsebenzi oyinhloko esivame ukuwubona, kodwa inkontileka ayinawo umsebenzi oyinhloko. Uma inkontileka ye-Wasm ithuthukiswa kusetshenziswa i-Rust, umsebenzi we-invoke ozenzakalelayo usetshenziswa njengomsebenzi wokufaka ukusebenzisa inkontileka. Igama lomsebenzi ku-Rust ngeke licace lapho kuhlanganiswa ikhodi yomthombo ye-Rust ibe yi-bytecode engenziwa umshini obonakalayo. Ukuze uvimbele umhlanganisi ekukhiqizeni ikhodi engasasebenzi futhi ehlise usayizi wenkontileka, umsebenzi we-invoke wengeza isichasiselo esithi #[no_mangle].

Ngabe umsebenzi we-invoke uthola kanjani amapharamitha ukuze wenze umsebenzi?

Ilabhulali ye-ontio_std inikeza umsebenzi wesikhathi sokusebenza::input() ukuze uthole imingcele yokwenza umsebenzi. Onjiniyela bangasebenzisa i-ZeroCopySource ukuze basuse uchungechunge lwebhayithi ewumphumela. Lapho uhlu lokuqala lwamabhayithi lufundwa khona kuyigama lendlela yokucela, elandelwa amapharamitha endlela.

Ubuyiselwa kanjani umphumela wokwenziwa kwenkontileka?

Umsebenzi wesikhathi sokusebenza::ret onikezwe umtapo wezincwadi we-ontio_std ubuyisela umphumela wokwenziwa kwendlela.

Umsebenzi wokucela oqediwe ubukeka kanje:

Ibhalwa kanjani inkontileka ehlakaniphile ye-WebAssembly kunethiwekhi ye-Ontology? Ingxenye 1: Ukugqwala

Ukulinganisa kanye nokususa idatha yenkontileka

Enqubweni yokuthuthukisa izinkontileka, onjiniyela bahlala behlangabezana nezinkinga zokwenziwa kwe-serialization kanye nokukhishwa kwe-serialization, ikakhulukazi ngendlela yokugcina uhlobo lwedatha yesakhiwo kusizindalwazi kanye nendlela yokwenza i-byte array ifundwe kusizindalwazi ukuze uthole uhlobo lwedatha yesakhiwo.

Umtapo wezincwadi we-ontio_std uhlinzeka nge-decoder kanye ne-interface yesishumeki sokwenza idatha ku-serialization kanye nokususa izinto. Izinkambu zesakhiwo futhi zisebenzisa i-decoder ne-encoder interfaces ukuze uhlaka lufakwe uchungechunge futhi lususwe. Izimo zekilasi likaSink ziyadingeka lapho izinhlobo zedatha ezahlukahlukene zihlukaniswa. Isibonelo sekilasi likaSink sine-set-type buf yenkambu egcina idatha yohlobo lwe-byte, futhi yonke idatha ye-serialized igcinwa ku-buf.

Ngedatha yobude obulungisiwe (isb: i-byte, u16, u32, u64, njll.), idatha iguqulelwa ngokuqondile kuhlu lwebhayithi bese igcinwa ku-buf; ngedatha yobude obungaguquki, ubude kufanele bukhishwe ngohlelo kuqala, bese kuba i-Ddata (isibonelo, izinombolo ezingasayiniwe zosayizi ongaziwa, ohlanganisa u-u16, u32, noma u64, njll.).

I-Deserialization ihluke kakhulu. Kuyo yonke indlela ye-serialization, kunendlela ehambisanayo ye-deserialization. I-Deserialization idinga ukusetshenziswa kwezimo ze-Source class. Lesi sibonelo sekilasi sinezinkambu ezimbili ze-buf ne-pos. I-Buf isetshenziselwa ukugcina idatha ezokhishwa futhi i-pos isetshenziselwa ukugcina indawo yokufunda yamanje. Uma kufundwa uhlobo oluthile lwedatha, uma ubazi ubude bayo, ungayifunda ngokuqondile, ukuze uthole idatha yobude obungaziwa—funda ubude kuqala, bese ufunda okuqukethwe.

Finyelela futhi ubuyekeze idatha kuchungechunge

i-ontology-wasm-cdt-rust - ihlanganise indlela yokusebenza yokusebenza ngedatha kuketango, elungele abathuthukisi ukwenza imisebenzi efana nokwengeza, ukususa, ukuguqula kanye nokubuza idatha kuchungechunge ngale ndlela elandelayo:

  • isizindalwazi::thola(ukhiye) - isetshenziselwa ukucela idatha kusuka kuchungechunge, futhi ukhiye ucela ukuqaliswa kwe-interface ye-AsRef;
  • isizindalwazi::beka(ukhiye, inani) - esetshenziswa ukugcina idatha kunethiwekhi. Ukhiye ucela ukusetshenziswa kwesixhumi esibonakalayo se-AsRef, futhi inani licela ukuqaliswa kwe-Encoder interface;
  • isizindalwazi::susa(ukhiye) - isetshenziselwa ukususa idatha kuketango, futhi ukhiye ucela ukuqaliswa kwe-interface ye-AsRef.

Ukuhlolwa kwenkontileka

Uma izindlela zenkontileka zisetshenziswa, sidinga ukufinyelela kudatha ekuchungechunge futhi sidinga umshini obonakalayo ofanelekile ukuze sisebenzise i-bytecode yenkontileka, ngakho ngokuvamile kuyadingeka ukuthi kusetshenziswe inkontileka ochungechungeni ukuze ihlolwe. Kodwa le ndlela yokuhlola iyinkinga. Ukuze kwenziwe kube lula konjiniyela ukuhlola izinkontileka, ilabhulali ye-ontio_std inikeza imojuli mbumbulu yokuhlola. Le mojula ihlinzeka ngokulingisa idatha kusekethe, okwenza kube lula konjiniyela ukuhlola iyunithi yezindlela ezikunkontileka. Izibonelo eziqondile zingatholakala lapha.

Ukulungisa iphutha lenkontileka

console::debug(msg) ibonisa ulwazi lokususa iphutha ngenkathi ilungisa iphutha kwinkontileka. Ulwazi lwe-msg luzongezwa kufayela lokungena le-node. Imfuneko iwukusetha ileveli yefayela lokungena kumodi yokususa iphutha lapho indawo yokuhlola ye-Ontology yasendaweni isebenza.

i-runtime::notify(msg) ikhipha ulwazi olufanele lokususa iphutha ngesikhathi isivumelwano sisalungiswa. Le ndlela izogcina ulwazi olufakwe kuchungechunge futhi ingabuzwa kuchungechunge kusetshenziswa indlela ye-getSmartCodeEvent.

Isihloko sahunyushwa abahleli be-Hashrate&Shares ikakhulukazi i-OntologyRussia. khala

Ingabe ungunjiniyela? Joyina umphakathi wethu wezobuchwepheshe ku I-Discord. Futhi, bheka Isikhungo Sonjiniyela kuwebhusayithi yethu, lapho ungathola khona amathuluzi onjiniyela, imibhalo, nokuningi.

I-Ontology

Source: www.habr.com

Engeza amazwana