Kumaha cara nyerat kontrak pinter WebAssembly dina jaringan Ontology? Bagian 1: Karat

Kumaha cara nyerat kontrak pinter WebAssembly dina jaringan Ontology? Bagian 1: Karat

Téknologi Ontology Wasm ngirangan biaya migrasi kontrak pinter dApp kalayan logika bisnis anu rumit ka blokchain, ku kituna ningkatkeun ékosistem dApp.

Ayeuna Ontologi Wasm Sakaligus ngadukung pangwangunan Rust sareng C ++. Basa Rust ngadukung Wasm langkung saé, sareng bytecode anu dihasilkeun langkung saderhana, anu tiasa ngirangan biaya telepon kontrak. Janten, Kumaha cara ngagunakeun Rust pikeun ngembangkeun kontrak dina jaringan Ontology?

Ngembangkeun Kontrak WASM sareng Rust

Jieun kontrak

kargo nyaeta kreasi proyék alus sarta alat manajemén pakét pikeun ngembangkeun Rust, nu mantuan pamekar pikeun hadé ngatur interaksi kode jeung perpustakaan pihak-katilu. Pikeun nyieun kontrak Ontology Wasm anyar, kantun ngajalankeun paréntah di handap ieu:

Kumaha cara nyerat kontrak pinter WebAssembly dina jaringan Ontology? Bagian 1: Karat

Struktur proyék anu dibangkitkeun:

Kumaha cara nyerat kontrak pinter WebAssembly dina jaringan Ontology? Bagian 1: Karat

File Cargo.toml dianggo pikeun nyetél inpormasi proyék dasar sareng inpormasi perpustakaan anu gumantung. Bagian [lib] file kudu disetel ka crate-type = ["cdylib"]. File lib.rs dipaké pikeun nulis kode logika kontrak. Salaku tambahan, anjeun kedah nambihan parameter kagumantungan kana bagian [dependensi] dina file konfigurasi Cargo.toml:

Kumaha cara nyerat kontrak pinter WebAssembly dina jaringan Ontology? Bagian 1: Karat

Kalayan kagumantungan ieu, pamekar tiasa nyauran antarmuka anu berinteraksi sareng Ontology blockchain sareng alat sapertos parameter serialisasi.

fungsi Éntri kontrak

Unggal program boga fungsi input, kawas fungsi utama urang biasa ningali, tapi kontrak teu boga fungsi utama. Nalika kontrak Wasm dikembangkeun nganggo Rust, fungsi invoke standar dianggo salaku fungsi input pikeun nganggo kontrak. Ngaran fungsi dina Rust bakal can écés nalika nyusun kode sumber Rust kana bytecode anu tiasa dieksekusi ku mesin virtual. Pikeun nyegah compiler ti ngahasilkeun kode kaleuleuwihan sarta ngurangan ukuran kontrak, fungsi invoke nambahkeun #[no_mangle] annotation.

Kumaha fungsi invoke kéngingkeun parameter pikeun ngaéksekusi transaksi?

Perpustakaan ontio_std nyadiakeun runtime :: input () fungsi pikeun meunangkeun parameter pikeun ngaéksekusi transaksi. Pamekar tiasa nganggo ZeroCopySource pikeun deserialize array byte anu dihasilkeun. Di mana Asép Sunandar Sunarya kahiji bait dibaca nyaéta nami métode invoke, dituturkeun ku parameter métode.

Kumaha hasil tina palaksanaan kontrak balik?

Runtime :: fungsi ret disadiakeun ku perpustakaan ontio_std mulih hasil tina hiji palaksanaan metoda.

Fungsi invoke parantos réngsé sapertos kieu:

Kumaha cara nyerat kontrak pinter WebAssembly dina jaringan Ontology? Bagian 1: Karat

Serializing na Deserializing Data Kontrak

Dina prosés ngembangkeun kontrak, pamekar salawasna ngajalankeun kana masalah serialization na deserialization, husus ku cara nyimpen hiji tipe data struct dina database na kumaha deserialize A Asép Sunandar Sunarya bait dibaca tina database pikeun meunangkeun tipe data struct.

Perpustakaan ontio_std nyadiakeun decoder na encoder interfaces pikeun serialization data na deserialization. Widang struct a ogé nerapkeun decoder na encoder interfaces ambéh struktur bisa serialized na deserialized. Instance kelas Tilelep diperlukeun nalika rupa-rupa tipe data anu serialized. Hiji conto ti kelas Tilelep boga buf widang set-tipe nu nyimpen data tipe bait, sarta sakabeh data serialized disimpen dina buf.

Pikeun data panjangna tetep (contona: bait, u16, u32, u64, jeung sajabana), datana langsung dirobih kana susunan bait teras disimpen dina buf; Pikeun data anu panjangna henteu tetep, panjangna kedah diserialisasikeun heula, teras Ddata (contona, wilangan bulat anu teu dipikanyaho ukuranana, kalebet u16, u32, atanapi u64, jsb.).

Deserialization nyaéta sabalikna. Pikeun unggal metode serialisasi, aya metode deserialization anu cocog. Deserialization merlukeun pamakéan instansi tina kelas Sumber. Instance kelas ieu ngagaduhan dua widang buf sareng pos. Buf dipaké pikeun nyimpen data pikeun deserialized sarta pos dipaké pikeun nyimpen posisi dibaca ayeuna. Nalika jinis data tinangtu dibaca, upami anjeun terang panjangna, anjeun tiasa langsung maca, pikeun data anu panjangna teu dipikanyaho-baca panjangna heula, teras baca eusina.

Aksés sareng ngapdet data dina ranté

ontologi-wasm-cdt-karat - encapsulated métode operasional pikeun gawé bareng data dina ranté, nu merenah pikeun pamekar pikeun nerapkeun operasi kayaning nambahkeun, mupus, ngarobah jeung querying data dina ranté nu saperti kieu:

  • database:: meunang (konci) - dipaké pikeun ménta data tina ranté, sarta konci requests palaksanaan panganteur AsRef;
  • database::put (konci, nilai) - dipaké pikeun nyimpen data dina jaringan. Key requests palaksanaan panganteur AsRef, sarta nilai requests palaksanaan panganteur Encoder;
  • database::ngahapus(konci) - dipaké pikeun miceun data tina ranté nu, sarta konci requests palaksanaan panganteur AsRef.

Tes kontrak

Nalika metode kontrak dilaksanakeun, urang peryogi aksés kana data dina ranté sareng urang peryogi mesin virtual anu cocog pikeun ngaéksekusi bytecode kontrak, janten umumna perlu nyebarkeun kontrak dina ranté pikeun uji. Tapi metodeu tés ieu aya masalah. Pikeun ngagampangkeun pamekar pikeun nguji kontrak, perpustakaan ontio_std nyayogikeun modul bohongan pikeun nguji. modul ieu nyadiakeun simulasi data dina sirkuit, sahingga leuwih gampang pikeun pamekar Unit test métode dina kontrak. conto husus bisa kapanggih di dieu.

Debugging Kontrak

konsol :: debug (msg) mintonkeun informasi debug bari debugging kontrak. Inpo pesen bakal ditambahkeun kana file log titik. Prasarat nyaéta nyetél tingkat file log kana mode debug nalika titik uji Ontology lokal dijalankeun.

runtime :: bewara (msg) outputs inpo debug luyu bari kontrak keur debugged. Metoda ieu bakal nyimpen informasi diasupkeun kana ranté sarta bisa queried tina ranté ngagunakeun métode getSmartCodeEvent.

Tulisan ieu ditarjamahkeun ku éditor Hashrate&Shares khususna pikeun OntologyRussia. ceurik

Anjeun pamekar? Gabung komunitas tech kami di Discord. Ogé, nyandak katingal di Puseur pamekar dina situs wéb kami, dimana anjeun tiasa mendakan alat pamekar, dokuméntasi, sareng seueur deui.

Ontology

sumber: www.habr.com

Tambahkeun komentar