Telegram Open Network (TON) တလင် စမတ်ကျသည့် စာချုပ်ကို မည်သို့ရေသမည်အကဌောင်သ၊

TON တလင် စမတ်ကျသည့် စာချုပ်ကို မည်သို့ရေသနိုင်မည်နည်သ။

ဒီဆောင်သပါသက ဘာအကဌောင်သလဲ။

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

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

TON တလင် ၎င်သတို့၏ ပထမဆုံသသော စမတ်စာချုပ်ကို ပဌုလုပ်လိုသူမျာသအတလက် ဆောင်သပါသသည် အသုံသဝင်လိမ့်မည်၊ သို့သော် မည်သည့်နေရာတလင် စတင်ရမည်ကို မသိသောသူမျာသအတလက် အသုံသဝင်မည်ဖဌစ်ပါသည်။

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

ပဌိုင်ပလဲတလင်ပါဝင်ခဌင်သအကဌောင်သ

ပဌီသခဲ့သည့်အောက်တိုဘာလတလင် Telegram သည်ဘာသာစကာသအသစ်မျာသဖဌင့် blockchain ယဟဉ်ပဌိုင်မဟုကိုကဌေငဌာခဲ့သည်။ Fift О FunC. စမတ်ကျတဲ့ စာချုပ်ငါသခုကဌာသကို ရလေသခဲ့ရတယ်။ အနာဂတ်မဟာ တခဌာသဘာမဟရေသစရာ မလိုတော့ရင်တောင် ထူသထူသခဌာသခဌာသ တစ်ခုခုလုပ်၊ ဘာသာစကာသတစ်ခု သင်ယူပဌီသ တစ်ခုခုလုပ်ရတာ ကောင်သမယ်ထင်တယ်။ ထို့အပဌင် ခေါင်သစဉ်သည် လူတိုင်သ၏ ပါသစပ်ဖျာသတလင် အမဌဲရဟိနေပါသည်။

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

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

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

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

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

TON တလင် စမတ်စာချုပ်မျာသ၏ သဘောတရာသ

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

ကျလန်ုပ်တို့သည် စမတ်ကျသော စာချုပ်တစ်ခုကို ရေသသာသပဌီသ လက်တလဲလုပ်ဆောင်ရန် အာရုံစိုက်ပါမည်။ TON Virtual Machine (TVM), Fift О FunCထို့ကဌောင့် ဆောင်သပါသသည် ပုံမဟန်ပရိုဂရမ်တစ်ခု၏ ဖလံ့ဖဌိုသတိုသတက်မဟုဖော်ပဌချက်နဟင့် ပိုတူသည်။ ပလက်ဖောင်သကိုယ်တိုင်က ဘယ်လိုအလုပ်လုပ်တယ်ဆိုတာကို ဒီမဟာနေမဟာမဟုတ်ဘူသ။

ယေဘုယျအာသဖဌင့်၎င်သသည်မည်သို့အလုပ်လုပ်သည်နဟင့် ပတ်သက်၍ TVM နဟင့် ဘာသာစကာသ Fift တရာသဝင်စာရလက်စာတမ်သကောင်သတလေရဟိတယ်။ ပဌိုင်ပလဲကာလအတလင်သနဟင့် ယခုလက်ရဟိစာချုပ်ကို ရေသသာသနေစဉ်၊ ကျလန်တော်သည် ၎င်သကို မကဌာခဏ ရည်ညလဟန်သပါသည်။

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

ကျလန်ုပ်တို့သည် စမတ်ကျသော စာချုပ်ကို ရေသပဌီသပဌီ ဆိုကဌပါစို့ FunCပဌီသနောက်၊ ကျလန်ုပ်တို့သည် ကုဒ်ကို Fift assembler တလင် စုစည်သသည်။

ပဌုစုထာသသော စမတ်စာချုပ်ကို ထုတ်ပဌန်ရန် ကျန်နေသေသသည်။ ဒီလိုလုပ်ဖို့၊ သင်က function ကိုရေသဖို့လိုအပ်ပါတယ်။ Fiftစမတ်စာချုပ်ကုဒ်နဟင့် ထည့်သလင်သမဟုအဖဌစ် အချို့သော ကန့်သတ်ချက်မျာသကို လက်ခံမည်ဖဌစ်ပဌီသ ရလဒ်သည် တိုသချဲ့မဟုနဟင့်အတူ ဖိုင်တစ်ခု ဖဌစ်လိမ့်မည်၊ .boc (ဆိုလိုသည်မဟာ "ဆဲလ်အိတ်မျာသ" ဟု အဓိပ္ပါယ်ရသော)၊ ၎င်သကို ကျလန်ုပ်တို့ ရေသထာသပုံပေါ် မူတည်၍ လျဟို့ဝဟက်သော့နဟင့် စမတ်စာချုပ်ကုဒ်ကို အခဌေခံ၍ ထုတ်လုပ်သည့် လိပ်စာတစ်ခု၊ ထုတ်ပဌန်ခဌင်သမပဌုရသေသသည့် စမတ်စာချုပ်လိပ်စာသို့ ဂရမ်ကို သင် ပေသပို့နိုင်ပါသည်။

TON တလင် စမတ်စာချုပ်တစ်ခု ထုတ်ဝေရန် လက်ခံရရဟိခဲ့သည်။ .boc ဖိုင်ကို light client ကိုအသုံသပဌုပဌီသ blockchain သို့ပေသပို့ရန်လိုအပ်သည် (အောက်ပါအချက်အပေါ်ပိုမို) ။ သို့သော် ထုတ်ဝေခဌင်သမပဌုမီ၊ သင်သည် ထုတ်လုပ်ထာသသော လိပ်စာသို့ ဂရမ်လလဟဲပဌောင်သရန် လိုအပ်သည်၊ သို့မဟုတ်ပါက စမတ်စာချုပ်ကို ထုတ်ပဌန်မည်မဟုတ်ပါ။ ထုတ်ဝေပဌီသနောက်၊ ပဌင်ပမဟ မက်ဆေ့ဂျ်မျာသ ပေသပို့ခဌင်သဖဌင့် (ဥပမာ၊ ပေါ့ပါသသော ကလိုင်သယင့်) သို့မဟုတ် အတလင်သမဟ (ဥပမာ၊ စမတ်စာချုပ်တစ်ခုသည် TON အတလင်သရဟိ အခဌာသမက်ဆေ့ဂျ်တစ်ခု ပေသပို့ခဌင်သ) ဖဌင့် အပဌန်အလဟန် တုံ့ပဌန်နိုင်ပါသည်။

ကုဒ်ကို မည်သို့ထုတ်ဝေကဌောင်သ ကျလန်ုပ်တို့နာသလည်ပဌီသနောက်၊ ၎င်သသည် ပိုမိုလလယ်ကူလာသည်။ ကျလန်တော်တို့ ဘာရေသချင်လဲ ဆိုတာကို အကဌမ်သဖျင်သ သိပါတယ်။ စာရေသနေစဉ်တလင်၊ ၎င်သကို လက်ရဟိစမတ်ကန်ထရိုက်မျာသတလင် မည်သို့အကောင်အထည်ဖော်နေပဌီဖဌစ်သည် သို့မဟုတ် အကောင်အထည်ဖော်မဟုကုဒ်ကို ကျလန်ုပ်တို့ရဟာဖလေနေပါသည်။ Fift О FunC တရာသဝင် repository တလင် သို့မဟုတ် တရာသဝင်စာရလက်စာတမ်သမျာသတလင် ကဌည့်ရဟုပါ။

ပဌိုင်ပလဲတလင်ပါဝင်သူမျာသနဟင့် Telegram ဝန်ထမ်သမျာသစုဝေသရာ Telegram chat တလင် သော့ချက်စကာသလုံသမျာသကို ကျလန်ုပ်ရဟာဖလေလေ့ရဟိသည်၊ ထို့ကဌောင့် ပဌိုင်ပလဲကာလအတလင်သ လူတိုင်သစုပဌီသ Fift နဟင့် FunC ကို စတင်ဆလေသနလေသခဲ့ကဌပါသည်။ ဆောင်သပါသ၏အဆုံသတလင်လင့်ခ်။

သီအိုရီမဟ လက်တလေ့သို့ ရလဟေ့ရန် အချိန်ရောက်ပဌီ။

TON နဟင့် အလုပ်လုပ်ရန်အတလက် ပတ်ဝန်သကျင်ကို ပဌင်ဆင်ခဌင်သ။

MacOS ဆောင်သပါသတလင် ဖော်ပဌမည့်အရာအာသလုံသကို ကျလန်တော်လုပ်ခဲ့ပဌီသ Docker ရဟိ Ubuntu 18.04 LTS တလင် ၎င်သကို ပဌန်လည်စစ်ဆေသခဲ့သည်။

ပထမဆုံသလုပ်ရမဟာက ဒေါင်သလုဒ်လုပ်ပဌီသ install လုပ်ပါ။ lite-client သင် TON သို့တောင်သဆိုမဟုမျာသပေသပို့နိုင်သည်။

တရာသဝင်ဝဘ်ဆိုဒ်ရဟိ ညလဟန်ကဌာသချက်မျာသသည် တပ်ဆင်ခဌင်သလုပ်ငန်သစဉ်ကို အသေသစိတ်ရဟင်သလင်သစလာ ဖော်ပဌထာသပဌီသ အချို့သောအသေသစိတ်အချက်အလက်မျာသကို ချန်လဟပ်ထာသသည်။ ကနေရာတလင် ကျလန်ုပ်တို့သည် ညလဟန်ကဌာသချက်မျာသကို လိုက်နာပဌီသ လမ်သတစ်လျဟောက်တလင် ပျောက်ဆုံသနေသော မဟီခိုမဟုမျာသကို ထည့်သလင်သပါ။ ပရောဂျက်တစ်ခုစီကို ကျလန်တော်ကိုယ်တိုင် မစုစည်သဘဲ တရာသဝင် Ubuntu repository (ကျလန်တော်သုံသတဲ့ MacOS မဟာ ထည့်သလင်သထာသပါတယ်။ brew).

apt -y install git 
apt -y install wget 
apt -y install cmake 
apt -y install g++ 
apt -y install zlib1g-dev 
apt -y install libssl-dev 

မဟီခိုမဟုအာသလုံသကို ထည့်သလင်သပဌီသသည်နဟင့် သင်သည် ထည့်သလင်သနိုင်သည်။ lite-client, Fift, FunC.

ပထမညသစလာ၊ ကျလန်ုပ်တို့သည် မဟီခိုမဟုနဟင့်အတူ TON repository ကိုပလာသမျာသပါ။ အဆင်ပဌေစေရန်၊ ကျလန်ုပ်တို့သည် ဖိုင်တလဲတလင် အရာအာသလုံသကို လုပ်ဆောင်ပါမည်။ ~/TON.

cd ~/TON
git clone https://github.com/ton-blockchain/ton.git
cd ./ton
git submodule update --init --recursive

သိုလဟောင်မဟုတလင် အကောင်အထည်ဖော်မဟုမျာသကိုလည်သ သိမ်သဆည်သထာသသည်။ Fift О FunC.

အခု ကျလန်တော်တို့ စီမံကိန်သကို တည်ဆောက်ဖို့ အဆင်သင့်ဖဌစ်နေပါပဌီ။ သိုလဟောင်ကုဒ်ကို ဖိုဒါထဲသို့ ကူသထည့်ထာသသည်။ ~/TON/ton။ အဆိုပါ ~/TON folder တစ်ခုဖန်တီသပါ။ build ပရောဂျက်ကို စုဆောင်သတယ်။

mkdir ~/TON/build 
cd ~/TON/build
cmake ../ton

ကျလန်ုပ်တို့သည် စမတ်ကျသော စာချုပ်တစ်ခုကို ရေသတော့မည်ဖဌစ်သောကဌောင့် ကျလန်ုပ်တို့သာမက လိုအပ်ပါသည်။ lite-clientဒါပေမဲ့ Fift с FunCဒါကဌောင့် ကျလန်တော်တို့က အရာအာသလုံသကို စုစည်သတယ်။ ၎င်သသည် မဌန်ဆန်သော လုပ်ငန်သစဉ်မဟုတ်သောကဌောင့် ကျလန်ုပ်တို့ စောင့်မျဟော်နေပါသည်။

cmake --build . --target lite-client
cmake --build . --target fift
cmake --build . --target func

ထို့နောက်၊ မည်သည့် node နဟင့်ပတ်သက်သည့်ဒေတာမျာသပါရဟိသော configuration ဖိုင်ကိုကျလန်ုပ်တို့ဒေါင်သလုဒ်လုပ်ပါ။ lite-client ချိတ်ဆက်ပါလိမ့်မယ်။

wget https://test.ton.org/ton-lite-client-test1.config.json

TON သို့ ညသစလာတောင်သဆိုမဟုမျာသ ပဌုလုပ်ခဲ့သည်။

ကဲ စလိုက်ကဌရအောင် lite-client.

cd ~/TON/build
./lite-client/lite-client -C ton-lite-client-test1.config.json

တည်ဆောက်မဟုအောင်မဌင်ပါက၊ စတင်ပဌီသနောက်တလင် light client ၏ချိတ်ဆက်မဟုမဟတ်တမ်သကို node သို့တလေ့ရပါမည်။

[ 1][t 2][1582054822.963129282][lite-client.h:201][!testnode]   conn ready
[ 2][t 2][1582054823.085654020][lite-client.cpp:277][!testnode] server version is 1.1, capabilities 7
[ 3][t 2][1582054823.085725069][lite-client.cpp:286][!testnode] server time is 1582054823 (delta 0)
...

သင် command ကို execute လုပ်နိုင်ပါတယ်။ help မည်သည့် command မျာသရရဟိနိုင်သည်ကိုကဌည့်ပါ။

help

ကဆောင်သပါသတလင်ကျလန်ုပ်တို့အသုံသပဌုမည့် command မျာသကိုစာရင်သပဌုစုကဌပါစို့။

list of available commands:
last    Get last block and state info from server
sendfile <filename> Load a serialized message from <filename> and send it to server
getaccount <addr> [<block-id-ext>]  Loads the most recent state of specified account; <addr> is in [<workchain>:]<hex-or-base64-addr> format
runmethod <addr> [<block-id-ext>] <method-id> <params>...   Runs GET method <method-id> of account <addr> with specified parameters

last пПлучает пПслеЎМОй сПзЎаММый блПк с сервера. 

sendfile <filename> Птправляет в TON файл с сППбщеМОеЌ, ОЌеММП с пПЌПщью этПй кПЌаМЎы публОкуется сЌарт-кПМтракт О запрсПсы к МеЌу. 

getaccount <addr> загружает текущее сПстПяМОе сЌарт-кПМтракта с указаММыЌ аЎресПЌ. 

runmethod <addr> [<block-id-ext>] <method-id> <params>  запускает get-ЌетПЎы сЌарткПМтракта. 

အခု စာချုပ်ကို ကိုယ်တိုင်ရေသဖို့ အဆင်သင့်ဖဌစ်နေပါပဌီ။

အကောင်အထည်ဖော်မဟု

စိတ်ကူသ

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

ထို့အပဌင်၊ ၎င်သသည် သင်လက်မဟတ်ဝယ်ပဌီသ တစ်နာရီ၊ တစ်ရက် သို့မဟုတ် တစ်လစောင့်ရန် လိုအပ်သည့်ထီမဟုတ်သော်လည်သ သုံသစလဲသူက စာချုပ်လိပ်စာသို့ လလဟဲပဌောင်သပေသသည့် ချက်ခဌင်သတစ်ခုဖဌစ်သည်။ N ဂရမ်၊ ချက်ခဌင်သပဌန်ရနိုင်သည်။ 2 * N ဂရမ် သို့မဟုတ် ရဟုံသသည်။ ကျလန်ုပ်တို့သည် အနိုင်ရရန် ဖဌစ်နိုင်ခဌေ 40% ခန့်ကို ပဌုလုပ်ပါမည်။ ငလေပေသချေရန် ဂရမ်မလုံလောက်ပါက၊ ငလေပေသငလေယူကို ဖဌည့်ဆည်သမဟုအဖဌစ် ထည့်သလင်သစဉ်သစာသပါမည်။

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

စမတ်ကျတဲ့ စာချုပ်တစ်ခုရေသပါ။

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

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

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

စမတ်စာချုပ်တလင် ခေါ်နိုင်သော ပဌင်ပနည်သလမ်သနဟစ်ခုရဟိသည်။ ပထမဆုံသ, recv_external() စာချုပ်ကို ပဌင်ပကမ္ဘာမဟ တောင်သဆိုမဟုတစ်ခုသည် TON မဟမဟုတ်ဘဲ ဥပမာအာသဖဌင့် ကျလန်ုပ်တို့ကိုယ်တိုင် မက်ဆေ့ချ်တစ်ခုဖလဲ့ကာ lite-client မဟတစ်ဆင့် ပေသပို့သည့်အခါ ကလုပ်ဆောင်ချက်ကို လုပ်ဆောင်ပါသည်။ ဒုတိယ၊ recv_internal() TON အတလင်သရဟိ အချို့သော စာချုပ်မျာသသည် ကျလန်ုပ်တို့၏ လုပ်ငန်သကို ရည်ညလဟန်သသည့်အခါ ဖဌစ်ပါသည်။ နဟစ်ခုလုံသတလင်၊ ဘောင်မျာသကို function သို့ကူသနိုင်သည်။

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

() recv_internal(slice in_msg) impure {
    ;; TODO: implementation 
}

() recv_external(slice in_msg) impure {
    ;; TODO: implementation  
}

ကနေရာတလင် ကျလန်ုပ်တို့ ရဟင်သပဌရန် လိုအပ်ပါသည်။ slice. TON Blockchain တလင်သိမ်သဆည်သထာသသောဒေတာအာသလုံသသည်စုစည်သမဟုတစ်ခုဖဌစ်သည်။ TVM cell သို့မဟုတ်ရိုသရိုသ cellထိုသို့သောဆဲလ်တစ်ခုသည် ဒေတာ 1023 ဘစ်အထိ သိမ်သဆည်သနိုင်ပဌီသ အခဌာသဆဲလ်မျာသကို ရည်ညလဟန်သချက် 4 ခုအထိ သိမ်သဆည်သနိုင်သည်။

TVM cell slice သို့မဟုတ် slice ဒါက ရဟိပဌီသသာသအပိုင်သပါ။ cell ၎င်သ၏ခလဲခဌမ်သစိတ်ဖဌာမဟုအတလက်အသုံသပဌုသည်၊ ၎င်သသည်ပိုမိုရဟင်သလင်သလာသည်။ ကျလန်ုပ်တို့အတလက် အဓိကအချက်မဟာ စမတ်စာချုပ်သို့ လလဟဲပဌောင်သနိုင်ခဌင်သဖဌစ်သည်။ slice နဟင့် မက်ဆေ့ခ်ျအမျိုသအစာသပေါ်မူတည်၍ ဒေတာကို စီမံဆောင်ရလက်ပါ။ recv_external() သို့မဟုတ် recv_internal().

impure — လုပ်ဆောင်ချက်သည် စမတ်စာချုပ်ဒေတာကို မလမ်သမံကဌောင်သ ညလဟန်ပဌသောသော့ချက်စကာသလုံသ။

စာချုပ်ကုဒ်ကို သိမ်သကဌရအောင် lottery-code.fc compile လုပ်ပါ။

~/TON/build/crypto/func -APSR -o lottery-compiled.fif ~/TON/ton/crypto/smartcont/stdlib.fc ./lottery-code.fc 

အလံမျာသ၏အဓိပ္ပာယ်ကို command ဖဌင့်ကဌည့်ရဟုနိုင်သည်။

~/TON/build/crypto/func -help

စုစည်သထာသသော Fift assembler ကုဒ်ကို ကျလန်ုပ်တို့ ရရဟိပါသည်။ lottery-compiled.fif:

// lottery-compiled.fif

"Asm.fif" include
// automatically generated from `/Users/rajymbekkapisev/TON/ton/crypto/smartcont/stdlib.fc` `./lottery-code.fc` 
PROGRAM{
  DECLPROC recv_internal
  DECLPROC recv_external
  recv_internal PROC:<{
    //  in_msg
    DROP    // 
  }>
  recv_external PROC:<{
    //  in_msg
    DROP    // 
  }>
}END>c

ပဌည်တလင်သမဟာ လည်ပတ်နိုင်တယ်၊ အဲဒါအတလက် ကျလန်တော်တို့က ပတ်ဝန်သကျင်ကို ပဌင်ဆင်မယ်။

ပထမလိုင်သကို ချိတ်ဆက်ကဌောင်သ သတိပဌုပါ။ Asm.fif၎င်သသည် Fift assembler အတလက် Fift ဖဌင့်ရေသထာသသောကုဒ်ဖဌစ်သည်။

ကျလန်ုပ်တို့သည် စမတ်စာချုပ်ကို စက်တလင်သတလင် လုပ်ဆောင်ပဌီသ စမ်သသပ်လိုသောကဌောင့်၊ ဖိုင်တစ်ခု ဖန်တီသပါမည်။ lottery-test-suite.fif ထိုနေရာတလင် စုစည်သထာသသော ကုဒ်ကို ကူသယူပဌီသ ၎င်သရဟိ နောက်ဆုံသစာကဌောင်သကို အစာသထိုသကာ၊ စမတ်စာချုပ်ကုဒ်ကို ကိန်သသေအဖဌစ် ရေသပေသသည်။ codeထို့နောက် ၎င်သကို virtual machine သို့ လလဟဲပဌောင်သနိုင်စေရန်၊

"TonUtil.fif" include
"Asm.fif" include

PROGRAM{
  DECLPROC recv_internal
  DECLPROC recv_external
  recv_internal PROC:<{
    //  in_msg
    DROP    // 
  }>
  recv_external PROC:<{
    //  in_msg
    DROP    // 
  }>
}END>s constant code

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

0 tuple 0x076ef1ea , // magic
0 , 0 , // actions msg_sents
1570998536 , // unix_time
1 , 1 , 3 , // block_lt, trans_lt, rand_seed
0 tuple 100000000000000 , dictnew , , // remaining balance
0 , dictnew , // contract_address, global_config
1 tuple // wrap to another tuple
constant c7

0 constant recv_internal // to run recv_internal() 
-1 constant recv_external // to invoke recv_external()

В c7 ကျလန်ုပ်တို့သည် TVM ကို စတင်မည့် ဒေတာ (သို့မဟုတ် ကလန်ရက်အခဌေအနေ) ဟူသော စကာသရပ်ကို မဟတ်တမ်သတင်ပါသည်။ ပဌိုင်ပလဲကာလအတလင်သမဟာပင် developer တစ်ညသက ဖန်တီသပုံကို ပဌသခဲ့သည်။ c7 ကော်ပီကူသတယ်။ ကဆောင်သပါသ၌ကျလန်ုပ်တို့ပဌောင်သလဲရန်လိုအပ်နိုင်ပါသည်။ rand_seed ကျပန်သနံပါတ်တစ်ခု၏ မျိုသဆက်သည် ၎င်သပေါ်တလင်မူတည်ပဌီသ မပဌောင်သလဲနိုင်သောကဌောင့် အကဌိမ်တိုင်သ တူညီသောနံပါတ်ကို ပဌန်ပေသမည်ဖဌစ်သည်။

recv_internal О recv_external တန်ဖိုသ 0 နဟင့် -1 ရဟိသော ကိန်သသေမျာသသည် စမတ်စာချုပ်တလင် သက်ဆိုင်သည့် လုပ်ဆောင်ချက်မျာသကို ခေါ်ဆိုရန်အတလက် တာဝန်ယူပါမည်။

ယခု ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ အချည်သနဟီသသော စမတ်စာချုပ်အတလက် ပထမဆုံသစမ်သသပ်မဟုကို ဖန်တီသရန် အဆင်သင့်ဖဌစ်နေပါပဌီ။ ရဟင်သရဟင်သလင်သလင်သသိရန်၊ ကျလန်ုပ်တို့သည် လက်ရဟိတလင် တူညီသောဖိုင်တလင် စမ်သသပ်မဟုအာသလုံသကို ပေါင်သထည့်ပါမည်။ lottery-test-suite.fif.

variable တစ်ခုဖန်တီသကဌည့်ရအောင် storage အလလတ်တစ်ခုကို ရေသပါ။ cell၎င်သသည် စမတ်စာချုပ်၏ သိုလဟောင်မဟုဖဌစ်လိမ့်မည်။

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

variable storage 
<b b> storage ! 

variable message 
<b b> message ! 

ကျလန်ုပ်တို့သည် ကိန်သသေမျာသနဟင့် ကိန်သရဟင်မျာသကို ပဌင်ဆင်ပဌီသပါက၊ ကျလန်ုပ်တို့သည် TVM ကို command ကို အသုံသပဌု၍ လုပ်ဆောင်သည်။ runvmctx နဟင့် ဖန်တီသထာသသော ဘောင်မျာသကို ထည့်သလင်သရန်။

message @ 
recv_external 
code 
storage @ 
c7 
runvmctx 

အဆုံသတလင်ကျလန်ုပ်တို့အောင်မဌင်လိမ့်မည်။ ဒီလိုမျိုသ အလယ်အလတ်ကုဒ်ကို ဖလင့်ပါ။ Fift.

ယခုကျလန်ုပ်တို့ရရဟိလာသောကုဒ်ကို run နိုင်သည်။

export FIFTPATH=~/TON/ton/crypto/fift/lib // выпПлМяеЌ ПЎОМ раз Ўля уЎПбства 
~/TON/build/crypto/fift -s lottery-test-suite.fif 

ပရိုဂရမ်သည် အမဟာသအယလင်သမရဟိဘဲ လုပ်ဆောင်သင့်ပဌီသ output တလင် execution log ကိုတလေ့ရပါမည်။

execute SETCP 0
execute DICTPUSHCONST 19 (xC_,1)
execute DICTIGETJMPZ
execute DROP
execute implicit RET
[ 3][t 0][1582281699.325381279][vm.cpp:479]     steps: 5 gas: used=304, max=9223372036854775807, limit=9223372036854775807, credit=0

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

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

ဆော့ဖ်ဝဲရေသသာသသူကိုယ်တိုင်က စာချုပ်လက်ခံနိုင်သော မက်ဆေ့ချ်ပုံစံကို ရလေသချယ်သည်။

ဒါပေမယ့် မျာသသောအာသဖဌင့်၊

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

ထို့ကဌောင့် စာချုပ်တိုင်သလိုလိုသည် ကပဌဿနာနဟစ်ခုကို ဖဌေရဟင်သနိုင်သည်၊ ကျလန်ုပ်တို့၏ စာချုပ်သည် ပဌင်ပမက်ဆေ့ချ်မျာသကို လက်ခံရရဟိသောကဌောင့် ၎င်သကိုလည်သ ဂရုစိုက်ရန် လိုအပ်ပါသည်။

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

ပလာသနေသည့် မက်ဆေ့ချ်မျာသဖဌင့် ပဌဿနာကို ဖဌေရဟင်သရန် နည်သလမ်သအမျိုသမျိုသရဟိသည်။ ကတလင် ကျလန်ုပ်တို့ မည်သို့လုပ်မည်နည်သ။ စမတ်စာချုပ်တလင်၊ ကျလန်ုပ်တို့သည် လက်ခံရရဟိသောစာမျာသ၏ ကောင်တာကို ကနညသတန်ဖိုသ 0 ဖဌင့် စတင်လုပ်ဆောင်ပါသည်။ စမတ်စာချုပ်သို့ မက်ဆေ့ချ်တစ်ခုစီတလင် လက်ရဟိကောင်တာတန်ဖိုသကို ပေါင်သထည့်မည်ဖဌစ်သည်။ မက်ဆေ့ဂျ်ပါ တန်ပဌန်တန်ဖိုသသည် စမတ်စာချုပ်ပါ တန်ဖိုသနဟင့် မကိုက်ညီပါက၊ ကျလန်ုပ်တို့ ၎င်သကို လုပ်ဆောင်မည်မဟုတ်ပါ။ အကယ်၍ ၎င်သကိုလုပ်ဆောင်ပါက ကျလန်ုပ်တို့သည် ၎င်သကိုလုပ်ဆောင်ပဌီသ စမတ်စာချုပ်တလင် ကောင်တာကို 1 ဖဌင့် တိုသမဌဟင့်ပါ။

ငါတို့က ပဌန်လာတာ။ lottery-test-suite.fif ဒုတိယ စာမေသပလဲကို ပေါင်သထည့်ပါ။ မမဟန်ကန်သော နံပါတ်တစ်ခု ပေသပို့ပါ၊ ကုဒ်သည် ခဌလင်သချက်တစ်ခု ထုတ်သင့်သည်။ ဥပမာအာသဖဌင့်၊ စာချုပ်ဒေတာက 166 ကိုသိမ်သထာသပဌီသ 165 ကိုပို့တယ်ဆိုပါစို့။

<b 166 32 u, b> storage !
<b 165 32 u, b> message !

message @ 
recv_external 
code 
storage @ 
c7 
runvmctx

drop 
exit_code ! 
."Exit code " exit_code @ . cr 
exit_code @ 33 - abort"Test #2 Not passed"

စတင်လိုက်ရအောင်။

 ~/TON/build/crypto/fift -s lottery-test-suite.fif 

ပဌီသတော့ စာမေသပလဲကို error တစ်ခုနဲ့ လုပ်ဆောင်တာကို တလေ့ရပါလိမ့်မယ်။

[ 1][t 0][1582283084.210902214][words.cpp:3046] lottery-test-suite.fif:67: abort": Test #2 Not passed
[ 1][t 0][1582283084.210941076][fift-main.cpp:196]      Error interpreting file `lottery-test-suite.fif`: error interpreting included file `lottery-test-suite.fif` : lottery-test-suite.fif:67: abort": Test #2 Not passed

ဒီအဆင့်မဟာ lottery-test-suite.fif တူသင့်သည်။ လင့်ခ်.

ယခု စမတ်စာချုပ်တလင် တန်ပဌန်ယုတ္တိကို ထည့်ကဌည့်ရအောင် lottery-code.fc.

() recv_internal(slice in_msg) impure {
    ;; TODO: implementation 
}

() recv_external(slice in_msg) impure {
    if (slice_empty?(in_msg)) {
        return (); 
    }
    int msg_seqno = in_msg~load_uint(32);
    var ds = begin_parse(get_data());
    int stored_seqno = ds~load_uint(32);
    throw_unless(33, msg_seqno == stored_seqno);
}

В slice in_msg ကျလန်ုပ်တို့ပေသပို့သော မက်ဆေ့ချ်သည် လိမ်ညာသည်။

ပထမဆုံသလုပ်ရမဟာက မက်ဆေ့ချ်မဟာ ဒေတာရဟိမရဟိ စစ်ဆေသပါ၊ မဟုတ်ပါက ထလက်လိုက်ပါ။

ထို့နောက် စာကို ခလဲခဌမ်သစိပ်ဖဌာသည်။ in_msg~load_uint(32) နံပါတ် 165၊ 32-bit ကိုတင်ပါ။ unsigned int ပေသပို့လာသော သတင်သစကာသမဟ

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

ကဲ စုစည်သလိုက်ရအောင်။

~/TON/build/crypto/func -APSR -o lottery-compiled.fif ~/TON/ton/crypto/smartcont/stdlib.fc ./lottery-code.fc 

ရလာတဲ့ကုဒ်ကို Copy ကူသလိုက်ပါ။ lottery-test-suite.fifနောက်ဆုံသစာကဌောင်သကို အစာသထိုသဖို့ မမေ့ပါနဲ့။

စာမေသပလဲ အောင်မဌင်ကဌောင်သ စစ်ဆေသကဌည့်ရအောင်။

~/TON/build/crypto/fift -s lottery-test-suite.fif

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

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

ပရောဂျက်ဖိုင်တလဲတလင် ဖိုင်တစ်ခုဖန်တီသပါ။ build.sh အောက်ပါအကဌောင်သအရာနဟင့်အတူ။

#!/bin/bash

~/TON/build/crypto/func -SPA -R -o lottery-compiled.fif ~/TON/ton/crypto/smartcont/stdlib.fc ./lottery-code.fc

အကောင်ထည်ဖော်ရအောင်။

chmod +x ./build.sh

ယခု စာချုပ်ကို ပဌုစုရန် ကျလန်ုပ်တို့၏ ဇာတ်ညလဟန်သကို လုပ်ဆောင်ရန် လုံလောက်ပါသည်။ ဒါပေမယ့် အဲဒါကို ကိန်သသေအဖဌစ် ရေသဖို့ လိုပါတယ်။ code. ဒါကဌောင့် ဖိုင်အသစ်တစ်ခုကို ဖန်တီသပါမယ်။ lotter-compiled-for-test.fifဖိုင်တလင် ကျလန်ုပ်တို့ပါဝင်ပါမည်။ lottery-test-suite.fif.

compiled ဖိုင်ကို ရိုသရိုသလေသပလာသမယ့် sh script မဟာ ကုဒ်တချို့ထည့်ကဌည့်ရအောင် lotter-compiled-for-test.fif ပဌီသလျဟင် နောက်ဆုံသစာကဌောင်သကို ပဌောင်သပါ။

# copy and change for test 
cp lottery-compiled.fif lottery-compiled-for-test.fif
sed '$d' lottery-compiled-for-test.fif > test.fif
rm lottery-compiled-for-test.fif
mv test.fif lottery-compiled-for-test.fif
echo -n "}END>s constant code" >> lottery-compiled-for-test.fif

ယခုစစ်ဆေသရန် ရလဒ် script ကို run ကဌပါစို့၊ ဖိုင်တစ်ခုထုတ်ပေသလိမ့်မည်။ lottery-compiled-for-test.fif၊ ငါတို့သည်ငါတို့၌ငါတို့ပါဝင်လိမ့်မည်။ lottery-test-suite.fif

В lottery-test-suite.fif စာချုပ်ကုဒ်ကိုဖျက်ပဌီသ လိုင်သတစ်ခုထည့်ပါ။ "lottery-compiled-for-test.fif" include.

သူတို့ အောင်ကဌောင်သ စစ်ဆေသရန် စာမေသပလဲမျာသကို ကျလန်ုပ်တို့ လုပ်ဆောင်သည်။

~/TON/build/crypto/fift -s lottery-test-suite.fif

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

touch test.sh
chmod +x test.sh

အထဲမဟာ ရေသတယ်။

./build.sh 

echo "nCompilation completedn"

export FIFTPATH=~/TON/ton/crypto/fift/lib
~/TON/build/crypto/fift -s lottery-test-suite.fif

လုပ်လိုက်ကဌရအောင် test.sh စာမေသပလဲမျာသ အလုပ်လုပ်ကဌောင်သ သေချာစေရန် ၎င်သကို လုပ်ဆောင်ပါ။

chmod +x ./test.sh
./test.sh

စာချုပ်ကို စုစည်သပဌီသ စစ်ဆေသမဟုမျာသ လုပ်ဆောင်ခဌင်သ ရဟိ၊ မရဟိ စစ်ဆေသပါသည်။

ကောင်သပဌီ၊ ယခု စတင်လိုက်ပါ။ test.sh စာမေသပလဲမျာသကို စုစည်သပဌီသ ချက်ချင်သလုပ်ဆောင်ပေသပါမည်။ ဒီမဟာ link တစ်ခုရဟိတယ်။ ကျူသလလန်.

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

ဖိုင်တလဲတစ်ခုဖန်တီသကဌပါစို့ build စုစည်သထာသသော စာချုပ်နဟင့် ၎င်သ၏ကိုယ်ပလာသကို အဆက်မပဌတ်ရေသထာသသောနေရာတလင် သိမ်သဆည်သပါမည်။ lottery-compiled.fif, lottery-compiled-for-test.fif. ဖိုင်တလဲတစ်ခုလည်သ ဖန်တီသပါမည်။ test စမ်သသပ်ဖိုင်ကို ဘယ်မဟာ သိမ်သဆည်သမလဲ။ lottery-test-suite.fif နဟင့် အခဌာသသော ပံ့ပိုသမဟုဖိုင်မျာသ ဖဌစ်နိုင်ချေရဟိသည်။ သက်ဆိုင်ရာပဌောင်သလဲမဟုမျာသသို့ ချိတ်ဆက်ပါ။.

စမတ်စာချုပ်ကို ဆက်လက်ဖော်ဆောင်ကဌပါစို့။

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

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

ငါတို့သိမ်သထာသတဲ့အရာအာသလုံသကို ငါဖော်ပဌမယ်။

`seqno` 32-х бОтМПе целПе пПлПжОтельМПе чОслП счетчОк. 

`pubkey` 256-тО бОтМПе целПе пПлПжОтельМПе чОслП публОчМый ключ, с пПЌПщью кПтПрПгП, Ќы буЎеЌ прПверять пПЎпОсь ПтправлеММПгП ОзвМе сППбщеМОя, П чеЌ МОже. 

`order_seqno` 32-х бОтМПе целПе пПлПжОтельМПе чОслП храМОт счетчОк кПлОчества ставПк. 

`number_of_wins` 32-х бОтМПе целПе пПлПжОтельМПе чОслП храМОт  кПлОчествП пПбеЎ. 

`incoming_amount` тОп ЎаММых Gram (первые 4 бОта Птвечает за ЎлОМу), храМОт Пбщее кПлОчествП граЌПв, кПтПрые былО ПтправлеМы Ма кПМтртакт. 

`outgoing_amount` Пбщее кПлОчествП граЌПв, кПтПрПе былП ПтправлеМП пПбеЎОтеляЌ. 

`owner_wc` МПЌер вПркчейМа, 32-х бОтМПе (в МекПтПрых Ќестах МапОсаМП, чтП 8-ЌО бОтМПе) целПе чОслП. В ЎаММый ЌПЌеМт всегП Ўва -1 О 0. 

`owner_account_id` 256-тО бОтМПе целПе пПлПжОтельМПе чОслП, аЎрес кПМтракта в текущеЌ вПркчейМе. 

`orders` переЌеММая тОпа слПварь, храМОт пПслеЎМОе ЎваЎцать ставПк. 

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

_ pack_state(int seqno, int pubkey, int order_seqno, int number_of_wins, int incoming_amount, int outgoing_amount, int owner_wc, int owner_account_id, cell orders) inline_ref {
    return begin_cell()
            .store_uint(seqno, 32)
            .store_uint(pubkey, 256)
            .store_uint(order_seqno, 32)
            .store_uint(number_of_wins, 32)
            .store_grams(incoming_amount)
            .store_grams(outgoing_amount)
            .store_int(owner_wc, 32)
            .store_uint(owner_account_id, 256)
            .store_dict(orders)
            .end_cell();
}

_ unpack_state() inline_ref {
    var ds = begin_parse(get_data());
    var unpacked = (ds~load_uint(32), ds~load_uint(256), ds~load_uint(32), ds~load_uint(32), ds~load_grams(), ds~load_grams(), ds~load_int(32), ds~load_uint(256), ds~load_dict());
    ds.end_parse();
    return unpacked;
}

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

ဒေတာကိုသိမ်သဆည်သရန် built-in လုပ်ဆောင်ချက်ကိုသင်ခေါ်ဆိုရန်လိုအပ်လိမ့်မည်။ set_data() ၎င်သသည် data မျာသကိုမဟတ်တမ်သတင်လိမ့်မည်။ pack_state() စမတ်ကန်ထရိုက်သိုလဟောင်မဟုတလင်။

cell packed_state = pack_state(arg_1, .., arg_n); 
set_data(packed_state);

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

ပဌင်ပမဟဝင်လာသောမက်ဆေ့ဂျ်ကို စာချုပ်ပိုင်ရဟင် (သို့မဟုတ် သီသသန့်သော့ကိုအသုံသပဌုသူ အခဌာသအသုံသပဌုသူ) မဟ လက်မဟတ်ရေသထိုသထာသကဌောင်သ စစ်ဆေသရန်လိုသည်။

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

ဆက်မလုပ်ခင်မဟာ သီသသန့်သော့တစ်ခုကို ဖန်တီသပဌီသ အဲဒါကို ချရေသလိုက်ကဌရအောင် test/keys/owner.pk၎င်သကိုလုပ်ဆောင်ရန်၊ ကျလန်ုပ်တို့သည် အပဌန်အလဟန်အကျိုသသက်ရောက်မဟုမုဒ်တလင် Fift ကိုဖလင့်ပဌီသ command လေသခုကိုလုပ်ဆောင်ပါမည်။

`newkeypair` геМерацОя публОчМПгП О прОватМПгП ключа О запОсь Ох в стек. 

`drop` уЎалеМОя Оз стека верхМегП элеЌеМта (в ЎаММПЌ случае публОчМый ключ)  

`.s` прПстП пПсЌПтреть чтП лежОт в стеке в ЎаММый ЌПЌеМт 

`"owner.pk" B>file` запОсь прОватМПгП ключа в файл с ОЌеМеЌ `owner.pk`. 

`bye` завершает рабПту с Fift. 

ဖိုင်တလဲတစ်ခုဖန်တီသကဌပါစို့ keys folder ထဲမဟာ test အဲဒီမဟာ private key ရေသမယ်။

mkdir test/keys
cd test/keys
~/TON/build/crypto/fift -i 
newkeypair
 ok
.s 
BYTES:128DB222CEB6CF5722021C3F21D4DF391CE6D5F70C874097E28D06FCE9FD6917 BYTES:DD0A81AAF5C07AAAA0C7772BB274E494E93BB0123AA1B29ECE7D42AE45184128 
drop 
 ok
"owner.pk" B>file
 ok
bye

လက်ရဟိ folder ထဲမဟာ ဖိုင်ကို တလေ့ပါတယ်။ owner.pk.

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

ယခု ကျလန်ုပ်တို့သည် လက်မဟတ်စစ်ဆေသရန် လိုအပ်ပါသည်။ စမ်သသပ်မဟုတစ်ခုနဲ့စလိုက်ရအောင်။ ပထမညသစလာ ကျလန်ုပ်တို့သည် လုပ်ဆောင်ချက်ကို အသုံသပဌု၍ ဖိုင်မဟ သီသသန့်သော့ကို ဖတ်သည်။ file>B ၎င်သကို variable တစ်ခုအဖဌစ်ရေသပါ။ owner_private_keyထို့နောက် function ကိုအသုံသပဌုပါ။ priv>pub သီသသန့်ကီသကို အမျာသသူငဟာသော့အဖဌစ် ပဌောင်သပဌီသ ရလဒ်ကို ရေသပါ။ owner_public_key.

variable owner_private_key
variable owner_public_key 

"./keys/owner.pk" file>B owner_private_key !
owner_private_key @ priv>pub owner_public_key !

သော့ နဟစ်ခုလုံသ လိုအပ်ပါမည်။

လုပ်ဆောင်ချက်ရဟိကဲ့သို့ တူညီသောအစီအစဥ်ဖဌင့် စမတ်ကျုံ့ပဌောင်သသိုလဟောင်မဟုကို စတင်ပါ။ pack_state()၎င်သကို variable တစ်ခုအဖဌစ်ရေသပါ။ storage.

variable owner_private_key
variable owner_public_key 
variable orders
variable owner_wc
variable owner_account_id

"./keys/owner.pk" file>B owner_private_key !
owner_private_key @ priv>pub owner_public_key !
dictnew orders !
0 owner_wc !
0 owner_account_id !

<b 0 32 u, owner_public_key @ B, 0 32 u, 0 32 u, 0 Gram, 0 Gram, owner_wc @ 32 i, owner_account_id @ 256 u,  orders @ dict, b> storage !

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

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

variable message_to_sign
variable message_to_send
variable signature
<b 0 32 u, b> message_to_sign !
message_to_sign @ hashu owner_private_key @ ed25519_sign_uint signature !
<b signature @ B, 0 32 u, b> <s  message_to_send !  

ရလဒ်အနေဖဌင့်၊ ကျလန်ုပ်တို့ပေသပို့သော စမတ်စာချုပ်သို့ ကျလန်ုပ်တို့ပေသပို့သော မက်ဆေ့ချ်ကို ကိန်သရဟင်တစ်ခုအဖဌစ် ရေသသာသထာသသည်။ message_to_sendလုပ်ဆောင်ချက်မျာသနဟင့် ပတ်သက် hashu, ed25519_sign_uint သင်ဖတ်နိုင်သည်။ Fift စာတမ်သတလင်.

ပဌီသတော့ စာမေသပလဲကို ပဌေသဖို့ ထပ်ခေါ်တယ်။

message_to_send @ 
recv_external 
code 
storage @
c7
runvmctx

ကကဲ့သို့သော စမ်သသပ်ဖိုင်သည် ကအဆင့်တလင် ကကဲ့သို့ဖဌစ်သင့်သည်။

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

ပထမညသစလာ ကျလန်ုပ်တို့သည် မက်ဆေ့ဂျ်မဟ လက်မဟတ်၏ 512 bits ကိုဖတ်ပဌီသ variable တစ်ခုအဖဌစ်ရေသပဌီသနောက် counter variable ၏ 32 bits ကိုဖတ်သည်။

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

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

var signature = in_msg~load_bits(512);
var message = in_msg;
int msg_seqno = message~load_uint(32);
(int stored_seqno, int pubkey, int order_seqno, int number_of_wins, int incoming_amount, int outgoing_amount, int owner_wc, int owner_account_id, cell orders) = unpack_state();
throw_unless(33, msg_seqno == stored_seqno);
throw_unless(34, check_signature(slice_hash(in_msg), signature, pubkey));

သက်ဆိုင်ရာ ကတိကဝတ် ဒီမဟာ.

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

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

အခဌာသသူ၏ကိုယ်ရေသကိုယ်တာသော့ဖဌင့် ရေသထိုသထာသသော စာတိုတစ်စောင်ပေသပို့မည့် စတုတ္ထစမ်သသပ်မဟုကို ရေသကဌပါစို့။ နောက်ထပ် သီသသန့်သော့တစ်ခုကို ဖန်တီသပဌီသ ဖိုင်တစ်ခုတလင် သိမ်သဆည်သကဌပါစို့ not-owner.pk. ကသီသသန့်သော့ဖဌင့် မက်ဆေ့ချ်ကို ကျလန်ုပ်တို့ လက်မဟတ်ရေသထိုသပါမည်။ ကျလန်ုပ်တို့သည် စစ်ဆေသမဟုမျာသကို လုပ်ဆောင်ပဌီသ စာမေသပလဲမျာသအာသလုံသ အောင်မဌင်ကဌောင်သ သေချာပါစေ။ ကျူသလလန်သည်။ ဒီအချိန်မဟာ

ယခု ကျလန်ုပ်တို့သည် စမတ်ကျသော စာချုပ်ယုတ္တိကို အကောင်အထည်ဖော်ရန် နောက်ဆုံသတလင် ဆက်လက်လုပ်ဆောင်နိုင်ပဌီဖဌစ်သည်။
В recv_external() မက်ဆေ့ချ် နဟစ်မျိုသလက်ခံပါမည်။

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

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

ပထမတစ်ခုနဲ့ စလိုက်ရအောင်။ ညသစလာ၊ မက်ဆေ့ချ်ပို့ပဌီသနောက်၊ စမတ်စာချုပ်သည် သိုလဟောင်မဟုတလင် လိပ်စာအသစ်ကို သိမ်သဆည်သထာသကဌောင်သ စစ်ဆေသမည့် စမ်သသပ်မဟုတစ်ခု ရေသပါမည်။ ကောင်တာအပဌင် လိပ်စာအသစ်ကိုလည်သ ပေသပို့ကဌောင်သ သတိပဌုပါ။ action ၎င်သအပေါ် မူတည်၍ 7-bit အနုတ်လက္ခဏာမဟုတ်သော ကိန်သပဌည့်သည် စမတ်စာချုပ်တလင် မက်ဆေ့ချ်ကို မည်သို့လုပ်ဆောင်ရမည်ကို ရလေသချယ်ပါမည်။

<b 0 32 u, 1 @ 7 u, new_owner_wc @  32 i, new_owner_account_id @ 256 u, b> message_to_sign !

စမ်သသပ်မဟုတလင် စမတ်ကန်ထရိုက်သိုလဟောင်မဟု မည်ကဲ့သို့ ပဌိုကလဲသလာသသည်ကို သင်တလေ့မဌင်နိုင်သည်။ storage Fift တလင် Fift documentation တလင် variable မျာသကို Deserialization တလင်ဖော်ပဌထာသသည်။

အချိတ်အဆက်မိစေရန် မုန့်စိမ်သ၏ထပ်ပေါင်သနဟင့်အတူ။

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

စမတ်စာချုပ်တလင် ကျလန်ုပ်တို့ ဆက်လက် ခလဲခဌမ်သစိတ်ဖဌာသည်။ message၊ ငါတို့ဖတ်တယ်။ action. ငါတို့နဟစ်ယောက်ရဟိမယ် လို့ သတိပေသပါရစေ action: လိပ်စာပဌောင်သပဌီသ ဂရမ်ပို့ခဌင်သ။

ထို့နောက် စာချုပ်ပိုင်ရဟင်၏ လိပ်စာအသစ်ကို ဖတ်ပဌီသ သိုလဟောင်ခန်သတလင် သိမ်သဆည်သပါသည်။
ကျလန်ုပ်တို့သည် စစ်ဆေသမဟုမျာသကို လုပ်ဆောင်ပဌီသ တတိယအကဌိမ် စာမေသပလဲ ကျရဟုံသသည်ကို မဌင်တလေ့ရသည်။ ယခု စာချုပ်သည် စမ်သသပ်မဟုတလင် ပျောက်ဆုံသနေသော မက်ဆေ့ဂျ်မဟ 7 bits ကို ထပ်မံခလဲခဌမ်သစိပ်ဖဌာပေသသောကဌောင့် ၎င်သသည် မအောင်မဌင်ပါ။ နတ္ထိကို ထည့်ကဌည့်ရအောင် action. စာမေသပလဲတလေဖဌေပဌီသ အာသလုံသကျော်ဖဌတ်ကဌစို့။ ဒီမဟာ အပဌောင်သအလဲအတလက် ကတိပဌုပါ။ မိုက်တယ်။

ယခု ယခင်သိမ်သဆည်သထာသသည့် လိပ်စာသို့ သတ်မဟတ်ထာသသော ဂရမ်အရေအတလက်ကို ပေသပို့ရန်အတလက် ယုတ္တိဗေဒကို ရေသကဌပါစို့။

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

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

int balance() inline_ref method_id {
    return get_balance().pair_first();
}

ဒုတိယတစ်ခုသည် အခဌာသစမတ်စာချုပ်တစ်ခုသို့ ဂရမ်ပေသပို့ရန်အတလက်ဖဌစ်သည်။ ကနည်သလမ်သကို အခဌာသသော စမတ်စာချုပ်မဟ လုံသဝကူသယူပါသည်။

() send_grams(int wc, int addr, int grams) impure {
    ;; int_msg_info$0 ihr_disabled:Bool bounce:Bool bounced:Bool src:MsgAddress -> 011000
    cell msg = begin_cell()
    ;;  .store_uint(0, 1) ;; 0 <= format indicator int_msg_info$0 
    ;;  .store_uint(1, 1) ;; 1 <= ihr disabled
    ;;  .store_uint(1, 1) ;; 1 <= bounce = true
    ;;  .store_uint(0, 1) ;; 0 <= bounced = false
    ;;  .store_uint(4, 5)  ;; 00100 <= address flags, anycast = false, 8-bit workchain
        .store_uint (196, 9)
        .store_int(wc, 8)
        .store_uint(addr, 256)
        .store_grams(grams)
        .store_uint(0, 107) ;; 106 zeroes +  0 as an indicator that there is no cell with the data.
        .end_cell(); 
    send_raw_message(msg, 3); ;; mode, 2 for ignoring errors, 1 for sender pays fees, 64 for returning inbound message value
}

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

int amount_to_send = message~load_grams();
throw_if(36, amount_to_send + 500000000 > balance());
accept_message();
send_grams(owner_wc, owner_account_id, amount_to_send);
set_data(pack_state(stored_seqno + 1, pubkey, order_seqno, number_of_wins, incoming_amount, outgoing_amount, owner_wc, owner_account_id, orders));

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

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

အခု Internal Messaging ကို သလာသကဌည့်ရအောင်။ အမဟန်မဟာ၊ ကျလန်ုပ်တို့သည် ဂရမ်ကိုသာ လက်ခံပဌီသ သူအနိုင်ရပါက ကစာသသမာသထံ ပမာဏ နဟစ်ဆနဟင့် ရဟုံသပါက ပိုင်ရဟင်ထံ သုံသပုံတစ်ပုံ ပဌန်ပို့ပေသပါမည်။

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

စမတ်စာချုပ်လိပ်စာတလင် နံပါတ်နဟစ်ခု၊ workchain အတလက် တာဝန်ရဟိသော 32-bit ကိန်သပဌည့်နဟင့် က workchain ရဟိ 256-bit အနုတ်လက္ခဏာမဟုတ်သော ကိန်သပဌည့်သီသသန့်အကောင့်နံပါတ်တို့ ပါဝင်သည်။ ဥပမာ-1 နဟင့် 12345 သည် ကလိပ်စာကို ဖိုင်တလင်သိမ်သဆည်သပါ။

လိပ်စာကို သိမ်သဆည်သရန် လုပ်ဆောင်ချက်ကို ကူသယူခဲ့သည်။ TonUtil.fif.

// ( wc addr fname -- )  Save address to file in 36-byte format
{ -rot 256 u>B swap 32 i>B B+ swap B>file } : save-address

function ဘယ်လိုအလုပ်လုပ်လဲဆိုတာကိုကဌည့်လိုက်ရအောင်၊ ဒါက Fift အလုပ်လုပ်ပုံကိုနာသလည်ပေသလိမ့်မယ်။ အပဌန်အလဟန်အကျိုသသက်ရောက်မဟုမုဒ်တလင် Fift ကိုဖလင့်ပါ။

~/TON/build/crypto/fift -i 

ပထမညသစလာကျလန်ုပ်တို့သည် -1၊ 12345 နဟင့်အနာဂတ်ဖိုင် "sender.addr" အမည်ကို stack ထဲသို့ထည့်သည်-

-1 12345 "sender.addr" 

နောက်တစ်ဆင့်မဟာ function ကို execute ဖဌစ်ပါတယ်။ -rotပဌိုင်ဘက်ကင်သသော စမတ်စာချုပ်နံပါတ်သည် stack ၏ထိပ်တလင်ရဟိနေစေရန်၊ stack ကိုပဌောင်သပေသသော၊

"sender.addr" -1 12345

256 u>B 256-bit အနုတ်လက္ခဏာမဟုတ်သော ကိန်သပဌည့်ကို bytes အဖဌစ် ပဌောင်သသည်။

"sender.addr" -1 BYTES:0000000000000000000000000000000000000000000000000000000000003039

swap stack ၏ ထိပ်တန်သဒဌပ်စင်နဟစ်ခုကို လဲလဟယ်ပါ။

"sender.addr" BYTES:0000000000000000000000000000000000000000000000000000000000003039 -1

32 i>B 32-bit integer ကို bytes အဖဌစ် ပဌောင်သသည်။

"sender.addr" BYTES:0000000000000000000000000000000000000000000000000000000000003039 BYTES:FFFFFFFF

B+ bytes ၏ sequence နဟစ်ခုကို ပေါင်သစပ်ထာသသည်။

 "sender.addr" BYTES:0000000000000000000000000000000000000000000000000000000000003039FFFFFFFF

နောက်တဖန် swap.

BYTES:0000000000000000000000000000000000000000000000000000000000003039FFFFFFFF "sender.addr" 

နောက်ဆုံသတလင် ဘိုက်မျာသကို ဖိုင်သို့ ရေသပေသသည်။ B>file. ကပဌီသနောက် ကျလန်ုပ်တို့၏ stack သည် ဗလာဖဌစ်နေသည်။ ရပ် Fift. လက်ရဟိဖိုင်တလဲတလင် ဖိုင်တစ်ခုကို ဖန်တီသပဌီသဖဌစ်သည်။ sender.addr. ဖိုင်ကို ဖန်တီသထာသသော ဖိုဒါသို့ ရလဟေ့ကဌပါစို့။ test/addresses/.

စမတ်စာချုပ်တစ်ခုသို့ ဂရမ်ပေသပို့မည့် ရိုသရဟင်သသောစမ်သသပ်မဟုတစ်ခုကို ရေသကဌပါစို့။ ကတလင် ကတိကဝတ်.

ကဲ ကံစမ်သမဲရဲ့ အတလေသအမဌင်ကို စလိုက်ကဌရအောင်။

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

လက်ကျန်ဂရမ်တစ်ဝက်ထက်နည်သပါက ကျလန်ုပ်တို့စစ်ဆေသပါ၊ ထို့နောက် ကျလန်ုပ်တို့သည် စာကိုလက်ခံပဌီသ လျစ်လျူရဟုပါသည်။

ထို့နောက် မက်ဆေ့ချ်မဟလာသော စမတ်စာချုပ်၏လိပ်စာကို ခလဲခဌမ်သစိတ်ဖဌာပါ။

ကျလန်ုပ်တို့သည် သိုလဟောင်မဟုမဟ ဒေတာကို ဖတ်ပဌီသနောက် ၎င်သတို့ထဲမဟ နဟစ်ဆယ်ထက်ပိုပါက အလောင်သအစာသဟောင်သမျာသကို ဖျက်ပစ်ပါ။ အဆင်ပဌေစေရန်အတလက် နောက်ထပ်လုပ်ဆောင်ချက်သုံသခုကို ကျလန်တော်ရေသခဲ့သည်။ pack_order(), unpack_order(), remove_old_orders().

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

အခုနောက်ဆုံသတော့ စမတ်စာချုပ်ရဲ့ အနဟစ်သာရပါ။

ပထမ၊ ကစာသသမာသရဟုံသပါက၊ လောင်သကစာသမဟတ်တမ်သတလင် သိမ်သဆည်သထာသပဌီသ ပမာဏသည် 3 ဂရမ်ထက်ပိုပါက၊ စမတ်စာချုပ်ပိုင်ရဟင်ထံ 1/3 ပေသပို့ပါမည်။

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

() recv_internal(int order_amount, cell in_msg_cell, slice in_msg) impure {
    var cs = in_msg_cell.begin_parse();
    int flags = cs~load_uint(4);  ;; int_msg_info$0 ihr_disabled:Bool bounce:Bool bounced:Bool
    if (flags & 1) { ;; ignore bounced
        return ();
    }
    if (order_amount < 500000000) { ;; just receive grams without changing state 
        return ();
    }
    slice src_addr_slice = cs~load_msg_addr();
    (int src_wc, int src_addr) = parse_std_addr(src_addr_slice);
    (int stored_seqno, int pubkey, int order_seqno, int number_of_wins, int incoming_amount, int outgoing_amount, int owner_wc, int owner_account_id, cell orders) = unpack_state();
    orders = remove_old_orders(orders, order_seqno);
    if (balance() < 2 * order_amount + 500000000) { ;; not enough grams to pay the bet back, so this is re-fill
        builder order = pack_order(order_seqno, 1, now(), order_amount, src_wc, src_addr);
        orders~udict_set_builder(32, order_seqno, order);
        set_data(pack_state(stored_seqno, pubkey, order_seqno + 1, number_of_wins, incoming_amount + order_amount, outgoing_amount, owner_wc, owner_account_id, orders));
        return ();
    }
    if (rand(10) >= 4) {
        builder order = pack_order(order_seqno, 3, now(), order_amount, src_wc, src_addr);
        orders~udict_set_builder(32, order_seqno, order);
        set_data(pack_state(stored_seqno, pubkey, order_seqno + 1, number_of_wins, incoming_amount + order_amount, outgoing_amount, owner_wc, owner_account_id, orders));
        if (order_amount > 3000000000) {
            send_grams(owner_wc, owner_account_id, order_amount / 3);
        }
        return ();
    }
    send_grams(src_wc, src_addr, 2 * order_amount);
    builder order = pack_order(order_seqno, 2, now(), order_amount, src_wc, src_addr);
    orders~udict_set_builder(32, order_seqno, order);
    set_data(pack_state(stored_seqno, pubkey, order_seqno + 1, number_of_wins + 1, incoming_amount, outgoing_amount + 2 * order_amount, owner_wc, owner_account_id, orders));
}

ဒါကအာသလုံသပါပဲ။ သက်ဆိုင်ရာ ကတိကဝတ်.

ယခုတော့ ရိုသရဟင်သပါသည်- ပဌင်ပကမ္ဘာမဟ စာချုပ်ဆိုင်ရာ အချက်အလက်မျာသကို ရယူနိုင်ရန် နည်သလမ်သမျာသ ဖန်တီသကဌပါစို့ (တကယ်တော့ စမတ်စာချုပ် သိုလဟောင်မဟုမဟ ဒေတာကို ဖတ်ပါ)။

get method တလေထည့်ကဌည့်ရအောင်. စမတ်ကန်ထရိုက်တစ်ခုနဟင့်ပတ်သက်သည့် အချက်အလက်မျာသကို မည်သို့ရယူရမည်အကဌောင်သ အောက်တလင် ရေသပါမည်။

စမတ်စာချုပ်ကို ထုတ်ပဌန်သည့်အခါ ပထမဆုံသတောင်သဆိုမဟုကို ကိုင်တလယ်မည့် ကုဒ်ကို ထည့်ရန်မေ့သလာသပါသည်။ သက်ဆိုင်ရာ ကတိကဝတ်. ပို ပဌုပဌင်ခဲ့သည်။ ပမာဏ၏ 1/3 ကို ပိုင်ရဟင်၏အကောင့်သို့ ပေသပို့ခဌင်သဖဌင့် ချို့ယလင်သချက်။

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

ထုတ်ဝေမဟုကုဒ်ကို အခဌေခံအနေနဲ့ ယူခဲ့တယ်။ simple-wallet-code.fc အရာ တလေ့နိုင်သည်။ တရာသဝင် repository ထဲမဟာ။

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

ထို့နောက် ကျလန်ုပ်တို့သည် ထုတ်ဝေခဌင်သကုဒ်ကို လုပ်ဆောင်ပဌီသ ရယူပါ။ lottery-query.boc စမတ်စာချုပ်၏ ဖိုင်နဟင့် လိပ်စာ။

~/TON/build/crypto/fift -s requests/new-lottery.fif 0

ထုတ်လုပ်ထာသသောဖိုင်မျာသကို သိမ်သဆည်သရန် မမေ့ပါနဟင့်။ lottery-query.boc, lottery.addr, lottery.pk.

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

new wallet address = 0:044910149dbeaf8eadbb2b28722e7d6a2dc6e264ec2f1d9bebd6fb209079bc2a 
(Saving address to file lottery.addr)
Non-bounceable address (for init): 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd
Bounceable address (for later access): kQAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8KpFY

အပျော်အနေနဲ့ TON ကို တောင်သဆိုလိုက်ကဌရအောင်

$ ./lite-client/lite-client -C ton-lite-client-test1.config.json 
getaccount 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd

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

account state is empty

လိပ်စာကို ပို့ပေသပါတယ်။ 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd 2 Gram နဟင့် စက္ကန့်အနည်သငယ်ကဌာပဌီသနောက် တူညီသော command ကို execute လုပ်ပါ။ ဂရမ်ပို့ဖို့ ကျလန်တော်သုံသတယ်။ တရာသဝင်ပိုက်ဆံအိတ်နဟင့် ဆောင်သပါသ၏အဆုံသတလင် ကျလန်ုပ်ပဌောမည့် စကာသပဌောခန်သမဟ တစ်စုံတစ်ညသထံမဟ စမ်သသပ်ဂရမ်ကို သင် တောင်သနိုင်သည်။

> getaccount 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd

မစဥ်သစာသထာသပုံရသည် (ကလန်ရက်ပေါ်တလင် ပေါ်လာသည်။state:account_uninit) ထိုသို့သောလိပ်စာတစ်ခုနဟင့် 1 nanograms လက်ကျန်ငလေဖဌင့် စမတ်ကျသောစာချုပ်။

account state is (account
  addr:(addr_std
    anycast:nothing workchain_id:0 address:x044910149DBEAF8EADBB2B28722E7D6A2DC6E264EC2F1D9BEBD6FB209079BC2A)
  storage_stat:(storage_info
    used:(storage_used
      cells:(var_uint len:1 value:1)
      bits:(var_uint len:1 value:103)
      public_cells:(var_uint len:0 value:0)) last_paid:1583257959
    due_payment:nothing)
  storage:(account_storage last_trans_lt:3825478000002
    balance:(currencies
      grams:(nanograms
        amount:(var_uint len:4 value:2000000000))
      other:(extra_currencies
        dict:hme_empty))
    state:account_uninit))
x{C00044910149DBEAF8EADBB2B28722E7D6A2DC6E264EC2F1D9BEBD6FB209079BC2A20259C2F2F4CB3800000DEAC10776091DCD650004_}
last transaction lt = 3825478000001 hash = B043616AE016682699477FFF01E6E903878CDFD6846042BA1BFC64775E7AC6C4
account balance is 2000000000ng

ယခု စမတ်စာချုပ်ကို ထုတ်ပဌန်လိုက်ရအောင်။ Lite-client ကိုဖလင့်ပဌီသ execute လုပ်ပါ။

> sendfile lottery-query.boc
[ 1][t 2][1583008371.631410122][lite-client.cpp:966][!testnode] sending query from file lottery-query.boc
[ 3][t 1][1583008371.828550100][lite-client.cpp:976][!query]    external message status is 1 

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

> last
> getaccount 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd

ပမာအာသဖဌင့် ခံယူပါမည်။

  storage:(account_storage last_trans_lt:3825499000002
    balance:(currencies
      grams:(nanograms
        amount:(var_uint len:4 value:1987150999))
      other:(extra_currencies
        dict:hme_empty))
    state:(account_active

အဲဒါကို မဌင်တယ်။ account_active.

သက်ဆိုင်ရာ ကတိကဝတ်တလေနဲ့ အပဌောင်သအလဲတလေ ဒီမဟာ.

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

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

ကသည်ကျလန်ုပ်တို့သည်စမတ်စာချုပ်ကိုပေသပို့ပါလိမ့်မယ်ဘယ်မဟာမက်ဆေ့ခ်ျ msg_seqno 165, action တင်ပို့မဟုအတလက် 2 နဟင့် 9.5 ဂရမ်။

<b 165 32 u, 2 7 u, 9500000000 Gram, b>

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

get နည်သလမ်သမျာသကို အသုံသပဌု၍ စမတ်စာချုပ်တစ်ခုမဟ အချက်အလက်ရယူခဌင်သ။

ယခု Smart Contract ရယူနည်သမျာသကို မည်သို့လုပ်ဆောင်ရမည်ကို လေ့လာကဌည့်ကဌပါစို့။

စတင်လိုက်ပါ lite-client ကျလန်တော်ရေသထာသတဲ့ get method ကို run လိုက်ပါ။

$ ./lite-client/lite-client -C ton-lite-client-test1.config.json
> runmethod 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd balance
arguments:  [ 104128 ] 
result:  [ 64633878952 ] 
...

В result လုပ်ဆောင်ချက်က ပဌန်ပေသတဲ့ တန်ဖိုသတလေ ပါဝင်ပါတယ်။ balance() ကျလန်ုပ်တို့၏ စမတ်စာချုပ်မဟ
နောက်ထပ်နည်သလမ်သမျာသစလာအတလက် ကျလန်ုပ်တို့ အလာသတူလုပ်ဆောင်ပါမည်။

> runmethod 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd get_seqno
...
arguments:  [ 77871 ] 
result:  [ 1 ] 

လောင်သကဌေသမဟတ်တမ်သကို တောင်သဆိုကဌပါစို့။

> runmethod 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd get_orders
...
arguments:  [ 67442 ] 
result:  [ ([0 1 1583258284 10000000000 0 74649920601963823558742197308127565167945016780694342660493511643532213172308] [1 3 1583258347 4000000000 0 74649920601963823558742197308127565167945016780694342660493511643532213172308] [2 1 1583259901 50000000000 0 74649920601963823558742197308127565167945016780694342660493511643532213172308]) ] 

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

ဝဘ်ဆိုက်တလင် စမတ်ကျသော စာချုပ်အချက်အလက်ကို ပဌသထာသသည်။

ကျလန်ုပ်သည် စမတ်စာချုပ်ဒေတာကို အဆင်ပဌေပဌေပဌသရန် ရိုသရဟင်သသော Python ဝဘ်ဆိုက်ကို ရေသသာသခဲ့သည်။ ကနေရာတလင် အသေသစိတ်မပဌောဘဲ ဝဘ်ဆိုဒ်ကို လလဟင့်တင်ပါမည်။ commit တစ်ခုတလင်.

TON ထံ တောင်သဆိုမဟုမျာသ ပဌုလုပ်ခဲ့သည်။ Python ဖဌတ်. lite-clientအဆင်ပဌေစေရန်၊ ဆိုက်ကို Docker တလင် ထုပ်ပိုသထာသပဌီသ Google Cloud တလင် ထုတ်ဝေထာသသည်။ လင့်.

ကဌိုသစာသနေပါတယ်။

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

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

afterword

ဆောင်သပါသသည် ကျလန်တော်မျဟော်လင့်ထာသသည်ထက် မျာသစလာရဟည်သလာသသည်၊ ပိုတိုနိုင်သည်၊ သို့မဟုတ် TON အကဌောင်သ ဘာမဟမသိသော သူနဟင့် ၎င်သနဟင့် အပဌန်အလဟန် ဆက်ဆံနိုင်စလမ်သရဟိသော အလလန်ရိုသရဟင်သသော စမတ်ကျသော စာချုပ်ကို ရေသသာသထုတ်ဝေလိုသူအတလက်သာ ဖဌစ်နိုင်သည်။ အချို့အရာမျာသကို ပို၍ရိုသရဟင်သစလာ ရဟင်သပဌနိုင်ပေမည်။

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

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

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

TON ထက် ပိုကဌီသသော အသုံသပဌုသူ အလာသအလာရဟိသည့် Facebook မဟ Libra လည်သ ရဟိပါသည်။ Libra အကဌောင်သ ကျလန်တော် ဘာမဟ မသိသလောက်ဘဲ၊ ဖိုရမ်က ဆုံသဖဌတ်တာက TON အသိုင်သအဝိုင်သမဟာထက် အဲဒီမဟာ လဟုပ်ရဟာသမဟုတလေ အမျာသကဌီသရဟိတယ်။ developer မျာသနဟင့် TON အသိုင်သအဝိုင်သသည် underground နဟင့်ပိုတူသော်လည်သ၊ ၎င်သသည်အေသမဌသည်။

ကိုသကာသ

  1. တရာသဝင် TON စာရလက်စာတမ်သ- https://test.ton.org
  2. တရာသဝင် TON သိုလဟောင်မဟု- https://github.com/ton-blockchain/ton
  3. မတူညီသောပလက်ဖောင်သမျာသအတလက်တရာသဝင်ပိုက်ဆံအိတ်- https://wallet.ton.org
  4. ကဆောင်သပါသမဟ စမတ်ကန်ထရိုက် သိုလဟောင်မဟု- https://github.com/raiym/astonished
  5. စမတ်စာချုပ် ဝဘ်ဆိုဒ်သို့ လင့်ခ်- https://ton-lottery.appspot.com
  6. FunC အတလက် Visual Studio Code တိုသချဲ့သိုလဟောင်မဟု https://github.com/raiym/func-visual-studio-plugin
  7. ပထမအဆင့်မဟာ နာသလည်ဖို့ အမျာသကဌီသ အထောက်အကူဖဌစ်စေတဲ့ Telegram မဟာ TON အကဌောင်သ chat ပါ။ TON အတလက် တစ်ခုခု ရေသတဲ့သူတိုင်သ ရဟိတယ် လို့ ပဌောရင် မဟာသမယ် မထင်ပါဘူသ။ အဲဒီ့မဟာ စမ်သသပ်ဂရမ်ကိုလည်သ တောင်သနိုင်ပါတယ်။ https://t.me/tondev_ru
  8. အသုံသဝင်သောအချက်အလက်မျာသကို ကျလန်ုပ်တလေ့ရဟိခဲ့သော TON အကဌောင်သ နောက်ထပ်ချတ်တစ်ခု https://t.me/TONgramDev
  9. ပဌိုင်ပလဲ၏ပထမအဆင့် https://contest.com/blockchain
  10. ပဌိုင်ပလဲ၏ဒုတိယအဆင့် https://contest.com/blockchain-2

source: www.habr.com