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