Meriv çawa li ser tora Ontolojiyê peymanek hişmend a WebAssembly dinivîse? Beş 1: Rust

Meriv çawa li ser tora Ontolojiyê peymanek hişmend a WebAssembly dinivîse? Beş 1: Rust

Teknolojiya Ontolojî Wasm lêçûna koçberkirina peymanên biaqil ên dApp bi mantiqa karsaziya tevlihev a li zincîra blokê kêm dike, bi vî rengî ekosîstema dApp pir dewlemend dike.

Niha Ontolojî Wasm Di heman demê de pêşveçûna Rust û C ++ piştgirî dike. Zimanê Rust çêtir Wasm piştgirî dike, û bytekoda çêkirî hêsantir e, ku dikare lêçûna bangên peymanê bêtir kêm bike. Wiha, Meriv çawa Rust bikar tîne da ku peymanek li ser tora Ontolojiyê pêş bixe?

Pêşxistina Peymana WASM bi Rust re

Peymanek çêbikin

Bar ji bo pêşkeftina Rust amûrek çêkirina projeyê û rêveberiya pakêtê ya baş e, ku ji pêşdebiran re dibe alîkar ku têkiliya kod û pirtûkxaneyên partiya sêyemîn çêtir organîze bikin. Ji bo afirandina peymanek Ontology Wasm ya nû, bi tenê emrê jêrîn bimeşînin:

Meriv çawa li ser tora Ontolojiyê peymanek hişmend a WebAssembly dinivîse? Beş 1: Rust

Struktura projeyê ku ew diafirîne:

Meriv çawa li ser tora Ontolojiyê peymanek hişmend a WebAssembly dinivîse? Beş 1: Rust

Pelê Cargo.toml ji bo sazkirina agahdariya projeya bingehîn û agahdariya pirtûkxaneya girêdayî tê bikar anîn. Divê beşa [lib] ya pelê wekî crate-type = ["cdylib"] were danîn. Pela lib.rs ji bo nivîsandina koda mantiqa peymanê tê bikar anîn. Wekî din, hûn hewce ne ku pîvanên girêdayîbûnê li beşa [girêdayîn] pelê veavakirina Cargo.toml zêde bikin:

Meriv çawa li ser tora Ontolojiyê peymanek hişmend a WebAssembly dinivîse? Beş 1: Rust

Bi vê pêwendiyê re, pêşdebir dikarin navbeynkariyên ku bi zincîra blokê ya Ontolojiyê û amûrên wekî pîvana serialîzasyonê re têkildar in vebêjin.

fonksiyona têketina peymanê

Her bername fonksiyonek têketinê heye, mîna fonksiyona sereke ku em bi gelemperî dibînin, lê peyman fonksiyonek sereke tune. Dema ku peymanek Wasm bi karanîna Rust ve hatî pêşve xistin, fonksiyona vekêşana xwerû wekî fonksiyona têketinê tê bikar anîn da ku peymanê bikar bîne. Navê fonksiyonek li Rust dema ku koda çavkaniyê ya Rust li baytkodê ku dikare ji hêla makîneyek virtual ve were darve kirin were berhev kirin dê ne diyar be. Ji bo ku berhevkar kodek zêde çê neke û qebareya peymanê kêm bike, fonksiyona invoke şiroveya #[no_mangle] zêde dike.

Çawa fonksiyona gazîkirinê pîvanan digire da ku danûstendinek pêk bîne?

Pirtûkxaneya ontio_std fonksiyonek dema xebitandinê::input() peyda dike da ku pîvanên ji bo pêkanîna danûstendinê bigire. Pêşdebir dikarin ZeroCopySource bikar bînin da ku berhevoka byte ya ku hatî encam jêbirin. Tê de rêza yekem a byteyan tê xwendin, navê rêbaza gazîkirinê ye, li dû wê jî pîvanên rêbazê ne.

Encama pêkanîna peymanê çawa tê vegerandin?

Fonksiyona xebitandinê::ret ku ji hêla pirtûkxaneya ontio_std ve hatî peyda kirin, encama pêkanîna rêbazek vedigerîne.

Fonksiyona gazîkirinê ya qedandî wiha xuya dike:

Meriv çawa li ser tora Ontolojiyê peymanek hişmend a WebAssembly dinivîse? Beş 1: Rust

Serializing û Deserializing Daneyên Peymana

Di pêvajoya pêşkeftina peymanan de, pêşdebiran her gav bi serialîzasyon û deserialîzasyonê re dikevin nav pirsgirêkan, nemaze bi meriv çawa celebek daneya strukturê di databasê de hilîne û meriv çawa berhevokek byte ku ji databasê hatî xwendin deserialize dike da ku celebek daneya strukturê bistîne.

Pirtûkxaneya ontio_std ji bo serialîzekirin û deserialîzasyona daneyê navbeynkariya dekoder û şîfreker peyda dike. Zeviyên strukturê di heman demê de navbeynkariya dekoder û şîfrekerê jî bicîh dikin da ku avahî were serialîzekirin û deserialîzekirin. Dema ku cûrbecûr cûrbecûr daneyan serialîze dibin, mînakên çîna Sink hewce ne. Nimûneyek ji çîna Sink xwedan bufek zeviyê-type heye ku daneya celebê byte hilîne, û hemî daneyên serialîzekirî di buf de têne hilanîn.

Ji bo daneya dirêjahiya sabît (mînak: byte, u16, u32, u64, hwd.), dane rasterast diguhezînin rêzek byte û paşê di buf de têne hilanîn; ji bo daneyên bi dirêjahiya nesabit, divê pêşî dirêjahî were rêzkirin, dûv re jî Ddata (mînak, hejmarên bênîşan ên mezinahiya nenas, di nav de u16, u32, an u64, hwd.).

Deserialîzasyon tam berevajiyê vê ye. Ji bo her rêbazek serialîzasyonê, rêbazek deserialîzasyonê ya têkildar heye. Deserialization bikaranîna mînakên çîna Çavkanî hewce dike. Vê mînaka polê du qadên buf û pos hene. Buf ji bo hilanîna daneyên ku têne deserialîzekirin têne bikar anîn û pos ji bo hilanîna pozîsyona xwendina heyî tê bikar anîn. Dema ku celebek taybetî ya daneyê tê xwendin, heke hûn dirêjahiya wê dizanin, hûn dikarin rasterast bixwînin, ji bo daneyên bi dirêjahiya nenas-pêşî dirêjiyê bixwînin, paşê naverokê bixwînin.

Daneyên di zincîrê de bigihîjin û nûve bikin

ontolojî-wasm-cdt-rust - Rêbazek xebitandinê ji bo xebata bi daneya di zincîrê de, ku ji bo pêşdebiran rehet e ku operasyonên wekî lê zêdekirin, jêbirin, guhertin û lêpirsîna daneyan di zincîrê de bi vî rengî pêk bînin:

  • databas::bigirin(key) - ji bo daxwazkirina daneyan ji zincîrê tê bikar anîn, û key daxwaza pêkanîna pêwendiya AsRef dike;
  • databas:: danîn (kilît, nirx) - ji bo hilanîna daneyan li ser torê tê bikar anîn. Key daxwaza pêkanîna pêwendiya AsRef dike, û nirx daxwaza pêkanîna pêwendiya Encoder dike;
  • databas:: jêbirin (kilît) - ji bo rakirina daneyan ji zincîrê tê bikar anîn, û mifteya pêkanîna pêwendiya AsRef daxwaz dike.

Testkirina peymanê

Dema ku rêbazên peymanê têne bicîh kirin, pêdivî ye ku em bigihîjin daneyên li ser zincîrê û ji me re pêdivî ye ku makîneyek virtual ya guncan ji bo bitekoda peymanê bicîh bîne, ji ber vê yekê bi gelemperî pêdivî ye ku peymanê li ser zincîrê ji bo ceribandinê were bicîh kirin. Lê ev rêbaza ceribandinê pirsgirêk e. Ji bo ku ji bo pêşdebiran ceribandina peymanan hêsantir bike, pirtûkxaneya ontio_std ji bo ceribandinê modulek qeşeng peyda dike. Ev modul simulasyonek daneya di çerxê de peyda dike, ji bo pêşdebiran hêsantir dike ku yekîneya rêbazên di peymanê de ceribandin. Mînakên taybetî dikarin werin dîtin vir.

Peymana Debugging

konsol::debug(msg) dema ku peymanek xeletî dike, agahdariya xeletiyê nîşan dide. Agahdariya peyamê dê li pelê têketinê ya nodê were zêdekirin. Pêwîstek ev e ku hûn asta pelê têketinê li ser moda debugê saz bikin dema ku girêka testa Ontolojiyê ya herêmî dimeşîne.

runtime::notify(msg) dema ku girêbest tê jêbirin, agahdariya xeletiya guncan derdixe. Ev rêbaz dê agahdariya ku ketiye zincîrê hilîne û bi karanîna rêbaza getSmartCodeEvent dikare ji zincîrê were pirsîn.

Gotar ji hêla edîtorên Hashrate&Shares ve bi taybetî ji bo OntologyRussia hate wergerandin. girîn

Ma hûn pêşdebir in? Tevlî civata meya teknolojiyê bibin Discord. Di heman demê de, lê binêre Navenda Pêşdebir li ser malpera me, ku hûn dikarin amûrên pêşdebir, belgekirin, û hêj bêtir bibînin.

Ontology

Source: www.habr.com

Add a comment