ื•ื•ืขื ื“ืŸ FunC ืื™ืŸ ืคืึทื ื’ืงืฉืึทื ืึทืœ ืžื™ื˜ Haskell: ื•ื•ื™ ืกืขืจืึธืงืขืœืœ ื•ื•ืึทืŸ ื“ื™ ื˜ืขืœืขื’ืจืึทื ื‘ืœืึธืงืงื˜ืฉืึทื™ืŸ ืคืึทืจืžืขืกื˜

ืื™ืจ'ื•ื•ืข ืžื™ืกื˜ืึธืžืข ื’ืขื”ืขืจื˜ ืึทื– ื˜ืขืœืขื’ืจืึทื ืื™ื– ื•ื•ืขื’ืŸ ืฆื• ืงืึทื˜ืขืจ ื“ื™ Ton blockchain ืคึผืœืึทื˜ืคืึธืจืžืข. ืึธื‘ืขืจ ืื™ืจ ืงืขืŸ ื”ืึธื‘ืŸ ืžื™ืกื˜ ื“ื™ ื ื™ื™ึทืขืก ืึทื– ื ื™ืฉื˜ ืœืึทื ื’ ืฆื•ืจื™ืง ื˜ืขืœืขื’ืจืึทื ืžื•ื“ื™ืข ืึท ืคืึทืจืžืขืกื˜ ืคึฟืึทืจ ื“ื™ ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ ืคื•ืŸ ืื™ื™ื ืขืจ ืึธื“ืขืจ ืžืขืจ ืงืœื•ื’ ืงืึทื ื˜ืจืึทืงืฅ ืคึฟืึทืจ ื“ืขื ืคึผืœืึทื˜ืคืึธืจืžืข.

ื“ื™ ืกืขืจืึธืงืขืœืœ ืžืึทื ืฉืึทืคึฟื˜, ืžื™ื˜ ื‘ืจื™ื™ื˜ ื“ืขืจืคืึทืจื•ื ื’ ืื™ืŸ ื“ืขื•ื•ืขืœืึธืคึผื™ื ื’ ื’ืจื•ื™ืก ื‘ืœืึทืงื›ื™ื™ื•ื•ืึทืŸ ืคึผืจืึทื“ื–ืฉืขืงืก, ืงืขืŸ ื ื™ืฉื˜ ืฉื˜ื™ื™ืŸ ื‘ืึทื–ื•ื ื“ืขืจ. ืžื™ืจ ื“ืขืœืึทื’ื™ื™ื˜ืึทื“ ืคื™ื ืฃ ืขืžืคึผืœื•ื™ื™ื– ืฆื• ื“ื™ ืคืึทืจืžืขืกื˜, ืื•ืŸ ืฆื•ื•ื™ื™ ื•ื•ืึธื›ืŸ ืฉืคึผืขื˜ืขืจ ื–ื™ื™ ื’ืขื ื•ืžืขืŸ ืขืจืฉื˜ืขืจ ืึธืจื˜ ืื™ืŸ ืขืก ืื•ื ื˜ืขืจ ื“ื™ (ืื™ืŸ) ื‘ืึทืฉื™ื™ื“ืŸ ื˜ืจืึทืค - ืฆื•ื ืขืžืขื ื™ืฉ ืกืขืงืกื™ ื˜ืฉืึทืžืขืœืขืึธืŸ. ืื™ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ ืื™ืš ื•ื•ืขืœ ืจืขื“ืŸ ื•ื•ืขื’ืŸ ื•ื•ื™ ื–ื™ื™ ื”ืื‘ืŸ ืขืก. ืžื™ืจ ื”ืึธืคืŸ ืึทื– ืื™ืŸ ื“ื™ ื•ื•ื™ื™ึทื˜ืขืจ ืฆืขืŸ ืžื™ื ื•ื˜ ืื™ืจ ื•ื•ืขื˜ ื‘ื™ื™ึท ืžื™ื ื“ืกื˜ืขืจ ืœื™ื™ืขื ืขืŸ ืึท ื˜ืฉื™ืงืึทื•ื•ืข ื’ืขืฉื™ื›ื˜ืข, ืื•ืŸ ืื™ืŸ ืจื•ื‘ึฟ ืื™ืจ ื•ื•ืขื˜ ื’ืขืคึฟื™ื ืขืŸ ืขืคึผืขืก ื ื•ืฆื™ืง ื•ื•ืึธืก ืื™ืจ ืงืขื ืขืŸ ืฆื•ืœื™ื™ื’ืŸ ืื™ืŸ ื“ื™ื™ืŸ ืึทืจื‘ืขื˜.

ืึธื‘ืขืจ ืœืึธืžื™ืจ ืึธื ื”ื™ื™ื‘ืŸ ืžื™ื˜ ืึท ื‘ื™ืกืœ ืงืึธื ื˜ืขืงืกื˜.

ืคืึทืจืžืขืกื˜ ืื•ืŸ ื–ื™ื™ึทืŸ ื‘ืื“ื™ื ื’ื•ื ื’ืขืŸ

ืึทื–ื•ื™, ื“ื™ ื”ื•ื™ืคึผื˜ ื˜ืึทืกืงืก ืคื•ืŸ ื“ื™ ืคึผืึทืจื˜ื™ืกืึทืคึผืึทื ืฅ ื–ืขื ืขืŸ ื“ื™ ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ ืคื•ืŸ ืื™ื™ื ืขืจ ืึธื“ืขืจ ืžืขืจ ืคื•ืŸ ื“ื™ ืคืืจื’ืขืœื™ื™ื’ื˜ ืงืœื•ื’ ืงืึทื ื˜ืจืึทืงืฅ, ื•ื•ื™ ื’ืขื–ื•ื ื˜ ื•ื•ื™ ืคึผืจืึทืคึผืึธื•ื–ืึทืœื– ืฆื• ืคึฟืึทืจื‘ืขืกืขืจืŸ ื“ื™ TON ื™ืงืึธื•ืกื™ืกื˜ืึทื. ื“ื™ ืคืึทืจืžืขืกื˜ ืื™ื– ื’ืขื•ื•ืขืŸ ืคื•ืŸ 24 ืกืขืคื˜ืขืžื‘ืขืจ ื‘ื™ื– 15 ืืงื˜ืื‘ืขืจ, ืื•ืŸ ื“ื™ ืจืขื–ื•ืœื˜ืึทื˜ืŸ ื–ืขื ืขืŸ ืžื•ื“ื™ืข ื‘ืœื•ื™ื– ืื•ื™ืฃ 15 ื ืื•ื•ืขืžื‘ืขืจ. ื’ืึทื ืฅ ืึท ืœืึทื ื’ ืฆื™ื™ึทื˜, ืงืึทื ืกื™ื“ืขืจื™ื ื’ ืึทื– ื‘ืขืฉืึทืก ื“ืขื ืžืึธืœ ื˜ืขืœืขื’ืจืึทื ื’ืขืจืื˜ืŸ ืฆื• ื”ืึทืœื˜ืŸ ืื•ืŸ ืžืขืœื“ืŸ ื“ื™ ืจืขื–ื•ืœื˜ืึทื˜ืŸ ืคื•ืŸ ืงืึทื ื˜ืขืก ืื•ื™ืฃ ื“ื™ ืคึผืœืึทืŸ ืื•ืŸ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืคื•ืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืื™ืŸ C ++ ืคึฟืึทืจ ื˜ืขืกื˜ื™ื ื’ ืื•ืŸ ืึทืกืกืขืกืก ื“ื™ ืงื•ื•ืึทืœื™ื˜ืขื˜ ืคื•ืŸ ื•ื•ืึธื™ืคึผ ืงืึทืœืœืก ืื™ืŸ ื˜ืขืœืขื’ืจืึทื.

ืžื™ืจ ื”ืึธื‘ืŸ ืื•ื™ืกื’ืขืงืœื™ื‘ืŸ ืฆื•ื•ื™ื™ ืงืœื•ื’ ืงืึทื ื˜ืจืึทืงืฅ ืคื•ืŸ ื“ืขืจ ืจืฉื™ืžื” ืคืืจื’ืขืœื™ื™ื’ื˜ ื“ื•ืจืš ื“ื™ ืึธืจื’ืึทื ื™ื™ื–ืขืจื–. ืคึฟืึทืจ ืื™ื™ื ืขืจ ืคื•ืŸ ื–ื™ื™, ืžื™ืจ ื’ืขื•ื•ื™ื™ื ื˜ ืžื›ืฉื™ืจื™ื ืคื•ื ืื ื“ืขืจื’ืขื˜ื™ื™ืœื˜ ืžื™ื˜ TON, ืื•ืŸ ื“ื™ ืฆื•ื•ื™ื™ื˜ืข ืื™ื– ื™ืžืคึผืœืึทืžืขื ืึทื“ ืื™ืŸ ืึท ื ื™ื™ึทืข ืฉืคึผืจืึทืš ื“ืขื•ื•ืขืœืึธืคึผืขื“ ื“ื•ืจืš ืื•ื ื“ื–ืขืจ ืขื ื“ื–ืฉืึทื ื™ืจื– ืกืคึผืึทืกื™ืคื™ืงืœื™ ืคึฟืึทืจ TON ืื•ืŸ ื’ืขื‘ื•ื™ื˜ ืื™ืŸ Haskell.

ื“ื™ ื‘ืจื™ืจื” ืคื•ืŸ ืึท ืคืึทื ื’ืงืฉืึทื ืึทืœ ืคึผืจืึธื’ืจืึทืžืžื™ื ื’ ืฉืคึผืจืึทืš ืื™ื– ื ื™ืฉื˜ ืึทืงืกืึทื“ืขื ื˜ืึทืœ. ืื™ืŸ ืื•ื ื–ืขืจ ืคึฟื™ืจืžืข ื‘ืœืึธื’ ืžื™ืจ ืึธืคื˜ ืจืขื“ืŸ ื•ื•ืขื’ืŸ ื•ื•ืึธืก ืžื™ืจ ื˜ืจืึทื›ื˜ืŸ ื“ื™ ืงืึทืžืคึผืœืขืงืกื™ื˜ื™ ืคื•ืŸ ืคืึทื ื’ืงืฉืึทื ืึทืœ ืฉืคืจืึทื›ืŸ ืื™ื– ืึท ืจื™ื–ื™ืง ื™ื’ื–ืึทื“ื–ืฉืขืจื™ื™ืฉืึทืŸ ืื•ืŸ ื•ื•ืึธืก ืžื™ืจ ื‘ื›ืœืœ ื‘ืขืกืขืจ ื–ื™ื™ ืฆื• ื›ื™ื™ืคืขืฅ-ืึธืจื™ืขื ื˜ื™ื“. ื“ื•ืจืš ื“ืขื ื•ื•ืขื’, ืขืก ืื•ื™ืš ื›ึผื•ืœืœ ืึธืจื™ื’ื™ื ืขืœ ืคื•ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ.

ืคืืจื•ื•ืืก ื”ืื‘ืŸ ืžื™ืจ ืืคื™ืœื• ื‘ืึทืฉืœืึธืกืŸ ืฆื• ืึธื ื˜ื™ื™ืœ ื ืขืžืขืŸ?

ืื™ืŸ ืงื•ืจืฅ, ื•ื•ื™ื™ึทืœ ืื•ื ื“ื–ืขืจ ืกืคึผืขืฉืึทืœืึทื–ื™ื™ืฉืึทืŸ ืื™ื– ื ื™ื˜-ื ืึธืจืžืึทืœ ืื•ืŸ ืงืึธืžืคึผืœืขืงืก ืคึผืจืึทื“ื–ืฉืขืงืก ื•ื•ืึธืก ื“ืึทืจืคืŸ ืกืคึผืขืฆื™ืขืœ ืกืงื™ืœื– ืื•ืŸ ื–ืขื ืขืŸ ืึธืคื˜ ืคื•ืŸ ื•ื•ื™ืกื ืฉืืคื˜ืœืขื›ืข ื•ื•ืขืจื˜ ืคึฟืึทืจ ื“ื™ IT ืงื”ืœ. ืžื™ืจ ืฉื˜ื™ืฆืŸ ืฉื˜ืืจืง ืึธืคึฟืŸ-ืžืงื•ืจ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืื•ืŸ ื–ืขื ืขืŸ ืคืึทืจืงื ืึทืกื˜ ืื™ืŸ ื–ื™ื™ึทืŸ ืคึผืึธืคึผื•ืœืึทืจื™ื–ืึทื˜ื™ืึธืŸ, ืื•ืŸ ืื•ื™ืš ืงืึธื•ืึทืคึผืขืจื™ื™ื˜ ืžื™ื˜ ืœื™ื“ื™ื ื’ ืจื•ืกื™ืฉ ืื•ื ื™ื•ื•ืขืจืกื™ื˜ืขื˜ืŸ ืื™ืŸ ื“ื™ ืคืขืœื“ ืคื•ืŸ ืงืึธืžืคึผื™ื•ื˜ืขืจ ื•ื•ื™ืกื ืฉืึทืคึฟื˜ ืื•ืŸ ืžืื˜ืขืžืื˜ื™ืง.

ื“ ื™ ืื™ื ื˜ืขืจืขืกืื ื˜ ืข ืื•ื™ืคื’ืื‘ืข ืŸ ืคื• ืŸ ื“ืข ืจ ืคืืจืžืขืกื˜ื•ื  ื’ ืื• ืŸ ื‘ืืžื™ ื˜ ื–ื™ ืš ืื™ ืŸ ืื•ื ื“ื–ืข ืจ ื‘ืืœื™ื‘ื˜ืข ืจ ื˜ืขืœืขื’ืจื ื ืคืจืื™ืขืงื˜ , ื–ืฒื ืข ืŸ ืื™ ืŸ ื–ื™ ืš ื’ืขืฐืข ืŸ ื ืื•ื™ืกื’ืขืฆืฒื›ื ื˜ืข ืจ ืžืื˜ื™ื•ื•ืืฆื™ืข , ืื‘ืข ืจ ื“ืข ืจ ืคืจืฒื–ึพืคืื  ื“ ืื™ ื– ื’ืขืฐืืจ ืŸ ื ืŸ ืฆื•ื’ืื‘ ืข ืื™ื ืกืขื ื˜ื™ื•ื• . ๐Ÿ™‚

TON ื‘ืœืึธืงื˜ืฉื™ื™ืŸ ืคืึธืจืฉื•ื ื’

ืžื™ืจ ืขื ื’ ืžืึธื ื™ื˜ืึธืจ ื ื™ื™ึท ื“ื™ื•ื•ืขืœืึทืคึผืžืึทื ืฅ ืื™ืŸ ื‘ืœืึทืงื›ื™ื™ื•ื•ืึทืŸ, ืงื™ื ืกื˜ืœืขืš ืกื™ื™ื›ืœ ืื•ืŸ ืžืึทืฉื™ืŸ ืœืขืจื ืขืŸ ืื•ืŸ ืคึผืจื•ื‘ื™ืจืŸ ื ื™ืฉื˜ ืฆื• ืคืึทืจืคื™ืจืŸ ืึท ืื™ื™ืŸ ื‘ืึทื˜ื™ื™ื˜ื™ืง ืžืขืœื“ื•ื ื’ ืื™ืŸ ื™ืขื“ืขืจ ืคื•ืŸ ื“ื™ ื’ืขื‘ื™ื˜ืŸ ืื™ืŸ ื•ื•ืึธืก ืžื™ืจ ืึทืจื‘ืขื˜ืŸ. ื“ืขืจื™ื‘ืขืจ, ื•ื•ืขืŸ ื“ื™ ืคืึทืจืžืขืกื˜ ืื ื’ืขื”ื•ื™ื‘ืŸ, ืื•ื ื“ื–ืขืจ ืžืึทื ืฉืึทืคึฟื˜ ืื™ื– ืฉื•ื™ืŸ ื‘ืึทืงืึทื ื˜ ืžื™ื˜ ื“ื™ ื’ืขื“ืื ืงืขืŸ ืคื•ืŸ ื˜ืึธืŸ ื•ื•ื™ื™ึทืก ืคึผืึทืคึผื™ืจ. ืึธื‘ืขืจ, ืื™ื™ื“ืขืจ ืžื™ืจ ืึธื ื”ื™ื™ื‘ืŸ ืืจื‘ืขื˜ืŸ ืžื™ื˜ TON, ืžื™ืจ ื”ืึธื‘ืŸ ื ื™ืฉื˜ ืึทื ืึทืœื™ื™ื– ื“ื™ ื˜ืขื›ื ื™ืฉ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ืื•ืŸ ื“ื™ ืคืึทืงื˜ื™ืฉ ืžืงื•ืจ ืงืึธื“ ืคื•ืŸ ื“ืขืจ ืคึผืœืึทื˜ืคืึธืจืžืข, ืึทื–ื•ื™ ื“ืขืจ ืขืจืฉื˜ืขืจ ืฉืจื™ื˜ ืื™ื– ื’ืขื•ื•ืขืŸ ื’ืึทื ืฅ ืงืœืึธืจ ื•ื•ื™ ื“ืขืจ ื˜ืึธื’ - ืึท ื’ืจื•ื ื˜ื™ืง ืœืขืจื ืขืŸ ืคื•ืŸ ื“ืขืจ ื‘ืึทืึทืžื˜ืขืจ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ืื•ื™ืฃ ืึธื ืœื™ื™ืŸ ืื•ืŸ ืคึผืจื•ื™ืขืงื˜ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ื–.

ื•ื•ืขืŸ ื“ื™ ืคืึทืจืžืขืกื˜ ืกื˜ืึทืจื˜ืขื“, ื“ื™ ืงืึธื“ ืื™ื– ืฉื•ื™ืŸ ืืจื•ื™ืก, ืึทื–ื•ื™ ืฆื• ืฉืคึผืึธืจืŸ ืฆื™ื™ื˜, ืžื™ืจ ื‘ืึทืฉืœืึธืกืŸ ืฆื• ืงื•ืงืŸ ืคึฟืึทืจ ืึท ืคื™ืจืขืจ ืึธื“ืขืจ ืงื™ืฆืขืจ ื’ืขืฉืจื™ื‘ืŸ ื“ื•ืจืš ื“ื•ืจืš ื ื™ืฆืขืจืก. ืฆื•ื ื‘ืึทื“ื•ื™ืขืจืŸ, ื“ืึธืก ื”ืื˜ ื ื™ืฉื˜ ื’ืขื‘ืŸ ืงื™ื™ืŸ ืจืขื–ื•ืœื˜ืึทื˜ืŸ - ืึทื—ื•ืฅ ืื™ื ืกื˜ืจื•ืงืฆื™ืขืก ืคึฟืึทืจ ืึทืกืขืžื‘ืึทืœื™ื ื’ ื“ื™ ืคึผืœืึทื˜ืคืึธืจืžืข ืื•ื™ืฃ ื•ื‘ื•ื ื˜ื•, ืžื™ืจ ื”ืึธื‘ืŸ ื ื™ืฉื˜ ื’ืขืคึฟื•ื ืขืŸ ืงื™ื™ืŸ ืื ื“ืขืจืข ืžืึทื˜ืขืจื™ืึทืœืก.

ื“ื™ ื“ืืงื•ืžืขื ื˜ืืฆื™ืข ืืœื™ื™ืŸ ืื™ื– ื’ืขื•ื•ืขืŸ ื’ื•ื˜ ื’ืขืคืืจืฉื˜, ืื‘ืขืจ ืื™ื– ื’ืขื•ื•ืขืŸ ืฉื•ื•ืขืจ ืฆื• ืœื™ื™ืขื ืขืŸ ืื™ืŸ ื’ืขื•ื•ื™ืกืข ื’ืขื‘ื™ื˜ืŸ. ื’ืึทื ืฅ ืึธืคื˜ ืžื™ืจ ื”ืึธื‘ืŸ ืฆื• ืฆื•ืจื™ืงืงื•ืžืขืŸ ืฆื• ื–ื™ื›ืขืจ ืคื•ื ืงื˜ืŸ ืื•ืŸ ื‘ืึทืฉื˜ื™ืžืขืŸ ืคื•ืŸ ื”ื•ื™ืš-ืžื“ืจื’ื” ื“ื™ืกืงืจื™ืคึผืฉืึทื ื– ืคื•ืŸ ืึทื‘ืกื˜ืจืึทืงื˜ ื’ืขื“ืื ืงืขืŸ ืฆื• ื ื™ื“ืขืจื™ืง-ืžื“ืจื’ื” ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ ื“ืขื˜ืึทื™ืœืก.

ืขืก ื•ื•ืึธืœื˜ ื–ื™ื™ืŸ ื’ืจื™ื ื’ืขืจ ืื•ื™ื‘ ื“ื™ ืกืคึผืขืกื™ืคื™ืงืึทื˜ื™ืึธืŸ ื”ืื˜ ื ื™ืฉื˜ ืึทืจื™ื™ึทื ื ืขืžืขืŸ ืึท ื“ื™ื˜ื™ื™ืœื“ ื‘ืึทืฉืจื™ื™ึทื‘ื•ื ื’ ืคื•ืŸ ื“ื™ ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ. ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื•ื•ืขื’ืŸ ื•ื•ื™ ืึท ื•ื•ื™ืจื˜ื•ืึทืœ ืžืึทืฉื™ืŸ ืจืขืคึผืจืึทื–ืขื ืฅ ื–ื™ื™ืŸ ืึธื ืœื™ื™ื’ืŸ ืื™ื– ืžืขืจ ืžืกืชึผืžื ืฆื• ื“ื™ืกื˜ืจืึทืงื˜ ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ืงืจื™ื™ื™ื˜ื™ื ื’ ืงืœื•ื’ ืงืึทื ื˜ืจืึทืงืฅ ืคึฟืึทืจ ื“ื™ TON ืคึผืœืึทื˜ืคืึธืจืžืข ื•ื•ื™ ืฆื• ื”ืขืœืคึฟืŸ ื–ื™ื™.

ื ื™ืงืก: ืฉื˜ืขืœืŸ ื“ื™ ืคึผืจื•ื™ืขืงื˜ ืฆื•ื–ืึทืžืขืŸ

ืื™ืŸ ืกืขืจืึธืงืขืœืœ ืžื™ืจ ื–ืขื ืขืŸ ื’ืจื•ื™ืก ืคืึทื ืก ื ื™ืงืก. ืžื™ืจ ืงืœื™ื™ึทื‘ืŸ ืื•ื ื“ื–ืขืจ ืคึผืจืึทื“ื–ืฉืขืงืก ืžื™ื˜ ืื™ื ืื•ืŸ ืฆืขื•ื•ื™ืงืœืขืŸ ื–ื™ื™ ื ื™ืฆืŸ NixOps, ืื•ืŸ ืื™ื ืกื˜ืึทืœื™ืจืŸ ืื•ื™ืฃ ืึทืœืข ืื•ื ื“ื–ืขืจ ืกืขืจื•ื•ืขืจืก ื ื™ืงืกืึธืก. ื“ืึทื ืง ืฆื• ื“ืขื, ืึทืœืข ืื•ื ื“ื–ืขืจ ื‘ื•ื™ืขืŸ ื–ืขื ืขืŸ ืจืขืคึผืจืึธื“ื•ืกื™ื‘ืœืข ืื•ืŸ ืึทืจื‘ืขื˜ ืื•ื™ืฃ ืงื™ื™ืŸ ืึธืคึผืขืจื™ื™ื˜ื™ื ื’ ืกื™ืกื˜ืขื ืื•ื™ืฃ ื•ื•ืึธืก ื ื™ืงืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ืื™ื ืกื˜ืึทืœื™ืจืŸ.

ืึทื–ื•ื™ ืžื™ืจ ืกื˜ืึทืจื˜ืขื“ ื“ื•ืจืš ืงืจื™ื™ื™ื˜ื™ื ื’ ื ื™ืงืก ืึธื•ื•ื•ืขืจืœื™ื™ ืžื™ื˜ ืื•ื™ืกื“ืจื•ืง ืคึฟืึทืจ 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 ื‘ืืฉืืคืŸ ื“ืจื™ื™ ื ื™ื™ึทืข ืคึผืจืึธื’ืจืึทืžืžื™ื ื’ ืฉืคึผืจืึทื›ืŸ:

ืคื™ืคื˜ ืื™ื– ืึท ื•ื ื™ื•ื•ืขืจืกืึทืœ ืึธื ืœื™ื™ื’ืŸ ืคึผืจืึธื’ืจืึทืžืžื™ื ื’ ืฉืคึผืจืึทืš ื•ื•ืึธืก ืจื™ื–ืขืžื‘ืึทืœื– ืคืขืจื˜. ื–ื™ื™ืŸ ืกื•ืคึผืขืจ ืคื™ื™ื™ืงื™ื™ื˜ ืื™ื– ื“ื™ ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ื™ื ื˜ืขืจืึทืงื˜ ืžื™ื˜ TVM.

FunC ืื™ื– ืึท ืงืœื•ื’ ืงืึธื ื˜ืจืึทืงื˜ ืคึผืจืึธื’ืจืึทืžืžื™ื ื’ ืฉืคึผืจืึทืš ื•ื•ืึธืก ืื™ื– ืขื ืœืขืš ืฆื• C ืื•ืŸ ืื™ื– ืฆื•ื ื•ื™ืคื’ืขืฉื˜ืขืœื˜ ืื™ืŸ ืืŸ ืื ื“ืขืจ ืฉืคึผืจืึทืš - ืคื™ืคื˜ ืึทืกืขืžื‘ืœืขืจ.

ืคื™ื ืคื˜ืขืจ ืึทืกืขืžื‘ืœืขืจ - ืคื™ืคื˜ ื‘ื™ื‘ืœื™ืึธื˜ืขืง ืคึฟืึทืจ ื“ื–ืฉืขื ืขืจื™ื™ื˜ื™ื ื’ ื‘ื™ื™ื ืขืจื™ ืขืงืกืขืงื•ื˜ืึทื‘ืœืข ืงืึธื“ ืคึฟืึทืจ TVM. ืคื™ื ืคื˜ ืึทืกืขืžื‘ืœืขืจ ื˜ื•ื˜ ื ื™ืฉื˜ ื”ืึธื‘ืŸ ืึท ืงืึทืžืคึผื™ื™ืœืขืจ. ื“ืืก ืขืžื‘ืขื“ื™ื“ ื“ืึธืžืึทื™ืŸ ืกืคึผืขืฆื™ืคื™ืฉ ืฉืคึผืจืึทืš (ืขื“ืกืœ).

ืื•ื ื“ื–ืขืจ ืคืึทืจืžืขืกื˜ ืึทืจื‘ืขื˜

ืฆื•ื ืกื•ืฃ, ืขืก ืื™ื– ืฆื™ื™ื˜ ืฆื• ืงื•ืงืŸ ืื™ืŸ ื“ื™ ืจืขื–ื•ืœื˜ืึทื˜ืŸ ืคื•ืŸ ืื•ื ื“ื–ืขืจ ื”ืฉืชื“ืœื•ืช.

ืึทืกื™ื ื˜ืฉืจืึธื ืึธื•ืก ืฆืึธืœื•ื ื’ ืงืึทื ืึทืœ

ืฆืึธืœื•ื ื’ ืงืึทื ืึทืœ ืื™ื– ืึท ืงืœื•ื’ ืงืึธื ื˜ืจืึทืงื˜ ื•ื•ืึธืก ืึทืœืึทื•ื– ืฆื•ื•ื™ื™ ื™ื•ื–ืขืจื– ืฆื• ืฉื™ืงืŸ ืคึผื™ื™ืžืึทื ืฅ ืึทืจื•ื™ืก ื“ื™ ื‘ืœืึทืงื›ื™ื™ื•ื•ืึทืŸ. ื•ื•ื™ ืึท ืจืขื–ื•ืœื˜ืึทื˜, ืื™ืจ ืฉืคึผืึธืจืŸ ื ื™ืฉื˜ ื‘ืœื•ื™ื– ื’ืขืœื˜ (ืขืก ืื™ื– ืงื™ื™ืŸ ืงืึธืžื™ืกื™ืข), ืึธื‘ืขืจ ืื•ื™ืš ืฆื™ื™ื˜ (ืื™ืจ ื˜ืึธืŸ ื ื™ื˜ ื”ืึธื‘ืŸ ืฆื• ื•ื•ืึทืจื˜ืŸ ืคึฟืึทืจ ื“ื™ ื•ื•ื™ื™ึทื˜ืขืจ ื‘ืœืึธืง ืฆื• ื–ื™ื™ืŸ ืคึผืจืึทืกืขืกื˜). ืคึผื™ื™ืžืึทื ืฅ ืงืขื ืขืŸ ื–ื™ื™ืŸ ื•ื•ื™ ืงืœื™ื™ืŸ ื•ื•ื™ ื’ืขื•ื•ืืœื˜ ืื•ืŸ ื•ื•ื™ ืึธืคื˜ ื•ื•ื™ ืคืืจืœืื ื’ื˜. ืื™ืŸ ื“ืขื ืคืึทืœ, ื“ื™ ืคึผืึทืจื˜ื™ืขืก ื˜ืึธืŸ ื ื™ื˜ ื”ืึธื‘ืŸ ืฆื• ืฆื•ื˜ืจื•ื™ ื™ืขื“ืขืจ ืื ื“ืขืจืข, ื•ื•ื™ื™ึทืœ ื“ื™ ื™ื•ื™ืฉืขืจ ืคื•ืŸ ื“ื™ ืœืขืฆื˜ ื™ื™ึดืฉื•ื‘ึฟ ืื™ื– ื’ืขืจืึทื ื˜ื™ื“ ื“ื•ืจืš ื“ื™ ืงืœื•ื’ ืงืึธื ื˜ืจืึทืงื˜.

ืžื™ืจ ื’ืขืคื•ื ืขืŸ ืึท ืคืขืจืœื™ ืคึผืฉื•ื˜ ืœื™ื™ื–ื•ื ื’ ืฆื• ื“ืขื ืคึผืจืึธื‘ืœืขื. ืฆื•ื•ื™ื™ ืคึผืึทืจื˜ื™ืขืก ืงืขื ืขืŸ ื‘ื™ื™ึทื˜ืŸ ื’ืขื—ืชืžืขื˜ ืึทืจื˜ื™ืงืœืขืŸ, ื™ืขื“ืขืจ ืžื™ื˜ ืฆื•ื•ื™ื™ ื ื•ืžืขืจืŸ - ื“ื™ ืคื•ืœ ืกื•ืžืข ื‘ืึทืฆืึธืœื˜ ื“ื•ืจืš ื™ืขื“ืขืจ ืคึผืึทืจื˜ื™ื™. ื“ื™ ืฆื•ื•ื™ื™ ื ื•ืžืขืจืŸ ืึทืจื‘ืขื˜ ื•ื•ื™ ื•ื•ืขืงื˜ืึธืจ ื–ื™ื™ื’ืขืจ ืื™ืŸ ื‘ืขืงืึทื‘ืึธืœืขื“ื™ืง ืคื•ื ืื ื“ืขืจื’ืขื˜ื™ื™ืœื˜ ืกื™ืกื˜ืขืžืขืŸ ืื•ืŸ ืฉื˜ืขืœืŸ ื“ื™ "ื’ืขืฉืขื”ืŸ ืคืจื™ืขืจ" ืกื“ืจ ืื•ื™ืฃ ื˜ืจืึทื ื–ืึทืงืฉืึทื ื–. ื ื™ืฆืŸ ื“ื™ ื“ืึทื˜ืŸ, ื“ืขืจ ืึธืคึผืžืึทืš ื•ื•ืขื˜ ืงืขื ืขืŸ ืฆื• ืกืึธืœื•ื•ืข ืงื™ื™ืŸ ืžืขื’ืœืขืš ืงืึธื ืคืœื™ืงื˜.

ืื™ืŸ ืคืึทืงื˜, ืื™ื™ืŸ ื ื•ืžืขืจ ืื™ื– ื’ืขื ื•ื’ ืฆื• ื™ื ืกื˜ืจื•ืžืขื ื˜ ื“ืขื ื’ืขื“ืึทื ืง, ืึธื‘ืขืจ ืžื™ืจ ืœื™ื ืงืก ื‘ื™ื™ื“ืข ื•ื•ื™ื™ึทืœ ื“ืขื ื•ื•ืขื’ ืžื™ืจ ืงืขืŸ ืžืึทื›ืŸ ืึท ืžืขืจ ื‘ืึทืงื•ื•ืขื ื‘ืึทื ื™ืฆืขืจ ืฆื•ื‘ื™ื ื“. ืื™ืŸ ื“ืขืจืฆื•, ืžื™ืจ ื‘ืึทืฉืœืึธืกืŸ ืฆื• ืึทืจื™ื™ึทื ื ืขืžืขืŸ ื“ื™ ืฆืึธืœื•ื ื’ ืกื•ืžืข ืื™ืŸ ื™ืขื“ืขืจ ืึธื ื–ืึธื’. ืึธืŸ ืขืก, ืื•ื™ื‘ ื“ืขืจ ืึธื ื–ืึธื’ ืื™ื– ืคืึทืจืคืึทืœืŸ ืคึฟืึทืจ ืขื˜ืœืขื›ืข ืกื™ื‘ื”, ื›ืึธื˜ืฉ ืึทืœืข ื“ื™ ืึทืžืึทื•ื ืฅ ืื•ืŸ ื“ื™ ืœืขืฆื˜ ื›ืขื–ืฉื‘ืŸ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืจื™ื›ื˜ื™ืง, ื“ืขืจ ื‘ืึทื ื™ืฆืขืจ ืงืขืŸ ื ื™ืฉื˜ ื‘ืึทืžืขืจืงืŸ ื“ื™ ืึธื ื•ื•ืขืจ.

ืฆื• ืคึผืจื•ื‘ื™ืจืŸ ืื•ื ื“ื–ืขืจ ื’ืขื“ืึทื ืง, ืžื™ืจ ืงื•ืงืŸ ืคึฟืึทืจ ื‘ื™ื™ืฉืคื™ืœืŸ ืคื•ืŸ ื ื™ืฆืŸ ืึทื–ืึท ืึท ืคึผืฉื•ื˜ ืื•ืŸ ืงืึทื ืกื™ื™ืก ืฆืึธืœื•ื ื’ ืงืึทื ืึทืœ ืคึผืจืึธื˜ืึธืงืึธืœ. ืกืึทืคึผืจื™ื™ื–ื™ื ื’ืœื™, ืžื™ืจ ื’ืขืคึฟื•ื ืขืŸ ื‘ืœื•ื™ื– ืฆื•ื•ื™ื™:

  1. ื‘ืึทืฉืจื™ื™ึทื‘ื•ื ื’ ืึท ืขื ืœืขืš ืฆื•ื’ืึทื ื’, ื‘ืœื•ื™ื– ืคึฟืึทืจ ื“ื™ ืคืึทืœ ืคื•ืŸ ืึท ื•ื ื™ื“ื™ืจืขืงื˜ื™ืึธื ืึทืœ ืงืึทื ืึทืœ.
  2. ื˜ื•ื˜ืึธืจื™ืึทืœ, ื•ื•ืึธืก ื‘ืืฉืจื™ื™ื‘ื˜ ื“ื™ ื–ืขืœื‘ืข ื’ืขื“ืึทื ืง ื•ื•ื™ ืื•ื ื“ื–ืขืจ, ืึธื‘ืขืจ ืึธืŸ ื“ืขืจืงืœืขืจืŸ ืคื™ืœืข ื•ื•ื™ื›ื˜ื™ืง ื“ืขื˜ืึทื™ืœืก, ืึทื–ืึท ื•ื•ื™ ื’ืขื ืขืจืึทืœ ืงืขืจืขืงื˜ื ืึทืก ืื•ืŸ ืงืึธื ืคืœื™ืงื˜ ื”ืึทื›ืœืึธื˜ืข ืคึผืจืึธื•ืกื™ื“ื–ืฉืขืจื–.

ืข ืก ืื™ ื– ื’ืขืฐืืจ ืŸ ืงืœืืจ , ื ื– ืกืณืื™ ื– ื–ื™ ืš ืฆ ื• ื‘ืืฉืจืฒื‘ ืŸ ืื•ื ื“ื–ืข ืจ ืคืจืื˜ืืงืืœ , ื‘ืื–ื•ื ื“ืขืจ ืข ืื•ื™ืคืžืขืจืงื–ืืžืงืฒ ื˜ ืื•ื™ ืฃ ื–ืฒ ืŸ ืจื™ื›ื˜ื™ืงืฒื˜ . ื ืึธืš ืขื˜ืœืขื›ืข ื™ื˜ืขืจื™ื™ืฉืึทื ื–, ื“ื™ ื‘ืึทืฉืจื™ื™ึทื‘ื•ื ื’ ืื™ื– ื’ืขื•ื•ืขืŸ ื’ืจื™ื™ื˜, ืื•ืŸ ืื™ืฆื˜ ืื™ืจ ืงืขื ืขืŸ ืื•ื™ืš. ืงื•ืง ืื•ื™ืฃ ืื™ืจ.

ืžื™ืจ ื™ืžืคึผืœืึทืžืขื ืึทื“ ื“ืขื ืงืึธื ื˜ืจืึทืงื˜ ืื™ืŸ 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

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’