Ki jan yo ekri yon kontra entelijan WebAssembly sou rezo Ontoloji a? Pati 1: rouye

Ki jan yo ekri yon kontra entelijan WebAssembly sou rezo Ontoloji a? Pati 1: rouye

Teknoloji Ontology Wasm diminye pri migrasyon kontra entelijan dApp ak lojik biznis konplèks nan blockchain la, kidonk anrichi ekosistèm dApp la anpil.

Koulye a, Ontoloji Wasm Ansanm sipòte tou de devlopman Rust ak C++. Lang Rust sipòte Wasm pi byen, epi bytecode ki te pwodwi a pi senp, sa ki ka diminye plis pri apèl nan kontra yo. Se konsa, kijan pou itilize Rust pou devlope yon kontra sou rezo ontoloji?

Devlope yon kontra WASM ak Rust

Kreye yon kontra

Chaj se yon bon zouti kreyasyon pwojè ak jesyon pake pou devlopman Rust, ki ede devlopè yo pi byen òganize entèraksyon kòd ak bibliyotèk twazyèm pati. Pou kreye yon nouvo kontra Ontology Wasm, tou senpleman kouri lòd sa a:

Ki jan yo ekri yon kontra entelijan WebAssembly sou rezo Ontoloji a? Pati 1: rouye

Estrikti pwojè li jenere:

Ki jan yo ekri yon kontra entelijan WebAssembly sou rezo Ontoloji a? Pati 1: rouye

Fichye Cargo.toml itilize pou mete sou pye enfòmasyon de baz pwojè ak enfòmasyon bibliyotèk depandan. Seksyon [lib] fichye a dwe mete sou kalite kès = ["cdylib"]. Yo itilize dosye lib.rs pou ekri kòd lojik kontra a. Anplis de sa, ou bezwen ajoute paramèt depandans nan seksyon [depandans] nan dosye konfigirasyon Cargo.toml la:

Ki jan yo ekri yon kontra entelijan WebAssembly sou rezo Ontoloji a? Pati 1: rouye

Avèk depandans sa a, devlopè yo ka rele interfaces ki kominike avèk blòk Ontoloji ak zouti tankou paramèt serializasyon an.

Fonksyon antre nan kontra

Chak pwogram gen yon fonksyon opinyon, tankou fonksyon prensipal nou konn wè, men kontra a pa gen yon fonksyon prensipal. Lè yon kontra Wasm devlope lè l sèvi avèk Rust, yo itilize fonksyon envoke default la kòm fonksyon opinyon pou itilize kontra a. Non yon fonksyon nan Rust pral klè lè w ap konpile kòd sous Rust nan bytecode ki ka egzekite pa yon machin vityèl. Pou anpeche konpilatè a jenere kòd redondants epi redwi gwosè kontra a, fonksyon invoke la ajoute #[no_mangle] annotation.

Ki jan fonksyon envoke a jwenn paramèt pou egzekite yon tranzaksyon?

Bibliyotèk ontio_std bay yon fonksyon runtime::input() pou jwenn paramèt pou egzekite yon tranzaksyon. Devlopè yo ka itilize ZeroCopySource pou deserialize etalaj byte ki kapab lakòz yo. Nan ki premye etalaj la nan bytes li se non an nan metòd la envoke, ki te swiv pa paramèt yo metòd.

Ki jan rezilta egzekisyon kontra a retounen?

Fonksyon runtime::ret bibliyotèk ontio_std bay la retounen rezilta yon ekzekisyon metòd.

Fonksyon envoke ranpli a sanble sa a:

Ki jan yo ekri yon kontra entelijan WebAssembly sou rezo Ontoloji a? Pati 1: rouye

Serialize ak deserialize done kontra yo

Nan pwosesis pou devlope kontra yo, devlopè yo toujou rankontre pwoblèm ak serializasyon ak deserializasyon, espesyalman ak fason yo estoke yon kalite done struct nan baz done a ak ki jan yo deserialize yon etalaj byte li nan baz done a yo ka resevwa yon kalite done struct.

Bibliyotèk ontio_std la bay entèfas dekodeur ak ankode pou seri done ak deserializasyon. Jaden yo nan yon struct tou aplike dekodeur ak encoder interfaces pou estrikti a ka serialize ak deserialized. Enstans nan klas Lavabo yo obligatwa lè divès kalite done yo serialize. Yon egzanp nan klas Sink la gen yon buf jaden ki sere ki estoke done ki kalite byte, epi tout done seri yo estoke nan buf.

Pou done longè fiks (egzanp: byte, u16, u32, u64, elatriye), done yo dirèkteman konvèti nan yon etalaj byte ak Lè sa a, estoke nan buf; pou done ki gen longè ki pa fiks, longè yo dwe serialize an premye, answit Ddata (pa egzanp, nonm antye ki pa siyen ak gwosè enkoni, ki gen ladan u16, u32, oswa u64, elatriye).

Deserialization se egzak opoze a. Pou chak metòd serializasyon, gen yon metòd deserializasyon korespondan. Deserialization mande pou itilize egzanp nan klas Sous la. Enstans klas sa a gen de jaden buf ak pos. Buf yo itilize pou estoke done yo dwe deserialize ak pos yo itilize pou estoke pozisyon lekti aktyèl la. Lè w ap li yon kalite done patikilye, si w konnen longè l, ou ka li dirèkteman, pou done ki pa konnen longè, li longè an premye, answit li sa ki ladan l.

Aksè ak mete ajou done nan chèn lan

ontoloji-wasm-cdt-rouye - Encapsulé yon metòd operasyonèl pou travay ak done nan chèn lan, ki se pratik pou devlopè yo aplike operasyon tankou ajoute, efase, chanje ak demann done nan chèn lan jan sa a:

  • baz done::get(kle) - yo itilize pou mande done nan chèn lan, ak kle mande aplikasyon koòdone AsRef la;
  • baz done::put (kle, valè) - itilize pou estoke done sou rezo a. Kle mande aplikasyon koòdone AsRef la, ak valè mande aplikasyon koòdone koòdone;
  • baz done::efase (kle) - yo itilize yo retire done nan chèn lan, ak kle mande aplikasyon an nan koòdone AsRef la.

Tès kontra

Lè metòd yo nan yon kontra yo aplike, nou bezwen aksè a done yo sou chèn lan epi nou bezwen yon machin vityèl apwopriye pou egzekite bytecode nan kontra a, kidonk li se jeneralman nesesè yo deplwaye kontra a sou chèn lan pou fè tès. Men, metòd tès sa a se pwoblèm. Pou fè li pi fasil pou devlopè yo teste kontra yo, bibliyotèk ontio_std bay yon modil mock pou tès yo. Modil sa a bay yon simulation done yo nan kous la, sa ki fè li pi fasil pou devlopè yo teste inite metòd yo nan kontra a. Egzanp espesifik yo ka jwenn isit la.

Kontra debogaj

console::debug(msg) montre enfòmasyon debug pandan y ap debogaj yon kontra. Enfòmasyon msg yo pral ajoute nan dosye a boutèy demi lit. Yon avantou se mete nivo fichye boutèy demi lit la nan mòd debug lè nœud tès Ontoloji lokal la ap kouri.

runtime::notify(msg) bay enfòmasyon debogaj apwopriye pandan y ap deboge kontra a. Metòd sa a pral estoke enfòmasyon yo antre nan chèn lan epi yo ka mande yo nan chèn lan lè l sèvi avèk metòd getSmartCodeEvent la.

Atik la te tradui pa editè yo nan Hashrate&Shares espesyalman pou OntologyRussia. kriye

Èske w se yon pwomotè? Antre nan kominote teknoloji nou an nan Dezakò. Epitou, pran yon gade nan Sant Developer sou sit entènèt nou an, kote ou ka jwenn zouti devlopè, dokiman, ak plis ankò.

Ontoloji

Sous: www.habr.com

Add nouvo kòmantè