ΠΠ΅ΡΠΎΡΠ°ΡΠ½ΠΎ ΡΡΠ΅ ΡΠ° ΡΠ»ΡΡΠ½Π°Π»Π΅ ΡΠ°Π° Π’Π΅Π»Π΅Π³ΡΠ°ΠΌΠ° . ΠΠΎ, ΠΌΠΎΠΆΠ΅Π±ΠΈ ΡΡΠ΅ ΡΠ° ΠΏΡΠΎΠΏΡΡΡΠΈΠ»Π΅ Π²Π΅ΡΡΠ° Π΄Π΅ΠΊΠ° Π½Π΅ ΠΎΠ΄Π°ΠΌΠ½Π° Π’Π΅Π»Π΅Π³ΡΠ°ΠΌ Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° Π½Π° Π΅Π΄Π΅Π½ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΠ°ΠΌΠ΅ΡΠ½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠΈ Π·Π° ΠΎΠ²Π°Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°.
Π’ΠΈΠΌΠΎΡ Π½Π° Serokell, ΡΠΎ Π΄ΠΎΠ»Π³ΠΎΠ³ΠΎΠ΄ΠΈΡΠ½ΠΎ ΠΈΡΠΊΡΡΡΠ²ΠΎ Π²ΠΎ ΡΠ°Π·Π²ΠΎΡΠΎΡ Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈ Π±Π»ΠΎΠΊΡΠ΅ΡΠ½ ΠΏΡΠΎΠ΅ΠΊΡΠΈ, Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π·Π°ΡΡΠ°Π½Π΅ Π½Π°ΡΡΡΠ°Π½Π°. ΠΠ° Π½Π°ΡΠΏΡΠ΅Π²Π°ΡΠΎΡ Π΄Π΅Π»Π΅Π³ΠΈΡΠ°Π²ΠΌΠ΅ ΠΏΠ΅Ρ Π²ΡΠ°Π±ΠΎΡΠ΅Π½ΠΈ, Π° Π΄Π²Π΅ Π½Π΅Π΄Π΅Π»ΠΈ ΠΏΠΎΠ΄ΠΎΡΠ½Π° ΡΠΈΠ΅ Π³ΠΎ ΠΎΡΠ²ΠΎΠΈΡΠ° ΠΏΡΠ²ΠΎΡΠΎ ΠΌΠ΅ΡΡΠΎ Π½Π° Π½Π΅Π³ΠΎ ΠΏΠΎΠ΄ (Π½Π΅)ΡΠΊΡΠΎΠΌΠ½ΠΈΠΎΡ ΡΠ»ΡΡΠ°Π΅Π½ ΠΏΡΠ΅ΠΊΠ°Ρ Π‘Π΅ΠΊΡΠΈ ΠΊΠ°ΠΌΠ΅Π»Π΅ΠΎΠ½. ΠΠΎ ΠΎΠ²Π°Π° ΡΡΠ°ΡΠΈΡΠ° ΡΠ΅ Π·Π±ΠΎΡΡΠ²Π°ΠΌ Π·Π° ΡΠΎΠ° ΠΊΠ°ΠΊΠΎ Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ° ΡΠΎΠ°. Π‘Π΅ Π½Π°Π΄Π΅Π²Π°ΠΌΠ΅ Π΄Π΅ΠΊΠ° Π²ΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π΄Π΅ΡΠ΅Ρ ΠΌΠΈΠ½ΡΡΠΈ Π±Π°ΡΠ΅ΠΌ ΡΠ΅ ΠΏΡΠΎΡΠΈΡΠ°ΡΠ΅ Π½Π΅ΠΊΠΎΡΠ° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π° ΠΏΡΠΈΠΊΠ°Π·Π½Π°, Π° Π½Π°ΡΠΌΠ½ΠΎΠ³Ρ Π²ΠΎ Π½Π΅Π° ΡΠ΅ Π½Π°ΡΠ΄Π΅ΡΠ΅ Π½Π΅ΡΡΠΎ ΠΊΠΎΡΠΈΡΠ½ΠΎ ΡΡΠΎ ΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ Π²ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΠ°.
ΠΠΎ, Π΄Π° ΠΏΠΎΡΠ½Π΅ΠΌΠ΅ ΡΠΎ ΠΌΠ°Π»ΠΊΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ.
ΠΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠΈΡΠ°ΡΠ° ΠΈ Π½Π΅ΡΠ·ΠΈΠ½ΠΈΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈ
ΠΠ½Π°ΡΠΈ, Π³Π»Π°Π²Π½ΠΈΡΠ΅ Π·Π°Π΄Π°ΡΠΈ Π½Π° ΡΡΠ΅ΡΠ½ΠΈΡΠΈΡΠ΅ Π±Π΅Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° Π½Π° Π΅Π΄Π΅Π½ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΠ΄ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡΠ΅ ΠΏΠ°ΠΌΠ΅ΡΠ½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠΈ, ΠΊΠ°ΠΊΠΎ ΠΈ Π΄Π°Π²Π°ΡΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠ·ΠΈ Π·Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π°ΡΠ΅ Π½Π° TON Π΅ΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠΎΡ. ΠΠΎΠ½ΠΊΡΡΡΠΎΡ ΡΡΠ°Π΅ΡΠ΅ ΠΎΠ΄ 24 ΡΠ΅ΠΏΡΠ΅ΠΌΠ²ΡΠΈ Π΄ΠΎ 15 ΠΎΠΊΡΠΎΠΌΠ²ΡΠΈ, Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ Π±Π΅Π° ΠΎΠ±ΡΠ°Π²Π΅Π½ΠΈ Π΄ΡΡΠΈ Π½Π° 15 Π½ΠΎΠ΅ΠΌΠ²ΡΠΈ. ΠΠΎΡΡΠ° Π΄ΠΎΠ»Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅, ΠΈΠΌΠ°ΡΡΠΈ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ Π΄Π΅ΠΊΠ° Π·Π° ΡΠΎΠ° Π²ΡΠ΅ΠΌΠ΅ Telegram ΡΡΠΏΠ΅Π° Π΄Π° ΠΎΠ΄ΡΠΆΠΈ ΠΈ ΠΎΠ±ΡΠ°Π²ΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ ΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡΡΡΠΈ Π·Π° Π΄ΠΈΠ·Π°ΡΠ½ ΠΈ ΡΠ°Π·Π²ΠΎΡ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ Π²ΠΎ C++ Π·Π° ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅ ΠΈ ΠΎΡΠ΅Π½ΡΠ²Π°ΡΠ΅ Π½Π° ΠΊΠ²Π°Π»ΠΈΡΠ΅ΡΠΎΡ Π½Π° VoIP ΠΏΠΎΠ²ΠΈΡΠΈΡΠ΅ Π²ΠΎ Telegram.
ΠΠ·Π±ΡΠ°Π²ΠΌΠ΅ Π΄Π²Π° ΠΏΠ°ΠΌΠ΅ΡΠ½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠΈ ΠΎΠ΄ ΡΠΏΠΈΡΠΎΠΊΠΎΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ ΠΎΠ΄ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΎΡΠΈΡΠ΅. ΠΠ° Π΅Π΄Π΅Π½ ΠΎΠ΄ Π½ΠΈΠ² ΠΊΠΎΡΠΈΡΡΠ΅Π²ΠΌΠ΅ Π°Π»Π°ΡΠΊΠΈ Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ°Π½ΠΈ ΡΠΎ TON, Π° Π²ΡΠΎΡΠΈΠΎΡ Π±Π΅ΡΠ΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π½ Π½Π° Π½ΠΎΠ² ΡΠ°Π·ΠΈΠΊ ΡΠ°Π·Π²ΠΈΠ΅Π½ ΠΎΠ΄ Π½Π°ΡΠΈΡΠ΅ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΈ ΡΠΏΠ΅ΡΠΈΡΠ°Π»Π½ΠΎ Π·Π° TON ΠΈ Π²Π³ΡΠ°Π΄Π΅Π½ Π²ΠΎ Haskell.
ΠΠ·Π±ΠΎΡΠΎΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π΅Π½ ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΈ ΡΠ°Π·ΠΈΠΊ Π½Π΅ Π΅ ΡΠ»ΡΡΠ°Π΅Π½. ΠΠΎ Π½Π°ΡΠ°ΡΠ° Π§Π΅ΡΡΠΎΠΏΠ°ΡΠΈ Π·Π±ΠΎΡΡΠ²Π°ΠΌΠ΅ Π·ΠΎΡΡΠΎ ΠΌΠΈΡΠ»ΠΈΠΌΠ΅ Π΄Π΅ΠΊΠ° ΡΠ»ΠΎΠΆΠ΅Π½ΠΎΡΡΠ° Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΈΡΠ΅ ΡΠ°Π·ΠΈΡΠΈ Π΅ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎ ΠΏΡΠ΅ΡΠ΅ΡΡΠ²Π°ΡΠ΅ ΠΈ Π·ΠΎΡΡΠΎ Π³Π΅Π½Π΅ΡΠ°Π»Π½ΠΎ Π³ΠΈ ΠΏΡΠ΅ΡΠΏΠΎΡΠΈΡΠ°ΠΌΠ΅ Π½Π°ΠΌΠ΅ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠ°Π½ΠΈΡΠ΅ ΡΠ°Π·ΠΈΡΠΈ. ΠΠ°ΡΠ΅ΠΌ, ΡΠΎΠ΄ΡΠΆΠΈ ΠΈ .
ΠΠΎΡΡΠΎ Π²ΠΎΠΎΠΏΡΡΠΎ ΡΠ΅ΡΠΈΠ²ΠΌΠ΅ Π΄Π° ΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΠΌΠ΅?
ΠΠ°ΠΊΡΠ°ΡΠΊΠΎ, Π·Π°ΡΠΎΠ° ΡΡΠΎ Π½Π°ΡΠ°ΡΠ° ΡΠΏΠ΅ΡΠΈΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡΠ° ΡΠ΅ Π½Π΅ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΈ ΠΈ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ ΠΊΠΎΠΈ Π±Π°ΡΠ°Π°Ρ ΠΏΠΎΡΠ΅Π±Π½ΠΈ Π²Π΅ΡΡΠΈΠ½ΠΈ ΠΈ ΡΠ΅ΡΡΠΎ ΡΠ΅ ΠΎΠ΄ Π½Π°ΡΡΠ½Π° Π²ΡΠ΅Π΄Π½ΠΎΡΡ Π·Π° ΠΠ’ Π·Π°Π΅Π΄Π½ΠΈΡΠ°ΡΠ°. ΠΠΈΠ΅ ΡΠΈΠ»Π½ΠΎ Π³ΠΎ ΠΏΠΎΠ΄Π΄ΡΠΆΡΠ²Π°ΠΌΠ΅ ΡΠ°Π·Π²ΠΎΡΠΎΡ Π½Π° ΡΠΎΡΡΠ²Π΅Ρ ΡΠΎ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄ ΠΈ ΡΠΌΠ΅ Π°Π½Π³Π°ΠΆΠΈΡΠ°Π½ΠΈ Π²ΠΎ Π½Π΅Π³ΠΎΠ²Π°ΡΠ° ΠΏΠΎΠΏΡΠ»Π°ΡΠΈΠ·Π°ΡΠΈΡΠ°, Π° ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠΎΡΠ°Π±ΠΎΡΡΠ²Π°ΠΌΠ΅ ΡΠΎ Π²ΠΎΠ΄Π΅ΡΠΊΠΈ ΡΡΡΠΊΠΈ ΡΠ½ΠΈΠ²Π΅ΡΠ·ΠΈΡΠ΅ΡΠΈ Π²ΠΎ ΠΎΠ±Π»Π°ΡΡΠ° Π½Π° ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΡΠΊΠ°ΡΠ° Π½Π°ΡΠΊΠ° ΠΈ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ°ΡΠ°.
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΈΡΠ΅ Π·Π°Π΄Π°ΡΠΈ Π½Π° Π½Π°ΡΠΏΡΠ΅Π²Π°ΡΠΎΡ ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΎΡΡΠ° Π²ΠΎ Π½Π°ΡΠΈΠΎΡ ΡΠ°ΠΊΠ°Π½ ΠΏΡΠΎΠ΅ΠΊΡ Π’Π΅Π»Π΅Π³ΡΠ°ΠΌ Π±Π΅Π° ΡΠ°ΠΌΠΈ ΠΏΠΎ ΡΠ΅Π±Π΅ ΠΎΠ΄Π»ΠΈΡΠ½Π° ΠΌΠΎΡΠΈΠ²Π°ΡΠΈΡΠ°, Π½ΠΎ Π½Π°Π³ΡΠ°Π΄Π½ΠΈΠΎΡ ΡΠΎΠ½Π΄ ΡΡΠ°Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π΅Π½ ΠΏΠΎΡΡΠΈΠΊ. π
ΠΡΡΡΠ°ΠΆΡΠ²Π°ΡΠ΅ Π½Π° Π±Π»ΠΎΠΊΡΠ΅ΡΠ½ Π’ΠΠ
ΠΠ½ΠΈΠΌΠ°ΡΠ΅Π»Π½ΠΎ Π³ΠΈ ΡΠ»Π΅Π΄ΠΈΠΌΠ΅ Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠ»ΡΡΡΠ²Π°ΡΠ° Π²ΠΎ Π±Π»ΠΎΠΊΡΠ΅ΡΠ½ΠΎΡ, Π²Π΅ΡΡΠ°ΡΠΊΠ°ΡΠ° ΠΈΠ½ΡΠ΅Π»ΠΈΠ³Π΅Π½ΡΠΈΡΠ° ΠΈ ΠΌΠ°ΡΠΈΠ½ΡΠΊΠΎΡΠΎ ΡΡΠ΅ΡΠ΅ ΠΈ ΡΠ΅ ΡΡΡΠ΄ΠΈΠΌΠ΅ Π΄Π° Π½Π΅ ΠΏΡΠΎΠΏΡΡΡΠΈΠΌΠ΅ Π½ΠΈΡΡ Π΅Π΄Π½ΠΎ Π·Π½Π°ΡΠ°ΡΠ½ΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π²ΠΎ ΡΠ΅ΠΊΠΎΡΠ° ΠΎΠ΄ ΠΎΠ±Π»Π°ΡΡΠΈΡΠ΅ Π²ΠΎ ΠΊΠΎΠΈ ΡΠ°Π±ΠΎΡΠΈΠΌΠ΅. ΠΠ°ΡΠΎΠ°, Π΄ΠΎ ΠΏΠΎΡΠ΅ΡΠΎΠΊΠΎΡ Π½Π° Π½Π°ΡΠΏΡΠ΅Π²Π°ΡΠΎΡ, Π½Π°ΡΠΈΠΎΡ ΡΠΈΠΌ Π²Π΅ΡΠ΅ Π±Π΅ΡΠ΅ Π·Π°ΠΏΠΎΠ·Π½Π°Π΅Π½ ΡΠΎ ΠΈΠ΄Π΅ΠΈΡΠ΅ ΠΎΠ΄ . Π‘Π΅ΠΏΠ°ΠΊ, ΠΏΡΠ΅Π΄ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌΠ΅ ΡΠΎ ΡΠ°Π±ΠΎΡΠ° ΡΠΎ Π’ΠΠ, Π½Π΅ ΡΠ° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Π²ΠΌΠ΅ ΡΠ΅Ρ Π½ΠΈΡΠΊΠ°ΡΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° ΠΈ Π²ΠΈΡΡΠΈΠ½ΡΠΊΠΈΠΎΡ ΠΈΠ·Π²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ°, ΡΠ°ΠΊΠ° ΡΡΠΎ ΠΏΡΠ²ΠΈΠΎΡ ΡΠ΅ΠΊΠΎΡ Π±Π΅ΡΠ΅ ΡΠΎΡΠ΅ΠΌΠ° ΠΎΡΠΈΠ³Π»Π΅Π΄Π΅Π½ - ΡΠ΅ΠΌΠ΅Π»Π½ΠΎ ΠΏΡΠΎΡΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΎΡΠΈΡΠΈΡΠ°Π»Π½Π°ΡΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° Π·Π° ΠΈ .
ΠΠΎ ΠΏΠΎΡΠ΅ΡΠΎΠΊΠΎΡ Π½Π° Π½Π°ΡΠΏΡΠ΅Π²Π°ΡΠΎΡ, ΠΊΠΎΠ΄ΠΎΡ Π²Π΅ΡΠ΅ Π±Π΅ΡΠ΅ ΠΎΠ±ΡΠ°Π²Π΅Π½, ΠΏΠ° Π·Π° Π΄Π° Π·Π°ΡΡΠ΅Π΄ΠΈΠΌΠ΅ Π²ΡΠ΅ΠΌΠ΅, ΡΠ΅ΡΠΈΠ²ΠΌΠ΅ Π΄Π° ΠΏΠΎΠ±Π°ΡΠ°ΠΌΠ΅ Π²ΠΎΠ΄ΠΈΡ ΠΈΠ»ΠΈ ΡΠ΅Π·ΠΈΠΌΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ ΠΎΠ΄ ΠΎΠ΄ ΡΡΡΠ°Π½Π° Π½Π° ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈΡΠ΅. ΠΠ° ΠΆΠ°Π», ΡΠΎΠ° Π½Π΅ Π΄Π°Π΄Π΅ Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ - ΠΎΡΠ²Π΅Π½ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π·Π° ΡΠΊΠ»ΠΎΠΏΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° Π½Π° Ubuntu, Π½Π΅ Π½Π°ΡΠ΄ΠΎΠ²ΠΌΠ΅ Π΄ΡΡΠ³ΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΡΠ°Π»ΠΈ.
Π‘Π°ΠΌΠ°ΡΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° Π±Π΅ΡΠ΅ Π΄ΠΎΠ±ΡΠΎ ΠΈΡΡΡΠ°ΠΆΠ΅Π½Π°, Π½ΠΎ Π±Π΅ΡΠ΅ ΡΠ΅ΡΠΊΠΎ Π΄Π° ΡΠ΅ ΠΏΡΠΎΡΠΈΡΠ° Π²ΠΎ Π½Π΅ΠΊΠΎΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ. ΠΠΎΡΡΠ° ΡΠ΅ΡΡΠΎ ΠΌΠΎΡΠ°Π²ΠΌΠ΅ Π΄Π° ΡΠ΅ Π²ΡΠ°ΡΠΈΠΌΠ΅ Π½Π° ΠΎΠ΄ΡΠ΅Π΄Π΅Π½ΠΈ ΡΠΎΡΠΊΠΈ ΠΈ Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΠΌΠ΅ ΠΎΠ΄ ΠΎΠΏΠΈΡΠΈ Π½Π° Π°ΠΏΡΡΡΠ°ΠΊΡΠ½ΠΈ ΠΈΠ΄Π΅ΠΈ Π½Π° Π²ΠΈΡΠΎΠΊΠΎ Π½ΠΈΠ²ΠΎ Π½Π° Π΄Π΅ΡΠ°Π»ΠΈ Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° Π½Π° Π½ΠΈΡΠΊΠΎ Π½ΠΈΠ²ΠΎ.
ΠΠΈ Π±ΠΈΠ»ΠΎ ΠΏΠΎΠ»Π΅ΡΠ½ΠΎ Π΄ΠΎΠΊΠΎΠ»ΠΊΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° Π²ΠΎΠΎΠΏΡΡΠΎ Π½Π΅ Π²ΠΊΠ»ΡΡΡΠ²Π° Π΄Π΅ΡΠ°Π»Π΅Π½ ΠΎΠΏΠΈΡ Π½Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°ΡΠ°. ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈΡΠ΅ Π·Π° ΡΠΎΠ° ΠΊΠ°ΠΊΠΎ Π²ΠΈΡΡΡΠ΅Π»Π½Π°ΡΠ° ΠΌΠ°ΡΠΈΠ½Π° Π³ΠΎ ΠΏΡΠ΅ΡΡΡΠ°Π²ΡΠ²Π° ΡΠ²ΠΎΡΠΎΡ ΠΎΡΠ°ΠΊ Π΅ ΠΏΠΎΠ²Π΅ΡΠΎΡΠ°ΡΠ½ΠΎ Π΄Π° Π³ΠΎ ΠΎΠ΄Π²Π»Π΅ΠΊΡΠ²Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠΈΡΠ΅ ΡΡΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Π°Ρ ΠΏΠ°ΠΌΠ΅ΡΠ½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠΈ Π·Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° TON ΠΎΡΠΊΠΎΠ»ΠΊΡ Π΄Π° ΠΈΠΌ ΠΏΠΎΠΌΠΎΠ³Π½Π°Ρ.
ΠΠΈΠΊΡ: ΡΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ
ΠΠΎ SerokΠ΅Π» ΡΠΌΠ΅ Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΎΠ±ΠΎΠΆΠ°Π²Π°ΡΠ΅Π»ΠΈ . ΠΠΈΠ΅ Π³ΠΈ ΡΠΎΠ±ΠΈΡΠ°ΠΌΠ΅ Π½Π°ΡΠΈΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈ ΡΠΎ Π½Π΅Π³ΠΎ ΠΈ Π³ΠΈ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΡΠ²Π°ΠΌΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΈ , ΠΈ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ Π½Π° ΡΠΈΡΠ΅ Π½Π°ΡΠΈ ΡΠ΅ΡΠ²Π΅ΡΠΈ . ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΎΠ²Π°, ΡΠΈΡΠ΅ Π½Π°ΡΠΈ ΠΈΠ·Π΄Π°Π½ΠΈΡΠ° ΡΠ΅ ΡΠ΅ΠΏΡΠΎΠ΄ΡΡΠΈΡΠ°Π°Ρ ΠΈ ΡΠ°Π±ΠΎΡΠ°Ρ Π½Π° ΠΊΠΎΡ Π±ΠΈΠ»ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π΅Π½ ΡΠΈΡΡΠ΅ΠΌ Π½Π° ΠΊΠΎΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ° Nix.
Π’Π°ΠΊΠ° ΠΏΠΎΡΠ½Π°Π²ΠΌΠ΅ ΡΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΠ΅ . Π‘ΠΎ Π½Π΅Π³ΠΎΠ²Π° ΠΏΠΎΠΌΠΎΡ, ΡΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° 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 (TVM). TVM Π΅ ΠΏΠΎΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ΅Π½ ΠΎΠ΄ ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ Π΄ΡΡΠ³ΠΈ Π²ΠΈΡΡΡΠ΅Π»Π½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ ΠΈ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΡΠΎ Π½Π΅Π³ΠΎ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΡΠ²Π°ΡΠ° ΠΈ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΈ Π΄ΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ.
ΠΠΎΠΊΡΠ°Ρ ΡΠΎΠ°, ΠΌΠΎΠΌΡΠΈΡΠ΅ ΠΎΠ΄ Π’ΠΠ ΡΠΎΠ·Π΄Π°Π΄ΠΎΠ° ΡΡΠΈ Π½ΠΎΠ²ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΈ ΡΠ°Π·ΠΈΡΠΈ:
ΠΠ΅ΡΠΊΠ° Π΅ ΡΠ½ΠΈΠ²Π΅ΡΠ·Π°Π»Π΅Π½ ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΈ ΡΠ°Π·ΠΈΠΊ Π½Π° ΡΡΠ΅ΠΊ ΠΊΠΎΡ Π½Π°Π»ΠΈΠΊΡΠ²Π° Π½Π° . ΠΠ΅Π³ΠΎΠ²Π°ΡΠ° ΡΡΠΏΠ΅Ρ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ Π΅ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠ° Π·Π° ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ° ΡΠΎ Π’ΠΠ.
FunC Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΈ ΡΠ°Π·ΠΈΠΊ Π·Π° ΠΏΠ°ΠΌΠ΅ΡΠ½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠΈ ΠΊΠΎΡ Π΅ ΡΠ»ΠΈΡΠ΅Π½ Π½Π° ΠΈ ΡΠ΅ ΡΠΎΡΡΠ°Π²ΡΠ²Π° Π½Π° Π΄ΡΡΠ³ ΡΠ°Π·ΠΈΠΊ - Fift Assembler.
ΠΠ΅ΡΡΠΈ ΠΌΠΎΠ½ΡΠ°ΠΆΠ΅Ρ β ΠΠ΅ΡΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π·Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°ΡΠ΅ Π½Π° Π±ΠΈΠ½Π°ΡΠ΅Π½ ΠΈΠ·Π²ΡΡΠ΅Π½ ΠΊΠΎΠ΄ Π·Π° TVM. Fifth Assembler Π½Π΅ΠΌΠ° ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅Ρ. ΠΠ²Π° .
ΠΠ°ΡΠΈΠΎΡ Π½Π°ΡΠΏΡΠ΅Π²Π°Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π²ΡΠ΅ΠΌΠ΅ Π΅ Π΄Π° Π³ΠΈ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΠ΄ Π½Π°ΡΠΈΡΠ΅ Π½Π°ΠΏΠΎΡΠΈ.
ΠΡΠΈΠ½Ρ ΡΠΎΠ½ ΠΊΠ°Π½Π°Π» Π·Π° ΠΏΠ»Π°ΡΠ°ΡΠ΅
ΠΠ°Π½Π°Π»ΠΎΡ Π·Π° ΠΏΠ»Π°ΡΠ°ΡΠ΅ Π΅ ΠΏΠ°ΠΌΠ΅ΡΠ΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ ΠΊΠΎΡ ΠΈΠΌ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π½Π° Π΄Π²Π°ΡΡΠ° ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈ Π΄Π° ΠΈΡΠΏΡΠ°ΡΠ°Π°Ρ ΠΏΠ»Π°ΡΠ°ΡΠ° Π½Π°Π΄Π²ΠΎΡ ΠΎΠ΄ Π±Π»ΠΎΠΊΡΠ΅ΡΠ½ΠΎΡ. ΠΠ°ΠΊΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ°, Π·Π°ΡΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ Π½Π΅ ΡΠ°ΠΌΠΎ ΠΏΠ°ΡΠΈ (Π½Π΅ΠΌΠ° ΠΏΡΠΎΠ²ΠΈΠ·ΠΈΡΠ°), ΡΡΠΊΡ ΠΈ Π²ΡΠ΅ΠΌΠ΅ (Π½Π΅ ΠΌΠΎΡΠ° Π΄Π° ΡΠ΅ΠΊΠ°ΡΠ΅ Π΄Π° ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΈ ΡΠ»Π΅Π΄Π½ΠΈΠΎΡ Π±Π»ΠΎΠΊ). ΠΠ»Π°ΡΠ°ΡΠ°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π°Ρ ΠΌΠ°Π»ΠΈ ΠΊΠΎΠ»ΠΊΡ ΡΡΠΎ ΡΠ°ΠΊΠ°ΡΠ΅ ΠΈ ΡΠΎΠ»ΠΊΡ ΡΠ΅ΡΡΠΎ ΠΊΠΎΠ»ΠΊΡ ΡΡΠΎ Π΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ. ΠΠΎ ΠΎΠ²ΠΎΡ ΡΠ»ΡΡΠ°Ρ, ΡΡΡΠ°Π½ΠΈΡΠ΅ Π½Π΅ ΠΌΠΎΡΠ° Π΄Π° ΡΠΈ Π²Π΅ΡΡΠ²Π°Π°Ρ Π΅Π΄Π½ΠΈ Π½Π° Π΄ΡΡΠ³ΠΈ, Π±ΠΈΠ΄Π΅ΡΡΠΈ ΠΏΡΠ°Π²ΠΈΡΠ½ΠΎΡΡΠ° Π½Π° ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΡΠΎ ΠΏΠΎΡΠ°ΠΌΠ½ΡΠ²Π°ΡΠ΅ Π΅ Π·Π°Π³Π°ΡΠ°Π½ΡΠΈΡΠ°Π½Π° ΡΠΎ ΠΏΠ°ΠΌΠ΅ΡΠ½ΠΈΠΎΡ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ.
ΠΠ°ΡΠ΄ΠΎΠ²ΠΌΠ΅ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π·Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΡ. ΠΠ²Π΅ ΡΡΡΠ°Π½ΠΈ ΠΌΠΎΠΆΠ°Ρ Π΄Π° ΡΠ°Π·ΠΌΠ΅Π½ΡΠ²Π°Π°Ρ ΠΏΠΎΡΠΏΠΈΡΠ°Π½ΠΈ ΠΏΠΎΡΠ°ΠΊΠΈ, ΠΎΠ΄ ΠΊΠΎΠΈ ΡΠ΅ΠΊΠΎΡΠ° ΡΠ΅ ΡΠΎΠ΄ΡΠΆΠΈ Π΄Π²Π° Π±ΡΠΎΡΠ° - ΡΠ΅Π»ΠΎΡΠ½ΠΈΠΎΡ ΠΈΠ·Π½ΠΎΡ ΡΡΠΎ Π³ΠΎ ΠΏΠ»Π°ΡΠ° ΡΠ΅ΠΊΠΎΡΠ° ΡΡΡΠ°Π½Π°. ΠΠ²ΠΈΠ΅ Π΄Π²Π° Π±ΡΠΎΡΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°Π°Ρ Π²Π°ΠΊΠ° Π²ΠΎ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π°Π»Π½ΠΈΡΠ΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ°Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ ΠΈ ΠΏΠΎΡΡΠ°Π²Π΅ΡΠ΅ Π³ΠΎ ΡΠ΅Π΄ΠΎΡΠ»Π΅Π΄ΠΎΡ βΡΠ΅ ΡΠ»ΡΡΠΈ ΠΏΠΎΡΠ°Π½ΠΎβ Π½Π° ΡΡΠ°Π½ΡΠ°ΠΊΡΠΈΠΈΡΠ΅. ΠΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΈ ΠΎΠ²ΠΈΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ, Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠΎΡ ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΎ ΡΠ΅ΡΠΈ ΡΠ΅ΠΊΠΎΡ ΠΌΠΎΠΆΠ΅Π½ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡ.
ΠΡΡΡΠ½ΠΎΡΡ, Π΅Π΄Π΅Π½ Π±ΡΠΎΡ Π΅ Π΄ΠΎΠ²ΠΎΠ»Π΅Π½ Π·Π° Π΄Π° ΡΠ΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ° ΠΎΠ²Π°Π° ΠΈΠ΄Π΅ΡΠ°, Π½ΠΎ Π³ΠΈ ΠΎΡΡΠ°Π²ΠΈΠ²ΠΌΠ΅ ΠΈ Π΄Π²Π΅ΡΠ΅ Π±ΠΈΠ΄Π΅ΡΡΠΈ Π½Π° ΠΎΠ²ΠΎΡ Π½Π°ΡΠΈΠ½ ΠΌΠΎΠΆΠ΅Π²ΠΌΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌΠ΅ ΠΏΠΎΡΠ΄ΠΎΠ±Π΅Π½ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ, ΡΠ΅ΡΠΈΠ²ΠΌΠ΅ Π΄Π° Π³ΠΎ Π²ΠΊΠ»ΡΡΠΈΠΌΠ΅ ΠΈΠ·Π½ΠΎΡΠΎΡ Π·Π° ΠΏΠ»Π°ΡΠ°ΡΠ΅ Π²ΠΎ ΡΠ΅ΠΊΠΎΡΠ° ΠΏΠΎΡΠ°ΠΊΠ°. ΠΠ΅Π· Π½Π΅Π³ΠΎ, Π°ΠΊΠΎ ΠΏΠΎΡΠ°ΠΊΠ°ΡΠ° ΡΠ΅ ΠΈΠ·Π³ΡΠ±ΠΈ ΠΏΠΎΡΠ°Π΄ΠΈ Π½Π΅ΠΊΠΎΡΠ° ΠΏΡΠΈΡΠΈΠ½Π°, ΡΠΎΠ³Π°Ρ, ΠΈΠ°ΠΊΠΎ ΡΠΈΡΠ΅ ΠΈΠ·Π½ΠΎΡΠΈ ΠΈ ΠΊΠΎΠ½Π΅ΡΠ½Π°ΡΠ° ΠΏΡΠ΅ΡΠΌΠ΅ΡΠΊΠ° ΡΠ΅ Π±ΠΈΠ΄Π°Ρ ΡΠΎΡΠ½ΠΈ, ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠΎΡ ΠΌΠΎΠΆΠ΅Π±ΠΈ Π½Π΅ΠΌΠ° Π΄Π° ΡΠ° Π·Π°Π±Π΅Π»Π΅ΠΆΠΈ Π·Π°Π³ΡΠ±Π°ΡΠ°.
ΠΠ° Π΄Π° ΡΠ° ΡΠ΅ΡΡΠΈΡΠ°ΠΌΠ΅ Π½Π°ΡΠ°ΡΠ° ΠΈΠ΄Π΅ΡΠ°, Π±Π°ΡΠ°Π²ΠΌΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΈ Π·Π° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° ΡΠ°ΠΊΠΎΠ² Π΅Π΄Π½ΠΎΡΡΠ°Π²Π΅Π½ ΠΈ ΠΊΠΎΠ½ΡΠΈΠ·Π΅Π½ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» Π·Π° ΠΊΠ°Π½Π°Π» Π·Π° ΠΏΠ»Π°ΡΠ°ΡΠ΅. ΠΠ·Π½Π΅Π½Π°Π΄ΡΠ²Π°ΡΠΊΠΈ, Π½Π°ΡΠ΄ΠΎΠ²ΠΌΠ΅ ΡΠ°ΠΌΠΎ Π΄Π²Π΅:
- ΡΠ»ΠΈΡΠ΅Π½ ΠΏΡΠΈΡΡΠ°ΠΏ, ΡΠ°ΠΌΠΎ Π·Π° ΡΠ»ΡΡΠ°ΡΠΎΡ Π½Π° Π΅Π΄Π½ΠΎΠ½Π°ΡΠΎΡΠ΅Π½ ΠΊΠ°Π½Π°Π».
- , ΠΊΠΎΡΠ° ΡΠ° ΠΎΠΏΠΈΡΡΠ²Π° ΠΈΡΡΠ°ΡΠ° ΠΈΠ΄Π΅ΡΠ° ΠΊΠ°ΠΊΠΎ Π½Π°ΡΠ°ΡΠ°, Π½ΠΎ Π±Π΅Π· ΠΎΠ±ΡΠ°ΡΠ½ΡΠ²Π°ΡΠ΅ ΠΌΠ½ΠΎΠ³Ρ Π²Π°ΠΆΠ½ΠΈ Π΄Π΅ΡΠ°Π»ΠΈ, ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ ΠΎΠΏΡΡΠ°ΡΠ° ΠΊΠΎΡΠ΅ΠΊΡΠ½ΠΎΡΡ ΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠΈΡΠ΅ Π·Π° ΡΠ΅ΡΠ°Π²Π°ΡΠ΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΈ.
Π‘ΡΠ°Π½Π° ΡΠ°ΡΠ½ΠΎ Π΄Π΅ΠΊΠ° ΠΈΠΌΠ° ΡΠΌΠΈΡΠ»Π° Π΄Π΅ΡΠ°Π»Π½ΠΎ Π΄Π° ΡΠ΅ ΠΎΠΏΠΈΡΠ΅ Π½Π°ΡΠΈΠΎΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ», ΠΏΠΎΡΠ²Π΅ΡΡΠ²Π°ΡΡΠΈ ΠΏΠΎΡΠ΅Π±Π½ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π½Π΅Π³ΠΎΠ²Π°ΡΠ° ΠΈΡΠΏΡΠ°Π²Π½ΠΎΡΡ. ΠΠΎ Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΠΏΠΎΠ²ΡΠΎΡΡΠ²Π°ΡΠ°, ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° Π±Π΅ΡΠ΅ Π³ΠΎΡΠΎΠ²Π°, Π° ΡΠ΅Π³Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈ Π²ΠΈΠ΅. .
ΠΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π²ΠΌΠ΅ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠΎΡ Π²ΠΎ FunC ΠΈ ΡΠ° Π½Π°ΠΏΠΈΡΠ°Π²ΠΌΠ΅ Π°Π»Π°ΡΠΊΠ°ΡΠ° Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½Π° Π»ΠΈΠ½ΠΈΡΠ° Π·Π° ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ° ΡΠΎ Π½Π°ΡΠΈΠΎΡ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ ΡΠ΅Π»ΠΎΡΠ½ΠΎ Π²ΠΎ Fift, ΠΊΠ°ΠΊΠΎ ΡΡΠΎ Π΅ ΠΏΡΠ΅ΠΏΠΎΡΠ°ΡΠ°Π½ΠΎ ΠΎΠ΄ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΎΡΠΈΡΠ΅. ΠΠΎΠΆΠ΅Π²ΠΌΠ΅ Π΄Π° ΠΈΠ·Π±Π΅ΡΠ΅ΠΌΠ΅ ΠΊΠΎΡ Π±ΠΈΠ»ΠΎ Π΄ΡΡΠ³ ΡΠ°Π·ΠΈΠΊ Π·Π° Π½Π°ΡΠΈΠΎΡ CLI, Π½ΠΎ Π±Π΅Π²ΠΌΠ΅ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΈΡΠ°Π½ΠΈ Π΄Π° Π³ΠΎ ΠΏΡΠΎΠ±Π°ΠΌΠ΅ Fit Π·Π° Π΄Π° Π²ΠΈΠ΄ΠΈΠΌΠ΅ ΠΊΠ°ΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ° Π²ΠΎ ΠΏΡΠ°ΠΊΡΠ°.
ΠΠ° Π±ΠΈΠ΄Π°ΠΌ ΠΈΡΠΊΡΠ΅Π½, ΠΎΡΠΊΠ°ΠΊΠΎ ΡΠ°Π±ΠΎΡΠ΅Π²ΠΌΠ΅ ΡΠΎ Fift, Π½Π΅ Π²ΠΈΠ΄ΠΎΠ²ΠΌΠ΅ ΡΠ±Π΅Π΄Π»ΠΈΠ²ΠΈ ΠΏΡΠΈΡΠΈΠ½ΠΈ Π΄Π° Π³ΠΎ ΠΏΡΠ΅ΡΠΏΠΎΡΠΈΡΠ°ΠΌΠ΅ ΠΎΠ²ΠΎΡ ΡΠ°Π·ΠΈΠΊ ΠΎΠ΄ ΠΏΠΎΠΏΡΠ»Π°ΡΠ½ΠΈΡΠ΅ ΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΊΠΎΡΠΈΡΡΠ΅Π½ΠΈΡΠ΅ ΡΠ°Π·ΠΈΡΠΈ ΡΠΎ ΡΠ°Π·Π²ΠΈΠ΅Π½ΠΈ Π°Π»Π°ΡΠΊΠΈ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°ΡΠ΅ΡΠΎ Π½Π° ΡΠ°Π·ΠΈΠΊ Π±Π°Π·ΠΈΡΠ°Π½ Π½Π° ΡΡΠ΅ΠΊ Π΅ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ Π½Π΅ΠΏΡΠΈΡΠ°ΡΠ½ΠΎ, Π±ΠΈΠ΄Π΅ΡΡΠΈ ΠΌΠΎΡΠ° ΠΏΠΎΡΡΠΎΡΠ°Π½ΠΎ Π΄Π° Π³ΠΎ ΡΡΠ²Π°ΡΠ΅ Π²ΠΎ Π²Π°ΡΠ°ΡΠ° Π³Π»Π°Π²Π° ΠΎΠ½Π° ΡΡΠΎ Π΅ Π½Π° ΠΎΡΠ°ΠΊΠΎΡ, Π° ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅ΡΠΎΡ Π½Π΅ ΠΏΠΎΠΌΠ°Π³Π° Π²ΠΎ ΡΠΎΠ°.
ΠΠ°ΡΠΎΠ°, ΡΠΏΠΎΡΠ΅Π΄ Π½Π°Ρ, Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΎΡΠΎ ΠΎΠΏΡΠ°Π²Π΄ΡΠ²Π°ΡΠ΅ Π·Π° ΠΏΠΎΡΡΠΎΠ΅ΡΠ΅ΡΠΎ Π½Π° Fift Π΅ Π½Π΅Π³ΠΎΠ²Π°ΡΠ° ΡΠ»ΠΎΠ³Π° ΠΊΠ°ΠΊΠΎ ΡΠ°Π·ΠΈΠΊ Π΄ΠΎΠΌΠ°ΡΠΈΠ½ Π½Π° Fift Assembler. ΠΠΎ, Π·Π°ΡΠ΅ΠΌ Π½Π΅ Π±ΠΈ Π±ΠΈΠ»ΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΠΎ Π΄Π° ΡΠ΅ Π²Π³ΡΠ°Π΄ΠΈ Π’ΠΠ Π°ΡΠ΅ΠΌΠ±Π»Π΅Ρ Π²ΠΎ Π½Π΅ΠΊΠΎΡ ΠΏΠΎΡΡΠΎΠ΅ΡΠΊΠΈ ΡΠ°Π·ΠΈΠΊ, Π½Π°ΠΌΠ΅ΡΡΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΌΠΈΡΠ»ΠΈ Π½ΠΎΠ² Π·Π° ΠΎΠ²Π°Π° ΡΡΡΡΠΈΠ½ΡΠΊΠ° Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π° ΡΠ΅Π»?
TVM Haskell eDSL
Π‘Π΅Π³Π° Π΅ Π²ΡΠ΅ΠΌΠ΅ Π΄Π° Π·Π±ΠΎΡΡΠ²Π°ΠΌΠ΅ Π·Π° Π½Π°ΡΠΈΠΎΡ Π²ΡΠΎΡ ΠΏΠ°ΠΌΠ΅ΡΠ΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ. Π Π΅ΡΠΈΠ²ΠΌΠ΅ Π΄Π° ΡΠ°Π·Π²ΠΈΠ΅ΠΌΠ΅ ΠΏΠ°ΡΠΈΡΠ½ΠΈΠΊ ΡΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΠΎΡΠΏΠΈΡΠΈ, Π½ΠΎ ΠΏΠΈΡΡΠ²Π°ΡΠ΅ΡΠΎ ΡΡΡΠ΅ Π΅Π΄Π΅Π½ ΠΏΠ°ΠΌΠ΅ΡΠ΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ Π²ΠΎ FunC Π±ΠΈ Π±ΠΈΠ»ΠΎ ΠΏΡΠ΅ΠΌΠ½ΠΎΠ³Ρ Π΄ΠΎΡΠ°Π΄Π½ΠΎ. Π‘Π°ΠΊΠ°Π²ΠΌΠ΅ Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅ΠΌΠ΅ ΠΌΠ°Π»ΠΊΡ Π²ΠΊΡΡ, Π° ΡΠΎΠ° Π±Π΅ΡΠ΅ Π½Π°ΡΠΈΠΎΡ ΡΠΎΠΏΡΡΠ²Π΅Π½ ΡΠ°Π·ΠΈΠΊ Π·Π° ΡΠΊΠ»ΠΎΠΏΡΠ²Π°ΡΠ΅ Π½Π° Π’ΠΠ.
ΠΠ°ΠΊΠΎ ΠΈ Fift Assembler, Π½Π°ΡΠΈΠΎΡ Π½ΠΎΠ² ΡΠ°Π·ΠΈΠΊ Π΅ Π²Π³ΡΠ°Π΄Π΅Π½, Π½ΠΎ Π³ΠΎ ΠΈΠ·Π±ΡΠ°Π²ΠΌΠ΅ Haskell Π·Π° Π΄ΠΎΠΌΠ°ΡΠΈΠ½ Π½Π°ΠΌΠ΅ΡΡΠΎ Fift, ΡΡΠΎ Π½ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° ΡΠ΅Π»ΠΎΡΠ½ΠΎ Π΄Π° Π³ΠΈ ΠΈΡΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅ Π½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ Π½Π°ΠΏΡΠ΅Π΄Π½ΠΈ ΡΠΈΠΏΠΎΠ²ΠΈ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΎΡ. ΠΠΎΠ³Π° ΡΠ°Π±ΠΎΡΠΈΡΠ΅ ΡΠΎ ΠΏΠ°ΠΌΠ΅ΡΠ½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠΈ, ΠΊΠ°Π΄Π΅ ΡΡΠΎ ΡΠ΅Π½Π°ΡΠ° Π½Π° Π΄ΡΡΠΈ ΠΈ ΠΌΠ°Π»Π° Π³ΡΠ΅ΡΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ ΠΌΠ½ΠΎΠ³Ρ Π²ΠΈΡΠΎΠΊΠ°, ΡΡΠ°ΡΠΈΡΠΊΠΎΡΠΎ ΠΏΠΈΡΡΠ²Π°ΡΠ΅, ΡΠΏΠΎΡΠ΅Π΄ Π½Π°ΡΠ΅ ΠΌΠΈΡΠ»Π΅ΡΠ΅, Π΅ Π³ΠΎΠ»Π΅ΠΌΠ° ΠΏΡΠ΅Π΄Π½ΠΎΡΡ.
ΠΠ° Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ ΠΈΠ·Π³Π»Π΅Π΄Π° Π°ΡΠ΅ΠΌΠ±Π»Π΅ΡΠΎΡ TVM Π²Π³ΡΠ°Π΄Π΅Π½ Π²ΠΎ Haskell, ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π²ΠΌΠ΅ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π΅Π½ ΠΏΠ°ΡΠΈΡΠ½ΠΈΠΊ Π½Π° Π½Π΅Π³ΠΎ. ΠΠ²Π΅ Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΡΠ°Π±ΠΎΡΠΈ Π½Π° ΠΊΠΎΠΈ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΎΠ±ΡΠ½Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅:
- ΠΠ²ΠΎΡ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ ΡΠ΅ ΡΠΎΡΡΠΎΠΈ ΠΎΠ΄ Π΅Π΄Π½Π° ΡΡΠ½ΠΊΡΠΈΡΠ°, Π½ΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΠΊΠΎΠ»ΠΊΡ ΡΡΠΎ ΡΠ°ΠΊΠ°ΡΠ΅. ΠΠΎΠ³Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°ΡΠ΅ Π½ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΡΠ° Π½Π° ΡΠ°Π·ΠΈΠΊΠΎΡ Π½Π° Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΎΡ (Ρ.Π΅. Haskell), Π½Π°ΡΠΈΠΎΡ eDSL Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ Π΄Π°Π»ΠΈ ΡΠ°ΠΊΠ°ΡΠ΅ ΡΠ°Π° Π΄Π° ΡΡΠ°Π½Π΅ ΠΏΠΎΡΠ΅Π±Π½Π° ΡΡΡΠΈΠ½Π° Π²ΠΎ TVM ΠΈΠ»ΠΈ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ Π΄Π° ΡΠ΅ Π²ΠΌΠ΅ΡΠ½Π΅ Π½Π° ΠΌΠ΅ΡΡΠΎΡΠΎ Π½Π° ΠΏΠΎΠ²ΠΈΠΊΠΎΡ.
- ΠΠ°ΠΊΠΎ Π₯Π°ΡΠΊΠ΅Π», ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ ΠΈΠΌΠ°Π°Ρ ΡΠΈΠΏΠΎΠ²ΠΈ ΠΊΠΎΠΈ ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°Π°Ρ Π²ΠΎ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ°ΡΠ΅. ΠΠΎ Π½Π°ΡΠΈΠΎΡ eDSL, Π²Π»Π΅Π·Π½ΠΈΠΎΡ ΡΠΈΠΏ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΠ° Π΅ ΡΠΈΠΏΠΎΡ Π½Π° ΡΡΠ΅ΠΊ ΡΡΠΎ Π³ΠΎ ΠΎΡΠ΅ΠΊΡΠ²Π° ΡΡΠ½ΠΊΡΠΈΡΠ°ΡΠ°, Π° ΡΠΈΠΏΠΎΡ Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΎΡ Π΅ ΡΠΈΠΏΠΎΡ Π½Π° ΡΡΠ΅ΠΊ ΡΡΠΎ ΡΠ΅ ΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅ ΠΏΠΎ ΠΏΠΎΠ²ΠΈΠΊΠΎΡ.
- ΠΠΎΠ΄ΠΎΡ ΠΈΠΌΠ° ΠΏΡΠΈΠ±Π΅Π»Π΅ΡΠΊΠΈ
stacktype, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈ Π³ΠΎ ΠΎΡΠ΅ΠΊΡΠ²Π°Π½ΠΈΠΎΡ ΡΠΈΠΏ Π½Π° ΠΎΡΠ°ΠΊ Π²ΠΎ ΡΠΎΡΠΊΠ°ΡΠ° Π½Π° ΠΏΠΎΠ²ΠΈΠΊΡΠ²Π°ΡΠ΅. ΠΠΎ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈΠΎΡ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ Π·Π° ΠΏΠ°ΡΠΈΡΠ½ΠΈΠΊ ΡΠΎΠ° Π±Π΅Π° ΡΠ°ΠΌΠΎ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈ, Π½ΠΎ Π²ΠΎ Π½Π°ΡΠΈΠΎΡ eDSL ΡΠΈΠ΅ Π²ΡΡΡΠ½ΠΎΡΡ ΡΠ΅ Π΄Π΅Π» ΠΎΠ΄ ΠΊΠΎΠ΄ΠΎΡ ΠΈ ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°Π°Ρ Π²ΠΎ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ°ΡΠ΅. Π’ΠΈΠ΅ ΠΌΠΎΠΆΠ°Ρ Π΄Π° ΠΏΠΎΡΠ»ΡΠΆΠ°Ρ ΠΊΠ°ΠΊΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° ΠΈΠ»ΠΈ ΠΈΠ·ΡΠ°Π²ΠΈ ΠΊΠΎΠΈ ΠΌΡ ΠΏΠΎΠΌΠ°Π³Π°Π°Ρ Π½Π° ΡΠ°Π·Π²ΠΈΠ²Π°ΡΠΎΡ Π΄Π° Π³ΠΎ Π½Π°ΡΠ΄Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΡ Π°ΠΊΠΎ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΠΊΠΎΠ΄ΠΎΡ ΠΈ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΡΠΈΠΏΠΎΡ Π½Π° ΡΡΠ΅ΠΊΠΎΡ. Π‘Π΅ ΡΠ°Π·Π±ΠΈΡΠ°, ΡΠ°ΠΊΠ²ΠΈΡΠ΅ ΠΏΡΠΈΠ±Π΅Π»Π΅ΡΠΊΠΈ Π½Π΅ Π²Π»ΠΈΡΠ°Π°Ρ Π½Π° ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈΡΠ΅ Π½Π° ΡΡΠ°Π΅ΡΠ΅, Π±ΠΈΠ΄Π΅ΡΡΠΈ Π·Π° Π½ΠΈΠ² Π½Π΅ ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ° Π’ΠΠ-ΠΊΠΎΠ΄. - ΠΠ²Π° Π΅ ΡΓ¨ ΡΡΡΠ΅ ΠΏΡΠΎΡΠΎΡΠΈΠΏ Π½Π°ΠΏΠΈΡΠ°Π½ Π·Π° Π΄Π²Π΅ Π½Π΅Π΄Π΅Π»ΠΈ, ΡΠ°ΠΊΠ° ΡΡΠΎ ΠΈΠΌΠ° ΡΡΡΠ΅ ΠΌΠ½ΠΎΠ³Ρ ΡΠ°Π±ΠΎΡΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΎΡΠΈ ΠΎΠ΄ ΠΊΠ»Π°ΡΠΈΡΠ΅ ΡΡΠΎ Π³ΠΈ Π³Π»Π΅Π΄Π°ΡΠ΅ Π²ΠΎ ΠΊΠΎΠ΄ΠΎΡ ΠΏΠΎΠ΄ΠΎΠ»Ρ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π°Ρ Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΈ.
ΠΠ°ΠΊΠ° ΠΈΠ·Π³Π»Π΅Π΄Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°ΡΠ° Π½Π° ΠΌΡΠ»ΡΠΈΡΠΈΠ³ ΠΏΠ°ΡΠΈΡΠ½ΠΈΠΊ Π½Π° Π½Π°ΡΠΈΠΎΡ 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 Π·Π° Π΄Π° Π³ΠΈ ΡΠ΅ΡΠΈΡΠ΅ Π²Π°ΡΠΈΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ, β ΡΠΎ Π·Π°Π΄ΠΎΠ²ΠΎΠ»ΡΡΠ²ΠΎ ΡΠ΅ Π³ΠΎ ΡΠΏΠΎΠ΄Π΅Π»ΠΈΠΌΠ΅ Π½Π°ΡΠ΅ΡΠΎ ΠΈΡΠΊΡΡΡΠ²ΠΎ.
ΠΠ·Π²ΠΎΡ: www.habr.com
