ืขืœ ืื™ืš ืœื›ืชื•ื‘ ื•ืœืคืจืกื ื—ื•ื–ื” ื—ื›ื ื‘ืจืฉืช ื”ืคืชื•ื—ื” ืฉืœ ื˜ืœื’ืจื (TON)

ืขืœ ืื™ืš ืœื›ืชื•ื‘ ื•ืœืคืจืกื ื—ื•ื–ื” ื—ื›ื ื‘-TON

ืขืœ ืžื” ื”ืžืืžืจ ื”ื–ื”?

ื‘ื›ืชื‘ื” ืื“ื‘ืจ ืขืœ ืื™ืš ื”ืฉืชืชืคืชื™ ื‘ืชื—ืจื•ืช ื”ื‘ืœื•ืงืฆ'ื™ื™ืŸ ื”ืจืืฉื•ื ื” (ืžืชื•ืš ืฉืชื™ื™ื) ืฉืœ ื˜ืœื’ืจื, ืœื ืœืงื—ืชื™ ืคืจืก ื•ื”ื—ืœื˜ืชื™ ืœืจืฉื•ื ืืช ื”ื—ื•ื•ื™ื” ืฉืœื™ ื‘ื›ืชื‘ื” ื›ื“ื™ ืฉื”ื™ื ืœื ืชืฉืงืข ื‘ืฉื›ื—ื” ื•ืื•ืœื™ ืชืขื–ื•ืจ ืžึดื™ืฉืึถื”ื•ึผ.

ืžื›ื™ื•ื•ืŸ ืฉืœื ืจืฆื™ืชื™ ืœื›ืชื•ื‘ ืงื•ื“ ืื‘ืกื˜ืจืงื˜ื™, ืืœื ืœืขืฉื•ืช ืžืฉื”ื• ืขื•ื‘ื“, ืขื‘ื•ืจ ื”ืžืืžืจ ื›ืชื‘ืชื™ ื—ื•ื–ื” ื—ื›ื ืœื”ื’ืจืœื” ืžื™ื™ื“ื™ืช ื•ืืชืจ ืฉืžืฆื™ื’ ื ืชื•ื ื™ ื—ื•ื–ื™ื ื—ื›ืžื™ื ื™ืฉื™ืจื•ืช ืž-TON ืžื‘ืœื™ ืœื”ืฉืชืžืฉ ื‘ืื—ืกื•ืŸ ื‘ื™ื ื™ื™ื.

ื”ืžืืžืจ ื™ื”ื™ื” ืฉื™ืžื•ืฉื™ ืœืžื™ ืฉืจื•ืฆื” ืœืขืฉื•ืช ืืช ื”ื—ื•ื–ื” ื”ื—ื›ื ื”ืจืืฉื•ืŸ ืฉืœื”ื ื‘-TON, ืื‘ืœ ืœื ื™ื•ื“ืข ืžืื™ืคื” ืœื”ืชื—ื™ืœ.

ื‘ืขื–ืจืช ื”ื”ื’ืจืœื” ื›ื“ื•ื’ืžื”, ืืขื‘ื•ืจ ืžื”ืชืงื ืช ื”ืกื‘ื™ื‘ื” ืœืคืจืกื•ื ื—ื•ื–ื” ื—ื›ื, ืื™ื ื˜ืจืืงืฆื™ื” ืขืžื• ื•ื›ืชื™ื‘ืช ืืชืจ ืœืงื‘ืœื” ื•ืคืจืกื•ื ื ืชื•ื ื™ื.

ืœื’ื‘ื™ ื”ืฉืชืชืคื•ืช ื‘ืชื—ืจื•ืช

ื‘ืื•ืงื˜ื•ื‘ืจ ื”ืื—ืจื•ืŸ ื”ื›ืจื™ื–ื” ื˜ืœื’ืจื ืขืœ ืชื—ืจื•ืช ื‘ืœื•ืงืฆ'ื™ื™ืŸ ืขื ืฉืคื•ืช ื—ื“ืฉื•ืช Fift ะธ FunC. ื”ื™ื” ืฆื•ืจืš ืœื‘ื—ื•ืจ ืžืชื•ืš ื›ืชื™ื‘ืช ื›ืœ ืื—ื“ ืžื—ืžืฉืช ื”ื—ื•ื–ื™ื ื”ื—ื›ืžื™ื ื”ืžื•ืฆืขื™ื. ื—ืฉื‘ืชื™ ืฉื–ื” ื™ื”ื™ื” ื ื—ืžื“ ืœืขืฉื•ืช ืžืฉื”ื• ืื—ืจ, ืœืœืžื•ื“ ืฉืคื” ื•ืœื™ืฆื•ืจ ืžืฉื”ื•, ื’ื ืื ืœื ืืฆื˜ืจืš ืœื›ืชื•ื‘ ืฉื•ื ื“ื‘ืจ ืื—ืจ ื‘ืขืชื™ื“. ื‘ื ื•ืกืฃ, ื”ื ื•ืฉื ื ืžืฆื ื›ืœ ื”ื–ืžืŸ ืขืœ ื”ืฉืคืชื™ื™ื.

ื›ื“ืื™ ืœื•ืžืจ ืฉืœื ื”ื™ื” ืœื™ ื ื™ืกื™ื•ืŸ ื‘ืคื™ืชื•ื— ื—ื•ื–ื™ื ื—ื›ืžื™ื.

ืชื›ื ื ืชื™ ืœื”ืฉืชืชืฃ ืขื“ ื”ืกื•ืฃ ืขื“ ืฉืื•ื›ืœ ื•ืื– ืœื›ืชื•ื‘ ืžืืžืจ ื‘ื™ืงื•ืจืช, ืื‘ืœ ื ื›ืฉืœืชื™ ืžื™ื“ ื‘ื”ืชื—ืœื”. ืื ื™ ื›ืชื‘ ืืจื ืง ืขื ืจื™ื‘ื•ื™ ื—ืชื™ืžื•ืช ืขืœ FunC ื•ื‘ื“ืจืš ื›ืœืœ ื–ื” ืขื‘ื“. ืœืงื—ืชื™ ืืช ื–ื” ื›ื‘ืกื™ืก ื—ื•ื–ื” ื—ื›ื ืขืœ Solidity.

ื‘ืื•ืชื• ื–ืžืŸ, ื—ืฉื‘ืชื™ ืฉื–ื” ื‘ื”ื—ืœื˜ ืžืกืคื™ืง ื›ื“ื™ ืœืงื—ืช ืœืคื—ื•ืช ืžืงื•ื ื‘ืคืจืก. ื›ืชื•ืฆืื” ืžื›ืš, ื›-40 ืžืชื•ืš 60 ืžืฉืชืชืคื™ื ื”ืคื›ื• ืœื–ื•ื›ื™ื ื‘ืคืจืกื™ื ื•ืื ื™ ืœื ื”ื™ื™ืชื™ ื‘ื™ื ื™ื”ื. ื‘ืื•ืคืŸ ื›ืœืœื™, ืื™ืŸ ื‘ื–ื” ืฉื•ื ื“ื‘ืจ ืจืข, ืื‘ืœ ื“ื‘ืจ ืื—ื“ ื”ืคืจื™ืข ืœื™. ื‘ื–ืžืŸ ืคืจืกื•ื ื”ืชื•ืฆืื•ืช ืœื ื ืขืฉืชื” ืกืงื™ืจืช ื”ื‘ื“ื™ืงื” ืœื—ื•ื–ื” ืฉืœื™, ืฉืืœืชื™ ืืช ื”ืžืฉืชืชืคื™ื ื‘ืฆ'ืื˜ ืื ื™ืฉ ืขื•ื“ ืžื™ืฉื”ื• ืฉืœื ื”ื™ื” ืœื•, ืœื ื”ื™ื•.

ื›ื ืจืื” ืฉืฉืžื™ื ืœื‘ ืœื”ื•ื“ืขื•ืช ืฉืœื™, ื™ื•ืžื™ื™ื ืื—ืจ ื›ืš ื”ืฉื•ืคื˜ื™ื ืคืจืกืžื• ืชื’ื•ื‘ื” ื•ืื ื™ ืขื“ื™ื™ืŸ ืœื ืžื‘ื™ืŸ ืื ื”ื ืคืกืคืกื• ื‘ื˜ืขื•ืช ืืช ื”ื—ื•ื–ื” ื”ื—ื›ื ืฉืœื™ ื‘ืžื”ืœืš ื”ืฉื™ืคื•ื˜ ืื• ืคืฉื•ื˜ ื—ืฉื‘ื• ืฉื–ื” ื›ืœ ื›ืš ื’ืจื•ืข ืฉืœื ืฆืจื™ืš ื”ืขืจื”. ืฉืืœืชื™ ืฉืืœื” ื‘ืขืžื•ื“, ืืš ืœื ืงื™ื‘ืœืชื™ ืชืฉื•ื‘ื”. ืœืžืจื•ืช ืฉื–ื” ืœื ืกื•ื“ ืžื™ ืฉืคื˜, ื—ืฉื‘ืชื™ ืฉื–ื” ืžื™ื•ืชืจ ืœื›ืชื•ื‘ ื”ื•ื“ืขื•ืช ืื™ืฉื™ื•ืช.

ื–ืžืŸ ืจื‘ ื”ื•ืฉืงืข ื‘ื”ื‘ื ื”, ื•ืœื›ืŸ ื”ื•ื—ืœื˜ ืœื›ืชื•ื‘ ืžืืžืจ. ืžื›ื™ื•ื•ืŸ ืฉืขื“ื™ื™ืŸ ืื™ืŸ ื”ืจื‘ื” ืžื™ื“ืข, ืžืืžืจ ื–ื” ื™ืขื–ื•ืจ ืœื—ืกื•ืš ื–ืžืŸ ืœื›ืœ ื”ืžืขื•ื ื™ื™ื ื™ื.

ื”ืงื•ื ืกืคื˜ ืฉืœ ื—ื•ื–ื™ื ื—ื›ืžื™ื ื‘-TON

ืœืคื ื™ ืฉืืชื” ื›ื•ืชื‘ ืžืฉื”ื•, ืืชื” ืฆืจื™ืš ืœื”ื‘ื™ืŸ ืžืื™ื–ื” ืฆื“ ืœื’ืฉืช ืœื“ื‘ืจ ื”ื–ื”. ืœื›ืŸ, ืขื›ืฉื™ื• ืื ื™ ืื’ื™ื“ ืœืš ืžืื™ืœื• ื—ืœืงื™ื ื”ืžืขืจื›ืช ืžื•ืจื›ื‘ืช. ืœื™ืชืจ ื“ื™ื•ืง, ืื™ืœื• ื—ืœืงื™ื ืืชื” ืฆืจื™ืš ืœื“ืขืช ื›ื“ื™ ืœื›ืชื•ื‘ ืœืคื—ื•ืช ื—ื•ื–ื” ืขื‘ื•ื“ื” ื›ืœืฉื”ื•.

ื ืชืžืงื“ ื‘ื›ืชื™ื‘ืช ื—ื•ื–ื” ื—ื›ื ื•ื‘ืขื‘ื•ื“ื” ืขื TON Virtual Machine (TVM), Fift ะธ FunC, ื›ืš ืฉื”ืžืืžืจ ื“ื•ืžื” ื™ื•ืชืจ ืœืชื™ืื•ืจ ืฉืœ ืคื™ืชื•ื— ืชื•ื›ื ื™ืช ืจื’ื™ืœื”. ืœื ื ืชืขื›ื‘ ืขืœ ืื™ืš ื”ืคืœื˜ืคื•ืจืžื” ืขืฆืžื” ืขื•ื‘ื“ืช ื›ืืŸ.

ื‘ืื•ืคืŸ ื›ืœืœื™ ืขืœ ืื™ืš ื–ื” ืขื•ื‘ื“ TVM ื•ืฉืคื” Fift ื™ืฉ ืชื™ืขื•ื“ ืจืฉืžื™ ื˜ื•ื‘. ืชื•ืš ื›ื“ื™ ื”ื”ืฉืชืชืคื•ืช ื‘ืชื—ืจื•ืช ื•ืขื›ืฉื™ื• ืชื•ืš ื›ื“ื™ ื›ืชื™ื‘ืช ื”ื—ื•ื–ื” ื”ื ื•ื›ื—ื™ ืคื ื™ืชื™ ืืœื™ื” ืœื ืคืขื.

ื”ืฉืคื” ื”ืขื™ืงืจื™ืช ื‘ื” ื ื›ืชื‘ื™ื ื—ื•ื–ื™ื ื—ื›ืžื™ื ื”ื™ื FunC. ืื™ืŸ ืขืœ ื–ื” ืชื™ืขื•ื“ ื›ืจื’ืข, ืื– ื›ื“ื™ ืœื›ืชื•ื‘ ืžืฉื”ื• ืฆืจื™ืš ืœืœืžื•ื“ ื“ื•ื’ืžืื•ืช ืฉืœ ื—ื•ื–ื™ื ื—ื›ืžื™ื ืžื”ืžืื’ืจ ื”ืจืฉืžื™ ื•ื™ื™ืฉื•ื ื”ืฉืคื” ืขืฆืžื” ืฉื, ื‘ื ื•ืกืฃ ืืคืฉืจ ืœื”ืกืชื›ืœ ืขืœ ื“ื•ื’ืžืื•ืช ืฉืœ ื—ื•ื–ื™ื ื—ื›ืžื™ื ืžื”ืฉื ื™ื™ื ื”ืื—ืจื•ื ื™ื ืชื—ืจื•ื™ื•ืช. ืงื™ืฉื•ืจื™ื ื‘ืกื•ืฃ ื”ืžืืžืจ.

ื ื ื™ื— ืฉื›ื‘ืจ ื›ืชื‘ื ื• ื—ื•ื–ื” ื—ื›ื ืขื‘ื•ืจ FunC, ืœืื—ืจ ืžื›ืŸ ืื ื• ืžืจื›ื™ื‘ื™ื ืืช ื”ืงื•ื“ ืœืชื•ืš Fift assembler.

ื”ื—ื•ื–ื” ื”ื—ื›ื ื”ืžืœื•ืงื˜ ื ื•ืชืจ ืœืคืจืกื•ื. ื›ื“ื™ ืœืขืฉื•ืช ื–ืืช ืืชื” ืฆืจื™ืš ืœื›ืชื•ื‘ ืคื•ื ืงืฆื™ื” ื‘ Fift, ืฉื™ื™ืงื— ืืช ืงื•ื“ ื”ื—ื•ื–ื” ื”ื—ื›ื ื•ื›ืžื” ืคืจืžื˜ืจื™ื ื ื•ืกืคื™ื ื›ืงืœื˜, ื•ื”ืคืœื˜ ื™ื”ื™ื” ืงื•ื‘ืฅ ืขื ื”ืกื™ื•ืžืช .boc (ืฉืคื™ืจื•ืฉื• "ืฉืงื™ืช ืชืื™ื"), ื•ื‘ื”ืชืื ืœืื•ืคืŸ ืฉื‘ื• ื ื›ืชื•ื‘ ืืช ื–ื”, ืžืคืชื— ื•ื›ืชื•ื‘ืช ืคืจื˜ื™ื™ื, ืฉื ื•ืฆืจื™ื ืขืœ ืกืžืš ืงื•ื“ ื”ื—ื•ื–ื” ื”ื—ื›ื. ื›ื‘ืจ ืืคืฉืจ ืœืฉืœื•ื— ื’ืจืžื™ื ืœื›ืชื•ื‘ืช ืฉืœ ื—ื•ื–ื” ื—ื›ื ืฉื˜ืจื ืคื•ืจืกื.

ืœืคืจืกื•ื ื—ื•ื–ื” ื—ื›ื ื‘-TON ืงื™ื‘ืœ .boc ืืช ื”ืงื•ื‘ืฅ ื™ื”ื™ื” ืฆื•ืจืš ืœืฉืœื•ื— ืœื‘ืœื•ืงืฆ'ื™ื™ืŸ ื‘ืืžืฆืขื•ืช ืœืงื•ื— ืงืœ (ืขื•ื“ ืขืœ ื›ืš ื‘ื”ืžืฉืš). ืื‘ืœ ืœืคื ื™ ื”ืคืจืกื•ื ืฆืจื™ืš ืœื”ืขื‘ื™ืจ ื’ืจืžื™ื ืœื›ืชื•ื‘ืช ืฉื ื•ืฆืจื”, ืื—ืจืช ื”ื—ื•ื–ื” ื”ื—ื›ื ืœื ื™ืคื•ืจืกื. ืœืื—ืจ ื”ืคืจืกื•ื, ื ื™ืชืŸ ืœื™ืฆื•ืจ ืื™ื ื˜ืจืืงืฆื™ื” ืขื ื”ื—ื•ื–ื” ื”ื—ื›ื ืขืœ ื™ื“ื™ ืฉืœื™ื—ืช ื”ื•ื“ืขื•ืช ืžื‘ื—ื•ืฅ (ืœื“ื•ื’ืžื”, ื‘ืืžืฆืขื•ืช ืœืงื•ื— ืงืœ) ืื• ืžื‘ืคื ื™ื (ืœื“ื•ื’ืžื”, ื—ื•ื–ื” ื—ื›ื ืื—ื“ ืฉื•ืœื— ืœืื—ืจ ื”ื•ื“ืขื” ื‘ืชื•ืš TON).

ื‘ืจื’ืข ืฉื”ื‘ื ื• ืื™ืš ื”ืงื•ื“ ืžืคื•ืจืกื, ื–ื” ื ืขืฉื” ืงืœ ื™ื•ืชืจ. ืื ื—ื ื• ื™ื•ื“ืขื™ื ื‘ืขืจืš ืžื” ืื ื—ื ื• ืจื•ืฆื™ื ืœื›ืชื•ื‘ ื•ืื™ืš ื”ืชื•ื›ื ื™ืช ืฉืœื ื• ืชืขื‘ื•ื“. ื•ื‘ื–ืžืŸ ื”ื›ืชื™ื‘ื”, ืื ื—ื ื• ืžื—ืคืฉื™ื ืื™ืš ื–ื” ื›ื‘ืจ ืžื™ื•ืฉื ื‘ื—ื•ื–ื™ื ื—ื›ืžื™ื ืงื™ื™ืžื™ื, ืื• ืฉืื ื—ื ื• ื‘ื•ื—ื ื™ื ืืช ืงื•ื“ ื”ื”ื˜ืžืขื” Fift ะธ FunC ื‘ืžืื’ืจ ื”ืจืฉืžื™, ืื• ืขื™ื™ืŸ ื‘ืชื™ืขื•ื“ ื”ืจืฉืžื™.

ืœืขืชื™ื ืงืจื•ื‘ื•ืช ืžืื•ื“ ื—ื™ืคืฉืชื™ ืžื™ืœื•ืช ืžืคืชื— ื‘ืฆ'ืื˜ ืฉืœ ื˜ืœื’ืจื ืฉื‘ื• ื”ืชืืกืคื• ื›ืœ ืžืฉืชืชืคื™ ื”ืชื—ืจื•ืช ื•ืขื•ื‘ื“ื™ ื˜ืœื’ืจื, ื•ื›ืš ืงืจื” ืฉื‘ืžื”ืœืš ื”ืชื—ืจื•ืช ื›ื•ืœื ื”ืชืืกืคื• ืฉื ื•ื”ืชื—ื™ืœื• ืœื“ื•ืŸ ื‘-Fift ื•ื‘-FunC. ืงื™ืฉื•ืจ ื‘ืกื•ืฃ ื”ืžืืžืจ.

ื”ื’ื™ืข ื”ื–ืžืŸ ืœืขื‘ื•ืจ ืžืชื™ืื•ืจื™ื” ืœืคืจืงื˜ื™ืงื”.

ื”ื›ื ืช ื”ืกื‘ื™ื‘ื” ืœืขื‘ื•ื“ื” ืขื TON

ืขืฉื™ืชื™ ืืช ื›ืœ ืžื” ืฉื™ืชื•ืืจ ื‘ืžืืžืจ ืขืœ MacOS ื•ื‘ื“ืงืชื™ ืื•ืชื• ืคืขืžื™ื™ื ื‘ืื•ื‘ื•ื ื˜ื• 18.04 LTS ื ืงื™ ื‘- Docker.

ื”ื“ื‘ืจ ื”ืจืืฉื•ืŸ ืฉืืชื” ืฆืจื™ืš ืœืขืฉื•ืช ื”ื•ื ืœื”ื•ืจื™ื“ ื•ืœื”ืชืงื™ืŸ lite-client ืื™ืชื ื ื™ืชืŸ ืœืฉืœื•ื— ื‘ืงืฉื•ืช ืœ-TON.

ื”ื”ื•ืจืื•ืช ื‘ืืชืจ ื”ืจืฉืžื™ ืžืชืืจื•ืช ืืช ืชื”ืœื™ืš ื”ื”ืชืงื ื” ื‘ืคื™ืจื•ื˜ ื•ื‘ืจื•ืจ ืœืžื“ื™ ื•ืžืฉืžื™ื˜ื•ืช ื›ืžื” ืคืจื˜ื™ื. ื›ืืŸ ืื ื• ืขื•ืงื‘ื™ื ืื—ืจ ื”ื”ื•ืจืื•ืช, ื•ืžืชืงื™ืŸ ืืช ื”ืชืœื•ืช ื”ื—ืกืจื•ืช ืœืื•ืจืš ื”ื“ืจืš. ืœื ื”ืจื›ื‘ืชื™ ื›ืœ ืคืจื•ื™ืงื˜ ื‘ืขืฆืžื™ ื•ื”ืชืงื ืชื™ ืžื”ืžืื’ืจ ื”ืจืฉืžื™ ืฉืœ ืื•ื‘ื•ื ื˜ื• (ื‘-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 assembler ื‘ 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 assembler.

ืžื›ื™ื•ื•ืŸ ืฉืื ื• ืจื•ืฆื™ื ืœื”ืคืขื™ืœ ื•ืœื‘ื“ื•ืง ืืช ื”ื—ื•ื–ื” ื”ื—ื›ื ื‘ืื•ืคืŸ ืžืงื•ืžื™, ื ื™ืฆื•ืจ ืงื•ื‘ืฅ lottery-test-suite.fif ื•ื”ืขืชื™ืงื• ืœืฉื ืืช ื”ืงื•ื“ ื”ืžื”ื•ื“ืจ, ืชื•ืš ื”ื—ืœืคืช ื”ืฉื•ืจื” ื”ืื—ืจื•ื ื” ื‘ื•, ืฉื›ื•ืชื‘ืช ืืช ืงื•ื“ ื”ื—ื•ื–ื” ื”ื—ื›ื ืœืงื‘ื•ืข codeื›ื“ื™ ืœื”ืขื‘ื™ืจ ืื•ืชื• ืœืžื›ื•ื ื” ื”ื•ื™ืจื˜ื•ืืœื™ืช:

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

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

ืขื“ ื›ื” ื–ื” ื ืจืื” ื‘ืจื•ืจ, ืขื›ืฉื™ื• ื‘ื•ืื• ื ื•ืกื™ืฃ ืœืื•ืชื• ืงื•ื‘ืฅ ืืช ื”ืงื•ื“ ืฉื‘ื• ื ืฉืชืžืฉ ื›ื“ื™ ืœื”ืคืขื™ืœ ืืช TVM.

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

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

ะ’ c7 ืื ื• ืžืชืขื“ื™ื ืืช ื”ื”ืงืฉืจ, ื›ืœื•ืžืจ, ื”ื ืชื•ื ื™ื ืฉืื™ืชื ื™ื•ืคืขืœ ื”-TVM (ืื• ืžืฆื‘ ื”ืจืฉืช). ืขื•ื“ ื‘ืžื”ืœืš ื”ืชื—ืจื•ืช, ืื—ื“ ื”ืžืคืชื—ื™ื ื”ืจืื” ื›ื™ืฆื“ ืœื™ืฆื•ืจ c7 ื•ื”ืขืชืงืชื™. ื‘ืžืืžืจ ื–ื” ื™ื™ืชื›ืŸ ืฉื ืฆื˜ืจืš ืœืฉื ื•ืช rand_seed ืžืื—ืจ ื•ื™ืฆื™ืจืช ืžืกืคืจ ืืงืจืื™ ืชืœื•ื™ ื‘ื• ื•ืื ืœื ื™ืฉืชื ื”, ืื•ืชื• ืžืกืคืจ ื™ื•ื—ื–ืจ ื‘ื›ืœ ืคืขื.

recv_internal ะธ recv_external ืงื‘ื•ืขื™ื ืขื ืขืจื›ื™ื 0 ื•-1 ื™ื”ื™ื• ืื—ืจืื™ื ืœืงืจื™ืื” ืœืคื•ื ืงืฆื™ื•ืช ื”ืžืชืื™ืžื•ืช ื‘ื—ื•ื–ื” ื”ื—ื›ื.

ื›ืขืช ืื ื• ืžื•ื›ื ื™ื ืœื™ืฆื•ืจ ืืช ื”ืžื‘ื—ืŸ ื”ืจืืฉื•ืŸ ืœื—ื•ื–ื” ื”ื—ื›ื ื”ืจื™ืง ืฉืœื ื•. ืœืžืขืŸ ื”ื‘ื”ื™ืจื•ืช, ืœืขืช ืขืชื” ื ื•ืกื™ืฃ ืืช ื›ืœ ื”ื‘ื“ื™ืงื•ืช ืœืื•ืชื• ืงื•ื‘ืฅ lottery-test-suite.fif.

ื‘ื•ืื• ื ื™ืฆื•ืจ ืžืฉืชื ื” storage ื•ื›ืชื•ื‘ ืจื™ืง ืœืชื•ื›ื• cell, ื–ื” ื™ื”ื™ื” ืื—ืกื•ืŸ ื”ื—ื•ื–ื” ื”ื—ื›ื.

message ื–ื” ื”ืžืกืจ ืฉื ืขื‘ื™ืจ ืœืื™ืฉ ื”ืงืฉืจ ื”ื—ื›ื ืžื‘ื—ื•ืฅ. ืื ื—ื ื• ื’ื ื ื”ืคื•ืš ืื•ืชื• ืœืจื™ืง ืœืขืช ืขืชื”.

variable storage 
<b b> storage ! 

variable message 
<b b> message ! 

ืœืื—ืจ ืฉื”ื›ื ื• ืืช ื”ืงื‘ื•ืขื™ื ื•ื”ืžืฉืชื ื™ื, ืื ื• ืžืคืขื™ืœื™ื ืืช TVM ื‘ืืžืฆืขื•ืช ื”ืคืงื•ื“ื” runvmctx ื•ืœื”ืขื‘ื™ืจ ืืช ื”ืคืจืžื˜ืจื™ื ืฉื ื•ืฆืจื• ืœืงืœื˜.

message @ 
recv_external 
code 
storage @ 
c7 
runvmctx 

ื‘ืกื•ืฃ ื ืฆืœื™ื— ื›ื›ื” ืงื•ื“ ื‘ื™ื ื™ื™ื ืขื‘ื•ืจ Fift.

ื›ืขืช ื ื•ื›ืœ ืœื”ืจื™ืฅ ืืช ื”ืงื•ื“ ืฉื ื•ืฆืจ.

export FIFTPATH=~/TON/ton/crypto/fift/lib // ะฒั‹ะฟะพะปะฝัะตะผ ะพะดะธะฝ ั€ะฐะท ะดะปั ัƒะดะพะฑัั‚ะฒะฐ 
~/TON/build/crypto/fift -s lottery-test-suite.fif 

ื”ืชื•ื›ื ื™ืช ืืžื•ืจื” ืœืคืขื•ืœ ืœืœื ืฉื’ื™ืื•ืช ื•ื‘ืคืœื˜ ื ืจืื” ืืช ื™ื•ืžืŸ ื”ื‘ื™ืฆื•ืข:

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

ื ื”ื“ืจ, ื›ืชื‘ื ื• ืืช ื’ืจืกืช ื”ืขื‘ื•ื“ื” ื”ืจืืฉื•ื ื” ืฉืœ ื”ื—ื•ื–ื” ื”ื—ื›ื.

ืขื›ืฉื™ื• ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœื”ื•ืกื™ืฃ ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช. ืจืืฉื™ืช ื‘ื•ืื• ื ืขืกื•ืง ื‘ืžืกืจื™ื ืฉืžื’ื™ืขื™ื ืžื”ืขื•ืœื ื”ื—ื™ืฆื•ืŸ ืืœ recv_external()

ื”ื™ื–ื ืขืฆืžื• ื‘ื•ื—ืจ ืืช ืคื•ืจืžื˜ ื”ื”ื•ื“ืขื” ืฉื”ื—ื•ื–ื” ื™ื›ื•ืœ ืœืงื‘ืœ.

ืื‘ืœ ื‘ื“ืจืš ื›ืœืœ

  • ืจืืฉื™ืช, ืื ื• ืจื•ืฆื™ื ืœื”ื’ืŸ ืขืœ ื”ื—ื•ื–ื” ืฉืœื ื• ืžื”ืขื•ืœื ื”ื—ื™ืฆื•ืŸ ื•ืœื”ืคื•ืš ืื•ืชื• ื›ืš ืฉืจืง ื‘ืขืœ ื”ื—ื•ื–ื” ื™ื•ื›ืœ ืœืฉืœื•ื— ืืœื™ื• ืžืกืจื™ื ื—ื™ืฆื•ื ื™ื™ื.
  • ืฉื ื™ืช, ื›ืฉืื ื—ื ื• ืฉื•ืœื—ื™ื ื”ื•ื“ืขื” ื—ื•ืงื™ืช ืœ-TON, ืื ื—ื ื• ืจื•ืฆื™ื ืฉื–ื” ื™ืงืจื” ืคืขื ืื—ืช ื‘ื“ื™ื•ืง ื•ื›ืฉืื ื—ื ื• ืฉื•ืœื—ื™ื ืืช ืื•ืชื” ื”ื•ื“ืขื” ืฉื•ื‘, ื”ื—ื•ื–ื” ื”ื—ื›ื ื“ื•ื—ื” ืื•ืชื”.

ืื– ื›ืžืขื˜ ื›ืœ ื—ื•ื–ื” ืคื•ืชืจ ืืช ืฉืชื™ ื”ื‘ืขื™ื•ืช ื”ืืœื”, ืžื›ื™ื•ื•ืŸ ืฉื”ื—ื•ื–ื” ืฉืœื ื• ืžืงื‘ืœ ืžืกืจื™ื ื—ื™ืฆื•ื ื™ื™ื, ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœื˜ืคืœ ื’ื ื‘ื–ื”.

ื ืขืฉื” ืืช ื–ื” ื‘ืกื“ืจ ื”ืคื•ืš. ืจืืฉื™ืช, ื‘ื•ืื• ื ืคืชื•ืจ ืืช ื”ื‘ืขื™ื” ื‘ื—ื–ืจื”, ืื ื”ื—ื•ื–ื” ื›ื‘ืจ ืงื™ื‘ืœ ื”ื•ื“ืขื” ื›ื–ื• ื•ืขื™ื‘ื“ื” ืื•ืชื”, ื”ื•ื ืœื ื™ื‘ืฆืข ืื•ืชื” ืคืขื ืฉื ื™ื™ื”. ื•ืื– ื ืคืชื•ืจ ืืช ื”ื‘ืขื™ื” ื›ืš ืฉืจืง ืžืขื’ืœ ืžืกื•ื™ื ืฉืœ ืื ืฉื™ื ื™ื•ื›ืœ ืœืฉืœื•ื— ื”ื•ื“ืขื•ืช ืœื—ื•ื–ื” ื”ื—ื›ื.

ื™ืฉื ืŸ ื“ืจื›ื™ื ืฉื•ื ื•ืช ืœืคืชื•ืจ ืืช ื”ื‘ืขื™ื” ืขื ื”ื•ื“ืขื•ืช ื›ืคื•ืœื•ืช. ื”ื ื” ืื™ืš ื ืขืฉื” ื–ืืช. ื‘ื—ื•ื–ื” ื”ื—ื›ื ืื ื• ืžืืชื—ืœื™ื ืืช ืžื•ื ื” ื”ื”ื•ื“ืขื•ืช ืฉื”ืชืงื‘ืœื• ื‘ืขืจืš ื”ื”ืชื—ืœืชื™ 0. ื‘ื›ืœ ื”ื•ื“ืขื” ืœื—ื•ื–ื” ื”ื—ื›ื ื ื•ืกื™ืฃ ืืช ืขืจืš ื”ืžื•ื ื” ื”ื ื•ื›ื—ื™. ืื ืขืจืš ื”ืžื•ื ื” ื‘ื”ื•ื“ืขื” ืื™ื ื• ืชื•ืื ืืช ื”ืขืจืš ื‘ื—ื•ื–ื” ื”ื—ื›ื, ืื– ืื ื—ื ื• ืœื ืžืขื‘ื“ื™ื ืื•ืชื•; ืื ื›ืŸ, ืžืขื‘ื“ื™ื ืื•ืชื• ื•ืžื’ื“ื™ืœื™ื ืืช ื”ืžื•ื ื” ื‘ื—ื•ื–ื” ื”ื—ื›ื ื‘-1.

ื‘ื•ืื• ื ื—ื–ื•ืจ ืœ lottery-test-suite.fif ื•ืœื”ื•ืกื™ืฃ ืœื• ืžื‘ื—ืŸ ืฉื ื™. ืื ืื ื• ืฉื•ืœื—ื™ื ืžืกืคืจ ืฉื’ื•ื™, ื”ืงื•ื“ ืืžื•ืจ ืœื–ืจื•ืง ื—ืจื™ื’. ืœื“ื•ื’ืžื”, ืชืŸ ืœื ืชื•ื ื™ ื”ื—ื•ื–ื” ืœืื—ืกืŸ 166, ื•ืื ื• ื ืฉืœื— 165.

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

message @ 
recv_external 
code 
storage @ 
c7 
runvmctx

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

ื‘ื•ืื• ื ืฉื™ืง.

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

ื•ื ืจืื” ืฉื”ื‘ื“ื™ืงื” ืžื‘ื•ืฆืขืช ืขื ืฉื’ื™ืื”.

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

ื‘ืฉืœื‘ ื–ื” lottery-test-suite.fif ืฆืจื™ืš ืœื”ื™ืจืื•ืช ื›ืžื• ะฟะพ ััั‹ะปะบะต.

ืขื›ืฉื™ื• ื‘ื•ืื• ื ื•ืกื™ืฃ ืืช ื”ื”ื™ื’ื™ื•ืŸ ื”ื ื’ื“ื™ ืœื—ื•ื–ื” ื”ื—ื›ื ื‘ lottery-code.fc.

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

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

ะ’ slice in_msg ื˜ืžื•ืŸ ื”ืžืกืจ ืฉืื ื• ืฉื•ืœื—ื™ื.

ื”ื“ื‘ืจ ื”ืจืืฉื•ืŸ ืฉืื ื—ื ื• ืขื•ืฉื™ื ื”ื•ื ืœื‘ื“ื•ืง ืื ื”ื”ื•ื“ืขื” ืžื›ื™ืœื” ื ืชื•ื ื™ื, ืื ืœื, ืื– ืื ื—ื ื• ืคืฉื•ื˜ ื™ื•ืฆืื™ื.

ืœืื—ืจ ืžื›ืŸ ื ื ืชื— ืืช ื”ื”ื•ื“ืขื”. in_msg~load_uint(32) ื˜ื•ืขืŸ ืืช ื”ืžืกืคืจ 165, 32 ืกื™ื‘ื™ื•ืช unsigned int ืžื”ื”ื•ื“ืขื” ื”ืžื•ืขื‘ืจืช.

ื‘ืฉืœื‘ ื”ื‘ื ื ื˜ืขืŸ 32 ืกื™ื‘ื™ื•ืช ืžืื—ืกื•ืŸ ื”ื—ื•ื–ื” ื”ื—ื›ื. ืื ื• ื‘ื•ื“ืงื™ื ืฉื”ืžืกืคืจ ืฉื ื˜ืขืŸ ืชื•ืื ืœืžืกืคืจ ืฉืขื‘ืจ; ืื ืœื, ืื ื• ื–ื•ืจืงื™ื ื—ืจื™ื’. ื‘ืžืงืจื” ืฉืœื ื•, ืžื›ื™ื•ื•ืŸ ืฉืื ื• ืขื•ื‘ืจื™ื ืื™-ื”ืชืืžื”, ื™ืฉ ืœื–ืจื•ืง ื—ืจื™ื’.

ืขื›ืฉื™ื• ื‘ื•ืื• ื ืขืฉื” ืงื•ืžืคื™ืœืฆื™ื”.

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

ื”ืขืชืง ืืช ื”ืงื•ื“ ืฉื”ืชืงื‘ืœ ืœ lottery-test-suite.fif, ืœื ืœืฉื›ื•ื— ืœื”ื—ืœื™ืฃ ืืช ื”ืฉื•ืจื” ื”ืื—ืจื•ื ื”.

ืื ื• ื‘ื•ื“ืงื™ื ืฉื”ืžื‘ื—ืŸ ืขื•ื‘ืจ:

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

ืžืžืฉ ื›ืืŸ ืืชื” ื™ื›ื•ืœ ืœืจืื•ืช ืืช ื”ื”ืชื—ื™ื™ื‘ื•ืช ื”ืžืงื‘ื™ืœื” ืขื ื”ืชื•ืฆืื•ืช ื”ื ื•ื›ื—ื™ื•ืช.

ืฉื™ืžื• ืœื‘ ืฉื–ื” ืœื ื ื•ื— ืœื”ืขืชื™ืง ื›ืœ ื”ื–ืžืŸ ืืช ื”ืงื•ื“ ื”ืงื•ืžืคื™ืœื™ ืฉืœ ื—ื•ื–ื” ื—ื›ื ืœืงื•ื‘ืฅ ืขื ื‘ื“ื™ืงื•ืช, ืœื›ืŸ ื ื›ืชื•ื‘ ืกืงืจื™ืคื˜ ืฉื™ื›ืชื•ื‘ ืœื ื• ืืช ื”ืงื•ื“ ืœืงื‘ื•ืข, ื•ืคืฉื•ื˜ ื ื—ื‘ืจ ืืช ื”ืงื•ื“ ื”ืงื•ืžืคื™ืœ ืœื‘ื“ื™ืงื•ืช ืฉืœื ื• ื‘ืืžืฆืขื•ืช "include".

ืฆื•ืจ ืงื•ื‘ืฅ ื‘ืชื™ืงื™ื™ืช ื”ืคืจื•ื™ืงื˜ build.sh ืขื ื”ืชื•ื›ืŸ ื”ื‘ื.

#!/bin/bash

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

ื‘ื•ืื• ื ืขืฉื” ืืช ื–ื” ื‘ืจ ื”ืคืขืœื”.

chmod +x ./build.sh

ืขื›ืฉื™ื•, ืคืฉื•ื˜ ื”ืคืขืœ ืืช ื”ืกืงืจื™ืคื˜ ืฉืœื ื• ื›ื“ื™ ืœื”ืจื›ื™ื‘ ืืช ื”ื—ื•ื–ื”. ืื‘ืœ ื—ื•ืฅ ืžื–ื”, ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœื›ืชื•ื‘ ืืช ื–ื” ืœืชื•ืš ืงื‘ื•ืข code. ืื– ื ื™ืฆื•ืจ ืงื•ื‘ืฅ ื—ื“ืฉ lotter-compiled-for-test.fif, ืื•ืชื• ื ื›ืœื•ืœ ื‘ืงื•ื‘ืฅ lottery-test-suite.fif.

ื‘ื•ืื• ื ื•ืกื™ืฃ ืงื•ื“ skirpt ืœ-sh, ืฉืคืฉื•ื˜ ื™ืฉื›ืคืœ ืืช ื”ืงื•ื‘ืฅ ื”ืงื•ืžืคื™ืœืฆื™ื” ืคื ื™ืžื” lotter-compiled-for-test.fif ื•ืœืฉื ื•ืช ืืช ื”ืฉื•ืจื” ื”ืื—ืจื•ื ื” ื‘ื•.

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

ื›ืขืช, ื›ื“ื™ ืœื‘ื“ื•ืง, ื”ื‘ื” ื ืจื™ืฅ ืืช ื”ืกืงืจื™ืคื˜ ืฉื ื•ืฆืจ ื•ื™ื™ื•ื•ืฆืจ ืงื•ื‘ืฅ lottery-compiled-for-test.fif, ืฉื ื›ืœื•ืœ ื‘ืชื•ื›ื ื• lottery-test-suite.fif

ะ’ lottery-test-suite.fif ืžื—ืง ืืช ืงื•ื“ ื”ื—ื•ื–ื” ื•ื”ื•ืกืฃ ืืช ื”ืฉื•ืจื” "lottery-compiled-for-test.fif" include.

ืื ื—ื ื• ืขื•ืจื›ื™ื ื‘ื“ื™ืงื•ืช ื›ื“ื™ ืœื‘ื“ื•ืง ืฉื”ื ืขื•ื‘ืจื™ื.

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

ืžืขื•ืœื”, ืขื›ืฉื™ื• ื›ื“ื™ ืœื”ืคื•ืš ืืช ื”ื”ืฉืงื” ืฉืœ ื‘ื“ื™ืงื•ืช ืœืื•ื˜ื•ืžื˜ื™ื•ืช, ื‘ื•ืื• ื ื™ืฆื•ืจ ืงื•ื‘ืฅ test.sh, ืฉืชืชื‘ืฆืข ืชื—ื™ืœื” build.sh, ื•ืœืื—ืจ ืžื›ืŸ ื”ืจืฅ ืืช ื”ื‘ื“ื™ืงื•ืช.

touch test.sh
chmod +x test.sh

ืื ื—ื ื• ื›ื•ืชื‘ื™ื ื‘ืคื ื™ื

./build.sh 

echo "nCompilation completedn"

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

ื‘ื ื ืขืฉื” test.sh ื•ืœื”ืคืขื™ืœ ืื•ืชื• ื›ื“ื™ ืœื•ื•ื“ื ืฉื”ื‘ื“ื™ืงื•ืช ืคื•ืขืœื•ืช.

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

ืื ื• ื‘ื•ื“ืงื™ื ืฉื”ื—ื•ื–ื” ืžืกืชื“ืจ ื•ื”ื‘ื“ื™ืงื•ืช ืžื‘ื•ืฆืขื•ืช.

ืžืขื•ืœื”, ืขื›ืฉื™ื• ื‘ื”ืคืขืœื” test.sh ื”ื‘ื“ื™ืงื•ืช ื™ืขืจื›ื• ื•ื™ืคืขืœื• ื‘ืื•ืคืŸ ืžื™ื™ื“ื™. ื”ื ื” ื”ืงื™ืฉื•ืจ ืœ ืœึฐื‘ึทืฆึตืขึท.

ืื•ืงื™ื™, ืœืคื ื™ ืฉื ืžืฉื™ืš, ื‘ื•ื ื ืขืฉื” ื“ื‘ืจ ื ื•ืกืฃ ืžื˜ืขืžื™ ื ื•ื—ื•ืช.

ื‘ื•ืื• ื ื™ืฆื•ืจ ืชื™ืงื™ื” build ืฉื‘ื• ื ืื—ืกืŸ ืืช ื”ื—ื•ื–ื” ื”ืžื•ืขืชืง ื•ืืช ื”ืฉื™ื‘ื•ื˜ ืฉืœื• ื›ืชื•ื‘ ื‘ืงื‘ื•ืข lottery-compiled.fif, lottery-compiled-for-test.fif. ื‘ื•ืื• ื’ื ื ื™ืฆื•ืจ ืชื™ืงื™ื” test ื”ื™ื›ืŸ ื™ื™ืฉืžืจ ืงื•ื‘ืฅ ื”ื‘ื“ื™ืงื”? lottery-test-suite.fif ื•ื™ื™ืชื›ืŸ ืฉืงื‘ืฆื™ื ืชื•ืžื›ื™ื ืื—ืจื™ื. ืงื™ืฉื•ืจ ืœืฉื™ื ื•ื™ื™ื ืจืœื•ื•ื ื˜ื™ื™ื.

ื‘ื•ืื• ื ืžืฉื™ืš ืœืคืชื— ืืช ื”ื—ื•ื–ื” ื”ื—ื›ื.

ื‘ื”ืžืฉืš ืืžื•ืจื” ืœื”ื™ื•ืช ื‘ื“ื™ืงื” ืฉื‘ื•ื“ืงืช ืฉื”ื”ื•ื“ืขื” ืžืชืงื‘ืœืช ื•ื”ืžื•ื ื” ืžืชืขื“ื›ืŸ ื‘ื—ื ื•ืช ื›ืฉืื ื—ื ื• ืฉื•ืœื—ื™ื ืืช ื”ืžืกืคืจ ื”ื ื›ื•ืŸ. ืื‘ืœ ื ืขืฉื” ืืช ื–ื” ืื—ืจ ื›ืš.

ืขื›ืฉื™ื• ื‘ื•ืื• ื ื—ืฉื•ื‘ ืื™ื–ื” ืžื‘ื ื” ื ืชื•ื ื™ื ื•ืื™ื–ื” ื ืชื•ื ื™ื ืฆืจื™ื›ื™ื ืœื”ื™ื•ืช ืžืื•ื—ืกื ื™ื ื‘ื—ื•ื–ื” ื”ื—ื›ื.

ืื ื™ ืืชืืจ ืืช ื›ืœ ืžื” ืฉืื ื• ืžืื—ืกื ื™ื.

`seqno` 32-ั… ะฑะธั‚ะฝะพะต ั†ะตะปะพะต ะฟะพะปะพะถะธั‚ะตะปัŒะฝะพะต ั‡ะธัะปะพ ัั‡ะตั‚ั‡ะธะบ. 

`pubkey` 256-ั‚ะธ ะฑะธั‚ะฝะพะต ั†ะตะปะพะต ะฟะพะปะพะถะธั‚ะตะปัŒะฝะพะต ั‡ะธัะปะพ ะฟัƒะฑะปะธั‡ะฝั‹ะน ะบะปัŽั‡, ั ะฟะพะผะพั‰ัŒัŽ ะบะพั‚ะพั€ะพะณะพ, ะผั‹ ะฑัƒะดะตะผ ะฟั€ะพะฒะตั€ัั‚ัŒ ะฟะพะดะฟะธััŒ ะพั‚ะฟั€ะฐะฒะปะตะฝะฝะพะณะพ ะธะทะฒะฝะต ัะพะพะฑั‰ะตะฝะธั, ะพ ั‡ะตะผ ะฝะธะถะต. 

`order_seqno` 32-ั… ะฑะธั‚ะฝะพะต ั†ะตะปะพะต ะฟะพะปะพะถะธั‚ะตะปัŒะฝะพะต ั‡ะธัะปะพ ั…ั€ะฐะฝะธั‚ ัั‡ะตั‚ั‡ะธะบ ะบะพะปะธั‡ะตัั‚ะฒะฐ ัั‚ะฐะฒะพะบ. 

`number_of_wins` 32-ั… ะฑะธั‚ะฝะพะต ั†ะตะปะพะต ะฟะพะปะพะถะธั‚ะตะปัŒะฝะพะต ั‡ะธัะปะพ ั…ั€ะฐะฝะธั‚  ะบะพะปะธั‡ะตัั‚ะฒะพ ะฟะพะฑะตะด. 

`incoming_amount` ั‚ะธะฟ ะดะฐะฝะฝั‹ั… Gram (ะฟะตั€ะฒั‹ะต 4 ะฑะธั‚ะฐ ะพั‚ะฒะตั‡ะฐะตั‚ ะทะฐ ะดะปะธะฝัƒ), ั…ั€ะฐะฝะธั‚ ะพะฑั‰ะตะต ะบะพะปะธั‡ะตัั‚ะฒะพ ะณั€ะฐะผะพะฒ, ะบะพั‚ะพั€ั‹ะต ะฑั‹ะปะธ ะพั‚ะฟั€ะฐะฒะปะตะฝั‹ ะฝะฐ ะบะพะฝั‚ั€ั‚ะฐะบั‚. 

`outgoing_amount` ะพะฑั‰ะตะต ะบะพะปะธั‡ะตัั‚ะฒะพ ะณั€ะฐะผะพะฒ, ะบะพั‚ะพั€ะพะต ะฑั‹ะปะพ ะพั‚ะฟั€ะฐะฒะปะตะฝะพ ะฟะพะฑะตะดะธั‚ะตะปัะผ. 

`owner_wc` ะฝะพะผะตั€ ะฒะพั€ะบั‡ะตะนะฝะฐ, 32-ั… ะฑะธั‚ะฝะพะต (ะฒ ะฝะตะบะพั‚ะพั€ั‹ั… ะผะตัั‚ะฐั… ะฝะฐะฟะธัะฐะฝะพ, ั‡ั‚ะพ 8-ะผะธ ะฑะธั‚ะฝะพะต) ั†ะตะปะพะต ั‡ะธัะปะพ. ะ’ ะดะฐะฝะฝั‹ะน ะผะพะผะตะฝั‚ ะฒัะตะณะพ ะดะฒะฐ -1 ะธ 0. 

`owner_account_id` 256-ั‚ะธ ะฑะธั‚ะฝะพะต ั†ะตะปะพะต ะฟะพะปะพะถะธั‚ะตะปัŒะฝะพะต ั‡ะธัะปะพ, ะฐะดั€ะตั ะบะพะฝั‚ั€ะฐะบั‚ะฐ ะฒ ั‚ะตะบัƒั‰ะตะผ ะฒะพั€ะบั‡ะตะนะฝะต. 

`orders` ะฟะตั€ะตะผะตะฝะฝะฐั ั‚ะธะฟะฐ ัะปะพะฒะฐั€ัŒ, ั…ั€ะฐะฝะธั‚ ะฟะพัะปะตะดะฝะธะต ะดะฒะฐะดั†ะฐั‚ัŒ ัั‚ะฐะฒะพะบ. 

ืœืื—ืจ ืžื›ืŸ ืขืœื™ืš ืœื›ืชื•ื‘ ืฉืชื™ ืคื•ื ืงืฆื™ื•ืช. ื‘ื•ืื• ื ืงืจื ืœืจืืฉื•ืŸ pack_state(), ืฉื™ืืจื•ื– ืืช ื”ื ืชื•ื ื™ื ืœืฉืžื™ืจื” ื‘ื”ืžืฉืš ื‘ืื—ืกื•ืŸ ื”ื—ื•ื–ื” ื”ื—ื›ื. ื‘ื•ืื• ื ืงืจื ืœืฉื ื™ unpack_state() ื™ืงืจื ื•ื™ื—ื–ื™ืจ ื ืชื•ื ื™ื ืžื”ืื—ืกื•ืŸ.

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

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

ืื ื• ืžื•ืกื™ืคื™ื ืืช ืฉืชื™ ื”ืคื•ื ืงืฆื™ื•ืช ื”ืœืœื• ืœืชื—ื™ืœืช ื”ื—ื•ื–ื” ื”ื—ื›ื. ื–ื” ื™ืขื‘ื•ื“ ื›ื›ื” ืชื•ืฆืืช ื‘ื™ื ื™ื™ื.

ื›ื“ื™ ืœืฉืžื•ืจ ื ืชื•ื ื™ื ืชืฆื˜ืจืš ืœื”ืชืงืฉืจ ืœืคื•ื ืงืฆื™ื” ื”ืžื•ื‘ื ื™ืช set_data() ื•ื–ื” ื™ื›ืชื•ื‘ ื ืชื•ื ื™ื ืž pack_state() ื‘ืื—ืกื•ืŸ ื”ื—ื•ื–ื” ื”ื—ื›ื.

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

ื›ืขืช, ื›ืฉื™ืฉ ืœื ื• ืคื•ื ืงืฆื™ื•ืช ื ื•ื—ื•ืช ืœื›ืชื™ื‘ื” ื•ืงืจื™ืื” ืฉืœ ื ืชื•ื ื™ื, ื ื•ื›ืœ ืœื”ืžืฉื™ืš ื”ืœืื”.

ืขืœื™ื ื• ืœื‘ื“ื•ืง ืฉื”ื”ื•ื“ืขื” ื”ื ื›ื ืกืช ืžื‘ื—ื•ืฅ ื—ืชื•ืžื” ืขืœ ื™ื“ื™ ื‘ืขืœ ื”ื—ื•ื–ื” (ืื• ืžืฉืชืžืฉ ืื—ืจ ืฉื™ืฉ ืœื• ื’ื™ืฉื” ืœืžืคืชื— ื”ืคืจื˜ื™).

ื›ืืฉืจ ืื ื• ืžืคืจืกืžื™ื ื—ื•ื–ื” ื—ื›ื, ืื ื• ื™ื›ื•ืœื™ื ืœืืชื—ืœ ืื•ืชื• ืขื ื”ื ืชื•ื ื™ื ื”ื“ืจื•ืฉื™ื ืœื ื• ื‘ืื—ืกื•ืŸ, ืฉื™ื™ืฉืžืจื• ืœืฉื™ืžื•ืฉ ืขืชื™ื“ื™. ื ืจืฉื•ื ืฉื ืืช ื”ืžืคืชื— ื”ืฆื™ื‘ื•ืจื™ ื›ื“ื™ ืฉื ื•ื›ืœ ืœื•ื•ื“ื ืฉื”ื”ื•ื“ืขื” ื”ื ื›ื ืกืช ื ื—ืชืžื” ื‘ืžืคืชื— ื”ืคืจื˜ื™ ื”ืžืชืื™ื.

ืœืคื ื™ ืฉื ืžืฉื™ืš, ื‘ื•ืื• ื ื™ืฆื•ืจ ืžืคืชื— ืคืจื˜ื™ ื•ื ื›ืชื•ื‘ ืื•ืชื• ืืœื™ื• test/keys/owner.pk. ืœืฉื ื›ืš, ื‘ื•ืื• ื ืคืขื™ืœ ืืช Fift ื‘ืžืฆื‘ ืื™ื ื˜ืจืืงื˜ื™ื‘ื™ ื•ื ื‘ืฆืข ืืจื‘ืข ืคืงื•ื“ื•ืช.

`newkeypair` ะณะตะฝะตั€ะฐั†ะธั ะฟัƒะฑะปะธั‡ะฝะพะณะพ ะธ ะฟั€ะธะฒะฐั‚ะฝะพะณะพ ะบะปัŽั‡ะฐ ะธ ะทะฐะฟะธััŒ ะธั… ะฒ ัั‚ะตะบ. 

`drop` ัƒะดะฐะปะตะฝะธั ะธะท ัั‚ะตะบะฐ ะฒะตั€ั…ะฝะตะณะพ ัะปะตะผะตะฝั‚ะฐ (ะฒ ะดะฐะฝะฝะพะผ ัะปัƒั‡ะฐะต ะฟัƒะฑะปะธั‡ะฝั‹ะน ะบะปัŽั‡)  

`.s` ะฟั€ะพัั‚ะพ ะฟะพัะผะพั‚ั€ะตั‚ัŒ ั‡ั‚ะพ ะปะตะถะธั‚ ะฒ ัั‚ะตะบะต ะฒ ะดะฐะฝะฝั‹ะน ะผะพะผะตะฝั‚ 

`"owner.pk" B>file` ะทะฐะฟะธััŒ ะฟั€ะธะฒะฐั‚ะฝะพะณะพ ะบะปัŽั‡ะฐ ะฒ ั„ะฐะนะป ั ะธะผะตะฝะตะผ `owner.pk`. 

`bye` ะทะฐะฒะตั€ัˆะฐะตั‚ ั€ะฐะฑะพั‚ัƒ ั Fift. 

ื‘ื•ืื• ื ื™ืฆื•ืจ ืชื™ืงื™ื” keys ื‘ืชื•ืš ื”ืชื™ืงื™ื” test ื•ืจืฉื•ื ืฉื ืืช ื”ืžืคืชื— ื”ืคืจื˜ื™.

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

ืื ื• ืจื•ืื™ื ืงื•ื‘ืฅ ื‘ืชื™ืงื™ื™ื” ื”ื ื•ื›ื—ื™ืช owner.pk.

ืื ื• ืžืกื™ืจื™ื ืืช ื”ืžืคืชื— ื”ืฆื™ื‘ื•ืจื™ ืžื”ืžื—ืกื ื™ืช ื•ื‘ืขืช ื”ืฆื•ืจืš ื ื•ื›ืœ ืœืงื‘ืœ ืื•ืชื• ืžื”ืžืคืชื— ื”ืคืจื˜ื™.

ืขื›ืฉื™ื• ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœื›ืชื•ื‘ ืื™ืžื•ืช ื—ืชื™ืžื”. ื ืชื—ื™ืœ ื‘ืžื‘ื—ืŸ. ืจืืฉื™ืช ืื ื• ืงื•ืจืื™ื ืืช ื”ืžืคืชื— ื”ืคืจื˜ื™ ืžื”ืงื•ื‘ืฅ ื‘ืืžืฆืขื•ืช ื”ืคื•ื ืงืฆื™ื” file>B ื•ืœื›ืชื•ื‘ ืืช ื–ื” ืœืžืฉืชื ื” owner_private_key, ื•ืœืื—ืจ ืžื›ืŸ ื‘ืืžืฆืขื•ืช ื”ืคื•ื ืงืฆื™ื” priv>pub ื”ืžืจ ืืช ื”ืžืคืชื— ื”ืคืจื˜ื™ ืœืžืคืชื— ืฆื™ื‘ื•ืจื™ ื•ื›ืชื•ื‘ ืืช ื”ืชื•ืฆืื” ื‘ owner_public_key.

variable owner_private_key
variable owner_public_key 

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

ื ืฆื˜ืจืš ืืช ืฉื ื™ ื”ืžืคืชื—ื•ืช.

ืื ื• ืžืืชื—ืœื™ื ืืช ืื—ืกื•ืŸ ื”ื—ื•ื–ื” ื”ื—ื›ื ืขื ื ืชื•ื ื™ื ืฉืจื™ืจื•ืชื™ื™ื ื‘ืื•ืชื• ืจืฆืฃ ื›ืžื• ื‘ืคื•ื ืงืฆื™ื” pack_state()ื•ืœื›ืชื•ื‘ ืืช ื–ื” ืœืชื•ืš ืžืฉืชื ื” storage.

variable owner_private_key
variable owner_public_key 
variable orders
variable owner_wc
variable owner_account_id

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

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

ืœืื—ืจ ืžื›ืŸ, ื ืจื›ื™ื‘ ื”ื•ื“ืขื” ื—ืชื•ืžื”, ื”ื™ื ืชื›ื™ืœ ืจืง ืืช ื”ื—ืชื™ืžื” ื•ืืช ืขืจืš ื”ืžื•ื ื”.

ืจืืฉื™ืช, ืื ื• ื™ื•ืฆืจื™ื ืืช ื”ื ืชื•ื ื™ื ืฉื‘ืจืฆื•ื ื ื• ืœื”ืขื‘ื™ืจ, ืœืื—ืจ ืžื›ืŸ ืื ื• ื—ื•ืชืžื™ื ืื•ืชื ืขื ืžืคืชื— ืคืจื˜ื™ ื•ืœื‘ืกื•ืฃ ืื ื• ื™ื•ืฆืจื™ื ื”ื•ื“ืขื” ื—ืชื•ืžื”.

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

ื›ืชื•ืฆืื” ืžื›ืš, ื”ื”ื•ื“ืขื” ืฉื ืฉืœื— ืœื—ื•ื–ื” ื”ื—ื›ื ื ืจืฉืžืช ื‘ืžืฉืชื ื” message_to_send, ืขืœ ืคื•ื ืงืฆื™ื•ืช hashu, ed25519_sign_uint ืืชื” ื™ื›ื•ืœ ืœืงืจื•ื ื‘ืชื™ืขื•ื“ ืฉืœ Fift.

ื•ื›ื“ื™ ืœื”ืคืขื™ืœ ืืช ื”ืžื‘ื—ืŸ ืื ื—ื ื• ืงื•ืจืื™ื ืฉื•ื‘.

message_to_send @ 
recv_external 
code 
storage @
c7
runvmctx

ื”ื ื” ื›ืš ื”ืงื•ื‘ืฅ ืขื ื”ื‘ื“ื™ืงื•ืช ืืžื•ืจ ืœื”ื™ืจืื•ืช ื›ืš ื‘ืฉืœื‘ ื–ื”.

ื‘ื•ืื• ื ืจื™ืฅ ืืช ื”ื‘ื“ื™ืงื” ื•ื”ื™ื ืชื™ื›ืฉืœ, ืื– ื ืฉื ื” ืืช ื”ื—ื•ื–ื” ื”ื—ื›ื ื›ืš ืฉื™ื•ื›ืœ ืœืงื‘ืœ ื”ื•ื“ืขื•ืช ื‘ืคื•ืจืžื˜ ื”ื–ื” ื•ืœืืžืช ืืช ื”ื—ืชื™ืžื”.

ืจืืฉื™ืช, ื ืกืคื•ืจ 512 ืกื™ื‘ื™ื•ืช ืžื”ื—ืชื™ืžื” ืžื”ื”ื•ื“ืขื” ื•ื ื›ืชื•ื‘ ืื•ืชื” ืœืžืฉืชื ื”, ืœืื—ืจ ืžื›ืŸ ื ืกืคื•ืจ 32 ืกื™ื‘ื™ื•ืช ืฉืœ ืžืฉืชื ื” ื”ืžื•ื ื”.

ืžื›ื™ื•ื•ืŸ ืฉื™ืฉ ืœื ื• ืคื•ื ืงืฆื™ื” ืœืงืจื™ืืช ื ืชื•ื ื™ื ืžืื—ืกื•ืŸ ื”ื—ื•ื–ื” ื”ื—ื›ื, ื ืฉืชืžืฉ ื‘ื”.

ื”ื‘ื ื”ื•ื ื‘ื“ื™ืงืช ื”ืžื•ื ื” ืฉื”ื•ืขื‘ืจ ืขื ื”ืื—ืกื•ืŸ ื•ื‘ื“ื™ืงืช ื”ื—ืชื™ืžื”. ืื ืžืฉื”ื• ืœื ืชื•ืื, ืื– ืื ื—ื ื• ื–ื•ืจืงื™ื ื—ืจื™ื’ ืขื ื”ืงื•ื“ ื”ืžืชืื™ื.

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

ื”ืชื—ื™ื™ื‘ื•ืช ืจืœื•ื•ื ื˜ื™ืช ื›ืืŸ.

ื‘ื•ื ื ืจื™ืฅ ืืช ื”ื‘ื“ื™ืงื•ืช ื•ื ืจืื” ืฉื”ืžื‘ื—ืŸ ื”ืฉื ื™ ื ื›ืฉืœ. ืžืฉืชื™ ืกื™ื‘ื•ืช, ืื™ืŸ ืžืกืคื™ืง ื‘ื™ื˜ื™ื ื‘ื”ื•ื“ืขื” ื•ืื™ืŸ ืžืกืคื™ืง ื‘ื™ื˜ื™ื ื‘ืื—ืกื•ืŸ, ื›ืš ืฉื”ืงื•ื“ ืงื•ืจืก ื‘ืขืช ื ื™ืชื•ื—. ืขืœื™ื ื• ืœื”ื•ืกื™ืฃ ื—ืชื™ืžื” ืœื”ื•ื“ืขื” ืฉืื ื• ืฉื•ืœื—ื™ื ื•ืœื”ืขืชื™ืง ืืช ื”ืื—ืกื•ืŸ ืžื”ื‘ื“ื™ืงื” ื”ืื—ืจื•ื ื”.

ื‘ื‘ื“ื™ืงื” ื”ืฉื ื™ื™ื” ื ื•ืกื™ืฃ ื—ืชื™ืžืช ื”ื•ื“ืขื” ื•ื ืฉื ื” ืืช ืื—ืกื•ืŸ ื”ื—ื•ื–ื” ื”ื—ื›ื. ื”ื ื” ื›ืš ื”ืงื•ื‘ืฅ ืขื ื”ื‘ื“ื™ืงื•ืช ื ืจืื” ื›ืžื• ื›ืจื’ืข.

ื ื›ืชื•ื‘ ืžื‘ื—ืŸ ืจื‘ื™ืขื™, ื‘ื• ื ืฉืœื— ื”ื•ื“ืขื” ื—ืชื•ืžื” ื‘ืžืคืชื— ืคืจื˜ื™ ืฉืœ ืžื™ืฉื”ื• ืื—ืจ. ื‘ื•ืื• ื ื™ืฆื•ืจ ืžืคืชื— ืคืจื˜ื™ ื ื•ืกืฃ ื•ื ืฉืžื•ืจ ืื•ืชื• ื‘ืงื•ื‘ืฅ not-owner.pk. ื ื—ืชื•ื ืขืœ ื”ื”ื•ื“ืขื” ืขื ื”ืžืคืชื— ื”ืคืจื˜ื™ ื”ื–ื”. ื‘ื•ืื• ื ืจื™ืฅ ืืช ื”ืžื‘ื—ื ื™ื ื•ื ื•ื•ื“ื ืฉื›ืœ ื”ืžื‘ื—ื ื™ื ืขื•ื‘ืจื™ื. ืœึฐื‘ึทืฆึตืขึท ื›ึผึทื™ื•ึนื.

ื›ืขืช ื ื•ื›ืœ ืกื•ืฃ ืกื•ืฃ ืœืขื‘ื•ืจ ืœื™ื™ืฉื•ื ื”ื™ื’ื™ื•ืŸ ื”ื—ื•ื–ื” ื”ื—ื›ื.
ะ’ recv_external() ื ืงื‘ืœ ืฉื ื™ ืกื•ื’ื™ ื”ื•ื“ืขื•ืช.

ืžื›ื™ื•ื•ืŸ ืฉื”ื—ื•ื–ื” ืฉืœื ื• ื™ืฆื‘ื•ืจ ื”ืคืกื“ื™ื ืฉืœ ื”ืฉื—ืงื ื™ื, ื™ืฉ ืœื”ืขื‘ื™ืจ ืืช ื”ื›ืกืฃ ื”ื–ื” ืœื™ื•ืฆืจ ื”ื”ื’ืจืœื”. ื›ืชื•ื‘ืช ื”ืืจื ืง ืฉืœ ื™ื•ืฆืจ ื”ื”ื’ืจืœื” ื ืจืฉืžืช ื‘ืื—ืกื•ืŸ ื‘ืขืช โ€‹โ€‹ื™ืฆื™ืจืช ื”ื—ื•ื–ื”.

ืœื›ืœ ืžืงืจื”, ืื ื—ื ื• ืฆืจื™ื›ื™ื ืืช ื”ื™ื›ื•ืœืช ืœืฉื ื•ืช ืืช ื”ื›ืชื•ื‘ืช ืฉืืœื™ื” ืื ื—ื ื• ืฉื•ืœื—ื™ื ื’ืจืžื™ื ืฉืœ ื”ืžืคืกื™ื“ื™ื. ืื ื—ื ื• ืืžื•ืจื™ื ื’ื ืœื”ื™ื•ืช ืžืกื•ื’ืœื™ื ืœืฉืœื•ื— ื’ืจืžื™ื ืžืžืคืขืœ ื”ืคื™ืก ืœื›ืชื•ื‘ืช ื”ื‘ืขืœื™ื.

ื ืชื—ื™ืœ ืขื ื”ืจืืฉื•ืŸ. ื ื›ืชื•ื‘ ืชื—ื™ืœื” ื‘ื“ื™ืงื” ืฉืชื‘ื“ื•ืง ืฉืื—ืจื™ ืฉืœื™ื—ืช ื”ื”ื•ื“ืขื”, ื”ื—ื•ื–ื” ื”ื—ื›ื ืฉืžืจ ืืช ื”ื›ืชื•ื‘ืช ื”ื—ื“ืฉื” ื‘ืื—ืกื•ืŸ. ืฉื™ืžื• ืœื‘ ืฉื‘ื”ื•ื“ืขื”, ื‘ื ื•ืกืฃ ืœื“ืœืคืง ื•ืœื›ืชื•ื‘ืช ื”ื—ื“ืฉื”, ืื ื• ื’ื ืžืฉื“ืจื™ื action ืžืกืคืจ ืฉืœื ืœื ืฉืœื™ืœื™ ืฉืœ 7 ืกื™ื‘ื™ื•ืช, ื‘ื”ืชืื ืืœื™ื•, ื ื‘ื—ืจ ื›ื™ืฆื“ ืœืขื‘ื“ ืืช ื”ื”ื•ื“ืขื” ื‘ื—ื•ื–ื” ื”ื—ื›ื.

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

ื‘ืžื‘ื—ืŸ ื ื™ืชืŸ ืœืจืื•ืช ื›ื™ืฆื“ ืื—ืกื•ืŸ ื—ื•ื–ื™ื ื—ื›ืžื™ื ืขื•ื‘ืจ ืกื™ื“ืจื™ืืœื™ื–ืฆื™ื” storage ื‘-Fift. ื“ื”-ืกืจื™ืืœื™ื–ืฆื™ื” ืฉืœ ืžืฉืชื ื™ื ืžืชื•ืืจืช ื‘ืชื™ืขื•ื“ ืฉืœ 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. ื ื›ืชื•ื‘ ื‘ื”ืžืฉืš ื›ื™ืฆื“ ืœืงื‘ืœ ืžื™ื“ืข ืขืœ ื—ื•ื–ื” ื—ื›ื.

ืฉื›ื—ืชื™ ื’ื ืœื”ื•ืกื™ืฃ ืืช ื”ืงื•ื“ ืฉื™ืขื‘ื“ ืืช ื”ื‘ืงืฉื” ื”ืจืืฉื•ื ื” ืฉืžืชืจื—ืฉืช ื‘ืขืช ืคืจืกื•ื ื—ื•ื–ื” ื—ื›ื. ื”ืชื—ื™ื™ื‘ื•ืช ืžืงื‘ื™ืœื”. ื•ืขื•ื“ ืžึฐืชื•ึผืงึธืŸ ื‘ืื’ ืขื ืฉืœื™ื—ืช 1/3 ืžื”ืกื›ื•ื ืœื—ืฉื‘ื•ืŸ ื”ื‘ืขืœื™ื.

ื”ืฉืœื‘ ื”ื‘ื ื”ื•ื ืคืจืกื•ื ื”ื—ื•ื–ื” ื”ื—ื›ื. ื‘ื•ืื• ื ื™ืฆื•ืจ ืชื™ืงื™ื” requests.

ืœืงื—ืชื™ ืืช ืงื•ื“ ื”ืคืจืกื•ื ื›ื‘ืกื™ืก simple-wallet-code.fc ืืฉืจ ื™ื›ื•ืœ ืœืžืฆื•ื ื‘ืžืื’ืจ ื”ืจืฉืžื™.

ืžืฉื”ื• ืฉืฉื•ื•ื” ืœืฉื™ื ืืœื™ื• ืœื‘. ืื ื• ืžื™ื™ืฆืจื™ื ืื—ืกื•ืŸ ื—ื•ื–ื™ื ื—ื›ื ื•ื”ื•ื“ืขืช ืงืœื˜. ืœืื—ืจ ืžื›ืŸ ื ื•ืฆืจืช ื›ืชื•ื‘ืช ื”ื—ื•ื–ื” ื”ื—ื›ื, ื›ืœื•ืžืจ ื”ื›ืชื•ื‘ืช ื™ื“ื•ืขื” ืขื•ื“ ืœืคื ื™ ื”ืคืจืกื•ื ื‘-TON. ืœืื—ืจ ืžื›ืŸ ืฆืจื™ืš ืœืฉืœื•ื— ืžืกืคืจ ื’ืจืžื™ื ืœื›ืชื•ื‘ืช ื”ื–ื•, ื•ืจืง ืœืื—ืจ ืžื›ืŸ ืฆืจื™ืš ืœืฉืœื•ื— ืงื•ื‘ืฅ ืขื ื”ื—ื•ื–ื” ื”ื—ื›ื ืขืฆืžื•, ืฉื›ืŸ ื”ืจืฉืช ืœื•ืงื—ืช ืขืžืœื” ืขืœ ืฉืžื™ืจืช ื”ื—ื•ื–ื” ื”ื—ื›ื ื•ื”ืคืขื•ืœื•ืช ื‘ื• (ืžืื—ืกื ื™ื ื•ืžื‘ืฆืขื™ื ื—ื•ื–ื™ื ื—ื›ืžื™ื ). ืืช ื”ืงื•ื“ ื ื™ืชืŸ ืœืจืื•ืช ื›ืืŸ.

ืœืื—ืจ ืžื›ืŸ ืื ื• ืžื‘ืฆืขื™ื ืืช ืงื•ื“ ื”ืคืจืกื•ื ื•ืžืงื‘ืœื™ื lottery-query.boc ืงื•ื‘ืฅ ื•ื›ืชื•ื‘ืช ื—ื•ื–ื” ื—ื›ื.

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

ืืœ ืชืฉื›ื— ืœืฉืžื•ืจ ืืช ื”ืงื‘ืฆื™ื ืฉื ื•ืฆืจื•: lottery-query.boc, lottery.addr, lottery.pk.

ื‘ื™ืŸ ื”ื™ืชืจ ื ืจืื” ืืช ื›ืชื•ื‘ืช ื”ื—ื•ื–ื” ื”ื—ื›ื ื‘ื™ื•ืžื ื™ ื”ื‘ื™ืฆื•ืข.

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

ืกืชื ื‘ืฉื‘ื™ืœ ื”ื›ื™ืฃ, ื‘ื•ืื• ื ื’ื™ืฉ ื‘ืงืฉื” ืœ-TON

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

ื•ื ืจืื” ืฉื”ื—ืฉื‘ื•ืŸ ืขื ื”ื›ืชื•ื‘ืช ื”ื–ื• ืจื™ืง.

account state is empty

ืื ื—ื ื• ืฉื•ืœื—ื™ื ืœื›ืชื•ื‘ืช 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd 2 ื’ืจื ื•ืœืื—ืจ ืžืกืคืจ ืฉื ื™ื•ืช ืื ื• ืžื‘ืฆืขื™ื ืืช ืื•ืชื” ืคืงื•ื“ื”. ื›ื“ื™ ืœืฉืœื•ื— ื’ืจืžื™ื ืื ื™ ืžืฉืชืžืฉ ืืจื ืง ืจืฉืžื™, ื•ืืชื” ื™ื›ื•ืœ ืœื‘ืงืฉ ืžืžื™ืฉื”ื• ืžื”ืฆ'ืื˜ ื’ืจื ืžื‘ื—ืŸ, ืขืœื™ื”ื ืื“ื‘ืจ ื‘ืกื•ืฃ ื”ืžืืžืจ.

> getaccount 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd

ื ืจืื” ื›ืžื• ืœื ืืชื—ื•ืœ (state:account_uninit) ื—ื•ื–ื” ื—ื›ื ืขื ืื•ืชื” ื›ืชื•ื‘ืช ื•ื™ืชืจื” ืฉืœ 1 ื ื ื•ื’ืจื.

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 ื•ื”ืคืขืœ ืืช ืฉื™ื˜ื•ืช get ืฉื›ืชื‘ื ื•.

$ ./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 ื•ื ืงื‘ืœ ืฉื™ื˜ื•ืช ืœื”ืฆื’ืช ืžื™ื“ืข ืขืœ ื”ื—ื•ื–ื” ื”ื—ื›ื ื‘ืืชืจ.

ื”ืฆื’ืช ื ืชื•ื ื™ ื—ื•ื–ื™ื ื—ื›ืžื™ื ื‘ืืชืจ

ื›ืชื‘ืชื™ ืืชืจ ืคืฉื•ื˜ ื‘ืคื™ื™ืชื•ืŸ ื›ื“ื™ ืœื”ืฆื™ื’ ืืช ื”ื ืชื•ื ื™ื ืžื”ื—ื•ื–ื” ื”ื—ื›ื ื‘ืฆื•ืจื” ื ื•ื—ื”. ื›ืืŸ ืœื ืืชืขื›ื‘ ืขืœ ื›ืš ื‘ื”ืจื—ื‘ื” ื•ืืคืจืกื ืืช ื”ืืชืจ ื‘ื”ืชื—ื™ื™ื‘ื•ืช ืื—ืช.

ื‘ืงืฉื•ืช ืœ-TON ื ืขืฉื•ืช ืž Python ื‘ืืžืฆืขื•ืช lite-client. ืžื˜ืขืžื™ ื ื•ื—ื•ืช, ื”ืืชืจ ืืจื•ื– ื‘-Docker ื•ืžืคื•ืจืกื ื‘-Google Cloud. ืงื™ืฉื•ืจ.

ืžื ืกื”

ืขื›ืฉื™ื• ื‘ื•ืื• ื ื ืกื” ืœืฉืœื•ื— ื’ืจืžื™ื ืœืฉื ืœืžื™ืœื•ื™ ืž ืืจื ืง. ื ืฉืœื— 40 ื’ืจื. ื•ื‘ื•ืื• ื ืขืฉื” ื›ืžื” ื”ื™ืžื•ืจื™ื ืœืžืขืŸ ื”ื‘ื”ื™ืจื•ืช. ืื ื• ืจื•ืื™ื ืฉื”ืืชืจ ืžืฆื™ื’ ืืช ื”ื™ืกื˜ื•ืจื™ื™ืช ื”ื”ื™ืžื•ืจื™ื, ืื—ื•ื– ื”ื–ื›ื™ื™ื” ื”ื ื•ื›ื—ื™ ื•ืžื™ื“ืข ืฉื™ืžื•ืฉื™ ื ื•ืกืฃ.

ืื ื—ื ื• ืžื‘ื™ื ื™ืืฉื ื™ืฆื—ื ื• ืืช ื”ืจืืฉื•ืŸ, ื”ืคืกื“ื ื• ืืช ื”ืฉื ื™.

ืื—ืจื™ืช ื“ื‘ืจ

ื”ื›ืชื‘ื” ื”ืชื‘ืจืจื” ื›ื”ืจื‘ื” ื™ื•ืชืจ ืืจื•ื›ื” ืžืžื” ืฉืฆื™ืคื™ืชื™, ืื•ืœื™ ื”ื™ื ื”ื™ื™ืชื” ื™ื›ื•ืœื” ืœื”ื™ื•ืช ืงืฆืจื” ื™ื•ืชืจ, ืื• ืื•ืœื™ ืจืง ืœืื“ื ืฉืœื ื™ื•ื“ืข ื›ืœื•ื ืขืœ TON ื•ืจื•ืฆื” ืœื›ืชื•ื‘ ื•ืœืคืจืกื ื—ื•ื–ื” ื—ื›ื ืœื ืคืฉื•ื˜ ืขื ื™ื›ื•ืœืช ืื™ื ื˜ืจืืงืฆื™ื”. ื–ื”. ืื•ืœื™ ืืคืฉืจ ื”ื™ื” ืœื”ืกื‘ื™ืจ ื›ืžื” ื“ื‘ืจื™ื ื‘ืฆื•ืจื” ืคืฉื•ื˜ื” ื™ื•ืชืจ.

ืื•ืœื™ ื—ืœืง ืžื”ื”ื™ื‘ื˜ื™ื ืฉืœ ื”ื™ื™ืฉื•ื ื”ื™ื• ื™ื›ื•ืœื™ื ืœื”ื™ืขืฉื•ืช ื‘ืฆื•ืจื” ื™ืขื™ืœื” ื•ืืœื’ื ื˜ื™ืช ื™ื•ืชืจ, ืื‘ืœ ืื– ื”ื™ื” ืœื•ืงื— ืขื•ื“ ื™ื•ืชืจ ื–ืžืŸ ืœื”ื›ื™ืŸ ืืช ื”ืžืืžืจ. ื™ื™ืชื›ืŸ ื’ื ืฉื˜ืขื™ืชื™ ืื™ืคืฉื”ื• ืื• ืœื ื”ื‘ื ืชื™ ืžืฉื”ื•, ืื– ืื ืืชื” ืขื•ืฉื” ืžืฉื”ื• ืจืฆื™ื ื™, ืืชื” ืฆืจื™ืš ืœื”ืกืชืžืš ืขืœ ื”ืชื™ืขื•ื“ ื”ืจืฉืžื™ ืื• ื”ืžืื’ืจ ื”ืจืฉืžื™ ืขื ืงื•ื“ ื”-TON.

ื™ืฉ ืœืฆื™ื™ืŸ ืฉืžื›ื™ื•ื•ืŸ ืฉ-TON ืขืฆืžื” ืขื“ื™ื™ืŸ ื‘ืฉืœื‘ ื”ืคื™ืชื•ื— ื”ืคืขื™ืœ, ืขืœื•ืœื™ื ืœื”ืชืจื—ืฉ ืฉื™ื ื•ื™ื™ื ืฉื™ืฉื‘ืจื• ื›ืœ ืื—ื“ ืžื”ืฉืœื‘ื™ื ื‘ืžืืžืจ ื–ื” (ืฉืงืจื” ื‘ื–ืžืŸ ืฉื›ืชื‘ืชื™, ื–ื” ื›ื‘ืจ ืชื•ืงืŸ), ืื‘ืœ ื”ื’ื™ืฉื” ื”ื›ืœืœื™ืช ื”ื™ื ืœื ืกื‘ื™ืจ ืฉื™ืฉืชื ื”.

ืื ื™ ืœื ืื“ื‘ืจ ืขืœ ื”ืขืชื™ื“ ืฉืœ TON. ืื•ืœื™ ื”ืคืœื˜ืคื•ืจืžื” ืชื”ืคื•ืš ืœืžืฉื”ื• ื’ื“ื•ืœ ื•ื›ื“ืื™ ืœื ื• ืœื”ืฉืงื™ืข ื–ืžืŸ ื‘ืœื™ืžื•ื“ ืฉืœื” ื•ืœืžืœื ื ื™ืฉื” ื‘ืžื•ืฆืจื™ื ืฉืœื ื• ืขื›ืฉื™ื•.

ื™ืฉ ื’ื ืžืื–ื ื™ื™ื ืžืคื™ื™ืกื‘ื•ืง, ืฉื™ืฉ ืœื” ืงื”ืœ ืžืฉืชืžืฉื™ื ืคื•ื˜ื ืฆื™ืืœื™ ื’ื“ื•ืœ ืž-TON. ืื ื™ ืœื ื™ื•ื“ืข ื›ืžืขื˜ ื›ืœื•ื ืขืœ ืžืื–ื ื™ื™ื, ืื ืœืฉืคื•ื˜ ืœืคื™ ื”ืคื•ืจื•ื ื™ืฉ ืฉื ื”ืจื‘ื” ื™ื•ืชืจ ืคืขื™ืœื•ืช ืžืืฉืจ ื‘ืงื”ื™ืœืช TON. ืœืžืจื•ืช ืฉื”ืžืคืชื—ื™ื ื•ื”ืงื”ื™ืœื” ืฉืœ TON ื“ื•ืžื™ื ื™ื•ืชืจ ืœืžื—ืชืจืช, ื•ื–ื” ื’ื ืžื’ื ื™ื‘.

ืชื–ื›ื•ืจ

  1. ืชื™ืขื•ื“ ืจืฉืžื™ ืฉืœ TON: https://test.ton.org
  2. ืžืื’ืจ TON ื”ืจืฉืžื™: https://github.com/ton-blockchain/ton
  3. ืืจื ืง ืจืฉืžื™ ืœืคืœื˜ืคื•ืจืžื•ืช ืฉื•ื ื•ืช: https://wallet.ton.org
  4. ืžืื’ืจ ื—ื•ื–ื™ื ื—ื›ื ืžืžืืžืจ ื–ื”: https://github.com/raiym/astonished
  5. ืงื™ืฉื•ืจ ืœืืชืจ ื”ื—ื•ื–ื” ื”ื—ื›ื: https://ton-lottery.appspot.com
  6. ืžืื’ืจ ืขื‘ื•ืจ ื”ื”ืจื—ื‘ื” ืขื‘ื•ืจ Visual Studio Code for FunC: https://github.com/raiym/func-visual-studio-plugin
  7. ืฆ'ืื˜ ืขืœ TON ื‘ื˜ืœื’ืจื, ืžื” ืฉื‘ืืžืช ืขื–ืจ ืœื”ื‘ื™ืŸ ืืช ื–ื” ื‘ืฉืœื‘ ื”ืจืืฉื•ื ื™. ืื ื™ ื—ื•ืฉื‘ ืฉื–ื• ืœื ืชื”ื™ื” ื˜ืขื•ืช ืื ืื’ื™ื“ ืฉื›ืœ ืžื™ ืฉื›ืชื‘ ืžืฉื”ื• ืœ-TON ื ืžืฆื ืฉื. ืืคืฉืจ ื’ื ืœื‘ืงืฉ ืฉื ื’ืจื ืžื‘ื—ืŸ. https://t.me/tondev_ru
  8. ืฆ'ืื˜ ื ื•ืกืฃ ืขืœ TON ื‘ื• ืžืฆืืชื™ ืžื™ื“ืข ืฉื™ืžื•ืฉื™: https://t.me/TONgramDev
  9. ืฉืœื‘ ืจืืฉื•ืŸ ื‘ืชื—ืจื•ืช: https://contest.com/blockchain
  10. ืฉืœื‘ ืฉื ื™ ื‘ืชื—ืจื•ืช: https://contest.com/blockchain-2

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”