á¡á²áá® Telegram ááᯠááŒá¬ážáá°ážááŒááŸá¬áá«á
Serokell á¡ááœá²á·ááẠááŒá®ážáá¬ážáá±á¬ blockchain ááá±á¬áá»ááºáá»á¬ážááᯠáá®ááœááºáá¬ááœáẠá¡ááœá±á·á¡ááŒá¯á¶áá»á¬ážá áœá¬ááŸááááŒáá·áº áá±ážáááºáá¬ážááááá«á áá»áœááºá¯ááºááá¯á·ááẠáááºáááºážáá«ážáŠážá¡á¬áž ááŒáá¯ááºááœá²ááá¯á·ááœáŸá²á¡ááºáá²á·ááŒá®áž ááŸá áºáááºá¡ááŒá¬ááœáẠáááºážááá¯á·ááẠ(á¡áááºážáááºáá»áŸáá¬áá±á¬áá»áááºážá¡áááºááŒá±á¬áẠSexy Chameleon) á¡á±á¬ááºááœáẠááááá±áá¬ááᯠáááŸááá²á·áááºá áá®áá±á¬ááºážáá«ážááŸá¬ áá°ááá¯á·áááºááá¯áá¯ááºáá²á·áááºááá¯áᬠááŒá±á¬ááŒáá«áááºá áá±á¬áẠáááºáááá áºááœáẠáááºááẠá¡áááºážáá¯á¶áž á áááºáááºá á¬ážá áá¬áá±á¬ááºážáá±á¬ áá¬ááºáááºážáá áºáá¯ááºááᯠáááºááŸá¯ááá¯ááºáááá·áºáááºáᯠáá»áŸá±á¬áºááá·áºááŒá®áž á¡áá»á¬ážá á¯ááŸá¬ ááá·áºá¡áá¯ááºááœáẠá¡áá¯á¶ážáá»ááá¯ááºááá·áº á¡áá¯á¶ážáááºáá±á¬á¡áá¬áá áºáá¯ááᯠáááºááœá±á·ááŸáááá¯ááºáááá·áºáááºáᯠáá»áŸá±á¬áºááá·áºáá«áááºá
áá«áá±ááá·áº á¡ááŒá±á¬ááºážá¡áá¬á¡áááºážáááºáá²á· á ááŒáá·áºáá¡á±á¬ááºá
ááŸááºááŒáá¯ááºááŸá¯ááŸáá·áºáááºážáá¡ááŒá±á¡áá±áá»á¬áž
ááá¯á·ááŒá±á¬áá·áº áá«áááºáá°áá»á¬ážá á¡ááááá¬áááºáá»á¬ážááŸá¬ á¡ááá¯ááŒá¯áá¬ážáá±á¬ á áááºá á¬áá»á¯ááºáá»á¬áž áá áºáᯠááá¯á·ááá¯áẠáá áºáá¯áááºááá¯áá±á¬ á¡áá±á¬ááºá¡áááºáá±á¬áºáá±á¬ááºááŒááºážá¡ááŒáẠTON áá±áá áá Ạááá¯ááá¯áá±á¬ááºážááœááºáá¬á á±ááẠá¡ááá¯ááŒá¯áá»ááºáá»á¬áž ááŒá¯áá¯ááºááŒááºážáááºááŒá áºáááºá ááŒáá¯ááºááœá²ááᯠá ááºáááºáᬠáá áááºá០á¡á±á¬ááºááá¯áᬠáá áááºá¡áá áá»ááºážááá²á·ááŒá®áž ááááºáá»á¬ážááᯠááá¯áááºáᬠáá áááºááœááºáᬠáá¯ááºááŒááºááŒá±áá¬áá²á·áááºá ááá¯á¡áá»áááºá¡ááœááºáž Telegram ááẠTelegram ááœáẠVoIP áá±á«áºááá¯ááŸá¯áá»á¬ážá á¡áááºá¡ááœá±ážááᯠá ááºážáááºááŒááºážááŸáá·áº á¡áá²ááŒááºáááºá¡ááœáẠC++ ááœáẠá¡ááºááºáá®áá±ážááŸááºážáá»á¬ážá áá®ááá¯ááºážááŸáá·áº ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááá¯ááºáᬠááŒáá¯ááºááœá²áá»á¬ážá ááááºáá»á¬ážááᯠááŒá±ááŒá¬ááá¯ááºáá²á·ááŒá®áž á¡áá»áááºá¡áá±á¬áºááŒá¬áá±áá²á·áááºá
á á®á ááºáá°áá»á¬ážá¡ááá¯ááŒá¯ááá·áºá á¬áááºážá០á áááºá á¬áá»á¯ááºááŸá áºáá¯ááᯠáá»áœááºá¯ááºááá¯á·ááœá±ážáá»ááºáá¬ážáááºá áááºážááá¯á·áá²á០áá áºáá¯á¡ááœááºá áá»áœááºá¯ááºááá¯á·ááẠTON ááŸáá·áº ááŒáá·áºáá±áá¬ážáá±á¬ áááááá¬áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áá²á·ááŒá®áž áá¯áááá¡á¬áž áá»áœááºá¯ááºááá¯á·á á¡ááºáá»ááºáá®áá¬áá»á¬ážá TON á¡ááœáẠá¡áá°ážááŒá¯á Haskell ááœáẠáááºáá±á¬ááºáá¬ážáá±á¬ áá¬áá¬á áá¬ážá¡áá áºááŒáá·áº á¡áá±á¬ááºá¡áááºáá±á¬áºáá²á·áááºá
áá¯ááºáá±á¬ááºááá¯ááºáá±á¬ áááá¯ááááºážáááºážáá¬áá¬á
áá¬ážááᯠááœá±ážáá»ááºááŒááºážááẠááá±á¬áºááááá¯ááºáá«á áá«ááá¯á·áá²á·
áá¬ááŒá±á¬áá·áº áá«áááºááá¯á· áá¯á¶ážááŒááºáá²á·áá¬áá²á
á¡ááá¯áá»á¯ááºá¡á¬ážááŒáá·áºá áá»áœááºá¯ááºááá¯á·á á¡áá°ážááŒá¯áá»áœááºážáá»ááºááŸá¯ááẠá á¶ááá¯ááºáá±á¬á á¡áá°ážáá»áœááºážáá»ááºááŸá¯áá»á¬ážááá¯á¡ááºááŒá®áž áááŒá¬ááááá¯áááᯠá¡áá¯ááºáá®á¡ááá¯ááºážá¡ááá¯ááºážá¡ááœáẠáááá¹áá¶ááá¯ááºáá¬áááºááá¯ážááŸááá±á¬ááŒá±á¬áá·áºááŒá áºáááºá áá»áœááºá¯ááºááá¯á·ááẠopen-source ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááᯠá¡ááá¯ááºá¡áá¬áá±á¬ááºáá¶ááŒá®áž áááºážááá¬áááºááŒá®ážáá¬ááŸá¯ááœáẠáá«áááºáá±á¬ááºááœááºáá»ááºááŸáááŒá®áž ááœááºáá»á°áá¬áááá¹áá¶ááŸáá·áº áááºá¹áá»á¬áááºáááºááŸá ááááºáááºáž áá¯ááŸá¬ážááá¹áááá¯ááºáá»á¬ážááŸáá·áºáááºáž áá°ážáá±á«ááºážáá±á¬ááºááœááºáá»ááºááŸááááºá
ááŒáá¯ááºááá¯ááºááŸá¯á á áááºáááºá á¬ážá áá¬áá±á¬ááºážáá±á¬ á¡áá¯ááºáá»á¬ážááŸáá·áº áá»áœááºá¯ááºááá¯á·ááá»á áºááŸá áœá¬áá±á¬ Telegram ááá±á¬áá»ááºááœáẠáá«áááºáááºáááºááŸá¯ááẠáááºážááá¯á·ááá¯ááºááá¯ááºá¡ááœáẠá¡ááœááºáá±á¬ááºážááœááºáá±á¬ ááŸá¯á¶á·áá±á¬áºááŸá¯áá áºáá¯ááŒá áºáá±á¬áºáááºáž áá¯áááºáá¯á¶ááœá±ááẠáá±á¬ááºááẠáááºáá¯á¶ážáá áºáᯠááŒá áºáá¬áá²á·áááºá ð
TON blockchain áá¯áá±áá
áá»áœááºá¯ááºááá¯á·ááẠblockchainá áá¬ááºáááºáá¯ááŸáá·áº á
ááºáááºáá°ááŸá¯ááœáẠááá¯ážáááºááŸá¯á¡áá
áºáá»á¬ážááᯠá¡áá®ážáááºá
á±á¬áá·áºááŒáá·áºááŒá®áž áá»áœááºá¯ááºááá¯á·áá¯ááºáá±á¬ááºááá·áº áááºáááºáá
áºáá¯á
á®ááœáẠáááá¬áááºááŸá¬ážáá±á¬áá¯ááºááœáŸááºááŸá¯áá
áºáá¯á¡á¬áž áááºááœááºááá¶ááẠááŒáá¯ážá
á¬ážáá«á ááá¯á·ááŒá±á¬áá·áº ááŒáá¯ááºááœá²á
áááºáá»áááºááœáẠáá»áœááºá¯ááºááá¯á·á¡ááœá²á·ááẠá¡ááŒá¶á¥á¬ááºáá»á¬ážááŸáá·áº áááºážááŸá®ážáá±ááŒá®ááŒá
áºáááºá
ááŒáá¯ááºááœá²á áááºáá»áááºááœááºá áá¯ááºááᯠáá¯ááºáá±ááŒá®ážááŒá áºáá±á¬ááŒá±á¬áá·áº á¡áá»áááºáá¯ááºáááºáá¬á á±ááẠáá±ážáá¬ážáá¬ážáá±á¬ áááºážááœáŸáẠááá¯á·ááá¯áẠá¡áá»ááºážáá»á¯ááºááᯠááŸá¬ááœá±ááẠáá¯á¶ážááŒááºáá²á·áááºá á¡áá¯á¶ážááŒá¯áá°áá»á¬áž. áá¶ááá±á¬ááºážá áœá¬ááŒáá·áºá áááºážááẠUbuntu ááœáẠááááºáá±á¬ááºážáááºáááºááŒááºážá¡ááœáẠáááºážááœáŸááºáá»ááºáá»á¬ážááŸááœá²á áááºááá·áºááááºááá¯áá»áŸ ááá±ážááá¯ááºáá²á·áá«á
á á¬áááºážááá¯ááºááá¯áẠáá±á¬ááºážá áœá¬ áá¯áá±ááááŒá¯áá¬ážáá±á¬áºáááºáž á¡áá»áá¯á·áá±áá¬áá»á¬ážááœáẠáááºááááºáá«áááºá áááŒá¬ááááá¯áááᯠáá»áœááºá¯ááºááá¯á·ááẠá¡áá»áá¯á·áá±á¬á¡áá»ááºáá»á¬ážáá®ááá¯á· ááŒááºááœá¬ážáᬠá áááºáá°ážáá¬ááºááá¯ááºáᬠá áááºáá°ážá áááºáááºážáá»á¬ážááᯠá¡ááá·áºáááá·áºáá±á¬áºááŒáá»ááºáá»á¬ážá០á¡ááá·áºáááá·áºá¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯á¡áá±ážá áááºááá¯á· ááŒá±á¬ááºážáá²á·ááááºá
áááºááŸááºáá»ááºááœáẠáááºááœá±á·á¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážá á¡áá±ážá áááºáá±á¬áºááŒáá»ááºáá¯á¶ážáááá«áááºáá«á ááá¯ááá¯ááœááºáá°áááºááŒá áºáááºá virtual machine ááẠáááºážá stack ááᯠááá¯ááºá á¬ážááŒá¯áá¯á¶á¡ááŒá±á¬ááºáž á¡áá»ááºá¡áááºáá»á¬ážááẠTON ááááºáá±á¬ááºážá¡ááœáẠá áááºáá»áá±á¬ á á¬áá»á¯ááºáá»á¬ážááᯠáááºáá®ážááá·áº developer áá»á¬ážá¡á¬áž áááºážááá¯á·á¡á¬áž áá°áá®áááºááẠá¡á¬áá¯á¶ááŒá±á¬ááºážááá¯ááºááŒá±ááá¯áá»á¬ážáá«áááºá
Nix: ááá±á¬áá»ááºááᯠá¡áá°áá°áá»áááºá
Serokell ááœáẠáá»áœááºá¯ááºááá¯á·ááẠááááááºááŒá®ážááŒá
áºáááºá
áá®ááá¯áá²á· áá»áœááºáá±á¬áºááá¯á· á
áááºáááºáá®ážáá²á·áá«áááºá
$ 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 ááŸáá·áº áááºáá°áááºá
FunC áááºážááŸáá·áºáááºáá°áá±á¬ smart contract programming language áá
áºáá¯ááŒá
áºáááºá
ááá¹á
áá¡á
á¯á¡ááœá²á· - 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 ááŸáá·áº áááºááŸááºáá±á«ááºážáá»á¬ážá
áœá¬ ááá¯ááºáá¶á¡áááºá
á¬áá»á¯ááºá á¡áááºážá¡ááŒá
áºáá¯ááºá¡ááŒáá·áºá¡á
á¯á¶ááᯠááœáẠááœá±á·ááá¯ááºáá«áááºá
ááŒáá¯ááºááœá²ááŸáá·áº TON ááŸáá·áº áááºáááºá áá±á¬ááºáá»ááºáá»áááºá
á á¯á á¯áá±á«ááºážá áá»áœááºá¯ááºááá¯á·áá¡áá¯ááºááẠáá¬áá®áá±á«ááºáž 380 ááŒá¬ááẠ(ááŸááºáááºážááŸááºáá¬áá»á¬ážá á¡á ááºážá¡áá±ážáá»á¬ážááŸáá·áº á¡ááŸááºáááẠááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯ááá¯á·á¡áá«á¡áááº)á ááŒáá¯ááºááá¯ááºááŸá¯ááá±á¬áá»ááºááœáẠdeveloper áá«ážáŠážáá«áááºáá²á·áááº- CTOá á¡ááœá²á·áá±á«ááºážáá±á¬ááºá blockchain ááááºáá±á¬ááºážáá»áœááºážáá»ááºáá°áá»á¬ážááŸáá·áº Haskell áá±á¬á·ááºáá²áá®ááœááºáá°áá»á¬ážá
áááºáá¬ááœááºá áááºáá¬ááºá áááºážááŸá®ážáá±á¬á¡ááœá²á·ááá¯ááºáá¯ááºáá±á¬ááºááŸá¯ááŸáá·áº áááºážááá¬á¡áá áºáá»á¬ážá ááá¹ááá»á¬ážááœáẠáá»ááºááŒááºá áœá¬ááŸá áºááŒáŸá¯ááºááẠááá¯á¡ááºáá±á¬ááŒá±á¬áá·áº ááŒáá¯ááºááœá²ááœááºáá«áááºááẠá¡áááºážá¡ááŒá áºáá»á¬ážááᯠá¡áááºá¡áá²áááŸáááœá±á·ááŸááá²á·áááºá á¡ááá·áºá¡áááºááŸááá±á¬ á¡áááºážá¡ááŒá áºáá»á¬ážá á¡ááŒá±á¡áá±áá»á¬ážááœáẠá¡ááŒáá·áºáá¯á¶ážááááºáá»á¬ážáááŸáááẠá¡áááºáá±ážáááá±á¬ááá»á¬ážá áœá¬ááᯠá¡ááá¯ážáááŒááºááá¯ááºáá±á¬ á¡ááœá±á·á¡ááŒá¯á¶ááŸáá·áº á¡ááœááºáá±á¬ááºážááœááºáá±á¬ á¡ááŸááºáááá»á¬ážááŒáá·áº áá»á±á¬áºááŒá±ážáá±ážáá«áááºá ááá¯á·á¡ááŒááºá ááá¯ááá¯á·áá±á¬á¡áá¯ááºáá»á¬ážááá¯áá¯ááºáá±á¬ááºááŒááºážááẠáá¯áá¹ááá®ááá¯ááºáááºážá ááºáá»á¬ážááᯠáá±á¬ááºážááœááºá áœá¬áá¯ááºáá±á¬ááºááá¯ááºááŒááºážáááŸááá² á¡ááŸááºááááºáá»á±á¬ááºáááºáá±á¬ááááºáá»á¬ážáááŸáááẠá¡ááœááºáááºáá²áá±á¬ááŒá±á¬áá·áº áááºážááẠáá¯áá¹ááá®ááá¯ááºáááºážá ááºáá»á¬ážááᯠá¡ááŒá²áááºážá ááºážáááºááŸá¯áá áºáá¯ááŒá áºáááºá
á á¬áá¬ážáá±ážáá¬áž - TON á¡ááœá²á·á០áá¯ááºáá±á¬ááºáá²á·áá±á¬ á¡áá¯ááºááá¬áááᯠááá±á¬áá»áááá«áááºá áá°ááá¯á·á ááŸá¯ááºááœá±ážááŒá®áž ááŸáááŒá®áž á¡áá±ážá¡ááŒá®ážáá¯á¶ážááá±á¬á· á¡áá¯ááºáá¯ááºáá²á·á áá áºááᯠáááºáá±á¬ááºááá¯ááºáá²á·áááºá TON ááẠááŒá®ážáá¬ážáá±á¬ á¡áá¬ážá¡áá¬ááŸááá±á¬ ááááºáá±á¬ááºážáá áºáá¯á¡ááŒá Ạáááºáá±ááŒáá²á·áááºá ááá¯á·áá±á¬áºá á€áá±áá áá áºááœá¶á·ááŒáá¯ážááá¯ážáááºá á±áááºá¡ááœááºá blockchain ááá±á¬áá»ááºáá»á¬ážááœááºáááºážáá¡áá¯á¶ážááŒá¯ááŸá¯áááºááŸááºáá»ááºáá»á¬ážááŸáá·áºááœá¶á·ááŒáá¯ážááá¯ážáááºáá±ážáááááá¬áá»á¬ážááá¯ážáááºáá±á¬ááºážááœááºá¡á±á¬ááºáá¯ááºáá±á¬ááºáááºáá»á¬ážá áœá¬ááá¯á¡ááºáááºá ááᯠáá¯ááºáááºážá ááºá áá áºá áááºáá áºááá¯ááºážá¡ááŒá Ạáá»áœááºá¯ááºááá¯á· áá¯ááºáá°áá«áááºá
á€áá±á¬ááºážáá«ážááá¯áááºááŒá®ážáá±á¬áẠááá·áºááœáẠááá·áºááŒá¿áá¬áá»á¬ážááá¯ááŒá±ááŸááºážááẠTON ááá¯á¡áá¯á¶ážááŒá¯áá¯á¶ááŸáá·áºáááºáááºááá·áº á¡ááŒá¶á¥á¬ááºáá»á¬áž áá
áºá
á¯á¶áá
áºáá¬ááŸááá±áá«áá
source: www.habr.com