Bii o ṣe le kọ iwe adehun ọlọgbọn WebAssembly kan lori nẹtiwọọki Ontology? Apá 1: ipata

Bii o ṣe le kọ iwe adehun ọlọgbọn WebAssembly kan lori nẹtiwọọki Ontology? Apá 1: ipata

Imọ-ẹrọ Wasm Ontology dinku idiyele ti iṣikiri awọn adehun ijafafa dApp pẹlu ọgbọn iṣowo ti o nipọn si blockchain, nitorinaa nmu ilolupo dApp di pupọ.

Lọwọlọwọ Ontology Wasm Nigbakanna ṣe atilẹyin mejeeji Rust ati C ++ idagbasoke. Ede Rust ṣe atilẹyin Wasm dara julọ, ati ipilẹṣẹ bytecode jẹ rọrun, eyiti o le dinku idiyele ti awọn ipe adehun. Nitorina, bawo ni a ṣe le lo Rust lati ṣe agbekalẹ adehun kan lori nẹtiwọọki Ontology?

Dagbasoke adehun WASM pẹlu ipata

Ṣẹda adehun

laisanwo jẹ ẹda iṣẹ akanṣe ti o dara ati ọpa iṣakoso package fun idagbasoke Rust, eyiti o ṣe iranlọwọ fun awọn olupilẹṣẹ lati ṣeto dara julọ ibaraenisepo ti koodu ati awọn ile-ikawe ẹni-kẹta. Lati ṣẹda iwe adehun Ontology Wasm tuntun, nìkan ṣiṣẹ aṣẹ atẹle:

Bii o ṣe le kọ iwe adehun ọlọgbọn WebAssembly kan lori nẹtiwọọki Ontology? Apá 1: ipata

Ilana ise agbese ti o ṣe:

Bii o ṣe le kọ iwe adehun ọlọgbọn WebAssembly kan lori nẹtiwọọki Ontology? Apá 1: ipata

Faili Cargo.toml ni a lo lati ṣeto alaye iṣẹ akanṣe ipilẹ ati alaye ile-ikawe ti o gbẹkẹle. Abala [lib] faili gbọdọ wa ni ṣeto si crate-type = ["cdylib"]. Faili lib.rs ni a lo lati kọ koodu kannaa adehun. Ni afikun, o nilo lati ṣafikun awọn igbelewọn igbẹkẹle si apakan [awọn igbẹkẹle] ti faili iṣeto Cargo.toml:

Bii o ṣe le kọ iwe adehun ọlọgbọn WebAssembly kan lori nẹtiwọọki Ontology? Apá 1: ipata

Pẹlu igbẹkẹle yii, awọn olupilẹṣẹ le pe awọn atọkun ti o nlo pẹlu blockchain Ontology ati awọn irinṣẹ bii paramita serialization.

Iṣẹ titẹsi adehun

Gbogbo eto ni iṣẹ titẹ sii, bii iṣẹ akọkọ ti a rii nigbagbogbo, ṣugbọn adehun ko ni iṣẹ akọkọ. Nigbati adehun Wasm ti ni idagbasoke nipa lilo ipata, iṣẹ ipe aiyipada ni a lo bi iṣẹ titẹ sii lati lo adehun naa. Orukọ iṣẹ kan ni Rust yoo jẹ koyewa nigbati o ba n ṣajọ koodu orisun Rust sinu bytecode ti o le ṣe nipasẹ ẹrọ foju kan. Lati ṣe idiwọ olupilẹṣẹ lati ṣe ipilẹṣẹ koodu laiṣe ati dinku iwọn ti adehun naa, iṣẹ ipe naa ṣafikun #[no_mangle] asọye.

Bawo ni iṣẹ ipe ṣe gba awọn aye lati ṣiṣẹ idunadura kan?

Ile-ikawe ontio_std n pese akoko ṣiṣe kan :: iṣẹ titẹ sii () lati gba awọn aye lati ṣiṣẹ idunadura kan. Awọn olupilẹṣẹ le lo ZeroCopySource lati sọ ipa-ọna baiti ti o yọrisi kuro. Ninu eyiti titobi akọkọ ti awọn baiti ka ni orukọ ọna ipe, atẹle nipasẹ awọn aye ọna.

Bawo ni abajade ti ipaniyan adehun pada?

Akoko asiko :: ret ti a pese nipasẹ ile-ikawe ontio_std da abajade ti ipaniyan ọna kan pada.

Iṣẹ ipe ti o pari dabi eyi:

Bii o ṣe le kọ iwe adehun ọlọgbọn WebAssembly kan lori nẹtiwọọki Ontology? Apá 1: ipata

Serializing ati Deserializing Àdéhùn Data

Ninu ilana ti awọn ifowo siwe idagbasoke, awọn olupilẹṣẹ nigbagbogbo n lọ sinu awọn iṣoro pẹlu isọdọkan ati isọdọtun, ni pataki pẹlu bii o ṣe le ṣafipamọ iru data struct kan ninu ibi ipamọ data ati bii o ṣe le deserialize orun baiti kan ti a ka lati ibi ipamọ data lati gba iru data struct kan.

Ile-ikawe ontio_std pese decoder ati awọn atọkun koodu fun serialization data ati deserialization. Awọn aaye ti ẹya kan tun ṣe imuse oluyipada ati awọn atọkun koodu ki eto naa le jẹ lẹsẹsẹ ati isọdi. Awọn apẹẹrẹ ti kilasi rì ni a nilo nigbati ọpọlọpọ awọn oriṣi data jẹ lẹsẹsẹ. Ohun apẹẹrẹ ti awọn rì kilasi ni o ni a ṣeto-Iru oko buf ti o tọjú awọn baiti iru data, ati gbogbo serialized data ti wa ni fipamọ ni buf.

Fun data gigun ti o wa titi (fun apẹẹrẹ: baiti, u16, u32, u64, ati bẹbẹ lọ), data naa ti yipada taara si ọna baiti ati lẹhinna fipamọ sinu buf; fun data ti ipari ti kii ṣe ti o wa titi, ipari gbọdọ jẹ serialized ni akọkọ, lẹhinna Ddata (fun apẹẹrẹ, awọn nọmba ti a ko fowo si ti iwọn aimọ, pẹlu u16, u32, tabi u64, ati bẹbẹ lọ).

Deserialization ni gangan idakeji. Fun gbogbo ọna serialization, nibẹ ni a bamu deserialization ọna. Deserialization nbeere lilo awọn iṣẹlẹ ti kilasi Orisun. Apeere kilasi yii ni buf aaye meji ati pos. Buf ti wa ni lo lati fi awọn data lati wa ni deserialized ati pos ti wa ni lo lati fi awọn ti isiyi kika ipo. Nigbati iru data kan ba n ka, ti o ba mọ ipari rẹ, o le ka taara, fun data ti ipari aimọ — ka gigun ni akọkọ, lẹhinna ka awọn akoonu naa.

Wọle ati imudojuiwọn data ninu pq

ontology-wasm-cdt-ipata - ọna iṣiṣẹ fun ṣiṣẹ pẹlu data ninu pq, eyiti o rọrun fun awọn olupilẹṣẹ lati ṣe awọn iṣẹ bii fifi kun, piparẹ, iyipada ati ibeere data ninu pq bi atẹle:

  • database :: gba (bọtini) - ni a lo lati beere data lati pq, ati awọn ibeere bọtini imuse ti wiwo AsRef;
  • database :: fi (bọtini, iye) - lo lati fipamọ data lori nẹtiwọki. Awọn ibeere bọtini imuse ti wiwo AsRef, ati awọn ibeere iye imuse ti wiwo Encoder;
  • aaye data :: paarẹ (bọtini) - ni a lo lati yọ data kuro ninu pq, ati awọn ibeere bọtini imuse ti wiwo AsRef.

Idanwo adehun

Nigbati awọn ọna ti adehun ti wa ni imuse, a nilo iraye si data lori pq ati pe a nilo ẹrọ foju ti o yẹ lati ṣiṣẹ bytecode ti adehun naa, nitorinaa o jẹ dandan lati mu adehun naa sori pq fun idanwo. Ṣugbọn ọna idanwo yii jẹ iṣoro. Lati jẹ ki o rọrun fun awọn olupilẹṣẹ lati ṣe idanwo awọn adehun, ile-ikawe ontio_std pese module ẹlẹya fun idanwo. Eleyi module pese a kikopa ti awọn data ninu awọn Circuit, ṣiṣe awọn ti o rọrun fun Difelopa a kuro igbeyewo awọn ọna ninu awọn guide. Awọn apẹẹrẹ pato le ṣee ri nibi.

N ṣatunṣe aṣiṣe adehun

console :: yokokoro(msg) ṣe afihan alaye yokokoro lakoko ti n ṣatunṣe aṣiṣe adehun kan. Alaye msg yoo wa ni afikun si faili log node. Ohun pataki ṣaaju ni lati ṣeto ipele faili log si ipo yokokoro nigbati oju ipade idanwo Ontology agbegbe n ṣiṣẹ.

asiko ṣiṣe :: leti(msg) ṣejade alaye yokokoro ti o yẹ nigba ti adehun ti n ṣatunṣe. Ọna yii yoo tọju alaye ti o tẹ sinu pq ati pe o le beere lati inu pq naa nipa lilo ọna getSmartCodeEvent.

Nkan naa jẹ itumọ nipasẹ awọn olootu ti Hashrate&Shares paapaa fun OntologyRussia. kigbe

Ṣe o jẹ olupilẹṣẹ bi? Darapọ mọ agbegbe imọ-ẹrọ wa ni Iwa. Bakannaa, wo Olùgbéejáde Center lori oju opo wẹẹbu wa, nibiti o ti le rii awọn irinṣẹ idagbasoke, iwe, ati diẹ sii.

Imọlẹ

orisun: www.habr.com

Fi ọrọìwòye kun