Π—Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Ρ‚Π΅ ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ Π² ΠΎΡ‚Π²ΠΎΡ€Π΅Π½Π°Ρ‚Π° ΠΌΡ€Π΅ΠΆΠ° Π½Π° Telegram (TON)

Π—Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Ρ‚Π΅ ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ Π² TON

Π—Π° ΠΊΠ°ΠΊΠ²ΠΎ Π΅ Ρ‚Π°Π·ΠΈ статия?

Π’ статията Ρ‰Π΅ говоря Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ участвах Π² ΠΏΡŠΡ€Π²ΠΈΡ (ΠΎΡ‚ Π΄Π²Π°) Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ конкурс Π½Π° Telegram, Π½Π΅ Π²Π·Π΅Ρ… Π½Π°Π³Ρ€Π°Π΄Π° ΠΈ Ρ€Π΅ΡˆΠΈΡ… Π΄Π° запиша ΠΎΠΏΠΈΡ‚Π° си Π² статия, Π·Π° Π΄Π° Π½Π΅ ΠΏΠΎΡ‚ΡŠΠ½Π΅ Π² Π·Π°Π±Ρ€Π°Π²Π° ΠΈ ΠΌΠΎΠΆΠ΅ Π±ΠΈ Π΄Π° ΠΏΠΎΠΌΠΎΠ³Π½Π΅ някой.

Въй ΠΊΠ°Ρ‚ΠΎ Π½Π΅ исках Π΄Π° пиша абстрактСн ΠΊΠΎΠ΄, Π° Π΄Π° направя Π½Π΅Ρ‰ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΎ, Π·Π° статията написах ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ Π·Π° Π½Π΅Π·Π°Π±Π°Π²Π½Π° лотария ΠΈ уСбсайт, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Π²Π° Π΄Π°Π½Π½ΠΈ Π·Π° ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΡ‚ TON, Π±Π΅Π· Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎ ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅.

Бтатията Ρ‰Π΅ бъдС ΠΏΠΎΠ»Π΅Π·Π½Π° Π·Π° Ρ‚Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ искат Π΄Π° направят ΠΏΡŠΡ€Π²ΠΈΡ си ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ Π² TON, Π½ΠΎ Π½Π΅ знаят ΠΎΡ‚ΠΊΡŠΠ΄Π΅ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ‚.

Използвайки лотарията ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‰Π΅ ΠΏΡ€Π΅ΠΌΠΈΠ½Π° ΠΎΡ‚ инсталиранС Π½Π° срСдата Π΄ΠΎ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅ Π½Π° ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€, взаимодСйствиС с Π½Π΅Π³ΠΎ ΠΈ писанС Π½Π° уСбсайт Π·Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ.

ΠžΡ‚Π½ΠΎΡΠ½ΠΎ участиСто Π² конкурса

Миналия ΠΎΠΊΡ‚ΠΎΠΌΠ²Ρ€ΠΈ Telegram обяви Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ ΡΡŠΡΡ‚Π΅Π·Π°Π½ΠΈΠ΅ с Π½ΠΎΠ²ΠΈ Π΅Π·ΠΈΡ†ΠΈ Fift ΠΈ FunC. Π‘Π΅ΡˆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅ΠΆΠ΄Ρƒ писанСто Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ ΠΈ Π΄Π° Π΅ ΠΎΡ‚ ΠΏΠ΅Ρ‚Ρ‚Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈ ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π°. ΠœΠΈΡΠ»Π΅Ρ…, Ρ‡Π΅ Π±ΠΈ Π±ΠΈΠ»ΠΎ Ρ…ΡƒΠ±Π°Π²ΠΎ Π΄Π° направя Π½Π΅Ρ‰ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎ, Π΄Π° Π½Π°ΡƒΡ‡Π° Π΅Π·ΠΈΠΊ ΠΈ Π΄Π° направя Π½Π΅Ρ‰ΠΎ, Π΄ΠΎΡ€ΠΈ ΠΈ Π΄Π° Π½Π΅ ΠΌΠΈ сС Π½Π°Π»Π°Π³Π° Π΄Π° пиша Π½ΠΈΡ‰ΠΎ Π΄Ρ€ΡƒΠ³ΠΎ Π² Π±ΡŠΠ΄Π΅Ρ‰Π΅. ОсвСн Ρ‚ΠΎΠ²Π° Ρ‚Π΅ΠΌΠ°Ρ‚Π° Π΅ постоянно Π½Π° устнитС.

Π‘Ρ‚Ρ€ΡƒΠ²Π° си Π΄Π° ΠΊΠ°ΠΆΠ°, Ρ‡Π΅ нямах ΠΎΠΏΠΈΡ‚ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈ.

ΠŸΠ»Π°Π½ΠΈΡ€Π°Ρ… Π΄Π° участвам Π΄ΠΎ послСдно, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ успСя ΠΈ слСд Ρ‚ΠΎΠ²Π° Π΄Π° напиша ΠΎΠ±Π·ΠΎΡ€Π½Π° статия, Π½ΠΎ сС ΠΏΡ€ΠΎΠ²Π°Π»ΠΈΡ… ΠΎΡ‰Π΅ ΠΏΡ€ΠΈ ΠΏΡŠΡ€Π²Π°Ρ‚Π°. Π°Π· написа ΠΏΠΎΡ€Ρ‚Ρ„Π΅ΠΉΠ» с Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ мултиподпис FunC ΠΈ ΠΎΠ±Ρ‰ΠΎ Π²Π·Π΅Ρ‚ΠΎ ΠΏΡ€ΠΎΡ€Π°Π±ΠΎΡ‚ΠΈ. Π’Π·Π΅Ρ… Π³ΠΎ Π·Π° основа ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ Π·Π° Solidity.

По Ρ‚ΠΎΠ²Π° Π²Ρ€Π΅ΠΌΠ΅ си мислСх, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ, Π·Π° Π΄Π° Π·Π°Π΅ΠΌΠ° ΠΏΠΎΠ½Π΅ някакво ΠΏΡ€ΠΈΠ·ΠΎΠ²ΠΎ място. Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ ΠΎΠΊΠΎΠ»ΠΎ 40 ΠΎΡ‚ 60 участници станаха ΠΏΡ€ΠΈΠ·ΡŒΠΎΡ€ΠΈ ΠΈ Π°Π· Π½Π΅ бях срСд тях. ΠšΠ°Ρ‚ΠΎ цяло няма Π½ΠΈΡ‰ΠΎ лошо Π² Ρ‚ΠΎΠ²Π°, Π½ΠΎ Π΅Π΄Π½ΠΎ Π½Π΅Ρ‰ΠΎ ΠΌΠ΅ притСсни. Към ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π° обявяванС Π½Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π³Π»Π΅Π΄ΡŠΡ‚ Π½Π° тСста Π·Π° Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π° ΠΌΠΈ Π½Π΅ бСшС Π½Π°ΠΏΡ€Π°Π²Π΅Π½, ΠΏΠΎΠΏΠΈΡ‚Π°Ρ… участницитС Π² Ρ‡Π°Ρ‚Π° ΠΈΠΌΠ° Π»ΠΈ ΠΎΡ‰Π΅ някой Π΄Π° Π³ΠΎ няма, нямашС.

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ ΠΎΠ±Ρ€ΡŠΡ‰Π°ΠΉΠΊΠΈ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π° ΠΌΠΈ, Π΄Π²Π° Π΄Π½ΠΈ ΠΏΠΎ-късно ΡΡŠΠ΄ΠΈΠΈΡ‚Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Ρ…Π° ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ ΠΈ Π°Π· всС ΠΎΡ‰Π΅ Π½Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°ΠΌ Π΄Π°Π»ΠΈ случайно са пропуснали интСлигСнтния ΠΌΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° оцСняванСто ΠΈΠ»ΠΈ просто са помислили, Ρ‡Π΅ Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° лош, Ρ‡Π΅ няма Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€. Π—Π°Π΄Π°Π΄ΠΎΡ… Π²ΡŠΠΏΡ€ΠΎΡ Π½Π° страницата, Π½ΠΎ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ… ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ Π½Π΅ Π΅ Ρ‚Π°ΠΉΠ½Π° ΠΊΠΎΠΉ Π΅ ΠΏΡ€Π΅Ρ†Π΅Π½ΠΈΠ», смСтнах Π·Π° излишно Π΄Π° пиша Π»ΠΈΡ‡Π½ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ.

Π‘Π΅ΡˆΠ΅ ΠΎΡ‚Π΄Π΅Π»Π΅Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ бСшС Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π΄Π° сС напишС статия. Въй ΠΊΠ°Ρ‚ΠΎ всС ΠΎΡ‰Π΅ няма ΠΌΠ½ΠΎΠ³ΠΎ информация, Ρ‚Π°Π·ΠΈ статия Ρ‰Π΅ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° спСститС Π²Ρ€Π΅ΠΌΠ΅ Π½Π° всички заинтСрСсовани.

ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡΡ‚Π° Π·Π° ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈ Π² TON

ΠŸΡ€Π΅Π΄ΠΈ Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π½Π΅Ρ‰ΠΎ, трябва Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΎΡ‚ коя страна Π΄Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ към Ρ‚ΠΎΠ²Π° Π½Π΅Ρ‰ΠΎ. Π—Π°Ρ‚ΠΎΠ²Π° сСга Ρ‰Π΅ Π²ΠΈ ΠΊΠ°ΠΆΠ° ΠΎΡ‚ ΠΊΠ°ΠΊΠ²ΠΈ части сС ΡΡŠΡΡ‚ΠΎΠΈ систСмата. По-Ρ‚ΠΎΡ‡Π½ΠΎ, ΠΊΠ°ΠΊΠ²ΠΈ части трябва Π΄Π° Π·Π½Π°Π΅Ρ‚Π΅, Π·Π° Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΠΎΠ½Π΅ някакъв Π²ΠΈΠ΄ Ρ‚Ρ€ΡƒΠ΄ΠΎΠ² Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€.

Π©Π΅ сС фокусирамС Π²ΡŠΡ€Ρ…Ρƒ писанСто Π½Π° ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° с Π½Π΅Π³ΠΎ TON Virtual Machine (TVM), Fift ΠΈ FunC, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ статията Π΅ ΠΏΠΎ-скоро ΠΊΠ°Ρ‚ΠΎ описаниС Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°. Π’ΡƒΠΊ няма Π΄Π° сС спирамС Π½Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ самата ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°.

ΠšΠ°Ρ‚ΠΎ цяло Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ TVM ΠΈ Π΅Π·ΠΈΠΊ Fift ΠΈΠΌΠ° Π΄ΠΎΠ±Ρ€Π° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½Π° докумСнтация. Π”ΠΎΠΊΠ°Ρ‚ΠΎ участвах Π² ΡΡŠΡΡ‚Π΅Π·Π°Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈ сСга, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ ΠΏΠΈΡˆΠ΅Ρ… настоящия Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€, чСсто сС ΠΎΠ±Ρ€ΡŠΡ‰Π°Ρ… към нСя.

ΠžΡΠ½ΠΎΠ²Π½ΠΈΡΡ‚ Π΅Π·ΠΈΠΊ, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ са написани ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈΡ‚Π΅ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈ Π΅ FunC. Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° няма докумСнтация Π·Π° Π½Π΅Π³ΠΎ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π·Π° Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π½Π΅Ρ‰ΠΎ, трябва Π΄Π° ΠΏΡ€ΠΎΡƒΡ‡ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈ ΠΎΡ‚ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΎΡ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΈ имплСмСнтацията Π½Π° самия Π΅Π·ΠΈΠΊ Ρ‚Π°ΠΌ, плюс ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈ ΠΎΡ‚ послСднитС Π΄Π²Π° ΡΡŠΡΡ‚Π΅Π·Π°Π½ΠΈΡ. Π’Ρ€ΡŠΠ·ΠΊΠΈ Π² края Π½Π° статията.

Π”Π° ΠΊΠ°ΠΆΠ΅ΠΌ, Ρ‡Π΅ Π²Π΅Ρ‡Π΅ смС написали ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ Π·Π° FunC, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°ΠΌΠ΅ ΠΊΠΎΠ΄Π° Π² Fift асСмблСр.

ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ΠΈΡΡ‚ ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ остава Π΄Π° бъдС ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½. Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π°, трябва Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ функция Π² Fift, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ΅ ΠΊΠΎΠ΄Π° Π½Π° интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ ΠΈ някои Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΊΠ°Ρ‚ΠΎ Π²Ρ…ΠΎΠ΄, Π° ΠΈΠ·Ρ…ΠΎΠ΄ΡŠΡ‚ Ρ‰Π΅ бъдС Ρ„Π°ΠΉΠ» с Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ .boc (ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° β€žΡ‚ΠΎΡ€Π±Π° с ΠΊΠ»Π΅Ρ‚ΠΊΠΈβ€œ) ΠΈ, Π² зависимост ΠΎΡ‚ Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Π³ΠΎ пишСм, частСн ΠΊΠ»ΡŽΡ‡ ΠΈ адрСс, ΠΊΠΎΠΉΡ‚ΠΎ сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° въз основа Π½Π° ΠΊΠΎΠ΄Π° Π½Π° интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€. Π’Π΅Ρ‡Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Ρ‚Π΅ grams Π½Π° адрСса Π½Π° ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€, ΠΊΠΎΠΉΡ‚ΠΎ всС ΠΎΡ‰Π΅ Π½Π΅ Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½.

Π—Π° ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅ Π½Π° ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ Π² TON ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ .boc Ρ„Π°ΠΉΠ»ΡŠΡ‚ Ρ‰Π΅ трябва Π΄Π° бъдС ΠΈΠ·ΠΏΡ€Π°Ρ‚Π΅Π½ Π΄ΠΎ Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π»Π΅ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ (ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π·Π° Ρ‚ΠΎΠ²Π° ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ). Но ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Ρ‚Π΅, трябва Π΄Π° ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΠΈΡ‚Π΅ grams Π½Π° гСнСрирания адрСс, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π΅Π½ случай интСлигСнтният Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ няма Π΄Π° бъдС ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½. Π‘Π»Π΅Π΄ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° взаимодСйстватС с интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€, ΠΊΠ°Ρ‚ΠΎ ΠΌΡƒ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Ρ‚Π΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΎΡ‚Π²ΡŠΠ½ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π»Π΅ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚) ΠΈΠ»ΠΈ ΠΎΡ‚Π²ΡŠΡ‚Ρ€Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΅Π΄ΠΈΠ½ ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° Π½Π° Π΄Ρ€ΡƒΠ³ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π² TON).

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΊΠ°ΠΊ сС ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π° ΠΊΠΎΠ΄ΡŠΡ‚, става ΠΏΠΎ-лСсно. ΠŸΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ Π·Π½Π°Π΅ΠΌ ΠΊΠ°ΠΊΠ²ΠΎ искамС Π΄Π° напишСм ΠΈ ΠΊΠ°ΠΊ Ρ‰Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° Π½ΠΈ. И Π΄ΠΎΠΊΠ°Ρ‚ΠΎ пишСм, Ρ‚ΡŠΡ€ΡΠΈΠΌ ΠΊΠ°ΠΊ Ρ‚ΠΎΠ²Π° Π²Π΅Ρ‡Π΅ Π΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΎ Π² ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈΡ‚Π΅ ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈ ΠΈΠ»ΠΈ Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ ΠΊΠΎΠ΄Π° Π·Π° внСдряванС Fift ΠΈ FunC Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΎΡ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΈΠ»ΠΈ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½Π°Ρ‚Π° докумСнтация.

Много чСсто Ρ‚ΡŠΡ€ΡΠΈΡ… ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΈ Π΄ΡƒΠΌΠΈ Π² Ρ‡Π°Ρ‚Π° Π½Π° Telegram, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ сС ΡΡŠΠ±Ρ€Π°Ρ…Π° всички участници Π² ΡΡŠΡΡ‚Π΅Π·Π°Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈ слуТитСли Π½Π° Telegram, ΠΈ сС случи Ρ‚Π°ΠΊΠ°, Ρ‡Π΅ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΡΡŠΡΡ‚Π΅Π·Π°Π½ΠΈΠ΅Ρ‚ΠΎ всички сС ΡΡŠΠ±Ρ€Π°Ρ…Π° Ρ‚Π°ΠΌ ΠΈ Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ…Π° Π΄Π° ΠΎΠ±ΡΡŠΠΆΠ΄Π°Ρ‚ Fift ΠΈ FunC. Π›ΠΈΠ½ΠΊ Π² края Π½Π° статията.

Π’Ρ€Π΅ΠΌΠ΅ Π΅ Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ΠΌ ΠΎΡ‚ тСория към ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°.

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π½Π° срСдата Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с TON

Направих всичко, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ бъдС описано Π² статията Π·Π° MacOS ΠΈ Π³ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ… Π΄Π²Π° ΠΏΡŠΡ‚ΠΈ Π² чист Ubuntu 18.04 LTS Π½Π° Docker.

ΠŸΡŠΡ€Π²ΠΎΡ‚ΠΎ Π½Π΅Ρ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ трябва Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅, Π΅ Π΄Π° ΠΈΠ·Ρ‚Π΅Π³Π»ΠΈΡ‚Π΅ ΠΈ инсталиратС lite-client с ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Ρ‚Π΅ заявки Π΄ΠΎ TON.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈΡ‚Π΅ Π½Π° официалния уСбсайт описват процСса Π½Π° инсталиранС доста ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΈ ясно ΠΈ пропускат някои подробности. Π’ΡƒΠΊ слСдвамС инструкциитС, ΠΊΠ°Ρ‚ΠΎ инсталирамС липсващитС зависимости ΠΏΠΎ ΠΏΡŠΡ‚Ρ. НС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Ρ… сам всСки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ Π½Π΅ инсталирах ΠΎΡ‚ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΎΡ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π° Ubuntu (Π½Π° MacOS, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ… brew).

apt -y install git 
apt -y install wget 
apt -y install cmake 
apt -y install g++ 
apt -y install zlib1g-dev 
apt -y install libssl-dev 

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ всички зависимости са инсталирани, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° инсталиратС lite-client, Fift, FunC.

ΠŸΡŠΡ€Π²ΠΎ, Π½ΠΈΠ΅ ΠΊΠ»ΠΎΠ½ΠΈΡ€Π°ΠΌΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π½Π° TON Π·Π°Π΅Π΄Π½ΠΎ с Π½Π΅Π³ΠΎΠ²ΠΈΡ‚Π΅ зависимости. Π—Π° удобство Ρ‰Π΅ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ всичко Π² ΠΏΠ°ΠΏΠΊΠ° ~/TON.

cd ~/TON
git clone https://github.com/ton-blockchain/ton.git
cd ./ton
git submodule update --init --recursive

Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Fift ΠΈ FunC.

Π‘Π΅Π³Π° смС Π³ΠΎΡ‚ΠΎΠ²ΠΈ Π΄Π° сглобим ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. ΠšΠΎΠ΄ΡŠΡ‚ Π½Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ сС ΠΊΠ»ΠΎΠ½ΠΈΡ€Π° Π² ΠΏΠ°ΠΏΠΊΠ° ~/TON/ton. Π’ ~/TON ΡΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΏΠ°ΠΏΠΊΠ° build ΠΈ ΡΡŠΠ±Π΅Ρ€Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² Π½Π΅Π³ΠΎ.

mkdir ~/TON/build 
cd ~/TON/build
cmake ../ton

Въй ΠΊΠ°Ρ‚ΠΎ Ρ‰Π΅ напишСм ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€, трябва Π½Π΅ само lite-clientΠ½ΠΎ Fift с FunC, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π½Π΅ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°ΠΌΠ΅ всичко. Π’ΠΎΠ²Π° Π½Π΅ Π΅ Π±ΡŠΡ€Π· процСс, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Ρ‡Π°ΠΊΠ°ΠΌΠ΅.

cmake --build . --target lite-client
cmake --build . --target fift
cmake --build . --target func

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΈΠ·Ρ‚Π΅Π³Π»Π΅Ρ‚Π΅ конфигурационния Ρ„Π°ΠΉΠ», ΠΊΠΎΠΉΡ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π΄Π°Π½Π½ΠΈ Π·Π° възСла, към ΠΊΠΎΠΉΡ‚ΠΎ lite-client Ρ‰Π΅ сС ΡΠ²ΡŠΡ€ΠΆΠ΅.

wget https://test.ton.org/ton-lite-client-test1.config.json

Π˜Π·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° ΠΏΡŠΡ€Π²ΠΈΡ‚Π΅ заявки към TON

Π‘Π΅Π³Π° Π΄Π° стартирамС lite-client.

cd ~/TON/build
./lite-client/lite-client -C ton-lite-client-test1.config.json

Ако компилацията Π΅ Π±ΠΈΠ»Π° ΡƒΡΠΏΠ΅ΡˆΠ½Π°, слСд стартиранСто Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π΄Π½Π΅Π²Π½ΠΈΠΊ Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° Π½Π° лСкия ΠΊΠ»ΠΈΠ΅Π½Ρ‚ към възСла.

[ 1][t 2][1582054822.963129282][lite-client.h:201][!testnode]   conn ready
[ 2][t 2][1582054823.085654020][lite-client.cpp:277][!testnode] server version is 1.1, capabilities 7
[ 3][t 2][1582054823.085725069][lite-client.cpp:286][!testnode] server time is 1582054823 (delta 0)
...

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° help ΠΈ Π²ΠΈΠΆΡ‚Π΅ ΠΊΠ°ΠΊΠ²ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ са Π½Π°Π»ΠΈΡ‡Π½ΠΈ.

help

НСка ΠΈΠ·Π±Ρ€ΠΎΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π² Ρ‚Π°Π·ΠΈ статия.

list of available commands:
last    Get last block and state info from server
sendfile <filename> Load a serialized message from <filename> and send it to server
getaccount <addr> [<block-id-ext>]  Loads the most recent state of specified account; <addr> is in [<workchain>:]<hex-or-base64-addr> format
runmethod <addr> [<block-id-ext>] <method-id> <params>...   Runs GET method <method-id> of account <addr> with specified parameters

last ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ послСдний созданный Π±Π»ΠΎΠΊ с сСрвСра. 

sendfile <filename> отправляСт Π² TON Ρ„Π°ΠΉΠ» с сообщСниСм, ΠΈΠΌΠ΅Π½Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ публикуСтся смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ ΠΈ запрсосы ΠΊ Π½Π΅ΠΌΡƒ. 

getaccount <addr> Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ адрСсом. 

runmethod <addr> [<block-id-ext>] <method-id> <params>  запускаСт get-ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ смартконтракта. 

Π‘Π΅Π³Π° смС Π³ΠΎΡ‚ΠΎΠ²ΠΈ Π΄Π° напишСм самия Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€.

ИзпълнСниС

ИдСя

ΠšΠ°ΠΊΡ‚ΠΎ писах ΠΏΠΎ-Π³ΠΎΡ€Π΅, интСлигСнтният Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€, ΠΊΠΎΠΉΡ‚ΠΎ пишСм, Π΅ лотария.

ОсвСн Ρ‚ΠΎΠ²Π°, Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ лотария, Π² която трябва Π΄Π° Π·Π°ΠΊΡƒΠΏΠΈΡ‚Π΅ Π±ΠΈΠ»Π΅Ρ‚ ΠΈ Π΄Π° ΠΈΠ·Ρ‡Π°ΠΊΠ°Ρ‚Π΅ час, Π΄Π΅Π½ ΠΈΠ»ΠΈ мСсСц, Π° ΠΌΠΈΠ³Π½ΠΎΠ²Π΅Π½Π°, Π² която потрСбитСлят ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»Ρ Π½Π° адрСса Π½Π° Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π° N Π³Ρ€Π°ΠΌΠ°, ΠΈ Π²Π΅Π΄Π½Π°Π³Π° си Π³ΠΎ Π²Ρ€ΡŠΡ‰Π° 2 * N Π³Ρ€Π°ΠΌΠ° ΠΈΠ»ΠΈ Π³ΡƒΠ±ΠΈ. Π©Π΅ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ вСроятността Π΄Π° спСчСлим ΠΎΠΊΠΎΠ»ΠΎ 40%. Ако няма Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π³Ρ€Π°ΠΌΠΎΠ²Π΅ Π·Π° ΠΏΠ»Π°Ρ‰Π°Π½Π΅, Ρ‚ΠΎΠ³Π°Π²Π° Ρ‰Π΅ считамС транзакцията Π·Π° допълванС.

ОсвСн Ρ‚ΠΎΠ²Π° Π΅ Π²Π°ΠΆΠ½ΠΎ Π·Π°Π»ΠΎΠ·ΠΈΡ‚Π΅ Π΄Π° сС Π²ΠΈΠΆΠ΄Π°Ρ‚ Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅ ΠΈ Π² ΡƒΠ΄ΠΎΠ±Π½Π° Ρ„ΠΎΡ€ΠΌΠ°, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ потрСбитСлят Π²Π΅Π΄Π½Π°Π³Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ Π΄Π°Π»ΠΈ Π΅ спСчСлил ΠΈΠ»ΠΈ Π·Π°Π³ΡƒΠ±ΠΈΠ». Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ, трябва Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ уСбсайт, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ ΠΏΠΎΠΊΠ°Π·Π²Π° Π·Π°Π»ΠΎΠ·ΠΈ ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΡ‚ TON.

ПисанС Π½Π° ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€

Π—Π° удобство ΠΏΠΎΠ΄Ρ‡Π΅Ρ€Ρ‚Π°Ρ… ΠΊΠΎΠ΄Π° Π·Π° FunC; ΠΏΠ»ΡŠΠ³ΠΈΠ½ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π½Π°ΠΌΠ΅Ρ€Π΅Π½ ΠΈ инсталиран Π² Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅Ρ‚ΠΎ Π½Π° Visual Studio Code; Π°ΠΊΠΎ извСднъТ искатС Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ Π½Π΅Ρ‰ΠΎ, Π½Π°ΠΏΡ€Π°Π²ΠΈΡ… плъгина ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎ Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½. ОсвСн Ρ‚ΠΎΠ²Π° някой ΠΏΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° Π΅ Π½Π°ΠΏΡ€Π°Π²ΠΈΠ» плъгин Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с Fift, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Π΄Π° Π³ΠΎ инсталиратС ΠΈ Π΄Π° Π³ΠΎ Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ във VSC.

НСка Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ създадСм Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Ρ‰Π΅ Π°Π½Π³Π°ΠΆΠΈΡ€Π°ΠΌΠ΅ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΈΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ.

Π—Π° Π΄Π° улСсним ΠΆΠΈΠ²ΠΎΡ‚Π° си, Ρ‰Π΅ напишСм ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ ΠΈ Ρ‰Π΅ Π³ΠΎ тСствамС Π»ΠΎΠΊΠ°Π»Π½ΠΎ, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ бъдС Π³ΠΎΡ‚ΠΎΠ². Π•Π΄Π²Π° слСд Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Π³ΠΎ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°ΠΌΠ΅ Π² ВОН.

Π˜Π½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈΡΡ‚ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ ΠΈΠΌΠ° Π΄Π²Π° външни ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈ. ΠΏΡŠΡ€Π²ΠΎ, recv_external() Ρ‚Π°Π·ΠΈ функция сС изпълнява, ΠΊΠΎΠ³Π°Ρ‚ΠΎ исканС към Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π° ΠΈΠ΄Π²Π° ΠΎΡ‚ външния свят, тоСст Π½Π΅ ΠΎΡ‚ TON, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π½ΠΈΠ΅ сами Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°ΠΌΠ΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΈ Π³ΠΎ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°ΠΌΠ΅ Ρ‡Ρ€Π΅Π· lite-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π’Ρ‚ΠΎΡ€ΠΎ, recv_internal() Ρ‚ΠΎΠ²Π° Π΅, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° самия TON всСки Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ сС отнася Π΄ΠΎ нашия. И Π² Π΄Π²Π°Ρ‚Π° случая ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ към функцията.

НСка Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ с прост ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ, Π°ΠΊΠΎ бъдС ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½, Π½ΠΎ Π² Π½Π΅Π³ΠΎ няма Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΎ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅.

() recv_internal(slice in_msg) impure {
    ;; TODO: implementation 
}

() recv_external(slice in_msg) impure {
    ;; TODO: implementation  
}

Π’ΡƒΠΊ трябва Π΄Π° обясним ΠΊΠ°ΠΊΠ²ΠΎ прСдставлява slice. Всички Π΄Π°Π½Π½ΠΈ, ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½ΠΈ Π² TON Blockchain, са колСкция TVM cell ΠΈΠ»ΠΈ просто cell, Π² Ρ‚Π°ΠΊΠ°Π²Π° ΠΊΠ»Π΅Ρ‚ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚Π΅ Π΄ΠΎ 1023 Π±ΠΈΡ‚Π° Π΄Π°Π½Π½ΠΈ ΠΈ Π΄ΠΎ 4 Π²Ρ€ΡŠΠ·ΠΊΠΈ към Π΄Ρ€ΡƒΠ³ΠΈ ΠΊΠ»Π΅Ρ‚ΠΊΠΈ.

TVM cell slice ΠΈΠ»ΠΈ slice Ρ‚ΠΎΠ²Π° Π΅ част ΠΎΡ‚ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈΡ cell сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅, Ρ‰Π΅ станС ясно ΠΏΠΎ-късно. ΠžΡΠ½ΠΎΠ²Π½ΠΎΡ‚ΠΎ Π·Π° нас Π΅, Ρ‡Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° сС трансфСрирамС slice ΠΈ Π² зависимост ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π² recv_external() ΠΈΠ»ΠΈ recv_internal().

impure β€” ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π° Π΄ΡƒΠΌΠ°, която ΠΏΠΎΠΊΠ°Π·Π²Π°, Ρ‡Π΅ функцията промСня Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π·Π° ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€.

НСка Π·Π°ΠΏΠ°Π·ΠΈΠΌ ΠΊΠΎΠ΄Π° Π½Π° Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π° lottery-code.fc ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°ΠΉΡ‚Π΅.

~/TON/build/crypto/func -APSR -o lottery-compiled.fif ~/TON/ton/crypto/smartcont/stdlib.fc ./lottery-code.fc 

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ„Π»Π°Π³ΠΎΠ²Π΅Ρ‚Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π²ΠΈΠ΄ΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°

~/TON/build/crypto/func -help

ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Ρ…ΠΌΠ΅ асСмблСрния ΠΊΠΎΠ΄ Π½Π° Fift lottery-compiled.fif:

// lottery-compiled.fif

"Asm.fif" include
// automatically generated from `/Users/rajymbekkapisev/TON/ton/crypto/smartcont/stdlib.fc` `./lottery-code.fc` 
PROGRAM{
  DECLPROC recv_internal
  DECLPROC recv_external
  recv_internal PROC:<{
    //  in_msg
    DROP    // 
  }>
  recv_external PROC:<{
    //  in_msg
    DROP    // 
  }>
}END>c

МоТС Π΄Π° сС стартира Π»ΠΎΠΊΠ°Π»Π½ΠΎ, Π·Π° Ρ‚ΠΎΠ²Π° Ρ‰Π΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²ΠΈΠΌ срСдата.

Π˜ΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ ΠΏΡŠΡ€Π²ΠΈΡΡ‚ Ρ€Π΅Π΄ сС ΡΠ²ΡŠΡ€Π·Π²Π° Asm.fif, Ρ‚ΠΎΠ²Π° Π΅ ΠΊΠΎΠ΄, написан Π½Π° Fift Π·Π° асСмблСра Fift.

Въй ΠΊΠ°Ρ‚ΠΎ искамС Π΄Π° стартирамС ΠΈ тСствамС интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ Π»ΠΎΠΊΠ°Π»Π½ΠΎ, Ρ‰Π΅ създадСм Ρ„Π°ΠΉΠ» lottery-test-suite.fif ΠΈ ΠΊΠΎΠΏΠΈΡ€Π°ΠΉΡ‚Π΅ компилирания ΠΊΠΎΠ΄ Ρ‚Π°ΠΌ, ΠΊΠ°Ρ‚ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ послСдния Ρ€Π΅Π΄ Π² Π½Π΅Π³ΠΎ, ΠΊΠΎΠΉΡ‚ΠΎ записва ΠΊΠΎΠ΄Π° Π½Π° интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ Π² константа codeΠ·Π° Π΄Π° Π³ΠΎ ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΠΈΡ‚Π΅ Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π°Ρ‚Π° машина:

"TonUtil.fif" include
"Asm.fif" include

PROGRAM{
  DECLPROC recv_internal
  DECLPROC recv_external
  recv_internal PROC:<{
    //  in_msg
    DROP    // 
  }>
  recv_external PROC:<{
    //  in_msg
    DROP    // 
  }>
}END>s constant code

Π”ΠΎΡ‚ΡƒΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ясно, сСга Π½Π΅ΠΊΠ° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ към ΡΡŠΡ‰ΠΈΡ Ρ„Π°ΠΉΠ» ΠΊΠΎΠ΄Π°, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π·Π° стартиранС Π½Π° TVM.

0 tuple 0x076ef1ea , // magic
0 , 0 , // actions msg_sents
1570998536 , // unix_time
1 , 1 , 3 , // block_lt, trans_lt, rand_seed
0 tuple 100000000000000 , dictnew , , // remaining balance
0 , dictnew , // contract_address, global_config
1 tuple // wrap to another tuple
constant c7

0 constant recv_internal // to run recv_internal() 
-1 constant recv_external // to invoke recv_external()

Π’ c7 записвамС контСкста, Ρ‚.Π΅. Π΄Π°Π½Π½ΠΈΡ‚Π΅, с ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ сС стартира TVM (ΠΈΠ»ΠΈ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°). ΠžΡ‰Π΅ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΡΡŠΡΡ‚Π΅Π·Π°Π½ΠΈΠ΅Ρ‚ΠΎ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ ΠΏΠΎΠΊΠ°Π·Π° ΠΊΠ°ΠΊ сС създава c7 ΠΈ ΠΊΠΎΠΏΠΈΡ€Π°Ρ…. Π’ Ρ‚Π°Π·ΠΈ статия ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°Π»ΠΎΠΆΠΈ Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠΌ rand_seed Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΎ число зависи ΠΎΡ‚ Π½Π΅Π³ΠΎ ΠΈ Π°ΠΊΠΎ Π½Π΅ сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, ΡΡŠΡ‰ΠΎΡ‚ΠΎ число Ρ‰Π΅ сС Π²Ρ€ΡŠΡ‰Π° всСки ΠΏΡŠΡ‚.

recv_internal ΠΈ recv_external константи със стойности 0 ΠΈ -1 Ρ‰Π΅ отговарят Π·Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€.

Π‘Π΅Π³Π° смС Π³ΠΎΡ‚ΠΎΠ²ΠΈ Π΄Π° създадСм ΠΏΡŠΡ€Π²ΠΈΡ тСст Π·Π° нашия ΠΏΡ€Π°Π·Π΅Π½ ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€. Π—Π° ΠΏΠΎ-голяма яснота засСга Ρ‰Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ всички тСстовС към Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ΠΈ Ρ„Π°ΠΉΠ» lottery-test-suite.fif.

НСка създадСм ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° storage ΠΈ Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΡ€Π°Π·Π½ΠΎ Π² Π½Π΅Π³ΠΎ cell, Ρ‚ΠΎΠ²Π° Ρ‰Π΅ бъдС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π·Π° ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈ.

message Π’ΠΎΠ²Π° Π΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ ΠΏΡ€Π΅Π΄Π°Π΄Π΅ΠΌ Π½Π° интСлигСнтния ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ ΠΎΡ‚Π²ΡŠΠ½. ЗасСга ΡΡŠΡ‰ΠΎ Ρ‰Π΅ Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΠΏΡ€Π°Π·Π΅Π½.

variable storage 
<b b> storage ! 

variable message 
<b b> message ! 

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ смС ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²ΠΈΠ»ΠΈ константитС ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅, стартирамС TVM с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° runvmctx ΠΈ ΠΏΡ€Π΅Π΄Π°ΠΉΡ‚Π΅ ΡΡŠΠ·Π΄Π°Π΄Π΅Π½ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π½Π° Π²Ρ…ΠΎΠ΄Π°.

message @ 
recv_external 
code 
storage @ 
c7 
runvmctx 

Накрая Ρ‰Π΅ успССм ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΠ·ΠΈ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π΅Π½ ΠΊΠΎΠ΄ Π·Π° Fift.

Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° стартирамС получСния ΠΊΠΎΠ΄.

export FIFTPATH=~/TON/ton/crypto/fift/lib // выполняСм ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· для удобства 
~/TON/build/crypto/fift -s lottery-test-suite.fif 

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° трябва Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ Π±Π΅Π· Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΈ Π² ΠΈΠ·Ρ…ΠΎΠ΄Π° Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΠΌ Π΄Π½Π΅Π²Π½ΠΈΠΊΠ° Π·Π° изпълнСниС:

execute SETCP 0
execute DICTPUSHCONST 19 (xC_,1)
execute DICTIGETJMPZ
execute DROP
execute implicit RET
[ 3][t 0][1582281699.325381279][vm.cpp:479]     steps: 5 gas: used=304, max=9223372036854775807, limit=9223372036854775807, credit=0

Π‘Ρ‚Ρ€Π°Ρ…ΠΎΡ‚Π½ΠΎ, написахмС ΠΏΡŠΡ€Π²Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰Π° вСрсия Π½Π° интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€.

Π‘Π΅Π³Π° трябва Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ функционалност. ΠŸΡŠΡ€Π²ΠΎ Π½Π΅ΠΊΠ° сС справим със ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π°, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ΄Π²Π°Ρ‚ ΠΎΡ‚ външния свят Π΄ΠΎ recv_external()

Бамият Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈΠ·Π±ΠΈΡ€Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΊΠΎΠΉΡ‚ΠΎ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ΅.

Но обикновСно

  • ΠΏΡŠΡ€Π²ΠΎ, искамС Π΄Π° Π·Π°Ρ‰ΠΈΡ‚ΠΈΠΌ нашия Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ ΠΎΡ‚ външния свят ΠΈ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Ρ‚Π°ΠΊΠ°, Ρ‡Π΅ само ΡΠΎΠ±ΡΡ‚Π²Π΅Π½ΠΈΠΊΡŠΡ‚ Π½Π° Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° външни ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π΄ΠΎ Π½Π΅Π³ΠΎ.
  • Π²Ρ‚ΠΎΡ€ΠΎ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΠΌ Π²Π°Π»ΠΈΠ΄Π½ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π΄ΠΎ TON, искамС Ρ‚ΠΎΠ²Π° Π΄Π° сС случи Ρ‚ΠΎΡ‡Π½ΠΎ вСднъТ ΠΈ ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΠΌ ΡΡŠΡ‰ΠΎΡ‚ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΡ‚Π½ΠΎΠ²ΠΎ, интСлигСнтният Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ Π³ΠΎ ΠΎΡ‚Ρ…Π²ΡŠΡ€Π»Ρ.

Π’Π°ΠΊΠ° Ρ‡Π΅ ΠΏΠΎΡ‡Ρ‚ΠΈ всСки Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ Ρ€Π΅ΡˆΠ°Π²Π° Ρ‚Π΅Π·ΠΈ Π΄Π²Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π½Π°ΡˆΠΈΡΡ‚ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ ΠΏΡ€ΠΈΠ΅ΠΌΠ° външни ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ, трябва Π΄Π° сС ΠΏΠΎΠ³Ρ€ΠΈΠΆΠΈΠΌ ΠΈ Π·Π° Ρ‚ΠΎΠ²Π°.

Π©Π΅ Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Π² ΠΎΠ±Ρ€Π°Ρ‚Π΅Π½ Ρ€Π΅Π΄. ΠŸΡŠΡ€Π²ΠΎ, Π½Π΅ΠΊΠ° Ρ€Π΅ΡˆΠΈΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠ΅Ρ‚ΠΎ, Π°ΠΊΠΎ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΡŠΡ‚ Π²Π΅Ρ‡Π΅ Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Ρ‚Π°ΠΊΠΎΠ²Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΈ Π³ΠΎ Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΈΠ», няма Π΄Π° Π³ΠΎ изпълни Π²Ρ‚ΠΎΡ€ΠΈ ΠΏΡŠΡ‚. И Ρ‚ΠΎΠ³Π°Π²Π° Ρ‰Π΅ Ρ€Π΅ΡˆΠΈΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ само ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΊΡ€ΡŠΠ³ ΠΎΡ‚ Ρ…ΠΎΡ€Π° Π΄Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Ρ‚ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π΄ΠΎ интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€.

Има Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π½Π°Ρ‡ΠΈΠ½ΠΈ Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с Π΄ΡƒΠ±Π»ΠΈΡ€Π°Ρ‰ΠΈ сС ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ. Π•Ρ‚ΠΎ ΠΊΠ°ΠΊ Ρ‰Π΅ Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ. Π’ интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ брояча Π½Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡ‚Π΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ с ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½Π° стойност 0. Π’ΡŠΠ² всяко ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ към интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ Ρ‰Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° стойност Π½Π° брояча. Ако стойността Π½Π° брояча Π² ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π΅ съвпада със стойността Π² интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€, Ρ‚ΠΎΠ³Π°Π²Π° Π½ΠΈΠ΅ Π½Π΅ я ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°ΠΌΠ΅; Π°ΠΊΠΎ Π΅ Ρ‚Π°ΠΊΠ°, Ρ‚ΠΎΠ³Π°Π²Π° я ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°ΠΌΠ΅ ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°ΠΌΠ΅ брояча Π² интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ с 1.

Π”Π° сС β€‹β€‹Π²ΡŠΡ€Π½Π΅ΠΌ към lottery-test-suite.fif ΠΈ Π΄ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ Π²Ρ‚ΠΎΡ€ΠΈ тСст към Π½Π΅Π³ΠΎ. Ако ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΠΌ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π΅Π½ Π½ΠΎΠΌΠ΅Ρ€, ΠΊΠΎΠ΄ΡŠΡ‚ трябва Π΄Π° ΠΈΠ·Π²Π΅Π΄Π΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. НапримСр, оставСтС Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π·Π° Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π° Π΄Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ 166 ΠΈ Π½ΠΈΠ΅ Ρ‰Π΅ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΠΌ 165.

<b 166 32 u, b> storage !
<b 165 32 u, b> message !

message @ 
recv_external 
code 
storage @ 
c7 
runvmctx

drop 
exit_code ! 
."Exit code " exit_code @ . cr 
exit_code @ 33 - abort"Test #2 Not passed"

Π”Π° стартирамС.

 ~/TON/build/crypto/fift -s lottery-test-suite.fif 

И Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Π΅ Ρ‚Π΅ΡΡ‚ΡŠΡ‚ Π΅ изпълнСн с Π³Ρ€Π΅ΡˆΠΊΠ°.

[ 1][t 0][1582283084.210902214][words.cpp:3046] lottery-test-suite.fif:67: abort": Test #2 Not passed
[ 1][t 0][1582283084.210941076][fift-main.cpp:196]      Error interpreting file `lottery-test-suite.fif`: error interpreting included file `lottery-test-suite.fif` : lottery-test-suite.fif:67: abort": Test #2 Not passed

На Ρ‚ΠΎΠ·ΠΈ Π΅Ρ‚Π°ΠΏ lottery-test-suite.fif трябва Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎ ссылкС.

Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° брояча към интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ lottery-code.fc.

() recv_internal(slice in_msg) impure {
    ;; TODO: implementation 
}

() recv_external(slice in_msg) impure {
    if (slice_empty?(in_msg)) {
        return (); 
    }
    int msg_seqno = in_msg~load_uint(32);
    var ds = begin_parse(get_data());
    int stored_seqno = ds~load_uint(32);
    throw_unless(33, msg_seqno == stored_seqno);
}

Π’ slice in_msg Π΅ посланиСто, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°ΠΌΠ΅.

ΠŸΡŠΡ€Π²ΠΎΡ‚ΠΎ Π½Π΅Ρ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠΌ, Π΅ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Π΄Π°Π»ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π΄Π°Π½Π½ΠΈ, Π°ΠΊΠΎ Π½Π΅, просто ΠΈΠ·Π»ΠΈΠ·Π°ΠΌΠ΅.

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ. in_msg~load_uint(32) Π·Π°Ρ€Π΅ΠΆΠ΄Π° числото 165, 32 Π±ΠΈΡ‚Π° unsigned int ΠΎΡ‚ ΠΏΡ€Π΅Π΄Π°Π΄Π΅Π½ΠΎΡ‚ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅.

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Π·Π°Ρ€Π΅ΠΆΠ΄Π°ΠΌΠ΅ 32 Π±ΠΈΡ‚Π° ΠΎΡ‚ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π½Π° интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ²Π°ΠΌΠ΅ Π΄Π°Π»ΠΈ Π·Π°Ρ€Π΅Π΄Π΅Π½ΠΎΡ‚ΠΎ число съвпада с ΠΏΠΎΠ΄Π°Π΄Π΅Π½ΠΎΡ‚ΠΎ; Π°ΠΊΠΎ Π½Π΅, Ρ…Π²ΡŠΡ€Π»ΡΠΌΠ΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Π’ нашия случай, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°ΠΌΠ΅ нСсъвпадСниС, трябва Π΄Π° сС Ρ…Π²ΡŠΡ€Π»ΠΈ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°ΠΌΠ΅.

~/TON/build/crypto/func -APSR -o lottery-compiled.fif ~/TON/ton/crypto/smartcont/stdlib.fc ./lottery-code.fc 

ΠšΠΎΠΏΠΈΡ€Π°ΠΉΡ‚Π΅ получСния ΠΊΠΎΠ΄ Π² lottery-test-suite.fif, ΠΊΠ°Ρ‚ΠΎ Π½Π΅ забравятС Π΄Π° Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ послСдния Ρ€Π΅Π΄.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ²Π°ΠΌΠ΅ Π΄Π°Π»ΠΈ Ρ‚Π΅ΡΡ‚ΡŠΡ‚ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°:

~/TON/build/crypto/fift -s lottery-test-suite.fif

Π’ΡƒΠΊ ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ‚ с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ.

Π˜ΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ Π΅ Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎ постоянно Π΄Π° ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚Π΅ компилирания ΠΊΠΎΠ΄ Π½Π° ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ във Ρ„Π°ΠΉΠ» с тСстовС, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Ρ‰Π΅ напишСм скрипт, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ запишС ΠΊΠΎΠ΄Π° Π² константа Π·Π° нас, ΠΈ просто Ρ‰Π΅ ΡΠ²ΡŠΡ€ΠΆΠ΅ΠΌ компилирания ΠΊΠΎΠ΄ към Π½Π°ΡˆΠΈΡ‚Π΅ тСстовС, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ "include".

Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» Π² ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° build.sh със слСдното ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅.

#!/bin/bash

~/TON/build/crypto/func -SPA -R -o lottery-compiled.fif ~/TON/ton/crypto/smartcont/stdlib.fc ./lottery-code.fc

НСка Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ изпълним.

chmod +x ./build.sh

Π‘Π΅Π³Π° просто стартирайтС нашия скрипт, Π·Π° Π΄Π° ΡΡŠΡΡ‚Π°Π²ΠΈΡ‚Π΅ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π°. Но освСн Ρ‚ΠΎΠ²Π°, трябва Π΄Π° Π³ΠΎ запишСм Π² константа code. Π’Π°ΠΊΠ° Ρ‡Π΅ Ρ‰Π΅ създадСм Π½ΠΎΠ² Ρ„Π°ΠΉΠ» lotter-compiled-for-test.fif, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ Π²ΠΊΠ»ΡŽΡ‡ΠΈΠΌ във Ρ„Π°ΠΉΠ»Π° lottery-test-suite.fif.

НСка Π΄ΠΎΠ±Π°Π²ΠΈΠΌ skirpt ΠΊΠΎΠ΄ към sh, ΠΊΠΎΠΉΡ‚ΠΎ просто Ρ‰Π΅ Π΄ΡƒΠ±Π»ΠΈΡ€Π° компилирания Ρ„Π°ΠΉΠ» lotter-compiled-for-test.fif ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Ρ‚Π΅ послСдния Ρ€Π΅Π΄ Π² Π½Π΅Π³ΠΎ.

# copy and change for test 
cp lottery-compiled.fif lottery-compiled-for-test.fif
sed '$d' lottery-compiled-for-test.fif > test.fif
rm lottery-compiled-for-test.fif
mv test.fif lottery-compiled-for-test.fif
echo -n "}END>s constant code" >> lottery-compiled-for-test.fif

Π‘Π΅Π³Π°, Π·Π° Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, Π½Π΅ΠΊΠ° стартирамС получСния скрипт ΠΈ Ρ‰Π΅ сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Ρ„Π°ΠΉΠ» lottery-compiled-for-test.fif, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ Π²ΠΊΠ»ΡŽΡ‡ΠΈΠΌ Π² нашия lottery-test-suite.fif

Π’ lottery-test-suite.fif ΠΈΠ·Ρ‚Ρ€ΠΈΠΉΡ‚Π΅ ΠΊΠΎΠ΄Π° Π½Π° Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π° ΠΈ Π΄ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ Ρ€Π΅Π΄Π° "lottery-compiled-for-test.fif" include.

ΠŸΡ€ΠΎΠ²Π΅ΠΆΠ΄Π°ΠΌΠ΅ тСстовС, Π·Π° Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Π΄Π°Π»ΠΈ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Ρ‚.

~/TON/build/crypto/fift -s lottery-test-suite.fif

Π‘Ρ‚Ρ€Π°Ρ…ΠΎΡ‚Π½ΠΎ, сСга, Π·Π° Π΄Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ стартиранСто Π½Π° тСстовС, Π½Π΅ΠΊΠ° създадСм Ρ„Π°ΠΉΠ» test.sh, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡŠΡ€Π²ΠΎ Ρ‰Π΅ сС изпълни build.shΠΈ слСд Ρ‚ΠΎΠ²Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Ρ‚Π΅ тСстовСтС.

touch test.sh
chmod +x test.sh

ПишСм Π²ΡŠΡ‚Ρ€Π΅

./build.sh 

echo "nCompilation completedn"

export FIFTPATH=~/TON/ton/crypto/fift/lib
~/TON/build/crypto/fift -s lottery-test-suite.fif

Π₯Π°ΠΉΠ΄Π΅ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ test.sh ΠΈ Π³ΠΎ стартирайтС, Π·Π° Π΄Π° сС ΡƒΠ²Π΅Ρ€ΠΈΡ‚Π΅, Ρ‡Π΅ тСстовСтС работят.

chmod +x ./test.sh
./test.sh

НиС провСрявамС Π΄Π°Π»ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΡŠΡ‚ Π΅ ΡΡŠΡΡ‚Π°Π²Π΅Π½ ΠΈ тСстовСтС са изпълнСни.

Π‘Ρ‚Ρ€Π°Ρ…ΠΎΡ‚Π½ΠΎ, сСга ΠΏΡ€ΠΈ стартиранС test.sh ВСстовСтС Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΡΡŠΠ±Ρ€Π°Π½ΠΈ ΠΈ стартирани Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ. Π•Ρ‚ΠΎ Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° към Π°Π½Π³Π°ΠΆΠΈΡ€Π°Ρ‚.

Π”ΠΎΠ±Ρ€Π΅, ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΠΌ, Π½Π΅ΠΊΠ° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΠΎΡ‰Π΅ Π½Π΅Ρ‰ΠΎ Π·Π° удобство.

НСка създадСм ΠΏΠ°ΠΏΠΊΠ° build ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Ρ‰Π΅ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°ΠΌΠ΅ копирания Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ ΠΈ нСговия ΠΊΠ»ΠΎΠ½ΠΈΠ½Π³, записан Π² константа lottery-compiled.fif, lottery-compiled-for-test.fif. НСка създадСм ΠΈ ΠΏΠ°ΠΏΠΊΠ° test къдС Ρ‰Π΅ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° тСстовият Ρ„Π°ΠΉΠ»? lottery-test-suite.fif ΠΈ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‰ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅. Π’Ρ€ΡŠΠ·ΠΊΠ° към ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ.

НСка ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΠΌ Π΄Π° Ρ€Π°Π·Π²ΠΈΠ²Π°ΠΌΠ΅ интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€.

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° трябва Π΄Π° ΠΈΠΌΠ° тСст, ΠΊΠΎΠΉΡ‚ΠΎ провСрява Π΄Π°Π»ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ ΠΈ Π±Ρ€ΠΎΡΡ‡ΡŠΡ‚ сС Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π° Π² ΠΌΠ°Π³Π°Π·ΠΈΠ½Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΠΌ правилния Π½ΠΎΠΌΠ΅Ρ€. Но Ρ‰Π΅ Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΠΏΠΎ-късно.

Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° помислим ΠΊΠ°ΠΊΠ²Π° структура Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΠΈ ΠΊΠ°ΠΊΠ²ΠΈ Π΄Π°Π½Π½ΠΈ трябва Π΄Π° сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ Π² интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€.

Π©Π΅ опиша всичко, ΠΊΠΎΠ΅Ρ‚ΠΎ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°ΠΌΠ΅.

`seqno` 32-Ρ… Π±ΠΈΡ‚Π½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число счСтчик. 

`pubkey` 256-Ρ‚ΠΈ Π±ΠΈΡ‚Π½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ, ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ подпись ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ·Π²Π½Π΅ сообщСния, ΠΎ Ρ‡Π΅ΠΌ Π½ΠΈΠΆΠ΅. 

`order_seqno` 32-Ρ… Π±ΠΈΡ‚Π½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число Ρ…Ρ€Π°Π½ΠΈΡ‚ счСтчик количСства ставок. 

`number_of_wins` 32-Ρ… Π±ΠΈΡ‚Π½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число Ρ…Ρ€Π°Π½ΠΈΡ‚  количСство ΠΏΠΎΠ±Π΅Π΄. 

`incoming_amount` Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Gram (ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 4 Π±ΠΈΡ‚Π° ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Π΄Π»ΠΈΠ½Ρƒ), Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΎΠ±Ρ‰Π΅Π΅ количСство Π³Ρ€Π°ΠΌΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€Ρ‚Π°ΠΊΡ‚. 

`outgoing_amount` ΠΎΠ±Ρ‰Π΅Π΅ количСство Π³Ρ€Π°ΠΌΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±Ρ‹Π»ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ побСдитСлям. 

`owner_wc` Π½ΠΎΠΌΠ΅Ρ€ Π²ΠΎΡ€ΠΊΡ‡Π΅ΠΉΠ½Π°, 32-Ρ… Π±ΠΈΡ‚Π½ΠΎΠ΅ (Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… мСстах написано, Ρ‡Ρ‚ΠΎ 8-ΠΌΠΈ Π±ΠΈΡ‚Π½ΠΎΠ΅) Ρ†Π΅Π»ΠΎΠ΅ число. Π’ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ всСго Π΄Π²Π° -1 ΠΈ 0. 

`owner_account_id` 256-Ρ‚ΠΈ Π±ΠΈΡ‚Π½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число, адрСс ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Π²ΠΎΡ€ΠΊΡ‡Π΅ΠΉΠ½Π΅. 

`orders` пСрСмСнная Ρ‚ΠΈΠΏΠ° ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, Ρ…Ρ€Π°Π½ΠΈΡ‚ послСдниС Π΄Π²Π°Π΄Ρ†Π°Ρ‚ΡŒ ставок. 

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° трябва Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π”Π° сС ​​обадим Π½Π° ΠΏΡŠΡ€Π²ΠΈΡ pack_state(), ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈΡ€Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π·Π° послСдващо Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π½Π° интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€. Π”Π° ΠΈΠ·Π²ΠΈΠΊΠ°ΠΌΠ΅ Π²Ρ‚ΠΎΡ€ΠΎΡ‚ΠΎ unpack_state() Ρ‰Π΅ Ρ‡Π΅Ρ‚Π΅ ΠΈ Π²Ρ€ΡŠΡ‰Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ.

_ pack_state(int seqno, int pubkey, int order_seqno, int number_of_wins, int incoming_amount, int outgoing_amount, int owner_wc, int owner_account_id, cell orders) inline_ref {
    return begin_cell()
            .store_uint(seqno, 32)
            .store_uint(pubkey, 256)
            .store_uint(order_seqno, 32)
            .store_uint(number_of_wins, 32)
            .store_grams(incoming_amount)
            .store_grams(outgoing_amount)
            .store_int(owner_wc, 32)
            .store_uint(owner_account_id, 256)
            .store_dict(orders)
            .end_cell();
}

_ unpack_state() inline_ref {
    var ds = begin_parse(get_data());
    var unpacked = (ds~load_uint(32), ds~load_uint(256), ds~load_uint(32), ds~load_uint(32), ds~load_grams(), ds~load_grams(), ds~load_int(32), ds~load_uint(256), ds~load_dict());
    ds.end_parse();
    return unpacked;
}

ДобавямС Ρ‚Π΅Π·ΠΈ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€. Π©Π΅ сС ΠΏΠΎΠ»ΡƒΡ‡ΠΈ ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΠ·ΠΈ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π΅Π½ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚.

Π—Π° Π΄Π° Π·Π°ΠΏΠ°Π·ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ, Ρ‰Π΅ трябва Π΄Π° ΠΈΠ·Π²ΠΈΠΊΠ°Ρ‚Π΅ Π²Π³Ρ€Π°Π΄Π΅Π½Π°Ρ‚Π° функция set_data() ΠΈ Ρ‰Π΅ записва Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ pack_state() Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π·Π° ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈ.

cell packed_state = pack_state(arg_1, .., arg_n); 
set_data(packed_state);

Π‘Π΅Π³Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π°ΠΌΠ΅ с ΡƒΠ΄ΠΎΠ±Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° писанС ΠΈ Ρ‡Π΅Ρ‚Π΅Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΠΌ Π½Π°ΠΏΡ€Π΅Π΄.

Врябва Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Π΄Π°Π»ΠΈ входящото ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΡ‚Π²ΡŠΠ½ Π΅ подписано ΠΎΡ‚ собствСника Π½Π° Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π° (ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π», ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠΌΠ° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ частния ΠΊΠ»ΡŽΡ‡).

ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°ΠΌΠ΅ ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π³ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ Π½ΠΈ Π΄Π°Π½Π½ΠΈ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ бъдС Π·Π°ΠΏΠ°Π·Π΅Π½ΠΎ Π·Π° Π±ΡŠΠ΄Π΅Ρ‰Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°. Π©Π΅ запишСм публичния ΠΊΠ»ΡŽΡ‡ Ρ‚Π°ΠΌ, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Π΄Π°Π»ΠΈ входящото ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π΅ подписано със ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ частСн ΠΊΠ»ΡŽΡ‡.

ΠŸΡ€Π΅Π΄ΠΈ Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΠΌ, Π½Π΅ΠΊΠ° създадСм частСн ΠΊΠ»ΡŽΡ‡ ΠΈ Π΄Π° Π³ΠΎ запишСм test/keys/owner.pk. Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π°, Π½Π΅ΠΊΠ° стартирамС Fift Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ ΠΈ изпълним Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ.

`newkeypair` гСнСрация ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΈ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° ΠΈ запись ΠΈΡ… Π² стСк. 

`drop` удалСния ΠΈΠ· стСка Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ элСмСнта (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡)  

`.s` просто ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ Π»Π΅ΠΆΠΈΡ‚ Π² стСкС Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ 

`"owner.pk" B>file` запись ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° Π² Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ `owner.pk`. 

`bye` Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Fift. 

НСка създадСм ΠΏΠ°ΠΏΠΊΠ° keys Π²ΡŠΡ‚Ρ€Π΅ Π² ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° test ΠΈ Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ личния ΠΊΠ»ΡŽΡ‡ Ρ‚Π°ΠΌ.

mkdir test/keys
cd test/keys
~/TON/build/crypto/fift -i 
newkeypair
 ok
.s 
BYTES:128DB222CEB6CF5722021C3F21D4DF391CE6D5F70C874097E28D06FCE9FD6917 BYTES:DD0A81AAF5C07AAAA0C7772BB274E494E93BB0123AA1B29ECE7D42AE45184128 
drop 
 ok
"owner.pk" B>file
 ok
bye

Π’ΠΈΠΆΠ΄Π°ΠΌΠ΅ Ρ„Π°ΠΉΠ» Π² Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° ΠΏΠ°ΠΏΠΊΠ° owner.pk.

ΠŸΡ€Π΅ΠΌΠ°Ρ…Π²Π°ΠΌΠ΅ публичния ΠΊΠ»ΡŽΡ‡ ΠΎΡ‚ стСка ΠΈ ΠΏΡ€ΠΈ Π½ΡƒΠΆΠ΄Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π³ΠΎ Π²Π·Π΅ΠΌΠ΅ΠΌ ΠΎΡ‚ частния.

Π‘Π΅Π³Π° трябва Π΄Π° напишСм ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° подписа. Π”Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ с тСста. ΠŸΡŠΡ€Π²ΠΎ Ρ‡Π΅Ρ‚Π΅ΠΌ частния ΠΊΠ»ΡŽΡ‡ ΠΎΡ‚ Ρ„Π°ΠΉΠ»Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° функцията file>B ΠΈ Π³ΠΎ Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π² ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° owner_private_key, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ функцията priv>pub ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€Π°ΠΉΡ‚Π΅ частния ΠΊΠ»ΡŽΡ‡ Π² ΠΏΡƒΠ±Π»ΠΈΡ‡Π΅Π½ ΠΊΠ»ΡŽΡ‡ ΠΈ Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π° owner_public_key.

variable owner_private_key
variable owner_public_key 

"./keys/owner.pk" file>B owner_private_key !
owner_private_key @ priv>pub owner_public_key !

Π©Π΅ Π½ΠΈ трябват ΠΈ Π΄Π²Π°Ρ‚Π° ΠΊΠ»ΡŽΡ‡Π°.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π½Π° интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ Π΄Π°Π½Π½ΠΈ Π² ΡΡŠΡ‰Π°Ρ‚Π° послСдоватСлност ΠΊΠ°Ρ‚ΠΎ във функцията pack_state()ΠΈ Π³ΠΎ Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π² ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° storage.

variable owner_private_key
variable owner_public_key 
variable orders
variable owner_wc
variable owner_account_id

"./keys/owner.pk" file>B owner_private_key !
owner_private_key @ priv>pub owner_public_key !
dictnew orders !
0 owner_wc !
0 owner_account_id !

<b 0 32 u, owner_public_key @ B, 0 32 u, 0 32 u, 0 Gram, 0 Gram, owner_wc @ 32 i, owner_account_id @ 256 u,  orders @ dict, b> storage !

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Ρ‰Π΅ ΡΡŠΡΡ‚Π°Π²ΠΈΠΌ подписано ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ Ρ‰Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° само подписа ΠΈ стойността Π½Π° брояча.

ΠŸΡŠΡ€Π²ΠΎ създавамС Π΄Π°Π½Π½ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ искамС Π΄Π° ΠΏΡ€Π΅Π΄Π°Π΄Π΅ΠΌ, слСд Ρ‚ΠΎΠ²Π° Π³ΠΈ подписвамС с частСн ΠΊΠ»ΡŽΡ‡ ΠΈ накрая Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°ΠΌΠ΅ подписано ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅.

variable message_to_sign
variable message_to_send
variable signature
<b 0 32 u, b> message_to_sign !
message_to_sign @ hashu owner_private_key @ ed25519_sign_uint signature !
<b signature @ B, 0 32 u, b> <s  message_to_send !  

Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ²Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΠΌ към интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€, сС записва Π² ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° message_to_send, относно Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ hashu, ed25519_sign_uint моТСш Π΄Π° Ρ‡Π΅Ρ‚Π΅Ρˆ Π² докумСнтацията Π½Π° Fift.

И Π·Π° ΠΏΡ€ΠΎΠ²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° тСста сС ΠΎΠ±Π°ΠΆΠ΄Π°ΠΌΠ΅ ΠΎΡ‚Π½ΠΎΠ²ΠΎ.

message_to_send @ 
recv_external 
code 
storage @
c7
runvmctx

Π•Ρ‚ΠΎ Π³ΠΎ Π€Π°ΠΉΠ»ΡŠΡ‚ с тСстовСтС трябва Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ° Π½Π° Ρ‚ΠΎΠ·ΠΈ Π΅Ρ‚Π°ΠΏ.

НСка изпълним тСста ΠΈ Ρ‚ΠΎΠΉ Ρ‰Π΅ сС ΠΏΡ€ΠΎΠ²Π°Π»ΠΈ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Ρ‰Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠΌ интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π² Ρ‚ΠΎΠ·ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΈ Π΄Π° провСрява подписа.

ΠŸΡŠΡ€Π²ΠΎ прСброявамС 512 Π±ΠΈΡ‚Π° ΠΎΡ‚ подписа Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈ Π³ΠΎ записвамС Π² ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°, слСд Ρ‚ΠΎΠ²Π° прСброявамС 32 Π±ΠΈΡ‚Π° ΠΎΡ‚ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° Π½Π° брояча.

Въй ΠΊΠ°Ρ‚ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ функция Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π½Π° смарт Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π°, Ρ‰Π΅ я ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅.

Π‘Π»Π΅Π΄Π²Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° брояча, ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»Π΅Π½ с Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ, ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° подписа. Ако Π½Π΅Ρ‰ΠΎ Π½Π΅ съвпада, Ρ‚ΠΎΠ³Π°Π²Π° Ρ…Π²ΡŠΡ€Π»ΡΠΌΠ΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ със ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ ΠΊΠΎΠ΄.

var signature = in_msg~load_bits(512);
var message = in_msg;
int msg_seqno = message~load_uint(32);
(int stored_seqno, int pubkey, int order_seqno, int number_of_wins, int incoming_amount, int outgoing_amount, int owner_wc, int owner_account_id, cell orders) = unpack_state();
throw_unless(33, msg_seqno == stored_seqno);
throw_unless(34, check_signature(slice_hash(in_msg), signature, pubkey));

Π‘ΡŠΠΎΡ‚Π²Π΅Ρ‚Π΅Π½ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ‚ Ρ‚ΡƒΠΊ.

НСка Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅ΠΌ тСстовСтС ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Π΅ вторият тСст Π΅ Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ΅Π½. ΠŸΠΎΡ€Π°Π΄ΠΈ Π΄Π²Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ няма Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π±ΠΈΡ‚ΠΎΠ²Π΅ Π² ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈ няма Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π±ΠΈΡ‚ΠΎΠ²Π΅ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΊΠΎΠ΄ΡŠΡ‚ сС срива ΠΏΡ€ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅. Врябва Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ подпис към ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°ΠΌΠ΅, ΠΈ Π΄Π° ΠΊΠΎΠΏΠΈΡ€Π°ΠΌΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ ΠΎΡ‚ послСдния тСст.

Π’ΡŠΠ² втория тСст Ρ‰Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ подпис Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΈ Ρ‰Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠΌ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π½Π° интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€. Π•Ρ‚ΠΎ Π³ΠΎ Ρ„Π°ΠΉΠ»ΡŠΡ‚ с тСстовСтС ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ° Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°.

НСка напишСм Ρ‡Π΅Ρ‚Π²ΡŠΡ€Ρ‚ΠΈ тСст, Π² ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΠΌ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅, подписано с Ρ‡ΡƒΠΆΠ΄ частСн ΠΊΠ»ΡŽΡ‡. НСка създадСм Π΄Ρ€ΡƒΠ³ частСн ΠΊΠ»ΡŽΡ‡ ΠΈ Π΄Π° Π³ΠΎ Π·Π°ΠΏΠ°Π·ΠΈΠΌ във Ρ„Π°ΠΉΠ» not-owner.pk. НиС Ρ‰Π΅ подпишСм ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ с Ρ‚ΠΎΠ·ΠΈ частСн ΠΊΠ»ΡŽΡ‡. НСка Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅ΠΌ тСстовСтС ΠΈ Π΄Π° сС ΡƒΠ²Π΅Ρ€ΠΈΠΌ, Ρ‡Π΅ всички тСстовС са ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π»ΠΈ. АнгаТирайтС сС Π² Ρ‚ΠΎΠ·ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚.

Π‘Π΅Π³Π° Π½Π°ΠΉ-накрая ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ΠΌ към внСдряванС Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€.
Π’ recv_external() Ρ‰Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ΅ΠΌ Π΄Π²Π° Π²ΠΈΠ΄Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ.

Въй ΠΊΠ°Ρ‚ΠΎ Π½Π°ΡˆΠΈΡΡ‚ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ Ρ‰Π΅ Π°ΠΊΡƒΠΌΡƒΠ»ΠΈΡ€Π° Π·Π°Π³ΡƒΠ±ΠΈΡ‚Π΅ Π½Π° ΠΈΠ³Ρ€Π°Ρ‡ΠΈΡ‚Π΅, Ρ‚Π΅Π·ΠΈ ΠΏΠ°Ρ€ΠΈ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€Π΅Π²Π΅Π΄Π΅Π½ΠΈ Π½Π° ΡΡŠΠ·Π΄Π°Ρ‚Π΅Π»Ρ Π½Π° лотарията. ΠΠ΄Ρ€Π΅ΡΡŠΡ‚ Π½Π° ΠΏΠΎΡ€Ρ‚Ρ„Π΅ΠΉΠ»Π° Π½Π° ΡΡŠΠ·Π΄Π°Ρ‚Π΅Π»Ρ Π½Π° лотарията сС записва Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ ΠΏΡ€ΠΈ ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π°.

Π—Π° всСки случай сС Π½ΡƒΠΆΠ΄Π°Π΅ΠΌ ΠΎΡ‚ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° смяна Π½Π° адрСса, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°ΠΌΠ΅ Π³Ρ€Π°ΠΌΠΎΠ²Π΅ ΠΎΡ‚ Π³ΡƒΠ±Π΅Ρ‰ΠΈΡ‚Π΅. Врябва ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°ΠΌΠ΅ Π³Ρ€Π°ΠΌΠΎΠ²Π΅ ΠΎΡ‚ лотарията Π΄ΠΎ адрСса Π½Π° собствСника.

Π”Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ с ΠΏΡŠΡ€Π²ΠΈΡ. НСка ΠΏΡŠΡ€Π²ΠΎ напишСм тСст, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈ Π΄Π°Π»ΠΈ слСд ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ интСлигСнтният Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ Π΅ Π·Π°ΠΏΠ°Π·ΠΈΠ» новия адрСс Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ. Π˜ΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ Π² ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ, освСн Π³ΠΈΡˆΠ΅Ρ‚ΠΎ ΠΈ новия адрСс, Π½ΠΈΠ΅ ΡΡŠΡ‰ΠΎ ΠΏΡ€Π΅Π΄Π°Π²Π°ΠΌΠ΅ action 7-Π±ΠΈΡ‚ΠΎΠ²ΠΎ цяло Π½Π΅ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»Π½ΠΎ число, Π² зависимост ΠΎΡ‚ Π½Π΅Π³ΠΎ Ρ‰Π΅ ΠΈΠ·Π±Π΅Ρ€Π΅ΠΌ ΠΊΠ°ΠΊ Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π² интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€.

<b 0 32 u, 1 @ 7 u, new_owner_wc @  32 i, new_owner_account_id @ 256 u, b> message_to_sign !

Π’ тСста ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΊΠ°ΠΊ сС дСсСриализира ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈ storage във Π€ΠΈΡ„Ρ‚. ДСсСриализацията Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π΅ описана Π² докумСнтацията Π½Π° Fift.

Π’Ρ€ΡŠΠ·ΠΊΠ° Π·Π° Π°Π½Π³Π°ΠΆΠΈΡ€Π°Π½Π΅ с Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΎ тСсто.

НСка Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅ΠΌ тСста ΠΈ Π΄Π° сС ΡƒΠ²Π΅Ρ€ΠΈΠΌ, Ρ‡Π΅ Π΅ Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ΅Π½. Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π»ΠΎΠ³ΠΈΠΊΠ° Π·Π° промяна Π½Π° адрСса Π½Π° собствСника Π½Π° лотарията.

Π’ интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Π²Π°ΠΌΠ΅ Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ message, ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Π² action. НапомнямС, Ρ‡Π΅ Ρ‰Π΅ ΠΈΠΌΠ°ΠΌΠ΅ Π΄Π²Π΅ action: смСнСтС адрСса ΠΈ ΠΈΠ·ΠΏΡ€Π°Ρ‚Π΅Ρ‚Π΅ Π³Ρ€Π°ΠΌ.

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°ΠΌΠ΅ новия адрСс Π½Π° собствСника Π½Π° Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π° ΠΈ Π³ΠΎ Π·Π°ΠΏΠ°Π·Π²Π°ΠΌΠ΅ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ.
ΠŸΡ€ΠΎΠ²Π΅ΠΆΠ΄Π°ΠΌΠ΅ тСстовСтС ΠΈ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, Ρ‡Π΅ трСтият тСст Π΅ Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ΅Π½. Π’ΠΎΠΉ сС срива ΠΏΠΎΡ€Π°Π΄ΠΈ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ сСга Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΡŠΡ‚ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π° 7 Π±ΠΈΡ‚Π° ΠΎΡ‚ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΊΠΎΠΈΡ‚ΠΎ липсват Π² тСста. Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ Π½Π΅ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ към ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ action. НСка Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ тСстовСтС ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Π΅ всичко Ρ‰Π΅ ΠΌΠΈΠ½Π΅. Π’ΡƒΠΊ Π°Π½Π³Π°ΠΆΠΈΡ€Π°ΠΉΡ‚Π΅ сС с ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ. Π‘Ρ‚Ρ€Π°Ρ…ΠΎΡ‚Π΅Π½.

Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° напишСм Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π·Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° посочСния Π±Ρ€ΠΎΠΉ Π³Ρ€Π°ΠΌΠΎΠ²Π΅ към ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ записания адрСс.

ΠŸΡŠΡ€Π²ΠΎ, Π½Π΅ΠΊΠ° напишСм тСст. Π©Π΅ напишСм Π΄Π²Π° тСста, Сдиният, ΠΊΠΎΠ³Π°Ρ‚ΠΎ няма Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ баланс, вторият, ΠΊΠΎΠ³Π°Ρ‚ΠΎ всичко трябва Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ. ВСстовСтС ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС видят Π² Ρ‚ΠΎΠ·ΠΈ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ‚.

Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊΠΎΠ΄Π°. ΠŸΡŠΡ€Π²ΠΎ, Π½Π΅ΠΊΠ° напишСм Π΄Π²Π° ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. ΠŸΡŠΡ€Π²ΠΈΡΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π΅ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ тСкущия баланс Π½Π° ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€.

int balance() inline_ref method_id {
    return get_balance().pair_first();
}

А вторият Π΅ Π·Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° Π³Ρ€Π°ΠΌΠΎΠ²Π΅ към Π΄Ρ€ΡƒΠ³ ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€. Напълно ΠΊΠΎΠΏΠΈΡ€Π°Ρ… Ρ‚ΠΎΠ·ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€.

() send_grams(int wc, int addr, int grams) impure {
    ;; int_msg_info$0 ihr_disabled:Bool bounce:Bool bounced:Bool src:MsgAddress -> 011000
    cell msg = begin_cell()
    ;;  .store_uint(0, 1) ;; 0 <= format indicator int_msg_info$0 
    ;;  .store_uint(1, 1) ;; 1 <= ihr disabled
    ;;  .store_uint(1, 1) ;; 1 <= bounce = true
    ;;  .store_uint(0, 1) ;; 0 <= bounced = false
    ;;  .store_uint(4, 5)  ;; 00100 <= address flags, anycast = false, 8-bit workchain
        .store_uint (196, 9)
        .store_int(wc, 8)
        .store_uint(addr, 256)
        .store_grams(grams)
        .store_uint(0, 107) ;; 106 zeroes +  0 as an indicator that there is no cell with the data.
        .end_cell(); 
    send_raw_message(msg, 3); ;; mode, 2 for ignoring errors, 1 for sender pays fees, 64 for returning inbound message value
}

НСка Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Ρ‚Π΅Π·ΠΈ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° към интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ ΠΈ Π΄Π° напишСм Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π°. ΠŸΡŠΡ€Π²ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ броя Π½Π° Π³Ρ€Π°ΠΌΠΎΠ²Π΅Ρ‚Π΅ ΠΎΡ‚ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° провСрявамС баланса, Π°ΠΊΠΎ Π½Π΅ Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π΅Π½, Ρ…Π²ΡŠΡ€Π»ΡΠΌΠ΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Ако всичко Π΅ Π½Π°Ρ€Π΅Π΄, ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°ΠΌΠ΅ Π³Ρ€Π°ΠΌΠΎΠ²Π΅Ρ‚Π΅ Π½Π° запамСтСния адрСс ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ брояча.

int amount_to_send = message~load_grams();
throw_if(36, amount_to_send + 500000000 > balance());
accept_message();
send_grams(owner_wc, owner_account_id, amount_to_send);
set_data(pack_state(stored_seqno + 1, pubkey, order_seqno, number_of_wins, incoming_amount, outgoing_amount, owner_wc, owner_account_id, orders));

Π•Ρ‚ΠΎ Π³ΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°Ρ‚ΠΎ интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°. НСка Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅ΠΌ тСстовСтС ΠΈ Π΄Π° сС ΡƒΠ²Π΅Ρ€ΠΈΠΌ, Ρ‡Π΅ Ρ‰Π΅ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Ρ‚.

ΠœΠ΅ΠΆΠ΄Ρƒ Π΄Ρ€ΡƒΠ³ΠΎΡ‚ΠΎ, комисионна сС приспада ΠΎΡ‚ интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ всСки ΠΏΡŠΡ‚ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅. Π—Π° Π΄Π° ΠΌΠΎΠ³Π°Ρ‚ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π° Π½Π° интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΡΡ‚ заявката, слСд основни ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ трябва Π΄Π° сС ΠΎΠ±Π°Π΄ΠΈΡ‚Π΅ accept_message().

Π‘Π΅Π³Π° Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ΠΌ към Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈΡ‚Π΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ. Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ°ΠΌΠ΅ само Π³Ρ€Π°ΠΌΠΎΠ²Π΅ ΠΈ Ρ‰Π΅ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°ΠΌΠ΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π΄Π²ΠΎΠΉΠ½Π° сума Π½Π° ΠΈΠ³Ρ€Π°Ρ‡Π°, Π°ΠΊΠΎ Ρ‚ΠΎΠΉ спСчСли, ΠΈ Π΅Π΄Π½Π° Ρ‚Ρ€Π΅Ρ‚Π° Π½Π° собствСника, Π°ΠΊΠΎ Π·Π°Π³ΡƒΠ±ΠΈ.

ΠŸΡŠΡ€Π²ΠΎ, Π½Π΅ΠΊΠ° напишСм прост тСст. Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Ρ‚ΠΎΠ²Π°, ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ тСстов адрСс Π½Π° интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€, ΠΎΡ‚ ΠΊΠΎΠΉΡ‚ΠΎ ΡƒΠΆ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°ΠΌΠ΅ Π³Ρ€Π°ΠΌΠΎΠ²Π΅ към интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€.

ΠΠ΄Ρ€Π΅ΡΡŠΡ‚ Π½Π° интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ Π΄Π²Π΅ числа, 32-Π±ΠΈΡ‚ΠΎΠ²ΠΎ цяло число, отговарящо Π·Π° Ρ€Π°Π±ΠΎΡ‚Π½Π°Ρ‚Π° Π²Π΅Ρ€ΠΈΠ³Π°, ΠΈ 256-Π±ΠΈΡ‚ΠΎΠ²ΠΎ Π½Π΅ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»Π½ΠΎ цяло число, ΡƒΠ½ΠΈΠΊΠ°Π»Π΅Π½ Π½ΠΎΠΌΠ΅Ρ€ Π½Π° Π°ΠΊΠ°ΡƒΠ½Ρ‚ Π² Ρ‚Π°Π·ΠΈ Ρ€Π°Π±ΠΎΡ‚Π½Π° Π²Π΅Ρ€ΠΈΠ³Π°. НапримСр -1 ΠΈ 12345, Ρ‚ΠΎΠ²Π° Π΅ Π°Π΄Ρ€Π΅ΡΡŠΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ запишСм във Ρ„Π°ΠΉΠ».

ΠšΠΎΠΏΠΈΡ€Π°Ρ… функцията Π·Π° Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° адрСса ΠΎΡ‚ TonUtil.fif.

// ( wc addr fname -- )  Save address to file in 36-byte format
{ -rot 256 u>B swap 32 i>B B+ swap B>file } : save-address

НСка Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ функцията, Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Π½ΠΈ Π΄Π°Π΄Π΅ прСдстава ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ Fift. Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΉΡ‚Π΅ Fift Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ.

~/TON/build/crypto/fift -i 

ΠŸΡŠΡ€Π²ΠΎ ΠΈΠ·Π±ΡƒΡ‚Π²Π°ΠΌΠ΅ -1, 12345 ΠΈ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Π±ΡŠΠ΄Π΅Ρ‰ΠΈΡ Ρ„Π°ΠΉΠ» "sender.addr" Π² стСка:

-1 12345 "sender.addr" 

Π‘Π»Π΅Π΄Π²Π°Ρ‰Π°Ρ‚Π° ΡΡ‚ΡŠΠΏΠΊΠ° Π΅ Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ функцията -rot, ΠΊΠΎΠΉΡ‚ΠΎ измСства стСка ΠΏΠΎ Ρ‚Π°ΠΊΡŠΠ² Π½Π°Ρ‡ΠΈΠ½, Ρ‡Π΅ Π² Π³ΠΎΡ€Π½Π°Ρ‚Π° част Π½Π° стСка ΠΈΠΌΠ° ΡƒΠ½ΠΈΠΊΠ°Π»Π΅Π½ Π½ΠΎΠΌΠ΅Ρ€ Π½Π° ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€:

"sender.addr" -1 12345

256 u>B ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π° 256-Π±ΠΈΡ‚ΠΎΠ²ΠΎ Π½Π΅ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»Π½ΠΎ цяло число Π² Π±Π°ΠΉΡ‚ΠΎΠ²Π΅.

"sender.addr" -1 BYTES:0000000000000000000000000000000000000000000000000000000000003039

swap размСня Π³ΠΎΡ€Π½ΠΈΡ‚Π΅ Π΄Π²Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π° Π½Π° стСка.

"sender.addr" BYTES:0000000000000000000000000000000000000000000000000000000000003039 -1

32 i>B ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π° 32-Π±ΠΈΡ‚ΠΎΠ²ΠΎ цяло число Π² Π±Π°ΠΉΡ‚ΠΎΠ²Π΅.

"sender.addr" BYTES:0000000000000000000000000000000000000000000000000000000000003039 BYTES:FFFFFFFF

B+ ΡΠ²ΡŠΡ€Π·Π²Π° Π΄Π²Π΅ послСдоватСлности ΠΎΡ‚ Π±Π°ΠΉΡ‚ΠΎΠ²Π΅.

 "sender.addr" BYTES:0000000000000000000000000000000000000000000000000000000000003039FFFFFFFF

ΠžΡ‚Π½ΠΎΠ²ΠΎ swap.

BYTES:0000000000000000000000000000000000000000000000000000000000003039FFFFFFFF "sender.addr" 

И накрая Π±Π°ΠΉΡ‚ΠΎΠ²Π΅Ρ‚Π΅ сС записват във Ρ„Π°ΠΉΠ»Π° B>file. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Π½Π°ΡˆΠΈΡΡ‚ стСк Π΅ ΠΏΡ€Π°Π·Π΅Π½. Π‘ΠΏΠΈΡ€Π°ΠΌΠ΅ Fift. Π’ Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° ΠΏΠ°ΠΏΠΊΠ° Π΅ създадСн Ρ„Π°ΠΉΠ» sender.addr. НСка прСмСстим Ρ„Π°ΠΉΠ»Π° Π² ΡΡŠΠ·Π΄Π°Π΄Π΅Π½Π°Ρ‚Π° ΠΏΠ°ΠΏΠΊΠ° test/addresses/.

НСка напишСм прост тСст, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈ Π³Ρ€Π°ΠΌΠΎΠ²Π΅ към ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€. Π•Ρ‚ΠΎ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ‚Π°.

Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° лотарията.

ΠŸΡŠΡ€Π²ΠΎΡ‚ΠΎ Π½Π΅Ρ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠΌ, Π΅ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ bounced ΠΈΠ»ΠΈ Π½Π΅ Π°ΠΊΠΎ bounced, Ρ‚ΠΎΠ³Π°Π²Π° Π³ΠΎ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°ΠΌΠ΅. bounced ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΡŠΡ‚ Ρ‰Π΅ Π²ΡŠΡ€Π½Π΅ Π³Ρ€Π°ΠΌΠΎΠ²Π΅, Π°ΠΊΠΎ възникнС някаква Π³Ρ€Π΅ΡˆΠΊΠ°. Няма Π΄Π° Π²ΡŠΡ€Π½Π΅ΠΌ Π³Ρ€Π°ΠΌΠΎΠ²Π΅, Π°ΠΊΠΎ Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎ възникнС Π³Ρ€Π΅ΡˆΠΊΠ°.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ²Π°ΠΌΠ΅, Π°ΠΊΠΎ Π±Π°Π»Π°Π½ΡΡŠΡ‚ Π΅ ΠΏΠΎ-малък ΠΎΡ‚ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ Π³Ρ€Π°ΠΌ, Ρ‚ΠΎΠ³Π°Π²Π° просто ΠΏΡ€ΠΈΠ΅ΠΌΠ°ΠΌΠ΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈ Π³ΠΎ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°ΠΌΠ΅.

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ адрСса Π½Π° интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€, ΠΎΡ‚ ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ΄Π²Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ.

НиС Ρ‡Π΅Ρ‚Π΅ΠΌ Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΠΎΡ‚ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ ΠΈ слСд Ρ‚ΠΎΠ²Π° ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°ΠΌΠ΅ старитС Π·Π°Π»ΠΎΠ·ΠΈ ΠΎΡ‚ историята, Π°ΠΊΠΎ ΠΈΠΌΠ° ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ двадСсСт. Π—Π° удобство написах Ρ‚Ρ€ΠΈ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pack_order(), unpack_order(), remove_old_orders().

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π΄Π°Π»ΠΈ Π±Π°Π»Π°Π½ΡΡŠΡ‚ Π½Π΅ Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π΅Π½ Π·Π° ΠΏΠ»Π°Ρ‰Π°Π½Π΅Ρ‚ΠΎ, Ρ‚ΠΎΠ³Π°Π²Π° считамС, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ Π·Π°Π»ΠΎΠ³, Π° попълванС ΠΈ Π·Π°ΠΏΠ°Π·Π²Π°ΠΌΠ΅ ΠΏΠΎΠΏΡŠΠ»Π²Π°Π½Π΅Ρ‚ΠΎ Π² orders.

И накрая ΡΡŠΡ‰Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€.

ΠŸΡŠΡ€Π²ΠΎ, Π°ΠΊΠΎ ΠΈΠ³Ρ€Π°Ρ‡ΡŠΡ‚ Π·Π°Π³ΡƒΠ±ΠΈ, Π½ΠΈΠ΅ Π³ΠΎ Π·Π°ΠΏΠ°Π·Π²Π°ΠΌΠ΅ Π² историята Π½Π° залаганията ΠΈ Π°ΠΊΠΎ количСството Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ 3 Π³Ρ€Π°ΠΌΠ°, ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°ΠΌΠ΅ 1/3 Π½Π° собствСника Π½Π° интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€.

Ако ΠΈΠ³Ρ€Π°Ρ‡ΡŠΡ‚ спСчСли, Π½ΠΈΠ΅ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°ΠΌΠ΅ Π΄Π²ΠΎΠΉΠ½Π° сума Π½Π° адрСса Π½Π° ΠΈΠ³Ρ€Π°Ρ‡Π° ΠΈ слСд Ρ‚ΠΎΠ²Π° Π·Π°ΠΏΠ°Π·Π²Π°ΠΌΠ΅ информацията Π·Π° Π·Π°Π»ΠΎΠ³Π° Π² историята.

() recv_internal(int order_amount, cell in_msg_cell, slice in_msg) impure {
    var cs = in_msg_cell.begin_parse();
    int flags = cs~load_uint(4);  ;; int_msg_info$0 ihr_disabled:Bool bounce:Bool bounced:Bool
    if (flags & 1) { ;; ignore bounced
        return ();
    }
    if (order_amount < 500000000) { ;; just receive grams without changing state 
        return ();
    }
    slice src_addr_slice = cs~load_msg_addr();
    (int src_wc, int src_addr) = parse_std_addr(src_addr_slice);
    (int stored_seqno, int pubkey, int order_seqno, int number_of_wins, int incoming_amount, int outgoing_amount, int owner_wc, int owner_account_id, cell orders) = unpack_state();
    orders = remove_old_orders(orders, order_seqno);
    if (balance() < 2 * order_amount + 500000000) { ;; not enough grams to pay the bet back, so this is re-fill
        builder order = pack_order(order_seqno, 1, now(), order_amount, src_wc, src_addr);
        orders~udict_set_builder(32, order_seqno, order);
        set_data(pack_state(stored_seqno, pubkey, order_seqno + 1, number_of_wins, incoming_amount + order_amount, outgoing_amount, owner_wc, owner_account_id, orders));
        return ();
    }
    if (rand(10) >= 4) {
        builder order = pack_order(order_seqno, 3, now(), order_amount, src_wc, src_addr);
        orders~udict_set_builder(32, order_seqno, order);
        set_data(pack_state(stored_seqno, pubkey, order_seqno + 1, number_of_wins, incoming_amount + order_amount, outgoing_amount, owner_wc, owner_account_id, orders));
        if (order_amount > 3000000000) {
            send_grams(owner_wc, owner_account_id, order_amount / 3);
        }
        return ();
    }
    send_grams(src_wc, src_addr, 2 * order_amount);
    builder order = pack_order(order_seqno, 2, now(), order_amount, src_wc, src_addr);
    orders~udict_set_builder(32, order_seqno, order);
    set_data(pack_state(stored_seqno, pubkey, order_seqno + 1, number_of_wins + 1, incoming_amount, outgoing_amount + 2 * order_amount, owner_wc, owner_account_id, orders));
}

Π’ΠΎΠ²Π° Π΅ всичко. Π‘ΡŠΠΎΡ‚Π²Π΅Ρ‚Π΅Π½ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ‚.

Π‘Π΅Π³Π° всичко, ΠΊΠΎΠ΅Ρ‚ΠΎ остава, Π΅ просто, Π½Π΅ΠΊΠ° създадСм get-methods, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ информация Π·Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π° ΠΎΡ‚ външния свят (Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅ΠΌ Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΠΎΡ‚ тяхното Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π·Π° ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈ).

НСка Π΄ΠΎΠ±Π°Π²ΠΈΠΌ get ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ. По-Π΄ΠΎΠ»Ρƒ Ρ‰Π΅ напишСм ΠΊΠ°ΠΊ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ информация Π·Π° ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€.

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π·Π°Π±Ρ€Π°Π²ΠΈΡ… Π΄Π° добавя ΠΊΠΎΠ΄Π°, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΡŠΡ€Π²Π°Ρ‚Π° заявка, която възниква ΠΏΡ€ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅ Π½Π° ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€. Π‘ΡŠΠΎΡ‚Π²Π΅Ρ‚Π΅Π½ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ‚. И ΠΏΠΎ-Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ ΠΏΠΎΠΏΡ€Π°Π²Π΅Π½ΠΎ бъг с ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° 1/3 ΠΎΡ‚ сумата към смСтката Π½Π° собствСника.

Π‘Π»Π΅Π΄Π²Π°Ρ‰Π°Ρ‚Π° ΡΡ‚ΡŠΠΏΠΊΠ° Π΅ Π΄Π° ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Ρ‚Π΅ интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€. НСка създадСм ΠΏΠ°ΠΏΠΊΠ° requests.

Π—Π° основа Π²Π·Π΅Ρ… ΠΊΠΎΠ΄Π° Π½Π° публикацията simple-wallet-code.fc ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈ Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΎΡ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅.

НСщо, Π½Π° ΠΊΠΎΠ΅Ρ‚ΠΎ си струва Π΄Π° сС ΠΎΠ±ΡŠΡ€Π½Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅. НиС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°ΠΌΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π·Π° ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈ ΠΈ Π²Ρ…ΠΎΠ΄Π½ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Π°Π΄Ρ€Π΅ΡΡŠΡ‚ Π½Π° интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€, Ρ‚.Π΅. Π°Π΄Ρ€Π΅ΡΡŠΡ‚ Π΅ извСстСн ΠΎΡ‰Π΅ ΠΏΡ€Π΅Π΄ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅Ρ‚ΠΎ Π² TON. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° трябва Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΡ‚Π΅ няколко Π³Ρ€Π°ΠΌΠ° Π½Π° Ρ‚ΠΎΠ·ΠΈ адрСс ΠΈ Π΅Π΄Π²Π° слСд Ρ‚ΠΎΠ²Π° трябва Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ» със самия ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° Π²Π·Π΅ΠΌΠ° комисионна Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ Π² Π½Π΅Π³ΠΎ (Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ ΠΈ ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈ ). ΠšΠΎΠ΄ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ‚ΡƒΠΊ.

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° изпълнявамС ΠΊΠΎΠ΄Π° Π·Π° ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ lottery-query.boc Ρ„Π°ΠΉΠ» ΠΈ адрСс Π½Π° ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€.

~/TON/build/crypto/fift -s requests/new-lottery.fif 0

НС забравяйтС Π΄Π° Π·Π°ΠΏΠ°Π·ΠΈΡ‚Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅: lottery-query.boc, lottery.addr, lottery.pk.

ОсвСн всичко Π΄Ρ€ΡƒΠ³ΠΎ, Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΠΌ адрСса Π½Π° интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ Π² рСгистрационнитС Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π·Π° изпълнСниС.

new wallet address = 0:044910149dbeaf8eadbb2b28722e7d6a2dc6e264ec2f1d9bebd6fb209079bc2a 
(Saving address to file lottery.addr)
Non-bounceable address (for init): 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd
Bounceable address (for later access): kQAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8KpFY

Π‘Π°ΠΌΠΎ Π·Π° Π·Π°Π±Π°Π²Π»Π΅Π½ΠΈΠ΅, Π½Π΅ΠΊΠ° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠΌ заявка към TON

$ ./lite-client/lite-client -C ton-lite-client-test1.config.json 
getaccount 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd

И Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Π΅ Π°ΠΊΠ°ΡƒΠ½Ρ‚ΡŠΡ‚ с Ρ‚ΠΎΠ·ΠΈ адрСс Π΅ ΠΏΡ€Π°Π·Π΅Π½.

account state is empty

Π˜Π·ΠΏΡ€Π°Ρ‰Π°ΠΌΠ΅ Π΄ΠΎ адрСс 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd 2 Gram ΠΈ слСд няколко сСкунди изпълнявамС ΡΡŠΡ‰Π°Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°. Π—Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° Π³Ρ€Π°ΠΌΠΎΠ²Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π΅Π½ ΠΏΠΎΡ€Ρ‚Ρ„Π΅ΠΉΠ», Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΠΎΠΌΠΎΠ»ΠΈΡ‚Π΅ някой ΠΎΡ‚ Ρ‡Π°Ρ‚Π° Π·Π° тСстови Π³Ρ€Π°ΠΌΠΎΠ²Π΅, Π·Π° ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ говоря Π² края Π½Π° статията.

> getaccount 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd

ИзглСТда ΠΊΠ°Ρ‚ΠΎ Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΎ (state:account_uninit) ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ със ΡΡŠΡ‰ΠΈΡ адрСс ΠΈ баланс ΠΎΡ‚ 1 000 000 000 Π½Π°Π½ΠΎΠ³Ρ€Π°ΠΌΠ°.

account state is (account
  addr:(addr_std
    anycast:nothing workchain_id:0 address:x044910149DBEAF8EADBB2B28722E7D6A2DC6E264EC2F1D9BEBD6FB209079BC2A)
  storage_stat:(storage_info
    used:(storage_used
      cells:(var_uint len:1 value:1)
      bits:(var_uint len:1 value:103)
      public_cells:(var_uint len:0 value:0)) last_paid:1583257959
    due_payment:nothing)
  storage:(account_storage last_trans_lt:3825478000002
    balance:(currencies
      grams:(nanograms
        amount:(var_uint len:4 value:2000000000))
      other:(extra_currencies
        dict:hme_empty))
    state:account_uninit))
x{C00044910149DBEAF8EADBB2B28722E7D6A2DC6E264EC2F1D9BEBD6FB209079BC2A20259C2F2F4CB3800000DEAC10776091DCD650004_}
last transaction lt = 3825478000001 hash = B043616AE016682699477FFF01E6E903878CDFD6846042BA1BFC64775E7AC6C4
account balance is 2000000000ng

Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°ΠΌΠ΅ интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€. НСка стартирамС lite-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈ изпълним.

> sendfile lottery-query.boc
[ 1][t 2][1583008371.631410122][lite-client.cpp:966][!testnode] sending query from file lottery-query.boc
[ 3][t 1][1583008371.828550100][lite-client.cpp:976][!query]    external message status is 1 

НСка ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Π΄Π°Π»ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΡŠΡ‚ Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½.

> last
> getaccount 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd

ОсвСн всичко Π΄Ρ€ΡƒΠ³ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅.

  storage:(account_storage last_trans_lt:3825499000002
    balance:(currencies
      grams:(nanograms
        amount:(var_uint len:4 value:1987150999))
      other:(extra_currencies
        dict:hme_empty))
    state:(account_active

Π’ΠΈΠΆΠ΄Π°ΠΌΠ΅ Ρ‚ΠΎΠ²Π° account_active.

Π‘ΡŠΠΎΡ‚Π²Π΅Ρ‚Π΅Π½ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ‚ с ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Ρ‚ΡƒΠΊ.

Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° създадСм заявки Π·Π° взаимодСйствиС с интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€.

По-Ρ‚ΠΎΡ‡Π½ΠΎ ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ Ρ‰Π΅ оставим Π·Π° смяна Π½Π° адрСса ΠΊΠ°Ρ‚ΠΎ самостоятСлна Ρ€Π°Π±ΠΎΡ‚Π°, Π° Π²Ρ‚ΠΎΡ€ΠΎΡ‚ΠΎ Ρ‰Π΅ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Π·Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° Π³Ρ€Π°ΠΌΠΎΠ²Π΅ Π΄ΠΎ адрСса Π½Π° собствСника. Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚ Ρ‰Π΅ трябва Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΡΡŠΡ‰ΠΎΡ‚ΠΎ ΠΊΠ°Ρ‚ΠΎ Π² тСста Π·Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° Π³Ρ€Π°ΠΌΠΎΠ²Π΅.

Π’ΠΎΠ²Π° Π΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΠΌ Π½Π° интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ msg_seqno 165, action 2 ΠΈ 9.5 Π³Ρ€Π°ΠΌΠ° Π·Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅.

<b 165 32 u, 2 7 u, 9500000000 Gram, b>

НС забравяйтС Π΄Π° ΠΏΠΎΠ΄ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ с личния си ΠΊΠ»ΡŽΡ‡ lottery.pk, ΠΊΠΎΠΉΡ‚ΠΎ бСшС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½ ΠΏΠΎ-Ρ€Π°Π½ΠΎ ΠΏΡ€ΠΈ ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€. Π•Ρ‚ΠΎ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ‚.

ΠŸΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° информация ΠΎΡ‚ ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ Ρ‡Ρ€Π΅Π· get ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ

Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊ Π΄Π° стартирамС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ Π·Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€.

Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°Π½Π΅ lite-client ΠΈ стартирайтС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ Π·Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅, ΠΊΠΎΠΈΡ‚ΠΎ написахмС.

$ ./lite-client/lite-client -C ton-lite-client-test1.config.json
> runmethod 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd balance
arguments:  [ 104128 ] 
result:  [ 64633878952 ] 
...

Π’ result ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° стойността, която функцията Π²Ρ€ΡŠΡ‰Π° balance() ΠΎΡ‚ нашия ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€.
Π©Π΅ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π·Π° ΠΎΡ‰Π΅ няколко ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

> runmethod 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd get_seqno
...
arguments:  [ 77871 ] 
result:  [ 1 ] 

НСка поискамС Π²Π°ΡˆΠ°Ρ‚Π° история Π½Π° залагания.

> runmethod 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd get_orders
...
arguments:  [ 67442 ] 
result:  [ ([0 1 1583258284 10000000000 0 74649920601963823558742197308127565167945016780694342660493511643532213172308] [1 3 1583258347 4000000000 0 74649920601963823558742197308127565167945016780694342660493511643532213172308] [2 1 1583259901 50000000000 0 74649920601963823558742197308127565167945016780694342660493511643532213172308]) ] 

Π©Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ lite-client ΠΈ Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π·Π° ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° информация Π·Π° интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ Π½Π° сайта.

ПоказванС Π½Π° Π΄Π°Π½Π½ΠΈ Π·Π° ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ Π½Π° уСбсайта

Написах прост уСбсайт Π² Python Π·Π° ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΠΎΡ‚ интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ ΠΏΠΎ ΡƒΠ΄ΠΎΠ±Π΅Π½ Π½Π°Ρ‡ΠΈΠ½. Π’ΡƒΠΊ няма Π΄Π° сС спирам ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π½Π° Π½Π΅Π³ΠΎ ΠΈ Ρ‰Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°ΠΌ сайта Π² Π΅Π΄ΠΈΠ½ Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ‚.

ЗаявкитС към TON сС правят ΠΎΡ‚ Python ΠΏΡ€Π΅Π· lite-client. Π—Π° удобство ΡΠ°ΠΉΡ‚ΡŠΡ‚ Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈΡ€Π°Π½ Π² Docker ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½ Π² Google Cloud. Π’Ρ€ΡŠΠ·ΠΊΠ°.

ΠžΠΏΠΈΡ‚Π²Π°ΠΉΠΊΠΈ

Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° сС ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΠΌ Π³Ρ€Π°ΠΌΠΎΠ²Π΅ Ρ‚Π°ΠΌ Π·Π° попълванС ΠΎΡ‚ ΠΏΠΎΡ€Ρ‚ΠΌΠΎΠ½Π΅. Π©Π΅ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΠΌ 40Π³Ρ€. И Π½Π΅ΠΊΠ° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ няколко Π·Π°Π»ΠΎΠ³Π° Π·Π° яснота. Π’ΠΈΠΆΠ΄Π°ΠΌΠ΅, Ρ‡Π΅ ΡΠ°ΠΉΡ‚ΡŠΡ‚ ΠΏΠΎΠΊΠ°Π·Π²Π° историята Π½Π° Π·Π°Π»ΠΎΠ·ΠΈΡ‚Π΅, тСкущия ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ Π½Π° ΠΏΠ΅Ρ‡Π°Π»Π±Π° ΠΈ Π΄Ρ€ΡƒΠ³Π° ΠΏΠΎΠ»Π΅Π·Π½Π° информация.

Π’ΠΈΠΆΠ΄Π°ΠΌΠ΅Ρ‡Π΅ спСчСлихмС ΠΏΡŠΡ€Π²ΠΎΡ‚ΠΎ, Π·Π°Π³ΡƒΠ±ΠΈΡ…ΠΌΠ΅ Π²Ρ‚ΠΎΡ€ΠΎΡ‚ΠΎ.

послСслов

Бтатията сС ΠΎΠΊΠ°Π·Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-дълга, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΎΡ‡Π°ΠΊΠ²Π°Ρ…, ΠΌΠΎΠΆΠ΅ Π±ΠΈ моТСшС Π΄Π° Π΅ ΠΏΠΎ-ΠΊΡ€Π°Ρ‚ΠΊΠ° ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅ Π±ΠΈ просто Π·Π° Ρ‡ΠΎΠ²Π΅ΠΊ, ΠΊΠΎΠΉΡ‚ΠΎ Π½Π΅ Π·Π½Π°Π΅ Π½ΠΈΡ‰ΠΎ Π·Π° TON ΠΈ иска Π΄Π° напишС ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π° Π½Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° прост ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ с Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° взаимодСйствиС с Ρ‚ΠΎ. МоТС Π±ΠΈ някои Π½Π΅Ρ‰Π° ΠΌΠΎΠΆΠ΅Ρ…Π° Π΄Π° сС обяснят ΠΏΠΎ-просто.

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

Врябва Π΄Π° сС ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈ, Ρ‡Π΅ Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ самият TON всС ΠΎΡ‰Π΅ Π΅ Π² Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ Π΅Ρ‚Π°ΠΏ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΡΡ‚ΡŠΠΏΡΡ‚ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ Π½Π°Ρ€ΡƒΡˆΠ°Ρ‚ някоя ΠΎΡ‚ ΡΡ‚ΡŠΠΏΠΊΠΈΡ‚Π΅ Π² Ρ‚Π°Π·ΠΈ статия (ΠΊΠΎΠ΅Ρ‚ΠΎ сС случи, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ писах, Π²Π΅Ρ‡Π΅ Π΅ ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Π½ΠΎ), Π½ΠΎ общият ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π΅ ΠΌΠ°Π»ΠΊΠΎ вСроятно Π΅ Π΄Π° сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ.

Няма Π΄Π° говоря Π·Π° Π±ΡŠΠ΄Π΅Ρ‰Π΅Ρ‚ΠΎ Π½Π° TON. МоТС Π±ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Ρ‰Π΅ станС Π½Π΅Ρ‰ΠΎ голямо ΠΈ трябва Π΄Π° ΠΎΡ‚Π΄Π΅Π»ΠΈΠΌ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° ΠΈΠ·ΡƒΡ‡Π°Π²Π°Π½Π΅Ρ‚ΠΎ ΠΉ ΠΈ Π΄Π° запълним ниша с Π½Π°ΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ сСга.

Има ΠΈ Libra ΠΎΡ‚ Facebook, която ΠΈΠΌΠ° ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»Π½Π° аудитория ΠΎΡ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ, ΠΏΠΎ-голяма ΠΎΡ‚ TON. НС Π·Π½Π°ΠΌ ΠΏΠΎΡ‡Ρ‚ΠΈ Π½ΠΈΡ‰ΠΎ Π·Π° Libra, съдСйки ΠΏΠΎ Ρ„ΠΎΡ€ΡƒΠΌΠ° Ρ‚Π°ΠΌ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅ активност, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π² общността Π½Π° TON. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ ΠΈ общността Π½Π° TON са ΠΏΠΎ-скоро ΡŠΠ½Π΄ΡŠΡ€Π³Ρ€Π°ΡƒΠ½Π΄, ΠΊΠΎΠ΅Ρ‚ΠΎ ΡΡŠΡ‰ΠΎ Π΅ страхотно.

ΠŸΠΎΠ·ΠΎΠ²Π°Π²Π°Π½Π΅Ρ‚ΠΎ

  1. ΠžΡ„ΠΈΡ†ΠΈΠ°Π»Π½Π° докумСнтация Π½Π° TON: https://test.ton.org
  2. ΠžΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π° TON: https://github.com/ton-blockchain/ton
  3. ΠžΡ„ΠΈΡ†ΠΈΠ°Π»Π΅Π½ ΠΏΠΎΡ€Ρ‚Ρ„Π΅ΠΉΠ» Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ: https://wallet.ton.org
  4. Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π·Π° ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈ ΠΎΡ‚ Ρ‚Π°Π·ΠΈ статия: https://github.com/raiym/astonished
  5. Π’Ρ€ΡŠΠ·ΠΊΠ° към уСбсайта Π½Π° интСлигСнтния Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€: https://ton-lottery.appspot.com
  6. Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π·Π° Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π·Π° Visual Studio Code Π·Π° FunC: https://github.com/raiym/func-visual-studio-plugin
  7. Π§Π°Ρ‚ Π·Π° TON Π² Telegram, ΠΊΠΎΠ΅Ρ‚ΠΎ наистина ΠΏΠΎΠΌΠΎΠ³Π½Π° Π΄Π° Π³ΠΎ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π² началния Π΅Ρ‚Π°ΠΏ. Мисля, Ρ‡Π΅ няма Π΄Π° ΡΠ³Ρ€Π΅ΡˆΠ°, Π°ΠΊΠΎ ΠΊΠ°ΠΆΠ°, Ρ‡Π΅ всСки, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ написал Π½Π΅Ρ‰ΠΎ Π·Π° TON, Π΅ Ρ‚Π°ΠΌ. Π’Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° поискатС ΠΈ тСстови Π³Ρ€Π°ΠΌΠΎΠ²Π΅. https://t.me/tondev_ru
  8. Π”Ρ€ΡƒΠ³ Ρ‡Π°Ρ‚ Π·Π° TON, Π² ΠΊΠΎΠΉΡ‚ΠΎ Π½Π°ΠΌΠ΅Ρ€ΠΈΡ… ΠΏΠΎΠ»Π΅Π·Π½Π° информация: https://t.me/TONgramDev
  9. ΠŸΡŠΡ€Π²ΠΈ Π΅Ρ‚Π°ΠΏ Π½Π° ΡΡŠΡΡ‚Π΅Π·Π°Π½ΠΈΠ΅Ρ‚ΠΎ: https://contest.com/blockchain
  10. Π’Ρ‚ΠΎΡ€ΠΈ Π΅Ρ‚Π°ΠΏ Π½Π° ΡΡŠΡΡ‚Π΅Π·Π°Π½ΠΈΠ΅Ρ‚ΠΎ: https://contest.com/blockchain-2

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€