Ahoana ny fanoratana fifanarahana marani-tsaina WebAssembly amin'ny tambajotra Ontology? Fizarana 1: harafesina

Ahoana ny fanoratana fifanarahana marani-tsaina WebAssembly amin'ny tambajotra Ontology? Fizarana 1: harafesina

Ny teknolojia Ontology Wasm dia mampihena ny vidin'ny fifindran'ny fifanarahana smart dApp miaraka amin'ny lojika fandraharahana sarotra mankany amin'ny blockchain, ka mampanan-karena be ny tontolo iainana dApp.

Π’ настоящСС врСмя Ontology Wasm Miaraka amin'ny fampandrosoana ny Rust sy C ++. Ny fiteny Rust dia manohana an'i Wasm tsara kokoa, ary ny bytecode vokarina dia tsotra kokoa, izay mety hampihena bebe kokoa ny vidin'ny antso amin'ny fifanarahana. Noho izany, Ahoana ny fampiasana Rust mba hamoronana fifanarahana amin'ny tambajotra Ontology?

Famolavolana fifanarahana WASM miaraka amin'ny Rust

Mamorona fifanarahana

entana dia fitaovana famoronana tetikasa tsara sy fitantanana fonosana ho an'ny fampandrosoana Rust, izay manampy ny mpamorona handamina tsara kokoa ny fifandraisan'ny code sy ny tranomboky an'ny antoko fahatelo. Mba hamoronana fifanarahana Ontology Wasm vaovao dia araho fotsiny ity baiko manaraka ity:

Ahoana ny fanoratana fifanarahana marani-tsaina WebAssembly amin'ny tambajotra Ontology? Fizarana 1: harafesina

Ny rafitry ny tetikasa avoakany:

Ahoana ny fanoratana fifanarahana marani-tsaina WebAssembly amin'ny tambajotra Ontology? Fizarana 1: harafesina

Ny rakitra Cargo.toml dia ampiasaina hananganana fampahalalana fototra momba ny tetikasa sy fampahalalana momba ny tranomboky miankina. Ny fizarana [lib] amin'ny rakitra dia tsy maintsy apetraka amin'ny crate-type = ["cdylib"]. Ny rakitra lib.rs dia ampiasaina hanoratana ny kaody lojika fifanarahana. Ankoatra izany, mila manampy masontsivana miankina amin'ny fizarana [dependencies] ao amin'ny rakitra fikirakirana Cargo.toml ianao:

Ahoana ny fanoratana fifanarahana marani-tsaina WebAssembly amin'ny tambajotra Ontology? Fizarana 1: harafesina

Miaraka amin'io fiankinan-doha io, ny mpamorona dia afaka miantso ny fifandraisana mifandray amin'ny Ontology blockchain sy ny fitaovana toy ny paramètre serialization.

Asa fidirana amin'ny fifanarahana

Ny programa tsirairay dia manana fiasa fampidirana, toy ny asa lehibe hitantsika matetika, saingy tsy manana asa lehibe ny fifanarahana. Rehefa misy fifanarahana Wasm novolavolaina amin'ny alalan'ny Rust, dia ampiasaina ho toy ny asa fampidirana hampiasana ny fifanarahana ny fiasan'ny invoke default. Ny anaran'ny asa iray ao amin'ny Rust dia tsy mazava rehefa manangona ny kaody loharano Rust ho bytecode izay azo tanterahana amin'ny milina virtoaly. Mba hisorohana ny mpanangom-bokatra tsy hamoaka kaody mihoa-pampana sy hampihenana ny haben'ny fifanarahana, dia manampy ny fanamarihana #[no_mangle].

Ahoana no ahazoan'ny fonction invoke ireo masontsivana hanatanterahana fifampiraharahana?

Ny famakiam-boky ontio_std dia manome ny runtime ::input() mba hahazoana ny mari-pamantarana hanatanterahana fifampiraharahana. Ny mpamorona dia afaka mampiasa ZeroCopySource hanesorana ny array byte vokatra. Ao amin'ny laharana voalohany amin'ny bytes novakiana dia ny anaran'ny fomba fiantsoana, arahin'ny masontsivana fomba.

Ahoana ny famerenana ny vokatry ny fanatanterahana ny fifanarahana?

Ny runtime ::ret function omen'ny ontio_std library dia mamerina ny vokatry ny fomba famonoana.

Toy izao ny fiasan'ny invoke vita:

Ahoana ny fanoratana fifanarahana marani-tsaina WebAssembly amin'ny tambajotra Ontology? Fizarana 1: harafesina

Serializing sy Deserializing angon-drakitra fifanarahana

Ao anatin'ny dingan'ny famolavolana fifanarahana, ny developer dia miatrika olana amin'ny serialization sy ny deserialization, indrindra amin'ny fomba fitahirizana karazana data struct ao amin'ny tahiry sy ny fomba deserialize ny array byte vakiana avy amin'ny tahiry mba hahazoana karazana data struct.

Ny tranomboky ontio_std dia manome interface decoder sy encoder ho an'ny serialization sy deserialization data. Ny sahan'ny struct iray ihany koa dia mampihatra ny decoder sy ny encoder interfaces mba hahafahan'ny rafitra ho serialized sy deserialized. Ny ohatra amin'ny kilasin'ny Sink dia ilaina rehefa misy karazana data isan-karazany. Ohatra iray amin'ny kilasin'ny Sink dia manana buf karazana karazana izay mitahiry ny angon-drakitra karazana byte, ary voatahiry ao anaty buf ny angon-drakitra rehetra.

Ho an'ny angon-drakitra maharitra maharitra (oh: byte, u16, u32, u64, sns.), dia avadika mivantana ho array byte ny angona ary avy eo tehirizina ao amin'ny buf; ho an'ny angon-drakitra tsy voafaritra ny halavany, ny halavany dia tsy maintsy atao andiany voalohany, avy eo Ddata (ohatra, isa tsy misy sonia tsy fantatra ny habeny, anisan'izany ny u16, u32, na u64, sns.).

Ny deserialization dia ny mifanohitra amin'izany. Ho an'ny fomba serialization tsirairay dia misy fomba deserialization mifanaraka amin'izany. Ny deserialization dia mitaky ny fampiasana ohatra amin'ny kilasy Source. Ity ohatra kilasy ity dia manana saha roa buf sy pos. Ny Buf dia ampiasaina hitahiry ny angona ho deserialized ary ny pos dia ampiasaina hitahiry ny toerana vakiana ankehitriny. Rehefa vakiana ny karazana data manokana, raha fantatrao ny halavany, dia azonao atao ny mamaky azy mivantana, ho an'ny angona tsy fantatra ny halavanyβ€”vakio aloha ny halavany, ary vakio ny ao anatiny.

Midira sy manavao ny angona ao amin'ny rojo

ontology-wasm-cdt-rust - nandrakotra fomba fiasa miasa amin'ny angon-drakitra ao anaty rojo, izay mety amin'ny mpamorona ny fampiharana ny asa toy ny manampy, mamafa, manova ary manontany angona ao amin'ny rojo toy izao manaraka izao:

  • database::get(key) - dia ampiasaina amin'ny fangatahana angona avy amin'ny rojo, ary ny fanalahidy dia mangataka ny fampiharana ny AsRef interface;
  • database::put(key, value) - ampiasaina hitahirizana angona amin'ny tambazotra. Ny Key dia mangataka ny fampiharana ny AsRef interface, ary ny sanda dia mangataka ny fampiharana ny Encoder interface;
  • database::mamafa(key) - dia ampiasaina hanesorana ny angona amin'ny rojo, ary ny fanalahidy dia mangataka ny fampiharana ny interface AsRef.

Fitsapana fifanarahana

Rehefa ampiharina ny fomba fanao amin'ny fifanarahana dia mila miditra amin'ny angon-drakitra ao amin'ny rojo ary mila milina virtoaly mifanaraka amin'izany isika hanatanteraka ny bytecode amin'ny fifanarahana, noho izany dia ilaina ny mametraka ny fifanarahana amin'ny rojo ho an'ny fitiliana. Saingy olana ity fomba fitiliana ity. Mba hanamora ny fanandramana ny fifanarahana, ny tranomboky ontio_std dia manome maody maneso ho an'ny fitsapana. Ity maodely ity dia manome simulation ny angon-drakitra ao amin'ny faritra, izay manamora ny fanamorana ny mpamolavola ny fitsapam-pahaizana ireo fomba ao amin'ny fifanarahana. Misy ohatra manokana azo jerena eto.

Debugging fifanarahana

console::debug(msg) dia mampiseho fampahalalana momba ny debug mandritra ny fametrahana fifanarahana. Hampiana ao amin'ny fichier log node ny fampahafantarana hafatra. Ny fepetra takiana dia ny fametrahana ny haavon'ny rakitra log amin'ny fomba debug rehefa mandeha ny node fitsapana Ontology eo an-toerana.

runtime::notify(msg) dia mamoaka ny fampahalalana momba ny debug mifanaraka amin'izany raha eo am-panaovana ny fifanarahana. Ity fomba ity dia hitahiry ny fampahalalana nampidirina tao amin'ny rojo ary azo anontaniana avy amin'ny rojo mampiasa ny fomba getSmartCodeEvent.

Ny lahatsoratra dia nadikan'ny tonian'ny Hashrate&Shares indrindra ho an'ny OntologyRussia. Miantsoa

Mpanamboatra ve ianao? Midira ao amin'ny vondrom-piarahamonina teknolojia ao amin'ny fifandirana. Jereo koa Foiben'ny mpamorona ao amin'ny tranokalanay, izay ahitanao fitaovana mpamorona, antontan-taratasy, ary maro hafa.

Ontolojia

Source: www.habr.com

Add a comment