Π ΡΠΎΠΌ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΈ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ Π² TON
Π ΡΠ΅ΠΌ ΡΡΠ° ΡΡΠ°ΡΡΡ?
Π ΡΡΠ°ΡΡΠ΅ Ρ ΡΠ°ΡΡΠΊΠ°ΠΆΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΡΡΠ°ΡΡΠ²ΠΎΠ²Π°Π» Π² ΠΏΠ΅ΡΠ²ΠΎΠΌ (ΠΈΠ· Π΄Π²ΡΡ ) ΠΊΠΎΠ½ΠΊΡΡΡΠ΅ Telegram ΠΏΠΎ Π±Π»ΠΎΠΊΡΠ΅ΠΉΠ½Ρ, Π½Π΅ Π·Π°Π½ΡΠ» ΠΏΡΠΈΠ·ΠΎΠ²ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ ΠΈ ΡΠ΅ΡΠΈΠ» Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠΏΡΡ Π² ΡΡΠ°ΡΡΠ΅, ΡΡΠΎΠ±Ρ ΠΎΠ½ Π½Π΅ ΠΊΠ°Π½ΡΠ» Π² ΠΠ΅ΡΡ ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΠΌΠΎΠ³ ΠΊΠΎΠΌΡ-Π½ΠΈΠ±ΡΠ΄Ρ.
Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΠ½Π΅ Π½Π΅ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ ΠΏΠΈΡΠ°ΡΡ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΉ ΠΊΠΎΠ΄, Π° ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ-ΡΠΎ ΡΠ°Π±ΠΎΡΠ΅Π΅, Π΄Π»Ρ ΡΡΠ°ΡΡΠΈ Ρ Π½Π°ΠΏΠΈΡΠ°Π» ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ ΠΌΠΎΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΡ Π»ΠΎΡΠ΅ΡΠ΅Ρ ΠΈ ΡΠ°ΠΉΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ° Π½Π°ΠΏΡΡΠΌΡΡ ΠΈΠ· TON Π±Π΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΡ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡ.
Π‘ΡΠ°ΡΡΡ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»Π΅Π·Π½Π° ΡΠ΅ΠΌ, ΠΊΡΠΎ Ρ ΠΎΡΠ΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ²ΠΎΠΉ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ Π² TON, Π½ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ Ρ ΡΠ΅Π³ΠΎ Π½Π°ΡΠ°ΡΡ.
ΠΠ° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π»ΠΎΡΠ΅ΡΠ΅ΠΈ Ρ ΠΏΡΠΎΠΉΠ΄Ρ ΠΎΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Π΄ΠΎ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ Π½ΠΈΠΌ ΠΈ Π½Π°ΠΏΠΈΡΡ ΡΠ°ΠΉΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ Π΄Π°Π½Π½ΡΡ .
ΠΠ± ΡΡΠ°ΡΡΠΈΠΈ Π² ΠΊΠΎΠ½ΠΊΡΡΡΠ΅
Π ΠΎΠΊΡΡΠ±ΡΠ΅ ΠΏΡΠΎΡΠ»ΠΎΠ³ΠΎ Π³ΠΎΠ΄Π° Telegram ΠΎΠ±ΡΡΠ²ΠΈΠ» ΠΊΠΎΠ½ΠΊΡΡΡ ΠΏΠΎ Π±Π»ΠΎΠΊΡΠ΅ΠΉΠ½Ρ Ρ Π½ΠΎΠ²ΡΠΌΠΈ ΡΠ·ΡΠΊΠ°ΠΌΠΈ Fift
ΠΈ FunC
. ΠΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π½Π° Π²ΡΠ±ΠΎΡ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π»ΡΠ±ΡΠ΅ ΠΈΠ· ΠΏΡΡΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΡΡ
ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠΎΠ². Π― ΠΏΠΎΡΡΠΈΡΠ°Π», ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π½Π΅ΠΏΠ»ΠΎΡ
ΠΎ Π·Π°Π½ΡΡΡΡΡ ΡΠ΅ΠΌ-ΡΠΎ Π½Π΅ΠΎΠ±ΡΡΠ½ΡΠΌ, ΠΈΠ·ΡΡΠΈΡΡ ΡΠ·ΡΠΊ ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ Π½Π΅ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΏΠΈΡΠ°ΡΡ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ Π΅ΡΠ΅. ΠΠ»ΡΡ, ΡΠ΅ΠΌΠ° ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Π½Π° ΡΠ»ΡΡ
Ρ.
Π‘ΡΠΎΠΈΡ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΎΠΏΡΡΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠΎΠ² Ρ ΠΌΠ΅Π½Ρ Π½Π΅ Π±ΡΠ»ΠΎ.
Π― ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π» ΡΡΠ°ΡΡΠ²ΠΎΠ²Π°ΡΡ Π΄ΠΎ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ° ΠΏΠΎΠΊΠ° ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΈ ΠΏΠΎΡΠ»Π΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΎΠ±Π·ΠΎΡΠ½ΡΡ ΡΡΠ°ΡΡΡ, Π½ΠΎ Π·Π°ΡΠ΅ΠΉΠ»ΠΈΠ»ΡΡ ΡΡΠ°Π·Ρ Π½Π° ΠΏΠ΅ΡΠ²ΠΎΠΌ. Π― FunC
ΠΈ ΠΎΠ½ Π² ΠΎΠ±ΡΠ΅ΠΌ ΡΠ°Π±ΠΎΡΠ°Π». ΠΠ° ΠΎΡΠ½ΠΎΠ²Ρ Π²Π·ΡΠ»
ΠΠ° ΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ Ρ ΠΏΠΎΡΡΠΈΡΠ°Π», ΡΡΠΎΠ³ΠΎ ΡΠΎΡΠ½ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ Π·Π°Π½ΡΡΡ Ρ ΠΎΡΡ Π±Ρ ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ ΠΏΡΠΈΠ·ΠΎΠ²ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ. Π ΠΈΡΠΎΠ³Π΅ ΠΎΠΊΠΎΠ»ΠΎ 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
ΠΡΠ»ΠΈ ΡΠ±ΠΎΡΠΊΠ° ΠΏΡΠΎΡΠ»Π° ΡΡΠΏΠ΅ΡΠ½ΠΎ, ΡΠΎ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ Π»ΠΎΠ³ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π»Π°ΠΉΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΊ Π½ΠΎΠ΄Π΅.
[ 1][t 2][1582054822.963129282][lite-client.h:201][!testnode] conn ready
[ 2][t 2][1582054823.085654020][lite-client.cpp:277][!testnode] server version is 1.1, capabilities 7
[ 3][t 2][1582054823.085725069][lite-client.cpp:286][!testnode] server time is 1582054823 (delta 0)
...
ΠΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ help
ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄ΠΎΡΡΡΠΏΠ½Ρ.
help
ΠΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅.
list of available commands:
last Get last block and state info from server
sendfile <filename> Load a serialized message from <filename> and send it to server
getaccount <addr> [<block-id-ext>] Loads the most recent state of specified account; <addr> is in [<workchain>:]<hex-or-base64-addr> format
runmethod <addr> [<block-id-ext>] <method-id> <params>... Runs GET method <method-id> of account <addr> with specified parameters
last ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π±Π»ΠΎΠΊ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°.
sendfile <filename> ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π² TON ΡΠ°ΠΉΠ» Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ, ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΡΠ±Π»ΠΈΠΊΡΠ΅ΡΡΡ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ ΠΈ Π·Π°ΠΏΡΡΠΎΡΡ ΠΊ Π½Π΅ΠΌΡ.
getaccount <addr> Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ° Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌ Π°Π΄ΡΠ΅ΡΠΎΠΌ.
runmethod <addr> [<block-id-ext>] <method-id> <params> Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ get-ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠΌΠ°ΡΡΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°.
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ Π³ΠΎΡΠΎΠ²Ρ ΠΊ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ
ΠΠ΄Π΅Ρ
ΠΠ°ΠΊ ΡΠΆΠ΅ ΠΏΠΈΡΠ°Π» Π²ΡΡΠ΅, ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΏΠΈΡΠ΅ΠΌ ΡΡΠΎ Π»ΠΎΡΠ΅ΡΠ΅Ρ.
ΠΡΠΈΡΠ΅ΠΌ ΡΡΠΎ Π½Π΅ Π»ΠΎΡΠ΅ΡΠ΅Ρ Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π°Π΄ΠΎ ΠΊΡΠΏΠΈΡΡ Π±ΠΈΠ»Π΅Ρ ΠΈ ΠΆΠ΄Π°ΡΡ ΡΠ°Ρ, Π΄Π΅Π½Ρ ΠΈΠ»ΠΈ ΠΌΠ΅ΡΡΡ, Π° ΠΌΠΎΠΌΠ΅Π½ΡΠ°Π»ΡΠ½Π°Ρ Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡ Π½Π° Π°Π΄ΡΠ΅Ρ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ° N
Π³ΡΠ°ΠΌΠΎΠ², ΠΈ ΠΌΠΎΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ 2 * N
Π³ΡΠ°ΠΌΠΎΠ² ΠΈΠ»ΠΈ ΠΏΡΠΎΠΈΠ³ΡΡΠ²Π°Π΅Ρ. ΠΠ΅ΡΠΎΡΡΠ½ΠΎΡΡΡ ΠΏΠΎΠ±Π΅Π΄Ρ ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΠΎΠΊΠΎΠ»ΠΎ 40%. ΠΡΠ»ΠΈ Π³ΡΠ°ΠΌΠΎΠ² Π΄Π»Ρ Π²ΡΠΏΠ»Π°ΡΡ Π½Π΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΡΠΎ Π±ΡΠ΄Π΅ΠΌ ΡΡΠΈΡΠ°ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ ΠΏΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ.
ΠΡΠΈΡΠ΅ΠΌ Π²Π°ΠΆΠ½ΠΎ ΡΡΠΎΠ±Ρ ΡΡΠ°Π²ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π²ΠΈΠ΄Π΅ΡΡ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ Π² ΡΠ΄ΠΎΠ±Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΡΠ°Π·Ρ ΠΌΠΎΠ³ ΠΏΠΎΠ½ΡΡΡ Π²ΡΠΈΠ³ΡΠ°Π» ΠΎΠ½ ΠΈΠ»ΠΈ ΠΏΡΠΎΠΈΠ³ΡΠ°Π». ΠΠΎΡΡΠΎΠΌΡ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π²Π΅Π±-ΡΠ°ΠΉΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ ΡΡΠ°Π²ΠΊΠΈ ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π½Π°ΠΏΡΡΠΌΡΡ ΠΈΠ· TON.
ΠΠ°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°
ΠΠ»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° Ρ ΡΠ΄Π΅Π»Π°Π» ΠΏΠΎΠ΄ΡΡΠ²Π΅ΡΠΊΡ ΠΊΠΎΠ΄Π° Π΄Π»Ρ FunC, ΠΏΠ»Π°Π³ΠΈΠ½ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π² ΠΏΠΎΠΈΡΠΊΠ΅ Visual Studio Code, Π΅ΡΠ»ΠΈ Π²Π΄ΡΡΠ³ Π·Π°Ρ ΠΎΡΠ΅ΡΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΠΎ-ΡΠΎ, ΡΠΎ Π²ΡΠ»ΠΎΠΆΠΈΠ» ΠΏΠ»Π°Π³ΠΈΠ½ Π² ΠΎΡΠΊΡΡΡΡΠΉ Π΄ΠΎΡΡΡΠΏ. Π’Π°ΠΊΠΆΠ΅ ΡΠ°Π½Π΅Π΅ ΠΊΠ΅ΠΌ-ΡΠΎ Π±ΡΠ» ΡΠ΄Π΅Π»Π°Π½ ΠΏΠ»Π°Π³ΠΈΠ½ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Fift, ΡΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π½Π°ΠΉΡΠΈ Π² VSC.
Π‘ΡΠ°Π·Ρ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΠΊΡΠ΄Π° Π±ΡΠ΄Π΅ΠΌ ΠΊΠΎΠΌΠΈΡΠΈΡΡ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ.
Π§ΡΠΎΠ±Ρ ΠΎΠ±Π»Π΅Π³ΡΠΈΡΡ ΡΠ΅Π±Π΅ ΠΆΠΈΠ·Π½Ρ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΠΈΡΠ°ΡΡ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ, Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ ΠΏΠΎΠΊΠ° ΠΎΠ½ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π³ΠΎΡΠΎΠ². Π’ΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΎΠΏΡΠ±Π»ΠΈΠΊΡΠ΅ΠΌ Π΅Π³ΠΎ Π² TON.
Π£ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ° Π΅ΡΡΡ Π΄Π²Π° Π²Π½Π΅ΡΠ½ΠΈΡ
ΠΌΠ΅ΡΠΎΠ΄Π° ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ. ΠΠ΅ΡΠ²ΡΠΉ, recv_external()
ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΊΠΎΠ³Π΄Π° Π·Π°ΠΏΡΠΎΡ ΠΊ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΡ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΠΈΠ· Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΠΌΠΈΡΠ°, ΡΠΎ Π΅ΡΡΡ Π½Π΅ ΠΈΠ· TON, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΡΠ°ΠΌΠΈ ΡΠΎΡΠΌΠΈΡΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ Π΅Π³ΠΎ ΡΠ΅ΡΠ΅Π· lite-client. ΠΡΠΎΡΠΎΠΉ, recv_internal()
ΡΡΠΎ ΠΊΠΎΠ³Π΄Π° Π²Π½ΡΡΡΠΈ ΡΠ°ΠΌΠΎΠ³ΠΎ TON ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ ΠΎΠ±ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊ Π½Π°ΡΠ΅ΠΌΡ. Π ΠΎΠ±ΠΎΠΈΡ
ΡΠ»ΡΡΠ°ΡΡ
ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π² ΡΡΠ½ΠΊΡΠΈΡ.
ΠΠ°Π²Π°ΠΉΡΠ΅ Π½Π°ΡΠ½Π΅ΠΌ Ρ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΅ΡΠ»ΠΈ Π΅Π³ΠΎ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡ, Π½ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠΈ Π² Π½Π΅ΠΌ Π½Π΅Ρ.
() recv_internal(slice in_msg) impure {
;; TODO: implementation
}
() recv_external(slice in_msg) impure {
;; TODO: implementation
}
Π’ΡΡ Π½Π°Π΄ΠΎ ΠΏΠΎΡΡΠ½ΠΈΡΡ ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ slice
. ΠΡΠ΅ Ρ
ΡΠ°Π½ΡΡΠΈΠ΅Π΅ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² TON Blockchain ΡΡΠΎ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ TVM cell
ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ cell
, Π² ΡΠ°ΠΊΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ
ΡΠ°Π½ΠΈΡΡ Π΄ΠΎ 1023 Π±ΠΈΡ Π΄Π°Π½Π½ΡΡ
ΠΈ Π΄ΠΎ 4 ΡΡΡΠ»ΠΎΠΊ Π½Π° Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ΅ΠΉΠΊΠΈ.
TVM cell slice
ΠΈΠ»ΠΈ slice
ΡΡΠΎ ΡΠ°ΡΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ cell
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π΅Π΅ ΠΏΠ°ΡΡΠΈΠ½Π³Π°, Π΄Π°Π»ΡΡΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ½ΡΡΠ½ΠΎ. ΠΠ»Π°Π²Π½ΠΎΠ΅ Π΄Π»Ρ Π½Π°Ρ, ΡΡΠΎ Π² ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ slice
ΠΈ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π²ΠΈΠ΄Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² recv_external()
ΠΈΠ»ΠΈ recv_internal()
.
impure
β ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΠΎ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°.
Π‘ΠΎΡ
ΡΠ°Π½ΠΈΠΌ ΠΊΠΎΠ΄ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ° Π² lottery-code.fc
ΠΈ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ.
~/TON/build/crypto/func -APSR -o lottery-compiled.fif ~/TON/ton/crypto/smartcont/stdlib.fc ./lottery-code.fc
ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π°Π³ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
~/TON/build/crypto/func -help
Π£ Π½Π°Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΡΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Fift-Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ ΠΊΠΎΠ΄ Π² lottery-compiled.fif
:
// lottery-compiled.fif
"Asm.fif" include
// automatically generated from `/Users/rajymbekkapisev/TON/ton/crypto/smartcont/stdlib.fc` `./lottery-code.fc`
PROGRAM{
DECLPROC recv_internal
DECLPROC recv_external
recv_internal PROC:<{
// in_msg
DROP //
}>
recv_external PROC:<{
// in_msg
DROP //
}>
}END>c
ΠΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ, Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅.
ΠΠ°ΠΌΠ΅ΡΠΈΠΌ, ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΡΠΎΡΠΊΠΎΠΉ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Asm.fif
, ΡΡΠΎ ΠΊΠΎΠ΄ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π½Π° Fift Π΄Π»Ρ Fift-Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ°.
Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ Ρ
ΠΎΡΠΈΠΌ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ°ΠΉΠ» lottery-test-suite.fif
ΠΈ ΡΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌ ΡΡΠ΄Π° ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ Π·Π°ΠΌΠ΅Π½ΠΈΠ² Π² Π½Π΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΡΡΠΎΡΠΊΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΊΠΎΠ΄ ΡΠΌΠ°ΡΡΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ° Π² ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ code
, ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠΎΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Π³ΠΎ Π² Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ:
"TonUtil.fif" include
"Asm.fif" include
PROGRAM{
DECLPROC recv_internal
DECLPROC recv_external
recv_internal PROC:<{
// in_msg
DROP //
}>
recv_external PROC:<{
// in_msg
DROP //
}>
}END>s constant code
ΠΠΎΠΊΠ° Π²ΡΠΎΠ΄Π΅ ΠΏΠΎΠ½ΡΡΠ½ΠΎ, ΡΠ΅ΠΏΠ΅ΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² ΡΠΎΡ ΠΆΠ΅ ΡΠ°ΠΉΠ» ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»Π»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° TVM.
0 tuple 0x076ef1ea , // magic
0 , 0 , // actions msg_sents
1570998536 , // unix_time
1 , 1 , 3 , // block_lt, trans_lt, rand_seed
0 tuple 100000000000000 , dictnew , , // remaining balance
0 , dictnew , // contract_address, global_config
1 tuple // wrap to another tuple
constant c7
0 constant recv_internal // to run recv_internal()
-1 constant recv_external // to invoke recv_external()
Π c7
ΠΌΡ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ, ΡΠΎ Π΅ΡΡΡ Π΄Π°Π½Π½ΡΠ΅ Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ TVM (ΠΈΠ»ΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ΅ΡΠΈ). ΠΡΠ΅ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠ½ΠΊΡΡΡΠ° ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΏΠΎΠΊΠ°Π·Π°Π» ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ c7
ΠΈ Ρ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π». Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Π½Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΌΠ΅Π½ΡΡΡ rand_seed
ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΡ Π½Π΅Π³ΠΎ Π·Π°Π²ΠΈΡΠΈΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° ΠΈ Π½Π΅ ΠΌΠ΅Π½ΡΡΡ, ΡΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ ΡΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΡΠΈΡΠ»ΠΎ.
recv_internal
ΠΈ recv_external
ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ 0 ΠΈ -1 Π±ΡΠ΄ΡΡ ΠΎΡΠ²Π΅ΡΠ°ΡΡ Π·Π° Π²ΡΠ·ΠΎΠ² ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²ΡΡΡΠΈΡ
ΡΡΠ½ΡΠΈΠΉ Π² ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ΅.
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ Π³ΠΎΡΠΎΠ²Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ΅ΡΡ ΠΊ Π½Π°ΡΠ΅ΠΌΡ ΠΏΡΡΡΠΎΠΌΡ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΡ. ΠΠ»Ρ Π½Π°Π³Π»ΡΠ΄Π½ΠΎΡΡΠΈ ΠΏΠΎΠΊΠ° Π²ΡΠ΅ ΡΠ΅ΡΡΡ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π² ΡΡΠΎΡ ΠΆΠ΅ ΡΠ°ΠΉΠ» lottery-test-suite.fif
.
Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ storage
ΠΈ Π·Π°ΠΏΠΈΡΠ΅ΠΌ Π² Π½Π΅Π΅ ΠΏΡΡΡΠΎΠΉ cell
, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°.
message
ΡΡΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΡΠΎΠ΅ ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΄ΠΈΠΌ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΡ ΠΈΠ·Π²Π½Π΅. ΠΠ³ΠΎ ΡΠΎΠΆΠ΅ ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΠΏΠΎΠΊΠ° ΠΏΡΡΡΡΠΌ.
variable storage
<b b> storage !
variable message
<b b> message !
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΌΡ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΠ»ΠΈ ΠΊΠΎΠ½Π°ΡΡΠ°Π½ΡΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΌΡ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ TVM Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ runvmctx
ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π½Π° Π²Ρ
ΠΎΠ΄.
message @
recv_external
code
storage @
c7
runvmctx
Π ΠΈΡΠΎΠ³Π΅ Ρ Π½Π°Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ Fift
.
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΠΎΠ»ΡΡΡΠΈΠ²ΡΠΈΠΉΡΡ ΠΊΠΎΠ΄.
export FIFTPATH=~/TON/ton/crypto/fift/lib // Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· Π΄Π»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π°
~/TON/build/crypto/fift -s lottery-test-suite.fif
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΡΡΠ°Π±ΠΎΡΠ°ΡΡ Π±Π΅Π· ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ Π² Π²ΡΠ²ΠΎΠ΄Π΅ ΡΠ²ΠΈΠ΄ΠΈΠΌ Π»ΠΎΠ³ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ:
execute SETCP 0
execute DICTPUSHCONST 19 (xC_,1)
execute DICTIGETJMPZ
execute DROP
execute implicit RET
[ 3][t 0][1582281699.325381279][vm.cpp:479] steps: 5 gas: used=304, max=9223372036854775807, limit=9223372036854775807, credit=0
ΠΡΠ»ΠΈΡΠ½ΠΎ, ΠΌΡ Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ ΠΏΠ΅ΡΠ²ΡΡ ΡΠ°Π±ΠΎΡΡΡ Π²Π΅ΡΡΠΈΡ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°.
Π’Π΅ΠΏΠ΅ΡΡ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π». Π‘Π½Π°ΡΠ°Π»Π° Π·Π°ΠΉΠΌΠ΅ΠΌΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΡ ΠΈΠ· Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΠΌΠΈΡΠ° Π² recv_external()
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠ°ΠΌ Π²ΡΠ±ΠΈΡΠ°Π΅Ρ ΡΠΎΡΠΌΠ°Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½ΡΡΡ.
ΠΠΎ ΠΎΠ±ΡΡΠ½ΠΎ,
- Π²ΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π·Π°ΡΠΈΡΠΈΡΡ Π½Π°Ρ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ ΠΎΡ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΠΌΠΈΡΠ° ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊ ΡΡΠΎΠ±Ρ ΡΠΎΠ»ΡΠΊΠΎ Π²Π»Π°Π΄Π΅Π»Π΅Ρ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ° ΠΌΠΎΠ³ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ Π½Π° Π½Π΅Π³ΠΎ Π²Π½Π΅ΡΠ½ΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ.
- Π²ΠΎ-Π²ΡΠΎΡΡΡ ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ Π²Π°Π»ΠΈΠ΄Π½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² TON ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΡΡΠΎΠ±Ρ ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ ΡΠΎΠ²Π½ΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· ΠΈ ΠΏΡΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΉ ΠΎΡΠΏΡΠ°Π²ΠΊΠ΅ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ ΠΎΡΠΊΠ»ΠΎΠ½ΠΈΠ» Π΅Π³ΠΎ.
ΠΠΎΡΡΠΎΠΌΡ ΠΏΠΎΡΡΠΈ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ΅ ΡΠ΅ΡΠ°ΡΡΡΡ ΡΡΠΈ Π΄Π²Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½Π°Ρ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π²Π½Π΅ΡΠ½ΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, Π½Π°ΠΌ ΡΠΎΠΆΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ·Π°Π±ΠΎΡΠΈΡΡΡΡ ΠΎΠ± ΡΡΠΎΠΌ.
Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΠΌΡ Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ΅. Π‘Π½Π°ΡΠ°Π»Π° ΡΠ΅ΡΠΈΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΠ΅ΠΌ, Π΅ΡΠ»ΠΈ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ ΡΠΆΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π» ΡΠ°ΠΊΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π» Π΅Π³ΠΎ, ΡΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π΅Π³ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π²ΡΠΎΡΠΎΠΉ ΡΠ°Π·. Π ΠΏΠΎΡΠΎΠΌ ΡΠ΅ΡΠΈΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΡΠ΅ΠΌ ΡΡΠΎΠ±Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π½Π½ΡΠΉ ΠΊΡΡΠ³ Π»ΠΈΡ ΠΌΠΎΠ³ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΡ.
ΠΡΡΡ ΡΠ°Π·Π½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΡΠ΅ΡΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΠΌΠΈΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ. ΠΡ ΡΠ΄Π΅Π»Π°Π΅ΠΌ Π²ΠΎΡ ΠΊΠ°ΠΊ. Π ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΡΠ΅ΡΡΠΈΠΊ ΠΏΡΠΈΠ½ΡΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Ρ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ 0. Π ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΈ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΡ Π±ΡΠ΄Π΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΠ΅ΠΊΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠ΅ΡΡΠΈΠΊΠ°. ΠΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠ° Π² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΈ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Π² ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ΅, ΡΠΎ ΠΌΡ Π½Π΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌ Π΅Π³ΠΎ, Π΅ΡΠ»ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ, ΡΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌ ΠΈ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΠΌ ΡΡΠ΅ΡΡΠΈΠΊ Π² ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ΅ Π½Π° 1.
ΠΠΎΠ·ΡΠ²Π°ΡΠ°Π΅ΠΌΡΡ Π² lottery-test-suite.fif
ΠΈ Π΄ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΠΌ Π² Π½Π΅Π³ΠΎ Π²ΡΠΎΡΠΎΠΉ ΡΠ΅ΡΡ. ΠΡΠΏΡΠ°Π²ΠΈΠΌ Π½Π΅Π²Π΅ΡΠ½ΡΠΉ Π½ΠΎΠΌΠ΅Ρ, ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠΊΠΈΠ½ΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΡΡΡ Π² Π΄Π°Π½Π½ΡΡ
ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ° Ρ
ΡΠ°Π½ΠΈΡΡΡ 166, Π° ΠΌΡ ΠΎΡΠΏΡΠ°Π²ΠΈΠΌ 165.
<b 166 32 u, b> storage !
<b 165 32 u, b> message !
message @
recv_external
code
storage @
c7
runvmctx
drop
exit_code !
."Exit code " exit_code @ . cr
exit_code @ 33 - abort"Test #2 Not passed"
ΠΠ°ΠΏΡΡΡΠΈΠΌ.
~/TON/build/crypto/fift -s lottery-test-suite.fif
Π ΡΠ²ΠΈΠ΄ΠΈΠΌ ΡΡΠΎ ΡΠ΅ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ.
[ 1][t 0][1582283084.210902214][words.cpp:3046] lottery-test-suite.fif:67: abort": Test #2 Not passed
[ 1][t 0][1582283084.210941076][fift-main.cpp:196] Error interpreting file `lottery-test-suite.fif`: error interpreting included file `lottery-test-suite.fif` : lottery-test-suite.fif:67: abort": Test #2 Not passed
ΠΠ° ΡΡΠΎΠΌ ΡΡΠ°ΠΏΠ΅ lottery-test-suite.fif
Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΊΠ°ΠΊ
Π’Π΅ΠΏΠ΅ΡΡ Π΄Π°Π²Π°ΠΉΡΠ΅ Π΄ΠΎΠΏΠΈΡΠ΅ΠΌ Π»ΠΎΠ³ΠΈΠΊΡ ΡΡΠ΅ΡΡΠΈΠΊΠ° Π² ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ° Π² lottery-code.fc
.
() recv_internal(slice in_msg) impure {
;; TODO: implementation
}
() recv_external(slice in_msg) impure {
if (slice_empty?(in_msg)) {
return ();
}
int msg_seqno = in_msg~load_uint(32);
var ds = begin_parse(get_data());
int stored_seqno = ds~load_uint(32);
throw_unless(33, msg_seqno == stored_seqno);
}
Π slice in_msg
Π»Π΅ΠΆΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ.
ΠΠ΅ΡΠ²ΠΎΠ΅, ΡΡΠΎ ΠΌΡ Π΄Π΅Π»Π°Π΅ΠΌ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ Π΅ΡΠ»ΠΈ Π² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΈ Π΅ΡΡΡ Π΄Π°Π½Π½ΡΠ΅, Π΅ΡΠ»ΠΈ Π½Π΅Ρ, ΡΠΎ ΠΏΡΠΎΡΡΠΎ Π²ΡΡ ΠΎΠ΄ΠΈΠΌ.
ΠΠ°Π»Π΅Π΅ ΠΌΡ ΠΏΠ°ΡΡΠΈΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅. in_msg~load_uint(32)
Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΡΠΈΡΠ»ΠΎ 165, 32-Ρ
Π±ΠΈΡΠ½ΠΎΠ΅ unsigned int
ΠΈΠ· ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ.
ΠΠ°Π»ΡΡΠ΅ ΠΌΡ Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌ 32 Π±ΠΈΡΠ° ΠΈΠ· Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°. ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, ΡΡΠΎ Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΌ, Π΅ΡΠ»ΠΈ Π½Π΅Ρ Π²ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅. Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ Π½Π΅ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΠ΅Π΅, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΡΠ±ΡΠ°ΡΡΠ²Π°ΡΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
Π’Π΅ΠΏΠ΅ΡΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ.
~/TON/build/crypto/func -APSR -o lottery-compiled.fif ~/TON/ton/crypto/smartcont/stdlib.fc ./lottery-code.fc
ΠΠΎΠ»ΡΡΠΈΠ²ΡΠΈΠΉΡΡ ΠΊΠΎΠ΄ ΡΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌ Π² lottery-test-suite.fif
, Π½Π΅ Π·Π°Π±ΡΠ²Π°Ρ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΡΡΠΎΡΠΊΡ.
ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, ΡΡΠΎ ΡΠ΅ΡΡ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ:
~/TON/build/crypto/fift -s lottery-test-suite.fif
ΠΠ°ΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ° Π² ΡΠ°ΠΉΠ» Ρ ΡΠ΅ΡΡΠ°ΠΌΠΈ Π½Π΅ΡΠ΄ΠΎΠ±Π½ΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΡΠΊΡΠΈΠΏΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ Π·Π° Π½Π°Ρ, Π° ΠΌΡ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΠΌ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ Π² Π½Π°ΡΠΈ ΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ "include"
.
Π ΠΏΠ°ΠΏΠΊΠ΅ Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ°ΠΉΠ» build.sh
ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ΠΌ.
#!/bin/bash
~/TON/build/crypto/func -SPA -R -o lottery-compiled.fif ~/TON/ton/crypto/smartcont/stdlib.fc ./lottery-code.fc
Π‘Π΄Π΅Π»Π°Π΅ΠΌ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΌ.
chmod +x ./build.sh
Π’Π΅ΠΏΠ΅ΡΡ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ Π½Π°Ρ ΡΠΊΡΠΈΠΏΡ, ΡΡΠΎΠ±Ρ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ. ΠΠΎ ΠΊΡΠΎΠΌΠ΅ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΌ Π½Π°Π΄ΠΎ Π·Π°ΠΏΠΈΡΠ°ΡΡ Π΅Π³ΠΎ Π² ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ code
. ΠΠΎΡΡΠΎΠΌΡ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π½ΠΎΠ²ΡΠΉ ΡΠ°ΠΉΠ» lotter-compiled-for-test.fif
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈ Π²ΠΊΠ»ΡΡΠΈΠΌ Π² ΡΠ°ΠΉΠ»Π΅ lottery-test-suite.fif
.
ΠΠΎΠ±Π°Π²ΠΈΠΌ Π² sh ΡΠΊΠΈΡΠΏΡ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΡΠΎ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΊΠΎΠΌΠΏΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» Π² lotter-compiled-for-test.fif
ΠΈ ΠΌΠ΅Π½ΡΡΡ Π² Π½Π΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΡΡΠΎΡΠΊΡ.
# copy and change for test
cp lottery-compiled.fif lottery-compiled-for-test.fif
sed '$d' lottery-compiled-for-test.fif > test.fif
rm lottery-compiled-for-test.fif
mv test.fif lottery-compiled-for-test.fif
echo -n "}END>s constant code" >> lottery-compiled-for-test.fif
Π’Π΅ΠΏΠ΅ΡΡ ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, Π·Π°ΠΏΡΡΡΠΈΠΌ ΠΏΠΎΠ»ΡΡΠΈΠ²ΡΠΈΠΉΡΡ ΡΠΊΡΠΈΠΏΡ ΠΈ Ρ Π½Π°Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ ΡΠ°ΠΉΠ» lottery-compiled-for-test.fif
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Π²ΠΊΠ»ΡΡΠΈΠΌ Π² Π½Π°Ρ lottery-test-suite.fif
Π lottery-test-suite.fif
ΡΠ΄Π°Π»ΡΠ΅ΠΌ ΠΊΠΎΠ΄ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΡΡΠΎΡΠΊΡ "lottery-compiled-for-test.fif" include
.
ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΡΠ΅ΡΡΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΡΡΠΎ ΠΎΠ½ΠΈ ΠΏΡΠΎΡ ΠΎΠ΄ΡΡ.
~/TON/build/crypto/fift -s lottery-test-suite.fif
ΠΡΠ»ΠΈΡΠ½ΠΎ, ΡΠ΅ΠΏΠ΅ΡΡ, ΡΡΠΎΠ±Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π·Π°ΠΏΡΡΠΊ ΡΠ΅ΡΡΠΎΠ² ΡΠΎΠ·Π΄Π°ΠΈΠΌ ΡΠ°ΠΉΠ» test.sh
, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ½Π°ΡΠ°Π»Π° Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ build.sh
, Π° ΠΏΠΎΡΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΡΠ΅ΡΡΡ.
touch test.sh
chmod +x test.sh
ΠΠ½ΡΡΡΡ ΠΏΠΈΡΠ΅ΠΌ
./build.sh
echo "nCompilation completedn"
export FIFTPATH=~/TON/ton/crypto/fift/lib
~/TON/build/crypto/fift -s lottery-test-suite.fif
Π‘Π΄Π΅Π»Π°Π΅ΠΌ test.sh
ΠΈ Π·Π°ΠΏΡΡΡΠΈΠΌ, ΡΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ Π² ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ ΡΠ΅ΡΡΠΎΠ².
chmod +x ./test.sh
./test.sh
ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, ΡΡΠΎ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ ΠΈ ΡΠ΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ.
ΠΡΠ»ΠΈΡΠ½ΠΎ, ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ test.sh
ΡΡΠ°Π·Ρ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΈ Π·Π°ΠΏΡΡΠΊ ΡΠ΅ΡΡΠΎΠ². ΠΠΎΡ ΡΡΡΠ»ΠΊΠ° Π½Π°
ΠΠΊΠ΅ΠΉ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΌΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ Π΄Π°Π²Π°ΠΉΡΠ΅ Π΄Π»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° ΡΠ΄Π΅Π»Π°Π΅ΠΌ Π΅ΡΠ΅ ΠΎΠ΄Π½Ρ Π²Π΅ΡΡ.
Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΠ°ΠΏΠΊΡ build
Π³Π΄Π΅ Π±ΡΠ΄Π΅ΠΌ Ρ
ΡΠ°Π½ΠΈΡΡ ΡΠΊΠΎΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ ΠΈ Π΅Π³ΠΎ ΠΊΠ»ΠΎΠ½ Π·Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π² ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ lottery-compiled.fif
, lottery-compiled-for-test.fif
. Π’Π°ΠΊΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΠ°ΠΏΠΊΡ test
Π³Π΄Π΅ Π±ΡΠ΄ΡΡ Ρ
ΡΠ°Π½ΠΈΡΡΡ ΡΠ°ΠΉΠ» Ρ ΡΠ΅ΡΡΠ°ΠΌΠΈ lottery-test-suite.fif
ΠΈ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ Π΄ΡΡΠ³ΠΈΠ΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ.
ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°.
ΠΠ°Π»ΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΡΡΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΡΡΡ ΠΈ ΡΡΠ΅ΡΡΠΈΠΊ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ. ΠΠΎ ΠΌΡ ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΡΡΠΎ ΠΏΠΎΠ·ΠΆΠ΅.
Π‘Π΅ΠΉΡΠ°Ρ ΠΏΠΎΠ΄ΡΠΌΠ°Π΅ΠΌ Π½Π°Π΄ ΡΠ΅ΠΌ ΠΊΠ°ΠΊΠ°Ρ ΡΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΡΡ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π½ΡΠΆΠ½ΠΎ ΡΠΎΡ ΡΠ°Π½ΡΡΡ Π² ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ΅.
ΠΠΏΠΈΡΡ Π²ΡΠ΅ ΡΡΠΎ ΠΌΡ Ρ ΡΠ°Π½ΠΈΠΌ.
`seqno` 32-Ρ
Π±ΠΈΡΠ½ΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΡΠ΅ΡΡΠΈΠΊ.
`pubkey` 256-ΡΠΈ Π±ΠΈΡΠ½ΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ ΠΊΠ»ΡΡ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ, ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΡ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ·Π²Π½Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΎ ΡΠ΅ΠΌ Π½ΠΈΠΆΠ΅.
`order_seqno` 32-Ρ
Π±ΠΈΡΠ½ΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Ρ
ΡΠ°Π½ΠΈΡ ΡΡΠ΅ΡΡΠΈΠΊ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΡΠ°Π²ΠΎΠΊ.
`number_of_wins` 32-Ρ
Π±ΠΈΡΠ½ΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Ρ
ΡΠ°Π½ΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ±Π΅Π΄.
`incoming_amount` ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ
Gram (ΠΏΠ΅ΡΠ²ΡΠ΅ 4 Π±ΠΈΡΠ° ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° Π΄Π»ΠΈΠ½Ρ), Ρ
ΡΠ°Π½ΠΈΡ ΠΎΠ±ΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π³ΡΠ°ΠΌΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Ρ Π½Π° ΠΊΠΎΠ½ΡΡΡΠ°ΠΊΡ.
`outgoing_amount` ΠΎΠ±ΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π³ΡΠ°ΠΌΠΎΠ², ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ»ΠΎ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½ΠΎ ΠΏΠΎΠ±Π΅Π΄ΠΈΡΠ΅Π»ΡΠΌ.
`owner_wc` Π½ΠΎΠΌΠ΅Ρ Π²ΠΎΡΠΊΡΠ΅ΠΉΠ½Π°, 32-Ρ
Π±ΠΈΡΠ½ΠΎΠ΅ (Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΠΌΠ΅ΡΡΠ°Ρ
Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ, ΡΡΠΎ 8-ΠΌΠΈ Π±ΠΈΡΠ½ΠΎΠ΅) ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ. Π Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅Π³ΠΎ Π΄Π²Π° -1 ΠΈ 0.
`owner_account_id` 256-ΡΠΈ Π±ΠΈΡΠ½ΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, Π°Π΄ΡΠ΅Ρ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ° Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ Π²ΠΎΡΠΊΡΠ΅ΠΉΠ½Π΅.
`orders` ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠΈΠΏΠ° ΡΠ»ΠΎΠ²Π°ΡΡ, Ρ
ΡΠ°Π½ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π΄Π²Π°Π΄ΡΠ°ΡΡ ΡΡΠ°Π²ΠΎΠΊ.
ΠΠ°Π»Π΅Π΅ Π½ΡΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π΄Π²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠ΅ΡΠ²ΡΡ Π½Π°Π·ΠΎΠ²Π΅ΠΌ pack_state()
, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΡ Π΅Π³ΠΎ Π² Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°. ΠΡΠΎΡΡΡ, Π½Π°Π·ΠΎΠ²Π΅ΠΌ unpack_state()
Π±ΡΠ΄Π΅Ρ ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°.
_ pack_state(int seqno, int pubkey, int order_seqno, int number_of_wins, int incoming_amount, int outgoing_amount, int owner_wc, int owner_account_id, cell orders) inline_ref {
return begin_cell()
.store_uint(seqno, 32)
.store_uint(pubkey, 256)
.store_uint(order_seqno, 32)
.store_uint(number_of_wins, 32)
.store_grams(incoming_amount)
.store_grams(outgoing_amount)
.store_int(owner_wc, 32)
.store_uint(owner_account_id, 256)
.store_dict(orders)
.end_cell();
}
_ unpack_state() inline_ref {
var ds = begin_parse(get_data());
var unpacked = (ds~load_uint(32), ds~load_uint(256), ds~load_uint(32), ds~load_uint(32), ds~load_grams(), ds~load_grams(), ds~load_int(32), ds~load_uint(256), ds~load_dict());
ds.end_parse();
return unpacked;
}
ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΡΠΈ Π΄Π²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π²Π½Π°ΡΠ°Π»ΠΎ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°. ΠΠΎΠ»ΡΡΠΈΡΡΡ
Π§ΡΠΎΠ±Ρ ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°ΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΡΡΠ½ΡΠΊΠΈΠΈ set_data()
ΠΈ ΠΎΠ½Π° Π·Π°ΠΏΠΈΡΠ΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· pack_state()
Π² Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°.
cell packed_state = pack_state(arg_1, .., arg_n);
set_data(packed_state);
Π’Π΅ΠΏΠ΅ΡΡ ΠΊΠΎΠ³Π΄Π° Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΠ΄ΠΎΠ±Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π°ΠΏΠΈΡΠΈ ΠΈ ΡΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π²ΠΈΠ³Π°ΡΡΡΡ Π΄Π°Π»ΡΡΠ΅.
ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΡΡΠΎ Π²Ρ ΠΎΠ΄ΡΡΠ΅Π΅ ΠΈΠ·Π²Π½Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½ΠΎ Π²Π»Π°Π΄Π΅Π»ΡΡΠ΅ΠΌ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ° (Π½Ρ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠΌΠ΅Π΅Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΡΠΈΠ²Π°ΡΠ½ΠΎΠΌΡ ΠΊΠ»ΡΡΡ).
ΠΠΎΠ³Π΄Π° ΠΌΡ ΠΏΡΠ±Π»ΠΈΠΊΡΠ΅ΠΌ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Ρ Π½ΡΠΆΠ½ΡΠΌΠΈ Π½Π°ΠΌ Π΄Π°Π½Π½ΡΠΌΠΈ Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΡ ΡΠ°Π½ΡΡΡΡ Π΄Π»Ρ Π±ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. ΠΡ Π·Π°ΠΏΠΈΡΠ΅ΠΌ ΡΡΠ΄Π° ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ ΠΊΠ»ΡΡ, ΡΡΠΎΠ±Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΡΡΠΎ ΠΏΠΎΠ΄ΠΏΠΈΡΡ Π²Ρ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π±ΡΠ»Π° ΡΠ΄Π΅Π»Π°Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ.
ΠΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ ΠΊΠ°ΠΊ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ ΠΈ Π·Π°ΠΏΠΈΡΠ΅ΠΌ Π΅Π³ΠΎ Π² test/keys/owner.pk
. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π·Π°ΠΏΡΡΡΠΈΠΌ Fift Π² ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΠΌ ΡΠ΅ΡΡΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ.
`newkeypair` Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΏΡΠ±Π»ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΈ ΠΏΡΠΈΠ²Π°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ° ΠΈ Π·Π°ΠΏΠΈΡΡ ΠΈΡ
Π² ΡΡΠ΅ΠΊ.
`drop` ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ° Π²Π΅ΡΡ
Π½Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° (Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ ΠΊΠ»ΡΡ)
`.s` ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΡΠΎ Π»Π΅ΠΆΠΈΡ Π² ΡΡΠ΅ΠΊΠ΅ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ
`"owner.pk" B>file` Π·Π°ΠΏΠΈΡΡ ΠΏΡΠΈΠ²Π°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ° Π² ΡΠ°ΠΉΠ» Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ `owner.pk`.
`bye` Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΡ Ρ Fift.
Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΠ°ΠΏΠΊΡ keys
Π²Π½ΡΡΡΠΈ ΠΏΠ°ΠΏΠΊΠΈ test
ΠΈ ΡΡΠ΄Π° Π·Π°ΠΏΠΈΡΠ΅ΠΌ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ.
mkdir test/keys
cd test/keys
~/TON/build/crypto/fift -i
newkeypair
ok
.s
BYTES:128DB222CEB6CF5722021C3F21D4DF391CE6D5F70C874097E28D06FCE9FD6917 BYTES:DD0A81AAF5C07AAAA0C7772BB274E494E93BB0123AA1B29ECE7D42AE45184128
drop
ok
"owner.pk" B>file
ok
bye
ΠΠΈΠ΄ΠΈΠΌ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΏΠ°ΠΏΠΊΠ΅ ΡΠ°ΠΉΠ» owner.pk
.
ΠΡ ΡΠ΄Π°Π»ΡΠ΅ΠΌ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ ΠΊΠ»ΡΡ ΠΈΠ· ΡΡΠ΅ΠΊΠ°, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΅Π³ΠΎ ΠΈΠ· ΠΏΡΠΈΠ²Π°ΡΠ½ΠΎΠ³ΠΎ.
Π’Π΅ΠΏΠ΅ΡΡ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ. ΠΠ°ΡΠ½Π΅ΠΌ Ρ ΡΠ΅ΡΡΠ°. Π‘Π½Π°ΡΠ°Π»Π° ΠΌΡ ΡΡΠΈΡΡΠ²Π°Π΅ΠΌ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ ΠΈΠ· ΡΠ°ΠΉΠ»Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ file>B
ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ Π΅Π³ΠΎ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ owner_private_key
, Π΄Π°Π»ΡΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ priv>pub
ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΡΠ΅ΠΌ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ Π² ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ ΠΈ Π·Π°ΠΏΠΈΡΠ΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π² owner_public_key
.
variable owner_private_key
variable owner_public_key
"./keys/owner.pk" file>B owner_private_key !
owner_private_key @ priv>pub owner_public_key !
ΠΠ±Π° ΠΊΠ»ΡΡΠ° Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΡΡΡΡ.
ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ° Π² ΡΠΎΠΉ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΠΊΠ°ΠΊ Π² ΡΡΠ½ΠΊΡΠΈΠΈ pack_state()
ΠΈ Π·Π°ΠΏΠΈΡΠ΅ΠΌ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ storage
.
variable owner_private_key
variable owner_public_key
variable orders
variable owner_wc
variable owner_account_id
"./keys/owner.pk" file>B owner_private_key !
owner_private_key @ priv>pub owner_public_key !
dictnew orders !
0 owner_wc !
0 owner_account_id !
<b 0 32 u, owner_public_key @ B, 0 32 u, 0 32 u, 0 Gram, 0 Gram, owner_wc @ 32 i, owner_account_id @ 256 u, orders @ dict, b> storage !
ΠΠ°Π»Π΅Π΅ ΡΠΎΡΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½Π½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, Π² Π½Π΅ΠΌ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ΄ΠΏΠΈΡΡ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠ°.
Π‘Π½Π°ΡΠ°Π»Π° ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΎΡΠΈΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ, ΠΏΠΎΡΠΎΠΌ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΠΈΡ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ ΠΈ Π½Π°ΠΊΠΎΠ½Π΅Ρ ΡΠΎΡΠΌΠΈΡΡΠ΅ΠΌ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½Π½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅.
variable message_to_sign
variable message_to_send
variable signature
<b 0 32 u, b> message_to_sign !
message_to_sign @ hashu owner_private_key @ ed25519_sign_uint signature !
<b signature @ B, 0 32 u, b> <s message_to_send !
Π ΠΈΡΠΎΠ³Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΡ ΠΎΡΠΏΡΠ°Π²ΠΈΠΌ Π² ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ Π·Π°ΠΏΠΈΡΠ°Π½ΠΎ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ message_to_send
, ΠΏΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ hashu
, ed25519_sign_uint
ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΈΡΠ°ΡΡ
Π Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΡΠ° ΡΠ½ΠΎΠ²Π° Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ.
message_to_send @
recv_external
code
storage @
c7
runvmctx
ΠΠ°ΠΏΡΡΡΠΈΠΌ ΡΠ΅ΡΡ ΠΈ ΠΎΠ½ ΡΠΏΠ°Π΄Π΅Ρ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ, ΡΡΠΎΠ±Ρ ΠΎΠ½ ΡΠΌΠΎΠ³ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΡ.
Π‘Π½Π°ΡΠ°Π»Π° ΡΡΠΈΡΠ°Π΅ΠΌ ΠΈΠ· ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ 512 Π±ΠΈΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ ΠΈ Π·Π°ΠΏΠΈΡΠ΅ΠΌ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, Π΄Π°Π»Π΅Π΅ ΡΡΠΈΡΠ°Π΅ΠΌ 32 Π±ΠΈΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΡΠ΅ΡΡΠΈΠΊΠ°.
Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΈΠ· Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΠ°ΠΊΡΠ° Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π΅.
ΠΠ°Π»ΡΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΡΠ΅ΡΡΠΈΠΊΠ° ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΠΌ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ. ΠΡΠ»ΠΈ ΡΡΠΎ-ΡΠΎ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Ρ, ΡΠΎ Π²ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.
var signature = in_msg~load_bits(512);
var message = in_msg;
int msg_seqno = message~load_uint(32);
(int stored_seqno, int pubkey, int order_seqno, int number_of_wins, int incoming_amount, int outgoing_amount, int owner_wc, int owner_account_id, cell orders) = unpack_state();
throw_unless(33, msg_seqno == stored_seqno);
throw_unless(34, check_signature(slice_hash(in_msg), signature, pubkey));
Π‘ΠΎΠΎΡΠ²Π΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠΎΠΌΠΌΠΈΡ
ΠΠ°ΠΏΡΡΡΠΈΠΌ ΡΠ΅ΡΡΡ ΠΈ ΡΠ²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ Π²ΡΠΎΡΠΎΠΉ ΡΠ΅ΡΡ ΠΏΠ°Π΄Π°Π΅Ρ. ΠΠΎ Π΄Π²ΡΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ, Π½Π΅Ρ Π²Π°ΡΠΊΠ° Π±ΠΈΡΠΎΠ² Π² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΈ ΠΈ Π½Π΅Ρ Π²Π°ΡΠΊΠ° Π±ΠΈΡΠΎΠ² Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ ΠΊΠΎΠ΄ ΠΏΠ°Π΄Π°Π΅Ρ ΠΏΡΠΈ ΠΏΠ°ΡΡΠΈΠ½Π³Π΅. ΠΠ°Π΄ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ ΠΈ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΡΠ΅ΡΡΠ°.
ΠΠΎ Π²ΡΠΎΡΠΎΠΌ ΡΠ΅ΡΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΠΎΠ΄ΠΏΠΈΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°.
ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠ΅ΡΠ²Π΅ΡΡΡΠΉ ΡΠ΅ΡΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π±ΡΠ΄Π΅ΠΌ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½Π½ΠΎΠ΅ ΡΡΠΆΠΈΠΌ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ ΠΈ ΡΠΎΡ
ΡΠ°Π½ΠΈΠΌ Π² ΡΠ°ΠΉΠ» not-owner.pk
. ΠΡΠΈΠΌ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ ΠΏΠΎΠ΄ΠΏΠΈΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅. ΠΠ°ΠΏΡΡΡΠΈΠΌ ΡΠ΅ΡΡΡ ΠΈ ΡΠ±Π΅Π΄ΠΈΠΌΡΡ, ΡΡΠΎ Π²ΡΠ΅ ΡΠ΅ΡΡΡ ΠΏΡΠΎΡ
ΠΎΠ΄ΡΡ.
Π’Π΅ΠΏΠ΅ΡΡ Π½Π°ΠΊΠΎΠ½Π΅Ρ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π»ΠΎΠ³ΠΈΠΊΠΈ ΡΠΌΠ°ΡΡΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°.
Π recv_external()
ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π΄Π²Π° ΡΠΈΠΏΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ.
Π’Π°ΠΊ ΠΊΠ°ΠΊ Π½Π°Ρ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ Π±ΡΠ΄Π΅Ρ Π°ΠΊΠΊΡΠΌΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠΈΠ³ΡΡΡΠΈ ΠΈΠ³ΡΠΎΠΊΠΎΠ², ΡΡΠΈ Π΄Π΅Π½ΡΠ³ΠΈ Π½Π°Π΄ΠΎ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΡΡΡ ΡΠΎΠ·Π΄Π°ΡΠ΅Π»Ρ Π»ΠΎΡΠ΅ΡΠ΅ΠΈ. ΠΠ΄ΡΠ΅Ρ ΠΊΠΎΡΠ΅Π»ΡΠΊΠ° ΡΠΎΠ·Π΄Π°ΡΠ΅Π»Ρ Π»ΠΎΡΠ΅ΡΠ΅ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°.
ΠΠ° Π²ΡΡΠΊΠΈΠΉ ΡΠ»ΡΡΠ°ΠΉ Π½Π°ΠΌ Π½ΡΠΆΠ½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΌΠ΅Π½ΡΡΡ Π°Π΄ΡΠ΅Ρ Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ Π³ΡΠ°ΠΌΡ ΠΏΡΠΎΠΈΠ³ΡΠ°Π²ΡΠΈΡ . Π’Π°ΠΊΠΆΠ΅ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ Π³ΡΠ°ΠΌΡ Ρ Π»ΠΎΡΠ΅ΡΠ΅ΠΈ Π½Π° Π°Π΄ΡΠ΅Ρ Π²Π»Π°Π΄Π΅Π»ΡΡΠ°.
ΠΠ°ΡΠ½Π΅ΠΌ Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ. ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠ½Π°ΡΠ°Π»Π° ΡΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ, ΡΡΠΎ ΠΏΠΎΡΠ»Π΅ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ ΡΠΎΡ
ΡΠ°Π½ΠΈΠ» Π½ΠΎΠ²ΡΠΉ Π°Π΄ΡΠ΅Ρ Π² Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅. ΠΠ±ΡΠ°ΡΠΈΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠΌΠΈΠΌΠΎ ΡΡΠ΅ΡΡΠΈΠΊΠ° ΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π°Π΄ΡΠ΅ΡΠ° ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ Π΅ΡΠ΅ action
7-ΠΌΠΈ Π±ΠΈΡΠ½ΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅ Π½Π΅ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, Π² Π·Π°Π²ΠΈΡΠΈΠΎΠΌΡΡΠΈ ΠΎΡ Π½Π΅Π³ΠΎ, ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π²ΡΠ±ΠΈΡΠ°ΡΡ ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ΅.
<b 0 32 u, 1 @ 7 u, new_owner_wc @ 32 i, new_owner_account_id @ 256 u, b> message_to_sign !
Π ΡΠ΅ΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΊΠ°ΠΊ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Π΄Π΅ΡΠ΅ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΡΠΌΠ°ΡΡΠΊΠΎΠ½ΡΡΠ°ΡΠΊΠ° storage
Π² Fift. ΠΠ΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΎΠΏΠΈΡΠ°Π½Π° Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΏΠΎ Fift.
ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΡΠ΅ΡΡ ΠΈ ΡΠ±Π΅Π΄ΠΈΠΌΡΡ, ΡΡΠΎ ΠΎΠ½ ΠΏΠ°Π΄Π°Π΅Ρ. Π’Π΅ΠΏΠ΅ΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π»ΠΎΠ³ΠΈΠΊΡ ΠΏΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π°Π΄ΡΠ΅ΡΠ° Π²Π»Π°Π΄Π΅Π»ΡΡΠ° Π»ΠΎΡΠ΅ΡΠ΅ΠΈ.
Π ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ΅ ΠΌΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ ΠΏΠ°ΡΡΠΈΡΡ message
, ΡΡΠΈΡΡΠ²Π°Π΅ΠΌ Π² action
. ΠΠ°ΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΡΠΎ Ρ Π½Π°Ρ Π±ΡΠ΄Π΅Ρ Π΄Π²Π° action
: ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π°Π΄ΡΠ΅ΡΠ° ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠ° Π³ΡΠ°ΠΌΠΎΠ².
ΠΠΎΡΠΎΠΌ ΡΡΠΈΡΡΠ²Π°Π΅ΠΌ Π½ΠΎΠ²ΡΠΉ Π°Π΄ΡΠ΅Ρ Π²Π»Π°Π΄Π΅Π»ΡΡΠ° ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ° ΠΈ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅ΠΌ Π² Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅.
ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΡΠ΅ΡΡΡ ΠΈ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ ΡΡΠ΅ΡΠΈΠΉ ΡΠ΅ΡΡ ΠΏΠ°Π΄Π°Π΅Ρ. ΠΠ°Π΄Π°Π΅Ρ ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ ΡΠ΅ΠΏΠ΅ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠ°ΡΡΠΈΡ 7 Π±ΠΈΡ ΠΈΠ· ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ
Π½Π΅ Ρ
Π²Π°ΡΠ°Π΅Ρ Π² ΡΠ΅ΡΡΠ΅. ΠΠΎΠ±Π°Π²ΠΈΠΌ Π² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ΡΡΡΠ΅ΡΡΠ²ΡΡΠΈΠΉ action
. ΠΠ°ΠΏΡΡΡΠΈΠΌ ΡΠ΅ΡΡΡ ΠΈ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ Π²ΡΠ΅ ΠΏΡΠΎΡ
ΠΎΠ΄ΡΡ.
Π’Π΅ΠΏΠ΅ΡΡ Π½Π°ΠΏΠΈΡΠ΅ΠΌ Π»ΠΎΠ³ΠΈΠΊΡ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π³ΡΠ°ΠΌΠΎΠ² Π½Π° ΡΠΎΡ ΡΠ°Π½Π΅Π½Π½ΡΠΉ ΡΠ°Π½Π΅Π΅ Π°Π΄ΡΠ΅Ρ.
Π‘Π½Π°ΡΠ°Π»Π° Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΡΠ΅ΡΡ. ΠΡ Π½Π°ΠΏΠΈΡΠ΅ΠΌ Π΄Π²Π° ΡΠ΅ΡΡΠ° ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ³Π΄Π° Π±Π°Π»Π°Π½ΡΠ° Π½Π΅ Ρ
Π²Π°ΡΠ°Π΅Ρ, Π²ΡΠΎΡΠΎΠΉ ΠΊΠΎΠ³Π΄Π° Π²ΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡΠΎΠΉΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎ. Π’Π΅ΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ
Π’Π΅ΠΏΠ΅ΡΡ Π΄ΠΎΠΏΠΈΡΠ΅ΠΌ ΠΊΠΎΠ΄. Π‘Π½Π°ΡΠ°Π»Π° Π½Π°ΠΏΠΈΡΠ΅ΠΌ Π΄Π²Π° Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ ΠΌΠ΅ΡΠΎΠ΄Π°. ΠΠ΅ΡΠ²ΡΠΉ Π³Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ ΡΠ΅ΠΊΡΡΠΈΠΉ Π±Π°Π»Π°Π½Ρ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°.
int balance() inline_ref method_id {
return get_balance().pair_first();
}
Π Π²ΡΠΎΡΠΎΠΉ Π΄Π»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ Π³ΡΠ°ΠΌΠΎΠ² Π½Π° Π΄ΡΡΠ³ΠΎΠΉ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ. ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π» ΠΈΠ· Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°.
() send_grams(int wc, int addr, int grams) impure {
;; int_msg_info$0 ihr_disabled:Bool bounce:Bool bounced:Bool src:MsgAddress -> 011000
cell msg = begin_cell()
;; .store_uint(0, 1) ;; 0 <= format indicator int_msg_info$0
;; .store_uint(1, 1) ;; 1 <= ihr disabled
;; .store_uint(1, 1) ;; 1 <= bounce = true
;; .store_uint(0, 1) ;; 0 <= bounced = false
;; .store_uint(4, 5) ;; 00100 <= address flags, anycast = false, 8-bit workchain
.store_uint (196, 9)
.store_int(wc, 8)
.store_uint(addr, 256)
.store_grams(grams)
.store_uint(0, 107) ;; 106 zeroes + 0 as an indicator that there is no cell with the data.
.end_cell();
send_raw_message(msg, 3); ;; mode, 2 for ignoring errors, 1 for sender pays fees, 64 for returning inbound message value
}
ΠΠΎΠ±Π°Π²ΠΈΠΌ ΡΡΠΈ Π΄Π²Π° ΠΌΠ΅ΡΠΎΠ΄Π° Π² ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ ΠΈ Π½Π°ΠΏΠΈΡΠ΅ΠΌ Π»ΠΎΠ³ΠΈΠΊΡ. Π‘Π½Π°ΡΠ°Π»Π° ΠΏΠ°ΡΡΠΈΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π³ΡΠ°ΠΌΠΎΠ² ΠΈΠ· ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ. ΠΠ°Π»ΡΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ Π±Π°Π»Π°Π½Ρ, Π΅ΡΠ»ΠΈ Π½Π΅ Ρ Π²Π°ΡΠ°Π΅Ρ Π²ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅. ΠΡΠ»ΠΈ Π²ΡΠ΅ Ρ ΠΎΡΠΎΡΠΎ, ΡΠΎ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ Π³ΡΠ°ΠΌΡ Π½Π° ΡΠΎΡ ΡΠ°Π½Π΅Π½Π½ΡΠΉ Π°Π΄ΡΠ΅Ρ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ ΡΡΠ΅ΡΡΠΈΠΊ.
int amount_to_send = message~load_grams();
throw_if(36, amount_to_send + 500000000 > balance());
accept_message();
send_grams(owner_wc, owner_account_id, amount_to_send);
set_data(pack_state(stored_seqno + 1, pubkey, order_seqno, number_of_wins, incoming_amount, outgoing_amount, owner_wc, owner_account_id, orders));
ΠΡΡΠ°ΡΠΈ, Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Ρ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΡΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΊΠΎΠΌΠΈΡΡΠΈΡ. Π§ΡΠΎΠ±Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ Π²ΡΠΎΠ»Π½ΠΈΠ» Π·Π°ΠΏΡΠΎΡ, ΠΏΠΎΡΠ»Π΅ Π±Π°Π·ΠΎΠ²ΡΡ
ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ accept_message()
.
Π’Π΅ΠΏΠ΅ΡΡ Π·Π°ΠΉΠΌΠ΅ΠΌΡΡ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ. ΠΠΎ ΡΠ°ΠΊΡΡ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π³ΡΠ°ΠΌΡ ΠΈ ΠΎΡΡΡΠ»Π°ΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΈΠ³ΡΠΎΠΊΡ Π΄Π²ΠΎΠΉΠ½ΡΡ ΡΡΠΌΠΌΡ ΠΏΡΠΈ Π²ΡΠΈΠ³ΡΡΡΠ΅ ΠΈ ΡΡΠ΅ΡΡ Π²Π»Π°Π΄Π΅Π»ΡΡΡ ΠΏΡΠΈ ΠΏΡΠΎΠΈΠ³ΡΡΡΠ΅.
Π‘Π½Π°ΡΠ°Π»Π° Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠ΅ΡΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΡΠ΅ΡΡΠΎΠ²ΡΠΉ Π°Π΄ΡΠ΅Ρ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ° Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΡ Π±ΡΠ΄ΡΠΎ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ Π³ΡΠ°ΠΌΡ Π½Π° ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ.
ΠΠ΄ΡΠ΅Ρ ΡΠΌΠ°ΡΡΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ° ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π΄Π²ΡΡ ΡΠΈΡΠ΅Π», 32-Ρ Π±ΠΈΡΠ½ΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° 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) { ;; ignore bounced
return ();
}
if (order_amount < 500000000) { ;; just receive grams without changing state
return ();
}
slice src_addr_slice = cs~load_msg_addr();
(int src_wc, int src_addr) = parse_std_addr(src_addr_slice);
(int stored_seqno, int pubkey, int order_seqno, int number_of_wins, int incoming_amount, int outgoing_amount, int owner_wc, int owner_account_id, cell orders) = unpack_state();
orders = remove_old_orders(orders, order_seqno);
if (balance() < 2 * order_amount + 500000000) { ;; not enough grams to pay the bet back, so this is re-fill
builder order = pack_order(order_seqno, 1, now(), order_amount, src_wc, src_addr);
orders~udict_set_builder(32, order_seqno, order);
set_data(pack_state(stored_seqno, pubkey, order_seqno + 1, number_of_wins, incoming_amount + order_amount, outgoing_amount, owner_wc, owner_account_id, orders));
return ();
}
if (rand(10) >= 4) {
builder order = pack_order(order_seqno, 3, now(), order_amount, src_wc, src_addr);
orders~udict_set_builder(32, order_seqno, order);
set_data(pack_state(stored_seqno, pubkey, order_seqno + 1, number_of_wins, incoming_amount + order_amount, outgoing_amount, owner_wc, owner_account_id, orders));
if (order_amount > 3000000000) {
send_grams(owner_wc, owner_account_id, order_amount / 3);
}
return ();
}
send_grams(src_wc, src_addr, 2 * order_amount);
builder order = pack_order(order_seqno, 2, now(), order_amount, src_wc, src_addr);
orders~udict_set_builder(32, order_seqno, order);
set_data(pack_state(stored_seqno, pubkey, order_seqno + 1, number_of_wins + 1, incoming_amount, outgoing_amount + 2 * order_amount, owner_wc, owner_account_id, orders));
}
ΠΠΎΡ ΠΈ Π²ΡΠ΅.
Π’Π΅ΠΏΠ΅ΡΡ ΠΎΡΡΠ°Π΅ΡΡΡ ΠΏΡΠΎΡΡΠΎΠ΅, ΡΠ΄Π΅Π»Π°Π΅ΠΌ Π³Π΅Ρ-ΠΌΠ΅ΡΠΎΠ΄Ρ, ΡΡΠΎΠ±Ρ ΠΈΠ· Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΠΌΠΈΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ° (ΠΏΠΎ ΡΠ°ΠΊΡΡ ΡΡΠΈΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΡ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΡΠΌΠ°ΡΡΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°).
ΠΡΠ΅ Ρ Π·Π°Π±ΡΠ» Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠ°ΠΌΡΠΉ ΠΏΠ΅ΡΠ²ΡΠΉ Π·Π°ΠΏΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΠΏΡΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°.
ΠΠ°Π»ΡΡΠ΅ ΠΎΡΡΠ°Π΅ΡΡΡ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΠ°ΠΏΠΊΡ requests
.
ΠΠ° ΠΎΡΠ½ΠΎΠ²Ρ Ρ Π²Π·ΡΠ» ΠΊΠΎΠ΄ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ simple-wallet-code.fc
ΠΠ· ΡΠΎΠ³ΠΎ Π½Π° ΡΡΠΎ ΡΡΠΎΠΈΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅. ΠΡ ΡΠΎΡΠΌΠΈΡΡΠ΅ΠΌ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ° ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π²Ρ
ΠΎΠ΄. ΠΠΎΡΠ»Π΅ ΡΡΠΎ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ Π°Π΄ΡΠ΅Ρ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°, ΡΠΎ Π΅ΡΡΡ Π°Π΄ΡΠ΅Ρ ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ Π΅ΡΠ΅ Π΄ΠΎ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ Π² TON. ΠΠ°Π»ΡΡΠ΅ Π½Π° ΡΡΠΎΡ Π°Π΄ΡΠ΅Ρ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ Π½Π΅ΡΠΎΠ»ΡΠΊΠΎ Π³ΡΠ°ΠΌ ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ ΡΠ°ΠΉΠ» Ρ ΡΠ°ΠΌΠΈΠΌ ΡΠΌΠ°ΡΡΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠΎΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π·Π° Ρ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΠΌΠ°ΡΡΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ° ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π² Π½Π΅ΠΌ ΡΠ΅ΡΡ Π±Π΅ΡΠ΅Ρ ΠΊΠΎΠΌΠΈΡΡΠΈΡ (Π²Π°Π»ΠΈΠ΄Π°ΡΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ
ΡΠ°Π½ΡΡ ΠΈ ΠΈΡΠΎΠΏΠ»Π½ΡΡΡ ΡΠΌΠ°ΡΡΠΊΠΎΠ½ΡΡΠ°ΠΊΡΡ).
ΠΠ°Π»ΡΡΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΠΊΠΎΠ΄ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ lottery-query.boc
ΡΠ°ΠΉΠ» ΠΈ Π°Π΄ΡΠ΅Ρ ΡΠΌΠ°ΡΡΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°.
~/TON/build/crypto/fift -s requests/new-lottery.fif 0
ΠΠ΅ Π·Π°Π±ΡΠ²Π°Π΅ΠΌ ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ: lottery-query.boc
, lottery.addr
, lottery.pk
.
Π‘ΡΠ΅Π΄ΠΈ ΠΏΡΠΎΡΠ΅Π³ΠΎ Π² Π»ΠΎΠ³Π°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ Π°Π΄ΡΠ΅Ρ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°.
new wallet address = 0:044910149dbeaf8eadbb2b28722e7d6a2dc6e264ec2f1d9bebd6fb209079bc2a
(Saving address to file lottery.addr)
Non-bounceable address (for init): 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd
Bounceable address (for later access): kQAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8KpFY
Π Π°Π΄ΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ° ΡΠ΄Π΅Π»Π°Π΅ΠΌ Π·Π°ΠΏΡΠΎΡ Π² TON
$ ./lite-client/lite-client -C ton-lite-client-test1.config.json
getaccount 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd
Π ΡΠ²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ Π°ΠΊΠΊΠ°ΡΠ½Ρ Ρ ΡΠ°ΠΊΠΈΠΌ Π°Π΄ΡΠ΅ΡΠΎΠΌ ΠΏΡΡΡ.
account state is empty
ΠΡΠΏΡΠ°Π²ΡΠ»Π΅ΠΌ Π½Π° Π°Π΄ΡΠ΅Ρ 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd
2 Gram ΠΈ ΡΠ΅ΡΠ΅Π· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΊΡΠ½Π΄ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΡΡΠΆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ. ΠΠ»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ Π³ΡΠ°ΠΌΠΎΠ² Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ
> getaccount 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd
Π‘ΠΌΠΎΡΡΠΈΡ, ΡΡΠΎ Π² ΡΠ΅ΡΠΈ ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ Π½Π΅ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ (state:account_uninit
) ΡΠΌΠ°ΡΡΠΊΠΎΠ½ΡΡΠ°ΠΊΡ Ρ ΡΠ°ΠΊΠΈΠΌ Π°Π΄ΡΠ΅ΡΠΎΠΌ ΠΈ Π±Π°Π»Π°Π½ΡΠΎΠΌ 1 000 000 000 Π½Π°Π½ΠΎΠ³ΡΠ°ΠΌ.
account state is (account
addr:(addr_std
anycast:nothing workchain_id:0 address:x044910149DBEAF8EADBB2B28722E7D6A2DC6E264EC2F1D9BEBD6FB209079BC2A)
storage_stat:(storage_info
used:(storage_used
cells:(var_uint len:1 value:1)
bits:(var_uint len:1 value:103)
public_cells:(var_uint len:0 value:0)) last_paid:1583257959
due_payment:nothing)
storage:(account_storage last_trans_lt:3825478000002
balance:(currencies
grams:(nanograms
amount:(var_uint len:4 value:2000000000))
other:(extra_currencies
dict:hme_empty))
state:account_uninit))
x{C00044910149DBEAF8EADBB2B28722E7D6A2DC6E264EC2F1D9BEBD6FB209079BC2A20259C2F2F4CB3800000DEAC10776091DCD650004_}
last transaction lt = 3825478000001 hash = B043616AE016682699477FFF01E6E903878CDFD6846042BA1BFC64775E7AC6C4
account balance is 2000000000ng
Π’Π΅ΠΏΠ΅ΡΡ ΠΎΠΏΡΠ±Π»ΠΈΠΊΡΠ΅ΠΌ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ. ΠΠ°ΠΏΡΡΡΠΈΠΌ lite-client ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΠΌ.
> sendfile lottery-query.boc
[ 1][t 2][1583008371.631410122][lite-client.cpp:966][!testnode] sending query from file lottery-query.boc
[ 3][t 1][1583008371.828550100][lite-client.cpp:976][!query] external message status is 1
ΠΡΠΎΠ²Π΅ΡΠΈΠΌ, ΡΡΠΎ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½.
> last
> getaccount 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd
Π‘ΡΠ΅Π΄ΠΈ ΠΏΡΠΎΡΠ΅Π³ΠΎ ΠΏΠΎΠ»ΡΡΠΈΠΌ.
storage:(account_storage last_trans_lt:3825499000002
balance:(currencies
grams:(nanograms
amount:(var_uint len:4 value:1987150999))
other:(extra_currencies
dict:hme_empty))
state:(account_active
ΠΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ account_active
.
Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠΎΠΌΠΌΠΈΡ Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ
Π’Π΅ΠΏΠ΅ΡΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π·Π°ΠΏΡΠΎΡΡ Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΠΎ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠΎΠΌ.
Π’ΠΎΡΠ½Π΅Π΅ ΠΏΠ΅ΡΠ²ΡΠΉ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π°Π΄ΡΠ΅ΡΠ° ΠΌΡ ΠΎΡΡΠ°Π²ΠΈΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ, Π° Π²ΡΠΎΡΠΎΠΉ Π΄Π»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ Π³ΡΠ°ΠΌΠΎΠ² Π½Π° Π°Π΄ΡΠ΅Ρ Π²Π»Π°Π΄Π΅Π»ΡΡΠ° ΡΠ΄Π΅Π»Π°Π΅ΠΌ. ΠΠΎ ΡΠ°ΠΊΡΡ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ ΠΈ Π² ΡΠ΅ΡΡΠ΅ Π½Π° ΠΎΡΠΏΡΠ°Π²ΠΊΡ Π³ΡΠ°ΠΌΠΎΠ².
ΠΠΎΡ ΡΠ°ΠΊΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ Π½Π° ΡΠΌΠ°ΡΡΠΊΠΎΠ½ΡΡΠ°ΠΊΡ, Π³Π΄Π΅ msg_seqno
165, action
2 ΠΈ 9.5 Π³ΡΠ°ΠΌ Π΄Π»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ.
<b 165 32 u, 2 7 u, 9500000000 Gram, b>
ΠΠ΅ Π·Π°Π±ΡΠ²Π°Π΅ΠΌ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ lottery.pk
, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π»ΡΡ ΡΠ°Π½Π΅Π΅ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°.
ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΈΠ½ΠΎΡΠΌΠ°ΡΠΈΡ ΠΈΠ· ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π³Π΅Ρ-ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²
Π’Π΅ΠΏΠ΅ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠ°ΠΊ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π³Π΅Ρ-ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠΌΠ°ΡΡΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°.
ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ lite-client
ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π³Π΅Ρ-ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ.
$ ./lite-client/lite-client -C ton-lite-client-test1.config.json
> runmethod 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd balance
arguments: [ 104128 ]
result: [ 64633878952 ]
...
Π result
ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π·Π½Π°ΡΠ½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ balance()
ΠΈΠ· Π½Π°ΡΠ΅Π³ΠΎ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°.
Π’ΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΠΌ Π΅ΡΠ΅ Π΄Π»Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ².
> runmethod 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd get_seqno
...
arguments: [ 77871 ]
result: [ 1 ]
ΠΠ°ΠΏΡΠΎΡΠΈΠΌ ΠΈΡΡΠΎΡΠΈΡ ΡΡΠ°Π²ΠΎΠΊ.
> runmethod 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd get_orders
...
arguments: [ 67442 ]
result: [ ([0 1 1583258284 10000000000 0 74649920601963823558742197308127565167945016780694342660493511643532213172308] [1 3 1583258347 4000000000 0 74649920601963823558742197308127565167945016780694342660493511643532213172308] [2 1 1583259901 50000000000 0 74649920601963823558742197308127565167945016780694342660493511643532213172308]) ]
ΠΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ lite-client ΠΈ Π³Π΅Ρ-ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΡΠΎΠ±Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ΅ Π½Π° ΡΠ°ΠΉΡΠ΅.
ΠΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ Π΄Π°Π½Π½ΡΠ΅ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ° Π½Π° ΡΠ°ΠΉΡΠ΅
Π― Π½Π°ΠΏΠΈΡΠ°Π» ΠΏΡΠΎΡΡΠΎΠΉ Π²Π΅Π±-ΡΠ°ΠΉΡ Π½Π° Python Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ° Π² ΡΠ΄ΠΎΠ±Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅. Π’ΡΡ Ρ Π½Π΅ Π±ΡΠ΄Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ Π½Π° Π½Π΅ΠΌ ΠΈ ΠΎΠΏΡΠ±Π»ΠΈΠΊΡΡ ΡΠ°ΠΉΡ
ΠΠ°ΠΏΡΠΎΡΡ ΠΊ TON Π΄Π΅Π»Π°ΡΡΡΡ ΠΈΠ· Python
Ρ ΠΏΠΎΠΌΠΎΡΡΡ lite-client
. ΠΠ»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° ΡΠ°ΠΉΡ ΠΏΠ°ΠΊΡΠ΅ΡΡΡ Π² Docker ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΡΠ΅ΡΡΡ Π½Π° Google Cloud.
ΠΡΠΎΠ±ΡΠ΅ΠΌ
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ ΡΡΠ΄Π° Π³ΡΠ°ΠΌΠΎΠ² Π΄Π»Ρ ΠΏΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈΠ·
ΠΠΎΡΠ»Π΅ΡΠ»ΠΎΠ²ΠΈΠ΅
Π‘ΡΠ°ΡΡΡ ΠΏΠΎΠ»ΡΡΠΈΠ»Π°ΡΡ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π»ΠΈΠ½Π½Π΅ ΡΠ΅ΠΌ Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π», ΠΌΠΎΠΆΠ΅Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΈ ΠΊΠΎΡΠΎΡΠ΅, Π° ΠΌΠΎΠΆΠ΅Ρ ΠΊΠ°ΠΊ ΡΠ°Π· Π΄Π»Ρ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ ΠΎ TON ΠΈ Ρ ΠΎΡΠ΅Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΈ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡ Π½Π΅ ΡΠ°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ Ρ Π½ΠΈΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ Π²Π΅ΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΎΠ±ΡΡΡΠ½ΠΈΡΡ ΠΏΡΠΎΡΠ΅.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΌΠ΅Π½ΡΡ Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΈ ΡΠ»Π΅Π³Π°Π½ΡΠ½ΠΎ, Π½ΠΎ ΡΠΎΠ³Π΄Π° Π±Ρ Π½Π° ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΡ ΡΡΠ°ΡΡΠΈ ΡΡΠ»ΠΎ Π±Ρ Π΅ΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. Π’Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΎ Ρ Π³Π΄Π΅-ΡΠΎ ΠΎΡΠΈΠ±ΡΡ ΠΈΠ»ΠΈ ΡΡΠΎ-ΡΠΎ Π½Π΅ ΠΏΠΎΠ½ΡΠ», ΠΏΠΎΡΡΠΎΠΌΡ Π΅ΡΠ»ΠΈ Π²Ρ Π΄Π΅Π»Π°Π΅ΡΠ΅ ΡΡΠΎ-ΡΠΎ ΡΠ΅ΡΡΠ΅Π·Π½ΠΎΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°ΡΡΡΡ Π½Π° ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΈΠ»ΠΈ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Ρ ΠΊΠΎΠ΄ΠΎΠΌ TON.
ΠΠ°Π΄ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ°ΠΌ TON Π΅ΡΠ΅ Π² Π°ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΡΡΠ°Π΄ΠΈΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ»ΠΎΠΌΠ°ΡΡ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΈΠ· ΡΠ°Π³ΠΎΠ² Π² ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ (ΡΡΠΎ ΠΈ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ ΠΏΠΎΠΊΠ° Ρ ΠΏΠΈΡΠ°Π», ΡΠΆΠ΅ ΠΈΡΠΏΡΠ°Π²ΠΈΠ»), Π½ΠΎ ΠΎΠ±ΡΠΈΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π²ΡΡΠ΄Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ.
ΠΡΠΎ Π±ΡΠ΄ΡΡΠ΅Π΅ TON ΡΠ°ΡΡΡΠΆΠ΄Π°ΡΡ Π½Π΅ Π±ΡΠ΄Ρ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° ΡΡΠ°Π½Π΅Ρ ΡΠ΅ΠΌ-ΡΠΎ Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΈ Π½Π°ΠΌ ΡΡΠΎΠΈΡ ΠΏΠΎΡΡΠ°ΡΠΈΡΡ Π²ΡΠ΅ΠΌΡ Π½Π° Π΅Π΅ ΠΈΠ·ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ Π·Π°Π½ΡΡΡ Π½ΠΈΡΡ ΡΠ²ΠΎΠΈΠΌΠΈ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°ΠΌΠΈ ΡΠΆΠ΅ ΡΠ΅ΠΉΡΠ°Ρ.
ΠΡΡΡ Π΅ΡΠ΅ Libra ΠΎΡ Facebook, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½Π°Ρ Π°ΡΠ΄ΠΈΡΠΎΡΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΠΌ Ρ TON. Π Libra Ρ ΠΏΠΎΡΡΠΈ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π·Π½Π°Ρ, ΡΡΠ΄Ρ ΠΏΠΎ ΡΠΎΡΡΠΌΡ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΡΠ°ΠΌ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΠΌ Π² ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π΅ TON. Π₯ΠΎΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΈ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ TON Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΡ ΠΎΠΆΠ΅ Π½Π° Π°Π½Π΄Π΅Π³ΡΠ°ΡΠ½Π΄, ΡΡΠΎ ΡΠΎΠΆΠ΅ ΠΊΡΡΡΠΎ.
Π‘ΡΡΠ»ΠΊΠΈ
- ΠΡΠΈΡΠΈΠ°Π»ΡΠ½Π°Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΠΎ TON:
https://test.ton.org - ΠΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ TON:
https://github.com/ton-blockchain/ton - ΠΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΡΠ΅Π»Π΅ΠΊ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ
ΠΏΠ»Π°ΡΡΠΎΡΠΌ:
https://wallet.ton.org - Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ° ΠΈΠ· ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠΈ:
https://github.com/raiym/astonished - Π‘ΡΡΠ»ΠΊΠ° Π½Π° ΡΠ°ΠΉΡ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°:
https://ton-lottery.appspot.com - Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Π½Π° ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Visual Studio Code Π΄Π»Ρ FunC:
https://github.com/raiym/func-visual-studio-plugin - Π§Π°Ρ ΠΏΡΠΎ Π’ON Π² Telegram, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠΌΠΎΠ³ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π½Π° Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΌ ΡΡΠ°ΠΏΠ΅. Π― Π΄ΡΠΌΠ°Ρ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ, Π΅ΡΠ»ΠΈ ΡΠΊΠ°ΠΆΡ, ΡΡΠΎ ΡΠ°ΠΌ Π΅ΡΡΡ Π²ΡΠ΅ ΠΊΡΠΎ ΠΏΠΈΡΠ°Π» ΡΡΠΎ-ΡΠΎ Π΄Π»Ρ TON. Π’Π°ΠΌ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡΠΎΡΠΈΡΡ ΡΠ΅ΡΡΠΎΠ²ΡΡ
Π³ΡΠ°ΠΌΠΎΠ².
https://t.me/tondev_ru - ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠ°Ρ ΠΏΡΠΎ TON Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Ρ Π½Π°Ρ
ΠΎΠ΄ΠΈΠ» ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ:
https://t.me/TONgramDev - ΠΠ΅ΡΠ²ΡΠΉ ΡΡΠ°ΠΏ ΠΊΠΎΠ½ΠΊΡΡΡΠ°:
https://contest.com/blockchain - ΠΡΠΎΡΠΎΠΉ ΡΡΠ°ΠΏ ΠΊΠΎΠ½ΠΊΡΡΡΠ°:
https://contest.com/blockchain-2
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com