Ubuchwepheshe be-Ontology Wasm bunciphisa izindleko zokuthutha izinkontileka ezihlakaniphile ze-dApp ezinomqondo webhizinisi oyinkimbinkimbi ziye ku-blockchain, ngaleyo ndlela kucebise kakhulu i-dApp ecosystem.
Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ
Ukwakha Inkontileka ye-WASM neRust
Dala inkontileka
Isakhiwo sephrojekthi esikhiqizayo:
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:
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:
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
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-Ontology
Source: www.habr.com