áĄá˛áᎠTelegram ááᯠááźáŹá¸áá°á¸ááźáážáŹááŤá . ááŤááąáááˇáş ááááşáááźáŹáááşááᲠTelegram áááŻáá˛áˇ ááááşá¸ááᯠáá˝á˛ááťáąáŹáşáá˝áŹá¸áááŻááşááŤáááşá á¤ááááşááąáŹááşá¸áĄáá˝ááş áá áşáᯠáááŻáˇáááŻááş áá áşááŻáááşáááŻááąáŹ á áááşá áŹááťáŻááşááťáŹá¸ááᯠáĄááąáŹááşáĄáááşááąáŹáşáááşáĄáá˝ááşá
Serokell áĄáá˝á˛áˇáááş ááźáŽá¸ááŹá¸ááąáŹ blockchain áááąáŹááťááşááťáŹá¸ááᯠááŽáá˝ááşááŹáá˝ááş áĄáá˝áąáˇáĄááźáŻáśááťáŹá¸á á˝áŹáážááááźááˇáş ááąá¸áááşááŹá¸áááááŤá ááťá˝ááşáŻááşáááŻáˇáááş áááşáááşá¸ááŤá¸áŚá¸áĄáŹá¸ ááźááŻááşáá˝á˛áááŻáˇáá˝ážá˛áĄááşáá˛áˇááźáŽá¸ áážá áşáááşáĄááźáŹáá˝ááş áááşá¸áááŻáˇáááş (áĄáááşá¸áááşááťážááŹááąáŹááťáááşá¸áĄáááşááźáąáŹááş Sexy Chameleon) áĄáąáŹááşáá˝ááş áááááąááŹááᯠááážááá˛áˇáááşá ááŽááąáŹááşá¸ááŤá¸áážáŹ áá°áááŻáˇáááşáááŻááŻááşáá˛áˇáááşáááŻáᏠááźáąáŹááźááŤáááşá ááąáŹááş áááşáááá áşáá˝ááş áááşáááş áĄáááşá¸ááŻáśá¸ á áááşáááşá áŹá¸á ááŹááąáŹááşá¸ááąáŹ ááŹááşáááşá¸áá áşááŻááşááᯠáááşáážáŻáááŻááşááááˇáşáááşáᯠááťážáąáŹáşáááˇáşááźáŽá¸ áĄááťáŹá¸á áŻáážáŹ áááˇáşáĄááŻááşáá˝ááş áĄááŻáśá¸ááťáááŻááşáááˇáş áĄááŻáśá¸áááşááąáŹáĄááŹáá áşááŻááᯠáááşáá˝áąáˇáážááááŻááşááááˇáşáááşáᯠááťážáąáŹáşáááˇáşááŤáááşá
ááŤááąáááˇáş áĄááźáąáŹááşá¸áĄááŹáĄáááşá¸áááşáá˛áˇ á ááźááˇáşááĄáąáŹááşá
áážááşááźááŻááşáážáŻáážááˇáşáááşá¸ááĄááźáąáĄááąááťáŹá¸
áááŻáˇááźáąáŹááˇáş ááŤáááşáá°ááťáŹá¸á áĄáááááŹáááşááťáŹá¸áážáŹ áĄáááŻááźáŻááŹá¸ááąáŹ á áááşá áŹááťáŻááşááťáŹá¸ áá áşáᯠáááŻáˇáááŻááş áá áşááŻáááşáááŻááąáŹ áĄááąáŹááşáĄáááşááąáŹáşááąáŹááşááźááşá¸áĄááźááş TON ááąáá áá áş áááŻáááŻááąáŹááşá¸áá˝ááşááŹá áąáááş áĄáááŻááźáŻááťááşááťáŹá¸ ááźáŻááŻááşááźááşá¸áááşááźá áşáááşá ááźááŻááşáá˝á˛ááᯠá ááşáááşáᏠáá áááşááž áĄáąáŹááşáááŻáᏠáá áááşáĄáá ááťááşá¸ááá˛áˇááźáŽá¸ ááááşááťáŹá¸ááᯠáááŻáááşáᏠáá áááşáá˝ááşáᏠááŻááşááźááşááźáąááŹáá˛áˇáááşá áááŻáĄááťáááşáĄáá˝ááşá¸ Telegram áááş Telegram áá˝ááş VoIP ááąáŤáşáááŻáážáŻááťáŹá¸á áĄáááşáĄáá˝áąá¸ááᯠá ááşá¸áááşááźááşá¸áážááˇáş áĄáá˛ááźááşáááşáĄáá˝ááş C++ áá˝ááş áĄááşááşááŽááąá¸áážááşá¸ááťáŹá¸á ááŽáááŻááşá¸áážááˇáş áá˝áśáˇááźááŻá¸áááŻá¸áááşáážáŻáááŻááşáᏠááźááŻááşáá˝á˛ááťáŹá¸á ááááşááťáŹá¸ááᯠááźáąááźáŹáááŻááşáá˛áˇááźáŽá¸ áĄááťáááşáĄááąáŹáşááźáŹááąáá˛áˇáááşá
á áŽá ááşáá°ááťáŹá¸áĄáááŻááźáŻáááˇáşá áŹáááşá¸ááž á áááşá áŹááťáŻááşáážá áşááŻááᯠááťá˝ááşáŻááşáááŻáˇáá˝áąá¸ááťááşááŹá¸áááşá áááşá¸áááŻáˇáá˛ááž áá áşááŻáĄáá˝ááşá ááťá˝ááşáŻááşáááŻáˇáááş TON áážááˇáş ááźááˇáşááąááŹá¸ááąáŹ ááááááŹááťáŹá¸ááᯠáĄááŻáśá¸ááźáŻáá˛áˇááźáŽá¸ ááŻááááĄáŹá¸ ááťá˝ááşáŻááşáááŻáˇá áĄááşááťááşááŽááŹááťáŹá¸á TON áĄáá˝ááş áĄáá°á¸ááźáŻá Haskell áá˝ááş áááşááąáŹááşááŹá¸ááąáŹ ááŹááŹá ááŹá¸áĄáá áşááźááˇáş áĄááąáŹááşáĄáááşááąáŹáşáá˛áˇáááşá
ááŻááşááąáŹááşáááŻááşááąáŹ ááááŻááááşá¸áááşá¸ááŹááŹá ááŹá¸ááᯠáá˝áąá¸ááťááşááźááşá¸áááş áááąáŹáşáááááŻááşááŤá ááŤáááŻáˇáá˛áˇ ááŻááşááąáŹááşáááŻááşááąáŹ ááŹááŹá ááŹá¸ááťáŹá¸á áážáŻááşáá˝áąá¸áážáŻáááş ááťá˛áˇááŹá¸áážáŻááźáŽá¸áá áşááŻáᯠááťá˝ááşáŻááşáááŻáˇáááşááźááşááźááźáŽá¸ ááąáá°ááťáĄáŹá¸ááźááˇáş áááşá¸áááŻáˇáĄáŹá¸ áĄááŹááášááŻáááşáááˇáşáĄááŹááťáŹá¸ááᯠáĄáááşááźáąáŹááˇáşáááŻáážá áşáááşááźáááşááᯠááťá˝ááşáŻááşáááŻáˇáááźáŹááááźáąáŹáááŻááźáááşá á ááŹá¸áá ááşá .
ááŹááźáąáŹááˇáş ááŤáááşáááŻáˇ ááŻáśá¸ááźááşáá˛áˇááŹáá˛á
áĄáááŻááťáŻááşáĄáŹá¸ááźááˇáşá ááťá˝ááşáŻááşáááŻáˇá áĄáá°á¸ááźáŻááťá˝ááşá¸ááťááşáážáŻáááş á áśáááŻááşááąáŹá áĄáá°á¸ááťá˝ááşá¸ááťááşáážáŻááťáŹá¸áááŻáĄááşááźáŽá¸ áááźáŹáááááŻáááᯠáĄááŻááşááŽáĄáááŻááşá¸áĄáááŻááşá¸áĄáá˝ááş áááášááśáááŻááşááŹáááşáááŻá¸áážáááąáŹááźáąáŹááˇáşááźá áşáááşá ááťá˝ááşáŻááşáááŻáˇáááş open-source áá˝áśáˇááźááŻá¸áááŻá¸áááşáážáŻááᯠáĄáááŻááşáĄááŹááąáŹááşááśááźáŽá¸ áááşá¸áááŹáááşááźáŽá¸ááŹáážáŻáá˝ááş ááŤáááşááąáŹááşáá˝ááşááťááşáážáááźáŽá¸ áá˝ááşááťá°ááŹáááášááśáážááˇáş áááşášááťáŹáááşáááşáážá ááááşáááşá¸ ááŻáážáŹá¸ááášááááŻááşááťáŹá¸áážááˇáşáááşá¸ áá°á¸ááąáŤááşá¸ááąáŹááşáá˝ááşááťááşáážááááşá
ááźááŻááşáááŻááşáážáŻá á áááşáááşá áŹá¸á ááŹááąáŹááşá¸ááąáŹ áĄááŻááşááťáŹá¸áážááˇáş ááťá˝ááşáŻááşáááŻáˇáááťá áşáážá á˝áŹááąáŹ Telegram áááąáŹááťááşáá˝ááş ááŤáááşáááşáááşáážáŻáááş áááşá¸áááŻáˇáááŻááşáááŻááşáĄáá˝ááş áĄáá˝ááşááąáŹááşá¸áá˝ááşááąáŹ áážáŻáśáˇááąáŹáşáážáŻáá áşááŻááźá áşááąáŹáşáááşá¸ ááŻáááşááŻáśáá˝áąáááş ááąáŹááşáááş áááşááŻáśá¸áá áşáᯠááźá áşááŹáá˛áˇáááşá đ
TON blockchain ááŻááąáá
ááťá˝ááşáŻááşáááŻáˇáááş blockchainá ááŹááşáááşááŻáážááˇáş á ááşáááşáá°áážáŻáá˝ááş áááŻá¸áááşáážáŻáĄáá áşááťáŹá¸ááᯠáĄááŽá¸áááşá áąáŹááˇáşááźááˇáşááźáŽá¸ ááťá˝ááşáŻááşáááŻáˇááŻááşááąáŹááşáááˇáş áááşáááşáá áşááŻá áŽáá˝ááş ááááŹáááşáážáŹá¸ááąáŹááŻááşáá˝ážááşáážáŻáá áşááŻáĄáŹá¸ áááşáá˝ááşáááśáááş ááźááŻá¸á áŹá¸ááŤá áááŻáˇááźáąáŹááˇáş ááźááŻááşáá˝á˛á áááşááťáááşáá˝ááş ááťá˝ááşáŻááşáááŻáˇáĄáá˝á˛áˇáááş áĄááźáśáĽáŹááşááťáŹá¸áážááˇáş áááşá¸áážáŽá¸ááąááźáŽááźá áşáááşá . áááŻáˇááąáŹáşá TON áážááˇáş áĄááŻááşáá ááŽá ááťá˝ááşáŻááşáááŻáˇáááş ááááşááąáŹááşá¸á áááşá¸áááŹáááŻááşáᏠá áŹáá˝ááşá áŹáááşá¸ááťáŹá¸áážááˇáş áĄáážááşááááşáĄáááşá¸áĄááźá áşááŻááşááᯠáá˝á˛ááźááşá¸á áááşááźáŹááźááşá¸áááźáŻáá˛áˇáá˛á áááŻáˇááźáąáŹááˇáş ááááĄáááˇáşáážáŹ ááááŹáááşáážáŹá¸áážáááş - áááŹá¸áááşá áŹáá˝ááşá áŹáááşá¸ááťáŹá¸ááᯠá áąáˇá áąáˇá ááşá ááşááąáˇááŹááźááşá¸ áážááˇáş .
ááźááŻááşáá˝á˛á áááşááťáááşáá˝ááşá ááŻááşááᯠááŻááşááąááźáŽá¸ááźá áşááąáŹááźáąáŹááˇáş áĄááťáááşááŻááşáááşááŹá áąáááş ááąá¸ááŹá¸ááŹá¸ááąáŹ áááşá¸áá˝ážááş áááŻáˇáááŻááş áĄááťááşá¸ááťáŻááşááᯠáážáŹáá˝áąáááş ááŻáśá¸ááźááşáá˛áˇáááşá áĄááŻáśá¸ááźáŻáá°ááťáŹá¸. ááśáááąáŹááşá¸á á˝áŹááźááˇáşá áááşá¸áááş Ubuntu áá˝ááş ááááşááąáŹááşá¸áááşáááşááźááşá¸áĄáá˝ááş áááşá¸áá˝ážááşááťááşááťáŹá¸áážáá˝á˛á áááşáááˇáşááááşáááŻááťáž áááąá¸áááŻááşáá˛áˇááŤá
á áŹáááşá¸áááŻááşáááŻááş ááąáŹááşá¸á á˝áŹ ááŻááąááááźáŻááŹá¸ááąáŹáşáááşá¸ áĄááťááŻáˇááąááŹááťáŹá¸áá˝ááş áááşááááşááŤáááşá áááźáŹáááááŻáááᯠááťá˝ááşáŻááşáááŻáˇáááş áĄááťááŻáˇááąáŹáĄááťááşááťáŹá¸ááŽáááŻáˇ ááźááşáá˝áŹá¸áᏠá áááşáá°á¸ááŹááşáááŻááşáᏠá áááşáá°á¸á áááşáááşá¸ááťáŹá¸ááᯠáĄáááˇáşááááˇáşááąáŹáşááźááťááşááťáŹá¸ááž áĄáááˇáşááááˇáşáĄááąáŹááşáĄáááşááąáŹáşáážáŻáĄááąá¸á áááşáááŻáˇ ááźáąáŹááşá¸áá˛áˇááááşá
áááşáážááşááťááşáá˝ááş áááşáá˝áąáˇáĄááąáŹááşáĄáááşááąáŹáşááźááşá¸á áĄááąá¸á áááşááąáŹáşááźááťááşááŻáśá¸ááááŤáááşááŤá áááŻáááŻáá˝ááşáá°áááşááźá áşáááşá virtual machine áááş áááşá¸á stack ááᯠáááŻááşá áŹá¸ááźáŻááŻáśáĄááźáąáŹááşá¸ áĄááťááşáĄáááşááťáŹá¸áááş TON ááááşááąáŹááşá¸áĄáá˝ááş á áááşááťááąáŹ á áŹááťáŻááşááťáŹá¸ááᯠáááşááŽá¸áááˇáş developer ááťáŹá¸áĄáŹá¸ áááşá¸áááŻáˇáĄáŹá¸ áá°ááŽáááşáááş áĄáŹááŻáśááźáąáŹááşá¸áááŻááşááźáąáááŻááťáŹá¸ááŤáááşá
Nix: áááąáŹááťááşááᯠáĄáá°áá°ááťáááşá
Serokell áá˝ááş ááťá˝ááşáŻááşáááŻáˇáááş ááááááşááźáŽá¸ááźá áşáááşá . ááťá˝ááşáŻááşáááŻáˇáááş ááťá˝ááşáŻááşáááŻáˇááááąáŹááťááşááťáŹá¸ááᯠáááşá¸áážááˇáşáĄáá°á áŻááąáŹááşá¸áᏠáááşá¸áááŻáˇáááŻáĄááŻáśá¸ááźáŻá áĄááŻáśá¸ááťááŤá áážááˇáş ááťá˝ááşáŻááşáááŻáˇá ááŹááŹááťáŹá¸áĄáŹá¸ááŻáśá¸áá˝ááş áááˇáşáá˝ááşá¸ááŹá¸áááşá . áááşá¸ááźáąáŹááˇáş ááťá˝ááşáŻááşáááŻáˇááááşááąáŹááşáážáŻááťáŹá¸áĄáŹá¸ááŻáśá¸ááᯠááźááşáááşááŻááşááŻááşáááŻááşááźáŽá¸ 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 áá áşááŻááźá áşáááşá Fift Assembler ááᯠáĄááźáŹá¸ááŹááŹá ááŹá¸ááźááˇáş ááźáŻá áŻááŹá¸áááşá
ááášá ááĄá áŻáĄáá˝á˛áˇ - TVM áĄáá˝ááş binary executable code áááŻááŻááşááąá¸áááşáĄáá˝ááş á áŹááźááˇáşáááŻááşááŤá¸ááŻá Fifth Assembler áá˝ááş compiler ááážáááŤá áᎠ.
ááťá˝ááşááąáŹáşáááŻáˇáá˛áˇ ááźááŻááşáááŻááşáážáŻá áĄááŻááşááźá áşáááşá
ááąáŹááşááŻáśá¸áĄááąáá˛áˇá ááťá˝ááşááąáŹáşáááŻáˇáá˛áˇ ááźááŻá¸á áŹá¸áĄáŹá¸ááŻááşáážáŻáá˛áˇ ááááşáá˝áąááᯠááźááˇáşááááˇáşáĄááťáááşááŤáá˛á
áĄááźááŻááşáĄáááŻááş áá˝áąááąá¸ááťáąáážáŻáááŻááşá¸
áá˝áąááąá¸ááťáąáážáŻááťááşáááşáááş ááŻáśá¸á á˝á˛áá°áážá áşáŚá¸áĄáŹá¸ blockchain ááźááşááá˝ááş áá˝áąááąá¸ááťáąáážáŻááťáŹá¸ááᯠááąá¸áááŻáˇáá˝ááˇáşááźáŻáááˇáş á áááşááťááąáŹ á áŹááťáŻááşáá áşááŻááźá áşáááşá ááááşáĄááąááźááˇáş áááşáááş áá˝áąááŹáá (ááąáŹáşááážááşááážáááŤ)á áĄááťáááşáááşá¸ áááşááŹáááş (ááąáŹááşáá áşááŻáśá¸ááᯠááŻááşááąáŹááşáááş á áąáŹááˇáşá ááŹááááŻááŤ)á áá˝áąááąá¸ááťáąáážáŻááťáŹá¸áááş áĄáááŻáážááááąáŹááş áááşá¸ááŤá¸áááŻááşááźáŽá¸ áááŻáĄááşáááąáŹááş áááźáŹáá ááźá áşáááŻááşááŤáááşá á¤ááá ášá áá˝ááşá ááŤááŽááťáŹá¸áááş áĄááŻáśá¸áĄááźááşááąá¸ááźááşá¸ááááŹá¸ááťážááážáŻááᯠá áááşááťááąáŹá áŹááťáŻááşááźááˇáş áĄáŹáááśááŹá¸ááąáŹááźáąáŹááˇáş ááŤááŽááťáŹá¸áááş áĄááťááşá¸ááťááşá¸ááŻáśááźááşáááşááááŻáĄááşááŤá
ááźáżááŹáĄáá˝ááş áĄááąáŹáşááąá¸ áááŻá¸áážááşá¸áá˛áˇ áĄááźáąáá áşááŻááᯠááťá˝ááşááąáŹáşáááŻáˇ áá˝áąáˇáážááá˛áˇááŤáááşá ááŤááŽáážá áşááŻáááş ááśááŤááşáážá áşááŻááŤáážáááąáŹá áá áşááŻá áŽáá˝ááş ááŤááŽáá áşááŻá áŽáážááąá¸ááąáŹááşáááˇáş áá˝áąáááŹááĄááźááˇáşááźááˇáş áááşáážááşáááŻá¸ááŹá¸ááąáŹ áááşááąáˇááťáşááťáŹá¸ááᯠááážááşáááŻááşáááşá ááŽááááşá¸ááááşá¸áážá áşááŻá áĄááŻááşááŻááşááŻáśááŤáá˛á áááŹá¸áááŻá¸ááť ááźááˇáşááąáááˇáşá áá áşááťáŹá¸áá˝ááş áĄááąáŹááşá¸áĄáááşááźáŻááŻááşáážáŻáá˝ááş "ááźá áşáá˛áˇáááˇáş" áĄááááˇáşááᯠáááşáážááşááŤá á¤áĄááťááşáĄáááşááᯠáĄááŻáśá¸ááźáŻááźááşá¸ááźááˇáş á áŹááťáŻááşáááş ááźá áşáááŻááşááťáąáážáááąáŹ áááááášáááťáŹá¸ááᯠááźáąáážááşá¸áááŻááşáááşááźá áşáááşá
ááááşááąáŹáˇá ááśááŤááşáá áşááŻá ááŽá áááşáá°á¸ááᯠáĄááąáŹááşáĄáááşááąáŹáşáááŻáˇ ááŻáśááąáŹááşááŤáááşá ááŤááąáááˇáş ááŽáááşá¸áá˛áˇ áááŻáĄáááşááźáąáá˛áˇ user interface ááᯠáááşááŽá¸áááŻááşááŹááźáąáŹááˇáş áážá áşááŻá ááŻáśá¸ááᯠááťááşááŹá¸áá˛áˇááŤáááşá áááŻáˇáĄááźááşá ááťá˝ááşáŻááşáááŻáˇáááş áááşááąáˇááťáşáá áşááŻá áŽáá˝ááş áá˝áąááąá¸ááťáąáážáŻáááŹáááᯠáááˇáşáá˝ááşá¸áááş ááŻáśá¸ááźááşáá˛áˇáááşá áĄáááşá áĄááźáąáŹááşá¸áá áşá áŻáśáá áşááŹááźáąáŹááˇáş áááşááąáˇááťáşááťáąáŹááşááŻáśá¸áá˝áŹá¸ááŤáá áááŹááĄáŹá¸ááŻáśá¸áážááˇáş ááąáŹááşááŻáśá¸áá˝ááşááťááşáážáŻáážááşáááşááąáŹáşáááşá¸ áĄááŻáśá¸ááźáŻáá°áááş ááŻáśá¸áážáŻáśá¸áážáŻááᯠááááááŹá¸áááááŻááşááŤá
ááťá˝ááşáŻááşáááŻáˇáá áááşáá°á¸ááᯠá ááşá¸áááşáááşáĄáá˝ááş á¤áá˛áˇáááŻáˇááąáŹ áááŻá¸áážááşá¸ááźáŽá¸ ááááťááąáŹ áá˝áąááąá¸ááťáąáážáŻáááşá¸ááźáąáŹááşá¸ááááŻáááŻááąáŹááᯠáĄááŻáśá¸ááźáŻááźááşá¸á áĽáááŹááťáŹá¸ááᯠááťá˝ááşáŻááşáááŻáˇ áážáŹáá˝áąáá˛áˇáááşá áĄáśáˇááźá ááŹááąáŹááşá¸ááŹá áážá áşááŻáá˛áá˝áąáˇáááş-
- unidirectional channel ááá ášá áĄáá˝ááşáᏠáĄááŹá¸áá°ááťááşá¸áááşáážáŻá
- ááťá˝ááşáŻááşáááŻáˇáážááˇáş áá°ááŽááąáŹ áĄáá°áĄáááᯠááąáŹáşááźáááşá áááŻáˇááąáŹáş ááąááŻááťáážááşáááşáážáŻáážááˇáş áááááášáááźáąáážááşá¸ááąá¸ááŻááşááŻáśá¸ááŻááşáááşá¸ááťáŹá¸áá˛áˇáááŻáˇááąáŹ áĄááąá¸ááźáŽá¸ááąáŹáĄááąá¸á áááşáĄááťááşááťáŹá¸á á˝áŹááᯠááážááşá¸ááźáá˛á
ááťá˝ááşáŻááşáááŻáˇá ááááŻáááŻááąáŹááᯠáááşá¸á áážááşáááşáážáŻááᯠáĄáá°á¸áááŻááźáŻá áĄááąá¸á áááşááąáŹáşááźááźááşá¸áááş áĄáááášááŹááşáážáááźáąáŹááşá¸ áááşáážáŹá¸ááŤáááşá áĄááźáááşááźáááşááźááşááŻááşááźáŽá¸ááąáŹááşá áááşáážááşááťááşá áĄáááşáááˇáşááźá áşááąááźáŽá áááşáááşá¸ááŻááşáááŻááşááŤááźáŽá .
ááťá˝ááşáŻááşáááŻáˇáááş 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
