Ethereum Virtual Machine ရဲ့ နောက်ကွယ်က

EVM ဆိုတာ Ethereum Virtual Machine ရဲ့ အတိုကောက်ဖြစ်ပြီး ethereum blockchain နည်းပညာမှာ အလွန်မှပဲ အရေးပါတဲ့ အစိတ်အပိုင်းတစ်ခု ဖြစ်ပါတယ်။ ဒီနေရာမှာ Virtual Machine ဆိုတာ ကွန်ပျူတာတစ်လုံးကို software နဲ့ တည်ဆောက်ထားတာပါ။ တကယ့် physical ကွန်ပျူတာတစ်လုံး မဟုတ်ပေမယ့် ကွန်ပျူတာတစ်လုံးလို အလုပ်လုပ်နိုင်တဲ့ program တစ်ခုပါ။ EVM ဟာ Ethereum blockchain ရဲ့ အဓိက computation engine လို့ ပြောလို့ရပါတယ်။ EVM က smart contracts တွေကို run ပေးပြီး၊ blockchain ပေါ်က transactions တွေကို ကိုင်တွယ်ပေးပါတယ်။ ဥပမာ အနေနဲ့ စာသင်ကျောင်းတစ်ကျောင်းမှာ…


EVM ဆိုတာ Ethereum Virtual Machine ရဲ့ အတိုကောက်ဖြစ်ပြီး ethereum blockchain နည်းပညာမှာ အလွန်မှပဲ အရေးပါတဲ့ အစိတ်အပိုင်းတစ်ခု ဖြစ်ပါတယ်။ ဒီနေရာမှာ Virtual Machine ဆိုတာ ကွန်ပျူတာတစ်လုံးကို software နဲ့ တည်ဆောက်ထားတာပါ။ တကယ့် physical ကွန်ပျူတာတစ်လုံး မဟုတ်ပေမယ့် ကွန်ပျူတာတစ်လုံးလို အလုပ်လုပ်နိုင်တဲ့ program တစ်ခုပါ။

EVM ဟာ Ethereum blockchain ရဲ့ အဓိက computation engine လို့ ပြောလို့ရပါတယ်။ EVM က smart contracts တွေကို run ပေးပြီး၊ blockchain ပေါ်က transactions တွေကို ကိုင်တွယ်ပေးပါတယ်။ ဥပမာ အနေနဲ့ စာသင်ကျောင်းတစ်ကျောင်းမှာ အတန်းတွေ၊ ဆရာတွေ၊ ကျောင်းသားတွေ ရှိသလိုပဲ EVM မှာလည်း သူ့ရဲ့ အစိတ်အပိုင်းတွေ အသီးသီး ရှိပါတယ်။

EVM ရဲ့ အရေးကြီးတဲ့ အစိတ်အပိုင်းတစ်ခုကတော့ gas system ပါ။ ဒါဟာ ဘဏ်တစ်ခုရဲ့ ငွေကြေးစနစ်နဲ့ ဆင်တူပါတယ်။ smart contract တွေ run တဲ့အခါ ဖြစ်ပေါ်သွားတဲ့ transaction တိုင်းအတွက် gas ဆိုတဲ့ fee တစ်ခု ပေးရပါတယ်။ ပုံမှန်ငွေကြေးနဲ့ ဝယ်ယူမှုတစ်ခု လုပ်တဲ့အခါ service charge ပေးရသလိုပါပဲ။ ဒီစနစ်က network ကို spam လုပ်တာတွေကနေ ကာကွယ်ပေးသလို မလိုအပ်ပဲ resources တွေကို အသုံးမပြုအောင်လည်း ထိရောက်စွာ စီမံခန့်ခွဲနိုင်စေပါတယ်။

Smart contract တွေကို ရေးသားတဲ့အခါ developer တွေဟာ Solidity လို programming language တွေကို အသုံးပြုကြပါတယ်။ ဒါပေမယ့် EVM က ဒီ code တွေကို တိုက်ရိုက် နားမလည်နိုင်ပါဘူး။ ဒါကြောင့် compiler ဆိုတဲ့ program က ဒီ code တွေကို bytecode လို့ခေါ်တဲ့ EVM နားလည်နိုင်တဲ့ ပုံစံတစ်မျိုးကို ပြောင်းပေးရပါတယ်။ ဒါဟာ ဘာသာစကားတစ်ခုကနေ နောက်တစ်ခုကို ဘာသာပြန်ပေးသလိုပါပဲ။

EVM နဲ့ Ethereum Node တို့ရဲ့ ဆက်စပ်မှုကို နားလည်ဖို့ စာကြည့်တိုက်တစ်ခုနဲ့ နှိုင်းယှဉ်ကြည့်ရင် Node က စာကြည့်တိုက်အဆောက်အဦး တစ်ခုလုံးနဲ့ တူပြီး၊ EVM က စာကြည့်တိုက်ထဲက စာဖတ်ခန်းတစ်ခုနဲ့ တူပါတယ်။ Node က blockchain data အားလုံးကို သိမ်းဆည်းထားပြီး၊ EVM က အဲဒီ data တွေအပေါ် computation တွေ လုပ်ပေးတာပါ။

လုံခြုံရေးအနေနဲ့ EVM မှာ အရေးကြီးတဲ့ features တွေ ပါဝင်ပါတယ်။ Contract တိုင်းက သီးခြား sandbox ထဲမှာ run ပါတယ်။ ဒါက ကလေးကစားကွင်းတစ်ခုလို သီးသန့်နေရာတစ်ခု သတ်မှတ်ပေးထားတာပါ။ ဒီနည်းနဲ့ contract တစ်ခုက execution လုပ်နေတဲ့အခါ နောက်တစ်ခုက သွားပြီးမထိခိုက်နိုင်အောင် ကာကွယ်ထားပါတယ်။

Transaction တစ်ခု ဖြစ်ပေါ်တဲ့အခါမှာ အောက်ပါအတိုင်း အဆင့်ဆင့်အလုပ်လုပ်ပါတယ်။

၁။ Node က transaction ကို လက်ခံရရှိပါတယ်။

၂။ Node က transaction ကို verify လုပ်ပါတယ်။

၃။ Transaction က smart contract နှင့် သက်ဆိုင်ပါက Node က EVM ကို activate လုပ်ပါတယ်။

၄။ EVM က contract code ကို execute လုပ်ပါတယ်။

၅။ EVM က state changes များကို Node ထံ ပြန်ပို့ပါတယ်။

၆။ Node က စာရင်းအပြောင်းအလဲများကို blockchain ပေါ်မှာ update လုပ်ပါတယ်။

Ethereum Yellow Paper

Ethereum Yellow Paper ဆိုတာ Dr. Gavin Wood က ရေးသားခဲ့တဲ့ Ethereum blockchain ရဲ့ technical specification စာတမ်းတစ်စောင်ဖြစ်ပါတယ်။ ဒီစာတမ်းမှာ Ethereum platform ရဲ့ အခြေခံကျတဲ့ protocol တွေနဲ့ virtual machine တွေအကြောင်းကို အသေးစိတ် ဖော်ပြထားပါတယ်။

ဒီနေရာမှာ Yellow Paper ဆိုတာဘာလဲ မေးစရာရှိနိုင်ကြပါတယ်။ Yellow Paper ဆိုတာ White Paper နဲ့မတူပဲ technical ပိုင်းဆိုင်ရာ အသေးစိတ်အချက်အလက်တွေကို mathematical equation တွေနဲ့တကွ ရှင်းပြထားတာဖြစ်ပါတယ်။

Ethereum Yellow Paper ထဲမှာ Ethereum ရဲ့ အဓိကအစိတ်အပိုင်းတွေဖြစ်တဲ့ world state၊ machine state နဲ့ block state တွေကိုလည်း mathematical notation တွေသုံးပြီး ရှင်းပြထားပါတယ်။ ဒါ့အပြင် transaction execution ဖြစ်စဉ်တွေမှာ gas ဘယ်လို တွက်ချက်သလဲ၊ transaction တစ်ခုကနေ နောက်တစ်ခုကို state ဘယ်လို ပြောင်းလဲသွားသလဲ စတာတွေကိုလည်း အသေးစိတ် ဖော်ပြထားပါတယ်။

Smart contract တွေ အလုပ်လုပ်တဲ့အခါ သုံးတဲ့ EVM bytecode တွေ၊ opcode တွေနဲ့ execution environment တွေကိုလည်း formal mathematical language သုံးပြီး specification ရေးထားပါတယ်။ ဒါကြောင့် developer တွေအနေနဲ့ Ethereum client တွေကို implement လုပ်တဲ့အခါ Yellow Paper ကို reference အဖြစ် အသုံးပြုကြရပါတယ်။

Yellow Paper ဟာ technical အရမ်းဆန်တဲ့အတွက် နားလည်ရခက်နိုင်ပေမယ့် Ethereum ecosystem ကို နက်နက်နဲနဲ လေ့လာချင်သူတွေအတွက် မရှိမဖြစ် reference document တစ်ခုဖြစ်ပါတယ်။ အထူးသဖြင့် Ethereum client တွေ၊ development tools တွေနဲ့ protocol implementation တွေ ဖန်တီးနေတဲ့ developer တွေအတွက် အရေးပါတဲ့ စာတမ်းတစ်စောင် ဖြစ်ပါတယ်။

Ethereum Yellow Paper ကို https://ethereum.github.io/yellowpaper/paper.pdf မှာ ဝင်ရောက်ဖတ်ရှုဒေါင်းလော့ချလို့ရပါတယ်။

EVM ရဲ့ Byte Code

Solidity နဲ့ EVM Bytecode အကြောင်း အသေးစိတ် ရှင်းပြပါမယ်။ ဒီအပိုင်းကတော့ technical အရမ်းဆန်လို့ Computer Science အကြောင်း အခြေခံလောက်သိထားမှပဲ ဖတ်ရတာ ပိုအဆင်ပြေနိုင်ပါတယ်။

Solidity ဆိုတာ Ethereum blockchain အတွက် Smart Contract တွေ ရေးသားဖို့ design လုပ်ထားတဲ့ programming language တစ်ခုဖြစ်ပါတယ်။ Object-oriented၊ statically-typed programming language တစ်ခုဖြစ်ပြီး JavaScript နဲ့ ဆင်တူတဲ့ syntax ကို သုံးထားပါတယ်။ Developer တွေအနေနဲ့ Solidity ကို သုံးပြီး token တွေ၊ DeFi protocol တွေ၊ NFT marketplace တွေလို complex smart contract တွေကို ရေးသားနိုင်ပါတယ်။

Solidity code တွေကို EVM မှာ run နိုင်ဖို့အတွက် bytecode အဖြစ် compile လုပ်ရပါတယ်။ Bytecode ဆိုတာ machine-level instruction တွေဖြစ်ပြီး EVM က နားလည်တဲ့ low-level language တစ်ခုပါ။ ဥပမာအားဖြင့် Solidity မှာ ရေးထားတဲ့ function တစ်ခုဟာ bytecode အဖြစ်ပြောင်းတဲ့အခါ opcode တွေအဖြစ် ပြောင်းသွားပါတယ်။ Opcode တွေဆိုတာ ADD (ပေါင်း)၊ SUB (နှုတ်)၊ PUSH (data ထည့်)၊ POP (data ထုတ်) စတဲ့ basic instruction တွေပါ။

EVM က stack-based virtual machine ဖြစ်တဲ့အတွက် bytecode instruction တွေက stack ပေါ်မှာ operate လုပ်ပါတယ်။ Stack ဆိုတာ Last-In-First-Out (LIFO) data structure တစ်ခုဖြစ်ပြီး data တွေကို ထပ်ဆင့်ထပ်ဆင့် သိမ်းဆည်းထားတာပါ။ ဥပမာ။ number နှစ်ခုကို ပေါင်းဖို့ဆိုရင် ပထမဆုံး PUSH instruction နဲ့ number နှစ်ခုကို stack ထဲထည့်၊ ပြီးရင် ADD instruction နဲ့ stack ထဲက number နှစ်ခုကို ပေါင်း၊ နောက်ဆုံး result ကို stack ထဲပြန်ထည့် ဆိုပြီး အဆင့်ဆင့် လုပ်ဆောင်ရပါတယ်။

Bytecode execution မှာ gas ဆိုတဲ့ unit နဲ့ computing resource တွေကို တိုင်းတာပါတယ်။ Opcode တစ်ခုချင်းစီမှာ gas cost ရှိပြီး ပိုရှုပ်ထွေးတဲ့ operation တွေလေ gas ပိုကုန်လေဖြစ်ပါတယ်။ ဥပမာ။ ADD operation က gas 3 units ကုန်ပြီး၊ SHA3 (cryptographic hash) operation က gas 30 units ကုန်ပါတယ်။ ဒါကြောင့် smart contract တွေရေးတဲ့အခါ gas ကုန်ကျစရိတ်အသက်သာဆုံးဖြစ်အောင် optimization လုပ်ဖို့ အရေးကြီးပါတယ်။

Smart contract တွေမှာ storage အပိုင်းကိုလည်း ထည့်သွင်းစဉ်းစားရပါတယ်။ EVM မှာ storage slot တွေရှိပြီး persistent data တွေကို သိမ်းဆည်းဖို့ သုံးပါတယ်။ Storage operation တွေက gas အကုန်ဆုံးဖြစ်ပါတယ်။ SSTORE (storage သိမ်းဆည်းခြင်း) က gas 20000 units ကုန်ပြီး SLOAD (storage ဖတ်ခြင်း) က gas 200 units ကုန်ပါတယ်။ ဒါကြောင့် storage optimization ကလည်း အရေးကြီးပါတယ်။

OPCode တခုချင်းစီအတွက် gas ကုန်ကျစရိတ်ကို https://www.evm.codes/ မှာ စစ်ဆေးဖတ်ရှုနိုင်ပါတယ်။

Solidity compiler က smart contract code ကို bytecode အဖြစ် compile လုပ်တဲ့အခါ ABI (Application Binary Interface) ကိုပါ ထုတ်ပေးပါတယ်။ ABI ဆိုတာ smart contract ရဲ့ function တွေ၊ parameter တွေနဲ့ return value တွေရဲ့ specification ပါ။ ပြင်ပ developer တွေက application တွေတည်ဆောက်ရင်းနှင့် smart contract နဲ့ interact လုပ်ချင်ရင် ABI ကို အသုံးပြုရပါတယ်။

Bytecode optimization နည်းလမ်းတွေထဲက assembly programming လည်းပါပါတယ်။ Solidity မှာ inline assembly ရေးလို့ရပြီး developer တွေအနေနဲ့ low-level operation တွေကို direct ထိန်းချုပ်နိုင်ပါတယ်။ ဒါပေမယ့် assembly က error-prone ဖြစ်တဲ့အတွက် အရမ်းလိုအပ်မှသာ သုံးသင့်ပါတယ်။

Smart contract security ကလည်း အရေးကြီးပါတယ်။ Bytecode level မှာ vulnerability တွေရှိနိုင်တဲ့အတွက် developer တွေအနေနဲ့ security best practices တွေကို လိုက်နာဖို့လိုပါတယ်။ Smart contract audit လုပ်တဲ့အခါ bytecode level အထိ စစ်ဆေးလေ့ရှိပါတယ်။ Decompiler tools တွေသုံးပြီး bytecode ကနေ source code ပြန်ထုတ်ကာ vulnerabilities တွေကို ရှာဖွေပါတယ်။

Solidity နဲ့ EVM bytecode ဟာ Ethereum smart contract development မှာ အရေးပါတဲ့ အစိတ်အပိုင်းတွေဖြစ်ပါတယ်။ Developer တွေအနေနဲ့ high-level Solidity ကော low-level bytecode ပိုင်းပါ နားလည်ထားမှ efficient ပြီး secure ဖြစ်တဲ့ smart contract တွေကို ရေးသားနိုင်မှာ ဖြစ်တယ်လို့ ပြောကြပေမယ့်လည်း လက်တွေ့မှာလည်း opensource solidity framework တွေပေါ်ထွက်နေပြီမို့ အဆင်သင့်ယူသုံးကြတာပဲ များပါတယ်။

ဒီဆောင်းပါမှာ EVM ရဲ့ နည်းပညာပိုင်းတွေကို အသေးစိတ်မဟုတ်သည့်တိုင်အောင် အနက်တစ်ခုလောက်ထိ နှိုက်နှိုက်ချွတ်ချွတ်ရေးခဲ့ပါတယ်။ ဒါပေမယ့် အပြည့်အစုံအတွက်ကိုတော့ https://ethereum.org/en/developers/docs/ မှာ ဝင်ဖတ်တာ အကောင်းဆုံးပါ။

လက်တွေ့လုပ်ငန်းတွေမှာတော့ ဒီအပိုင်းတွေသုံးရတာထက် solidity ကိုပဲ အဓိကထားသုံးကြတာဖြစ်လို့ ဒါတွေကို သိထားရင်တော့ ကိုယ်ရေးနေတဲ့ code က နောက်ကွယ်မှာ ဘာလို့ဘယ်လောက်ကုန်တာလဲဆိုတာသိရင် ပိုအဆင်ပြေတဲ့ code တွေ ရေးလာနိုင်မှာ ဖြစ်ပါတယ်။

Original Article – https://medium.com/@minsithu_53495/ethereum-virtual-machine-%E1%80%9B%E1%80%B2%E1%80%B7-%E1%80%94%E1%80%B1%E1%80%AC%E1%80%80%E1%80%BA%E1%80%80%E1%80%BD%E1%80%9A%E1%80%BA%E1%80%80-9e48643be232


Leave a Reply

Your email address will not be published. Required fields are marked *