ืืืจ'ืืืข ืืืกืืึธืืข ืืขืืขืจื ืึทื ืืขืืขืืจืึทื
ืื ืกืขืจืึธืงืขืื ืืึทื ืฉืึทืคึฟื, ืืื ืืจืืื ืืขืจืคืึทืจืื ื ืืื ืืขืืืขืืึธืคึผืื ื ืืจืืืก ืืืึทืงืืืืืืึทื ืคึผืจืึทืืืฉืขืงืก, ืงืขื ื ืืฉื ืฉืืืื ืืึทืืื ืืขืจ. ืืืจ ืืขืืึทืืืืืึทื ืคืื ืฃ ืขืืคึผืืืืื ืฆื ืื ืคืึทืจืืขืกื, ืืื ืฆืืืื ืืืึธืื ืฉืคึผืขืืขืจ ืืื ืืขื ืืืขื ืขืจืฉืืขืจ ืึธืจื ืืื ืขืก ืืื ืืขืจ ืื (ืืื) ืืึทืฉืืืื ืืจืึทืค - ืฆืื ืขืืขื ืืฉ ืกืขืงืกื ืืฉืึทืืขืืขืึธื. ืืื ืืขื ืึทืจืืืงื ืืื ืืืขื ืจืขืื ืืืขืื ืืื ืืื ืืืื ืขืก. ืืืจ ืืึธืคื ืึทื ืืื ืื ืืืืึทืืขืจ ืฆืขื ืืื ืื ืืืจ ืืืขื ืืืึท ืืื ืืกืืขืจ ืืืืขื ืขื ืึท ืืฉืืงืึทืืืข ืืขืฉืืืืข, ืืื ืืื ืจืืึฟ ืืืจ ืืืขื ืืขืคึฟืื ืขื ืขืคึผืขืก ื ืืฆืืง ืืืึธืก ืืืจ ืงืขื ืขื ืฆืืืืืื ืืื ืืืื ืึทืจืืขื.
ืึธืืขืจ ืืึธืืืจ ืึธื ืืืืื ืืื ืึท ืืืกื ืงืึธื ืืขืงืกื.
ืคืึทืจืืขืกื ืืื ืืืึทื ืืืืื ืืื ืืขื
ืึทืืื, ืื ืืืืคึผื ืืึทืกืงืก ืคืื ืื ืคึผืึทืจืืืกืึทืคึผืึทื ืฅ ืืขื ืขื ืื ืืืคึผืืึทืืขื ืืืืฉืึทื ืคืื ืืืื ืขืจ ืึธืืขืจ ืืขืจ ืคืื ืื ืคืืจืืขืืืืื ืงืืื ืงืึทื ืืจืึทืงืฅ, ืืื ืืขืืื ื ืืื ืคึผืจืึทืคึผืึธืืืึทืื ืฆื ืคึฟืึทืจืืขืกืขืจื ืื TON ืืงืึธืืกืืกืืึทื. ืื ืคืึทืจืืขืกื ืืื ืืขืืืขื ืคืื 24 ืกืขืคืืขืืืขืจ ืืื 15 ืืงืืืืขืจ, ืืื ืื ืจืขืืืืืึทืื ืืขื ืขื ืืืืืข ืืืืื ืืืืฃ 15 ื ืืืืขืืืขืจ. ืืึทื ืฅ ืึท ืืึทื ื ืฆืืึทื, ืงืึทื ืกืืืขืจืื ื ืึทื ืืขืฉืึทืก ืืขื ืืึธื ืืขืืขืืจืึทื ืืขืจืืื ืฆื ืืึทืืื ืืื ืืขืืื ืื ืจืขืืืืืึทืื ืคืื ืงืึทื ืืขืก ืืืืฃ ืื ืคึผืืึทื ืืื ืึทื ืืืืืงืืื ื ืคืื ืึทืคึผืืึทืงืืืฉืึทื ื ืืื C ++ ืคึฟืึทืจ ืืขืกืืื ื ืืื ืึทืกืกืขืกืก ืื ืงืืืึทืืืืขื ืคืื ืืืึธืืคึผ ืงืึทืืืก ืืื ืืขืืขืืจืึทื.
ืืืจ ืืึธืื ืืืืกืืขืงืืืื ืฆืืืื ืงืืื ืงืึทื ืืจืึทืงืฅ ืคืื ืืขืจ ืจืฉืืื ืคืืจืืขืืืืื ืืืจื ืื ืึธืจืืึทื ืืืืขืจื. ืคึฟืึทืจ ืืืื ืขืจ ืคืื ืืื, ืืืจ ืืขืืืืื ื ืืืฉืืจืื ืคืื ืื ืืขืจืืขืืืืื ืืื TON, ืืื ืื ืฆืืืืืืข ืืื ืืืคึผืืึทืืขื ืึทื ืืื ืึท ื ืืึทืข ืฉืคึผืจืึทื ืืขืืืขืืึธืคึผืขื ืืืจื ืืื ืืืขืจ ืขื ืืืฉืึทื ืืจื ืกืคึผืึทืกืืคืืงืื ืคึฟืึทืจ TON ืืื ืืขืืืื ืืื Haskell.
ืื ืืจืืจื ืคืื ืึท ืคืึทื ืืงืฉืึทื ืึทื ืคึผืจืึธืืจืึทืืืื ื ืฉืคึผืจืึทื ืืื ื ืืฉื ืึทืงืกืึทืืขื ืืึทื. ืืื ืืื ืืขืจ
ืคืืจืืืืก ืืืื ืืืจ ืืคืืื ืืึทืฉืืึธืกื ืฆื ืึธื ืืืื ื ืขืืขื?
ืืื ืงืืจืฅ, ืืืืึทื ืืื ืืืขืจ ืกืคึผืขืฉืึทืืึทืืืืฉืึทื ืืื ื ืื-ื ืึธืจืืึทื ืืื ืงืึธืืคึผืืขืงืก ืคึผืจืึทืืืฉืขืงืก ืืืึธืก ืืึทืจืคื ืกืคึผืขืฆืืขื ืกืงืืื ืืื ืืขื ืขื ืึธืคื ืคืื ืืืืกื ืฉืืคืืืขืืข ืืืขืจื ืคึฟืึทืจ ืื IT ืงืื. ืืืจ ืฉืืืฆื ืฉืืืจืง ืึธืคึฟื-ืืงืืจ ืึทื ืืืืืงืืื ื ืืื ืืขื ืขื ืคืึทืจืงื ืึทืกื ืืื ืืืึทื ืคึผืึธืคึผืืืึทืจืืืึทืืืึธื, ืืื ืืืื ืงืึธืืึทืคึผืขืจืืื ืืื ืืืืื ื ืจืืกืืฉ ืืื ืืืืขืจืกืืืขืื ืืื ืื ืคืขืื ืคืื ืงืึธืืคึผืืืืขืจ ืืืืกื ืฉืึทืคึฟื ืืื ืืืืขืืืืืง.
ื ื ืืื ืืขืจืขืกืื ื ืข ืืืืคืืืืข ื ืคื ื ืืข ืจ ืคืืจืืขืกืืื ื ืื ื ืืืื ื ืื ื ืื ื ืืื ืืืข ืจ ืืืืืืืข ืจ ืืขืืขืืจื ื ืคืจืืืขืงื , ืืฒื ืข ื ืื ื ืื ื ืืขืฐืข ื ื ืืืืกืืขืฆืฒืื ืืข ืจ ืืืืืืืืฆืืข , ืืืข ืจ ืืข ืจ ืคืจืฒืึพืคืื ื ืื ื ืืขืฐืืจ ื ื ื ืฆืืืื ืข ืืื ืกืขื ืืืื . ๐
TON ืืืึธืงืืฉืืื ืคืึธืจืฉืื ื
ืืืจ ืขื ื ืืึธื ืืืึธืจ ื ืืึท ืืืืืขืืึทืคึผืืึทื ืฅ ืืื ืืืึทืงืืืืืืึทื, ืงืื ืกืืืขื ืกืืืื ืืื ืืึทืฉืื ืืขืจื ืขื ืืื ืคึผืจืืืืจื ื ืืฉื ืฆื ืคืึทืจืคืืจื ืึท ืืืื ืืึทืืืืืืง ืืขืืืื ื ืืื ืืขืืขืจ ืคืื ืื ืืขืืืื ืืื ืืืึธืก ืืืจ ืึทืจืืขืื. ืืขืจืืืขืจ, ืืืขื ืื ืคืึทืจืืขืกื ืื ืืขืืืืื, ืืื ืืืขืจ ืืึทื ืฉืึทืคึฟื ืืื ืฉืืื ืืึทืงืึทื ื ืืื ืื ืืขืืื ืงืขื ืคืื
ืืืขื ืื ืคืึทืจืืขืกื ืกืืึทืจืืขื, ืื ืงืึธื ืืื ืฉืืื ืืจืืืก, ืึทืืื ืฆื ืฉืคึผืึธืจื ืฆืืื, ืืืจ ืืึทืฉืืึธืกื ืฆื ืงืืงื ืคึฟืึทืจ ืึท ืคืืจืขืจ ืึธืืขืจ ืงืืฆืขืจ ืืขืฉืจืืื ืืืจื ืืืจื ื ืืฆืขืจืก. ืฆืื ืืึทืืืืขืจื, ืืึธืก ืืื ื ืืฉื ืืขืื ืงืืื ืจืขืืืืืึทืื - ืึทืืืฅ ืืื ืกืืจืืงืฆืืขืก ืคึฟืึทืจ ืึทืกืขืืืึทืืื ื ืื ืคึผืืึทืืคืึธืจืืข ืืืืฃ ืืืื ืื, ืืืจ ืืึธืื ื ืืฉื ืืขืคึฟืื ืขื ืงืืื ืื ืืขืจืข ืืึทืืขืจืืึทืืก.
ืื ืืืงืืืขื ืืืฆืืข ืืืืื ืืื ืืขืืืขื ืืื ืืขืคืืจืฉื, ืืืขืจ ืืื ืืขืืืขื ืฉืืืขืจ ืฆื ืืืืขื ืขื ืืื ืืขืืืืกืข ืืขืืืื. ืืึทื ืฅ ืึธืคื ืืืจ ืืึธืื ืฆื ืฆืืจืืงืงืืืขื ืฆื ืืืืขืจ ืคืื ืงืื ืืื ืืึทืฉืืืืขื ืคืื ืืืื-ืืืจืื ืืืกืงืจืืคึผืฉืึทื ื ืคืื ืึทืืกืืจืึทืงื ืืขืืื ืงืขื ืฆื ื ืืืขืจืืง-ืืืจืื ืืืคึผืืึทืืขื ืืืืฉืึทื ืืขืืึทืืืก.
ืขืก ืืืึธืื ืืืื ืืจืื ืืขืจ ืืืื ืื ืกืคึผืขืกืืคืืงืึทืืืึธื ืืื ื ืืฉื ืึทืจืืึทื ื ืขืืขื ืึท ืืืืืืื ืืึทืฉืจืืึทืืื ื ืคืื ืื ืืืคึผืืึทืืขื ืืืืฉืึทื. ืืื ืคึฟืึธืจืืึทืฆืืข ืืืขืื ืืื ืึท ืืืืจืืืึทื ืืึทืฉืื ืจืขืคึผืจืึทืืขื ืฅ ืืืื ืึธื ืืืืื ืืื ืืขืจ ืืกืชึผืื ืฆื ืืืกืืจืึทืงื ืืขืืืขืืึธืคึผืขืจืก ืงืจืืืืืื ื ืงืืื ืงืึทื ืืจืึทืงืฅ ืคึฟืึทืจ ืื 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.
ืคึผืจืึธืืจืึทืืืื ื ืคึฟืึทืจ TON
ืื ืงืืื ืงืึธื ืืจืึทืงื ืงืึธื ืืื ืื TON ื ืขืืืืึธืจืง ืืืืคื ืืืืฃ ืื TON Virtual Machine (TVM). TVM ืืื ืืขืจ ืงืึธืืคึผืืืฆืืจื ืืื ืจืืึฟ ืื ืืขืจืข ืืืืจืืืึทื ืืืฉืื ืขื, ืืื ืืื ืืืืขืจ ืืฉืืงืึทืืืข ืคืึทื ืืงืฉืึทื ืึทืืืื, ืืืฉื, ืขืก ืงืขื ืขื ืึทืจืืขืื ืืื ืคืืจืืขืฆืื ืืขื ะธ ืืื ืงืก ืฆื ืืึทืื.
ืืขืจืฆื, ืื ืืืื ืคืื TON ืืืฉืืคื ืืจืื ื ืืึทืข ืคึผืจืึธืืจืึทืืืื ื ืฉืคึผืจืึทืื:
ืคืืคื ืืื ืึท ืื ืืืืขืจืกืึทื ืึธื ืืืืื ืคึผืจืึธืืจืึทืืืื ื ืฉืคึผืจืึทื ืืืึธืก ืจืืืขืืืึทืื
FunC ืืื ืึท ืงืืื ืงืึธื ืืจืึทืงื ืคึผืจืึธืืจืึทืืืื ื ืฉืคึผืจืึทื ืืืึธืก ืืื ืขื ืืขื ืฆื
ืคืื ืคืืขืจ ืึทืกืขืืืืขืจ - ืคืืคื ืืืืืืึธืืขืง ืคึฟืึทืจ ืืืฉืขื ืขืจืืืืื ื ืืืื ืขืจื ืขืงืกืขืงืืืึทืืืข ืงืึธื ืคึฟืึทืจ TVM. ืคืื ืคื ืึทืกืขืืืืขืจ ืืื ื ืืฉื ืืึธืื ืึท ืงืึทืืคึผืืืืขืจ. ืืืก
ืืื ืืืขืจ ืคืึทืจืืขืกื ืึทืจืืขื
ืฆืื ืกืืฃ, ืขืก ืืื ืฆืืื ืฆื ืงืืงื ืืื ืื ืจืขืืืืืึทืื ืคืื ืืื ืืืขืจ ืืฉืชืืืืช.
ืึทืกืื ืืฉืจืึธื ืึธืืก ืฆืึธืืื ื ืงืึทื ืึทื
ืฆืึธืืื ื ืงืึทื ืึทื ืืื ืึท ืงืืื ืงืึธื ืืจืึทืงื ืืืึธืก ืึทืืึทืื ืฆืืืื ืืืืขืจื ืฆื ืฉืืงื ืคึผืืืืึทื ืฅ ืึทืจืืืก ืื ืืืึทืงืืืืืืึทื. ืืื ืึท ืจืขืืืืืึทื, ืืืจ ืฉืคึผืึธืจื ื ืืฉื ืืืืื ืืขืื (ืขืก ืืื ืงืืื ืงืึธืืืกืืข), ืึธืืขืจ ืืืื ืฆืืื (ืืืจ ืืึธื ื ืื ืืึธืื ืฆื ืืืึทืจืื ืคึฟืึทืจ ืื ืืืืึทืืขืจ ืืืึธืง ืฆื ืืืื ืคึผืจืึทืกืขืกื). ืคึผืืืืึทื ืฅ ืงืขื ืขื ืืืื ืืื ืงืืืื ืืื ืืขืืืืื ืืื ืืื ืึธืคื ืืื ืคืืจืืื ืื. ืืื ืืขื ืคืึทื, ืื ืคึผืึทืจืืืขืก ืืึธื ื ืื ืืึธืื ืฆื ืฆืืืจืื ืืขืืขืจ ืื ืืขืจืข, ืืืืึทื ืื ืืืืฉืขืจ ืคืื ืื ืืขืฆื ืืึดืฉืืึฟ ืืื ืืขืจืึทื ืืื ืืืจื ืื ืงืืื ืงืึธื ืืจืึทืงื.
ืืืจ ืืขืคืื ืขื ืึท ืคืขืจืื ืคึผืฉืื ืืืืืื ื ืฆื ืืขื ืคึผืจืึธืืืขื. ืฆืืืื ืคึผืึทืจืืืขืก ืงืขื ืขื ืืืึทืื ืืขืืชืืขื ืึทืจืืืงืืขื, ืืขืืขืจ ืืื ืฆืืืื ื ืืืขืจื - ืื ืคืื ืกืืืข ืืึทืฆืึธืื ืืืจื ืืขืืขืจ ืคึผืึทืจืืื. ืื ืฆืืืื ื ืืืขืจื ืึทืจืืขื ืืื
ืืื ืคืึทืงื, ืืืื ื ืืืขืจ ืืื ืืขื ืื ืฆื ืื ืกืืจืืืขื ื ืืขื ืืขืืึทื ืง, ืึธืืขืจ ืืืจ ืืื ืงืก ืืืืืข ืืืืึทื ืืขื ืืืขื ืืืจ ืงืขื ืืึทืื ืึท ืืขืจ ืืึทืงืืืขื ืืึทื ืืฆืขืจ ืฆืืืื ื. ืืื ืืขืจืฆื, ืืืจ ืืึทืฉืืึธืกื ืฆื ืึทืจืืึทื ื ืขืืขื ืื ืฆืึธืืื ื ืกืืืข ืืื ืืขืืขืจ ืึธื ืืึธื. ืึธื ืขืก, ืืืื ืืขืจ ืึธื ืืึธื ืืื ืคืึทืจืคืึทืื ืคึฟืึทืจ ืขืืืขืืข ืกืืื, ืืึธืืฉ ืึทืืข ืื ืึทืืึทืื ืฅ ืืื ืื ืืขืฆื ืืขืืฉืื ืืืขื ืืืื ืจืืืืืง, ืืขืจ ืืึทื ืืฆืขืจ ืงืขื ื ืืฉื ืืึทืืขืจืงื ืื ืึธื ืืืขืจ.
ืฆื ืคึผืจืืืืจื ืืื ืืืขืจ ืืขืืึทื ืง, ืืืจ ืงืืงื ืคึฟืึทืจ ืืืืฉืคืืื ืคืื ื ืืฆื ืึทืืึท ืึท ืคึผืฉืื ืืื ืงืึทื ืกืืืก ืฆืึธืืื ื ืงืึทื ืึทื ืคึผืจืึธืืึธืงืึธื. ืกืึทืคึผืจืืืืื ืืื, ืืืจ ืืขืคึฟืื ืขื ืืืืื ืฆืืืื:
ืืึทืฉืจืืึทืืื ื ืึท ืขื ืืขื ืฆืืืึทื ื, ืืืืื ืคึฟืึทืจ ืื ืคืึทื ืคืื ืึท ืื ืืืืจืขืงืืืึธื ืึทื ืงืึทื ืึทื.ืืืืึธืจืืึทื , ืืืึธืก ืืืฉืจืืืื ืื ืืขืืืข ืืขืืึทื ืง ืืื ืืื ืืืขืจ, ืึธืืขืจ ืึธื ืืขืจืงืืขืจื ืคืืืข ืืืืืืืง ืืขืืึทืืืก, ืึทืืึท ืืื ืืขื ืขืจืึทื ืงืขืจืขืงืื ืึทืก ืืื ืงืึธื ืคืืืงื ืืึทืืืึธืืข ืคึผืจืึธืืกืืืืฉืขืจื.
ืข ืก ืื ื ืืขืฐืืจ ื ืงืืืจ , ื ื ืกืณืื ื ืื ื ืฆ ื ืืืฉืจืฒื ื ืืื ืืืข ืจ ืคืจืืืืงืื , ืืืืื ืืขืจ ืข ืืืืคืืขืจืงืืืืงืฒ ื ืืื ืฃ ืืฒ ื ืจืืืืืงืฒื . ื ืึธื ืขืืืขืืข ืืืขืจืืืฉืึทื ื, ืื ืืึทืฉืจืืึทืืื ื ืืื ืืขืืืขื ืืจืืื, ืืื ืืืฆื ืืืจ ืงืขื ืขื ืืืื.
ืืืจ ืืืคึผืืึทืืขื ืึทื ืืขื ืงืึธื ืืจืึทืงื ืืื FunC, ืืื ืืืจ ืืขืฉืจืืื ืื ืืึทืคึฟืขืื ืฉืืจื ืืืืืืึทืืื ืคึฟืึทืจ ืื ืืขืจืึทืงืืื ื ืืื ืืื ืืืขืจ ืงืึธื ืืจืึทืงื ืืขืืึทืืจืข ืืื Fift, ืืื ืจืขืงืึทืืขื ืืื ืืืจื ืื ืึธืจืืึทื ืืืืขืจื. ืืืจ ืงืขื ืืึธืื ืืืืกืืขืจืืืืืื ืงืืื ืื ืืขืจืข ืฉืคึผืจืึทื ืคึฟืึทืจ ืืื ืืืขืจ CLI, ืึธืืขืจ ืืืจ ืืขื ืขื ืืขืืืขื ืืื ืืขืจืขืกืืจื ืฆื ืคึผืจืืืืจื Fit ืฆื ืืขื ืืื ืขืก ืืื ืืืจืืืขืงืึธืื ืืื ืคืืจ.
ืฆื ืืืื ืขืจืืขื, ื ืึธื ืืจืืขืื ืืื Fift, ืืืจ ืืึธืื ื ืืฉื ืืขืืขื ืงืืื ืงืึทืืคึผืขืืื ื ืกืืืืช ืฆื ืืขืกืขืจ ืืืขืื ืืขื ืฉืคึผืจืึทื ืฆื ืคืึธืืงืก ืืื ืึทืงืืืืืื ืืขืืืืื ื ืฉืคึผืจืึทืื ืืื ืืขืืืขืืึธืคึผืขื ืืืฉืืจืื ืืื ืืืืืจืขืจืื. ืคึผืจืึธืืจืึทืืืื ื ืืื ืึท ืึธื ืืืืื-ืืืืืจื ืฉืคึผืจืึทื ืืื ืืึทื ืฅ ืคึผืจืืงืจืข, ืืืืึทื ืืืจ ืืืื ืงืขืกืืืืขืจ ืืึทืืื ืืื ืืืื ืงืึธืคึผ ืืืึธืก ืืื ืืืืฃ ืื ืึธื ืืืืื, ืืื ืืขืจ ืงืึทืืคึผืืืืขืจ ืืื ื ืืฉื ืืขืืคื ืืื ืืขื.
ืืขืจืืืขืจ, ืืืื ืืื ืืืขืจ ืืืื ืื ื, ืื ืืืืื ืืขืจืขืฅ ืคึฟืึทืจ ืื ืขืงืืืกืืขื ืฅ ืคืื ืคืืคื ืืื ืืืึทื ืจืึธืืข ืืื ืึท ืืึทืืขืืึธืก ืฉืคึผืจืึทื ืคึฟืึทืจ ืคืืคื ืึทืกืขืืืืขืจ. ืึธืืขืจ ืืืึธืื ืขืก ื ืืฉื ืืืื ืืขืกืขืจ ืฆื ืืืืขื ืื TVM ืึทืกืขืืืืขืจ ืืื ืขืืืขืืข ืืืืืกืืื ื ืฉืคึผืจืึทื, ืืื ืืื ืืืืกืืจืึทืืื ืึท ื ืืึทืข ืคึฟืึทืจ ืืขื ืืกืขื ืฉืึทืื ืืืืื ืฆืื?
TVM Haskell eDSL
ืืืฆื ืขืก ืืื ืฆืืื ืฆื ืจืขืื ืืืขืื ืืื ืืืขืจ ืจืืข ืงืืื ืงืึธื ืืจืึทืงื. ืืืจ ืืึทืฉืืึธืกื ืฆื ืึทื ืืืืืงืืขื ืึท ืืึทืืื-ืกืืื ืึทืืืจืข ืืืึทืื, ืึธืืขืจ ืฉืจืืืื ืื ืื ืืขืจ ืงืืื ืงืึธื ืืจืึทืงื ืืื FunC ืืืึธืื ืืืื ืฆื ื ืืื ืข. ืืืจ ืืขืืืืื ืฆื ืืืืื ืขืืืขืืข ืืึทื, ืืื ืืึธืก ืืื ืืขืืืขื ืืื ืืืขืจ ืืืืืขื ืข ืคึฟืึทืจืืึทืืืื ื ืฉืคึผืจืึทื ืคึฟืึทืจ TVM.
ืืื Fift Assembler, ืืื ืืืขืจ ื ืืึทืข ืฉืคึผืจืึทื ืืื ืขืืืขืืื, ืึธืืขืจ ืืืจ ืืืืกืืขืจืืืืืื Haskell ืืื ืืขืจ ืืึทืืขืืึธืก ืึทื ืฉืืึธื ืคืื Fift, ืึทืืึทืืื ื ืืื ืื ืฆื ื ืขืืขื ืคืื ืืืึทืืข ืคืื โโโโืืืึทื ืึทืืืึทื ืกืืจืืข ืืืคึผ ืกืืกืืขื. ืืืขื ืืจืืขืื ืืื ืงืืื ืงืึทื ืืจืึทืงืฅ, ืืื ืื ืคึผืจืืึทื ืคืื ืืคืืื ืึท ืงืืืื ืืขืืช ืงืขื ืขื ืืืื ืืืืขืจ ืืืื, ืกืืึทืืืง ืืืืคึผืื ื, ืืื ืืื ืืืขืจ ืืืื ืื ื, ืืื ืึท ืืจืืืก ืืืึทืืข.
ืฆื ืืึทืืืืึทืื ืืื TVM ืึทืกืขืืืึทืืืขืจ ืงืืงื ืืื ืขืืืขืืื ืืื Haskell, ืืืจ ืืืคึผืืึทืืขื ืึทื ืึท ื ืึธืจืืึทื ืืืึทืื ืืืืฃ ืขืก. ืืึธ ืืขื ืขื ืขืืืขืืข ืืืื ืฆื ืืึทืฆืึธืื ืืคืืขืจืงืืึทืืงืืื ืฆื:
- ืืขืจ ืงืึธื ืืจืึทืงื ืืืฉืืืื ืคืื ืืืื ืคึฟืื ืงืฆืืข, ืึธืืขืจ ืืืจ ืงืขื ืขื ื ืืฆื ืืื ืคืืืข ืืื ืืืจ ืืืืื. ืืืขื ืืืจ ืืขืคืื ืืจื ืึท ื ืืึทืข ืคึฟืื ืงืฆืืข ืืื ืืขืจ ืืึทืืขืืึธืก ืฉืคึผืจืึทื (ื"ื Haskell), ืืื ืืืขืจ eDSL ืึทืืึทืื ืืืจ ืฆื ืงืืืึทืื ืฆื ืืืจ ืืืืื ืฆื ืืืขืจื ืึท ืืึทืืื ืืขืจ ืจืืืื ืืื TVM ืึธืืขืจ ืคืฉืื ืื ืืืื ื ืืื ืื ืคืื ื ืคืื ืจืืคื.
- ืืื Haskell, ืคืึทื ืืงืฉืึทื ื ืืึธืื ืืืืคึผืก ืืืึธืก ืืขื ืขื ืึธืคึผืืขืฉืืขืื ืืื ืื ืงืึทืืคึผืืืืื ื ืฆืืื. ืืื ืืื ืืืขืจ eDSL, ืื ืึทืจืืึทื ืฉืจืืึทื ืืืคึผ ืคืื ืึท ืคึฟืื ืงืฆืืข ืืื ืืขืจ ืืืคึผ ืคืื ืึธื ืืืืื ืืืึธืก ืื ืคึฟืื ืงืฆืืข ืืงืกืคึผืขืงืฅ, ืืื ืืขืจ ืจืขืืืืืึทื ืืืคึผ ืืื ืืขืจ ืืืคึผ ืคืื ืึธื ืืืืื ืืืึธืก ืืืขื ืืืื ืืขืฉืืคื ื ืึธื ืื ืจืืคื.
- ืืขืจ ืงืึธื ืืื ืึทื ืึทืืืืฉืึทื ื
stacktype
, ืืืกืงืจืืืืื ื ืื ืืขืจืืืึทืจื ืึธื ืืืืื ืืืคึผ ืืื ืื ืจืืคื ืคืื ื. ืืื ืืขืจ ืึธืจืืืื ืขื ืืืึทืื ืงืึธื ืืจืึทืงื, ืืึธืก ืืขื ืขื ื ืึธืจ ืืึทืืขืจืงืื ืืขื, ืึธืืขืจ ืืื ืืื ืืืขืจ eDSL ืืื ืืขื ืขื ืึทืงืฉืื ืืืื ืคืื ืื ืงืึธื ืืื ืืขื ืขื ืึธืคึผืืขืฉืืขืื ืืื ืื ืงืึทืืคึผืืืืื ื ืฆืืื. ืืื ืงืขื ืขื ืืื ืขื ืืื ืืึทืงืืืืขื ืืืืฉืึทื ืึธืืขืจ ืกืืืืืืึทื ืฅ ืืืึธืก ืืขืืคึฟื ืื ืืขืืืขืืึธืคึผืขืจ ืฆื ืืขืคึฟืื ืขื ืืขื ืคึผืจืึธืืืขื ืืืื ืื ืงืึธื ืขื ืืขืจืื ืืขื ืืื ืื ืึธื ืืืืื ืืืคึผ ืขื ืืขืจืื ืืขื. ืืึธื, ืึทืืึท ืึทื ืึทืืืืฉืึทื ื ืืึธื ื ืื ืืืืจืงื ืื ืคืึธืจืฉืืขืืื ื ืคืื ืื ืจืื ืืืืข, ืืืืึทื ืงืืื TVM ืงืึธื ืืื ืืืฉืขื ืขืจืืืืึทื ืคึฟืึทืจ ืืื. - ืืึธืก ืืื ื ืึธื ืึท ืคึผืจืึธืืืึทืืืืคึผ ืืขืฉืจืืื ืืื ืฆืืืื ืืืึธืื, ืึทืืื ืขืก ืืื ื ืึธื ืึท ืคึผืืึทืฅ ืคืื ืึทืจืืขื ืฆื ืืึธื ืืืืฃ ืืขื ืคึผืจืืืขืงื. ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืึทืืข ืื ืกืืึทื ืกืื ืคืื ืื ืงืืืกื ืืืจ ืืขื ืืื ืื ืงืึธื ืืื ืื ืืึธื ืืืื ืืืฉืขื ืขืจืืืืึทื ืืืืืึธืืึทืืืฉ.
ืืึธืก ืืื ืืื ืื ืืืคึผืืึทืืขื ืืืืฉืึทื ืคืื ืึท ืืืืืืกืื ืืืึทืื ืงืืงื ืืื ืืืืฃ ืืื ืืืขืจ eDSL:
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 ืืื ืืืืื-ืืกืืืข ืืืึทืื ืงืึธื ืืจืึทืงื ืงืขื ืขื ืืืื ืืขืคึฟืื ืขื ืืื
ืงืึทื ืงืืืืฉืึทื ื ืืืขืื ืื ืคืึทืจืืขืกื ืืื ืืึธื
ืืื ืืึทื ืฅ, ืืื ืืืขืจ ืึทืจืืขื ืืขื ืืืขื 380 ืฉืขื (ืึทืจืืึทื ืืขืจืขืื ื ืคืึทืืืืืึทืจืืืึทืืืึธื ืืื ืืึทืงืืืืขื ืืืืฉืึทื, ืืืืื ืื ืืื ืคืึทืงืืืฉ ืึทื ืืืืืงืืื ื). ืคืื ืฃ ืืขืืืขืืึธืคึผืขืจืก ืืึธืื ืึธื ืืืื ืืขื ืืืขื ืืื ืื ืคืึทืจืืขืกื ืคึผืจืืืขืงื: CTO, ืืึทื ืฉืึทืคึฟื ืคืืจื, ืืืึทืงืืืืืืึทื ืคึผืืึทืืคืึธืจืืข ืกืคึผืขืฉืึทืืึทืกืฅ ืืื Haskell ืืืืืืืืืจื ืืขืืืขืืึธืคึผืขืจืก.
ืืืจ ืืขืคึฟืื ืขื ืจืขืกืืจืกื ืฆื ืึธื ืืืื ื ืขืืขื ืืื ืื ืงืึธื ืงืืจืก ืึธื ืฉืืืขืจืืงืืื, ืืืืึทื ืืขืจ ืืืืกื ืคืื ืึท ืืึทืงืึทืืืึธื, ื ืึธืขื ื ืฆืืืึทืืขื ืึทืจืืขื ืืื ืื ื ืืื ืฆื ืืขืฉืืืื ื ืืึทื ืืื ืงืขื ืืื ืืื ืึทืกืคึผืขืงืฅ ืคืื ื ืืึทืข ืืขืงื ืึทืืึทืืืฉืื ืืื ืฉืืขื ืืืง ืืงืกืืืืื ื. ืขืืืขืืข ืฉืืึธืฃ ื ืขืื ืฆื ืืขืจืืจืืืื ืืึทืงืกืืืื ืจืขืืืืืึทืื ืืื ืื ืึธืื ืคืื ืืืืืืขื ืจืขืกืืจืกื ืืขื ืขื ืงืึทืืคึผืึทื ืกืืืืึทื ืืืจื ืื ืืืึทืืืึทืืึทื ืืขืจืคืึทืจืื ื ืืื ืืืกืืขืฆืืืื ื ืืขืืขืจืื. ืืื ืืขืจืฆื, ืืจืืขืื ืืืืฃ ืึทืืึท ืืึทืกืงืก ืืื ืฉืืขื ืืืง ืึท ืืื ืคึผืจืึธืืข ืคืื โโืื ืคึผืจืึทืกืขืกืึทื ืคืื ืื ืคืืจืืข, ืืืืึทื ืขืก ืืื ืืึธืจ ืฉืืืขืจ ืฆื ืืขืจืืจืืืื ืืืึทืืืฉ ืจืขืืืืืึทืื ืึธื ืืขืืื ื-ืคืึทื ืืงืฉืึทื ืื ื ืื ืขืจืืขื ืื ืืขืจืึทืงืฉืึทื.
ืืืจืืงืก ืืึทืืื ืืขืจ: ืืืจ ืืขื ืขื ืืืคึผืจืขืกื ืืืจื ืื ืกืืืข ืคืื โโโโืึทืจืืขื ืคืื ืื TON ืืึทื ืฉืึทืคึฟื. ืืื ืืขืจืืื ืฆื ืืืืขื ืึท ืงืึธืืคึผืืขืงืก, ืฉืืื, ืืื ืจืืึฟ ืืืคึผืึธืจืืึทื ืืื, ืืจืืขืื ืกืืกืืขื. TON ืืื ืคึผืจืึธืืืขื ืืื ืฆื ืืืื ืึท ืคึผืืึทืืคืึธืจืืข ืืื ืืจืืืก ืคึผืึธืืขื ืฆืืขื. ืึธืืขืจ, ืืื ืกืืจ ืคึฟืึทืจ ืืขื ืืงืึธืืกืืกืืึทื ืฆื ืึทื ืืืืืงืืขื, ืึท ืคึผืืึทืฅ ืืขืจ ืืึทืจืฃ ืฆื ืืืื ืืขืืื, ืืืืืข ืืื ืืขืจืืื ืขื ืคืื ืืืึทื ื ืืฆื ืืื ืืืึทืงืืืื ืคึผืจืึทืืืฉืขืงืก ืืื ืืื ืืขืจืืื ืขื ืคืื ืืืคึผืจืืืืื ื ืึทื ืืืืืงืืื ื ืืืฉืืจืื. ืืืจ ืืขื ืขื ืฉืืึธืืฅ ืฆื ืืืื ืึท ืืืื ืคืื ืืขื ืคึผืจืึธืฆืขืก.
ืืืื ื ืึธื ืืืืขื ืขื ืืขื ืึทืจืืืงื ืืืจ ื ืึธื ืืึธืื ืงืืื ืคึฟืจืืื ืึธืืขืจ ืืึธืื ืืืืืึทื ืืืขืื ืืื ืฆื ื ืืฆื TON ืฆื ืกืึธืืืืข ืืืื ืคึผืจืึธืืืขืืก,
ืืงืืจ: www.habr.com