Pehea e kākau ai i kahi ʻaelike akamai WebAssembly ma ka pūnaewele Ontology? Mahele 1: Rus

Pehea e kākau ai i kahi ʻaelike akamai WebAssembly ma ka pūnaewele Ontology? Mahele 1: Rus

Hoʻemi ka ʻenehana Ontology Wasm i ke kumukūʻai o ka neʻe ʻana i nā ʻaelike akamai dApp me ka loina ʻoihana paʻakikī i ka blockchain, a laila e hoʻonui nui ai i ka kaiaola dApp.

I kēia manawa Ontology Wasm Kākoʻo like ʻo Rust a me C++ i ka hoʻomohala ʻana. Kākoʻo maikaʻi ka ʻōlelo Rust iā Wasm, a ʻoi aku ka maʻalahi o ka bytecode i hana ʻia, hiki ke hōʻemi hou i ke kumukūʻai o nā kelepona ʻaelike. No laila, pehea e hoʻohana ai iā Rust e hoʻomohala i kahi ʻaelike ma ka pūnaewele Ontology?

Ke kūkulu ʻana i kahi ʻaelike WASM me Rust

E hana i ʻaelike

waiwai He mea hana maikaʻi ka papahana a me ka hoʻokele pūʻolo no ka hoʻomohala ʻana i ka Rust, e kōkua ana i nā mea hoʻomohala e hoʻonohonoho maikaʻi i ka pilina o nā code a me nā hale waihona puke ʻaoʻao ʻekolu. No ka hana ʻana i kahi ʻaelike Ontology Wasm hou, e holo wale i kēia kauoha:

Pehea e kākau ai i kahi ʻaelike akamai WebAssembly ma ka pūnaewele Ontology? Mahele 1: Rus

ʻO ke ʻano o ka papahana e hana ai:

Pehea e kākau ai i kahi ʻaelike akamai WebAssembly ma ka pūnaewele Ontology? Mahele 1: Rus

Hoʻohana ʻia ka faila Cargo.toml no ka hoʻonohonoho ʻana i ka ʻike kumu papahana a me ka ʻike waihona hilinaʻi. Pono e hoʻonoho ʻia ka ʻāpana [lib] o ka faila i crate-type = ["cdylib"]. Hoʻohana ʻia ka faila lib.rs e kākau i ka code logic contract. Eia hou, pono ʻoe e hoʻohui i nā ʻāpana hilinaʻi i ka ʻāpana [dependencies] o ka faila hoʻonohonoho Cargo.toml:

Pehea e kākau ai i kahi ʻaelike akamai WebAssembly ma ka pūnaewele Ontology? Mahele 1: Rus

Me kēia hilinaʻi, hiki i nā mea hoʻomohala ke kāhea i nā pilina e launa pū me ka Ontology blockchain a me nā mea hana e like me ka serialization parameter.

Hana komo ʻaelike

Loaʻa i kēlā me kēia papahana kahi hana hoʻokomo, e like me ka hana nui a mākou e ʻike pinepine ai, akā ʻaʻohe hana nui o ka ʻaelike. Ke kūkulu ʻia kahi ʻaelike Wasm me Rust, hoʻohana ʻia ka hana invoke paʻamau e like me ka hana hoʻokomo e hoʻohana ai i ka ʻaelike. ʻAʻole maopopo ka inoa o kahi hana ma Rust i ka wā e hōʻuluʻulu ai i ka code kumu Rust i bytecode hiki ke hoʻokō ʻia e kahi mīkini virtual. No ka pale ʻana i ka mea hōʻuluʻulu mai ka hana ʻana i nā code redundant a hōʻemi i ka nui o ka ʻaelike, hoʻohui ka hana invoke i ka #[no_mangle] annotation.

Pehea e loaʻa ai i ka hana invoke nā ʻāpana e hoʻokō i kahi kālepa?

Hāʻawi ka waihona ontio_std i kahi hana runtime::input() e kiʻi i nā ʻāpana e hoʻokō i kahi kālepa. Hiki i nā mea hoʻomohala ke hoʻohana iā ZeroCopySource e deserialize i ka hopena byte array. Ma kahi o ka helu helu mua o nā bytes i heluhelu ʻia ka inoa o ke ʻano invoke, a ukali ʻia e nā ʻāpana ala.

Pehea ka hopena o ka hoʻokō ʻana i ka ʻaelike?

ʻO ka hana holo::ret i hāʻawi ʻia e ka waihona ontio_std e hoʻihoʻi i ka hopena o kahi hana hoʻokō.

ʻO ka hana invoke i hoʻopau ʻia e like me kēia:

Pehea e kākau ai i kahi ʻaelike akamai WebAssembly ma ka pūnaewele Ontology? Mahele 1: Rus

Serializing a me Deserializing aelike ikepili

Ma ke kaʻina hana o ka hoʻomohala ʻana i nā ʻaelike, e holo mau nā mea hoʻomohala i nā pilikia me ka serialization a me ka deserialization, ʻo ia hoʻi me pehea e mālama ai i kahi ʻano ʻikepili struct i loko o ka waihona a pehea e deserialize i kahi helu byte i heluhelu ʻia mai ka waihona e kiʻi i kahi ʻano ʻikepili struct.

Hāʻawi ka waihona ontio_std i ka decoder a me ka encoder interface no ka serialization data a me ka deserialization. Hoʻokomo pū nā kahua o kahi struct i ka decoder a me ka encoder interface i hiki ke hoʻonohonoho ʻia a deserialized. Pono nā ʻano o ka papa Sink ke hoʻopaʻa ʻia nā ʻano ʻikepili like ʻole. Loaʻa i kahi laʻana o ka papa Sink kahi buf kahua ʻano hoʻonohonoho e mālama i ka ʻikepili ʻano byte, a mālama ʻia nā ʻikepili serialized āpau i buf.

No ka ʻikepili lōʻihi paʻa (e laʻa: byte, u16, u32, u64, etc.), ua hoʻololi pololei ʻia ka ʻikepili i kahi array byte a laila mālama ʻia i buf; no ka ʻikepili o ka lōʻihi paʻa ʻole, pono e hoʻonohonoho mua ʻia ka lōʻihi, a laila Ddata (no ka laʻana, nā helu helu ʻole i ʻike ʻole ʻia, me u16, u32, a i ʻole u64, etc.).

ʻO ka deserialization ka mea kū'ē. No kēlā me kēia ala serialization, aia kahi ala deserialization e pili ana. Pono ka deserialization i ka hoʻohana ʻana i nā manawa o ka papa Source. Loaʻa i kēia ʻano papa ʻelua mau kahua buf a me ka pos. Hoʻohana ʻia ʻo Buf e mālama i ka ʻikepili e deserialized a hoʻohana ʻia ka pos e mālama i ke kūlana heluhelu o kēia manawa. Ke heluhelu ʻia kekahi ʻano ʻikepili, inā ʻike ʻoe i kona lōʻihi, hiki iā ʻoe ke heluhelu pololei, no ka ʻikepili ʻike ʻole ʻia ka lōʻihi—e heluhelu mua i ka lōʻihi, a laila heluhelu i nā mea i loko.

Loaʻa a hōʻano hou i ka ʻikepili ma ke kaulahao

ontology-wasm-cdt-rust - hoʻopili i kahi ala hana no ka hana ʻana me ka ʻikepili i loko o ke kaulahao, kahi kūpono i nā mea hoʻomohala e hoʻokō i nā hana e like me ka hoʻohui ʻana, ka holoi ʻana, ka hoʻololi ʻana a me ka nīnau ʻana i ka ʻikepili i ke kaulahao penei:

  • waihona::loaʻa(ki) - hoʻohana ʻia e noi i ka ʻikepili mai ke kaulahao, a noi nā kī i ka hoʻokō ʻana i ka interface AsRef;
  • waihona::put(ki, waiwai) - hoʻohana ʻia e mālama i ka ʻikepili ma ka pūnaewele. Ke noi nei ʻo Key i ka hoʻokō ʻana i ka interface AsRef, a noi ka waiwai i ka hoʻokō ʻana i ka interface Encoder;
  • waihona:: holoi (ki) - hoʻohana ʻia e wehe i ka ʻikepili mai ke kaulahao, a koi ʻia nā kī i ka hoʻokō ʻana i ke kikowaena AsRef.

Hoʻāʻo ʻaelike

Ke hoʻokō ʻia nā ʻano hana o ka ʻaelike, pono mākou e komo i ka ʻikepili ma ke kaulahao a pono mākou i kahi mīkini virtual kūpono e hoʻokō i ka bytecode o ka ʻaelike, no laila pono pono e kau i ka ʻaelike ma ke kaulahao no ka hoʻāʻo. Akā pilikia kēia ʻano hoʻāʻo. I mea e maʻalahi ai ka hoʻāʻo ʻana o nā mea hoʻomohala i nā ʻaelike, hāʻawi ka waihona ontio_std i kahi module hoʻohenehene no ka hoʻāʻo ʻana. Hāʻawi kēia module i ka simulation o ka ʻikepili i ke kaapuni, e maʻalahi i nā mea hoʻomohala e hoʻāʻo i nā ʻano hana i loko o ka ʻaelike. Hiki ke loaʻa nā laʻana kikoʻī maanei.

Debugging ʻaelike

console::debug(msg) hōʻike i ka ʻike debug i ka wā e hoʻopau ana i kahi ʻaelike. E hoʻohui ʻia ka ʻike msg i ka faila log node. ʻO kahi mea e pono ai ka hoʻonohonoho ʻana i ka pae faila log i ke ʻano debug i ka wā e holo ana ka node hoʻāʻo Ontology kūloko.

runtime::notify(msg) hoʻopuka i ka ʻike debug kūpono i ka wā e hoʻopau ʻia ana ka ʻaelike. E mālama kēia ʻano i ka ʻike i hoʻokomo ʻia i loko o ke kaulahao a hiki ke nīnau ʻia mai ke kaulahao me ka hoʻohana ʻana i ke ala getSmartCodeEvent.

Ua unuhi ʻia ka ʻatikala e nā mea hoʻoponopono o Hashrate&Shares kūikawā no OntologyRussia. uwe

He mea hoʻomohala ʻoe? E hui pū me kā mākou kaiaulu ʻenehana ma Ka wehewehe. Eia kekahi, e nānā i Keena hoʻomohala ma kā mākou pūnaewele, kahi e ʻike ai ʻoe i nā mea hana hoʻomohala, palapala, a me nā mea hou aku.

Ontology

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka