Sut i ysgrifennu contract smart WebAssembly ar y rhwydwaith Ontoleg? Rhan 1: Rhwd

Sut i ysgrifennu contract smart WebAssembly ar y rhwydwaith Ontoleg? Rhan 1: Rhwd

Mae technoleg Ontology Wasm yn lleihau cost mudo contractau smart dApp gyda rhesymeg busnes cymhleth i'r blockchain, a thrwy hynny gyfoethogi'r ecosystem dApp yn fawr.

Nawr Ontoleg Wasm Ar yr un pryd yn cefnogi datblygiad Rust a C ++. Mae'r iaith Rust yn cefnogi Wasm yn well, ac mae'r bytecode a gynhyrchir yn symlach, a all leihau cost galwadau contract ymhellach. Felly, sut i ddefnyddio Rust i ddatblygu contract ar y rhwydwaith Ontoleg?

Datblygu Contract WASM gyda Rust

Creu contract

TΓ’l yn offeryn creu prosiectau a rheoli pecynnau da ar gyfer datblygu Rust, sy'n helpu datblygwyr i drefnu rhyngweithio llyfrgelloedd cod a thrydydd parti yn well. I greu contract Ontology Wasm newydd, rhedwch y gorchymyn canlynol:

Sut i ysgrifennu contract smart WebAssembly ar y rhwydwaith Ontoleg? Rhan 1: Rhwd

Strwythur y prosiect y mae'n ei gynhyrchu:

Sut i ysgrifennu contract smart WebAssembly ar y rhwydwaith Ontoleg? Rhan 1: Rhwd

Defnyddir y ffeil Cargo.toml i sefydlu gwybodaeth prosiect sylfaenol a gwybodaeth llyfrgell ddibynnol. Rhaid gosod adran [lib] y ffeil i crate-type = ["cdylib"]. Defnyddir y ffeil lib.rs i ysgrifennu cod rhesymeg y contract. Yn ogystal, mae angen ichi ychwanegu paramedrau dibyniaeth i adran [dibyniaethau] ffeil ffurfweddu Cargo.toml:

Sut i ysgrifennu contract smart WebAssembly ar y rhwydwaith Ontoleg? Rhan 1: Rhwd

Gyda'r ddibyniaeth hon, gall datblygwyr alw rhyngwynebau sy'n rhyngweithio Γ’'r blockchain Ontology ac offer megis y paramedr cyfresoli.

Swyddogaeth mynediad contract

Mae gan bob rhaglen swyddogaeth fewnbwn, fel y brif swyddogaeth a welwn fel arfer, ond nid oes gan y contract brif swyddogaeth. Pan ddatblygir contract Wasm gan ddefnyddio Rust, defnyddir y swyddogaeth invoke rhagosodedig fel y swyddogaeth fewnbwn i ddefnyddio'r contract. Bydd enw swyddogaeth yn Rust yn aneglur wrth lunio cod ffynhonnell Rust i god byte y gellir ei weithredu gan beiriant rhithwir. Er mwyn atal y casglwr rhag cynhyrchu cod diangen a lleihau maint y contract, mae'r swyddogaeth invoke yn ychwanegu'r anodiad #[no_mangle].

Sut mae'r swyddogaeth invoke yn cael paramedrau i gyflawni trafodiad?

Mae'r llyfrgell ontio_std yn darparu swyddogaeth runtime:: mewnbwn() i gael y paramedrau i weithredu trafodiad. Gall datblygwyr ddefnyddio ZeroCopySource i ddad-gyfrifo'r arae beit sy'n deillio o hynny. Yn yr hwn mae'r casgliad cyntaf o beitau a ddarllenir yn enw'r dull invoke, ac yna paramedrau'r dull.

Sut mae canlyniad gweithredu'r contract yn cael ei ddychwelyd?

Mae'r swyddogaeth runtime::ret a ddarperir gan y llyfrgell ontio_std yn dychwelyd canlyniad gweithredu dull.

Mae'r swyddogaeth invoke wedi'i chwblhau yn edrych fel hyn:

Sut i ysgrifennu contract smart WebAssembly ar y rhwydwaith Ontoleg? Rhan 1: Rhwd

Cyfresu a Dad-gyfresi Data Contract

Yn y broses o ddatblygu contractau, mae datblygwyr bob amser yn wynebu problemau gyda chyfresoli a dad-gyfeirio, yn benodol gyda sut i storio math o ddata strwythur yn y gronfa ddata a sut i ddad-gyfrifo cyfres beit a ddarllenir o'r gronfa ddata i gael math o ddata struct.

Mae'r llyfrgell ontio_std yn darparu rhyngwynebau datgodiwr ac amgodiwr ar gyfer cyfresoli data a dad-gyfrifo. Mae meysydd struct hefyd yn gweithredu'r rhyngwynebau datgodiwr ac amgodiwr fel y gellir cyfresoli a dad-gyfresoli'r strwythur. Mae angen enghreifftiau o'r dosbarth Sink pan fydd gwahanol fathau o ddata yn cael eu cyfresoli. Mae gan enghraifft o'r dosbarth Sink fwff maes math set sy'n storio'r data math beit, ac mae'r holl ddata cyfresol yn cael ei storio mewn buf.

Ar gyfer data hyd sefydlog (ee: beit, u16, u32, u64, ac ati), mae'r data'n cael ei drawsnewid yn uniongyrchol i arae beit ac yna'n cael ei storio mewn buf; ar gyfer data o hyd ansefydlog, rhaid cyfresoli hyd yn gyntaf, yna Ddata (er enghraifft, cyfanrifau heb eu llofnodi o faint anhysbys, gan gynnwys u16, u32, neu u64, ac ati).

Mae dad-serialeiddio i'r gwrthwyneb yn union. Ar gyfer pob dull cyfresoli, mae dull dad-gyfresoli cyfatebol. Mae dad-gyfrifo yn gofyn am ddefnyddio enghreifftiau o'r dosbarth Ffynhonnell. Mae gan yr enghraifft ddosbarth hon ddau faes buf a pos. Defnyddir Buf i storio'r data sydd i'w ddadgyfodi a defnyddir pos i storio'r safle darllen cyfredol. Pan fydd math penodol o ddata yn cael ei ddarllen, os ydych chi'n gwybod ei hyd, gallwch ei ddarllen yn uniongyrchol, am ddata o hyd anhysbys - darllenwch yr hyd yn gyntaf, yna darllenwch y cynnwys.

Cyrchu a diweddaru data yn y gadwyn

ontoleg-wasm-cdt-rhwd - wedi crynhoi dull gweithredol o weithio gyda data yn y gadwyn, sy'n gyfleus i ddatblygwyr weithredu gweithrediadau megis ychwanegu, dileu, newid a chwestiynu data yn y gadwyn fel a ganlyn:

  • cronfa ddata:: cael (allwedd) - yn cael ei ddefnyddio i ofyn am ddata o'r gadwyn, a cheisiadau allweddol i weithredu'r rhyngwyneb AsRef;
  • cronfa ddata:: rhoi (allwedd, gwerth) - a ddefnyddir i storio data ar y rhwydwaith. Ceisiadau allweddol gweithredu'r rhyngwyneb AsRef, a gwerth ceisiadau am weithredu'r rhyngwyneb Encoder;
  • cronfa ddata:: dileu (allwedd) - yn cael ei ddefnyddio i dynnu data o'r gadwyn, a cheisiadau allweddol i weithredu'r rhyngwyneb AsRef.

Profi contract

Pan fydd dulliau contract yn cael eu gweithredu, mae angen mynediad i'r data ar y gadwyn ac mae angen peiriant rhithwir priodol arnom i weithredu beitcode y contract, felly yn gyffredinol mae angen defnyddio'r contract ar y gadwyn i'w brofi. Ond mae'r dull hwn o brofi yn broblemus. Er mwyn ei gwneud yn haws i ddatblygwyr brofi contractau, mae'r llyfrgell ontio_std yn darparu modiwl ffug i'w brofi. Mae'r modiwl hwn yn darparu efelychiad o'r data yn y gylched, gan ei gwneud yn haws i ddatblygwyr brofi uned y dulliau yn y contract. Gellir dod o hyd i enghreifftiau penodol yma.

Dadfygio Cytundeb

consol::debug(msg) yn dangos gwybodaeth dadfygio wrth ddadfygio contract. Bydd y wybodaeth msg yn cael ei hychwanegu at y ffeil log nod. Rhagofyniad yw gosod lefel y ffeil log i fodd dadfygio pan fydd y nod prawf Ontoleg lleol yn rhedeg.

runtime::notify(msg) yn allbynnu'r wybodaeth dadfygio briodol tra bod y contract yn cael ei ddadfygio. Bydd y dull hwn yn storio'r wybodaeth a roddir yn y gadwyn a gellir ei holi o'r gadwyn gan ddefnyddio'r dull getSmartCodeEvent.

Cyfieithwyd yr erthygl gan olygyddion Hashrate&Shares yn arbennig ar gyfer OntologyRussia. crio

Ydych chi'n ddatblygwr? Ymunwch Γ’'n cymuned dechnoleg yn Discord. Hefyd, cymerwch olwg ar Canolfan Datblygwyr ar ein gwefan, lle gallwch ddod o hyd i offer datblygwr, dogfennaeth, a mwy.

Ontoleg

Ffynhonnell: hab.com

Ychwanegu sylw