αž”αŸ’αžšαŸ‚αž€αŸ’αž›αžΆαž™ FunC αž‘αŸ…αž‡αžΆ FunCtional αž‡αžΆαž˜αž½αž™ Haskell: αžšαž”αŸ€αž”αžŠαŸ‚αž› Serokell αž”αžΆαž“αžˆαŸ’αž“αŸ‡αž€αžΆαžšαž”αŸ’αžšαž€αž½αž Telegram Blockchain

αž’αŸ’αž“αž€αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž’αŸ’αž›αžΆαž”αŸ‹αž›αžΊαžαžΆ Telegram αž αŸ€αž”αž“αžΉαž„αž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžœαŸαž‘αž·αž€αžΆ Ton blockchain. αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αž’αŸ’αž“αž€β€‹αž”αŸ’αžšαž αŸ‚αž›β€‹αž‡αžΆβ€‹αž”αžΆαž“β€‹αžαž€β€‹αžαžΆαž“β€‹αž–αŸαžαŸŒαž˜αžΆαž“β€‹αžŠαŸ‚αž›β€‹αž˜αž·αž“β€‹αž”αžΆαž“β€‹αž™αžΌαžšβ€‹αž˜αž€β€‹αž αžΎαž™β€‹αž€αŸ’αž“αž»αž„β€‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Telegram αž”αžΆαž“αž”αŸ’αžšαž€αžΆαžŸαž€αžΆαžšαž”αŸ’αžšαž€αž½αžαž”αŸ’αžšαž‡αŸ‚αž„ αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆαž†αŸ’αž›αžΆαžαžœαŸƒαž˜αž½αž™ αž¬αž…αŸ’αžšαžΎαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαŸαž‘αž·αž€αžΆαž“αŸαŸ‡αŸ”

αž€αŸ’αžšαž»αž˜ Serokell αžŠαŸ‚αž›αž˜αžΆαž“αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαž™αŸ‰αžΆαž„αž‘αžΌαž›αŸ†αž‘αžΌαž›αžΆαž™αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‚αž˜αŸ’αžšαŸ„αž„ blockchain αž’αŸ†αž˜αž·αž“αž’αžΆαž…αžˆαžšαž“αŸ…αž˜αŸ’αžαžΆαž„αž”αžΆαž“αž‘αŸαŸ” αž™αžΎαž„αž”αžΆαž“αž…αžΆαžαŸ‹αžαžΆαŸ†αž„αž”αž»αž‚αŸ’αž‚αž›αž·αž€αž”αŸ’αžšαžΆαŸ†αž“αžΆαž€αŸ‹αž±αŸ’αž™αž…αžΌαž›αžšαž½αž˜αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ’αžšαž€αž½αž αž αžΎαž™αž–αžΈαžšαžŸαž”αŸ’αžαžΆαž αŸαž€αŸ’αžšαŸ„αž™αž˜αž€αž–αž½αž€αž‚αŸαž”αžΆαž“αž‡αžΆαž”αŸ‹αž…αŸ†αžŽαžΆαžαŸ‹αžαŸ’αž“αžΆαž€αŸ‹αž›αŸαž 1 αž“αŸ…αž€αŸ’αž“αž»αž„αžœαžΆαž€αŸ’αžšαŸ„αž˜αžˆαŸ’αž˜αŸ„αŸ‡αž αŸ…αž€αŸ’αžšαŸ…αž…αŸƒαžŠαž“αŸ’αž™αžαž·αž…αžαž½αž… (αž€αŸ’αž“αž»αž„) Sexy Chameleon αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αž–αž½αž€αž‚αŸαž”αžΆαž“αž’αŸ’αžœαžΎαžœαžΆαŸ” αž™αžΎαž„αžŸαž„αŸ’αžƒαžΉαž˜αžαžΆαž€αŸ’αž“αž»αž„αžšαž™αŸˆαž–αŸαž›αžŠαž”αŸ‹αž“αžΆαž‘αžΈαž”αž“αŸ’αž‘αžΆαž”αŸ‹ αž™αŸ‰αžΆαž„αž αŸ„αž…αžŽαžΆαžŸαŸ‹αž’αŸ’αž“αž€αž“αžΉαž„αž”αžΆαž“αž’αžΆαž“αžšαžΏαž„αžŠαŸαž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž˜αž½αž™ αž αžΎαž™αž—αžΆαž‚αž…αŸ’αžšαžΎαž“αž’αŸ’αž“αž€αž“αžΉαž„αžšαž€αžƒαžΎαž‰αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž“αŸ…αž€αŸ’αž“αž»αž„αžœαžΆ αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αž’αž“αž»αžœαžαŸ’αžαž€αŸ’αž“αž»αž„αž€αžΆαžšαž„αžΆαžšαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ”

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŸαžΌαž˜αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž”αžšαž·αž”αž‘αžαžΌαž…αž˜αž½αž™αŸ”

αž€αžΆαžšαž”αŸ’αžšαž€αž½αžαž”αŸ’αžšαž‡αŸ‚αž„αž“αž·αž„αž›αž€αŸ’αžαžαžŽαŸ’αžŒαžšαž”αžŸαŸ‹αžœαžΆαŸ”

αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž—αžΆαžšαž€αž·αž…αŸ’αž…αž…αž˜αŸ’αž”αž„αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž…αžΌαž›αžšαž½αž˜αž‚αžΊαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆαž†αŸ’αž›αžΆαžαžœαŸƒαžŠαŸ‚αž›αž”αžΆαž“αžŸαŸ’αž“αžΎαž‘αžΎαž„αž˜αž½αž™ αž¬αž…αŸ’αžšαžΎαž“ αž€αŸαžŠαžΌαž…αž‡αžΆαž€αžΆαžšαž’αŸ’αžœαžΎαžŸαŸ†αžŽαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ‚αž›αž˜αŸ’αž’αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž’αŸαž€αžΌαž‘αžΌαžŸαŸŠαžΈ TON αŸ” αž€αžΆαžšαž”αŸ’αžšαž€αž½αžαž”αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž…αžΆαž”αŸ‹αž–αžΈαžαŸ’αž„αŸƒαž‘αžΈ 24 αžαŸ‚αž€αž‰αŸ’αž‰αžΆαžŠαž›αŸ‹αžαŸ’αž„αŸƒαž‘αžΈ 15 αžαŸ‚αžαž»αž›αžΆ αž αžΎαž™αž›αž‘αŸ’αž’αž•αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαž€αžΆαžŸαžαŸ’αžšαžΉαž˜αžαŸ’αž„αŸƒαž‘αžΈ 15 αžαŸ‚αžœαž·αž…αŸ’αž†αž·αž€αžΆαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” αž™αžΌαžšαžŽαžΆαžŸαŸ‹αž˜αž€αž αžΎαž™ αžŠαŸ„αž™αž–αž·αž…αžΆαžšαžŽαžΆαžαžΆ αž€αŸ’αž“αž»αž„αž’αŸ†αž‘αž»αž„αž–αŸαž›αž“αŸαŸ‡ Telegram αž”αžΆαž“αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„ αž“αž·αž„αž”αŸ’αžšαž€αžΆαžŸαž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž€αžΆαžšαž”αŸ’αžšαž€αž½αžαž”αŸ’αžšαž‡αŸ‚αž„αž›αžΎαž€αžΆαžšαžšαž…αž“αžΆ αž“αž·αž„αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αŸ…αž€αŸ’αž“αž»αž„ C++ αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαžΆαž€αž›αŸ’αž”αž„ αž“αž·αž„αžœαžΆαž™αžαž˜αŸ’αž›αŸƒαž‚αž»αžŽαž—αžΆαž–αž“αŸƒαž€αžΆαžšαž αŸ… VoIP αž“αŸ…αž€αŸ’αž“αž»αž„ TelegramαŸ”

αž™αžΎαž„αž”αžΆαž“αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆαž†αŸ’αž›αžΆαžαžœαŸƒαž…αŸ†αž“αž½αž“αž–αžΈαžšαž–αžΈαž”αž‰αŸ’αž‡αžΈαžŠαŸ‚αž›αž”αžΆαž“αžŸαŸ’αž“αžΎαž‘αžΎαž„αžŠαŸ„αž™αž’αŸ’αž“αž€αžšαŸ€αž”αž…αŸ†αŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αž½αž™αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜αž–αž½αž€αž‚αŸ αž™αžΎαž„αž”αžΆαž“αž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸαžŠαŸ‚αž›αž…αŸ‚αž€αž…αžΆαž™αž‡αžΆαž˜αž½αž™ TON αž αžΎαž™αž‘αžΈαž–αžΈαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž‡αžΆαž—αžΆαžŸαžΆαžαŸ’αž˜αžΈαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžŠαŸ„αž™αžœαž·αžŸαŸ’αžœαž€αžšαžšαž”αžŸαŸ‹αž™αžΎαž„αž‡αžΆαž–αž·αžŸαŸαžŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ TON αž αžΎαž™αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„ Haskell αŸ”

αž‡αž˜αŸ’αžšαžΎαžŸαž“αŸƒαž—αžΆαžŸαžΆαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž˜αžΆαž“αž˜αž»αžαž„αžΆαžšαž‚αžΊαž˜αž·αž“αž…αŸƒαžŠαž“αŸ’αž™αž‘αŸαŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” αž”αŸ’αž›αž»αž€αžŸαžΆαž‡αžΈαžœαž€αž˜αŸ’αž˜ αž™αžΎαž„αž…αŸ’αžšαžΎαž“αžαŸ‚αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαž˜αžΌαž›αž αŸαžαž»αžŠαŸ‚αž›αž™αžΎαž„αž‚αž·αžαžαžΆαž—αžΆαž–αžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰αž“αŸƒαž—αžΆαžŸαžΆαž˜αž»αžαž„αžΆαžšαž‚αžΊαž‡αžΆαž€αžΆαžšαž”αŸ†αž•αŸ’αž›αžΎαžŸαžŠαŸαž’αŸ† αž αžΎαž™αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαž™αžΎαž„αž…αžΌαž›αž…αž·αžαŸ’αžαž–αž½αž€αžœαžΆαž…αŸ†αž–αŸ„αŸ‡αž—αžΆαžŸαžΆαžŠαŸ‚αž›αžαž˜αŸ’αžšαž„αŸ‹αž‘αž·αžŸαŸ” αžŠαŸ„αž™αžœαž·αž’αžΈαž“αŸαŸ‡αžœαžΆαž€αŸαž˜αžΆαž“αž•αž„αžŠαŸ‚αžšαŸ” αžŠαžΎαž˜αž“αŸƒαž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αŸ”.

αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαž™αžΎαž„αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž…αžΌαž›αžšαž½αž˜?

αžŸαžšαž»αž”αž˜αž€ αžŠαŸ„αž™αžŸαžΆαžšαž―αž€αž‘αŸαžŸαžšαž”αžŸαŸ‹αž™αžΎαž„αž‚αžΊαž‡αžΆαž‚αž˜αŸ’αžšαŸ„αž„αž˜αž·αž“αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžš αž“αž·αž„αžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰αžŠαŸ‚αž›αž‘αžΆαž˜αž‘αžΆαžšαž‡αŸ†αž“αžΆαž‰αž–αž·αžŸαŸαžŸ αž αžΎαž™αž‡αžΆαžšαžΏαž™αŸ—αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαžαžΆαž„αžœαž·αž‘αŸ’αž™αžΆαžŸαžΆαžŸαŸ’αžαŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαž αž‚αž˜αž“αŸ IT αŸ” αž™αžΎαž„αž‚αžΆαŸ†αž‘αŸ’αžšαž™αŸ‰αžΆαž„αžαŸ’αž›αžΆαŸ†αž„αž…αŸ†αž–αŸ„αŸ‡αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž”αŸ’αžšαž—αž–αž”αžΎαž€αž…αŸ†αž  αž αžΎαž™αž”αžΆαž“αž…αžΌαž›αžšαž½αž˜αž€αŸ’αž“αž»αž„αž€αžΆαžšαž–αŸαž‰αž“αž·αž™αž˜αžšαž”αžŸαŸ‹αžœαžΆ αž αžΎαž™αž€αŸαžŸαž αž€αžΆαžšαž‡αžΆαž˜αž½αž™αžŸαžΆαž€αž›αžœαž·αž‘αŸ’αž™αžΆαž›αŸαž™αžˆαžΆαž“αž˜αž»αžαž‚αŸαžšαž”αžŸαŸ‹αžšαž»αžŸαŸ’αžŸαŸŠαžΈαž€αŸ’αž“αž»αž„αžœαž·αžŸαŸαž™αžœαž·αž‘αŸ’αž™αžΆαžŸαžΆαžŸαŸ’αžαŸ’αžšαž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžš αž“αž·αž„αž‚αžŽαž·αžαžœαž·αž‘αŸ’αž™αžΆαž•αž„αžŠαŸ‚αžšαŸ”

αž—αžΆαžšαž€αž·αž…αŸ’αž…αž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž“αŸƒαž€αžΆαžšαž”αŸ’αžšαž€αž½αžαž”αŸ’αžšαž‡αŸ‚αž„ αž“αž·αž„αž€αžΆαžšαž…αžΌαž›αžšαž½αž˜αž€αŸ’αž“αž»αž„αž‚αž˜αŸ’αžšαŸ„αž„ Telegram αž‡αžΆαž‘αžΈαžŸαŸ’αžšαž‘αžΆαž‰αŸ‹αžšαž”αžŸαŸ‹αž™αžΎαž„αž‚αžΊαž“αŸ…αž€αŸ’αž“αž»αž„αžαŸ’αž›αž½αž“αž–αž½αž€αž‚αŸαž•αŸ’αž‘αžΆαž›αŸ‹αž‡αžΆαž€αžΆαžšαž›αžΎαž€αž‘αžΉαž€αž…αž·αžαŸ’αžαžŠαŸαž›αŸ’αž’ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αžΌαž›αž“αž·αž’αž·αžšαž„αŸ’αžœαžΆαž“αŸ‹αž”αžΆαž“αž€αŸ’αž›αžΆαž™αž‡αžΆαž€αžΆαžšαž›αžΎαž€αž‘αžΉαž€αž…αž·αžαŸ’αžαž”αž“αŸ’αžαŸ‚αž˜αŸ” πŸ™‚

αž€αžΆαžšαžŸαŸ’αžšαžΆαžœαž‡αŸ’αžšαžΆαžœ blockchain TON

αž™αžΎαž„αžαžΆαž˜αžŠαžΆαž“αž™αŸ‰αžΆαž„αžŠαž·αžαžŠαž›αŸ‹αž“αžΌαžœαž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžαŸ’αž˜αžΈαŸ—αž“αŸ…αž€αŸ’αž“αž»αž„ blockchain αž”αž‰αŸ’αž‰αžΆαžŸαž·αž”αŸ’αž”αž“αž·αž˜αŸ’αž˜αž·αž αž“αž·αž„αž€αžΆαžšαžšαŸ€αž“αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ αž αžΎαž™αž–αŸ’αž™αžΆαž™αžΆαž˜αž˜αž·αž“αž±αŸ’αž™αžαž€αžαžΆαž“αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αžŠαŸαžŸαŸ†αžαžΆαž“αŸ‹αž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž“αžΈαž˜αž½αž™αŸ—αžŠαŸ‚αž›αž™αžΎαž„αž’αŸ’αžœαžΎαž€αžΆαžšαŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡β€‹αž αžΎαž™ αž“αŸ…β€‹αž–αŸαž›β€‹αžŠαŸ‚αž›β€‹αž€αžΆαžšβ€‹αž”αŸ’αžšαž€αž½αžβ€‹αž”αžΆαž“β€‹αž…αžΆαž”αŸ‹β€‹αž•αŸ’αžαžΎαž˜ αž€αŸ’αžšαž»αž˜β€‹αžšαž”αžŸαŸ‹β€‹αž™αžΎαž„β€‹αž”αžΆαž“β€‹αžŸαŸ’αž‚αžΆαž›αŸ‹β€‹αžšαž½αž…β€‹αž αžΎαž™β€‹αž“αžΌαžœβ€‹αž‚αŸ†αž“αž·αžβ€‹αž–αžΈβ€‹ αž€αŸ’αžšαžŠαžΆαžŸαžŸ TON. αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™αž˜αž»αž“αž–αŸαž›αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž€αžΆαžšαž„αžΆαžšαž‡αžΆαž˜αž½αž™ TON αž™αžΎαž„αž˜αž·αž“αž”αžΆαž“αžœαž·αž—αžΆαž‚αž―αž€αžŸαžΆαžšαž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸαž“αž·αž„αž€αžΌαžŠαž”αŸ’αžšαž—αž–αž–αž·αžαž”αŸ’αžšαžΆαž€αžŠαž“αŸƒαžœαŸαž‘αž·αž€αžΆαž“αŸ„αŸ‡αž‘αŸαžŠαžΌαž…αŸ’αž“αŸαŸ‡αž‡αŸ†αž αžΆαž“αžŠαŸ†αž”αžΌαž„αž‚αžΊαž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„ - αž€αžΆαžšαžŸαž·αž€αŸ’αžŸαžΆαž αŸ’αž˜αžαŸ‹αž…αžαŸ‹αž“αŸƒαž―αž€αžŸαžΆαžšαž•αŸ’αž›αžΌαžœαž€αžΆαžšαž“αŸ…αž›αžΎ αžαŸ†αž”αž“αŸ‹αž”αžŽαŸ’αžαžΆαž‰ αž“αž·αž„αž“αŸ…αž€αŸ’αž“αž»αž„ αžƒαŸ’αž›αžΆαŸ†αž„αž‚αž˜αŸ’αžšαŸ„αž„.

αž“αŸ…αž–αŸαž›αž€αžΆαžšαž”αŸ’αžšαž€αž½αžαž”αŸ’αžšαž‡αŸ‚αž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ αž€αžΌαžŠαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αžšαž½αž…αž αžΎαž™ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžŠαžΎαž˜αŸ’αž”αžΈαžŸαž“αŸ’αžŸαŸ†αž–αŸαž›αžœαŸαž›αžΆ αž™αžΎαž„αž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαžŸαŸ’αžœαŸ‚αž„αžšαž€αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ† αž¬αžŸαŸαž…αž€αŸ’αžαžΈαžŸαž„αŸ’αžαŸαž”αžŠαŸ‚αž›αžŸαžšαžŸαŸαžšαžŠαŸ„αž™ αžŠαŸ„αž™αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹. αž‡αžΆαž’αž€αž»αžŸαž› αžœαžΆαž˜αž·αž“αž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž›αž‘αŸ’αž’αž•αž›αž’αŸ’αžœαžΈαž‘αŸ - αž€αŸ’αžšαŸ…αž–αžΈαž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž•αŸ’αž‚αž»αŸ†αžœαŸαž‘αž·αž€αžΆαž“αŸ…αž›αžΎαž’αŸŠαžΌαž”αŸŠαž»αž“αž‘αžΌ αž™αžΎαž„αž˜αž·αž“αž”αžΆαž“αžšαž€αžƒαžΎαž‰αžŸαž˜αŸ’αž—αžΆαžšαŸˆαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž‘αŸαŸ”

αž―αž€αžŸαžΆαžšαžαŸ’αž›αž½αž“αž―αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαŸ’αžšαžΆαžœαž‡αŸ’αžšαžΆαžœαž™αŸ‰αžΆαž„αž›αŸ’αž’ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž–αž·αž”αžΆαž€αž’αžΆαž“αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αžαŸ’αž›αŸ‡αŸ” αž‡αžΆαž‰αžΉαž€αž‰αž™ αž™αžΎαž„αžαŸ’αžšαžΌαžœαžαŸ‚αžαŸ’αžšαž›αž”αŸ‹αž‘αŸ…αž…αŸ†αžŽαž»αž…αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αžœαž·αž‰ αž αžΎαž™αž”αŸ’αžαžΌαžšαž–αžΈαž€αžΆαžšαž–αž·αž–αžŽαŸŒαž“αžΆαž€αž˜αŸ’αžšαž·αžαžαŸ’αž–αžŸαŸ‹αž“αŸƒαž‚αŸ†αž“αž·αžαž’αžšαžΌαž”αžΈ αž‘αŸ…αž‡αžΆαž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αžαž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž€αž˜αŸ’αžšαž·αžαž‘αžΆαž”αŸ”

αžœαžΆαž“αžΉαž„αž€αžΆαž“αŸ‹αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž› αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž˜αž·αž“αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž€αžΆαžšαž–αž·αž–αžŽαŸŒαž“αžΆαž›αž˜αŸ’αž’αž·αžαž“αŸƒαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž‘αžΆαž›αŸ‹αžαŸ‚αžŸαŸ„αŸ‡αŸ” αž–αŸαžαŸŒαž˜αžΆαž“αž’αŸ†αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αžαžαŸ†αžŽαžΆαž„αž±αŸ’αž™αž‡αž„αŸ‹αžšαž”αžŸαŸ‹αžœαžΆαž‘αŸ†αž“αž„αž‡αžΆαžšαŸ†αžαžΆαž“αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆαž†αŸ’αž›αžΆαžαžœαŸƒαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαŸαž‘αž·αž€αžΆ TON αž‡αžΆαž‡αžΆαž„αž‡αž½αž™αž–αž½αž€αž‚αŸαŸ”

Nix: αžŠαžΆαž€αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„αž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆ

αž“αŸ… Serokell αž™αžΎαž„αž‡αžΆαž’αŸ’αž“αž€αž‚αžΆαŸ†αž‘αŸ’αžšαžŠαŸαž’αŸ† αž“αž·αž…. αž™αžΎαž„αž”αŸ’αžšαž˜αžΌαž›αž‚αž˜αŸ’αžšαŸ„αž„αžšαž”αžŸαŸ‹αž™αžΎαž„αž‡αžΆαž˜αž½αž™αžœαžΆ αž αžΎαž™αžŠαžΆαž€αŸ‹αž±αŸ’αž™αž–αž½αž€αž‚αŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ NixOpsαž“αž·αž„αž”αžΆαž“αžŠαŸ†αž‘αžΎαž„αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžšαž”αžŸαŸ‹αž™αžΎαž„αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ” αž“αžΈαžŸαŸŠαžΈαž’αŸαžŸ. αžŸαžΌαž˜αž’αžšαž‚αž»αžŽαž…αŸ†αž–αŸ„αŸ‡αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡ αžšαžΆαž›αŸ‹αž€αžΆαžšαžŸαŸ’αžαžΆαž”αž“αžΆαžšαž”αžŸαŸ‹αž™αžΎαž„αž‚αžΊαž’αžΆαž…αž•αž›αž·αžαž‘αžΎαž„αžœαž·αž‰αž”αžΆαž“ αž αžΎαž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αžΎαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŽαžΆαž˜αž½αž™αžŠαŸ‚αž› Nix αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ†αž‘αžΎαž„αŸ”

αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž™αžΎαž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ„αž™αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž Nix αžαŸ’αžšαž½αžαž›αžΎαž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™αž€αž“αŸ’αžŸαŸ„αž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ† 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

αž…αŸ†αžŽαžΆαŸ†αžαžΆαž’αŸ’αž“αž€αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŠαŸ†αž‘αžΎαž„αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αžŽαžΆαž˜αž½αž™αž‘αŸαŸ” Nix αž“αžΉαž„αž’αŸ’αžœαžΎαž’αŸ’αžœαžΈαŸ—αž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž™αŸ‰αžΆαž„αž’αžŸαŸ’αž…αžΆαžšαŸ’αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€ αž˜αž·αž“αžαžΆαž’αŸ’αž“αž€αž€αŸ†αž–αž»αž„αž”αŸ’αžšαžΎ NixOS, Ubuntu ឬ macOS αž‘αŸαŸ”

αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ TON

αž›αŸαžαž€αžΌαžŠαž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆαž†αŸ’αž›αžΆαžαžœαŸƒαž“αŸ…αž€αŸ’αž“αž»αž„αž”αžŽαŸ’αžαžΆαž‰ TON αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αž TON (TVM) αŸ” TVM αž˜αžΆαž“αž—αžΆαž–αžŸαŸ’αž˜αž»αž‚αŸ’αžšαžŸαŸ’αž˜αžΆαž‰αž‡αžΆαž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αžαžŠαž‘αŸƒαž‘αŸ€αž αž αžΎαž™αž˜αžΆαž“αž˜αž»αžαž„αžΆαžšαž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸ αžœαžΆαž’αžΆαž…αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž”αžΆαž“αŸ” αž€αžΆαžšαž”αž“αŸ’αž ΠΈ αžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αž‘αž·αž“αŸ’αž“αž“αŸαž™.

αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡αž‘αŸ…αž‘αŸ€αž αž”αž»αžšαžŸαž˜αž€αž–αžΈ TON αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž—αžΆαžŸαžΆαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαŸ’αž˜αžΈαž…αŸ†αž“αž½αž“αž”αžΈαŸ–

αž αŸ’αžœαžΈαž αŸ’αžœ αž‚αžΊαž‡αžΆαž—αžΆαžŸαžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αž„αŸ‹αž‡αžΆαžŸαž€αž›αžŠαŸ‚αž›αžŸαŸ’αžšαžŠαŸ€αž„αž“αžΉαž„ αž‘αžΈαž”αž½αž“. αžŸαž˜αžαŸ’αžαž—αžΆαž–αžŠαŸαž’αžŸαŸ’αž…αžΆαžšαŸ’αž™αžšαž”αžŸαŸ‹αž‚αžΆαžαŸ‹αž‚αžΊαžŸαž˜αžαŸ’αžαž—αžΆαž–αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ’αžšαžΆαžŸαŸ’αžšαŸαž™αž‘αžΆαž€αŸ‹αž‘αž„αž‡αžΆαž˜αž½αž™ TVM αŸ”

FunC αž‚αžΊαž‡αžΆαž—αžΆαžŸαžΆαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆαž†αŸ’αž›αžΆαžαžœαŸƒαžŠαŸ‚αž›αžŸαŸ’αžšαžŠαŸ€αž„αž“αžΉαž„ C αž αžΎαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αž„αž€αŸ’αžšαž„αž‡αžΆαž—αžΆαžŸαžΆαž˜αž½αž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αž - Fift Assembler αŸ”

αž€αŸ’αžšαž»αž˜αž‘αžΈαž”αŸ’αžšαžΆαŸ† - αž”αžŽαŸ’αžŽαžΆαž›αŸαž™αž…αŸ†αž“αž½αž“αž”αŸ’αžšαžΆαŸ†αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž„αŸ’αž€αžΎαžαž€αžΌαžŠαžŠαŸ‚αž›αž’αžΆαž…αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž”αžΆαž“αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ„αž›αž–αžΈαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ TVM αŸ” Fifth Assembler αž˜αž·αž“αž˜αžΆαž“αž’αŸ’αž“αž€αž…αž„αž€αŸ’αžšαž„αž‘αŸαŸ” αž“αŸαŸ‡αŸ” αž—αžΆαžŸαžΆαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αžŠαŸ‚αž“αžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αž”αŸ‹ (eDSL).

αž€αžΆαžšαž”αŸ’αžšαž€αž½αžαž”αŸ’αžšαž‡αŸ‚αž„αžšαž”αžŸαŸ‹αž™αžΎαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš

αž‘αžΈαž”αŸ†αž•αž»αž αžŠαž›αŸ‹αž–αŸαž›αžαŸ’αžšαžΌαžœαž˜αžΎαž›αž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž€αž·αž…αŸ’αž…αžαž·αžαžαŸ†αž”αŸ’αžšαžΉαž„αž”αŸ’αžšαŸ‚αž„αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ”

αž†αžΆαž“αŸ‚αž›αž‘αžΌαž‘αžΆαžαŸ‹αž’αžŸαž˜αž€αžΆαž›

αž†αžΆαž“αŸ‚αž›αž‘αžΌαž‘αžΆαžαŸ‹αž‚αžΊαž‡αžΆαž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆαž†αŸ’αž›αžΆαžαžœαŸƒαžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž–αžΈαžšαž“αžΆαž€αŸ‹αž•αŸ’αž‰αžΎαž€αžΆαžšαž‘αžΌαž‘αžΆαžαŸ‹αž“αŸ…αžαžΆαž„αž€αŸ’αžšαŸ… blockchain αŸ” αž‡αžΆαž›αž‘αŸ’αž’αž•αž› αž’αŸ’αž“αž€αžŸαž“αŸ’αžŸαŸ†αž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ‚αž”αŸ’αžšαžΆαž€αŸ‹αž‘αŸ (αž˜αž·αž“αž˜αžΆαž“αž€αž˜αŸ’αžšαŸƒαž‡αžΎαž„αžŸαžΆαžš) αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αŸαž˜αžΆαž“αž–αŸαž›αžœαŸαž›αžΆαž•αž„αžŠαŸ‚αžš (αž’αŸ’αž“αž€αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžšαž„αŸ‹αž…αžΆαŸ†αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αŸ’αž›αž»αž€αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž‘αŸ€αž)αŸ” αž€αžΆαžšαž‘αžΌαž‘αžΆαžαŸ‹αž’αžΆαž…αž˜αžΆαž“αž‘αŸ†αž αŸ†αžαžΌαž…αžαžΆαž˜αž€αžΆαžšαž…αž„αŸ‹αž”αžΆαž“ αž“αž·αž„αž‰αžΉαž€αž‰αžΆαž”αŸ‹αžαžΆαž˜αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡αž—αžΆαž‚αžΈαž˜αž·αž“αžαŸ’αžšαžΌαžœαž‘αž»αž€αž…αž·αžαŸ’αžαž‚αŸ’αž“αžΆαž‘αŸ…αžœαž·αž‰αž‘αŸ…αž˜αž€αž‘αŸαž–αŸ’αžšαŸ„αŸ‡αžαžΆαž—αžΆαž–αž™αž»αžαŸ’αžαž·αž’αž˜αŸŒαž“αŸƒαžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž…αž»αž„αž€αŸ’αžšαŸ„αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αžΆαž“αžΆαžŠαŸ„αž™αž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆαž†αŸ’αž›αžΆαžαžœαŸƒαŸ”

αž™αžΎαž„αž”αžΆαž“αžšαž€αžƒαžΎαž‰αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžŠαŸαžŸαžΆαž˜αž‰αŸ’αž‰αž˜αž½αž™αž…αŸ†αž–αŸ„αŸ‡αž”αž‰αŸ’αž αžΆαŸ” αž—αžΆαž‚αžΈαž‘αžΆαŸ†αž„αž–αžΈαžšαž’αžΆαž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžŸαžΆαžšαžŠαŸ‚αž›αž˜αžΆαž“αž αžαŸ’αžαž›αŸαžαžΆ αžŠαŸ‚αž›αž“αžΈαž˜αž½αž™αŸ—αž˜αžΆαž“αž›αŸαžαž–αžΈαžš αžŠαŸ‚αž›αž‡αžΆαž…αŸ†αž“αž½αž“αž–αŸαž‰αžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ‹αžŠαŸ„αž™αž—αžΆαž‚αžΈαž“αžΈαž˜αž½αž™αŸ—αŸ” αž›αŸαžαž‘αžΆαŸ†αž„αž–αžΈαžšαž“αŸαŸ‡αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαžΌαž… αž“αžΆαž‘αž·αž€αžΆαžœαŸ‰αž·αž…αž‘αŸαžš αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž…αŸ‚αž€αž…αžΆαž™αž”αŸ’αžšαž–αŸƒαžŽαžΈ αž“αž·αž„αž€αŸ†αžŽαžαŸ‹αž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž‘αž·αž‰ "αž”αžΆαž“αž€αžΎαžαž‘αžΎαž„αž˜αž»αž“" αž›αžΎαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαŸ” αžŠαŸ„αž™αž”αŸ’αžšαžΎαž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸαŸ‡ αž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆαž“αžΉαž„αž’αžΆαž…αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž‡αž˜αŸ’αž›αŸ„αŸ‡αžŠαŸ‚αž›αž’αžΆαž…αž€αžΎαžαž˜αžΆαž“αŸ”

αžαžΆαž˜αž–αž·αž αž›αŸαžαž˜αž½αž™αž‚αžΊαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαž’αž“αž»αžœαžαŸ’αžαž‚αŸ†αž“αž·αžαž“αŸαŸ‡ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΎαž„αž”αžΆαž“αž…αžΆαž€αž…αŸαž‰αž‘αžΆαŸ†αž„αž–αžΈαžš αžŠαŸ„αž™αžŸαžΆαžšαžœαž·αž’αžΈαž“αŸαŸ‡αž™αžΎαž„αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž€αžΆαž“αŸ‹αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž›αŸ” αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡ αž™αžΎαž„αž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž”αž‰αŸ’αž…αžΌαž›αž…αŸ†αž“αž½αž“αž‘αžΉαž€αž”αŸ’αžšαžΆαž€αŸ‹αž“αŸƒαž€αžΆαžšαž”αž„αŸ‹αž”αŸ’αžšαžΆαž€αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαžΆαžšαž“αžΈαž˜αž½αž™αŸ—αŸ” αž”αžΎαž‚αŸ’αž˜αžΆαž“αžœαžΆαž‘αŸ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžŸαžΆαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžΆαžαŸ‹αž”αž„αŸ‹αžŠαŸ„αž™αž αŸαžαž»αž•αž›αž˜αž½αž™αž…αŸ†αž“αž½αž“ αž“αŸ„αŸ‡αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž”αžšαž·αž˜αžΆαžŽαž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž“αž·αž„αž€αžΆαžšαž‚αžŽαž“αžΆαž…αž»αž„αž€αŸ’αžšαŸ„αž™αž“αžΉαž„αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž€αŸαžŠαŸ„αž™ αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž˜αž·αž“αž€αžαŸ‹αžŸαŸ†αž‚αžΆαž›αŸ‹αž€αžΆαžšαž”αžΆαžαŸ‹αž”αž„αŸ‹αž“αŸ„αŸ‡αž‘αŸαŸ”

αžŠαžΎαž˜αŸ’αž”αžΈαžŸαžΆαž€αž›αŸ’αž”αž„αž‚αŸ†αž“αž·αžαžšαž”αžŸαŸ‹αž™αžΎαž„ αž™αžΎαž„αž”αžΆαž“αžŸαŸ’αžœαŸ‚αž„αžšαž€αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž–αž·αž’αžΈαž€αžΆαžšαž†αžΆαž“αŸ‚αž›αž‘αžΌαž‘αžΆαžαŸ‹αžŸαžΆαž˜αž‰αŸ’αž‰ αž“αž·αž„αžŸαž„αŸ’αžαŸαž”αž”αŸ‚αž”αž“αŸαŸ‡αŸ” αž‚αž½αžšαž±αŸ’αž™αž—αŸ’αž‰αžΆαž€αŸ‹αž•αŸ’αž’αžΎαž› αž™αžΎαž„αžšαž€αžƒαžΎαž‰αžαŸ‚αž–αžΈαžšαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ–

  1. αž”αžšαž·αž™αžΆαž™ αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαž“αŸαŸ‡αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ‚αž€αžšαžŽαžΈαž“αŸƒαž†αžΆαž“αŸ‚αž› unidirectional αž˜αž½αž™αŸ”
  2. αž€αžΆαžšαž”αž„αŸ’αžšαŸ€αž“αžŠαŸ‚αž›αž–αž·αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαž‚αŸ†αž“αž·αžαžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αžΉαž„αž‚αŸ†αž“αž·αžαžšαž”αžŸαŸ‹αž™αžΎαž„αžŠαŸ‚αžš αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŠαŸ„αž™αž˜αž·αž“αž–αž“αŸ’αž™αž›αŸ‹αž›αž˜αŸ’αž’αž·αžαžŸαŸ†αžαžΆαž“αŸ‹αŸ—αž‡αžΆαž…αŸ’αžšαžΎαž“ αžŠαžΌαž…αž‡αžΆαž—αžΆαž–αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž‘αžΌαž‘αŸ… αž“αž·αž„αž“αžΈαžαž·αžœαž·αž’αžΈαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž‡αž˜αŸ’αž›αŸ„αŸ‡αŸ”

αžœαžΆαž…αŸ’αž”αžΆαžŸαŸ‹αžŽαžΆαžŸαŸ‹αžαžΆαžœαžΆαžŸαž˜αž αŸαžαž»αž•αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαž–αž·αž–αžŽαŸŒαž“αžΆαž–αž·αž’αžΈαž€αžΆαžšαžšαž”αžŸαŸ‹αž™αžΎαž„αž™αŸ‰αžΆαž„αž›αž˜αŸ’αž’αž·αž αžŠαŸ„αž™αž™αž€αž…αž·αžαŸ’αžαž‘αž»αž€αžŠαžΆαž€αŸ‹αž‡αžΆαž–αž·αžŸαŸαžŸαž…αŸ†αž–αŸ„αŸ‡αž—αžΆαž–αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαžšαž”αžŸαŸ‹αžœαžΆαŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž€αžΆαžšαž’αŸ’αžœαžΎαž˜αŸ’αžαž„αž‘αŸ€αžαž‡αžΆαž…αŸ’αžšαžΎαž“ αž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž”αžΆαž“αžαŸ’αžšαŸ€αž˜αžšαž½αž…αžšαžΆαž›αŸ‹ αž αžΎαž™αž₯αž‘αžΌαžœαž“αŸαŸ‡αž’αŸ’αž“αž€αž€αŸαž’αžΆαž…αž’αŸ’αžœαžΎαž”αžΆαž“αžŠαŸ‚αžšαŸ” αž˜αžΎαž›αž“αžΆαž„.

αž™αžΎαž„αž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆαž“αŸ…αž€αŸ’αž“αž»αž„ FunC αž αžΎαž™αž™αžΎαž„αž”αžΆαž“αžŸαžšαžŸαŸαžšαž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž”αž“αŸ’αž‘αžΆαžαŸ‹αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αž“αŸ’αžαžšαž€αž˜αŸ’αž˜αž‡αžΆαž˜αž½αž™αž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆαžšαž”αžŸαŸ‹αž™αžΎαž„αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αž“αŸ…αž€αŸ’αž“αž»αž„ Fift αžŠαžΌαž…αžŠαŸ‚αž›αž”αžΆαž“αžŽαŸ‚αž“αžΆαŸ†αžŠαŸ„αž™αž’αŸ’αž“αž€αžšαŸ€αž”αž…αŸ†αŸ” αž™αžΎαž„αž’αžΆαž…αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž—αžΆαžŸαžΆαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ CLI αžšαž”αžŸαŸ‹αž™αžΎαž„ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΎαž„αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαž–αŸ’αž™αžΆαž™αžΆαž˜ Fit αžŠαžΎαž˜αŸ’αž”αžΈαž˜αžΎαž›αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαŸ”

αž“αž·αž™αžΆαž™αž±αŸ’αž™αžαŸ’αžšαž„αŸ‹αž‘αŸ… αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™ Fift αž™αžΎαž„αž˜αž·αž“αžƒαžΎαž‰αž αŸαžαž»αž•αž›αž‚αž½αžšαž±αŸ’αž™αž‘αžΆαž€αŸ‹αž‘αžΆαž‰αžŽαžΆαž˜αž½αž™αž€αŸ’αž“αž»αž„αž€αžΆαžšαž…αžΌαž›αž…αž·αžαŸ’αžαž—αžΆαžŸαžΆαž“αŸαŸ‡αž‘αŸ…αž‡αžΆαž—αžΆαžŸαžΆαž–αŸαž‰αž“αž·αž™αž˜ αž“αž·αž„αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž™αŸ‰αžΆαž„αžŸαž€αž˜αŸ’αž˜αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž§αž”αž€αžšαžŽαŸ αž“αž·αž„αž”αžŽαŸ’αžŽαžΆαž›αŸαž™αžŠαŸ‚αž›αž”αžΆαž“αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ„αŸ‡αž‘αŸαŸ” αž€αžΆαžšαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αžΆαž—αžΆαžŸαžΆαžŠαŸ‚αž›αž˜αžΆαž“αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž›αžΎαž‡αž„αŸ‹αž‚αžΊαž–αž·αžαž‡αžΆαž˜αž·αž“αž›αŸ’αž’αž‘αŸ αž–αŸ’αžšαŸ„αŸ‡αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžαŸ‚αžšαž€αŸ’αžŸαžΆαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž˜αžΆαž“αž“αŸ…αž›αžΎαž‡αž„αŸ‹αž‡αžΆαž“αž·αž…αŸ’αž… αž αžΎαž™αž’αŸ’αž“αž€αž…αž„αž€αŸ’αžšαž„αž˜αž·αž“αž‡αž½αž™αž€αŸ’αž“αž»αž„αžšαžΏαž„αž“αŸαŸ‡αž‘αŸαŸ”

αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžαžΆαž˜αž‚αŸ†αž“αž·αžαžšαž”αžŸαŸ‹αž™αžΎαž„ αž™αž»αžαŸ’αžαž·αž€αž˜αŸ’αž˜αžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αžαŸ’αžαž·αž—αžΆαž–αž“αŸƒ Fift αž‚αžΊαžαž½αž“αžΆαž‘αžΈαžšαž”αžŸαŸ‹αžœαžΆαž‡αžΆαž—αžΆαžŸαžΆαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Fift Assembler αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαžΎαžœαžΆαž”αŸ’αžšαžŸαžΎαžšαž‡αžΆαž„αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž„αŸ’αž€αž”αŸ‹αž§αž”αž€αžšαžŽαŸαžŠαŸ†αž‘αžΎαž„ TVM αž‘αŸ…αž‡αžΆαž—αžΆαžŸαžΆαžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹ αž‡αžΆαž‡αžΆαž„αž”αž„αŸ’αž€αžΎαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαŸ’αž˜αžΈαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αŸ„αž›αž”αŸ†αžŽαž„αžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αž“αŸαŸ‡αž‘αŸ?

TVM Haskell eDSL

αž₯αž‘αžΌαžœαž“αŸαŸ‡αžœαžΆαžŠαž›αŸ‹αž–αŸαž›αž αžΎαž™αžŠαžΎαž˜αŸ’αž”αžΈαž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆαž†αŸ’αž›αžΆαžαžœαŸƒαž‘αžΈαž–αžΈαžšαžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” αž™αžΎαž„αž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž”αž„αŸ’αž€αžΎαžαž€αžΆαž”αžΌαž”αžŠαŸ‚αž›αž˜αžΆαž“αž αžαŸ’αžαž›αŸαžαžΆαž…αŸ’αžšαžΎαž“ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αžΆαžšαžŸαžšαžŸαŸαžšαž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆαž†αŸ’αž›αžΆαžαžœαŸƒαž˜αž½αž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž“αŸ…αž€αŸ’αž“αž»αž„ FunC αž“αžΉαž„αž‚αž½αžšαž±αŸ’αž™αž’αž»αž‰αž–αŸαž€αŸ” αž™αžΎαž„β€‹αž…αž„αŸ‹β€‹αž”αž“αŸ’αžαŸ‚αž˜β€‹αžšαžŸαž‡αžΆαžαž·β€‹αžαŸ’αž›αŸ‡ αž αžΎαž™β€‹αž“αŸ„αŸ‡β€‹αž‡αžΆβ€‹αž—αžΆαžŸαžΆβ€‹αžŠαŸ†αž‘αžΎαž„β€‹αžšαž”αžŸαŸ‹β€‹αž™αžΎαž„β€‹αž•αŸ’αž‘αžΆαž›αŸ‹β€‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ TVMαŸ”

αžŠαžΌαž…αž‡αžΆ Fift Assembler αž—αžΆαžŸαžΆαžαŸ’αž˜αžΈαžšαž”αžŸαŸ‹αž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αž”αŸ‹ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž™αžΎαž„αž”αžΆαž“αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ Haskell αž‡αžΆαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™ Fift αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž™αžΎαž„αž‘αžΆαž‰αž™αž€αž’αžαŸ’αžαž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž–αŸαž‰αž›αŸαž‰αž–αžΈαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαž—αŸαž‘αž€αž˜αŸ’αžšαž·αžαžαŸ’αž–αžŸαŸ‹αžšαž”αžŸαŸ‹αžœαžΆαŸ” αž“αŸ…αž–αŸαž›αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆαž†αŸ’αž›αžΆαžαžœαŸƒ αžŠαŸ‚αž›αžαž˜αŸ’αž›αŸƒαž“αŸƒαžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αž€αŸ†αž αž»αžŸαžαžΌαž…αž˜αž½αž™αž’αžΆαž…αžαŸ’αž–αžŸαŸ‹αžŽαžΆαžŸαŸ‹ αž€αžΆαžšαžœαžΆαž™αž’αž€αŸ’αžŸαžšαž‹αž·αžαž·αžœαž“αŸ’αžαžαžΆαž˜αž‚αŸ†αž“αž·αžαžšαž”αžŸαŸ‹αž™αžΎαž„αž‚αžΊαž‡αžΆαž’αžαŸ’αžαž”αŸ’αžšαž™αŸ„αž‡αž“αŸαžŠαŸαž’αŸ†αž˜αž½αž™αŸ”

αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž αžΆαž‰αž–αžΈαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž§αž”αž€αžšαžŽαŸαžŠαŸ†αž‘αžΎαž„ TVM αž˜αžΎαž›αž‘αŸ…αžŠαžΌαž…αž”αžΆαž“αž”αž„αŸ’αž€αž”αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ Haskell αž™αžΎαž„αž”αžΆαž“αž’αž“αž»αžœαžαŸ’αžαž€αžΆαž”αžΌαž”αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαž“αŸ…αž›αžΎαžœαžΆαŸ” αž“αŸαŸ‡αž‡αžΆαžšαžΏαž„αž˜αž½αž™αž…αŸ†αž“αž½αž“αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž™αž€αž…αž·αžαŸ’αžαž‘αž»αž€αžŠαžΆαž€αŸ‹αŸ–

  • αž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆαž“αŸαŸ‡αž˜αžΆαž“αž˜αž»αžαž„αžΆαžšαž˜αž½αž™ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαžΎαž”αžΆαž“αž…αŸ’αžšαžΎαž“αžαžΆαž˜αžŠαŸ‚αž›αž’αŸ’αž“αž€αž…αžΌαž›αž…αž·αžαŸ’αžαŸ” αž“αŸ…αž–αŸαž›αž’αŸ’αž“αž€αž€αŸ†αžŽαžαŸ‹αž˜αž»αžαž„αžΆαžšαžαŸ’αž˜αžΈαž‡αžΆαž—αžΆαžŸαžΆαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ (ឧ. Haskell) eDSL αžšαž”αžŸαŸ‹αž™αžΎαž„αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžαžΆαžαžΎαž’αŸ’αž“αž€αž…αž„αŸ‹αž±αŸ’αž™αžœαžΆαž€αŸ’αž›αžΆαž™αž‡αžΆαž‘αž˜αŸ’αž›αžΆαž”αŸ‹αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αž“αŸ…αž€αŸ’αž“αž»αž„ TVM αž¬αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αžŠαžΆαž€αŸ‹αž”αž‰αŸ’αž…αžΌαž›αž“αŸ…αž…αŸ†αžŽαž»αž…αž“αŸƒαž€αžΆαžšαž αŸ…αž‘αžΌαžšαžŸαž–αŸ’αž‘αŸ”
  • αžŠαžΌαž… Haskell αž˜αž»αžαž„αžΆαžšαž˜αžΆαž“αž”αŸ’αžšαž—αŸαž‘αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž“αž·αžαŸ’αž™αž“αŸ…αž–αŸαž›αž…αž„αž€αŸ’αžšαž„αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„ eDSL αžšαž”αžŸαŸ‹αž™αžΎαž„ αž”αŸ’αžšαž—αŸαž‘αž”αž‰αŸ’αž…αžΌαž›αž“αŸƒαž˜αž»αžαž„αžΆαžšαž‚αžΊαž‡αžΆαž”αŸ’αžšαž—αŸαž‘αž“αŸƒαž‡αž„αŸ‹αžŠαŸ‚αž›αž˜αž»αžαž„αžΆαžšαžšαŸ†αž–αžΉαž„αž‘αž»αž€ αž αžΎαž™αž”αŸ’αžšαž—αŸαž‘αž›αž‘αŸ’αž’αž•αž›αž‚αžΊαž‡αžΆαž”αŸ’αžšαž—αŸαž‘αž“αŸƒαž‡αž„αŸ‹αžŠαŸ‚αž›αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αž›αž·αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž€αžΆαžšαž αŸ…αž‘αžΌαžšαžŸαž–αŸ’αž‘αŸ”
  • αž€αžΌαžŠαž˜αžΆαž“αž…αŸ†αžŽαžΆαžšαž–αž“αŸ’αž™αž›αŸ‹ stacktypeαžŠαŸ„αž™αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαž”αŸ’αžšαž—αŸαž‘αž‡αž„αŸ‹αžŠαŸ‚αž›αžšαŸ†αž–αžΉαž„αž‘αž»αž€αž“αŸ…αž…αŸ†αžŽαž»αž…αž αŸ…αž‘αžΌαžšαžŸαž–αŸ’αž‘αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž·αž…αŸ’αž…αžŸαž“αŸ’αž™αžΆαž€αžΆαž”αžΌαž”αžŠαžΎαž˜ αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž‡αžΆαž˜αžαž·αž™αŸ„αž”αž›αŸ‹αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž€αŸ’αž“αž»αž„ eDSL αžšαž”αžŸαŸ‹αž™αžΎαž„ αž–αž½αž€αž‚αŸαž–αž·αžαž‡αžΆαž•αŸ’αž“αŸ‚αž€αž“αŸƒαž€αžΌαžŠ αž αžΎαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž“αž·αžαŸ’αž™αž“αŸ…αž–αŸαž›αž…αž„αž€αŸ’αžšαž„αŸ” αž–αž½αž€αž‚αŸαž’αžΆαž…αž”αž˜αŸ’αžšαžΎαž‡αžΆαž―αž€αžŸαžΆαžš αž¬αžŸαŸαž…αž€αŸ’αžαžΈαžαŸ’αž›αŸ‚αž„αž€αžΆαžšαžŽαŸαžŠαŸ‚αž›αž‡αž½αž™αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžŸαŸ’αžœαŸ‚αž„αžšαž€αž”αž‰αŸ’αž αžΆ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αžΌαžŠαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš αž αžΎαž™αž”αŸ’αžšαž—αŸαž‘αž‡αž„αŸ‹αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαŸ” αž‡αžΆαž€αžΆαžšαž–αž·αžαžŽαžΆαžŸαŸ‹ αž…αŸ†αžŽαžΆαžšαž–αž“αŸ’αž™αž›αŸ‹αž”αŸ‚αž”αž“αŸαŸ‡αž˜αž·αž“αž”αŸ‰αŸ‡αž–αžΆαž›αŸ‹αžŠαž›αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αŸαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αŸ αžŠαŸ„αž™αžŸαžΆαžšαž‚αŸ’αž˜αžΆαž“αž›αŸαžαž€αžΌαžŠ TVM αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αž½αž€αž‚αŸαŸ”
  • αž“αŸαŸ‡β€‹αž“αŸ…β€‹αžαŸ‚β€‹αž‡αžΆβ€‹αž‚αŸ†αžšαžΌβ€‹αžŠαŸ‚αž›β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αžŸαžšαžŸαŸαžšβ€‹αž€αŸ’αž“αž»αž„β€‹αžšαž™αŸˆβ€‹αž–αŸαž›β€‹αž–αžΈαžšβ€‹αžŸαž”αŸ’αžαžΆαž αŸ αžŠαžΌαž…αŸ’αž“αŸαŸ‡β€‹αž“αŸ…β€‹αž˜αžΆαž“β€‹αž€αžΆαžšαž„αžΆαžšβ€‹αž‡αžΆβ€‹αž…αŸ’αžšαžΎαž“β€‹αžŠαŸ‚αž›β€‹αžαŸ’αžšαžΌαžœβ€‹αž’αŸ’αžœαžΎβ€‹αž›αžΎβ€‹αž‚αž˜αŸ’αžšαŸ„αž„αŸ” αž§αž‘αžΆαž αžšαžŽαŸ αž€αžšαžŽαžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸƒαžαŸ’αž“αžΆαž€αŸ‹αžŠαŸ‚αž›αž’αŸ’αž“αž€αžƒαžΎαž‰αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΌαžŠαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž‚αž½αžšαžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αŸ”

αž“αŸαŸ‡αž‡αžΆαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž“αŸƒαž€αžΆαž”αžΌαž” multisig αž˜αžΎαž›αž‘αŸ…αžŠαžΌαž…αž“αŸ…αž›αžΎ 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 αž“αž·αž„αž αžαŸ’αžαž›αŸαžαžΆαž…αŸ’αžšαžΎαž“αžšαž”αžŸαŸ‹αž™αžΎαž„αž’αžΆαž…αžšαž€αž”αžΆαž“αž“αŸ… αžƒαŸ’αž›αžΆαŸ†αž„αž“αŸαŸ‡αŸ” αž“αž·αž„β€‹αž…αŸ’αžšαžΎαž“β€‹αž‘αŸ€αž αž”αžΆαž“αž”αŸ’αžšαžΆαž”αŸ‹αž›αž˜αŸ’αž’αž·αž αž’αŸ†αž–αžΈαž—αžΆαžŸαžΆαžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž€αž‡αžΆαž˜αž½αž™ αžŸαž αžŸαŸαžœαž·αž€αžšαž”αžŸαŸ‹αž™αžΎαž„ Georgy Agapov αŸ”

αžŸαŸαž…αž€αŸ’αžαžΈαžŸαž“αŸ’αž“αž·αžŠαŸ’αž‹αžΆαž“αž’αŸ†αž–αžΈαž€αžΆαžšαž”αŸ’αžšαž€αž½αžαž”αŸ’αžšαž‡αŸ‚αž„αž“αž·αž„ TON

αžŸαžšαž»αž”αž˜αž€ αž€αžΆαžšαž„αžΆαžšαžšαž”αžŸαŸ‹αž™αžΎαž„αž”αžΆαž“αž…αŸ†αžŽαžΆαž™αž–αŸαž› 380 αž˜αŸ‰αŸ„αž„ (αžšαž½αž˜αž‘αžΆαŸ†αž„αž€αžΆαžšαž™αž›αŸ‹αžŠαžΉαž„αž’αŸ†αž–αžΈαž―αž€αžŸαžΆαžš αž€αžΆαžšαž”αŸ’αžšαž‡αž»αŸ† αž“αž·αž„αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„)αŸ” αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ XNUMX αž“αžΆαž€αŸ‹αž”αžΆαž“αž…αžΌαž›αžšαž½αž˜αž€αŸ’αž“αž»αž„αž‚αž˜αŸ’αžšαŸ„αž„αž”αŸ’αžšαž€αž½αžαž”αŸ’αžšαž‡αŸ‚αž„: CTO, αž’αŸ’αž“αž€αžŠαžΉαž€αž“αžΆαŸ†αž€αŸ’αžšαž»αž˜, αž’αŸ’αž“αž€αž―αž€αž‘αŸαžŸαžœαŸαž‘αž·αž€αžΆ blockchain αž“αž·αž„αž’αŸ’αž“αž€αž”αž„αŸ’αž€αžΎαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Haskell αŸ”

αž™αžΎαž„αž”αžΆαž“αžšαž€αžƒαžΎαž‰αž’αž“αž’αžΆαž“αžŠαžΎαž˜αŸ’αž”αžΈαž…αžΌαž›αžšαž½αž˜αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ’αžšαž€αž½αžαžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž€αžΆαžšαž›αŸ†αž”αžΆαž€ αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαžŸαŸ’αž˜αžΆαžšαžαžΈαž“αŸƒαž€αžΆαžš hackathon αž€αžΆαžšαž„αžΆαžšαž‡αžΆαž€αŸ’αžšαž»αž˜αž™αŸ‰αžΆαž„αž‡αž·αžαžŸαŸ’αž“αž·αž‘αŸ’αž’ αž“αž·αž„αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž‰αŸ’αž…αžΌαž›αžαŸ’αž›αž½αž“αž™αžΎαž„αž™αŸ‰αžΆαž„αž†αžΆαž”αŸ‹αžšαž αŸαžŸαž“αŸ…αž€αŸ’αž“αž»αž„αž‘αž·αžŠαŸ’αž‹αž—αžΆαž–αž“αŸƒαž”αž…αŸ’αž…αŸαž€αžœαž·αž‘αŸ’αž™αžΆαžαŸ’αž˜αžΈαŸ—αž‚αžΊαžαŸ‚αž„αžαŸ‚αž‚αž½αžšαž±αŸ’αž™αžšαŸ†αž—αžΎαž”αŸ” αž€αžΆαžšαž‚αŸαž„αž˜αž·αž“αž›αž€αŸ‹αž‡αžΆαž…αŸ’αžšαžΎαž“αž™αž”αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαž‘αž‘αž½αž›αž”αžΆαž“αž›αž‘αŸ’αž’αž•αž›αž’αžαž·αž”αžšαž˜αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž“αŸƒαž’αž“αž’αžΆαž“αž˜αžΆαž“αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αžΌαž‘αžΆαžαŸ‹αžŠαŸ„αž™αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαžŠαŸ‚αž›αž˜αž·αž“αž’αžΆαž…αž€αžΆαžαŸ‹αžαŸ’αž›αŸƒαž”αžΆαž“ αž“αž·αž„αž€αžΆαžšαž…αž„αž…αžΆαŸ†αžŠαŸαž›αŸ’αž’αŸ” αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡ αž€αžΆαžšαž’αŸ’αžœαžΎαž€αžΆαžšαž›αžΎαž€αž·αž…αŸ’αž…αž€αžΆαžšαž”αŸ‚αž”αž“αŸαŸ‡αž‚αžΊαžαŸ‚αž„αžαŸ‚αž‡αžΆαž€αžΆαžšαžŸαžΆαž€αž›αŸ’αž”αž„αžŠαŸαž›αŸ’αž’αž“αŸƒαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžšαž”αžŸαŸ‹αž€αŸ’αžšαž»αž˜αž αŸŠαž»αž“ αž–αŸ’αžšαŸ„αŸ‡αžœαžΆαž–αž·αž”αžΆαž€αžαŸ’αž›αžΆαŸ†αž„αžŽαžΆαžŸαŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαž˜αŸ’αžšαŸαž…αž”αžΆαž“αž“αžΌαžœαž›αž‘αŸ’αž’αž•αž›αžŸαž˜αžšαž˜αŸ’αž™αž–αž·αžαž”αŸ’αžšαžΆαž€αžŠ αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž’αž“αŸ’αžαžšαž€αž˜αŸ’αž˜αž•αŸ’αž‘αŸƒαž€αŸ’αž“αž»αž„αžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αžΆαž“αž›αŸ’αž’αŸ”

αž’αžαŸ’αžαž”αž‘αž…αž˜αŸ’αžšαŸ€αž„αž˜αž½αž™αž‘αŸ‚αž€αŸ– αž™αžΎαž„αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž“αžΉαž„αž…αŸ†αž“αž½αž“αž€αžΆαžšαž„αžΆαžšαžŠαŸ‚αž›αžŠαžΆαž€αŸ‹αžŠαŸ„αž™αž€αŸ’αžšαž»αž˜ TON αŸ” αž–αž½αž€αž‚αŸαž”αžΆαž“αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžŠαžΎαž˜αŸ’αž”αžΈαžŸαžΆαž„αžŸαž„αŸ‹αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž€αžΆαžšαž„αžΆαžšαžŠαŸαžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰ αžŸαŸ’αžšαžŸαŸ‹αžŸαŸ’αž’αžΆαž αž αžΎαž™αžŸαŸ†αžαžΆαž“αŸ‹αž”αŸ†αž•αž»αžαŸ” TON αž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αžαŸ’αž›αž½αž“αž―αž„αžαžΆαž‡αžΆαžœαŸαž‘αž·αž€αžΆαž˜αž½αž™αžŠαŸ‚αž›αž˜αžΆαž“αžŸαž€αŸ’αžαžΆαž“αž»αž–αž›αžŠαŸαž’αžŸαŸ’αž…αžΆαžšαŸ’αž™αŸ” αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αžŠαžΎαž˜αŸ’αž”αžΈαž±αŸ’αž™αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž’αŸαž€αžΌαž‘αžΌαžŸαŸŠαžΈαž“αŸαŸ‡αž’αž—αž·αžœαžŒαŸ’αžαž”αžΆαž“ αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž…αŸ’αžšαžΎαž“αž‘αŸ€αž αž‘αžΆαŸ†αž„αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžšαž”αžŸαŸ‹αžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž‚αž˜αŸ’αžšαŸ„αž„ blockchain αž“αž·αž„αž€αŸ’αž“αž»αž„αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž“αŸƒαž€αžΆαžšαž€αŸ‚αž›αž˜αŸ’αž’αž§αž”αž€αžšαžŽαŸαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαŸ” αž™αžΎαž„β€‹αž˜αžΆαž“β€‹αž˜αŸ„αž‘αž“αž—αžΆαž–β€‹αžŠαŸ‚αž›β€‹αž”αžΆαž“β€‹αž€αŸ’αž›αžΆαž™β€‹αž‡αžΆβ€‹αž•αŸ’αž“αŸ‚αž€β€‹αž˜αž½αž™β€‹αž“αŸƒβ€‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšβ€‹αž“αŸαŸ‡αŸ”

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž’αžΆαž“αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡ αž’αŸ’αž“αž€αž“αŸ…αžαŸ‚αž˜αžΆαž“αž…αž˜αŸ’αž„αž›αŸ‹ αž¬αž˜αžΆαž“αž‚αŸ†αž“αž·αžαž’αŸ†αž–αžΈαžšαž”αŸ€αž”αž”αŸ’αžšαžΎ TON αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” αžŸαžšαžŸαŸαžšαž˜αž€αž™αžΎαž„ - αž™αžΎαž„αž“αžΉαž„αžšαžΈαž€αžšαžΆαž™αž€αŸ’αž“αž»αž„αž€αžΆαžšαž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαžšαž”αžŸαŸ‹αž™αžΎαž„αŸ”

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹