Jinsi ya kuandika mkataba mzuri wa WebAssembly kwenye mtandao wa Ontology? Sehemu ya 1: Kutu

Jinsi ya kuandika mkataba mzuri wa WebAssembly kwenye mtandao wa Ontology? Sehemu ya 1: Kutu

Teknolojia ya Ontology Wasm inapunguza gharama ya kuhamisha mikataba mahiri ya dApp yenye mantiki changamano ya biashara hadi kwenye blockchain, na hivyo kurutubisha mfumo ikolojia wa dApp kwa kiasi kikubwa.

Sasa Ontolojia Wasm Wakati huo huo inasaidia maendeleo ya Rust na C++. Lugha ya Rust inasaidia Wasm bora, na bytecode inayozalishwa ni rahisi zaidi, ambayo inaweza kupunguza zaidi gharama ya simu za mkataba. Kwa hiyo, jinsi ya kutumia kutu kutengeneza kandarasi kwenye mtandao wa Ontolojia?

Kukuza Mkataba wa WASM na kutu

Tengeneza mkataba

Cargo ni zana nzuri ya kuunda mradi na usimamizi wa kifurushi kwa ajili ya ukuzaji wa Kutu, ambayo husaidia wasanidi programu kupanga vyema mwingiliano wa maktaba ya msimbo na wahusika wengine. Ili kuunda mkataba mpya wa Ontology Wasm, endesha tu amri ifuatayo:

Jinsi ya kuandika mkataba mzuri wa WebAssembly kwenye mtandao wa Ontology? Sehemu ya 1: Kutu

Muundo wa mradi unaozalisha:

Jinsi ya kuandika mkataba mzuri wa WebAssembly kwenye mtandao wa Ontology? Sehemu ya 1: Kutu

Faili ya Cargo.toml hutumiwa kusanidi maelezo ya msingi ya mradi na maelezo tegemezi ya maktaba. Sehemu ya [lib] ya faili lazima iwekwe kuwa aina ya crate = ["cdylib"]. Faili ya lib.rs inatumiwa kuandika msimbo wa mantiki ya mkataba. Kwa kuongeza, unahitaji kuongeza vigezo vya utegemezi kwenye sehemu ya [vitegemezi] ya faili ya usanidi ya Cargo.toml:

Jinsi ya kuandika mkataba mzuri wa WebAssembly kwenye mtandao wa Ontology? Sehemu ya 1: Kutu

Kwa utegemezi huu, wasanidi programu wanaweza kupiga simu violesura vinavyoingiliana na blockchain ya Ontolojia na zana kama vile kigezo cha kuratibu.

Kazi ya kuingia kwa mkataba

Kila programu ina chaguo za kukokotoa za ingizo, kama vile chaguo la kukokotoa kuu tunaloona kwa kawaida, lakini mkataba hauna kazi kuu. Wakati mkataba wa Wasm unatengenezwa kwa kutumia Rust, chaguo-msingi la chaguo-msingi la kukokotoa hutumika kama kipengele cha kukokotoa ili kutumia mkataba. Jina la chaguo la kukokotoa katika Rust halitakuwa wazi wakati wa kuunda msimbo wa chanzo cha Rust kwenye bytecode ambayo inaweza kutekelezwa na mashine pepe. Ili kuzuia mkusanyaji asitengeneze msimbo usiohitajika na kupunguza ukubwa wa mkataba, chaguo la kukokotoa la ombi huongeza kidokezo cha #[no_mangle].

Kitendaji cha ombi kinapataje vigezo vya kutekeleza shughuli?

Maktaba ya ontio_std hutoa kazi ya kukimbia::input() ili kupata vigezo vya kutekeleza shughuli. Wasanidi wanaweza kutumia ZeroCopySource kuondoa safu inayotokana na byte. Ambapo safu ya kwanza ya baiti iliyosomwa ni jina la mbinu ya ombi, ikifuatiwa na vigezo vya mbinu.

Je, matokeo ya utekelezaji wa mkataba yanarejeshwaje?

Muda wa utekelezaji::ret utendakazi unaotolewa na maktaba ya ontio_std hurejesha matokeo ya utekelezaji wa mbinu.

Utendaji uliokamilika wa ombi unaonekana kama hii:

Jinsi ya kuandika mkataba mzuri wa WebAssembly kwenye mtandao wa Ontology? Sehemu ya 1: Kutu

Kusawazisha na Kuondoa Data ya Mkataba

Katika mchakato wa kuunda kandarasi, wasanidi programu kila wakati huingia kwenye matatizo ya usanifu na uondoaji, haswa na jinsi ya kuhifadhi aina ya data ya muundo katika hifadhidata na jinsi ya kuondoa safu ya baiti iliyosomwa kutoka kwa hifadhidata ili kupata aina ya data ya muundo.

Maktaba ya ontio_std hutoa violesura vya avkodare na usimbaji kwa ajili ya kuratibu na kuondoa data. Sehemu za muundo pia hutekelezea kiolesura na violesura vya kusimba ili muundo uweze kusasishwa na kufutwa. Matukio ya darasa la Sink inahitajika wakati aina mbalimbali za data zinasasishwa. Mfano wa darasa la Sink una buf ya aina ya seti ambayo huhifadhi data ya aina ya byte, na data zote za mfululizo huhifadhiwa kwenye buf.

Kwa data ya urefu usiobadilika (kwa mfano: byte, u16, u32, u64, n.k.), data inabadilishwa moja kwa moja hadi safu ya baiti na kisha kuhifadhiwa katika buf; kwa data ya urefu usiobadilika, urefu lazima ubadilishwe kwanza, kisha Ddata (kwa mfano, nambari kamili zisizo na saini za saizi isiyojulikana, ikijumuisha u16, u32, au u64, n.k.).

Deserialization ni kinyume kabisa. Kwa kila njia ya usanifu, kuna njia inayolingana ya kuondoa utii. Deserialization inahitaji matumizi ya matukio ya darasa la Chanzo. Mfano huu wa darasa una sehemu mbili buf na pos. Buf hutumika kuhifadhi data itakayoondolewa na pos hutumika kuhifadhi nafasi ya sasa ya kusoma. Wakati aina fulani ya data inasomwa, ikiwa unajua urefu wake, unaweza kuisoma moja kwa moja, kwa data ya urefu usiojulikana-soma urefu kwanza, kisha usome yaliyomo.

Fikia na usasishe data kwenye msururu

ontolojia-wasm-cdt-kutu - imejumuisha njia ya uendeshaji ya kufanya kazi na data kwenye mnyororo, ambayo ni rahisi kwa watengenezaji kutekeleza shughuli kama vile kuongeza, kufuta, kubadilisha na kuuliza data kwenye mnyororo kama ifuatavyo:

  • hifadhidata::pata (ufunguo) - hutumiwa kuomba data kutoka kwa mlolongo, na maombi muhimu ya utekelezaji wa interface ya AsRef;
  • hifadhidata::weka (ufunguo, thamani) - kutumika kuhifadhi data kwenye mtandao. Muhimu huomba utekelezaji wa kiolesura cha AsRef, na thamani inaomba utekelezaji wa kiolesura cha Kisimbaji;
  • hifadhidata::futa (ufunguo) - hutumiwa kuondoa data kutoka kwa mlolongo, na maombi muhimu ya utekelezaji wa interface ya AsRef.

Mtihani wa mkataba

Mbinu za mkataba zinapotekelezwa, tunahitaji ufikiaji wa data kwenye mnyororo na tunahitaji mashine ya mtandaoni inayofaa kutekeleza bytecode ya mkataba, kwa hivyo ni muhimu kwa ujumla kupeleka mkataba kwenye msururu kwa majaribio. Lakini njia hii ya kupima ni tatizo. Ili kurahisisha kwa wasanidi programu kufanya majaribio ya kandarasi, maktaba ya ontio_std hutoa moduli ya majaribio ya majaribio. Moduli hii hutoa uigaji wa data katika saketi, na kuifanya iwe rahisi kwa wasanidi programu kupima mbinu katika mkataba. Mifano maalum inaweza kupatikana hapa.

Utatuzi wa Mkataba

console::debug(msg) huonyesha maelezo ya utatuzi wakati wa kutatua mkataba. Taarifa ya msg itaongezwa kwenye faili ya kumbukumbu ya nodi. Sharti ni kuweka kiwango cha faili ya kumbukumbu kwa modi ya utatuzi wakati nodi ya majaribio ya Ontolojia ya ndani inafanya kazi.

Runtime::notify(msg) hutoa taarifa sahihi ya utatuzi wakati mkataba unatatuliwa. Njia hii itahifadhi taarifa iliyoingizwa kwenye mnyororo na inaweza kuulizwa kutoka kwa mnyororo kwa kutumia mbinu ya getSmartCodeEvent.

Nakala hiyo ilitafsiriwa na wahariri wa Hashrate&Shares haswa kwa OntologyRussia. kulia

Je, wewe ni msanidi programu? Jiunge na jumuiya yetu ya teknolojia kwa Ugomvi. Pia, angalia Kituo cha Wasanidi Programu kwenye tovuti yetu, ambapo unaweza kupata zana za wasanidi programu, nyaraka, na zaidi.

Ontolojia

Chanzo: mapenzi.com

Kuongeza maoni