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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ကျလန်ုပ်တို့သည် စမတ်ကျသော စာချုပ်တစ်ခုကို ရေသသာသပဌီသ လက်တလဲလုပ်ဆောင်ရန် အာရုံစိုက်ပါမည်။ 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 ကို run နိုင်ပါတယ်။ 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 ကိုယ်တိုင်တလင်၊ မည်သည့်စာချုပ်သည် ကျလန်ုပ်တို့၏အရာကိုမဆို ရည်ညလဟန်သသည့်အချိန်ဖဌစ်သည်။ နဟစ်ခုလုံသတလင်၊ သင်သည် လုပ်ဆောင်ချက်သို့ ဘောင်မျာသကို ဖဌတ်သန်သနိုင်သည်။

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

() 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 ကိုဖလင့်ပါ။ 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 

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

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 

ရလာတဲ့ကုဒ်ကို ကော်ပီကူသလိုက်ပါ။ 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.

စုစည်သထာသသောဖိုင်ကို ရိုသရဟင်သစလာ ပလာသစေမည့် sh တလင် အတိုကောက်ကုဒ်ကို ထည့်ကဌပါစို့ 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 စာမေသပလဲမျာသအလုပ်လုပ်ကဌောင်သသေချာစေရန် ၎င်သကို run ပါ။

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 အဲဒီမဟာ သီသသန့်သော့ကို ရေသပါ။

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.

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

ယခု ကျလန်ုပ်တို့သည် လက်မဟတ်အတည်ပဌုချက်ကို ရေသရန်လိုအပ်ပါသည်။ စမ်သသပ်မဟုဖဌင့်စကဌပါစို့။ လုပ်ဆောင်ချက်ကို အသုံသပဌု၍ ဖိုင်မဟ သီသသန့်သော့ကို ညသစလာဖတ်ပါ။ 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));

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

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

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

အခဌာသသူ၏ကိုယ်ရေသကိုယ်တာသော့ဖဌင့် လက်မဟတ်ထိုသထာသသော မက်ဆေ့ချ်ကို ပေသပို့မည့် စတုတ္ထစမ်သသပ်မဟုတစ်ခုကို ရေသကဌပါစို့။ နောက်ထပ် သီသသန့်သော့တစ်ခုကို ဖန်တီသပဌီသ ဖိုင်တစ်ခုတလင် သိမ်သဆည်သကဌပါစို့ 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 !

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

လင့်ခ်ချိတ်ပါ။ ထပ်လောင်သမုန့်စိမ်သနဟင့်အတူ။

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

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

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

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

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

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

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().

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

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

စမတ်စာချုပ်လိပ်စာတလင် နံပါတ်နဟစ်ခု၊ workchain အတလက် တာဝန်ရဟိသော 32-ဘစ် ကိန်သပဌည့်နဟင့် ကလုပ်ငန်သကလင်သဆက်ရဟိ 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 လုပ်ပါ။ -rotstack ၏ထိပ်တလင်ထူသခဌာသသောစမတ်ကန်ထရိုက်နံပါတ်တစ်ခုရဟိနေသောပုံစံဖဌင့် stack ကိုပဌောင်သပေသသည်-

"sender.addr" -1 12345

256 u>B 256-bit non-negative integer ကို 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 ၏ sequences နဟစ်ခုကို ချိတ်ဆက်သည်။

 "sender.addr" BYTES:0000000000000000000000000000000000000000000000000000000000003039FFFFFFFF

နောက်တဖန် swap.

BYTES:0000000000000000000000000000000000000000000000000000000000003039FFFFFFFF "sender.addr" 

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

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

ကဲ ထီပေါက်ခဌင်သရဲ့ အတလေသအမဌင်ကို ကဌည့်ကဌရအောင်။

ပထမတစ်ချက်က မက်ဆေ့ချ်ကို စစ်ဆေသပါ။ 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 ကို ကျလန်ုပ်တို့ လုပ်ဆောင်ပါသည်။ ဂရမ်ပို့ဖို့ ကျလန်တော်သုံသတယ်။ တရာသဝင်ပိုက်ဆံအိတ်နဟင့် ဆောင်သပါသ၏အဆုံသတလင် ကျလန်ုပ်ပဌောမည့် စမ်သသပ်ဂရမ်အတလက် တစ်စုံတစ်ညသကို သင်မေသနိုင်ပါသည်။

> 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 အသိုင်သအဝိုင်သမဟာထက် အဲဒီမဟာ လဟုပ်ရဟာသမဟုက အမျာသကဌီသ ပိုပါတယ်။ TON ၏ developer မျာသနဟင့် community သည် 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 ကုဒ်အတလက် တိုသချဲ့မဟုအတလက် သိုလဟောင်နေရာ https://github.com/raiym/func-visual-studio-plugin
  7. TON အကဌောင်သ တယ်လီဂရမ်တလင် ချက်တင်ပါ၊ ၎င်သကို ကနညသအဆင့်တလင် အမဟန်တကယ် အဖဌေရဟာနိုင်ခဲ့သည်။ 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

မဟတ်ချက် Add