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