Mar a sgrìobhas tu cùmhnant smart WebAssembly air lìonra Ontology? Pàirt 1: Meirge

Mar a sgrìobhas tu cùmhnant smart WebAssembly air lìonra Ontology? Pàirt 1: Meirge

Bidh teicneòlas Ontology Wasm a’ lughdachadh cosgais imrich cùmhnantan snasail dApp le loidsig gnìomhachais iom-fhillte chun blockchain, agus mar sin a’ beairteachadh eag-shiostam dApp gu mòr.

В настоящее время Ontology Wasm Aig an aon àm a 'toirt taic do leasachadh Rust agus C ++. Tha an cànan Rust a 'toirt taic do Wasm nas fheàrr, agus tha am bytecode a chaidh a chruthachadh nas sìmplidh, a dh' fhaodadh cosgais gairmean cùmhnant a lùghdachadh tuilleadh. Mar sin, mar a chleachdas Rust gus cùmhnant a leasachadh air lìonra Ontology?

A’ leasachadh cùmhnant WASM le Rust

Cruthaich cùmhnant

Cargo na dheagh inneal cruthachaidh pròiseict agus stiùireadh pacaid airson leasachadh Rust, a chuidicheas luchd-leasachaidh gus eadar-obrachadh còd agus leabharlannan treas-phàrtaidh a chuir air dòigh nas fheàrr. Gus cùmhnant ùr Ontology Wasm a chruthachadh, dìreach ruith an àithne a leanas:

Mar a sgrìobhas tu cùmhnant smart WebAssembly air lìonra Ontology? Pàirt 1: Meirge

Structar a’ phròiseict a chruthaicheas e:

Mar a sgrìobhas tu cùmhnant smart WebAssembly air lìonra Ontology? Pàirt 1: Meirge

Tha am faidhle Cargo.toml air a chleachdadh gus fiosrachadh pròiseict bunaiteach agus fiosrachadh leabharlann an eisimeil a stèidheachadh. Feumaidh an earrann [lib] den fhaidhle a bhith air a shuidheachadh gu crate-type = ["cdylib"]. Tha am faidhle lib.rs air a chleachdadh gus còd loidsig a’ chùmhnaint a sgrìobhadh. A bharrachd air an sin, feumaidh tu paramadairean eisimeileachd a chuir ris an roinn [eisimeileachd] den fhaidhle rèiteachaidh Cargo.toml:

Mar a sgrìobhas tu cùmhnant smart WebAssembly air lìonra Ontology? Pàirt 1: Meirge

Leis an eisimeileachd seo, faodaidh luchd-leasachaidh eadar-aghaidh a ghairm a bhios ag eadar-obrachadh leis an Ontology blockchain agus innealan leithid am paramadair serialization.

Gnìomh cur a-steach cùmhnant

Tha gnìomh cuir a-steach aig a h-uile prògram, mar a’ phrìomh obair a chì sinn mar as trice, ach chan eil prìomh dhleastanas aig a’ chùmhnant. Nuair a thèid cùmhnant Wasm a leasachadh le bhith a’ cleachdadh Rust, thathas a’ cleachdadh a’ ghnìomh ionnsaigh bunaiteach mar an gnìomh cuir a-steach gus an cùmhnant a chleachdadh. Bidh ainm gnìomh ann an Rust neo-shoilleir nuair a bhios tu a’ cur ri chèile còd stòr Rust ann am bytecode a ghabhas a chuir gu bàs le inneal brìgheil. Gus casg a chuir air an inneal-cruinneachaidh bho bhith a’ cruthachadh còd gun fheum agus meud a’ chunnraidh a lughdachadh, cuiridh an gnìomh invoke an nota #[no_mangle] ris.

Ciamar a gheibh an gnìomh ionnsaigh crìochan gus gnothach a chuir an gnìomh?

Tha an leabharlann ontio_std a’ toirt seachad ùine ruith :: cuir a-steach () gnìomh gus na paramadairean fhaighinn airson gnothach a chuir an gnìomh. Faodaidh luchd-leasachaidh ZeroCopySource a chleachdadh gus an raon byte a thig às a thoirt às. Anns a 'chiad sreath de bytes a chaidh a leughadh tha ainm a' mhodh ionnsaigh, air a leantainn le paramadairean an dòigh.

Ciamar a tha toradh coileanadh cùmhnant air a thilleadh?

Bidh an ùine ruith :: ret a thug an leabharlann ontio_std seachad a’ tilleadh toradh buileachadh modh.

Tha an gnìomh invoke crìochnaichte a’ coimhead mar seo:

Mar a sgrìobhas tu cùmhnant smart WebAssembly air lìonra Ontology? Pàirt 1: Meirge

A 'sreathachadh agus a' cur às do dhàta cùmhnant

Anns a’ phròiseas a bhith a’ leasachadh chùmhnantan, bidh luchd-leasachaidh an-còmhnaidh a’ faighinn trioblaidean le sreathachadh agus dì-shreathachadh, gu sònraichte a thaobh mar a stòrasas seòrsa dàta structarail san stòr-dàta agus mar as urrainn dhaibh sreath byte a leughadh bhon stòr-dàta gus seòrsa dàta structar fhaighinn.

Tha an leabharlann ontio_std a’ toirt seachad eadar-aghaidh decoder agus encoder airson sreathachadh dàta agus deserialization. Bidh raointean struct cuideachd a’ cur an gnìomh an eadar-aghaidh decoder agus encoder gus an gabh an structar a chuir ann an sreath agus a dhì-dhealbhadh. Tha feum air cùisean den chlas Sink nuair a tha diofar sheòrsaichean dàta air an t-sreath. Ann an eisimpleir den chlas Sink tha buf achaidh seòrsa seata a bhios a’ stòradh an dàta seòrsa byte, agus tha a h-uile dàta sreathach air a stòradh ann am buf.

Airson dàta fad stèidhichte (me: byte, u16, u32, u64, msaa), tha an dàta air a thionndadh gu dìreach gu sreath byte agus an uairsin air a stòradh ann am buf; airson dàta de dh'fhaid neo-stèidhichte, feumar an fhaid a chur ann an sreath an-toiseach, an uairsin Ddata (mar eisimpleir, àireamhan neo-aithnichte de mheud neo-aithnichte, a' gabhail a-steach u16, u32, no u64, msaa).

Tha dì-ghalarachadh dìreach mu choinneamh. Airson a h-uile modh sreathachaidh, tha dòigh deserialization co-fhreagarrach ann. Feumaidh dì-sàrachadh cleachdadh eisimpleirean den chlas Stòr. Tha dà raon buf agus pos anns an eisimpleir clas seo. Bithear a’ cleachdadh Buf gus an dàta a stòradh airson a dhì-shreathachadh agus thathas a’ cleachdadh pos gus an suidheachadh leughaidh gnàthach a stòradh. Nuair a thathas a’ leughadh seòrsa sònraichte de dhàta, ma tha fios agad air an fhaid, faodaidh tu a leughadh gu dìreach, airson dàta de dh’ fhaid neo-aithnichte - leugh an fhaid an toiseach, agus an uairsin leugh na tha ann.

Cothrom agus ùrachadh dàta san t-sreath

ontology-wasm-cdt-meirge - dòigh obrachaidh air a chuartachadh airson a bhith ag obair le dàta san t-seine, a tha goireasach dha luchd-leasachaidh gnìomhachd a chuir an gnìomh leithid cuir ris, cuir às, atharrachadh agus ceasnachadh dàta san t-seine mar a leanas:

  • stòr-dàta :: faigh (iuchair) - air a chleachdadh gus dàta iarraidh bhon t-seine, agus prìomh iarrtasan airson eadar-aghaidh AsRef a bhuileachadh;
  • stòr-dàta :: put (iuchair, luach) - air a chleachdadh airson dàta a stòradh air an lìonra. Prìomh iarrtasan airson eadar-aghaidh AsRef a bhuileachadh, agus iarrtasan luach airson an eadar-aghaidh Encoder a bhuileachadh;
  • stòr-dàta :: sguab às (iuchair) - air a chleachdadh gus dàta a thoirt air falbh bhon t-sreath, agus prìomh iarrtasan airson eadar-aghaidh AsRef a bhuileachadh.

Cùmhnant deuchainn

Nuair a thèid dòighean cùmhnant a chuir an gnìomh, feumaidh sinn cothrom air an dàta air an t-seine agus feumaidh sinn inneal brìgheil iomchaidh gus bytecode a’ chùmhnant a chuir an gnìomh, agus mar sin mar as trice feumar an cùmhnant a chuir air an t-seine airson deuchainn. Ach tha an dòigh deuchainn seo na dhuilgheadas. Gus a dhèanamh nas fhasa do luchd-leasachaidh cùmhnantan fheuchainn, tha an leabharlann ontio_std a’ toirt seachad modal meallta airson deuchainn. Tha am modal seo a’ toirt seachad atharrais air an dàta sa chuairt, ga dhèanamh nas fhasa do luchd-leasachaidh na modhan sa chùmhnant a dhearbhadh. Gheibhear eisimpleirean sònraichte an seo.

Cùmhnant Debugging

consol ::debug(msg) a’ taisbeanadh fiosrachadh deasbaid fhad ‘s a tha thu a’ dì-bhugachadh cùmhnant. Thèid am fiosrachadh msg a chur ris an fhaidhle log nod. Is e ro-riatanach ìre an fhaidhle log a shuidheachadh gu modh deasbaid nuair a bhios an nód deuchainn Ontology ionadail a’ ruith.

runtime :: cuir fios (msg) a-mach am fiosrachadh deasbaid iomchaidh fhad ‘s a thathar a’ dì-bhugachadh a ’chùmhnant. Stòraidh an dòigh seo am fiosrachadh a thèid a-steach don t-seine agus faodar a cheasnachadh bhon t-seine a’ cleachdadh modh getSmartCodeEvent.

Chaidh an artaigil eadar-theangachadh le luchd-deasachaidh Hashrate & Shares gu sònraichte airson OntologyRussia. briog

A bheil thu nad leasaiche? Thig còmhla ris a’ choimhearsnachd theicnigeach againn aig Cuir fàilte air. Cuideachd, thoir sùil air Ionad luchd-leasachaidh air an làrach-lìn againn, far am faigh thu innealan leasaiche, sgrìobhainnean, agus barrachd.

Ontology

Source: www.habr.com

Cuir beachd ann