အသုံသချခဌင်သမပဌုမီ စမတ်စာချုပ်၏လိပ်စာကို ဆုံသဖဌတ်နည်သ- crypto လဲလဟယ်မဟုအတလက် CREATE2 ကို အသုံသပဌုခဌင်သ။

blockchain ၏ခေါင်သစဉ်သည် hype အမျိုသအစာသအာသလုံသကိုသာမက နည်သပညာဆိုင်ရာရဟုထောင့်မဟ အလလန်အဖိုသတန်သော အတလေသအခေါ်မျာသ ၏ရင်သမဌစ်တစ်ခုအဖဌစ် ဘယ်တော့မဟမရပ်တန့်ပါ။ ထို့ကဌောင့် နေသာသောမဌို့သူမဌို့သာသမျာသကို မရဟောင်ကလင်သခဲ့ပါ။ လူမျာသသည် ရိုသရာအချက်အလက်လုံခဌုံရေသဆိုင်ရာ ၎င်သတို့၏ကျလမ်သကျင်မဟုမျာသကို blockchain စနစ်မျာသသို့ လလဟဲပဌောင်သရန် အနီသကပ်ကဌည့်ရဟုလေ့လာလျက် ရဟိသည်။ ယခုအချိန်အထိ၊ Rostelecom-Solar ၏ဖလံ့ဖဌိုသတိုသတက်မဟုမျာသထဲမဟတစ်ခုသည် blockchain-based software ၏လုံခဌုံရေသကိုစစ်ဆေသနိုင်သည်။ နဟင့်လမ်သတစ်လျဟောက်တလင် blockchain အသိုင်သအဝိုင်သ၏အသုံသချပဌဿနာမျာသကိုဖဌေရဟင်သရန်စိတ်ကူသအချို့ပေါ်လာသည်။ ကဘဝဟက်ကာမျာသထဲမဟတစ်ခု - CREATE2 ကိုအသုံသပဌုခဌင်သမပဌုမီ စမတ်စာချုပ်တစ်ခု၏လိပ်စာကို ဆုံသဖဌတ်နည်သ - ယနေ့ဖဌတ်ပိုင်သအောက်တလင် သင့်အာသ မျဟဝေလိုပါသည်။

အသုံသချခဌင်သမပဌုမီ စမတ်စာချုပ်၏လိပ်စာကို ဆုံသဖဌတ်နည်သ- crypto လဲလဟယ်မဟုအတလက် CREATE2 ကို အသုံသပဌုခဌင်သ။
CREATE2 opcode ကို ယခုနဟစ် ဖေဖော်ဝါရီလ 28 ရက်နေ့တလင် Constantinople hard fork တလင် ထည့်သလင်သခဲ့သည်။ EIP တလင်ဖော်ပဌထာသသည့်အတိုင်သ၊ က opcode ကို ပဌည်နယ်ချန်နယ်မျာသအတလက် အဓိကမိတ်ဆက်ပေသခဲ့သည်။ သို့သော်လည်သ မတူညီသောပဌဿနာတစ်ခုကို ဖဌေရဟင်သရန်အတလက် ၎င်သကို ကျလန်ုပ်တို့အသုံသပဌုခဲ့သည်။

လဲလဟယ်မဟုတလင် လက်ကျန်ငလေရဟိသည့် သုံသစလဲသူမျာသ ရဟိပါသည်။ မည်သူမဆို တိုကင်မျာသပေသပို့နိုင်သည့် Ethereum လိပ်စာတစ်ခုစီကို ကျလန်ုပ်တို့ ပေသဆောင်ရမည်ဖဌစ်ပဌီသ၊ ထို့ကဌောင့် ၎င်သတို့၏အကောင့်ကို ဖဌည့်ပေသရပါမည်။ ကလိပ်စာမျာသကို "ပိုက်ဆံအိတ်မျာသ" ဟုခေါ်ကဌပါစို့။ တိုကင်မျာသ ပိုက်ဆံအိတ်မျာသ ရောက်ရဟိလာသောအခါ၊ ၎င်သတို့ကို ပိုက်ဆံအိတ်တစ်ခုတည်သ (hotwallet) သို့ ပေသပို့ရပါမည်။

အောက်ဖော်ပဌပါ ကဏ္ဍမျာသတလင် CREATE2 မပါဘဲ ကပဌဿနာကို ဖဌေရဟင်သရန် ရလေသချယ်စရာမျာသကို ကျလန်ုပ် ပိုင်သခဌာသစိတ်ဖဌာပဌီသ ၎င်သတို့ကို အဘယ်ကဌောင့် စလန့်ပစ်ခဲ့သည်ကို ပဌောပဌပါ။ အကယ်၍ သင်သည် နောက်ဆုံသရလဒ်ကို စိတ်ဝင်စာသပါက၊ "နောက်ဆုံသဖဌေရဟင်သချက်" ကဏ္ဍတလင် ၎င်သကို သင်ရဟာဖလေနိုင်ပါသည်။

Ethereum လိပ်စာမျာသ

အရိုသရဟင်သဆုံသဖဌေရဟင်သချက်မဟာ သုံသစလဲသူအသစ်မျာသအတလက် Ethereum လိပ်စာအသစ်မျာသကို ထုတ်လုပ်ရန်ဖဌစ်သည်။ ကလိပ်စာမျာသသည် ပိုက်ဆံအိတ်မျာသ ဖဌစ်လိမ့်မည်။ တိုကင်မျာသကို ပိုက်ဆံအိတ်မဟ hotwallet သို့ လလဟဲပဌောင်သရန်၊ လုပ်ဆောင်ချက်ကိုခေါ်ဆိုခဌင်သဖဌင့် ငလေပေသငလေယူကို လက်မဟတ်ရေသထိုသရန် လိုအပ်ပါသည်။ လလဟဲပဌောင်သ() နောက်ကလယ်မဟ ပိုက်ဆံအိတ်၏ သီသသန့်သော့ဖဌင့်

ကချဉ်သကပ်မဟုတလင် အောက်ပါအာသသာချက်မျာသရဟိသည်။

  • ဒါကဌောင့်ကိုယ့်ရဲ့
  • တိုကင်မျာသကို ပိုက်ဆံအိတ်မဟ hotwallet သို့ လလဟဲပဌောင်သရာတလင် ကုန်ကျစရိတ်သည် လုပ်ဆောင်ချက်ခေါ်ဆိုမဟုတစ်ခု၏ ကုန်ကျစရိတ်နဟင့် ညီမျဟသည်။ လလဟဲပဌောင်သ()

သို့သော်၊ ၎င်သတလင် အဓိကအာသနည်သချက်တစ်ခုရဟိနေသောကဌောင့် ကချဉ်သကပ်နည်သကို ဆန့်ကျင်ရန် ဆုံသဖဌတ်ခဲ့သည်- သင်သည် ကိုယ်ရေသကိုယ်တာသော့မျာသကို တစ်နေရာတလင် သိမ်သဆည်သထာသရန် လိုအပ်ပါသည်။ ၎င်သတို့ ဆုံသရဟုံသနိုင်ရုံသာမက ကသော့မျာသသို့ ဝင်ရောက်ခလင့်ကိုလည်သ ဂရုတစိုက် စီမံခန့်ခလဲရန် လိုအပ်ပါသည်။ ၎င်သတို့ထဲမဟ အနည်သဆုံသတစ်ခုသည် အပေသအယူလုပ်ခံရပါက၊ သုံသစလဲသူတစ်ညသ၏ တိုကင်မျာသသည် hot wallet သို့ ရောက်ရဟိမည်မဟုတ်ပါ။

အသုံသချခဌင်သမပဌုမီ စမတ်စာချုပ်၏လိပ်စာကို ဆုံသဖဌတ်နည်သ- crypto လဲလဟယ်မဟုအတလက် CREATE2 ကို အသုံသပဌုခဌင်သ။

အသုံသပဌုသူတစ်ညသစီအတလက် သီသခဌာသစမတ်စာချုပ်တစ်ခု ဖန်တီသပါ။

သုံသစလဲသူတစ်ညသစီအတလက် သီသခဌာသစမတ်စာချုပ်ကို အသုံသချခဌင်သသည် ဆာဗာပေါ်တလင် ပိုက်ဆံအိတ်မျာသအတလက် သီသသန့်သော့မျာသကို သိမ်သဆည်သခဌင်သမဟ ရဟောင်ကဌဉ်နိုင်မည်ဖဌစ်သည်။ တိုကင်မျာသကို hotwallet သို့လလဟဲပဌောင်သရန် လဲလဟယ်သူက ကစမတ်စာချုပ်ကို ခေါ်ပါမည်။

စမတ်ကန်ထရိုက်ကို အသုံသမပဌုဘဲ အသုံသပဌုသူ၏ ပိုက်ဆံအိတ်လိပ်စာကို မပဌနိုင်သောကဌောင့် ကဖဌေရဟင်သချက်ကို ကျလန်ုပ်တို့ စလန့်လလဟတ်လိုက်သည် (၎င်သသည် အမဟန်တကယ် ဖဌစ်နိုင်သော်လည်သ ကနေရာတလင် ကျလန်ုပ်တို့ ဆလေသနလေသမည်မဟုတ်သော အခဌာသအာသနည်သချက်မျာသနဟင့် ရဟုပ်ထလေသသောနည်သလမ်သဖဌင့်)။ လဲလဟယ်မဟုတလင်၊ အသုံသပဌုသူတစ်ညသသည် မိမိလိုအပ်သလောက် အကောင့်မျာသစလာကို ဖန်တီသနိုင်ပဌီသ တစ်ညသစီသည် ၎င်သ၏ကိုယ်ပိုင်ပိုက်ဆံအိတ် လိုအပ်သည်။ ဆိုလိုသည်မဟာ အသုံသပဌုသူသည် ကအကောင့်ကို အသုံသပဌုမည်ကို သေချာမသိဘဲ စာချုပ်တစ်ခုအသုံသပဌုရန် ငလေသုံသစလဲရန် လိုအပ်ပါသည်။

Opcode CREATE2

ယခင်နည်သလမ်သ၏ပဌဿနာကိုဖဌေရဟင်သရန် CREATE2 opcode ကိုအသုံသပဌုရန်ဆုံသဖဌတ်ခဲ့သည်။ CREATE2 သည် သင့်အာသ စမတ်စာချုပ်ကို အသုံသပဌုမည့်လိပ်စာကို ကဌိုတင်သတ်မဟတ်နိုင်စေပါသည်။ လိပ်စာကို အောက်ပါဖော်မဌူလာဖဌင့် တလက်ချက်သည်-

keccak256 (0xff ++ address ++ salt ++ keccak256 (init_code)) [12:]


အဘယ်မဟာ:

  • လိပ်စာ - CREATE2 ကိုခေါ်ဆိုမည့် စမတ်စာချုပ်၏လိပ်စာ
  • ဆာသငန် - ကျပန်သတန်ဖိုသ
  • init_ကုဒ် - ဖဌန့်ကျက်ခဌင်သအတလက် စမတ်စာချုပ် ဘိုက်ကုဒ်

၎င်သသည် အသုံသပဌုသူအာသ ကျလန်ုပ်တို့ပေသဆောင်သည့် လိပ်စာတလင် လိုချင်သော bytecode ပါ၀င်ကဌောင်သ သေချာစေပါသည်။ ထို့အပဌင်၊ ကစမတ်စာချုပ်ကို ကျလန်ုပ်တို့ လိုအပ်သည့်အခါတိုင်သ အသုံသချနိုင်သည်။ ဥပမာအာသဖဌင့်၊ အသုံသပဌုသူတစ်ညသသည် ၎င်သတို့၏ပိုက်ဆံအိတ်ကို ပထမဆုံသအကဌိမ်အသုံသပဌုရန် ဆုံသဖဌတ်သောအခါ။
အသုံသချခဌင်သမပဌုမီ စမတ်စာချုပ်၏လိပ်စာကို ဆုံသဖဌတ်နည်သ- crypto လဲလဟယ်မဟုအတလက် CREATE2 ကို အသုံသပဌုခဌင်သ။
ထို့အပဌင်၊ အကဌောင်သမဟာ ၎င်သကို သိမ်သဆည်သမည့်အစာသ စမတ်စာချုပ်လိပ်စာကို အချိန်တိုင်သ တလက်ချက်နိုင်သည်-

  • လိပ်စာ ဖော်မဌူလာထဲတလင် ကအရာသည် ကျလန်ုပ်တို့၏ ပိုက်ဆံအိတ်စက်ရုံ၏လိပ်စာဖဌစ်သောကဌောင့် ကိန်သသေဖဌစ်ပါသည်။
  • ဆာသငန် — user_id hash
  • init_ကုဒ် ကျလန်ုပ်တို့သည် တူညီသော ပိုက်ဆံအိတ်ကို အသုံသပဌုသောကဌောင့် အမဌဲမပဌတ်ရဟိနေပါသည်။

ပိုမိုတိုသတက်မဟုမျာသ

ယခင်ဖဌေရဟင်သချက်တလင် အာသနည်သချက်တစ်ခုရဟိနေသေသသည်- စမတ်စာချုပ်ကို အသုံသပဌုရန် သင်ပေသချေရန် လိုအပ်ပါသည်။ သို့သော် သင်သည် ၎င်သကို ဖယ်ရဟာသနိုင်သည်။ ဒီလိုလုပ်ဖို့ သင် function ကိုခေါ်နိုင်ပါတယ်။ လလဟဲပဌောင်သ(), ပဌီသတော့ selfdestruct() wallet constructor ထဲမဟာ။ ထို့နောက် စမတ်ကန်ထရိုက်ကို တပ်ဖဌန့်ခဌင်သအတလက် ဓာတ်ငလေ့ကို ပဌန်လည်ပေသအပ်မည်ဖဌစ်သည်။

လူကဌိုက်မျာသသောယုံကဌည်ချက်နဟင့်ဆန့်ကျင်ဘက်၊ သင်သည် CREATE2 opcode ဖဌင့် တူညီသောလိပ်စာသို့ စမတ်ကျသောစာချုပ်ကို အကဌိမ်မျာသစလာ အသုံသချနိုင်သည်။ အဘယ်ကဌောင့်ဆိုသော် CREATE2 သည် ပစ်မဟတ်လိပ်စာ၏ နံပါတ်သည် သုညဖဌစ်သည် (၎င်သကို တည်ဆောက်သူ၏အစတလင် တန်ဖိုသ "1" သတ်မဟတ်ပေသသည်) ကိုစစ်ဆေသသောကဌောင့်ဖဌစ်သည်။ ကကိစ္စတလင်ခုနဟစ်, function ကို selfdestruct() nonce လိပ်စာမျာသကို အချိန်တိုင်သ ပဌန်လည်သတ်မဟတ်ပါ။ ထို့ကဌောင့် သင်သည် CREATE2 ကို တူညီသောအကဌောင်သပဌချက်မျာသဖဌင့် ထပ်မံခေါ်ဆိုပါက၊ nonce check သည် ကျော်သလာသမည်ဖဌစ်သည်။

ကဖဌေရဟင်သချက်သည် Ethereum လိပ်စာရလေသချယ်မဟုနဟင့် ဆင်တူသော်လည်သ သီသသန့်သော့မျာသကို သိမ်သဆည်သရန်မလိုအပ်ဘဲ ကျေသဇူသပဌု၍ သတိပဌုပါ။ ပိုက်ဆံအိတ်မဟ hotwallet သို့ ငလေလလဟဲရာတလင် ကုန်ကျစရိတ်သည် လုပ်ဆောင်ချက်တစ်ခုကို ခေါ်ဆိုသည့် ကုန်ကျစရိတ်နဟင့် ခန့်မဟန်သခဌေ ညီမျဟသည်။ လလဟဲပဌောင်သ()စမတ်ကန်ထရိုက်ဖဌန့်ကျက်မဟုအတလက် ကျလန်ုပ်တို့ မပေသသောကဌောင့်၊

နောက်ဆုံသဆုံသဖဌတ်ချက်

အသုံသချခဌင်သမပဌုမီ စမတ်စာချုပ်၏လိပ်စာကို ဆုံသဖဌတ်နည်သ- crypto လဲလဟယ်မဟုအတလက် CREATE2 ကို အသုံသပဌုခဌင်သ။

မူလပဌင်ဆင်သည်-

  • ဆာသရယူရန် လုပ်ဆောင်ချက် သုံသစလဲသူအိုင်ဒီ
  • သင့်လျော်သောဆာသ (ဆိုလိုသည်မဟာ ပိုက်ဆံအိတ်စက်ရုံ) ဖဌင့် CREATE2 opcode ကိုခေါ်ဆိုမည့် စမတ်ကျသောစာချုပ်။
  • အောက်ပါ constructor နဟင့် စာချုပ်နဟင့် သက်ဆိုင်သော wallet bytecode

constructor () {
    address hotWallet = 0x
;
    address token = 0x
;
    token.transfer (hotWallet, token.balanceOf (address (this)));
    selfdestruct (address (0));
}


အသုံသပဌုသူအသစ်တိုင်သအတလက် ကျလန်ုပ်တို့သည် ၎င်သ၏ပိုက်ဆံအိတ်လိပ်စာကို တလက်ချက်ခဌင်သဖဌင့် ပဌသပါသည်။

keccak256 (0xff ++ address ++ salt ++ keccak256 (init_code)) [12:]


အသုံသပဌုသူတစ်ညသမဟ တိုကင်မျာသကို သက်ဆိုင်ရာ ပိုက်ဆံအိတ်လိပ်စာသို့ လလဟဲပဌောင်သသည့်အခါ၊ ကျလန်ုပ်တို့၏ နောက်ခံဖိုင်သည် ကန့်သတ်ချက်ပါရာမီတာဖဌင့် လလဟဲပဌောင်သခဌင်သကိစ္စရပ်ကို တလေ့ရသည် _သို့ပိုက်ဆံအိတ်လိပ်စာနဟင့် ညီသည်။ ကအချိန်တလင်၊ ပိုက်ဆံအိတ်ကို အသုံသမပဌုမီ လဲလဟယ်မဟုတလင် အသုံသပဌုသူ၏ လက်ကျန်ငလေကို တိုသမဌဟင့်နိုင်နေပဌီဖဌစ်သည်။

ပိုက်ဆံအိတ်လိပ်စာတစ်ခုသည် လုံလောက်သော တိုကင်နံပါတ်မျာသကို စုဆောင်သသောအခါ၊ ၎င်သတို့အာသလုံသကို hotwallet သို့ တစ်ကဌိမ်တည်သ လလဟဲပဌောင်သနိုင်ပါသည်။ ၎င်သကိုလုပ်ဆောင်ရန်၊ နောက်ကလယ်မဟသည် အောက်ဖော်ပဌပါ လုပ်ဆောင်ချက်မျာသကို လုပ်ဆောင်ပေသသည့် စမတ်စာချုပ်စက်ရုံလုပ်ဆောင်ချက်ကို ခေါ်သည်-

function deployWallet (сПль uint256) {
    bytes memory walletBytecode =
;
    // invoke CREATE2 with wallet bytecode and salt
}


ထို့ကဌောင့်၊ wallet smart contract constructor ဟုခေါ်သည်၊ ၎င်သသည် ၎င်သ၏တိုကင်မျာသအာသလုံသကို hotwallet လိပ်စာသို့ လလဟဲပဌောင်သပဌီသနောက် ကိုယ်တိုင်ဖျက်စီသသလာသပါသည်။

ကုဒ်အပဌည့်အစုံကို တလေ့နိုင်သည်။ ဒီမဟာ. ပိုက်ဆံအိတ် bytecode ကို အကောင်သဆုံသဖဌစ်အောင်လုပ်ပဌီသ opcodes နဲ့ရေသထာသတာကဌောင့် ဒါဟာ ကျလန်ုပ်တို့ရဲ့ ထုတ်လုပ်မဟုကုဒ်မဟုတ်ကဌောင်သ ကျေသဇူသပဌု၍ သတိပဌုပါ။

စာရေသဆရာ Pavel Kondratenkov၊ Ethereum ကျလမ်သကျင်သူ

source: www.habr.com

မဟတ်ချက် Add