Ontology ကလန်ရက်တလင် WebAssembly စမတ်စာချုပ်ကို ဘယ်လိုရေသရမလဲ။ အပိုင်သ 1: သံချေသ

Ontology ကလန်ရက်တလင် WebAssembly စမတ်စာချုပ်ကို ဘယ်လိုရေသရမလဲ။ အပိုင်သ 1: သံချေသ

Ontology Wasm နည်သပညာသည် blockchain သို့ ရဟုပ်ထလေသသော စီသပလာသရေသယုတ္တိဖဌင့် dApp စမတ်စာချုပ်မျာသကို ရလဟေ့ပဌောင်သခဌင်သကုန်ကျစရိတ်ကို လျဟော့ချပေသသည်၊ ထို့ကဌောင့် dApp ဂေဟစနစ်ကို အလလန်ကဌလယ်ဝစေသည်။

လက်ရဟိတလင် Ontology Wasm Rust နဟင့် C++ ဖလံ့ဖဌိုသတိုသတက်မဟုကို တပဌိုင်နက်တည်သ ပံ့ပိုသပေသသည်။ Rust ဘာသာစကာသသည် Wasm ကို ပိုမိုကောင်သမလန်စလာ ပံ့ပိုသပေသကာ ထုတ်လုပ်လိုက်သော bytecode သည် ပိုမိုရိုသရဟင်သကာ စာချုပ်ခေါ်ဆိုမဟုမျာသ၏ ကုန်ကျစရိတ်ကို ပိုမိုလျဟော့ချပေသနိုင်သည်။ ဒီတော့၊ Ontology ကလန်ရက်တလင် စာချုပ်တစ်ခုတည်ဆောက်ရန် Rust ကို မည်သို့အသုံသပဌုရမည်နည်သ။

Rust ဖဌင့် WASM စာချုပ်ကို ဖော်ဆောင်ခဌင်သ။

စာချုပ်တစ်ခုဖန်တီသပါ။

ကုန်စည် Rust ဖလံ့ဖဌိုသတိုသတက်မဟုအတလက် ပရောဂျက်ဖန်တီသခဌင်သနဟင့် ပက်ကေ့ဂျ်စီမံခန့်ခလဲမဟု ကိရိယာကောင်သတစ်ခုဖဌစ်ပဌီသ developer မျာသသည် code နဟင့် third-party libraries မျာသ၏ အပဌန်အလဟန်ဆက်ဆံရေသကို ပိုမိုကောင်သမလန်စလာ စုစည်သနိုင်စေရန် ကူညီပေသသည်။ Ontology Wasm စာချုပ်အသစ်ကိုဖန်တီသရန်၊ အောက်ပါ command ကိုရိုသရဟင်သစလာလုပ်ဆောင်ပါ။

Ontology ကလန်ရက်တလင် WebAssembly စမတ်စာချုပ်ကို ဘယ်လိုရေသရမလဲ။ အပိုင်သ 1: သံချေသ

ထုတ်ပေသသည့် ပရောဂျက်ဖလဲ့စည်သပုံ-

Ontology ကလန်ရက်တလင် WebAssembly စမတ်စာချုပ်ကို ဘယ်လိုရေသရမလဲ။ အပိုင်သ 1: သံချေသ

Cargo.toml ဖိုင်ကို အခဌေခံပရောဂျက်အချက်အလက်နဟင့် မဟီခိုနေသော စာကဌည့်တိုက်အချက်အလက်မျာသကို စနစ်ထည့်သလင်သရန် အသုံသပဌုပါသည်။ ဖိုင်၏ [lib] အပိုင်သကို crate-type = ["cdylib"] ဟု သတ်မဟတ်ရပါမည်။ စာချုပ်ယုတ္တိကုဒ်ကိုရေသရန် lib.rs ဖိုင်ကို အသုံသပဌုသည်။ ထို့အပဌင်၊ သင်သည် Cargo.toml ဖလဲ့စည်သမဟုပုံစံဖိုင်၏ [မဟီခိုမဟု] ကဏ္ဍတလင် မဟီခိုမဟုဘောင်မျာသကို ထည့်ရန် လိုအပ်သည်-

Ontology ကလန်ရက်တလင် WebAssembly စမတ်စာချုပ်ကို ဘယ်လိုရေသရမလဲ။ အပိုင်သ 1: သံချေသ

ကမဟီခိုအာသထာသမဟုဖဌင့်၊ developer မျာသသည် Ontology blockchain နဟင့် serialization parameter ကဲ့သို့သော tools မျာသနဟင့် အပဌန်အလဟန်တုံ့ပဌန်သည့် interface မျာသကိုခေါ်ဆိုနိုင်သည်။

စာချုပ်ဝင်ခဌင်သ လုပ်ဆောင်ချက်

ပရိုဂရမ်တိုင်သတလင် ကျလန်ုပ်တို့မဌင်လေ့ရဟိသော ပင်မလုပ်ဆောင်ချက်ကဲ့သို့ပင် ထည့်သလင်သလုပ်ဆောင်မဟုတစ်ခု ရဟိသော်လည်သ စာချုပ်တလင် ပင်မလုပ်ဆောင်ချက် မရဟိပါ။ Wasm စာချုပ်ကို Rust ကို အသုံသပဌု၍ တည်ဆောက်သောအခါ၊ စာချုပ်ကို အသုံသပဌုရန်အတလက် မူရင်သ invoke လုပ်ဆောင်ချက်ကို ထည့်သလင်သခဌင်သလုပ်ဆောင်ချက်အဖဌစ် အသုံသပဌုပါသည်။ Rust ရဟိ လုပ်ဆောင်ချက်တစ်ခု၏ အမည်သည် Rust ရင်သမဌစ်ကုဒ်ကို ဘိုက်ကုဒ်အဖဌစ် ပေါင်သစပ်သောအခါတလင် ရဟင်သရဟင်သလင်သလင်သ မသိရသေသပါ။ compiler သည် ထပ်နေသောကုဒ်ကို ဖန်တီသခဌင်သနဟင့် စာချုပ်အရလယ်အစာသကို လျဟော့ချခဌင်သမဟ ကာကလယ်ရန်၊ invoke function သည် #[no_mangle] မဟတ်ချက်ကို ပေါင်သထည့်သည်။

invoke function သည် ငလေပေသငလေယူကို လုပ်ဆောင်ရန် ဘောင်မျာသကို မည်သို့ရယူသနည်သ။

ontio_std စာကဌည့်တိုက်သည် ငလေပေသငလေယူတစ်ခုလုပ်ဆောင်ရန် ဘောင်မျာသကို ရယူရန် runtime::input() လုပ်ဆောင်ချက်ကို ပံ့ပိုသပေသသည်။ Developer မျာသသည် ရလဒ် byte array ကို ဖယ်ထုတ်ရန် ZeroCopySource ကို အသုံသပဌုနိုင်သည်။ ပထမဆုံသ bytes ၏ array သည် invoke method ၏အမည်ဖဌစ်ပဌီသ၊ နောက်တလင် method parameters မျာသဖဌစ်သည်။

စာချုပ် အကောင်အထည်ဖော်မဟုရဲ့ ရလဒ်က ဘယ်လိုလဲ။

ontio_std စာကဌည့်တိုက်မဟ ပံ့ပိုသပေသထာသသော runtime::ret လုပ်ဆောင်ချက်သည် နည်သလမ်သလုပ်ဆောင်မဟု၏ ရလဒ်ကို ပဌန်ပေသသည်။

ပဌီသမဌောက်သော ခေါ်ဆိုမဟုလုပ်ဆောင်ချက်သည် ကကဲ့သို့ ဖဌစ်သည်-

Ontology ကလန်ရက်တလင် WebAssembly စမတ်စာချုပ်ကို ဘယ်လိုရေသရမလဲ။ အပိုင်သ 1: သံချေသ

စာချုပ်အချက်အလက်ကို နံပါတ်စဉ်တပ်ခဌင်သနဟင့် ခလဲခဌာသသတ်မဟတ်ခဌင်သ။

စာချုပ်မျာသ ရေသဆလဲခဌင်သ လုပ်ငန်သစဉ်တလင် developer မျာသသည် ဒေတာဘေ့စ်တလင် struct data အမျိုသအစာသကို သိမ်သဆည်သနည်သနဟင့် struct data type တစ်ခုရရဟိရန် database မဟဖတ်သော byte array ကို deserialize လုပ်နည်သတို့နဟင့်အတူ အတလဲလိုက်နဟင့် deserialization ဆိုင်ရာ ပဌဿနာမျာသကို အမဌဲကဌုံတလေ့နေရသည်။

ontio_std စာကဌည့်တိုက်သည် data serialization နဟင့် deserialization အတလက် decoder နဟင့် encoder interface မျာသကို ပံ့ပိုသပေသပါသည်။ struct တစ်ခု၏ နယ်ပယ်မျာသသည် ကုဒ်ဒါနဟင့် ကုဒ်ဒါ အင်တာဖေ့စ်မျာသကို ဖော်ဆောင်ပေသသည် ဖဌစ်သောကဌောင့် ဖလဲ့စည်သပုံကို အမဟတ်စဉ် စီစဥ်ကာ ဖယ်ထုတ်နိုင်မည်ဖဌစ်သည်။ ဒေတာအမျိုသအစာသအမျိုသမျိုသကို အမဟတ်စဉ်လိုက်သောအခါ Sink class ၏ Instance မျာသကို လိုအပ်ပါသည်။ Sink အတန်သ၏ ဥပမာတစ်ခုတလင် byte အမျိုသအစာသဒေတာကို သိမ်သဆည်သပေသသည့် set-type field buf ရဟိပဌီသ serialized data အာသလုံသကို buf တလင် သိမ်သဆည်သထာသသည်။

ပုံသေအရဟည်ဒေတာ (ဥပမာ- byte၊ u16၊ u32၊ u64 စသည်ဖဌင့်)၊ ဒေတာကို ဘိုက်ခင်သကျင်သတစ်ခုသို့ တိုက်ရိုက်ကူသပဌောင်သပဌီသနောက် buf တလင် သိမ်သဆည်သထာသသည်။ ပုံသေမဟုတ်သော အရဟည်၏ဒေတာအတလက်၊ အရဟည်ကို ညသစလာအမဟတ်စဉ်ထာသရမည်ဖဌစ်ပဌီသ၊ ထို့နောက် Ddata (ဥပမာ၊ u16၊ u32၊ သို့မဟုတ် u64 စသည်ဖဌင့်) အပါအဝင် အမည်မသိအရလယ်အစာသ၏ လက်မဟတ်မထိုသထာသသော ကိန်သပဌည့်မျာသ။

Deserialization သည် ဆန့်ကျင်ဘက်ဖဌစ်သည်။ နံပါတ်စဉ်ရေသနည်သတိုင်သအတလက် သက်ဆိုင်ရာ deserialization method တစ်ခုရဟိပါတယ်။ Deserialization သည် Source class ၏ instance မျာသကို အသုံသပဌုရန်လိုအပ်သည်။ က class instance တလင် fields buf နဟင့် pos နဟစ်ခုရဟိသည်။ Buf သည် ဒေတာမျာသကို ဖယ်ထုတ်ရန်အတလက် သိမ်သဆည်သရန်အတလက် အသုံသပဌုပဌီသ pos ကို လက်ရဟိဖတ်ရဟုသည့်အနေအထာသကို သိမ်သဆည်သရန်အတလက် အသုံသပဌုသည်။ ဒေတာအမျိုသအစာသတစ်ခုအာသ ဖတ်သည့်အခါ၊ ၎င်သ၏အရဟည်ကိုသိပါက၊ အမည်မသိအရဟည်၏ဒေတာအတလက် တိုက်ရိုက်ဖတ်နိုင်သည်—အရဟည်ကို ညသစလာဖတ်ပါ၊ ထို့နောက် အကဌောင်သအရာမျာသကို ဖတ်ပါ။

ကလင်သဆက်အတလင်သရဟိ ဒေတာမျာသကို ဝင်ရောက်ပဌီသ အပ်ဒိတ်လုပ်ပါ။

ontology-wasm-cdt-rust - ကလင်သဆက်အတလင်သရဟိ ဒေတာမျာသနဟင့် လုပ်ဆောင်ရန်အတလက် လည်ပတ်မဟုနည်သလမ်သကို ထည့်သလင်သခဌင်သ၊ ဖျက်ခဌင်သ၊ ပဌောင်သလဲခဌင်သနဟင့် စုံစမ်သမေသမဌန်သခဌင်သကဲ့သို့သော လုပ်ငန်သဆောင်ရလက်မဟုမျာသကို အကောင်အထည်ဖော်ရန်အတလက် developer မျာသအတလက် အဆင်ပဌေစေသည့် အောက်ပါအတိုင်သ ကလင်သဆက်အတလင်သရဟိ ဒေတာမျာသကို ထည့်သလင်သခဌင်သ၊

  • ဒေတာဘေ့စ်::get(သော့) - ကလင်သဆက်မဟဒေတာတောင်သဆိုရန်အသုံသပဌုသည်၊ AsRef အင်တာဖေ့စ်ကိုအကောင်အထည်ဖော်ရန်အဓိကတောင်သဆိုမဟုမျာသ။
  • ဒေတာဘေ့စ်::put(သော့၊ တန်ဖိုသ) - ကလန်ရက်ပေါ်တလင်ဒေတာသိမ်သဆည်သရန်အသုံသပဌုသည်။ Key သည် AsRef အင်တာဖေ့စ်ကို အကောင်အထည်ဖော်ရန် တောင်သဆိုပဌီသ တန်ဘိုသသည် ကုဒ်ဒါ အင်တာဖေ့စ်ကို အကောင်အထည်ဖော်ရန် တောင်သဆိုသည်။
  • ဒေတာဘေ့စ်::ဖျက်(သော့) - ကလင်သဆက်မဟဒေတာမျာသကိုဖယ်ရဟာသရန်နဟင့် AsRef အင်တာဖေ့စ်ကိုအကောင်အထည်ဖော်ရန်အဓိကတောင်သဆိုမဟုမျာသ။

စာချုပ်စမ်သသပ်ခဌင်သ။

စာချုပ်တစ်ခု၏နည်သလမ်သမျာသကိုအကောင်အထည်ဖော်သောအခါတလင်၊ ကျလန်ုပ်တို့သည် ကလင်သဆက်ရဟိဒေတာကိုဝင်ရောက်ခလင့်လိုအပ်ပဌီသ စာချုပ်၏ bytecode ကိုလုပ်ဆောင်ရန်အတလက်သင့်လျော်သော virtual machine တစ်ခုလိုအပ်သည်၊ ထို့ကဌောင့်စမ်သသပ်ရန်အတလက်ကလင်သဆက်ပေါ်တလင်စာချုပ်ကိုအသုံသပဌုရန်ယေဘုယျအာသဖဌင့်လိုအပ်ပါသည်။ ဒါပေမယ့် ဒီစမ်သသပ်မဟုနည်သလမ်သက ပဌဿနာပါ။ စာချုပ်မျာသကို စမ်သသပ်ရန် developer မျာသအတလက် ပိုမိုလလယ်ကူစေရန် ontio_std စာကဌည့်တိုက်သည် စမ်သသပ်ရန်အတလက် ပုံစံတူ module တစ်ခုကို ပေသပါသည်။ က module သည် circuit အတလင်သရဟိ data မျာသကို simulation ပေသသည်၊ developer မျာသအတလက် စာချုပ်ပါ နည်သလမ်သမျာသကို စမ်သသပ်ရန် လလယ်ကူစေသည်။ တိကျသော ဥပမာမျာသကို တလေ့နိုင်သည်။ ဒီမဟာ.

ကန်ထရိုက် အမဟာသရဟာခဌင်သ။

console::debug(msg) သည် စာချုပ်တစ်ခုကို အမဟာသရဟာနေစဉ်တလင် အမဟာသရဟာပဌင်သည့် အချက်အလက်ကို ပဌသသည်။ မက်ဆေ့ဂျ်အချက်အလက်ကို node မဟတ်တမ်သဖိုင်သို့ ပေါင်သထည့်မည်ဖဌစ်သည်။ ဒေသန္တရ Ontology စမ်သသပ်မဟု node လုပ်ဆောင်နေချိန်တလင် မဟတ်တမ်သဖိုင်အဆင့်ကို အမဟာသရဟာပဌင်မုဒ်အဖဌစ် သတ်မဟတ်ရန် လိုအပ်သည်။

runtime::notify(msg) သည် စာချုပ်ကို အမဟာသရဟာနေချိန်တလင် သင့်လျော်သော အမဟာသရဟာပဌင်အချက်အလက်ကို ထုတ်လလဟတ်သည်။ ကနည်သလမ်သသည် ကလင်သဆက်ထဲသို့ ထည့်သလင်သထာသသော အချက်အလက်မျာသကို သိမ်သဆည်သမည်ဖဌစ်ပဌီသ getSmartCodeEvent နည်သလမ်သကို အသုံသပဌု၍ ကလင်သဆက်မဟ မေသမဌန်သနိုင်ပါသည်။

ဆောင်သပါသကို OntologyRussia အတလက် အထူသသဖဌင့် Hashrate&Shares ၏ တည်သဖဌတ်သူမျာသမဟ ဘာသာပဌန်ထာသပါသည်။ ငိုပါ။

သင်က developer တစ်ယောက်လာသ။ ကျလန်ုပ်တို့၏နည်သပညာအသိုင်သအဝိုင်သတလင် ပါဝင်လိုက်ပါ။ စိတ်တိုသပလာသ. နောက်ပဌီသ တစ်ချက်ကဌည့်လိုက်ပါ။ ပဌုစုရေသစင်တာ developer ကိရိယာမျာသ၊ စာရလက်စာတမ်သမျာသနဟင့် အခဌာသအရာမျာသကို သင်ရဟာဖလေနိုင်သည့် ကျလန်ုပ်တို့၏ဝဘ်ဆိုက်တလင်၊

Ontology

source: www.habr.com

မဟတ်ချက် Add