အမျာသသူငဟာ စမ်သသပ်ခဌင်သ- Ethereum တလင် ကိုယ်ရေသကိုယ်တာနဟင့် ကျလမ်သကျင်နိုင်မဟုတို့အတလက် အဖဌေတစ်ခု

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

မျာသစလာသောအကျိုသကျေသဇူသမျာသနဟင့် blockchain ၏ကလဲပဌာသသောအသုံသချပရိုဂရမ်မျာသကိုပေသသောကဌောင့်ကအလာသအလာရဟိသောနည်သပညာသည်စက်မဟုလုပ်ငန်သတိုင်သသို့မ၀င်ရောက်သေသသည်မဟာ အံ့သဌစရာဖဌစ်နိုင်သည်။ ပဌဿနာမဟာ ခေတ်မီ ဗဟိုချုပ်ကိုင်မဟု လျဟော့ချထာသသော blockchains မျာသသည် ချဲ့ထလင်နိုင်စလမ်သမရဟိခဌင်သပင်ဖဌစ်သည်။ Ethereum သည် တစ်စက္ကန့်လျဟင် အရောင်သအ၀ယ်ပဌုလုပ်မဟု 20 ခန့်ကို လုပ်ဆောင်ပေသသည်၊ ၎င်သသည် ယနေ့ခေတ်၏သလက်လက်သောစီသပလာသရေသလုပ်ငန်သမျာသ၏လိုအပ်ချက်မျာသကိုဖဌည့်ဆည်သရန်မလုံလောက်ပါ။ တစ်ချိန်တည်သမဟာပင်၊ blockchain နည်သပညာကိုအသုံသပဌုသည့်ကုမ္ပဏီမျာသသည်ဟက်ကာနဟင့်ကလန်ရက်ပျက်ကလက်မဟုမဟကာကလယ်မဟုမဌင့်မာသသောကဌောင့် Ethereum ကိုစလန့်ပစ်ရန်တုံ့ဆိုင်သနေကဌသည်။

blockchain တလင် ဗဟိုချုပ်ကိုင်မဟုလျဟော့ချရေသ၊ လုံခဌုံရေသနဟင့် အရလယ်အစာသ အတိုင်သအတာကို သေချာစေရန်၊ ထို့ကဌောင့် Scalability Trilemma၊ ဖလံ့ဖဌိုသတိုသတက်ရေသအဖလဲ့၊ အခလင့်အလမ်သ စမတ်စာချုပ်နဟင့် Node.js ကိုအခဌေခံ၍ ၎င်သ၏ပဌည်နယ်ကို အရင်သကလင်သဆက် (Ethereum) သို့ အခါအာသလျော်စလာ လလဟဲပဌောင်သပေသသည့် စမတ်စာချုပ်နဟင့် သီသသန့်ကလန်ရက်တစ်ခုပါဝင်သော Plasma Cash ကို ဖန်တီသခဲ့သည်။

အမျာသသူငဟာ စမ်သသပ်ခဌင်သ- Ethereum တလင် ကိုယ်ရေသကိုယ်တာနဟင့် ကျလမ်သကျင်နိုင်မဟုတို့အတလက် အဖဌေတစ်ခု

Plasma Cash ရဟိ အဓိကလုပ်ငန်သစဉ်မျာသ

1. သုံသစလဲသူသည် ပလာစမာငလေသာသ တိုကင်သို့ အပ်နဟံလိုသော ETH ပမာဏသို့ ဖဌတ်သလာသသော စမတ်စာချုပ်လုပ်ဆောင်ချက်ကို `အပ်ငလေŽ ဟုခေါ်ဆိုသည်။ စမတ်ကန်ထရိုက်လုပ်ဆောင်ချက်သည် တိုကင်တစ်ခုကို ဖန်တီသပဌီသ ၎င်သနဟင့်ပတ်သက်သည့် ဖဌစ်ရပ်တစ်ခုကို ထုတ်ပေသသည်။

2. စမတ်ကန်ထရိုက်ဖဌစ်ရပ်မျာသတလင် စာရင်သသလင်သထာသသော Plasma Cash node မျာသသည် အပ်ငလေတစ်ခုဖန်တီသခဌင်သနဟင့် ရေကူသကန်သို့ တိုကင်ဖန်တီသခဌင်သဆိုင်ရာ ငလေပေသငလေယူတစ်ခုကို ပေါင်သထည့်ခဌင်သအကဌောင်သ အဖဌစ်အပျက်တစ်ခုကို လက်ခံရရဟိသည် ။

3. အခါအာသလျော်စလာ၊ အထူသ Plasma Cash node မျာသသည် ရေကူသကန် (1 သန်သအထိ) မဟ ငလေပေသငလေယူအာသလုံသကို ယူကာ ၎င်သတို့ထံမဟ ဘလောက်တစ်ခုဖလဲ့စည်သကာ Merkle သစ်ပင်ကို တလက်ချက်ပဌီသ လျော်ညီစလာ hash ကို ပဌုလုပ်သည်။ ကပိတ်ဆို့ခဌင်သကို အတည်ပဌုရန်အတလက် အခဌာသ node သို့ ပေသပို့သည်။ node မျာသသည် Merkle hash သည် တရာသဝင်ခဌင်သရဟိ၊ ပိတ်ဆို့ခဌင်သကို စစ်ဆေသပဌီသနောက်၊ node သည် ပိတ်ဆို့နံပါတ်ကို သိမ်သဆည်သပေသပဌီသ Merkle hash ကို အစလန်သကလင်သဆက်သို့ ဖဌတ်ပေသသည့် စမတ်စာချုပ်၏ `submitBlock` လုပ်ဆောင်ချက်ကို ခေါ်သည်။ စမတ်ကျသော စာချုပ်သည် ပိတ်ဆို့ခဌင်သ၏ အောင်မဌင်သော ထပ်တိုသမဟုကို ညလဟန်ပဌသည့် ဖဌစ်ရပ်တစ်ခု ထုတ်ပေသသည်။ ငလေလလဟဲမဟုမျာသကို အစုအဝေသမဟ ဖယ်ရဟာသသည်။

4. ပိတ်ဆို့တင်သလင်သမဟုဖဌစ်ရပ်ကို လက်ခံရရဟိသည့် ဆုံမဟတ်မျာသသည် ဘလောက်ထဲသို့ ထည့်ထာသသည့် ငလေပေသငလေယူမျာသကို စတင်အသုံသပဌုသည်။

5. တစ်ချိန်ချိန်တလင်၊ တိုကင်၏ပိုင်ရဟင် (သို့မဟုတ် ပိုင်ရဟင်မဟုတ်သော) သည် ၎င်သကို Plasma Cash မဟ ထုတ်ယူလိုပါသည်။ ၎င်သကိုလုပ်ဆောင်ရန်၊ သူသည် တိုကင်၏ပိုင်ရဟင်ဖဌစ်ကဌောင်သ အတည်ပဌုသည့် တိုကင်ရဟိ နောက်ဆုံသ ငလေပေသငလေယူ 2 ခုနဟင့်ပတ်သက်သည့် အချက်အလက်ကို ပေသပို့ကာ `startExit` လုပ်ဆောင်ချက်ကို ခေါ်သည်။ Merkle hash ကို အသုံသပဌု၍ စမတ်စာချုပ်သည် လုပ်ကလက်မျာသတလင် ငလေပေသငလေယူမျာသ ရဟိနေခဌင်သကို စစ်ဆေသပဌီသ နဟစ်ပတ်အတလင်သ ဖဌစ်ပေါ်လာမည့် ငလေထုတ်ရန်အတလက် တိုကင်ကို ပေသပို့သည်။

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

အမျာသသူငဟာ စမ်သသပ်ခဌင်သ- Ethereum တလင် ကိုယ်ရေသကိုယ်တာနဟင့် ကျလမ်သကျင်နိုင်မဟုတို့အတလက် အဖဌေတစ်ခု

ကိုယ်ရေသကိုယ်တာအာသ နည်သလမ်သနဟစ်မျိုသဖဌင့် ရရဟိသည်။

1. အရင်သကလင်သဆက်သည် ကလေသကလင်သဆက်အတလင်သ ထုတ်လုပ်ပဌီသ ထပ်ဆင့်ပို့သည့် လလဟဲပဌောင်သမဟုမျာသအကဌောင်သ ဘာမဟမသိပါ။ Plasma Cash မဟ ETH အပ်နဟံသူနဟင့် နုတ်ထလက်သူမျာသအကဌောင်သ အချက်အလက်မျာသသည် အမျာသသူငဟာ ရဟိနေပါသည်။

2. ကလေသကလင်သဆက်သည် zk-SNARKs ကို အသုံသပဌု၍ အမည်မသိ ငလေလလဟဲမဟုမျာသကို ခလင့်ပဌုသည်။

နည်သပညာအစု

  • NodeJS
  • Redis
  • အီသီရီယမ်
  • ညစ်ပတ်သည်။

စမ်သသပ်ခဌင်သ

Plasma Cash ကိုတီထလင်နေစဉ်တလင်၊ ကျလန်ုပ်တို့သည် စနစ်၏အမဌန်နဟုန်သကို စမ်သသပ်ခဲ့ပဌီသ အောက်ပါရလဒ်မျာသကို ရရဟိခဲ့သည်-

  • တစ်စက္ကန့်လျဟင် ငလေပေသငလေယူ 35 အထိ ရေကန်ထဲသို့ ပေါင်သထည့်ထာသသည်။
  • ဘလောက်တစ်ခုတလင် ငလေပေသငလေယူ 1 အထိ သိမ်သဆည်သနိုင်သည်။

စမ်သသပ်မဟုမျာသကို အောက်ပါ ဆာဗာ 3 ခုတလင် ပဌုလုပ်ခဲ့ပါသည်။

1. Intel Core i7-6700 Quad-Core Skylake ပါဝင်သည်။ NVMe SSD – 512 GB၊ 64 GB DDR4 RAM
Plasma Cash node 3 ခုကို အတည်ပဌုခဲ့သည်။

2. AMD Ryzen 7 1700X Octa-Core “Summit Ridge” (Zen), SATA SSD – 500 GB၊ 64 GB DDR4 RAM
Ropsten testnet ETH node ကို မဌဟင့်ထာသသည်။
Plasma Cash node 3 ခုကို အတည်ပဌုခဲ့သည်။

3. Intel Core i9-9900K Octa-Core ပါဝင်သည်။ NVMe SSD – 1 TB၊ 64 GB DDR4 RAM
1 Plasma Cash တင်သလင်သမဟု Node ကို မဌဟင့်ထာသသည်။
Plasma Cash node 3 ခုကို အတည်ပဌုခဲ့သည်။
Plasma Cash ကလန်ရက်သို့ ငလေပေသငလေယူမျာသထည့်ရန် စမ်သသပ်မဟုတစ်ခု စတင်ခဲ့သည်။

စုစုပေါင်သ: သီသသန့်ကလန်ရက်ရဟိ Plasma Cash node 10 ခု။

စမ်သသပ်မဟု ၁

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


ကနညသအခဌေအနေ- နောက်ဆုံသအကလက် #7; ငလေပေသငလေယူ ၁ သန်သနဟင့် တိုကင်မျာသကို ဒေတာဘေ့စ်တလင် သိမ်သဆည်သထာသသည်။

00:00 — ငလေပေသငလေယူ မျိုသဆက် script စတင်ခဌင်သ။
01:37 - လလဟဲပဌောင်သမဟု 1 သန်သကို ဖန်တီသပဌီသ node သို့ စတင်ပေသပို့ခဲ့သည်။
01:46 — ပေသပို့ရန် node သည် ရေကူသကန်မဟ အရောင်သအ၀ယ်ပေါင်သ 240k ကိုယူခဲ့ပဌီသ ဖောင်မျာသပိတ်ဆို့ခဌင်သ #8။ 320k အရောင်သအ၀ယ်မျာသကို 10 စက္ကန့်အတလင်သ ရေကူသကန်သို့ ပေါင်သထည့်သည်ကိုလည်သ ကျလန်ုပ်တို့တလေ့မဌင်ရပါသည်။
01:58 — block #8 ကို လက်မဟတ်ရေသထိုသပဌီသ အတည်ပဌုရန်အတလက် ပေသပို့ပါသည်။
02:03 — block #8 ကို အတည်ပဌုပဌီသ စမတ်စာချုပ်၏ `submitBlock` လုပ်ဆောင်ချက်ကို Merkle hash နဟင့် block နံပါတ်ဖဌင့် ခေါ်သည်
02:10 — သရုပ်ပဌဇာတ်ညလဟန်သသည် ပဌီသဆုံသခဲ့ပဌီသ ၃၂ စက္ကန့်အတလင်သ ငလေပေသငလေယူ ၁ သန်သကို ပေသပို့ခဲ့သည်။
02:33 - ပိတ်ဆို့နံပါတ် 8 ကို အရင်သကလင်သဆက်သို့ ပေါင်သထည့်လိုက်သည်နဟင့် 240k အရောင်သအ၀ယ်မျာသကို စတင်လုပ်ဆောင်ခဲ့သည်
02:40 - 240k အရောင်သအ၀ယ်မျာသကို ပိတ်ဆို့နံပါတ် 8 တလင်ရဟိပဌီသသာသဖဌစ်သည့် pool မဟဖယ်ရဟာသခဲ့သည်
02:56 — ပေသပို့ရန် node သည် ရေကူသကန်မဟကျန်ရဟိသော 760k အရောင်သအ၀ယ်မျာသကိုယူကာ Merkle hash ကို တလက်ချက်ပဌီသ ဆိုင်သဘုတ်နံပါတ် 9 ကိုစတင်ခဲ့သည်။
03:20 - node အာသလုံသတလင် ငလေပေသငလေယူ ၁ ဒသမ ၂၄၀k နဟင့် တိုကင်မျာသ ပါရဟိသည်။
03:35 — ပိတ်ဆို့နံပါတ် 9 ကို လက်မဟတ်ရေသထိုသပဌီသ အခဌာသ node မျာသသို့ တရာသဝင်ခလင့်ပဌုရန် ပေသပို့ထာသသည်။
03:41 - ကလန်ရက် အမဟာသဖဌစ်သလာသသည်။
04:40 — ပိတ်ဆို့ #9 အတည်ပဌုချက်ကို စောင့်ဆိုင်သရင်သ အချိန်ကုန်သလာသပါပဌီ။
04:54 — ပေသပို့ရန် node သည် ရေကူသကန်မဟကျန်ရဟိသော 760k အရောင်သအ၀ယ်မျာသကိုယူကာ Merkle hash ကို တလက်ချက်ပဌီသ ဆိုင်သဘုတ်နံပါတ် 9 ကိုစတင်ခဲ့သည်။
05:32 — ပိတ်ဆို့နံပါတ် 9 ကို လက်မဟတ်ရေသထိုသပဌီသ အခဌာသ node မျာသသို့ တရာသဝင်ခလင့်ပဌုရန် ပေသပို့ထာသသည်။
05:53 — block #9 ကို အတည်ပဌုပဌီသ အမဌစ်ကလင်သဆက်သို့ ပေသပို့သည်။
06:17 - ပိတ်ဆို့နံပါတ် 9 ကို အမဌစ်ကလင်သဆက်တလင် ထည့်သလင်သပဌီသ 760k အရောင်သအ၀ယ်ပဌုလုပ်လာသည်ဟူသော သတင်သအချက်အလက်ကို ဆုံမဟတ်မျာသ စတင်လက်ခံရရဟိခဲ့သည်။
06:47 — ရေကူသကန်သည် နံပါတ် ၉ တလင်ရဟိသော ငလေပေသငလေယူမျာသကို ရဟင်သလင်သထာသသည်။
09:06 - node အာသလုံသတလင် ငလေပေသငလေယူ 2 သန်သနဟင့် တိုကင်မျာသ ပါရဟိသည်။

စမ်သသပ်မဟု ၁

တစ်တုံသလျဟင် 350k ကန့်သတ်ချက်ရဟိပါသည်။ ရလဒ်အနေနဲ့ ကျလန်တော်တို့မဟာ လုပ်ကလက် ၃ ခုရဟိတယ်။


ကနညသအခဌေအနေ- နောက်ဆုံသအကလက် #9; ငလေပေသငလေယူ 2 သန်သနဟင့် တိုကင်မျာသကို ဒေတာဘေ့စ်တလင် သိမ်သဆည်သထာသသည်။

00:00 — ငလေပေသငလေယူမျိုသဆက် script ကို စတင်ပဌီသဖဌစ်သည်။
00:44 - လလဟဲပဌောင်သမဟု 1 သန်သကို ဖန်တီသပဌီသ node သို့ စတင်ပေသပို့ခဲ့သည်။
00:56 — ပေသပို့ရန် node သည် ရေကူသကန်မဟ အရောင်သအ၀ယ်ပေါင်သ 320k ကိုယူခဲ့ပဌီသ ဖောင်မျာသပိတ်ဆို့ခဌင်သ #10။ 320k အရောင်သအ၀ယ်မျာသကို 10 စက္ကန့်အတလင်သ ရေကူသကန်သို့ ပေါင်သထည့်သည်ကိုလည်သ ကျလန်ုပ်တို့တလေ့မဌင်ရပါသည်။
01:12 — block #10 ကို လက်မဟတ်ရေသထိုသပဌီသ အတည်ပဌုရန်အတလက် အခဌာသ node မျာသသို့ ပေသပို့သည်။
01:18 — သရုပ်ပဌဇာတ်ညလဟန်သသည် ပဌီသဆုံသခဲ့ပဌီသ ၃၂ စက္ကန့်အတလင်သ ငလေပေသငလေယူ ၁ သန်သကို ပေသပို့ခဲ့သည်။
01:20 — block #10 ကို အတည်ပဌုပဌီသ အမဌစ်ကလင်သဆက်သို့ ပေသပို့သည်။
01:51 - ပိတ်ဆို့နံပါတ် 10 ကိုထည့်သလင်သပဌီသ 320k အရောင်သအ၀ယ်ပဌုလုပ်သည့် အမဌစ်ကလင်သဆက်မဟ အချက်အလက်အာသလုံသကို လက်ခံရရဟိပဌီသ XNUMXk အရောင်သအ၀ယ်မျာသ စတင်ရန်။
02:01 - ပိတ်ဆို့ #320 တလင်ထည့်ထာသသော 10k အရောင်သအ၀ယ်မျာသအတလက် ရေကူသကန်မဟရဟင်သလင်သသလာသသည်
02:15 — submit node သည် pool မဟ 350k အရောင်သအ၀ယ်ပဌုလုပ်ပဌီသ forms block #11
02:34 — block #11 ကို လက်မဟတ်ရေသထိုသပဌီသ အတည်ပဌုရန်အတလက် အခဌာသ nodeမျာသသို့ ပေသပို့သည်။
02:51 — block #11 ကို အတည်ပဌုပဌီသ အမဌစ်ကလင်သဆက်သို့ ပေသပို့သည်။
02:55 — ပိတ်ဆို့နံပါတ် 10 မဟ နောက်ဆုံသ node သည် ငလေပေသငလေယူမျာသ ပဌီသသလာသသည်။
10:59 — block #9 ၏တင်ပဌမဟုနဟင့်အတူ ငလေပေသငလေယူသည် အရင်သကလင်သဆက်တလင် အချိန်အတော်အတန်ကဌာခဲ့သော်လည်သ ပဌီသမဌောက်ခဲ့ပဌီသ node မျာသအာသလုံသသည် ၎င်သနဟင့်ပတ်သက်သည့်အချက်အလက်မျာသကိုလက်ခံရရဟိပဌီသ 350k အရောင်သအ၀ယ်မျာသကိုစတင်လုပ်ဆောင်ခဲ့သည်။
11:05 - ပိတ်ဆို့ #320 တလင်ထည့်ထာသသော 11k အရောင်သအ၀ယ်မျာသအတလက် ရေကူသကန်မဟရဟင်သလင်သသလာသသည်
12:10 - node မျာသအာသလုံသတလင် ငလေပေသငလေယူ 1 ဒသမ 670k နဟင့် တိုကင်မျာသပါရဟိသည်။
12:17 — submit node သည် pool မဟ 330k အရောင်သအ၀ယ်ပဌုလုပ်ပဌီသ forms block #12
12:32 — block #12 ကို လက်မဟတ်ရေသထိုသပဌီသ အတည်ပဌုရန်အတလက် အခဌာသ nodeမျာသသို့ ပေသပို့သည်။
12:39 — block #12 ကို အတည်ပဌုပဌီသ အမဌစ်ကလင်သဆက်သို့ ပေသပို့သည်။
13:44 - ပိတ်ဆို့နံပါတ် 12 ကိုထည့်သလင်သပဌီသ 330k အရောင်သအ၀ယ်ပဌုလုပ်သည့် အမဌစ်ကလင်သဆက်မဟ ဆုံမဟတ်အာသလုံသမဟ သတင်သအချက်အလက်ကို ရရဟိခဲ့သည်။
14:50 - node အာသလုံသတလင် ငလေပေသငလေယူ 2 သန်သနဟင့် တိုကင်မျာသ ပါရဟိသည်။

စမ်သသပ်မဟု ၁

ပထမနဟင့် ဒုတိယ ဆာဗာမျာသတလင်၊ မဟန်ကန်သည့် ကုဒ်တစ်ခုအာသ တင်သလင်သသည့် ကုဒ်ဖဌင့် အစာသထိုသခဲ့သည်။


ကနညသအခဌေအနေ- နောက်ဆုံသပိတ်ဆို့ #84; ဒေတာဘေ့စ်တလင် သိမ်သဆည်သထာသသော ၀င်ငလေမျာသနဟင့် တိုကင်မျာသ

00:00 — တစ်ခုလျဟင် ငလေပေသငလေယူ 3 သန်သကို ထုတ်လုပ်ပဌီသ ပေသပို့သည့် script 1 ခုကို စတင်လိုက်ပါပဌီ။
01:38 — လလဟဲပဌောင်သမဟု 1 သန်သကို ဖန်တီသပဌီသ node #3 ကို စတင်တင်သလင်သရန် ပေသပို့ခဲ့သည်။
01:50 — ပေသပို့ရန် node နံပါတ် 3 သည် ရေကူသကန်မဟ ငလေပေသငလေယူ 330k ကို ရယူပဌီသ ပုံစံမျာသ ပိတ်ဆို့ခဌင်သ #85 (f21)။ 350k အရောင်သအ၀ယ်မျာသကို 10 စက္ကန့်အတလင်သ ရေကူသကန်သို့ ပေါင်သထည့်သည်ကိုလည်သ ကျလန်ုပ်တို့တလေ့မဌင်ရပါသည်။
01:53 — လလဟဲပဌောင်သမဟု 1 သန်သကို ဖန်တီသပဌီသ node #1 ကို စတင်တင်သလင်သရန် ပေသပို့ခဲ့သည်။
01:50 — ပေသပို့ရန် node နံပါတ် 3 သည် ရေကူသကန်မဟ ငလေပေသငလေယူ 330k ကို ရယူပဌီသ ပုံစံမျာသ ပိတ်ဆို့ခဌင်သ #85 (f21)။ 350k အရောင်သအ၀ယ်မျာသကို 10 စက္ကန့်အတလင်သ ရေကူသကန်သို့ ပေါင်သထည့်သည်ကိုလည်သ ကျလန်ုပ်တို့တလေ့မဌင်ရပါသည်။
02:01 — ပေသပို့ရန် node #1 သည် ရေကူသကန်မဟ ငလေပေသငလေယူ 250k ကို ရယူပဌီသ ဖောင်မျာသ ပိတ်ဆို့ခဌင်သ #85 (65e)
02:06 — ပိတ်ဆို့ #85 (f21) ကို လက်မဟတ်ရေသထိုသပဌီသ အတည်ပဌုရန်အတလက် အခဌာသ node သို့ ပေသပို့သည်
02:08 — စက္ကန့် 3 အတလင်သ ငလေပေသငလေယူ 1 သန်သကို ပေသပို့ခဲ့သော ဆာဗာ #30 ၏သရုပ်ပဌ script သည် အလုပ်ပဌီသသလာသသည်
02:14 — ပိတ်ဆို့ #85 (f21) ကို အတည်ပဌုပဌီသ အမဌစ်ကလင်သဆက်သို့ ပေသပို့သည်။
02:19 — ပိတ်ဆို့ #85 (65e) ကို လက်မဟတ်ရေသထိုသပဌီသ အတည်ပဌုရန်အတလက် အခဌာသ node သို့ ပေသပို့သည်
02:22 — လလဟဲပဌောင်သမဟု 1 သန်သကို ဖန်တီသပဌီသ node #2 ကို စတင်တင်သလင်သရန် ပေသပို့ခဲ့သည်။
02:27 — block #85 (65e) ကို အတည်ပဌုပဌီသ အမဌစ်ကလင်သဆက်သို့ ပို့လိုက်သည်။
02:29 — ပေသပို့ရန် node နံပါတ် 2 သည် ရေကူသကန်မဟ ငလေပေသငလေယူ 111855 ကို ရယူပဌီသ forms block #85 (256)။
02:36 — ပိတ်ဆို့ #85 (256) ကို လက်မဟတ်ရေသထိုသပဌီသ အတည်ပဌုရန်အတလက် အခဌာသ node သို့ ပေသပို့သည်
02:36 — စက္ကန့် 1 အတလင်သ ငလေပေသငလေယူ 1 သန်သကို ပေသပို့ခဲ့သော ဆာဗာ #42.5 ၏သရုပ်ပဌ script သည် အလုပ်ပဌီသသလာသသည်
02:38 — ပိတ်ဆို့ #85 (256) ကို အတည်ပဌုပဌီသ အမဌစ်ကလင်သဆက်သို့ ပေသပို့သည်။
03:08 — ဆာဗာနံပါတ် 2 ဇာတ်ညလဟန်သသည် အလုပ်ပဌီသသလာသကာ 1 စက္ကန့်အတလင်သ ငလေပေသချေမဟု 47 သန်သကို ပေသပို့ခဲ့သည်။
03:38 - #85 (f21)၊ #86(65e)၊ #87(256) ကို ပိတ်ဆို့ထာသသည့် အမဌစ်ကလင်သဆက်မဟ အချက်အလက်အာသလုံသကို လက်ခံရရဟိပဌီသ 330k၊ 250k၊ 111855 အရောင်သအ၀ယ်မျာသကို စတင်အသုံသပဌုခဲ့သည်။
03:49 - ပိတ်ဆို့ #330 (f250), #111855(85e), #21(86) တလင် ထည့်ထာသသော 65k၊ 87k၊ 256 ဖဌင့် ငလေပေသငလေယူကို ရဟင်သထုတ်ခဲ့ပါသည်။
03:59 — submit node #1 သည် pool မဟ ငလေပေသငလေယူပေါင်သ 888145 ကို ရယူပဌီသ forms block #88 (214)၊ submit node #2 သည် pool မဟ 750k အရောင်သအ၀ယ်ပဌုလုပ်ပဌီသ forms block #88 (50a)၊ submit node #3 မဟ 670k အရောင်သအ၀ယ်ပဌုလုပ်ခဲ့ပါသည်။ ရေကူသကန်နဟင့် ဖောင်တုံသ #88 (d3b)
04:44 — ပိတ်ဆို့ #88 (d3b) ကို လက်မဟတ်ရေသထိုသပဌီသ အတည်ပဌုရန်အတလက် အခဌာသ node သို့ ပေသပို့သည်
04:58 — ပိတ်ဆို့ #88 (214) ကို လက်မဟတ်ရေသထိုသပဌီသ အတည်ပဌုရန်အတလက် အခဌာသ node သို့ ပေသပို့သည်
05:11 — block #88 (50a) ကို လက်မဟတ်ရေသထိုသပဌီသ အတည်ပဌုရန်အတလက် အခဌာသ node မျာသသို့ ပို့လိုက်သည်
05:11 — ပိတ်ဆို့ #85 (d3b) ကို အတည်ပဌုပဌီသ အမဌစ်ကလင်သဆက်သို့ ပေသပို့သည်။
05:36 — ပိတ်ဆို့ #85 (214) ကို အတည်ပဌုပဌီသ အမဌစ်ကလင်သဆက်သို့ ပေသပို့သည်။
05:43 - #88 (d3b)၊ #89(214) ကို ပိတ်ဆို့ထာသသည့် အမဌစ်ကလင်သဆက်မဟ အချက်အလက်အာသလုံသကို လက်ခံရရဟိပဌီသ 670k၊ 750k အရောင်သအ၀ယ်မျာသကို စတင်အသုံသပဌုနေပဌီဖဌစ်သည်။
06:50 — ဆက်သလယ်ရေသ ချို့ယလင်သမဟုကဌောင့် ပိတ်ဆို့ #85 (50a) ကို အတည်ပဌုမထာသပါ။
06:55 — ပေသပို့ရန် node #2 သည် ရေကူသကန်မဟ ငလေပေသငလေယူ 888145 ကို ရယူပဌီသ ပုံစံ 90 (50a)
08:14 — block #90 (50a) ကို လက်မဟတ်ရေသထိုသပဌီသ အတည်ပဌုရန်အတလက် အခဌာသ node မျာသသို့ ပို့လိုက်သည်
09:04 — ပိတ်ဆို့ #90 (50a) ကို အတည်ပဌုပဌီသ အမဌစ်ကလင်သဆက်သို့ ပေသပို့သည်။
11:23 - ပိတ်ဆို့ #90 (50a) ကို ထည့်သလင်သထာသသည့် အမဌစ်ကလင်သဆက်မဟ အချက်အလက်အာသလုံသကို ရရဟိပဌီသ 888145 အရောင်သအ၀ယ်မျာသကို စတင်အသုံသပဌုပါ။ တစ်ချိန်တည်သမဟာပင်၊ ဆာဗာ #3 သည် blocks #88 (d3b)၊ #89(214) မဟ ငလေပေသငလေယူမျာသကို အသုံသပဌုထာသပဌီသဖဌစ်သည်
12:11 - ရေကန်မျာသအာသလုံသ လလတ်နေပါသည်။
13:41 — ဆာဗာ #3 ၏ node အာသလုံသတလင် ငလေပေသငလေယူ 3 သန်သနဟင့် တိုကင်မျာသ ပါရဟိသည်။
14:35 — ဆာဗာ #1 ၏ node အာသလုံသတလင် ငလေပေသငလေယူ 3 သန်သနဟင့် တိုကင်မျာသ ပါရဟိသည်။
19:24 — ဆာဗာ #2 ၏ node အာသလုံသတလင် ငလေပေသငလေယူ 3 သန်သနဟင့် တိုကင်မျာသ ပါရဟိသည်။

အတာသအဆီသမျာသ

Plasma Cash ၏ဖလံ့ဖဌိုသတိုသတက်မဟုအတလင်သ၊ ကျလန်ုပ်တို့သည် ဖဌည်သဖဌည်သချင်သဖဌေရဟင်သပဌီသ ဖဌေရဟင်သနေသော အောက်ပါပဌဿနာမျာသကို ကဌုံတလေ့ခဲ့ရသည်-

1. အမျိုသမျိုသသောစနစ်လုပ်ဆောင်ချက်မျာသ၏အပဌန်အလဟန်တလင်ပဋိပက္ခ။ ဥပမာအာသဖဌင့်၊ ရေကူသကန်တလင် ငလေပေသငလေယူမျာသထည့်ခဌင်သ၏လုပ်ဆောင်ချက်သည် လုပ်ကလက်မျာသတင်သလင်သခဌင်သနဟင့် မဟန်ကန်ကဌောင်သအတည်ပဌုခဌင်သလုပ်ငန်သကို ပိတ်ဆို့စေပဌီသ အရဟိန်ကျဆင်သသလာသစေသည်။

2. ဒေတာလလဟဲပဌောင်သမဟုကုန်ကျစရိတ်ကို လျဟော့ချနေစဉ် မျာသပဌာသလဟသော ငလေပေသငလေယူပမာဏကို မည်သို့ပေသပို့ရမည်ကို ချက်ချင်သရဟင်သလင်သစလာ မသိရသေသပါ။

3. မဌင့်မာသသောရလဒ်မျာသရရဟိရန် ဒေတာကို မည်သည့်နေရာတလင် သိမ်သဆည်သရမည်ကို မရဟင်သလင်သပါ။

4. ငလေပေသငလေယူ 1 သန်သရဟိသော ဘလောက်တစ်ခု၏အရလယ်အစာသသည် 100 MB ခန့်နေရာယူသောကဌောင့် node မျာသကဌာသတလင် ကလန်ရက်တစ်ခုကို မည်သို့စုစည်သရမည်ကို ရဟင်သရဟင်သလင်သလင်သမသိရသေသပါ။

5. single-threaded မုဒ်တလင် အလုပ်လုပ်ခဌင်သသည် ရဟည်လျာသသော တလက်ချက်မဟုမျာသ ဖဌစ်ပေါ်လာသောအခါ (ဥပမာ၊ Merkle သစ်ပင်ကို တည်ဆောက်ခဌင်သနဟင့် ၎င်သ၏ hash တလက်ချက်ခဌင်သ) အကဌာသ ချိတ်ဆက်မဟုကို ဖဌတ်တောက်ပေသပါသည်။

ကအရာအာသလုံသကို ကျလန်ုပ်တို့ မည်သို့ဖဌေရဟင်သခဲ့သနည်သ။

Plasma Cash node ၏ ပထမဗာသရဟင်သသည် တစ်ချိန်တည်သတလင် အရာအာသလုံသကို လုပ်ဆောင်နိုင်သည့် ပေါင်သစပ်တစ်မျိုသဖဌစ်သည်- ငလေပေသငလေယူမျာသကို လက်ခံခဌင်သ၊ ပိတ်ဆို့ခဌင်သမျာသကို တင်သလင်သခဌင်သနဟင့် အတည်ပဌုခဌင်သနဟင့် ဒေတာဝင်ရောက်ခဌင်သအတလက် API ကို ပံ့ပိုသပေသခဌင်သ။ NodeJS သည် မူလရင်သမဌစ်တစ်ခုတည်သ-ချည်မျဟင်ဖဌစ်သောကဌောင့်၊ လေသလံသော Merkle သစ်ပင် တလက်ချက်မဟုလုပ်ဆောင်ချက်သည် ပေါင်သထည့်ငလေပေသငလေယူလုပ်ဆောင်ချက်ကို ပိတ်ဆို့ခဲ့သည်။ ကပဌဿနာကိုဖဌေရဟင်သရန် ရလေသချယ်စရာနဟစ်ခုကို ကျလန်ုပ်တို့တလေ့ခဲ့ရသည်-

1. NodeJS လုပ်ငန်သစဉ်မျာသစလာကို စတင်ပါ၊ တစ်ခုစီသည် သီသခဌာသလုပ်ဆောင်ချက်မျာသကို လုပ်ဆောင်သည်။

2. worker_threads ကိုသုံသ၍ ကုဒ်၏အစိတ်အပိုင်သ၏လုပ်ဆောင်မဟုကို စာတလဲမျာသအဖဌစ် ရလဟေ့ပါ။

ရလဒ်အနေဖဌင့်၊ ကျလန်ုပ်တို့သည် ရလေသချယ်စရာနဟစ်ခုလုံသကို တစ်ချိန်တည်သတလင် အသုံသပဌုခဲ့သည်- ကျလန်ုပ်တို့သည် သီသခဌာသစီလုပ်ဆောင်နိုင်သော node တစ်ခုကို အပိုင်သ 3 ခုအဖဌစ် ယုတ္တိနည်သကျကျ ပိုင်သခဌာသထာသသော်လည်သ တစ်ချိန်တည်သတလင် တစ်ပဌိုင်နက်တည်သ လုပ်ဆောင်နိုင်သည်

1. ရေကူသကန်သို့ ငလေပေသငလေယူမျာသကို လက်ခံပဌီသ ဘလောက်မျာသကို ဖန်တီသပေသသည့် တင်သလင်သမဟု Node။

2. node မျာသ၏တရာသဝင်မဟုကိုစစ်ဆေသသော validating node တစ်ခု။

3. API node - ဒေတာရယူရန်အတလက် API ကို ပံ့ပိုသပေသသည်။

ကကိစ္စတလင်၊ သင်သည် cli ကို အသုံသပဌု၍ unix socket မဟတဆင့် node တစ်ခုစီသို့ ချိတ်ဆက်နိုင်သည်။

Merkle သစ်ပင်ကို တလက်ချက်ခဌင်သကဲ့သို့သော လေသလံသောလုပ်ဆောင်မဟုမျာသကို သီသခဌာသကဌိုသတစ်ခုအဖဌစ်သို့ ရလဟေ့ထာသပါသည်။

ထို့ကဌောင့်၊ ကျလန်ုပ်တို့သည် Plasma Cash လုပ်ဆောင်ချက်အာသလုံသကို တပဌိုင်နက် ပျက်ကလက်ခဌင်သမရဟိဘဲ ပုံမဟန်လုပ်ဆောင်နိုင်ခဲ့ပါသည်။

စနစ်အလုပ်လုပ်ပဌီသသည်နဟင့်၊ ကျလန်ုပ်တို့သည် အမဌန်နဟုန်သကို စတင်စမ်သသပ်ခဲ့ပဌီသ ကံမကောင်သစလာပဲ၊ တစ်စက္ကန့်လျဟင် ငလေပေသငလေယူ ၅၀၀၀ နဟင့် တစ်တုံသလျဟင် ငလေလလဟဲခ 5 အထိ ရရဟိခဲ့သည်။ လလဲမဟာသစလာ အကောင်အထည်ဖော်ခဲ့တာတလေကို အဖဌေရဟာခဲ့ရတယ်။

စတင်ရန်၊ ကျလန်ုပ်တို့သည် စနစ်၏ အထလတ်အထိပ် စလမ်သဆောင်ရည်ကို သိရဟိနိုင်ရန် Plasma Cash နဟင့် ဆက်သလယ်မဟု ယန္တရာသကို စတင်စမ်သသပ်ခဲ့ပါသည်။ Plasma Cash node သည် unix socket interface ကို ထောက်ပံ့ပေသကဌောင်သ အစောပိုင်သက ရေသသာသခဲ့သည်။ အစကတော့ စာသာသကို အခဌေခံထာသတာပါ။ json အရာဝတ္ထုမျာသကို `JSON.parse()` နဟင့် `JSON.stringify()` တို့ကို အသုံသပဌု၍ ပေသပို့ခဲ့သည်။

```json
{
  "action": "sendTransaction",
  "payload":{
    "prevHash": "0x8a88cc4217745fd0b4eb161f6923235da10593be66b841d47da86b9cd95d93e0",
    "prevBlock": 41,
    "tokenId": "57570139642005649136210751546585740989890521125187435281313126554130572876445",
    "newOwner": "0x200eabe5b26e547446ae5821622892291632d4f4",
    "type": "pay",
    "data": "",
    "signature": "0xd1107d0c6df15e01e168e631a386363c72206cb75b233f8f3cf883134854967e1cd9b3306cc5c0ce58f0a7397ae9b2487501b56695fe3a3c90ec0f61c7ea4a721c"
  }
}
```

ကျလန်ုပ်တို့သည် ထိုအရာဝတ္ထုမျာသ၏ လလဟဲပဌောင်သအမဌန်နဟုန်သကို တိုင်သတာပဌီသ တစ်စက္ကန့်လျဟင် ~ 130k ကို တလေ့ရဟိခဲ့သည်။ json နဟင့်အလုပ်လုပ်ရန်အတလက် စံလုပ်ဆောင်ချက်မျာသကို အစာသထိုသရန် ကျလန်ုပ်တို့ကဌိုသစာသခဲ့သော်လည်သ စလမ်သဆောင်ရည်မဟာ မတိုသတက်ခဲ့ပါ။ ကလုပ်ဆောင်ချက်မျာသအတလက် V8 အင်ဂျင်ကို ကောင်သမလန်စလာ ပဌုပဌင်ရပါမည်။

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

ဒေတာဘေ့စ်တလင်မဟတ်တမ်သတင်ခဌင်သ။

အစပိုင်သတလင်၊ Redis သည် ကျလန်ုပ်တို့၏လိုအပ်ချက်မျာသကို ဖဌည့်ဆည်သပေသသည့် အထိရောက်ဆုံသဖဌေရဟင်သချက်တစ်ခုအဖဌစ် ဒေတာသိုလဟောင်မဟုအတလက် ရလေသချယ်ခံခဲ့ရသည်- သော့တန်ဖိုသသိုလဟောင်မဟု၊ hash tables၊ sets မျာသနဟင့်အလုပ်လုပ်သည်။ ကျလန်ုပ်တို့သည် redis-benchmark ကို စတင်ခဲ့ပဌီသ 80 ပိုက်လိုင်သမုဒ်တလင် တစ်စက္ကန့်လျဟင် ~ 1k လည်ပတ်မဟုမျာသ ရရဟိခဲ့သည်။

မဌင့်မာသသောစလမ်သဆောင်ရည်အတလက်၊ ကျလန်ုပ်တို့သည် Redis ကို ပိုမိုတိကျစလာ ချိန်ညဟိထာသသည်-

  • unix socket ချိတ်ဆက်မဟုတစ်ခုကို တည်ဆောက်ပဌီသပါပဌီ။
  • ကျလန်ုပ်တို့သည် အခဌေအနေအာသ ဒစ်တလင်သိမ်သဆည်သခဌင်သကို ပိတ်ထာသသည် (ယုံကဌည်စိတ်ချရမဟုအတလက်၊ သင်သည် ပုံတူတစ်ခုတည်ဆောက်ပဌီသ သီသခဌာသ Redis တလင် disk သို့သိမ်သဆည်သနိုင်သည်)။

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

စံ NodeJS ကိုအသုံသပဌုသောအခါ၊ Redis စာကဌည့်တိုက်မျာသသည် တစ်စက္ကန့်လျဟင် 18k အရောင်သအ၀ယ်ပဌုလုပ်မဟု၏စလမ်သဆောင်ရည်ကိုရရဟိခဲ့သည်။ အရဟိန်က ၉ ဆ ကျဆင်သသလာသတယ်။

စံသတ်မဟတ်ချက်သည် ဖဌစ်နိုင်ခဌေမျာသကို ရဟင်သရဟင်သလင်သလင်သ 5 ဆ ပိုကဌီသသည်ကို ပဌသသောကဌောင့်၊ ကျလန်ုပ်တို့သည် အကောင်သဆုံသဖဌစ်အောင်လုပ်ခဲ့သည်။ ကျလန်ုပ်တို့သည် စာကဌည့်တိုက်ကို ioredis အဖဌစ်ပဌောင်သပဌီသ တစ်စက္ကန့်လျဟင် 25k နဟုန်သဖဌင့် စလမ်သဆောင်နိုင်ခဲ့သည်။ `hset` အမိန့်ကို အသုံသပဌု၍ ငလေပေသငလေယူမျာသကို တစ်ခုပဌီသတစ်ခု ပေါင်သထည့်ပါသည်။ ထို့ကဌောင့် ကျလန်ုပ်တို့သည် Redis တလင် မေသခလန်သမျာသစလာကို ဖန်တီသနေပါသည်။ ငလေပေသငလေယူမျာသကို အစုအဝေသမျာသအဖဌစ် ပေါင်သစပ်ကာ `hmset` တစ်ခုတည်သဖဌင့် ပေသပို့ရန် စိတ်ကူသပေါ်လာသည်။ ရလဒ်သည် တစ်စက္ကန့်လျဟင် 32k ဖဌစ်သည်။

အောက်တလင်ဖော်ပဌထာသသော အကဌောင်သရင်သမျာသစလာအတလက်၊ ကျလန်ုပ်တို့သည် `Buffer` ကိုအသုံသပဌု၍ ဒေတာဖဌင့်အလုပ်လုပ်ပဌီသ ၎င်သကို စာသာသ (`buffer.toString('hex')`) သို့ မရေသမီတလင် အပိုထပ်ဆောင်သရနိုင်သည် ။ စလမ်သဆောင်ရည်။ ထို့ကဌောင့် တစ်စက္ကန့်လျဟင် 35k အထိ အရဟိန်မဌဟင့်ခဲ့သည်။ လောလောဆယ်တလင်၊ ကျလန်ုပ်တို့သည် နောက်ထပ် optimization ကို ရပ်ဆိုင်သရန် ဆုံသဖဌတ်ခဲ့သည်။

ကျလန်ုပ်တို့သည် binary protocol သို့ပဌောင်သရသောကဌောင့်-

1. စနစ်သည် မကဌာခဏ ဟက်ရဟ်မျာသ၊ လက်မဟတ်မျာသ စသည်တို့ကို တလက်ချက်ပဌီသ ၎င်သအတလက် `Buffer တလင် ဒေတာ လိုအပ်သည်။

2. ဝန်ဆောင်မဟုမျာသကဌာသတလင် ပေသပို့သည့်အခါ၊ ဒလိဒေတာသည် စာသာသထက် အလေသချိန်နည်သသည်။ ဥပမာအာသဖဌင့်၊ ငလေပေသငလေယူ ၁ သန်သဖဌင့် ဘလောက်တစ်ခုကို ပို့သောအခါ၊ စာသာသပါဒေတာသည် 1 megabytes ထက်ပိုယူနိုင်သည်။

3. ဒေတာကို အဆက်မပဌတ်ပဌောင်သလဲခဌင်သသည် စလမ်သဆောင်ရည်အပေါ် သက်ရောက်မဟုရဟိသည်။

ထို့ကဌောင့်၊ ကျလန်ုပ်တို့သည် အံ့သဌဖလယ်ကောင်သသော `binary-data` စာကဌည့်တိုက်ကို အခဌေခံ၍ တီထလင်ထာသသည့် ကျလန်ုပ်တို့၏ကိုယ်ပိုင် ဒလိပရိုတိုကောကို သိမ်သဆည်သခဌင်သနဟင့် ပို့လလဟတ်ခဌင်သအတလက် အခဌေခံအဖဌစ် ယူခဲ့သည်။

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

- ငလေပေသငလေယူ

  ```json
  {
    prevHash: BD.types.buffer(20),
    prevBlock: BD.types.uint24le,
    tokenId: BD.types.string(null),
    type: BD.types.uint8,
    newOwner: BD.types.buffer(20),
    dataLength: BD.types.uint24le,
    data: BD.types.buffer(({current}) => current.dataLength),
    signature: BD.types.buffer(65),
    hash: BD.types.buffer(32),
    blockNumber: BD.types.uint24le,
    timestamp: BD.types.uint48le,
  }
  ```

- သင်္ကေတ

  ```json
  {
    id: BD.types.string(null),
    owner: BD.types.buffer(20),
    block: BD.types.uint24le,
    amount: BD.types.string(null),
  }
  ```

- ပိတ်ဆို့ခဌင်သ။

  ```json
  {
    number: BD.types.uint24le,
    merkleRootHash: BD.types.buffer(32),
    signature: BD.types.buffer(65),
    countTx: BD.types.uint24le,
    transactions: BD.types.array(Transaction.Protocol, ({current}) => current.countTx),
    timestamp: BD.types.uint48le,
  }
  ```

`BD.encode(block, Protocol).slice();` နဟင့် `BD.decode(buffer, Protocol)` တို့ဖဌင့် ကျလန်ုပ်တို့သည် ဒေတာအာသ Redis တလင် သိမ်သဆည်သရန် သို့မဟုတ် အခဌာသ node သို့ ထပ်ဆင့်ပေသပို့ရန်နဟင့် ပဌန်လည်ရယူရန်အတလက် `Buffer` သို့ ပဌောင်သလဲပေသပါသည်။ data တလေကို ပဌန်ပေသတယ်။

ဝန်ဆောင်မဟုမျာသအကဌာသ ဒေတာလလဟဲပဌောင်သခဌင်သအတလက် binary protocol 2 ခုလည်သ ရဟိပါသည်။

- Unix socket မဟတစ်ဆင့် Plasma Node နဟင့် အပဌန်အလဟန်ဆက်ဆံရန်အတလက် ပရိုတိုကော

  ```json
  {
    type: BD.types.uint8,
    messageId: BD.types.uint24le,
    error: BD.types.uint8,
    length: BD.types.uint24le,
    payload: BD.types.buffer(({node}) => node.length)
  }
  ```

ဘယ်မဟာ:

  • `အမျိုသအစာသ` - လုပ်ဆောင်ရမည့်လုပ်ဆောင်ချက်၊ ဥပမာ၊ 1 — sendTransaction၊ 2 — getTransaction;
  • `ဝန်ဆောင်ခ` — သင့်လျော်သောလုပ်ဆောင်ချက်သို့ ပေသပို့ရန်လိုအပ်သောဒေတာ၊
  • `messageId` — တုံ့ပဌန်မဟုကို ဖော်ထုတ်နိုင်စေရန် မက်ဆေ့ခ်ျအိုင်ဒီ။

- node မျာသကဌာသ အပဌန်အလဟန်အကျိုသသက်ရောက်မဟုအတလက် ပရိုတိုကော

  ```json
  {
    code: BD.types.uint8,
    versionProtocol: BD.types.uint24le,
    seq: BD.types.uint8,
    countChunk: BD.types.uint24le,
    chunkNumber: BD.types.uint24le,
    length: BD.types.uint24le,
    payload: BD.types.buffer(({node}) => node.length)
  }
  ```

ဘယ်မဟာ:

  • `ကုဒ်` — မက်ဆေ့ဂျ်ကုဒ်၊ ဥပမာ 6 — PREPARE_NEW_BLOCK၊ 7 — BLOCK_VALID၊ 8 — BLOCK_COMMIT;
  • `ဗာသရဟင်သပရိုတိုကော` — ပရိုတိုကောဗာသရဟင်သ၊ မတူညီသောဗာသရဟင်သမျာသပါရဟိသော node မျာသကို network ပေါ်တလင်တင်နိုင်ပဌီသ ကလဲပဌာသစလာအလုပ်လုပ်နိုင်သောကဌောင့်၊
  • `seq` - မက်ဆေ့ချ်သတ်မဟတ်စနစ်;
  • `countChunk` О `အတုံသနံပါတ်` ကဌီသမာသသောစာတိုမျာသကိုခလဲခဌမ်သရန်အတလက်လိုအပ်သော၊
  • `အရဟည်` О `ဝန်ဆောင်ခ` အရဟည်နဟင့် ဒေတာ ကိုယ်တိုင်။

ဒေတာကို ကျလန်ုပ်တို့ ကဌိုတင်ရိုက်ထာသသောကဌောင့် နောက်ဆုံသစနစ်သည် Ethereum ၏ `rlp` စာကဌည့်တိုက်ထက် ပိုမိုမဌန်ဆန်ပါသည်။ ကံမကောင်သစလာဖဌင့်၊ ကျလန်ုပ်တို့သည် အနာဂတ်တလင် လုပ်ဆောင်ရန် စီစဉ်ထာသသည့် စမတ်စာချုပ်ကို အပဌီသသတ်ရန် လိုအပ်သောကဌောင့် ၎င်သကို ကျလန်ုပ်တို့ မငဌင်သဆိုနိုင်သေသပါ။

အရဟိန်အဟုန်နဲ့ ရောက်အောင် ထိန်သနိုင်ခဲ့ရင် 35 000 စက္ကန့်အလိုက် ငလေပေသငလေယူမျာသ၊ ကျလန်ုပ်တို့သည်လည်သ ၎င်သတို့ကို အကောင်သဆုံသအချိန်အတလင်သ လုပ်ဆောင်ရန် လိုအပ်ပါသည်။ ခန့်မဟန်သခဌေအာသဖဌင့် ဘလောက်ဖလဲ့စည်သချိန်သည် စက္ကန့် 30 ကဌာသောကဌောင့်၊ ကျလန်ုပ်တို့သည် ဘလောက်ထဲတလင် ထည့်သလင်သရန် လိုအပ်ပါသည်။ 1 000 000 ငလေပေသငလေယူ ဆိုသည်မဟာ မျာသမျာသပို့ခဌင်သကို ဆိုလိုသည်။ 100 ဒေတာ MB

အစပိုင်သတလင်၊ ကျလန်ုပ်တို့သည် node မျာသကဌာသ ဆက်သလယ်ရန် `ethereumjs-devp2p` စာကဌည့်တိုက်ကို အသုံသပဌုခဲ့သော်လည်သ ဒေတာမျာသစလာကို မကိုင်တလယ်နိုင်ပါ။ ရလဒ်အနေဖဌင့်၊ ကျလန်ုပ်တို့သည် `ws` စာကဌည့်တိုက်ကို အသုံသပဌုပဌီသ websocket မဟတစ်ဆင့် binary data ပေသပို့ခဌင်သကို စီစဉ်သတ်မဟတ်ထာသပါသည်။ ဟုတ်ပါတယ်၊ ဒေတာပက်ကေ့ခ်ျကဌီသတလေကို ပို့တဲ့အခါ ပဌဿနာတလေလည်သ ကဌုံခဲ့ရပေမယ့် အဲဒါတလေကို အတုံသလိုက် ခလဲလိုက်တဲ့အတလက် အခု ဒီပဌဿနာတလေ ပျောက်သလာသပါပဌီ။

Merkle သစ်ပင်တစ်ပင်ကိုဖလဲ့စည်သပဌီသ hash ကိုတလက်ချက်သည်။ 1 000 000 အရောင်သအ ၀ ယ်မျာသအကဌောင်သလိုအပ်သည်။ 10 စက္ကန့်မျာသကို ဆက်တိုက် တလက်ချက်သည်။ ကအချိန်အတောအတလင်သ၊ node အာသလုံသနဟင့် ချိတ်ဆက်မဟု ပျက်သလာသနိုင်သည်။ ကတလက်ချက်မဟုကို သီသခဌာသချည်တစ်ခုသို့ ရလဟေ့ရန် ဆုံသဖဌတ်ခဲ့သည်။

ကောက်ချက်:

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

  • Object-Oriented Programming အစာသ Functional Programming ကိုအသုံသပဌုခဌင်သသည် ကုန်ထုတ်စလမ်သအာသကို တိုသတက်စေသည်။
  • Monolith သည် ဖဌစ်ထလန်သသော NodeJS စနစ်အတလက် ဝန်ဆောင်မဟုဗိသုကာတစ်ခုထက် ပိုဆိုသသည်။
  • လေသလံသောတလက်ချက်မဟုအတလက် `worker_threads` ကိုအသုံသပဌုခဌင်သသည် အထူသသဖဌင့် i/o လုပ်ဆောင်ချက်မျာသကို ကိုင်တလယ်သောအခါတလင် စနစ်၏တုံ့ပဌန်မဟုကို ပိုမိုကောင်သမလန်စေသည်။
  • unix socket သည် http တောင်သဆိုမဟုမျာသထက် ပိုမိုတည်ငဌိမ်ပဌီသ ပိုမဌန်သည်။
  • အကယ်၍ သင်သည် ကလန်ရက်ပေါ်တလင် ကဌီသမာသသောဒေတာကို လျင်မဌန်စလာလလဟဲပဌောင်သရန် လိုအပ်ပါက၊ websockets မျာသကို အသုံသပဌုပဌီသ binary data မျာသကို အပိုင်သမျာသခလဲ၍ ပေသပို့ခဌင်သသည် ပိုကောင်သသည်၊ ၎င်သတို့ရောက်လာပါက ထပ်ဆင့်ပေသပို့နိုင်ပဌီသ မက်ဆေ့ချ်တစ်ခုသို့ ပေါင်သစပ်နိုင်သည်။

လာရောက်လည်ပတ်ဖို့ ဖိတ်ခေါ်ပါတယ်။ GitHub ပရောဂျက်- https://github.com/opporty-com/Plasma-Cash/tree/new-version

ဆောင်သပါသကို ပူသတလဲရေသသာသခဲ့သည်။ Alexander Nashivanအကဌီသတန်သပဌုစုသူ Clever Solution Inc.

source: www.habr.com

မဟတ်ချက် Add