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