Kepiye carane nulis kontrak cerdas WebAssembly ing jaringan Ontologi? Bagean 1: Rust

Kepiye carane nulis kontrak cerdas WebAssembly ing jaringan Ontologi? Bagean 1: Rust

Teknologi Wasm Ontologi nyuda biaya migrasi kontrak pinter dApp kanthi logika bisnis sing kompleks menyang blokchain, saéngga nambah ekosistem dApp.

В настоящее время Ontologi Wasm Bebarengan ndhukung pembangunan Rust lan C ++. Basa Rust ndhukung Wasm luwih apik, lan bytecode sing digawe luwih gampang, sing bisa nyuda biaya telpon kontrak. Dadi, carane nggunakake Rust kanggo ngembangaken kontrak ing jaringan Ontologi?

Ngembangake Kontrak WASM karo Rust

Nggawe kontrak

Cargo minangka alat nggawe proyek lan manajemen paket sing apik kanggo pangembangan Rust, sing mbantu pangembang kanggo ngatur interaksi kode lan perpustakaan pihak katelu kanthi luwih apik. Kanggo nggawe kontrak Ontology Wasm anyar, jalanake printah ing ngisor iki:

Kepiye carane nulis kontrak cerdas WebAssembly ing jaringan Ontologi? Bagean 1: Rust

Struktur proyek sing diasilake:

Kepiye carane nulis kontrak cerdas WebAssembly ing jaringan Ontologi? Bagean 1: Rust

File Cargo.toml digunakake kanggo nyiyapake informasi proyek dhasar lan informasi perpustakaan gumantung. Bagean [lib] file kudu disetel menyang crate-type = ["cdylib"]. File lib.rs digunakake kanggo nulis kode logika kontrak. Kajaba iku, sampeyan kudu nambah parameter dependensi menyang bagean [dependensi] file konfigurasi Cargo.toml:

Kepiye carane nulis kontrak cerdas WebAssembly ing jaringan Ontologi? Bagean 1: Rust

Kanthi ketergantungan iki, pangembang bisa nelpon antarmuka sing sesambungan karo pamblokiran Ontologi lan alat kayata parameter serialisasi.

Fungsi entri kontrak

Saben program nduweni fungsi input, kaya fungsi utama sing biasane kita deleng, nanging kontrak kasebut ora duwe fungsi utama. Nalika kontrak Wasm dikembangake nggunakake Rust, fungsi invoke standar digunakake minangka fungsi input kanggo nggunakake kontrak. Jeneng fungsi ing Rust bakal ora cetha nalika ngumpulake kode sumber Rust menyang bytecode sing bisa dieksekusi dening mesin virtual. Kanggo nyegah compiler saka ngasilake kode keluwih lan nyuda ukuran kontrak, fungsi invoke nambah #[no_mangle] anotasi.

Kepiye fungsi invoke entuk paramèter kanggo nglakokaké transaksi?

Perpustakaan ontio_std nyedhiyakake fungsi runtime :: input () kanggo entuk paramèter kanggo nglakokaké transaksi. Pangembang bisa nggunakake ZeroCopySource kanggo deserialize array byte sing diasilake. Ing array pertama byte sing diwaca yaiku jeneng metode invoke, banjur paramèter metode.

Kepiye asil eksekusi kontrak bali?

Runtime :: fungsi ret sing diwenehake dening perpustakaan ontio_std ngasilake asil saka eksekusi metode.

Fungsi invoke rampung katon kaya iki:

Kepiye carane nulis kontrak cerdas WebAssembly ing jaringan Ontologi? Bagean 1: Rust

Serializing lan Deserializing Data Kontrak

Ing proses ngembangaken kontrak, pangembang tansah nemu masalah karo serialization lan deserialization, khusus karo carane nyimpen jinis data struct ing database lan carane deserialize Uploaded byte diwaca saka database kanggo njaluk jinis data struct.

Perpustakaan ontio_std nyedhiyakake antarmuka dekoder lan encoder kanggo serialisasi lan deseralisasi data. Kothak struct uga ngleksanakake decoder lan encoder antarmuka supaya struktur bisa serialized lan deserialized. Instance saka kelas Sink dibutuhake nalika macem-macem jinis data serialized. Kayata saka kelas Sink wis buf lapangan jinis pesawat sing nyimpen data jinis byte, lan kabeh data serialized disimpen ing buf.

Kanggo data dawa tetep (eg: byte, u16, u32, u64, etc.), data kasebut langsung diowahi dadi array byte banjur disimpen ing buf; kanggo data sing dawane ora tetep, dawane kudu serialisasi dhisik, banjur Ddata (contone, integer unsigned ukuran sing ora dingerteni, kalebu u16, u32, utawa u64, lsp).

Deserialization ngelawan persis. Kanggo saben cara serialisasi, ana cara deseralisasi sing cocog. Deserialisasi mbutuhake panggunaan instance saka kelas Source. Instance kelas iki duwe rong kolom buf lan pos. Buf digunakake kanggo nyimpen data kanggo deserialized lan pos digunakake kanggo nyimpen posisi maca saiki. Nalika jinis data tartamtu diwaca, yen sampeyan ngerti dawane, sampeyan bisa maca langsung, kanggo data sing dawane ora dingerteni - maca dawane dhisik, banjur maca isine.

Ngakses lan nganyari data ing chain

ontologi-wasm-cdt-karat - encapsulated cara operasional kanggo nggarap data ing chain, sing trep kanggo pangembang kanggo ngleksanakake operasi kayata nambah, mbusak, ngganti lan takon data ing chain minangka nderek:

  • database::get(key) - digunakake kanggo njaluk data saka chain, lan tombol njaluk implementasine saka antarmuka AsRef;
  • database::put(key, value) - digunakake kanggo nyimpen data ing jaringan. Key njaluk implementasine antarmuka AsRef, lan nilai njaluk implementasine antarmuka Encoder;
  • database::delete(key) - digunakake kanggo mbusak data saka chain, lan tombol njaluk implementasine saka antarmuka AsRef.

Tes kontrak

Nalika cara kontrak dileksanakake, kita kudu akses menyang data ing chain lan kita kudu mesin virtual cocok kanggo nglakokaké bytecode saka kontrak, supaya iku umume perlu kanggo masang kontrak ing chain kanggo testing. Nanging cara tes iki ana masalah. Kanggo nggawe luwih gampang kanggo pangembang kanggo nyoba kontrak, perpustakaan ontio_std nyedhiyakake modul mock kanggo testing. Modul iki menehi simulasi data ing sirkuit, nggawe luwih gampang kanggo pangembang unit test cara ing kontrak. Conto spesifik bisa ditemokake kene.

Debugging Kontrak

console :: debug (msg) nampilake informasi debug nalika debugging kontrak. Informasi pesen bakal ditambahake menyang file log simpul. Prasyarat yaiku nyetel level file log menyang mode debug nalika simpul uji Ontologi lokal mlaku.

runtime :: notify(msg) output informasi debug cocok nalika kontrak lagi debugged. Cara iki bakal nyimpen informasi sing dilebokake ing rantai lan bisa ditakoni saka rantai nggunakake metode getSmartCodeEvent.

Artikel kasebut diterjemahake dening editor Hashrate&Shares utamane kanggo OntologyRussia. nangis

Apa sampeyan pangembang? Gabung komunitas teknologi kita ing Discord. Uga, njupuk dipikir ing Pusat Pangembang ing situs web kita, ing ngendi sampeyan bisa nemokake alat pangembang, dokumentasi, lan liya-liyane.

Ontologi

Source: www.habr.com

Add a comment