ΠŸΡ€Π΅Π²Ρ€ΡŠΡ‰Π°ΠΉΠΊΠΈ FunC Π² FunCtional с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Haskell: ΠΊΠ°ΠΊ Serokell спСчСлиха Π² Telegram Blockchain Competition

Π‘ΠΈΠ³ΡƒΡ€Π½ΠΎ стС Ρ‡ΡƒΠ²Π°Π»ΠΈ, Ρ‡Π΅ Telegram сС Π³ΠΎΡ‚Π²ΠΈ Π΄Π° стартира Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Ton. Но ΠΌΠΎΠΆΠ΅ Π±ΠΈ стС пропуснали Π½ΠΎΠ²ΠΈΠ½Π°Ρ‚Π°, Ρ‡Π΅ Π½Π΅ΠΎΡ‚Π΄Π°Π²Π½Π° Telegram обяви конкурс Π·Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅ смарт ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΈ Π·Π° Ρ‚Π°Π·ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°.

Π•ΠΊΠΈΠΏΡŠΡ‚ Π½Π° Serokell с Π±ΠΎΠ³Π°Ρ‚ ΠΎΠΏΠΈΡ‚ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈ Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π½Π΅ моТСшС Π΄Π° останС бСзучастСн. Π”Π΅Π»Π΅Π³ΠΈΡ€Π°Ρ…ΠΌΠ΅ ΠΏΠ΅Ρ‚ΠΈΠΌΠ° слуТитСли Π½Π° конкурса ΠΈ Π²Π΅Ρ‡Π΅ слСд Π΄Π²Π΅ сСдмици Ρ‚Π΅ Π·Π°Π΅Ρ…Π° ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ място ΠΏΠΎΠ΄ (Π½Π΅)скромния Ρ€Π°Π½Π΄ΠΎΠΌΠ½ΠΎ ΠΈΠ·Π±Ρ€Π°Π½ Π½ΠΈΠΊ Sexy Chameleon. Π’ Ρ‚Π°Π·ΠΈ статия Ρ‰Π΅ Π²ΠΈ Ρ€Π°Π·ΠΊΠ°ΠΆΠ° ΠΊΠ°ΠΊ успяха. НадявамС сС, Ρ‡Π΅ ΠΏΡ€Π΅Π· слСдващитС дСсСт ΠΌΠΈΠ½ΡƒΡ‚ΠΈ Ρ‰Π΅ ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ интСрСсна история, Π° ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΉ-Π΄ΠΎΠ±ΡŠΡ€ случай Ρ‰Π΅ Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π½Π΅Ρ‰ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΡ‚Π΅ Π² Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° си.

Но Π½Π΅ΠΊΠ° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ с ΠΌΠ°Π»ΠΊΠΎ потапянС Π² контСкста.

ΠšΠΎΠ½ΠΊΡƒΡ€ΡΡŠΡ‚ ΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΡ‚Π΅ условия

И Ρ‚Π°ΠΊΠ°, основнитС Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° участницитС бяха Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ‚Π΅ смарт ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΈ, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ внСсСнСто Π½Π° прСдлоТСния Π·Π° подобряванС Π½Π° СкосистСмата TON. ΠšΠΎΠ½ΠΊΡƒΡ€ΡΡŠΡ‚ сС ΠΏΡ€ΠΎΠ²Π΅ΠΆΠ΄Π°ΡˆΠ΅ ΠΎΡ‚ 24 сСптСмври Π΄ΠΎ 15 ΠΎΠΊΡ‚ΠΎΠΌΠ²Ρ€ΠΈ, Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ бяха обявСни Π΅Π΄Π²Π° Π½Π° 15 Π½ΠΎΠ΅ΠΌΠ²Ρ€ΠΈ. Доста дълго, ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ Ρ‡Π΅ ΠΏΡ€Π΅Π· Ρ‚ΠΎΠ²Π° Π²Ρ€Π΅ΠΌΠ΅ Telegram успя Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅ ΠΈ обяви Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ конкурси Π·Π° Π΄ΠΈΠ·Π°ΠΉΠ½ ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° прилоТСния Π½Π° C++ Π·Π° тСстванС ΠΈ ΠΎΡ†Π΅Π½ΠΊΠ° Π½Π° качСството Π½Π° VoIP обаТданията Π² Telegram.

Π˜Π·Π±Ρ€Π°Ρ…ΠΌΠ΅ Π΄Π²Π° смарт ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° ΠΎΡ‚ списъка, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ ΠΎΡ‚ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅. Π—Π° Сдиния ΠΎΡ‚ тях ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ…ΠΌΠ΅ инструмСнти, прСдоставСни Π·Π°Π΅Π΄Π½ΠΎ с TON, Π° вторият Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ…ΠΌΠ΅ Π½Π° Π½ΠΎΠ² Π΅Π·ΠΈΠΊ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π΅Π½ ΠΎΡ‚ Π½Π°ΡˆΠΈΡ‚Π΅ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΈ спСциално Π·Π° TON ΠΈ Π²Π³Ρ€Π°Π΄Π΅Π½ Π² Haskell.

Π˜Π·Π±ΠΎΡ€ΡŠΡ‚ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π΅Π½ Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π½Π΅ Π΅ случаСн. Π’ нашия ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π΅Π½ Π±Π»ΠΎΠ³ чСсто Ρ€Π°Π·ΠΊΠ°Π·Π²Π°ΠΌΠ΅ Π·Π°Ρ‰ΠΎ смятамС, Ρ‡Π΅ слоТността Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΈΡ‚Π΅ Π΅Π·ΠΈΡ†ΠΈ Π΅ силно ΠΏΡ€Π΅ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π° ΠΈ Π·Π°Ρ‰ΠΎ Π² ΠΎΠ±Ρ‰ΠΈ Π»ΠΈΠ½ΠΈΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΠΌΠ΅ тях ΠΏΡ€Π΅Π΄ ΠΎΠ±Π΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΈΡ‚Π΅. ΠœΠ΅ΠΆΠ΄Ρƒ Π΄Ρ€ΡƒΠ³ΠΎΡ‚ΠΎ, Π² Π½Π΅Π³ΠΎ ΠΈΠΌΠ° ΠΈ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π» Π½Π° Ρ‚Π°Π·ΠΈ статия.

Π—Π°Ρ‰ΠΎ ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ Ρ€Π΅ΡˆΠΈΡ…ΠΌΠ΅ Π΄Π° участвамС

Накратко, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π½Π°ΡˆΠ°Ρ‚Π° спСциализация са нСстандартни ΠΈ слоТни ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, изискващи особСни умСния ΠΈ чСсто прСдставляващи Π½Π°ΡƒΡ‡Π½Π° стойност Π·Π° IT общността. Π“ΠΎΡ€Π΅Ρ‰ΠΎ подкрСпямС open-source Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° ΠΈ сС Π·Π°Π½ΠΈΠΌΠ°Π²Π°ΠΌΠ΅ с Π½Π΅ΠΉΠ½ΠΎΡ‚ΠΎ популяризиранС, Π° ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° ΡΡŠΡ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‡ΠΈΠΌ с Π²ΠΎΠ΄Π΅Ρ‰ΠΈ унивСрситСти Π² Русия Π² областта Π½Π° ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€Π½ΠΈΡ‚Π΅ Π½Π°ΡƒΠΊΠΈ ΠΈ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ°Ρ‚Π°.

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° конкурса ΠΈ участиСто Π² обичания ΠΎΡ‚ нас ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π’Π΅Π»Π΅Π³Ρ€Π°ΠΌ сами ΠΏΠΎ сСбС си бяха ΠΎΡ‚Π»ΠΈΡ‡Π½Π° мотивация, Π° наградният Ρ„ΠΎΠ½Π΄ стана Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π΅Π½ стимул. πŸ™‚

ИзслСдванС Π½Π° Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π° TON

НиС Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π½ΠΎ слСдим Π½ΠΎΠ²ΠΈΡ‚Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π² Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π°, изкуствСния ΠΈΠ½Ρ‚Π΅Π»Π΅ΠΊΡ‚ ΠΈ ΠΌΠ°ΡˆΠΈΠ½Π½ΠΎΡ‚ΠΎ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈ сС стараСм Π΄Π° Π½Π΅ пропускамС Π½ΠΈΡ‚ΠΎ Π΅Π΄ΠΈΠ½ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π΅Π½ Ρ€Π΅Π»ΠΈΠ· Π² сфСритС, Π² ΠΊΠΎΠΈΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ. Π—Π°Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ конкурса стартира, Π½Π°ΡˆΠΈΡΡ‚ Π΅ΠΊΠΈΠΏ Π²Π΅Ρ‡Π΅ познавашС ΠΈΠ΄Π΅ΠΈΡ‚Π΅ ΠΎΡ‚ TON white paper. ΠžΠ±Π°Ρ‡Π΅ ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π° с TON, Π½Π΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ…ΠΌΠ΅ тСхничСската докумСнтация ΠΈ фактичСския ΠΈΠ·Ρ…ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΏΡŠΡ€Π²Π°Ρ‚Π° ΡΡ‚ΡŠΠΏΠΊΠ° стана ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ясна β€” старатСлно ΠΏΡ€ΠΎΡƒΡ‡Π²Π°Π½Π΅ Π½Π° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½Π°Ρ‚Π° докумСнтация Π½Π° сайта ΠΈ Π² рСпозитория Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Към Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° конкурса ΠΊΠΎΠ΄ΡŠΡ‚ Π²Π΅Ρ‡Π΅ бСшС ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½, Π·Π°Ρ‚ΠΎΠ²Π°, Π·Π° Π΄Π° спСстим Π²Ρ€Π΅ΠΌΠ΅, Ρ€Π΅ΡˆΠΈΡ…ΠΌΠ΅ Π΄Π° ΠΏΠΎΡ‚ΡŠΡ€ΡΠΈΠΌ Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ ΠΈΠ»ΠΈ Ρ€Π΅Π·ΡŽΠΌΠ΅, написано ΠΎΡ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ. Π—Π° съТалСниС, Ρ‚ΠΎΠ²Π° Π½Π΅ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ β€” освСн инструкциитС Π·Π° настройка Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° Ubuntu, Π½Π΅ Π½Π°ΠΌΠ΅Ρ€ΠΈΡ…ΠΌΠ΅ Π΄Ρ€ΡƒΠ³ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈ.

Π‘Π°ΠΌΠ°Ρ‚Π° докумСнтация сС ΠΎΠΊΠ°Π·Π° Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π΅Π½Π°, Π½ΠΎ Π² някои ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΈ бСшС Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π΄Π° сС Ρ‡Π΅Ρ‚Π΅. Доста чСсто сС налагашС Π΄Π° сС Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ към ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΈ Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°ΠΌΠ΅ ΠΎΡ‚ високо Π½ΠΈΠ²ΠΎ Π½Π° описаниС Π½Π° абстрактни ΠΈΠ΄Π΅ΠΈ към ниско Π½ΠΈΠ²ΠΎ Π½Π° Π΄Π΅Ρ‚Π°ΠΉΠ»ΠΈ Π·Π° рСализация.

Π‘Π΅ΡˆΠ΅ Π½ΠΈ ΠΏΠΎ-лСсно, Π°ΠΊΠΎ Π² спСцификацията ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ нямашС ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΈ описания Π½Π° рСализацията. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡΡ‚Π° Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π°Ρ‚Π° машина прСдставя стСка си ΠΏΠΎ-скоро разсСйва Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅, ΡΡŠΠ·Π΄Π°Π²Π°Ρ‰ΠΈ смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΈ Π·Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° TON, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π΄Π° ΠΈΠΌ ΠΏΠΎΠΌΠ°Π³Π°.

Nix: създавамС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚

Π’ Serokell ΠΌΠ½ΠΎΠ³ΠΎ харСсвамС Nix. Π‘ΡŠΠ±ΠΈΡ€Π°ΠΌΠ΅ Π½Π°ΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ ΠΈ Π³ΠΈ Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°ΠΌΠ΅ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° NixOps, Π° Π½Π° ΡΡŠΡ€Π²ΡŠΡ€ΠΈΡ‚Π΅ Π½ΠΈ Π΅ инсталиран NixOS. Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎΠ²Π°, всички наши Π±ΠΈΠ»Π΄ΠΎΠ²Π΅ са Π²ΡŠΠ·ΠΏΡ€ΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π΅ΠΌΠΈ ΠΈ работят Π½Π° всяка ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π° систСма, Π½Π° която ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС инсталиран Nix.

Π—Π°Ρ‚ΠΎΠ²Π° Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ…ΠΌΠ΅ с ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° Nix overlay с ΠΈΠ·Ρ€Π°Π· Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° 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 Network сС изпълнява Π½Π° TON Virtual Machine (TVM). TVM Π΅ ΠΏΠΎ-слоТСн ΠΎΡ‚ ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π° интСрСсСн Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ с ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ΅Π½ΠΈΡΡ‚Π° (continuations) ΠΈ ссылкитС Π½Π° Π΄Π°Π½Π½ΠΈ.

ОсвСн Ρ‚ΠΎΠ²Π°, Π΅ΠΊΠΈΠΏΡŠΡ‚ ΠΎΡ‚ TON Π΅ създал Ρ‚Ρ€ΠΈ Π½ΠΎΠ²ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ½ΠΈ Π΅Π·ΠΈΠΊΠ°:

Fift β€” унивСрсалСн стСков Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅, наподобяващ Forth. НСговата супСрспособност Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π΄Π° взаимодСйства с TVM.

FunC β€” Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Π½Π° смарт ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΈ, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° C ΠΈ сС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° Π² Π΄Ρ€ΡƒΠ³ Π΅Π·ΠΈΠΊ β€” Fift Assembler.

Fift Assembler β€” Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Fift Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄Π²ΠΎΠΈΡ‡Π΅Π½ изпълним ΠΊΠΎΠ΄ Π·Π° TVM. Fift Assembler няма ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€. Π’ΠΎΠ²Π° Π΅ Π²Π³Ρ€Π°Π΄Π΅Π½ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ Π΅Π·ΠΈΠΊ (eDSL).

ΠΠ°ΡˆΠΈΡ‚Π΅ конкурсни Ρ€Π°Π±ΠΎΡ‚ΠΈ

Най-накрая, Π΄ΠΎΠΉΠ΄Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ Π½Π°ΡˆΠΈΡ‚Π΅ усилия.

АсинхронСн ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ΅Π½ ΠΊΠ°Π½Π°Π»

ΠŸΠ»Π°Ρ‚Π΅ΠΆΠ½ΠΈΡΡ‚ ΠΊΠ°Π½Π°Π» (payment channel) Π΅ смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ позволява Π½Π° Π΄Π²Π°ΠΌΠ° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚ плащания извън Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π°. Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ²Π° сС спСстяват Π½Π΅ само ΠΏΠ°Ρ€ΠΈ (липсва такса), Π½ΠΎ ΠΈ Π²Ρ€Π΅ΠΌΠ΅ (Π½Π΅ Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° Ρ‡Π°ΠΊΠ°Ρ‚Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° слСдващия Π±Π»ΠΎΠΊ). ΠŸΠ»Π°Ρ‰Π°Π½ΠΈΡΡ‚Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΌΠ°Π»ΠΊΠΈ, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, ΠΈ Π΄Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° чСсто, ΠΊΠΎΠ»ΠΊΡ‚ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. Π’ Ρ‚ΠΎΠ·ΠΈ случай странитС Π½Π΅ Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° сС довСряват Π΅Π΄Π½Π° Π½Π° Π΄Ρ€ΡƒΠ³Π°, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ справСдливостта Π½Π° ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»Π½ΠΎΡ‚ΠΎ Ρ€Π°Π·ΠΏΠ»Π°Ρ‰Π°Π½Π΅ Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°Π½Π° ΠΎΡ‚ смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°.

НамСрихмС доста просто Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. Π”Π²Π΅Ρ‚Π΅ страни ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° обмСнят подписани ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ, всяко ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π΄Π²Π΅ числа β€” ΠΎΠ±Ρ‰Π°Ρ‚Π° сума, ΠΏΠ»Π°Ρ‚Π΅Π½Π° ΠΎΡ‚ всСки ΠΎΡ‚ участницитС. Π’Π΅Π·ΠΈ Π΄Π²Π΅ числа Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°Ρ‚ ΠΊΠ°Ρ‚ΠΎ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΈ часовници Π² Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΈΡ‚Π΅ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ систСми ΠΈ Π·Π°Π΄Π°Π²Π°Ρ‚ Ρ€Π΅Π΄Π° Π½Π° β€žΡΡŠΠ±ΠΈΡ‚ΠΈΡΡ‚Π° ΠΏΡ€Π΅Π΄ΠΈβ€œ Π² Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈΡ‚Π΅. Използвайки Ρ‚Π΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΡŠΡ‚ Ρ‰Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠΈ всякакви възмоТни ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈ.

Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π·Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚Π°Π·ΠΈ идСя Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ ΠΈ Π΅Π΄Π½ΠΎ число, Π½ΠΎ оставихмС ΠΈ Π΄Π²Π΅Ρ‚Π΅, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‚Π°ΠΊΠ° успяхмС Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΠΏΠΎ-ΡƒΠ΄ΠΎΠ±Π΅Π½ потрСбитСлски интСрфСйс. ОсвСн Ρ‚ΠΎΠ²Π°, Ρ€Π΅ΡˆΠΈΡ…ΠΌΠ΅ Π΄Π° Π²ΠΊΠ»ΡŽΡ‡ΠΈΠΌ в每ко ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° ΠΏΠ»Π°Ρ‰Π°Π½Π΅Ρ‚ΠΎ. Π‘Π΅Π· Π½Π΅Π³ΠΎ, Π°ΠΊΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΏΠΎ някаква ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° бъдС ΠΈΠ·Π³ΡƒΠ±Π΅Π½ΠΎ, Ρ‰Π΅ сС ΠΎΠΊΠ°ΠΆΠ΅, Ρ‡Π΅ Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ всички суми ΠΈ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»Π½ΠΎΡ‚ΠΎ Ρ€Π°Π·ΠΏΠ»Π°Ρ‰Π°Π½Π΅ Ρ‰Π΅ са ΠΊΠΎΡ€Π΅ΠΊΡ‚Π½ΠΈ, потрСбитСлят ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈ Π·Π°Π³ΡƒΠ±Π°Ρ‚Π°.

Π—Π° Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Π½Π°ΡˆΠ°Ρ‚Π° идСя, Ρ‚ΡŠΡ€ΡΠΈΡ…ΠΌΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Ρ‚Π°ΠΊΡŠΠ² прост ΠΈ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π΅Π½ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Π·Π° ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ΅Π½ ΠΊΠ°Π½Π°Π». Π—Π° нашС ΡƒΡ‡ΡƒΠ΄Π²Π°Π½Π΅, ΠΎΡ‚ΠΊΡ€ΠΈΡ…ΠΌΠ΅ само Π΄Π²Π°:

  1. ОписаниС ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, само Π·Π° случая с СднопосочСн ΠΊΠ°Π½Π°Π».
  2. Π ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ, Π² ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ описана ΡΡŠΡ‰Π°Ρ‚Π° идСя ΠΊΠ°Ρ‚ΠΎ Π½Π°ΡˆΠ°Ρ‚Π°, само Π±Π΅Π· обяснСниС Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ Π²Π°ΠΆΠ½ΠΈ Π΄Π΅Ρ‚Π°ΠΉΠ»ΠΈ, ΠΊΠ°Ρ‚ΠΎ ΠΎΠ±Ρ‰Π°Ρ‚Π° корСктност ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°Ρ‚Π° Π·Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΈ.

Π‘Ρ‚Π°Π½Π° ясно, Ρ‡Π΅ ΠΈΠΌΠ° смисъл Π΄Π° опишСм нашия ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ, ΠΊΠ°Ρ‚ΠΎ ΠΎΡ‚Π΄Π΅Π»ΠΈΠΌ спСциално Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° корСктност. Π‘Π»Π΅Π΄ няколко ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ спСцификацията бСшС Π³ΠΎΡ‚ΠΎΠ²Π° ΠΈ сСга Π²ΠΈΠ΅ ΡΡŠΡ‰ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° я Ρ€Π°Π·Π³Π»Π΅Π΄Π°Ρ‚Π΅.

НиС Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ…ΠΌΠ΅ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° Π½Π° FunC, Π° ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°Ρ‚Π° Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄Π΅Π½ Ρ€Π΅Π΄ Π·Π° взаимодСйствиС с нашия ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ напълно написахмС Π½Π° Fift, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π°Ρ…Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅. ΠœΠΎΠΆΠ΅Ρ…ΠΌΠ΅ Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅ΠΌ всСки Π΄Ρ€ΡƒΠ³ Π΅Π·ΠΈΠΊ Π·Π° нашия CLI, Π½ΠΎ Π½ΠΈ бСшС интСрСсно Π΄Π° ΠΏΡ€ΠΎΠ±Π²Π°ΠΌΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ Fift, Π·Π° Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ Ρ‰Π΅ сС прСдстави Π² рСалния свят.

ЧСстно ΠΊΠ°Π·Π°Π½ΠΎ, Ρ€Π°Π±ΠΎΡ‚Π΅ΠΉΠΊΠΈ с Fift, Π½Π΅ видяхмС сСриозни ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ Π΄Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΠΌΠ΅ Ρ‚ΠΎΠ·ΠΈ Π΅Π·ΠΈΠΊ ΠΏΡ€Π΅Π΄ популярни ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π΅Π·ΠΈΡ†ΠΈ с Ρ€Π°Π·Π²ΠΈΡ‚Π° срСда ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° стСков Π΅Π·ΠΈΠΊ Π΅ доста нСприятно, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ постоянно трябва Π΄Π° ΠΏΠΎΠΌΠ½ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ къдС сС Π½Π°ΠΌΠΈΡ€Π° Π² стСка, Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΡŠΡ‚ Π½Π΅ ΠΏΠΎΠΌΠ°Π³Π° Π² Ρ‚ΠΎΠ²Π°.

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ СдинствСното, ΠΏΠΎ нашС ΠΌΠ½Π΅Π½ΠΈΠ΅, ΠΎΠΏΡ€Π°Π²Π΄Π°Π½ΠΈΠ΅ Π·Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Fift Π΅, Ρ‡Π΅ слуТи ΠΊΠ°Ρ‚ΠΎ хост-Π΅Π·ΠΈΠΊ Π·Π° Fift Assembler. Но Π½Π΅ Π±ΠΈ Π»ΠΈ Π±ΠΈΠ»ΠΎ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ Π΄Π° Π²Π³Ρ€Π°Π΄ΠΈΠΌ TVM асСмблСр Π² някой ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ Π΅Π·ΠΈΠΊ, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π΄Π° измислямС Π½ΠΎΠ² Π·Π° Ρ‚Π°Π·ΠΈ, ΠΏΠΎ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΠΎ СдинствСна, Ρ†Π΅Π»?

TVM Haskell eDSL

Π‘Π΅Π³Π° Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° Ρ€Π°Π·ΠΊΠ°ΠΆΠ΅ΠΌ Π·Π° втория Π½ΠΈ смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚. Π Π΅ΡˆΠΈΡ…ΠΌΠ΅ Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΡ€Ρ‚Ρ„Π΅ΠΉΠ» с мултиподпис, Π½ΠΎ Π΄Π° пишСм ΠΎΡ‰Π΅ Π΅Π΄ΠΈΠ½ смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ Π½Π° FunC Π±ΠΈ Π±ΠΈΠ»ΠΎ Ρ‚Π²ΡŠΡ€Π΄Π΅ скучно. Π˜ΡΠΊΠ°Ρ…ΠΌΠ΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ някакъв интСрСсСн Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ ΠΈ Ρ‚ΠΎΠΉ стана Π½Π°ΡˆΠΈΡΡ‚ собствСн Π΅Π·ΠΈΠΊ Π½Π° асСмблСра Π·Π° TVM.

ΠšΠ°ΠΊΡ‚ΠΎ ΠΈ Fift Assembler, Π½Π°ΡˆΠΈΡΡ‚ Π½ΠΎΠ² Π΅Π·ΠΈΠΊ Π΅ Π²Π³Ρ€Π°Π΄ΠΈΠΌ, само Ρ‡Π΅ ΠΊΠ°Ρ‚ΠΎ хост вмСсто Fift ΠΈΠ·Π±Ρ€Π°Ρ…ΠΌΠ΅ Haskell, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ напълно Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° ΡƒΡΡŠΠ²ΡŠΡ€ΡˆΠ΅Π½ΡΡ‚Π²Π°Π½Π° систСма ΠΎΡ‚ Ρ‚ΠΈΠΏΠΎΠ²Π΅. ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° със смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΈ, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Ρ†Π΅Π½Π°Ρ‚Π° Π½Π° Π΄ΠΎΡ€ΠΈ ΠΈ Π½Π°ΠΉ-ΠΌΠ°Π»ΠΊΠ°Ρ‚Π° Π³Ρ€Π΅ΡˆΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΌΠ½ΠΎΠ³ΠΎ висока, статичната типизация, ΠΏΠΎ нашС ΠΌΠ½Π΅Π½ΠΈΠ΅, Π΅ голямо прСдимство.

Π—Π° Π΄Π° дСмонстрирамС ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π°ΡΠ΅ΠΌΠ±Π»Π΅Ρ€ΡŠΡ‚ 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 ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° Π½Π° ΠΏΠΎΡ€Ρ‚Ρ„Π΅ΠΉΠ»Π° с мултиподпис ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π² Ρ‚ΠΎΠ·ΠΈ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ. А ΠΏΠΎ-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€Π°Π·ΠΊΠ°Π·Π° Π·Π° Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ Π΅Π·ΠΈΡ†ΠΈ Π½Π°ΡˆΠΈΡΡ‚ ΠΊΠΎΠ»Π΅Π³Π° Π“Π΅ΠΎΡ€Π³ΠΈΠΉ Агапов. Π˜Π·Π²ΠΎΠ΄ΠΈΡ‚Π΅ ΠΎΡ‚ конкурса ΠΈ TON

Π’ сумата Π½Π°ΡˆΠ°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π° ΠΎΡ‚Π½Π΅ 380 часа (Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π·Π°ΠΏΠΎΠ·Π½Π°Π²Π°Π½Π΅Ρ‚ΠΎ с докумСнтацията, срСщитС ΠΈ нСпосрСдствСната Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°). Π’ конкурсния ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ участваха ΠΏΠ΅Ρ‚ΠΈΠΌΠ° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ: CTO, Ρ‚ΠΈΠΌ-Π»ΠΈΠ΄Π΅Ρ€, спСциалисти ΠΏΠΎ Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ Π½Π° софтуСр Π½Π° Haskell.

Π’ суммС наша Ρ€Π°Π±ΠΎΡ‚Π° заняла 380 часов (вмСстС со знакомством с Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ, совСщаниями ΠΈ нСпосрСдствСнно Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ). Π’ конкурсном ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ приняли участиС ΠΏΡΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ²: БВО, Ρ‚ΠΈΠΌ-Π»ΠΈΠ΄, спСциалисты ΠΏΠΎ Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°ΠΌ ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния Π½Π° Haskell.

РСсурситС Π·Π° участиС Π² конкурса Π½Π°ΠΌΠ΅Ρ€ΠΈΡ…ΠΌΠ΅ Π±Π΅Π· трудности, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π΄ΡƒΡ…ΡŠΡ‚ Π½Π° Ρ…Π°ΠΊΠ°Ρ‚ΠΎΠ½Π°, Π·Π΄Ρ€Π°Π²ΠΎΡ‚ΠΎ teamwork, нСобходимостта ΠΎΡ‚ Π±ΡŠΡ€Π·ΠΎ потапянС Π² аспСктитС Π½Π° Π½ΠΎΠ²ΠΈΡ‚Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ β€” Π²ΠΈΠ½Π°Π³ΠΈ Π΅ Π²ΡŠΠ»Π½ΡƒΠ²Π°Ρ‰ΠΎ. Няколко бСзсънни Π½ΠΎΡ‰ΠΈ, Π·Π° Π΄Π° постигнСм максималСн Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π² условия Π½Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈ рСсурси, сС компСнсират с Π±Π΅Π·Ρ†Π΅Π½Π΅Π½ ΠΎΠΏΠΈΡ‚ ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΈ спомСни. ОсвСн Ρ‚ΠΎΠ²Π°, Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° ΠΏΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ Π΅ Π²ΠΈΠ½Π°Π³ΠΈ Π΄ΠΎΠ±Ρ€Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° процСситС Π² компанията, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π΄Π° сС постигнат наистина достойни Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ Π±Π΅Π· ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ настроСно Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΎ взаимодСйствиС.

ОсвСн Π»ΠΈΡ€ΠΈΠΊΠ°Ρ‚Π°: Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈ смС ΠΎΡ‚ ΠΎΠ±Π΅ΠΌΠ° Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°, ΠΈΠ·Π²ΡŠΡ€ΡˆΠ΅Π½Π° ΠΎΡ‚ Π΅ΠΊΠΈΠΏΠ° Π½Π° TON. Π’Π΅ успяха Π΄Π° изградят слоТна, красива ΠΈ Π½Π°ΠΉ-Π²Π°ΠΆΠ½ΠΎΡ‚ΠΎ, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰Π° систСма. TON ΠΏΠΎΠΊΠ°Π·Π°, Ρ‡Π΅ Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° с голям ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π». Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Π·Π° Π΄Π° сС Ρ€Π°Π·Π²ΠΈΠ΅ Ρ‚Π°Π·ΠΈ СкосистСма, трябва Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΎΡ‰Π΅ ΠΌΠ½ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΎΡ‚ Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° Π½Π΅ΠΉΠ½ΠΎΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π² Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, Ρ‚Π°ΠΊΠ° ΠΈ ΠΎΡ‚ Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° ΡƒΡΡŠΠ²ΡŠΡ€ΡˆΠ΅Π½ΡΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° инструмСнтитС Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°. Π“ΠΎΡ€Π΄Π΅Π΅ΠΌ сС, Ρ‡Π΅ сСга смС част ΠΎΡ‚ Ρ‚ΠΎΠ·ΠΈ процСс.

Ако слСд ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π΅ Π½Π° Ρ‚Π°Π·ΠΈ статия ΠΈΠΌΠ°Ρ‚Π΅ Π²ΡŠΠΏΡ€ΠΎΡΠΈ ΠΈΠ»ΠΈ ΠΈΠ΄Π΅ΠΈ ΠΊΠ°ΠΊ Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΡ‚Π΅ TON Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° Π²Π°ΡˆΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ, Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π½ΠΈ β€” с радост Ρ‰Π΅ сподСлим ΠΎΠΏΠΈΡ‚.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster