Ubhalwa njani isivumelwano esihlakaniphile seWebAssembly kwinethiwekhi ye-Ontology? Icandelo 1: Umhlwa

Ubhalwa njani isivumelwano esihlakaniphile seWebAssembly kwinethiwekhi ye-Ontology? Icandelo 1: Umhlwa

Itekhnoloji ye-Ontology Wasm inciphisa iindleko zokufuduka kweekontraki ezihlakaniphile ze-dApp ezinengqiqo yeshishini elintsonkothileyo kwi-blockchain, ngaloo ndlela ityebisa kakhulu inkqubo yendalo ye-dApp.

Okwangoku I-Ontology Wasm Ngaxeshanye ixhasa zombini iRust kunye nophuhliso lweC++. Ulwimi lweRust luxhasa i-Wasm ngcono, kwaye i-bytecode eyenziwe ilula, enokunciphisa ngakumbi iindleko zeekhontrakthi zekhontrakthi. Ngoko, isetyenziswa njani iRust ukuphuhlisa ikhontrakthi kuthungelwano lweOntology?

Ukuphuhlisa ikhontrakthi ye-WASM kunye neRust

Yenza isivumelwano

Cargo sisixhobo esilungileyo sokudala iprojekthi kunye nolawulo lwephakheji yophuhliso lweRust, olunceda abaphuhlisi ukuba balungelelanise ngcono unxibelelwano lwekhowudi kunye nethala leencwadi lomntu wesithathu. Ukwenza ikhontrakthi entsha ye-Ontology Wasm, sebenzisa lo myalelo ulandelayo:

Ubhalwa njani isivumelwano esihlakaniphile seWebAssembly kwinethiwekhi ye-Ontology? Icandelo 1: Umhlwa

Ubume beprojekthi obuvelisayo:

Ubhalwa njani isivumelwano esihlakaniphile seWebAssembly kwinethiwekhi ye-Ontology? Icandelo 1: Umhlwa

Ifayile yeCargo.toml isetyenziselwa ukuseta ulwazi olusisiseko lweprojekthi kunye nolwazi oluxhomekeke kwithala leencwadi. I [lib] icandelo lefayile kufuneka limiselwe kuhlobo lwekhreyithi = ["cdylib"]. Ifayile ye-lib.rs isetyenziselwa ukubhala ikhowudi yengqiqo yekhontrakthi. Ukongeza, kufuneka udibanise iparameters zokuxhomekeka kwi [dependencies] icandelo le Cargo.toml ifayile yoqwalaselo:

Ubhalwa njani isivumelwano esihlakaniphile seWebAssembly kwinethiwekhi ye-Ontology? Icandelo 1: Umhlwa

Ngolu kuxhomekeka, abaphuhlisi banokubiza ujongano olunxibelelana ne-Ontology blockchain kunye nezixhobo ezinje ngeparamitha yokulandelelana.

Umsebenzi wokungena kwikhontrakthi

Inkqubo nganye inomsebenzi wegalelo, njengowona msebenzi uphambili esiqhele ukuwubona, kodwa ikhontrakthi ayinawo umsebenzi ongundoqo. Xa ikhontrakthi ye-Wasm iphuhliswa kusetyenziswa umhlwa, umsebenzi wokubiyela omiselweyo usetyenziswa njengomsebenzi wegalelo lokusebenzisa ikhontrakthi. Igama lomsebenzi kwi-Rust aliyi kucaca xa uqulunqa ikhowudi yemvelaphi yomhlwa kwi-bytecode enokuphunyezwa ngumatshini wenyani. Ukuthintela umqokeleli ekuveliseni ikhowudi engafunekiyo kunye nokunciphisa ubungakanani bekhontrakthi, umsebenzi wokuvuselela wongeza i-#[no_mangle] inkcazo.

Uzifumana njani iiparameters ukwenza intengiselwano?

I ontio_std ilayibrari ibonelela ngexesha lokuqhuba::input () umsebenzi ukufumana iparameters ukuphumeza intengiselwano. Abaphuhlisi banokusebenzisa i-ZeroCopySource ukuze balahlekise uluhlu olunesiphumo se-byte. Apho uluhlu lokuqala lwee-bytes lufundwayo ligama lendlela ye-invoke, ilandelwa yindlela yeparameters.

Sibuyiswa njani isiphumo sokwenziwa kwekhontrakthi?

Ixesha lokuqhutywa::ret umsebenzi obonelelwe lithala le-ontio_std libuyisela isiphumo sendlela yophumezo.

Umsebenzi ogqityiweyo wokucela ujongeka ngolu hlobo:

Ubhalwa njani isivumelwano esihlakaniphile seWebAssembly kwinethiwekhi ye-Ontology? Icandelo 1: Umhlwa

Ukwenza uthotho kunye nokususwa kwedatha yekhontrakthi

Kwinkqubo yokuphuhlisa iikhontrakthi, abaphuhlisi bahlala bengena kwiingxaki kunye ne-serialization kunye ne-deserialization, ngokukodwa ngendlela yokugcina uhlobo lwedatha ye-struct kwi-database kunye nendlela yokwenza i-byte array efundwe kwi-database ukuze ufumane uhlobo lwedatha yesakhiwo.

Ithala leencwadi le-ontio_std libonelela ngedikhowuda kunye nojongano lwe-encoder ukulungiselela uthotho lwedatha kunye nokususwa kwezinto. Imimandla yesakhiwo nayo iphumeza idikhowuda kunye nojongano lwe-encoder ukuze ulwakhiwo lube nolandelelwano kwaye lungabikho. Iimeko zeklasi yeSink ziyafuneka xa iindidi ezahlukeneyo zedatha zilandelelwaniswa. Umzekelo weklasi yeSinki ine-set-type buf yentsimi egcina idatha yohlobo lwe-byte, kwaye yonke idatha ye-serialized igcinwe kwi-buf.

Ngedatha yobude obumiselweyo (umzekelo: i-byte, u16, u32, u64, njl.), idatha iguqulelwa ngokuthe ngqo kwi-byte uluhlu kwaye emva koko igcinwe kwi-buf; kwidatha yobude obungaqingqwanga, ubude kufuneka bulandelelwe kuqala, buye emva koko i-Ddata (umzekelo, ii-integers ezingatyikitywanga zobungakanani obungaziwa, kubandakanywa u16, u32, okanye u64, njl. njl.).

I-Deserialization yinto echasene ngqo. Kuyo yonke indlela yokulinganisa, kukho indlela ehambelanayo ye-deserialization. I-Deserialization ifuna ukusetyenziswa kweemeko zodidi loMthombo. Lo mzekelo weklasi unemimandla emibini buf kunye ne-pos. I-Buf isetyenziselwa ukugcina idatha ukuba isuswe kwaye i-pos isetyenziselwa ukugcina indawo yokufunda yangoku. Xa kufundwa uhlobo oluthile lwedatha, ukuba uyazi ubude bayo, unokufunda ngokuthe ngqo, kwidatha yobude obungaziwa-funda ubude kuqala, uze ufunde iziqulatho.

Ukufikelela kunye nokuhlaziya idatha kwikhonkco

i-ontology-wasm-cdt-rust - ifake indlela yokusebenza yokusebenza ngedatha kwikhonkco, elungele ukuba abaphuhlisi baphumeze imisebenzi efana nokongeza, ukucima, ukutshintsha kunye nokubuza idatha kwikhonkco ngolu hlobo lulandelayo:

  • idatabase::fumana(isitshixo) - isetyenziselwa ukucela idatha kwikhonkco, kunye nezicelo eziphambili zokuphunyezwa kwe-interface ye-AsRef;
  • idatabase::beka(isitshixo, ixabiso) - esetyenziselwa ukugcina idatha kwinethiwekhi. Izicelo eziphambili zokuphunyezwa kwe-interface ye-AsRef, kwaye ixabiso licela ukuphunyezwa kwe-Encoder interface;
  • idatabase::cima(isitshixo) - isetyenziselwa ukususa idatha kwikhonkco, kunye nezicelo eziphambili zokuphunyezwa kwe-interface ye-AsRef.

Uvavanyo lwekhontrakthi

Xa iindlela zekhontrakthi ziphunyezwa, sifuna ukufikelela kwidatha kwikhonkco kwaye sifuna umatshini ochanekileyo ofanelekileyo wokuqhuba i-bytecode yekhontrakthi, ngoko ke ngokuqhelekileyo kuyimfuneko ukuhambisa isivumelwano kwikhonkco lokuvavanya. Kodwa le ndlela yokuvavanya iyingxaki. Ukwenza kube lula kubaphuhlisi ukuvavanya izivumelwano, ithala leencwadi le-ontio_std libonelela ngemodyuli ehlekisayo yokuvavanya. Le modyuli ibonelela ngokulinganisa kwedatha kwisekethe, okwenza kube lula kubaphuhlisi ukuba bavavanye iindlela kwiikhontrakthi. Imizekelo ethile inokufunyanwa apha.

Ulungiso lweempazamo kwikhontrakthi

ikhonsoli::debug(msg) ibonisa ulwazi lolungiso lweempazamo ngelixa ulungisa iimpazamo kwisivumelwano. Ulwazi lwe-msg luya kongezwa kwifayile yelog ye-node. Imfuno efunekayo kukuseta ifayile yelog kwimowudi yolungiso xa indawo yovavanyo lweOntology yasekuhlaleni isebenza.

ixesha lokusebenza::yazisa(msg) ikhupha ulwazi olufanelekileyo lolungiso lweempazamo ngelixa ikhontrakthi isalungiswa. Le ndlela izakugcina ulwazi olufakwe kwitsheyini kwaye inokubuzwa kwitsheyini usebenzisa indlela ye-getSmartCodeEvent.

Eli nqaku liguqulelwe ngabahleli beHashrate&Shares ingakumbi iOntologyRussia. khala

Ngaba ungumphuhlisi? Joyina uluntu lwethu lwetekhnoloji ku Ingxoxo. Kwakhona, jonga Iziko loPhuhlisi kwiwebhusayithi yethu, apho unokufumana khona izixhobo zomphuhlisi, uxwebhu, kunye nokunye.

Intology

umthombo: www.habr.com

Yongeza izimvo