Как Π΄Π° напишСм ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°ΠΌΠ΅ смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ Π² Telegram Open Network (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 (ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° "bag of cells"), ΠΈ Π² зависимост ΠΎΡ‚ Π½Π°Ρ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΠΉΡ‚ΠΎ Π³ΠΎ напишСм, Π»ΠΈΡ‡Π΅Π½ ΠΊΠ»ΡŽΡ‡ ΠΈ адрСс, ΠΊΠΎΠΉΡ‚ΠΎ сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΊΠΎΠ΄Π° Π½Π° смарт Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π°. На адрСса Π½Π° смарт Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π°, ΠΊΠΎΠΉΡ‚ΠΎ ΠΎΡ‰Π΅ Π½Π΅ Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½, Π²Π΅Ρ‡Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°ΠΌΠ΅ Π³Ρ€Π°ΠΌΠΎΠ²Π΅.

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

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

[ 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

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

списък Π½Π° Π½Π°Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ:
last    Π’Π·Π΅ΠΌΠ΅Ρ‚Π΅ послСдния Π±Π»ΠΎΠΊ ΠΈ информация Π·Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ ΠΎΡ‚ ΡΡŠΡ€Π²ΡŠΡ€Π°
sendfile  Π—Π°Ρ€Π΅Π΄Π΅Ρ‚Π΅ сСриализирано ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΡ‚  ΠΈ Π³ΠΎ ΠΈΠ·ΠΏΡ€Π°Ρ‚Π΅Ρ‚Π΅ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π°
getaccount  [<block-id-ext>]  Π—Π°Ρ€Π΅ΠΆΠ΄Π° Π½Π°ΠΉ-ΡΠΊΠΎΡ€ΠΎΡˆΠ½ΠΎΡ‚ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π½Π° ΡƒΠΊΠ°Π·Π°Π½Π°Ρ‚Π° смСтката;  Π΅ Π² formata [<workchain>:]<hex-or-base64-addr>
runmethod  [<block-id-ext>]  ...   Изпълнява GET ΠΌΠ΅Ρ‚ΠΎΠ΄Π°  Π½Π° смСтката  с посочСнитС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ

last ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° послСдния създадСн Π±Π»ΠΎΠΊ ΠΎΡ‚ ΡΡŠΡ€Π²ΡŠΡ€Π°.

sendfile  ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° Ρ„Π°ΠΉΠ» с ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π² TON, ΠΈΠΌΠ΅Π½Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Ρ‚Π°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° сС ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π° смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ ΠΈ запроситС към Π½Π΅Π³ΠΎ.

getaccount  Π·Π°Ρ€Π΅ΠΆΠ΄Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΎΡ‚ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π½Π° смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° с ΡƒΠΊΠ°Π·Π°Π½ΠΎΡ‚ΠΎ адрСс.

runmethod  [<block-id-ext>]    стартира get-ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ Π½Π° смартконтракта. 

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

РСализация

ИдСя

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

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

Π’Π°ΠΆΠ½ΠΎΡ‚ΠΎ Π΅, Ρ‡Π΅ Π·Π°Π»ΠΎΠ·ΠΈΡ‚Π΅ трябва Π΄Π° сС Π²ΠΈΠΆΠ΄Π°Ρ‚ Π² Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅ ΠΈ ΠΏΠΎ ΡƒΠ΄ΠΎΠ±Π΅Π½ Π½Π°Ρ‡ΠΈΠ½, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ потрСбитСлят Π²Π΅Π΄Π½Π°Π³Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ Π΄Π°Π»ΠΈ Π΅ спСчСлил ΠΈΠ»ΠΈ Π·Π°Π³ΡƒΠ±ΠΈΠ». Π—Π°Ρ‚ΠΎΠ²Π° трябва Π΄Π° създадСм уСбсайт, ΠΊΠΎΠΉΡ‚ΠΎ Π΄Π° ΠΏΠΎΠΊΠ°Π·Π²Π° Π·Π°Π»ΠΎΠ·ΠΈΡ‚Π΅ ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΡ‚ TON.

НаписванС Π½Π° смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚

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

НСка Π²Π΅Π΄Π½Π°Π³Π° създадСм рСпозитория, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Ρ‰Π΅ ΠΊΠΎΠΌΠΈΡ‚ΠΈΠΌ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ.

Π—Π° Π΄Π° си улСсним ΠΆΠΈΠ²ΠΎΡ‚Π°, Ρ‰Π΅ пишСм смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° ΠΈ Ρ‰Π΅ тСствамС Π»ΠΎΠΊΠ°Π»Π½ΠΎ, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Π½Π΅ станС Π³ΠΎΡ‚ΠΎΠ². Π‘Π°ΠΌΠΎ слСд Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Π³ΠΎ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°ΠΌΠ΅ Π² TON.

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

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

() recv_internal(slice in_msg) impure {
    ;; TODO: рСализация 
}

() recv_external(slice in_msg) impure {
    ;; TODO: рСализация  
}

Π’ΡƒΠΊ трябва Π΄Π° ΡƒΡ‚ΠΎΡ‡Π½ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ 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 \/\/ да сС изпълни recv_internal() 
-1 constant recv_external \/\/ за да сС извика recv_external()

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

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

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

НСка създадСм ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° storage ΠΈ Π΄Π° запишСм Π² нСя пуст cell, Ρ‚ΠΎΠ²Π° Ρ‰Π΅ бъдС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π° смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°.

message Ρ‚ΠΎΠ²Π° Π΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ ΠΏΡ€Π΅Π΄Π°Π΄Π΅ΠΌ Π½Π° смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° ΠΎΡ‚ външния свят. И Π½Π΅Π³ΠΎ ΡΡŠΡ‰ΠΎ Ρ‰Π΅ оставим Π·Π° сСга пусто.

ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ 
<b b> Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ! 

ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ 
<b b> ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ! 

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²ΠΈΡ…ΠΌΠ΅ константитС ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅, стартирамС 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]     ΡΡ‚ΡŠΠΏΠΊΠΈ: 5 Π³Π°Π·: ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ=304, макс=9223372036854775807, Π»ΠΈΠΌΠΈΡ‚=9223372036854775807, ΠΊΡ€Π΅Π΄ΠΈΡ‚=0

ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ, написахмС ΠΏΡŠΡ€Π²Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰Π° вСрсия Π½Π° смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°.

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

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ сам ΠΈΠ·Π±ΠΈΡ€Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ΅.

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

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

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

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

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

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

<b 166 32 u, b> ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ !
<b 165 32 u, b> ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ !

ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ @ 
recv_external 
ΠΊΠΎΠ΄ 
sΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ @ 
c7 
runvmctx

drop 
exit_code ! 
."Код Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄ " exit_code @ . cr 
exit_code @ 33 - abort"ВСст #2 НС ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Ρ‚Π°"

Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΌΠ΅.

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

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

[ 1][t 0][1582283084.210902214][words.cpp:3046] lottery-test-suite.fif:67: abort": ВСст #2 Π½Π΅ Π΅ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π»
[ 1][t 0][1582283084.210941076][fift-main.cpp:196]      Π“Ρ€Π΅ΡˆΠΊΠ° ΠΏΡ€ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ„Π°ΠΉΠ»Π° `lottery-test-suite.fif`: Π³Ρ€Π΅ΡˆΠΊΠ° ΠΏΡ€ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ„Π°ΠΉΠ» `lottery-test-suite.fif` : lottery-test-suite.fif:67: abort": ВСст #2 Π½Π΅ Π΅ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π»

На Ρ‚ΠΎΠ·ΠΈ Π΅Ρ‚Π°ΠΏ lottery-test-suite.fif трябва Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°Ρ‚ΠΎ ΠΎΡ‚ Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π°.

Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° брояча Π² смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° Π² lottery-code.fc.

() recv_internal(slice in_msg) impure {
    ;; TODO: рСализация 
}

() 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.

ДобавямС Π² 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 "nΠšΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΡΡ‚Π° Π·Π°Π²ΡŠΡ€ΡˆΠ΅Π½Π°n"

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-Π±ΠΈΡ‚ΠΎΠ²o цяло ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π½ΠΎ число - брояч. 

`pubkey` 256-Π±ΠΈΡ‚ΠΎ цяло ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π½ΠΎ число - ΠΏΡƒΠ±Π»ΠΈΡ‡Π΅Π½ ΠΊΠ»ΡŽΡ‡, с ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ подписа Π½Π° входящото ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅, Π·Π° ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ. 

`order_seqno` 32-Π±ΠΈΡ‚ΠΎΠ²o цяло ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π½ΠΎ число, ΠΊΠΎΠ΅Ρ‚ΠΎ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° броя Π½Π° ставкитС. 

`number_of_wins` 32-Π±ΠΈΡ‚ΠΎΠ²o цяло ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π½ΠΎ число, ΠΊΠΎΠ΅Ρ‚ΠΎ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° броя Π½Π° ΠΏΠΎΠ±Π΅Π΄ΠΈΡ‚Π΅. 

`incoming_amount` Ρ‚ΠΈΠΏ Π΄Π°Π½Π½ΠΈ Gram (ΠΏΡŠΡ€Π²ΠΈΡ‚Π΅ 4 Π±ΠΈΡ‚Π° отговарят Π·Π° Π΄ΡŠΠ»ΠΆΠΈΠ½Π°Ρ‚Π°), ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° ΠΎΠ±Ρ‰ΠΎΡ‚ΠΎ количСство Π³Ρ€Π°ΠΌΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ са ΠΈΠ·ΠΏΡ€Π°Ρ‚Π΅Π½ΠΈ Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°. 

`outgoing_amount` ΠΎΠ±Ρ‰ΠΎΡ‚ΠΎ количСство Π³Ρ€Π°ΠΌΠΎΠ²Π΅, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ ΠΈΠ·ΠΏΡ€Π°Ρ‚Π΅Π½ΠΎ Π½Π° ΠΏΠΎΠ±Π΅Π΄ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅. 

`owner_wc` Π½ΠΎΠΌΠ΅Ρ€ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π½Π°Ρ‚Π° Π²Π΅Ρ€ΠΈΠ³Π°, 32-Π±ΠΈΡ‚ΠΎΠ²o (Π½Π° някои мСста сС посочва, Ρ‡Π΅ Π΅ 8-Π±ΠΈΡ‚ΠΎΠ²o) цяло число. Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚ само Π΄Π²Π΅ -1 ΠΈ 0. 

`owner_account_id` 256-Π±ΠΈΡ‚ΠΎΠ²o цяло ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π½ΠΎ число, адрСс Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° Π² Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π½Π° Π²Π΅Ρ€ΠΈΠ³Π°. 

`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.

ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° owner_private_key
ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° owner_public_key 
ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° orders
ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° owner_wc
ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° owner_account_id

".\/keys\/owner.pk" Ρ„Π°ΠΉΠ»&gt;B owner_private_key !
owner_private_key @ priv&gt;pub owner_public_key !
dictnew orders !
0 owner_wc !
0 owner_account_id !

<b 0 32 u, owner_public_key @ b, gram, owner_wc i, owner_account_id 256 orders dict, b> ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ !

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

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

ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅_Π·Π°_подписванС
ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅_Π·Π°_ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅
ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΎ подпис
<b 0 32 u, b> ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅_Π·Π°_подписванС !
ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅_Π·Π°_подписванС @ Ρ…Π°Ρˆ собствСник_Π½Π°_частСн_ΠΊΠ»ΡŽΡ‡ @ ed25519_sign_uint подпис !
<b signature @ b, 0 32 u, b> &lt;s !  

Π’ ΠΊΡ€Π°ΠΉΠ½Π° смСтка ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΠΌ Π² смарт Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π°, Π΅ записано Π² ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° 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() Ρ‰Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ°ΠΌΠ΅ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ.

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

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

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

<b 0 32 u, 1 @ 7 new_owner_wc i, new_owner_account_id 256 b> ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅_Π·Π°_подписванС !

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

Π’Ρ€ΡŠΠ·ΠΊΠ° към ΠΊΠΎΠΌΠΈΡ‚ с добавянСто Π½Π° тСст.

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

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

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

Π‘Π΅Π³Π° Ρ‰Π΅ напишСм Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π·Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° ΡƒΠΊΠ°Π·Π°Π½ΠΎΡ‚ΠΎ количСство Π³Ρ€Π°ΠΌΠΎΠ²Π΅ Π½Π° записания ΠΏΠΎ-Ρ€Π°Π½ΠΎ адрСс.

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

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

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 <= ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° int_msg_info$0 
    ;;  .store_uint(1, 1) ;; 1 <= ihr Π΅ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½
    ;;  .store_uint(1, 1) ;; 1 <= ΠΏΡ€ΡƒΠΆΠΈΠ½Π° = вярно
    ;;  .store_uint(0, 1) ;; 0 <= ΠΏΡ€ΡƒΠΆΠΈΠ½Π°Ρ‚Π° = нСвярно
    ;;  .store_uint(4, 5)  ;; 00100 <= ΠΎΠΏΡ†ΠΈΠΈ Π·Π° адрСс, anycast = нСвярно, 8-Π±ΠΈΡ‚ΠΎΠ²Π° Ρ€Π°Π±ΠΎΡ‚Π½Π° Π²Π΅Ρ€ΠΈΠ³Π°
        .store_uint (196, 9)
        .store_int(wc, 8)
        .store_uint(addr, 256)
        .store_grams(grams)
        .store_uint(0, 107) ;; 106 Π½ΡƒΠ»ΠΈ + 0 ΠΊΠ°Ρ‚ΠΎ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Ρ‡Π΅ няма ΠΊΠ»Π΅Ρ‚ΠΊΠ° с Π΄Π°Π½Π½ΠΈΡ‚Π΅.
        .end_cell(); 
    send_raw_message(msg, 3); ;; Ρ€Π΅ΠΆΠΈΠΌ, 2 Π·Π° ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°Π½Π΅ Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ, 1 Π·Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Ρ‡ΡŠΡ‚ Π΄Π° ΠΏΠ»Π°Ρ‰Π° такси, 64 Π·Π° Π²Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° стойността Π½Π° входящото ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅
}

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

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-Π±ΠΈΡ‚ΠΎΠ²ΠΎ цяло число, ΠΊΠΎΠ΅Ρ‚ΠΎ отговаря Π·Π° workchain ΠΈ 256-Π±ΠΈΡ‚ΠΎΠ²ΠΎ Π½Π΅ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»Π½ΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»Π½ΠΎ число Π½Π° Π°ΠΊΠ°ΡƒΠ½Ρ‚Π° Π² Ρ‚ΠΎΠ·ΠΈ workchain. НапримСр, -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, която измСствa стСка, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π½Π° Π²ΡŠΡ€Ρ…Π° Π½Π° стСка сС ΠΎΠΊΠ°Π·Π²Π° уникалният Π½ΠΎΠΌΠ΅Ρ€ Π½Π° смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°:

"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) { ;; ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°ΠΉ Π²ΡŠΡ€Π½Π°Ρ‚ΠΈΡ‚Π΅
        return ();
    }
    if (order_amount < 500000000) { ;; просто ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΉ Π³Ρ€Π°ΠΌΠΈ Π±Π΅Π· Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΡΡˆ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ 
        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() = 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));
}

И Ρ‚ΠΎΠ²Π° Π΅ всичко. Π‘ΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π°Ρ‰ΠΈΡΡ‚ ΠΊΠΎΠΌΠΈΡ‚.

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

Π©Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π³Π΅Ρ‚-ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ. Π—Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ информация Π·Π° смартконтракта, Ρ‰Π΅ пишСм ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ.

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π·Π°Π±Ρ€Π°Π²ΠΈΡ… Π΄Π° добавя ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½Π°Ρ‚Π° заявка, която сС ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° ΠΏΡ€ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°. Π‘ΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π°Ρ‰ΠΈΡΡ‚ ΠΊΠΎΠΌΠΈΡ‚. И ΠΎΡ‰Π΅ ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Ρ… бъг с ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅Ρ‚ΠΎ Π½Π° 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 
(Π—Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° адрСса Π² Ρ„Π°ΠΉΠ»Π° lottery.addr)
НСобратим адрСс (Π·Π° инициализация): 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd
ΠžΠ±Ρ€Π°Ρ‚ΠΈΠΌ адрСс (Π·Π° ΠΏΠΎ-късСн Π΄ΠΎΡΡ‚ΡŠΠΏ): kQAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8KpFY

Π—Π° интСрСс Ρ‰Π΅ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅ Π² TON

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

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

ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π°ΠΊΠ°ΡƒΠ½Ρ‚Π° Π΅ ΠΏΡ€Π°Π·Π½ΠΎ

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

> getaccount 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd

Π“Π»Π΅Π΄Π°, Ρ‡Π΅ Π² ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° сС Π΅ появил Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½ (ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅: account_uninit) смартконтракт с Ρ‚Π°ΠΊΡŠΠ² адрСс ΠΈ баланс ΠΎΡ‚ 1 000 000 000 Π½Π°Π½ΠΎΠ³Ρ€Π°ΠΌΠ°.

ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π°ΠΊΠ°ΡƒΠ½Ρ‚Π° Π΅ (Π°ΠΊΠ°ΡƒΠ½Ρ‚
  адрСс:(addr_std
    anycast:nothing workchain_id:0 address:x044910149DBEAF8EADBB2B28722E7D6A2DC6E264EC2F1D9BEBD6FB209079BC2A)
  storage_stat:(storage_info
    used:(storage_used
      ΠΊΠ»Π΅Ρ‚ΠΊΠΈ:(var_uint len:1 value:1)
      Π±ΠΈΡ‚ΠΎΠ²Π΅:(var_uint len:1 value:103)
      ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΈ_ΠΊΠ»Π΅Ρ‚ΠΊΠΈ:(var_uint len:0 value:0)) послСдно ΠΏΠ»Π°Ρ‚Π΅Π½ΠΎ:1583257959
    дълТима сума:nothing)
  склад:(account_storage last_trans_lt:3825478000002
    баланс:(Π²Π°Π»ΡƒΡ‚ΠΈ
      Π³Ρ€Π°ΠΌΠΎΠ²Π΅:(Π½Π°Π½ΠΎΠ³Ρ€Π°ΠΌΠΈ
        сума:(var_uint len:4 value:2000000000))
      Π΄Ρ€ΡƒΠ³ΠΈ:(extra_currencies
        dict:hme_empty))
    ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅:account_uninit))
x{C00044910149DBEAF8EADBB2B28722E7D6A2DC6E264EC2F1D9BEBD6FB209079BC2A20259C2F2F4CB3800000DEAC10776091DCD650004_}
послСдна транзакция lt = 3825478000001 Ρ…Π΅Ρˆ = B043616AE016682699477FFF01E6E903878CDFD6846042BA1BFC64775E7AC6C4
Π±Π°Π»Π°Π½ΡΡŠΡ‚ Π½Π° Π°ΠΊΠ°ΡƒΠ½Ρ‚Π° Π΅ 2000000000ng

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

> sendfile lottery-query.boc
[ 1][t 2][1583008371.631410122][lite-client.cpp:966][!testnode] ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅ ΠΎΡ‚ Ρ„Π°ΠΉΠ» lottery-query.boc
[ 3][t 1][1583008371.828550100][lite-client.cpp:976][!query]    статус Π½Π° външно ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π΅ 1 

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

> last
> getaccount 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd

Π‘Ρ€Π΅Π΄ Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ Π½Π΅Ρ‰Π°, ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅.

  склад:(account_storage last_trans_lt:3825499000002
    баланс:(Π²Π°Π»ΡƒΡ‚ΠΈ
      Π³Ρ€Π°ΠΌΠΎΠ²Π΅:(Π½Π°Π½ΠΎΠ³Ρ€Π°ΠΌΠΈ
        сума:(var_uint len:4 value:1987150999))
      Π΄Ρ€ΡƒΠ³ΠΈ:(extra_currencies
        dict:hme_empty))
    ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅:(account_active

Π’ΠΈΠΆΠ΄Π°ΠΌΠ΅, Ρ‡Π΅ account_active.

Π‘ΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π°Ρ‰ΠΈΡΡ‚ ΠΊΠΎΠΌΠΈΡ‚ с ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Ρ‚ΡƒΠΊ.

Π‘Π΅Π³Π° Ρ‰Π΅ създадСм запитвания Π·Π° взаимодСйствиС със смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°.

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

Π’Π°ΠΊΠΎΠ²Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Ρ‰Π΅ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΠΌ Π½Π° смартконтракта, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ msg_seqno 165, дСйствиС 2 ΠΈ 9.5 Π³Ρ€Π°ΠΌΠΎΠ²Π΅ Π·Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅.

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

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

ΠŸΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ информация ΠΎΡ‚ смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° GET ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ

Π‘Π΅Π³Π° Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊ Π΄Π° стартирамС GET ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ Π½Π° смартконтракта.

Π—Π°ΠΏΠΎΡ‡Π²Π°ΠΌΠ΅ lite-client, ΠΈ стартирамС GET ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ написахмС.

$ .\/lite-client\/lite-client -C ton-lite-client-test1.config.json
> runmethod 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd balance
Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ:  [ 104128 ] 
Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚:  [ 64633878952 ] 
...

Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° стойността, която Π²Ρ€ΡŠΡ‰Π° функцията balance() ΠΎΡ‚ нашия смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚.
Π‘ΡŠΡ‰ΠΎΡ‚ΠΎ Ρ‰Π΅ изпълним ΠΈ Π·Π° ΠΎΡ‰Π΅ няколко ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

> runmethod 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd get_seqno
...
Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ:  [ 77871 ] 
Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚:  [ 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 ΠΈ GET ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ, Π·Π° Π΄Π° ΠΈΠ·Π²Π»Π΅Ρ‡Π΅ΠΌ информация Π·Π° смарт Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π° Π½Π° сайта.

ПоказвамС Π΄Π°Π½Π½ΠΈ Π·Π° смарт Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π° Π½Π° сайта

Написах прост уСбсайт Π½Π° 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

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

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