Как Π΄Π° напишСм ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°ΠΌΠ΅ смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ Π² 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] вСрсия Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° Π΅ 1.1, Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ 7
[ 3][t 2][1582054823.085725069][lite-client.cpp:286][!testnode] Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° Π΅ 1582054823 (Π΄Π΅Π»Ρ‚Π° 0)
...

МоТС Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° help ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΊΠ°ΠΊΠ²ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ са Π½Π°Π»ΠΈΡ‡Π½ΠΈ.

help

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

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

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

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

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

runmethod  []    стартира 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 ΠΊΠΎΡ€Ρ‚Π΅ΠΆ 0x076ef1ea , // магия
0 , 0 , // дСйствия msg_sents
1570998536 , // unix_time
1 , 1 , 3 , // block_lt, trans_lt, rand_seed
0 ΠΊΠΎΡ€Ρ‚Π΅ΠΆ 100000000000000 , dictnew , , // ΠΎΡΡ‚Π°Π²ΡˆΠΈΠΉΡΡ баланс
0 , dictnew , // contract_address, global_config
1 ΠΊΠΎΡ€Ρ‚Π΅ΠΆ // ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ
константа c7

0 константа recv_internal // для выполнСния recv_internal()
-1 константа recv_external // для Π²Ρ‹Π·ΠΎΠ²Π° recv_external()

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

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

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

БъздадСм ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΈ Ρ‰Π΅ запишСм Π² нСя ΠΏΡ€Π°Π·Π΅Π½ cell, Ρ‚ΠΎΠ²Π° Ρ‰Π΅ бъдС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π½Π° смарт Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π°.

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

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

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

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

ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ @ 
recv_external 
ΠΊΠΎΠ΄ 
ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ @ 
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> ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ !
<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: 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.

ДобавямС Π² 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-Π±ΠΈΡ‚ΠΎΠ²o цяло ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π½ΠΎ число, ΠΏΡƒΠ±Π»ΠΈΡ‡Π΅Π½ ΠΊΠ»ΡŽΡ‡, с ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ провСрявамС подписа Π½Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎΡ‚ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΡ‚ Π²ΡŠΠ½ΡˆΠ½Π°Ρ‚Π° страна, Π·Π° ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ. 

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

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

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

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

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

БъздавамС ΠΏΠ°ΠΏΠΊΠ° ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ във ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° 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()ΠΈ записвамС Π² ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅.

ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° 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> ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ !

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

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

ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° message_to_sign
ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° message_to_send
ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° 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> &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() Π©Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ°ΠΌΠ΅ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ.

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

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

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

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

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

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

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

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

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

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

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

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

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 <= bounce = вярно
    ;;  .store_uint(0, 1) ;; 0 <= bounced = нСвярно
    ;;  .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, которая сдвигаСт стСк Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ оказываСтся ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€ смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°:

"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));
}

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

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

Π”ΠΎΠ±Π°Π²ΠΈΠΌ 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 
(ЗаписванС Π½Π° адрСса Π² Ρ„Π°ΠΉΠ» 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 Π½Π°Π½ΠΎΠ³Ρ€Π°ΠΌΠ°.

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

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

> ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈ Ρ„Π°ΠΉΠ» 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 

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

> послСдно
> getaccount 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd

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

  storage:(account_storage last_trans_lt:3825499000002
    баланс:(Π²Π°Π»ΡƒΡ‚ΠΈ
      Π³Ρ€Π°ΠΌΠΎΠ²Π΅:(Π½Π°Π½ΠΎΠ³Ρ€Π°ΠΌ
        количСство:(var_uint len:4 стойност:1987150999))
      Π΄Ρ€ΡƒΠ³ΠΈ:(Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ Π²Π°Π»ΡƒΡ‚ΠΈ
        dict:hme_empty))
    ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅:(account_active

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

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

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

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

Π’Π°ΠΊΠΎΠ²Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Ρ‰Π΅ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΠΌ Π½Π° смартконтракта, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ msg_seqno 165, action 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 баланс
Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ:  [ 104128 ] 
Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚:  [ 64633878952 ] 
...

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

> 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 ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π·Π° ΠΈΠ·Π²Π»ΠΈΡ‡Π°Π½Π΅, Π·Π° Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ информация Π·Π° смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° Π½Π° сайта.

ПоказвамС Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° Π½Π° сайта

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