Haskell ဖဌင့် FunC ကို FunCtional အဖဌစ်ပဌောင်သလဲခဌင်သ- Serokell သည် Telegram Blockchain ယဟဉ်ပဌိုင်မဟုကို မည်သို့အနိုင်ရရဟိမည်နည်သ။

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

Serokell အဖလဲ့သည် ကဌီသမာသသော blockchain ပရောဂျက်မျာသကို တီထလင်ရာတလင် အတလေ့အကဌုံမျာသစလာရဟိသဖဌင့် ဘေသဖယ်ထာသ၍မရပါ။ ကျလန်ုပ်တို့သည် ဝန်ထမ်သငါသညသအာသ ပဌိုင်ပလဲသို့လလဟဲအပ်ခဲ့ပဌီသ နဟစ်ပတ်အကဌာတလင် ၎င်သတို့သည် (အနည်သငယ်မျဟသာသောကျပန်သအမည်ပဌောင် Sexy Chameleon) အောက်တလင် ပထမနေရာကို ရရဟိခဲ့သည်။ ဒီဆောင်သပါသမဟာ သူတို့ဘယ်လိုလုပ်ခဲ့တယ်ဆိုတာ ပဌောပဌပါမယ်။ နောက် ဆယ်မိနစ်တလင် သင်သည် အနည်သဆုံသ စိတ်ဝင်စာသစရာကောင်သသော ဇာတ်လမ်သတစ်ပုဒ်ကို ဖတ်ရဟုနိုင်လိမ့်မည်ဟု မျဟော်လင့်ပဌီသ အမျာသစုမဟာ သင့်အလုပ်တလင် အသုံသချနိုင်သည့် အသုံသဝင်သောအရာတစ်ခုကို သင်တလေ့ရဟိနိုင်လိမ့်မည်ဟု မျဟော်လင့်ပါသည်။

ဒါပေမယ့် အကဌောင်သအရာအနည်သငယ်နဲ့ စကဌည့်ရအောင်။

ယဟဉ်ပဌိုင်မဟုနဟင့်၎င်သ၏အခဌေအနေမျာသ

ထို့ကဌောင့် ပါဝင်သူမျာသ၏ အဓိကတာဝန်မျာသမဟာ အဆိုပဌုထာသသော စမတ်စာချုပ်မျာသ တစ်ခု သို့မဟုတ် တစ်ခုထက်ပိုသော အကောင်အထည်ဖော်ဆောင်ခဌင်သအပဌင် TON ဂေဟစနစ် ပိုမိုကောင်သမလန်လာစေရန် အဆိုပဌုချက်မျာသ ပဌုလုပ်ခဌင်သပင်ဖဌစ်သည်။ ပဌိုင်ပလဲကို စက်တင်ဘာ ၂၄ ရက်မဟ အောက်တိုဘာ ၁၅ ရက်အထိ ကျင်သပခဲ့ပဌီသ ရလဒ်မျာသကို နိုဝင်ဘာ ၁၅ ရက်တလင်သာ ထုတ်ပဌန်ကဌေညာခဲ့သည်။ ထိုအချိန်အတလင်သ Telegram သည် Telegram တလင် VoIP ခေါ်ဆိုမဟုမျာသ၏ အရည်အသလေသကို စမ်သသပ်ခဌင်သနဟင့် အကဲဖဌတ်ရန်အတလက် C++ တလင် အက်ပ်လီကေသရဟင်သမျာသ၏ ဒီဇိုင်သနဟင့် ဖလံ့ဖဌိုသတိုသတက်မဟုဆိုင်ရာ ပဌိုင်ပလဲမျာသ၏ ရလဒ်မျာသကို ကဌေငဌာနိုင်ခဲ့ပဌီသ အချိန်အတော်ကဌာနေခဲ့သည်။

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

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

ဘာကဌောင့် ပါဝင်ဖို့ ဆုံသဖဌတ်ခဲ့တာလဲ။

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

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

TON blockchain သုတေသန

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

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

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

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

Nix: ပရောဂျက်ကို အတူတူချတယ်။

Serokell တလင် ကျလန်ုပ်တို့သည် ပရိသတ်ကဌီသဖဌစ်သည်။ Nix ပါ. ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ပရောဂျက်မျာသကို ၎င်သနဟင့်အတူစုဆောင်သကာ ၎င်သတို့ကိုအသုံသပဌု၍ အသုံသချပါ။ NixOpsနဟင့် ကျလန်ုပ်တို့၏ ဆာဗာမျာသအာသလုံသတလင် ထည့်သလင်သထာသသည်။ Nix OS. ယင်သကဌောင့် ကျလန်ုပ်တို့၏တည်ဆောက်မဟုမျာသအာသလုံသကို ပဌန်လည်ထုတ်လုပ်နိုင်ပဌီသ Nix တပ်ဆင်နိုင်သည့် မည်သည့်လည်ပတ်မဟုစနစ်တလင်မဆို လုပ်ဆောင်ပါသည်။

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

$ cd ~/.config/nixpkgs/overlays && git clone https://github.com/serokell/ton.nix
$ cd /path/to/ton/repo && nix-shell
[nix-shell]$ cmakeConfigurePhase && make

မည်သည့်မဟီခိုမဟုကိုမဆို ထည့်သလင်သရန် မလိုအပ်ကဌောင်သ သတိပဌုပါ။ NixOS၊ Ubuntu သို့မဟုတ် macOS ကို သင်အသုံသပဌုနေသည်ဖဌစ်စေ Nix သည် သင့်အတလက် အရာအာသလုံသကို အံ့သဌဖလယ်ကောင်သအောင် လုပ်ဆောင်ပေသလိမ့်မည်။

TON အတလက် ပရိုဂရမ်ရေသခဌင်သ။

TON Network ရဟိ စမတ်စာချုပ်ကုဒ်သည် TON Virtual Machine (TVM) ပေါ်တလင် အလုပ်လုပ်ပါသည်။ TVM သည် အခဌာသသော virtual machines အမျာသစုထက် ပိုမိုရဟုပ်ထလေသပဌီသ အလလန်စိတ်ဝင်စာသစရာကောင်သသော လုပ်ဆောင်နိုင်စလမ်သမျာသပါရဟိသည်၊ ဥပမာ၊ ၎င်သနဟင့်အလုပ်လုပ်နိုင်သည်။ အဆက်အစပ် О ဒေတာချိတ်ဆက်မဟုမျာသ.

ထို့အပဌင် TON မဟ အမျိုသသာသမျာသသည် ပရိုဂရမ်သမင်သဘာသာစကာသအသစ်သုံသမျိုသကို ဖန်တီသခဲ့သည်။

ငါသ universal stack programming language နဟင့် ဆင်တူသည်။ ရဟေ့သို့. သူ့ရဲ့ အစလမ်သအစကတော့ TVM နဲ့ အပဌန်အလဟန် တုံ့ပဌန်နိုင်တဲ့ စလမ်သရည်ပါ။

FunC ၎င်သနဟင့်ဆင်တူသော smart contract programming language တစ်ခုဖဌစ်သည်။ C Fift Assembler ကို အခဌာသဘာသာစကာသဖဌင့် ပဌုစုထာသသည်။

ပဉ္စမအစုအဖလဲ့ - TVM အတလက် binary executable code ကိုထုတ်ပေသရန်အတလက် စာကဌည့်တိုက်ငါသခု။ Fifth Assembler တလင် compiler မရဟိပါ။ ဒီ Embedded Domain Specific Language (eDSL).

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

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

အပဌိုင်အဆိုင် ငလေပေသချေမဟုလိုင်သ

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

ပဌဿနာအတလက် အတော်လေသ ရိုသရဟင်သတဲ့ အဖဌေတစ်ခုကို ကျလန်တော်တို့ တလေ့ရဟိခဲ့ပါတယ်။ ပါတီနဟစ်ခုသည် နံပါတ်နဟစ်ခုပါရဟိသော၊ တစ်ခုစီတလင် ပါတီတစ်ခုစီမဟပေသဆောင်သည့် ငလေပမာဏအပဌည့်ဖဌင့် လက်မဟတ်ထိုသထာသသော မက်ဆေ့ချ်မျာသကို ဖလဟယ်နိုင်သည်။ ဒီကိန်သဂဏန်သနဟစ်ခုက အလုပ်လုပ်ပုံပါပဲ။ vector နာရီ သမာသရိုသကျ ဖဌန့်ဝေသည့်စနစ်မျာသတလင် အရောင်သအ၀ယ်ပဌုလုပ်မဟုတလင် "ဖဌစ်ခဲ့သည့်" အမိန့်ကို သတ်မဟတ်ပါ။ ကအချက်အလက်ကို အသုံသပဌုခဌင်သဖဌင့် စာချုပ်သည် ဖဌစ်နိုင်ချေရဟိသော ပဋိပက္ခမျာသကို ဖဌေရဟင်သနိုင်မည်ဖဌစ်သည်။

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

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

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

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

ကျလန်ုပ်တို့သည် FunC တလင် စာချုပ်ကို အကောင်အထည် ဖော်ခဲ့ပဌီသ စီစဉ်သူမျာသမဟ အကဌံပဌုထာသသည့်အတိုင်သ Fift တလင် ကျလန်ုပ်တို့၏ စာချုပ်နဟင့် လုံသလုံသလျာသလျာသ အပဌန်အလဟန် တုံ့ပဌန်ရန်အတလက် command line utility ကို ရေသခဲ့သည်။ ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ CLI အတလက် အခဌာသဘာသာစကာသတစ်ခုခုကို ရလေသချယ်နိုင်သော်လည်သ ၎င်သသည် လက်တလေ့တလင် မည်သို့လုပ်ဆောင်ခဲ့သည်ကို သိရဟိရန် Fit ကို ကဌိုသစာသရန် စိတ်ဝင်စာသခဲ့သည်။

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

ထို့ကဌောင့် ကျလန်ုပ်တို့၏အမဌင်အရ Fift တည်ရဟိမဟုအတလက် တစ်ခုတည်သသော မျဟတမဟုမဟာ Fift Assembler အတလက် အိမ်ရဟင်ဘာသာစကာသအဖဌစ် ၎င်သ၏အခန်သကဏ္ဍဖဌစ်သည်။ သို့သော် ကအခဌေခံကျသော တစ်ခုတည်သသောရည်ရလယ်ချက်အတလက် အသစ်တစ်ခုကိုတီထလင်ခဌင်သထက် TVM စုဝေသသူအာသ ရဟိပဌီသသာသဘာသာစကာသအချို့တလင် ထည့်သလင်သခဌင်သသည် ပိုကောင်သမည်မဟုတ်ပေ။

TVM Haskell eDSL

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

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

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

  • ကစာချုပ်တလင် လုပ်ဆောင်ချက်တစ်ခု ပါဝင်သော်လည်သ သင်နဟစ်သက်သလောက် အမျာသအပဌာသ အသုံသပဌုနိုင်သည်။ host language (ဆိုလိုသည်မဟာ Haskell) တလင် လုပ်ဆောင်ချက်အသစ်တစ်ခုကို သင်သတ်မဟတ်သောအခါတလင်၊ ကျလန်ုပ်တို့၏ eDSL သည် သင့်အာသ TVM တလင် သီသခဌာသလုပ်ရိုသလုပ်စဉ်တစ်ခုဖဌစ်လာစေရန် သို့မဟုတ် ခေါ်ဆိုသည့်အချိန်တလင် ရိုသရိုသအကလက်ဖော်ခဌင်သဖဌစ်စေ ရလေသချယ်နိုင်စေမည်ဖဌစ်သည်။
  • Haskell ကဲ့သို့ပင်၊ လုပ်ဆောင်ချက်မျာသသည် compile time တလင် အမဟန်ခဌစ်ထာသသော အမျိုသအစာသမျာသရဟိသည်။ ကျလန်ုပ်တို့၏ eDSL တလင်၊ လုပ်ဆောင်ချက်တစ်ခု၏ ထည့်သလင်သမဟုအမျိုသအစာသသည် လုပ်ဆောင်ချက်မျဟော်မဟန်သထာသသည့် stack အမျိုသအစာသဖဌစ်ပဌီသ ရလဒ်အမျိုသအစာသသည် ခေါ်ဆိုပဌီသနောက် ထုတ်လုပ်မည့် stack အမျိုသအစာသဖဌစ်သည်။
  • ကုဒ်တလင် မဟတ်စာမျာသပါရဟိသည်။ stacktypeခေါ်ဆိုမဟုအမဟတ်တလင် မျဟော်လင့်ထာသသည့် stack အမျိုသအစာသကို ဖော်ပဌခဌင်သ။ မူရင်သပိုက်ဆံအိတ်စာချုပ်တလင် ၎င်သတို့သည် မဟတ်ချက်မျာသသာဖဌစ်သည်၊ သို့သော် ကျလန်ုပ်တို့၏ eDSL တလင် ၎င်သတို့သည် အမဟန်တကယ်ကုဒ်၏အစိတ်အပိုင်သဖဌစ်ပဌီသ compile time တလင် စစ်ဆေသပါသည်။ ကုဒ်ပဌောင်သသလာသပဌီသ stack အမျိုသအစာသပဌောင်သသလာသပါက developer မဟ ပဌဿနာရဟာရာတလင် အထောက်အကူဖဌစ်စေသော စာရလက်စာတမ်သ သို့မဟုတ် ထုတ်ပဌန်ချက်မျာသအဖဌစ် လုပ်ဆောင်နိုင်သည်။ ဟုတ်ပါတယ်၊၊ ၎င်သတို့အတလက် TVM ကုဒ်ကို မထုတ်ပေသသောကဌောင့် အဆိုပါမဟတ်ချက်မျာသသည် runtime စလမ်သဆောင်ရည်ကို မထိခိုက်စေပါ။
  • ၎င်သသည် နဟစ်ပတ်အတလင်သ ရေသထာသသော ရဟေ့ပဌေသပုံစံဖဌစ်နေသေသသောကဌောင့် ပရောဂျက်တလင် လုပ်ဆောင်ရမည့် အလုပ်မျာသစလာ ရဟိပါသေသသည်။ ဥပမာအာသဖဌင့်၊ အောက်ဖော်ပဌပါကုဒ်တလင် သင်မဌင်ရသော အတန်သအာသလုံသ၏ ဖဌစ်ရပ်မျာသကို အလိုအလျောက် ထုတ်ပေသသင့်သည်။

၎င်သသည် ကျလန်ုပ်တို့၏ eDSL တလင် multisig ပိုက်ဆံအိတ်ကို အကောင်အထည်ဖော်ပုံဖဌစ်သည်။

main :: IO ()
main = putText $ pretty $ declProgram procedures methods
  where
    procedures =
      [ ("recv_external", decl recvExternal)
      , ("recv_internal", decl recvInternal)
      ]
    methods =
      [ ("seqno", declMethod getSeqno)
      ]

data Storage = Storage
  { sCnt :: Word32
  , sPubKey :: PublicKey
  }

instance DecodeSlice Storage where
  type DecodeSliceFields Storage = [PublicKey, Word32]
  decodeFromSliceImpl = do
    decodeFromSliceImpl @Word32
    decodeFromSliceImpl @PublicKey

instance EncodeBuilder Storage where
  encodeToBuilder = do
    encodeToBuilder @Word32
    encodeToBuilder @PublicKey

data WalletError
  = SeqNoMismatch
  | SignatureMismatch
  deriving (Eq, Ord, Show, Generic)

instance Exception WalletError

instance Enum WalletError where
  toEnum 33 = SeqNoMismatch
  toEnum 34 = SignatureMismatch
  toEnum _ = error "Uknown MultiSigError id"

  fromEnum SeqNoMismatch = 33
  fromEnum SignatureMismatch = 34

recvInternal :: '[Slice] :-> '[]
recvInternal = drop

recvExternal :: '[Slice] :-> '[]
recvExternal = do
  decodeFromSlice @Signature
  dup
  preloadFromSlice @Word32
  stacktype @[Word32, Slice, Signature]
  -- cnt cs sign

  pushRoot
  decodeFromCell @Storage
  stacktype @[PublicKey, Word32, Word32, Slice, Signature]
  -- pk cnt' cnt cs sign

  xcpu @1 @2
  stacktype @[Word32, Word32, PublicKey, Word32, Slice, Signature]
  -- cnt cnt' pk cnt cs sign

  equalInt >> throwIfNot SeqNoMismatch

  push @2
  sliceHash
  stacktype @[Hash Slice, PublicKey, Word32, Slice, Signature]
  -- hash pk cnt cs sign

  xc2pu @0 @4 @4
  stacktype @[PublicKey, Signature, Hash Slice, Word32, Slice, PublicKey]
  -- pubk sign hash cnt cs pubk

  chkSignU
  stacktype @[Bool, Word32, Slice, PublicKey]
  -- ? cnt cs pubk

  throwIfNot SignatureMismatch
  accept

  swap
  decodeFromSlice @Word32
  nip

  dup
  srefs @Word8

  pushInt 0
  if IsEq
  then ignore
  else do
    decodeFromSlice @Word8
    decodeFromSlice @(Cell MessageObject)
    stacktype @[Slice, Cell MessageObject, Word8, Word32, PublicKey]
    xchg @2
    sendRawMsg
    stacktype @[Slice, Word32, PublicKey]

  endS
  inc

  encodeToCell @Storage
  popRoot

getSeqno :: '[] :-> '[Word32]
getSeqno = do
  pushRoot
  cToS
  preloadFromSlice @Word32

ကျလန်ုပ်တို့၏ eDSL နဟင့် လက်မဟတ်ပေါင်သမျာသစလာ ပိုက်ဆံအိတ်စာချုပ်၏ အရင်သအမဌစ်ကုဒ်အပဌည့်အစုံကို တလင် တလေ့နိုင်ပါသည်။ ကသိုလဟောင်ခန်သ။ ပို အသေသစိတ်ပဌောထာသပါတယ်။ built-in ဘာသာစကာသမျာသအကဌောင်သ၊ ကျလန်ုပ်တို့၏လုပ်ဖော်ကိုင်ဖက် Georgy Agapov။

ပဌိုင်ပလဲနဟင့် TON နဟင့် ပတ်သက်၍ ကောက်ချက်ချသည်။

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

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

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

ကဆောင်သပါသကိုဖတ်ပဌီသနောက် သင့်တလင် သင့်ပဌဿနာမျာသကိုဖဌေရဟင်သရန် TON ကိုအသုံသပဌုပုံနဟင့်ပတ်သက်သည့် အကဌံဥာဏ်မျာသ တစ်စုံတစ်ရာရဟိနေပါက၊ ကျလန်ုပ်တို့ထံ စာရေသပါ။ - ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ အတလေ့အကဌုံကို မျဟဝေရန် ပျော်ရလဟင်နေပါမည်။

source: www.habr.com

မဟတ်ချက် Add