
Teknologjia Ontology Wasm ul kostot e transferimit të kontratave smart dApp me logjikë të komplikuar biznesi në blockchain, duke pasuruar ndjeshëm ekosistemin dApp.
Aktualisht mbështet zhvillimin në gjuhën Rust dhe në gjuhën C++. Gjuha Rust mbështet më mirë Wasm, dhe kodi i gjeneruar i bajtëve është më i thjeshtë, çka mund të ulë ende më shumë kostot e thirrjeve të kontratave. Pra, si të përdorim Rust për të zhvilluar një kontratë në rrjetin Ontology?
Zhvillimi i kontratës WASM me Rust
Krijimi i kontratës
është një mjet i shkëlqyer për krijimin e projekteve dhe menaxhimin e paketave gjatë zhvillimit të programeve në Rust, i cili ndihmon zhvilluesit të organizojnë më mirë bashkëveprimin e kodit dhe bibliotekave të jashtme. Për të krijuar një kontratë të re Ontology Wasm, thjesht ekzekutoni komandën e mëposhtme:
![]()
Struktura e projektit që ajo gjeneron:

Skedari Cargo.toml pĂ«rdoret pĂ«r tĂ« konfiguruar informacionin bazĂ« tĂ« projektit dhe informacionin e bibliotekĂ«s sĂ« varur. Seksioni [lib] nĂ« skedar duhet tĂ« vendoset nĂ« vlerĂ«n crate-type = [âcdylibâ]. Skedari lib.rs pĂ«rdoret pĂ«r tĂ« shkruar kodin e logjikĂ«s sĂ« kontratĂ«s. PĂ«rveç kĂ«saj, duhet tĂ« shtoni parametrat e varĂ«sive nĂ« seksionin [dependencies] tĂ« skedarit tĂ« konfigurimit Cargo.toml:

Me këtë varësi, zhvilluesit mund të thërrasin interfaca që ndërveprojnë me blockchain-in Ontology, si dhe mjete të tilla si parametrat e serializimit.
Funksioni i hyrjes së kontratës
Ădo program ka njĂ« funksion hyrĂ«s, siç Ă«shtĂ« funksioni main qĂ« zakonisht shohim, por kontrata nuk ka njĂ« funksion main. Kur zhvillohet njĂ« kontratĂ« Wasm duke pĂ«rdorur Rust, funksioni invoke pĂ«rdoret si funksioni hyrĂ«s pĂ«r kontratĂ«n. Emri i funksionit nĂ« Rust do tĂ« jetĂ« i paqartĂ« gjatĂ« kompaktimit tĂ« kodit burimor Rust nĂ« bajtĂ«-kod, i cili mund tĂ« ekzekutohet nga makina virtuale. PĂ«r tĂ« paralajmĂ«ruar kompajlerin tĂ« mos gjenerojĂ« kod tĂ« tepĂ«rt dhe pĂ«r tĂ« ulur madhĂ«sinĂ« e kontratĂ«s, funksioni invoke shton anotimin #[no_mangle].
Si merr funksioni invoke parametrat për të kryer transaksionin?
Biblioteka ontio_std ofron funksionin runtime :: input () për të marrë parametrat për ekzekutimin e transaksionit. Zhvilluesit mund të përdorin ZeroCopySource për të deserializuar masivin e marrë të bajtëve. Në të, array i parë i lexuar i bajtëve është emri i metodës invoke, pastaj parametrat e metodës.
Si kthehet rezultati i ekzekutimit të kontratës?
Funksioni runtime::ret, i ofruar nga biblioteka ontio_std, kthen rezultatin e ekzekutimit të metodës.
Funksioni i perfunduar invoke duket si më poshtë:

Serializimi dhe deserializimi i të dhënave të kontratës.
Gjatë zhvillimit të kontratave, zhvilluesit shpesh hasin në probleme të serializimit dhe deserializimit, konkretisht me mënyrën se si të ruajnë të dhënat e tipit struct në bazën e të dhënave dhe si të deserializojnë një array bajtësh të lexuar nga baza e të dhënave për të marrë tipin struct.
Biblioteka ontio_std ofron interface të dekoduesit dhe koduesit për serializimin dhe deserializimin e të dhënave. Fushat e strukturës struct gjithashtu realizojnë interface të dekoduesit dhe koduesit, kështu që struktura mund të serializohet dhe deserializohet. Instancat e klasës Sink janë të nevojshme kur serializohen lloje të ndryshme të të dhënave. Një instancë e klasës Sink ka një fushë buf të tipit set, e cila ruan të dhënat e tipit byte, dhe të gjitha të dhënat e serializuara ruhen në buf.
Për të dhënat me gjatësi fikse (p.sh.: byte, u16, u32, u64 etj.), të dhënat shndërrohen drejtpërdrejt në një array bajtësh dhe pastaj ruhen në buf; për të dhënat me gjatësi të papërcaktuar, së pari duhet të serializoni gjatësi, e më pas të dhënat (p.sh. numra të plotë pa shenjë të gjatë të panjohur, duke përfshirë u16, u32 ose u64 etj.).
Deserializimi Ă«shtĂ« krejt e kundĂ«rta. PĂ«r çdo metodĂ« serializimi, ka njĂ« metodĂ« pĂ«rkatĂ«se deserializimi. Deserializimi kĂ«rkon pĂ«rdorimin e instancave tĂ« klasĂ«s Source. Kjo instancĂ« e klasĂ«s ka dy fusha buf dhe pos. Buf pĂ«rdoret pĂ«r tĂ« ruajtur tĂ« dhĂ«nat qĂ« do tĂ« deserializohen, ndĂ«rsa pos pĂ«rdoret pĂ«r tĂ« mbajtur pozicionin aktual tĂ« leximit. Kur lexoni njĂ« tip tĂ« caktuar tĂ« tĂ« dhĂ«nave, nĂ«se e dini gjatĂ«si e tyre, mund t'i lexoni ato drejtpĂ«rdrejt, pĂ«r tĂ« dhĂ«nat e panjohura nĂ« gjatĂ«siâ sĂ« pari lexoni gjatĂ«si, e pastaj lexoni pĂ«rmbajtjen.
Q access and update data in the chain
Ontology-wasm-cdt-rust â inkapsuloi metodin operativ tĂ« punĂ«s me tĂ« dhĂ«na nĂ« zinxhir, i cili Ă«shtĂ« i pĂ«rshtatshĂ«m pĂ«r zhvilluesit pĂ«r tĂ« realizuar operacione si shtimi, fshirja, ndryshimi dhe kĂ«rkimi i tĂ« dhĂ«nave nĂ« zinxhir nĂ« kĂ«tĂ« mĂ«nyrĂ«:
- database::get(key) â pĂ«rdoret pĂ«r tĂ« kĂ«rkuar tĂ« dhĂ«na nga zinxhiri, ndĂ«rsa key kĂ«rkon implementimin e interfesĂ«s AsRef;
- database::put(key, value) â pĂ«rdoret pĂ«r tĂ« ruajtur tĂ« dhĂ«na nĂ« rrjet. Key kĂ«rkon implementimin e interfesĂ«s AsRef, ndĂ«rsa value kĂ«rkon implementimin e interfesĂ«s Encoder;
- database::delete(key) â pĂ«rdoret pĂ«r tĂ« fshirĂ« tĂ« dhĂ«na nga zinxhiri, ndĂ«rsa key kĂ«rkon implementimin e interfesĂ«s AsRef.
Testimi i kontratës
Kur implementohen metodat e kontratës, na nevojitet akses në të dhënat në zinxhir dhe na nevojitet një makinë virtuale për të ekzekutuar bytecode-in e kontratës, prandaj zakonisht është e nevojshme të despletohet kontrata në zinxhir për testim. Por ky metod testimi është problematik. Për ta lehtësuar testimin e kontratave për zhvilluesit, biblioteka ontio_std ofron një modul mock për testim. Ky modul ofron simuluar të dhënat në zinxhir, duke e bërë më të lehtë për zhvilluesit testimin e metodave në kontratë. Shembuj konkretë mund të gjenden .
Debugging i kontratës
console::debug(msg) tregon informacionin e debug-ut gjatë debugging-ut të kontratës. Informacioni msg do të regjistrohet në skedarin e logs të nodës. Kushti i domosdoshëm është të vendoset niveli i logging në modin e debugging, kur nodë testuese lokale e Ontology është aktive.
runtime::notify(msg) tregon informacionin përkatës të debug-ut gjatë debugging-ut të kontratës. Ky metod do të ruajë informacionin e dhënë në zinxhir dhe mund të kërkohet nga zinxhiri nëpërmjet metodës getSmartCodeEvent.
The article was translated by the Hashrate & Shares editorial team specifically for OntologyRussia.
Are you a developer? Join our technical community on . Additionally, check out the në faqen tonë, aty mund të gjeni mjetet e zhvilluesit, dokumentacionin dhe shumë më tepër.
Ontology
- /
- Telegram /
- /
Burimi: habr.com
