TON ááœáẠá áááºáá»ááá·áº á á¬áá»á¯ááºááᯠáááºááá¯á·áá±ážááá¯ááºáááºáááºážá
áá®áá±á¬ááºážáá«ážá áá¬á¡ááŒá±á¬ááºážáá²á
á€áá±á¬ááºážáá«ážááœááºá áá»áœááºá¯ááºááẠTelegram blockchain ááŒáá¯ááºááá¯ááºááŸá¯ááœáẠááááá¯á¶áž (ááŸá áºáá¯) ááœáẠáá«áááºáá²á·áá¯á¶á áá¯áááá²á·áá² áá±á·áá»á±á¬ááºááŒááºážááá¯á· áá áºááŒá¯ááºáááœá¬ážá á±ááẠáá±á¬ááºážáá«ážáá áºáá¯ááºááœáẠá¡ááœá±á·á¡ááŒá¯á¶ááᯠááŸááºáááºážáááºááẠáá¯á¶ážááŒááºáá²á·ááŒá®áž áá áºá á¯á¶áá áºáŠážááᯠáá°áá®áá±ážáá²á·áááºá
á ááá¹áááá¯ááºááᯠááá±ážáá»ááºáá±á¬áºáááºáž á¡áá¯ááºáá áºáá¯áá¯áá¯ááºáááºá áá±á¬ááºážáá«ážá¡ááœáẠá áááºá á¬áá»á¯ááºáááºáááºážáá®áá áºá á±á¬ááºááŸáá·áº á¡áááºá¡áááºááá¯ááŸá±á¬ááºááŸá¯á¡áá¯á¶ážáááŒá¯áá² TON áá¶á០á áááºá á¬áá»á¯ááºáá±áá¬ááᯠááá¯ááºááá¯ááºááŒáááá·áº áááºááá¯ááºáá áºáá¯ááᯠáá±ážáá¬ážáá²á·áááºá
TON ááœáẠáááºážááá¯á·á ááááá¯á¶ážáá±á¬ á áááºá á¬áá»á¯ááºááᯠááŒá¯áá¯ááºááá¯áá°áá»á¬ážá¡ááœáẠáá±á¬ááºážáá«ážááẠá¡áá¯á¶ážáááºáááá·áºáááºá ááá¯á·áá±á¬áº áááºááá·áºáá±áá¬ááœáẠá áááºááááºááᯠááááá±á¬áá°áá»á¬ážá¡ááœáẠá¡áá¯á¶ážáááºáááºááŒá áºáá«áááºá
áá¶á ááºážáá²ááᯠááá°áá¬á¡ááŒá Ạá¡áá¯á¶ážááŒá¯á áááºáááºážáá»ááºááᯠááá·áºááœááºážááŒááºážá០á áááºáááºáááá¯ááºáá áºáᯠáá¯ááºáá±ááŒááºážá áááºážááŸáá·áº á¡ááŒááºá¡ááŸááºáááºáá¶ááŒááºážá áá±áá¬áááºáá¶ááŒááºážááŸáá·áº áá¯ááºáá±ááŒááºážá¡ááœáẠáááºááá¯ááºáá áºáá¯áá±ážáá«áááºá
ááŒáá¯ááºááœá²ááœááºáá«áááºááŒááºážá¡ááŒá±á¬ááºáž
ááŒá®ážáá²á·ááá·áºá¡á±á¬ááºááá¯áá¬áááœáẠTelegram áááºáá¬áá¬á
áá¬ážá¡áá
áºáá»á¬ážááŒáá·áº blockchain ááŸááºááŒáá¯ááºááŸá¯ááá¯ááŒá±ááŒá¬áá²á·áááºá Fift О FunC. á
áááºáá»áá²á· á
á¬áá»á¯ááºáá«ážáá¯ááŒá¬ážááᯠááœá±ážáá²á·ááááºá á¡áá¬áááºááŸá¬ áááŒá¬ážáá¬ááŸáá±ážá
áᬠáááá¯áá±á¬á·áááºáá±á¬áẠáá°ážáá°ážááŒá¬ážááŒá¬áž áá
áºáá¯áá¯áá¯ááºá áá¬áá¬á
áá¬ážáá
áºáᯠáááºáá°ááŒá®áž áá
áºáá¯áá¯áá¯ááºááᬠáá±á¬ááºážáááºáááºáááºá ááá¯á·á¡ááŒáẠáá±á«ááºážá
ááºááẠáá°ááá¯ááºážá áá«ážá
ááºáá»á¬ážááœáẠá¡ááŒá²ááŸááá±áá«áááºá
á áááºáááºáááá¯ááºáá»á¬áž áá±ážááœá²áá¬ááœáẠá¡ááœá±á·á¡ááŒá¯á¶áááŸááᯠááá¯ááá»áá¯ážáááºáá«áááºá
áá»áœááºáá±á¬áº áááºááá¯ááºááá±á¬áẠá¡áá¯á¶ážá¡áá áá«áááºááá¯á· á
á®á
ááºááŒá®áž áá¯á¶ážáááºáá»áẠáá±á¬ááºážáá«ážáá
áºáá¯áẠáá±ážáá²á·áá±ááá·áº ááááá
áºáá¯ááºááŸá¬ áá»ááºáá»ááºáž áá¡á±á¬ááºááŒááºáá²á·áá«áá°ážá áááºááŸááºáá±á«ááºážáá»á¬ážá
áœá¬ááŒáá·áº ááœáá·áºáá¬ážáááºá FunC áá±áá¯áá»á¡á¬ážááŒáá·áº á¡áá¯ááºáá¯ááºáááºá á¡ááŒá±áá¶á¡ááŒá
áºáá°áá²á·áááºá .
á¡á²áá®áá¯ááºážááá±á¬á· á¡áááºážáá¯á¶áž áá¯áá±áá¬áá áºáá¯áá°ááá¯á· áá¯á¶áá±á¬ááºááŒá®ááá¯á· áááºáá«áááºá áá±á¬ááºáá¯á¶ážáá±á¬á· áá«áááºáá° 40 ááŸá¬ 60 áá±á¬ááºá áá¯ááœá±áááŸááá²á·ááŒá®áž áá»áœááºáá±á¬áºáááºáž áá°ááá¯á·áá²ááŸá¬ ááá«áááºáá«áá°ážá áá±áá°áá»á¡á¬ážááŒáá·áºá áá®á¡ááœáẠááŒá±á¬ááºá áá¬áá±á¬ááºážáá²á· á¡áá¬áá áºáá¯á០áááŸááá«áá°ážá áá«áá±ááá·áº áá áºáá¯áá±á¬á· á áááºááŸá¯ááºá áá¬áá«á áá»áœááºá¯ááºáá á¬áá»á¯ááºá¡ááœáẠá á áºáá±ážááŸá¯ááááºáá»á¬ážá¡á¬áž ááŒááºáááºáá¯á¶ážáááºááŒááºážááááºáá»á¬ážááᯠááŒá±ááŒá¬áá»áááºááœááºá áá»áœááºá¯ááºááẠáá»ááºáááºááœááºáá«áááºáá°áá»á¬ážá¡á¬áž á¡ááŒá¬ážáááºáá°áá»áŸáááŸáá áááŸáááᯠáá±ážááŒááºážáá²á·áá«áááºá
áá»áœááºá¯ááºáá á¬áá»á¬ážááᯠáááááŒá¯áááááºááŸá¬ ááŸá áºáááºá¡ááŒá¬ááœáẠááá¬ážáá°ááŒá®ážáá»á¬ážááẠááŸááºáá»ááºáá áºáᯠáá¯ááºááŒááºáá²á·ááŒá®áž ááá¬ážáá°ááŒá®ážáá»á¬ážááẠá á®áááºáá»ááºáá»á ááºá¡ááœááºáž áá»áœááºá¯ááºá á áááºáá»áá±á¬ á á¬áá»á¯ááºááᯠááá±á¬áºáá ááœá²áá»á±á¬áºááœá¬ážááŒááºáž ááŸáá áááŸá áá¬ážááááºááá¯ááºáá² ááŒá áºáá±ááẠááá¯á·ááá¯áẠááŸááºáá»ááºáá±ážáááºáááá¯áá±á¬á·áá±á¬ááºá¡á±á¬áẠááá¯ážááœá¬ážáááºáᯠááá¯ážááá¯ážááŸááºážááŸááºáž áááºááŒááºáááá«áááºá Page ááŸá¬ áá±ážááœááºážáá áºáá¯áá±ážáá²á·áá±ááá·áº á¡ááŒá±áááá²á·áá«áá°ážá áááºáá°á áá»áŸáá¯á·ááŸááºá áœá¬ ááá¬ážá á®áááºáá¬á០ááá¯ááºáá±ááá·áº ááá¯ááºáá±ážááá¯ááºáᬠáááºáá±á·áá»áºááœá± áá±ážááá¯á· áááá¯á¡ááºáá°ážááá¯á· áááºáá«áááºá
áá¬ážáááºááá¯á· á¡áá»áááºá¡áá»á¬ážááŒá®ážáá°ááá²á·á¡ááœáẠáá±á¬ááºážáá«ážáá áºáá¯ááºáá±ážááá¯á· áá¯á¶ážááŒááºáá²á·áá«áááºá ááááºážá¡áá»ááºá¡áááºáá»á¬ážá áœá¬áááŸááá±ážáá±á¬ááŒá±á¬áá·áºá áá±á¬ááºážáá«ážáááºá áááºáááºá á¬ážáá°ááá¯ááºážá¡ááœááºá¡áá»áááºáá¯ááºáááºáá¬á á±áááá·áºáááºá
TON ááœáẠá áááºá á¬áá»á¯ááºáá»á¬ážá ááá±á¬ááá¬áž
áá¬á០ááá±ážáááºááŸá¬ áá®á¡áá¬ááᯠáá»ááºážáááºááá¯á· áááºáááºááŒááºážááá± á¡ááŒá±ááŸá¬ááá¯á· ááá¯áá«áááºá áá«ááŒá±á¬áá·áº á¡áᯠSystem ááŸá¬ áááºá¡ááá¯ááºážááœá± áá«áááºáá²ááá¯áᬠááŒá±á¬ááŒáá«áááºá ááá¯áááááá»áá»ááŒá±á¬áááẠá¡áááºážáá¯á¶áž á¡áá¯ááºááá±á¬áá°á á¬áá»á¯ááºááᯠáá±ážááá¯ááºááá¯á· áááºá¡ááá¯ááºážááœá± áááá¬ážááá¯á· ááá¯áá²á
áá»áœááºá¯ááºááá¯á·ááẠá
áááºáá»áá±á¬ á
á¬áá»á¯ááºáá
áºáá¯ááᯠáá±ážáá¬ážááŒá®áž áááºááœá²áá¯ááºáá±á¬ááºááẠá¡á¬áá¯á¶á
áá¯ááºáá«áááºá TON Virtual Machine (TVM), Fift О FunCááá¯á·ááŒá±á¬áá·áº áá±á¬ááºážáá«ážááẠáá¯á¶ááŸááºáááá¯ááááºáá
áºáá¯á ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯áá±á¬áºááŒáá»ááºááŸáá·áº ááá¯áá°áááºá ááááºáá±á¬ááºážááá¯ááºááá¯ááºá áááºááá¯á¡áá¯ááºáá¯ááºáááºááá¯áá¬ááᯠáá®ááŸá¬áá±ááŸá¬ááá¯ááºáá°ážá
áá±áá¯áá»á¡á¬ážááŒáá·áºáááºážáááºáááºááá¯á·á¡áá¯ááºáá¯ááºáááºááŸáá·áº áááºáááºá TVM ááŸáá·áº áá¬áá¬á
áá¬áž Fift ááá¬ážáááºá
á¬ááœááºá
á¬áááºážáá±á¬ááºážááœá±ááŸááááºá ááŒáá¯ááºááœá²áá¬áá¡ááœááºážááŸáá·áº ááá¯áááºááŸáá
á¬áá»á¯ááºááᯠáá±ážáá¬ážáá±á
ááºá áá»áœááºáá±á¬áºááẠáááºážááᯠáááŒá¬áá áááºááœáŸááºážáá«áááºá
á
áááºá
á¬áá»á¯ááºáá»á¬ážááᯠáá±ážáá¬ážááá·áº á¡ááááá¬áá¬á
áá¬ážááŸá¬ FunC. áááºážááœáẠáá±á¬áá±á¬ááẠá
á¬ááœááºá
á¬áááºážáááŸááá±á¬ááŒá±á¬áá·áº áá
áºáá¯áá¯áá±ážáááºá¡ááœááºá ááá¬ážáááºááá¯ááŸá±á¬ááºááŸá¯á០á
áááºá
á¬áá»á¯ááºáá»á¬ážááá°áá¬áá»á¬ážááᯠáá±á·áá¬ááẠááá¯á¡ááºááŒá®áž ááá¯áá±áá¬ááœáẠáá¬áá¬á
áá¬ážááá¯ááºááá¯áẠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážá¡ááŒáẠááŒá®ážáá²á·áá±á¬ ááŒáá¯ááºááœá²ááŸá
áºáá¯á¡ááœáẠá
áááºá
á¬áá»á¯ááºáá»á¬áž ááá°áá¬áá»á¬ážááᯠáááºááŒáá·áºááŸá¯ááá¯ááºáá«áááºá áá±á¬ááºážáá«ážáá¡áá¯á¶ážááœááºááá·áºááºáá»á¬ážá
áá»áœááºá¯ááºááá¯á·ááẠá
áááºáá»áá±á¬ á
á¬áá»á¯ááºááᯠáá±ážááŒá®ážááŒá® ááá¯ááŒáá«á
áá¯á· FunCááŒá®ážáá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠáá¯ááºááᯠFift assembler ááœáẠá
á¯á
ááºážáááºá
ááŒá¯á
á¯áá¬ážáá±á¬ á
áááºá
á¬áá»á¯ááºááᯠáá¯ááºááŒááºááẠáá»ááºáá±áá±ážáááºá áá®ááá¯áá¯ááºááá¯á·á áááºá function ááá¯áá±ážááá¯á·ááá¯á¡ááºáá«áááºá Fiftá
áááºá
á¬áá»á¯ááºáá¯ááºááŸáá·áº ááá·áºááœááºážááŸá¯á¡ááŒá
Ạá¡áá»áá¯á·áá±á¬ ááá·áºáááºáá»ááºáá»á¬ážááᯠáááºáá¶áááºááŒá
áºááŒá®áž ááááºááẠááá¯ážáá»á²á·ááŸá¯ááŸáá·áºá¡áá° ááá¯ááºáá
áºáᯠááŒá
áºáááá·áºáááºá .boc (ááá¯ááá¯áááºááŸá¬ "áá²ááºá¡áááºáá»á¬áž" áᯠá¡áááá¹áá«ááºááá±á¬)á áááºážááᯠáá»áœááºá¯ááºááá¯á· áá±ážáá¬ážáá¯á¶áá±á«áº áá°áááºá áá»áŸáá¯á·ááŸááºáá±á¬á·ááŸáá·áº á
áááºá
á¬áá»á¯ááºáá¯ááºááᯠá¡ááŒá±áá¶á áá¯ááºáá¯ááºááá·áº ááááºá
á¬áá
áºáá¯á áá¯ááºááŒááºááŒááºážáááŒá¯ááá±ážááá·áº á
áááºá
á¬áá»á¯ááºááááºá
á¬ááá¯á· ááááºááᯠááẠáá±ážááá¯á·ááá¯ááºáá«áááºá
TON ááœáẠá
áááºá
á¬áá»á¯ááºáá
áºáᯠáá¯ááºáá±ááẠáááºáá¶áááŸááá²á·áááºá .boc ááá¯ááºááᯠlight client ááá¯á¡áá¯á¶ážááŒá¯ááŒá®áž blockchain ááá¯á·áá±ážááá¯á·áááºááá¯á¡ááºááẠ(á¡á±á¬ááºáá«á¡áá»ááºá¡áá±á«áºááá¯ááá¯) á ááá¯á·áá±á¬áº áá¯ááºáá±ááŒááºážáááŒá¯áá®á áááºááẠáá¯ááºáá¯ááºáá¬ážáá±á¬ ááááºá
á¬ááá¯á· ááááºááœáŸá²ááŒá±á¬ááºážááẠááá¯á¡ááºáááºá ááá¯á·ááá¯ááºáá«á á
áááºá
á¬áá»á¯ááºááᯠáá¯ááºááŒááºáááºááá¯ááºáá«á áá¯ááºáá±ááŒá®ážáá±á¬ááºá ááŒááºáá០áááºáá±á·áá»áºáá»á¬áž áá±ážááá¯á·ááŒááºážááŒáá·áº (á¥ááá¬á áá±á«á·áá«ážáá±á¬ áááá¯ááºážááá·áº) ááá¯á·ááá¯áẠá¡ááœááºážá០(á¥ááá¬á á
áááºá
á¬áá»á¯ááºáá
áºáá¯ááẠTON á¡ááœááºážááŸá á¡ááŒá¬ážáááºáá±á·áá»áºáá
áºáᯠáá±ážááá¯á·ááŒááºáž) ááŒáá·áº á¡ááŒááºá¡ááŸáẠáá¯á¶á·ááŒááºááá¯ááºáá«áááºá
áá¯ááºááᯠáááºááá¯á·áá¯ááºáá±ááŒá±á¬ááºáž áá»áœááºá¯ááºááá¯á·áá¬ážáááºááŒá®ážáá±á¬ááºá áááºážááẠááá¯ááá¯ááœááºáá°áá¬áááºá áá»áœááºáá±á¬áºááá¯á· áá¬áá±ážáá»ááºáá² ááá¯áá¬ááᯠá¡ááŒááºážáá»ááºáž áááá«áááºá á
á¬áá±ážáá±á
ááºááœááºá áááºážááᯠáááºááŸáá
áááºáááºáááá¯ááºáá»á¬ážááœáẠáááºááá¯á·á¡áá±á¬ááºá¡áááºáá±á¬áºáá±ááŒá®ááŒá
áºááẠááá¯á·ááá¯áẠá¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯áá¯ááºááᯠáá»áœááºá¯ááºááá¯á·ááŸá¬ááœá±áá±áá«áááºá Fift О FunC ááá¬ážááẠrepository ááœáẠááá¯á·ááá¯áẠááá¬ážáááºá
á¬ááœááºá
á¬áááºážáá»á¬ážááœáẠááŒáá·áºááŸá¯áá«á
ááŒáá¯ááºááœá²ááœááºáá«áááºáá°áá»á¬ážááŸáá·áº Telegram áááºáááºážáá»á¬ážá á¯áá±ážáᬠTelegram chat ááœáẠáá±á¬á·áá»ááºá áá¬ážáá¯á¶ážáá»á¬ážááᯠáá»áœááºá¯ááºááŸá¬ááœá±áá±á·ááŸááááºá ááá¯á·ááŒá±á¬áá·áº ááŒáá¯ááºááœá²áá¬áá¡ááœááºáž áá°ááá¯ááºážá á¯ááŒá®áž Fift ááŸáá·áº FunC ááᯠá áááºááœá±ážááœá±ážáá²á·ááŒáá«áááºá áá±á¬ááºážáá«ážáá¡áá¯á¶ážááœááºááá·áºááºá
áá®á¡áá¯áá®á០áááºááœá±á·ááá¯á· ááœáŸá±á·ááẠá¡áá»áááºáá±á¬ááºááŒá®á
TON ááŸáá·áº á¡áá¯ááºáá¯ááºáááºá¡ááœáẠáááºáááºážáá»ááºááᯠááŒááºáááºááŒááºážá
MacOS áá±á¬ááºážáá«ážááœáẠáá±á¬áºááŒááá·áºá¡áá¬á¡á¬ážáá¯á¶ážááᯠáá»áœááºáá±á¬áºáá¯ááºáá²á·ááŒá®áž Docker ááŸá Ubuntu 18.04 LTS ááœáẠáááºážááᯠááŒááºáááºá á áºáá±ážáá²á·áááºá
ááááá¯á¶ážáá¯ááºáááŸá¬á áá±á«ááºážáá¯ááºáá¯ááºááŒá®áž install áá¯ááºáá«á lite-client ááẠTON ááá¯á·áá±á¬ááºážááá¯ááŸá¯áá»á¬ážáá±ážááá¯á·ááá¯ááºáááºá
ááá¬ážáááºáááºááá¯ááºááŸá ááœáŸááºááŒá¬ážáá»ááºáá»á¬ážááẠáááºáááºááŒááºážáá¯ááºáááºážá
ááºááᯠá¡áá±ážá
áááºááŸááºážáááºážá
áœá¬ áá±á¬áºááŒáá¬ážááŒá®áž á¡áá»áá¯á·áá±á¬á¡áá±ážá
áááºá¡áá»ááºá¡áááºáá»á¬ážááᯠáá»ááºááŸááºáá¬ážáááºá á€áá±áá¬ááœáẠáá»áœááºá¯ááºááá¯á·ááẠááœáŸááºááŒá¬ážáá»ááºáá»á¬ážááᯠááá¯ááºáá¬ááŒá®áž áááºážáá
áºáá»áŸá±á¬ááºááœáẠáá»á±á¬ááºáá¯á¶ážáá±áá±á¬ ááŸá®ááá¯ááŸá¯áá»á¬ážááᯠááá·áºááœááºážáá«á ááá±á¬áá»ááºáá
áºáá¯á
á®ááᯠáá»áœááºáá±á¬áºááá¯ááºááá¯áẠáá
á¯á
ááºážáá² ááá¬ážááẠUbuntu repository (áá»áœááºáá±á¬áºáá¯á¶ážáá²á· 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 repository ááá¯ááœá¬ážáá»á¬ážáá«á á¡áááºááŒá±á
á±áááºá áá»áœááºá¯ááºááá¯á·ááẠááá¯ááºááœá²ááœáẠá¡áá¬á¡á¬ážáá¯á¶ážááᯠáá¯ááºáá±á¬ááºáá«áááºá ~/TON.
cd ~/TON
git clone https://github.com/ton-blockchain/ton.git
cd ./ton
git submodule update --init --recursiveááá¯ááŸá±á¬ááºááŸá¯ááœáẠá¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯áá»á¬ážááá¯áááºáž ááááºážáááºážáá¬ážáááºá Fift О FunC.
á¡áᯠáá»áœááºáá±á¬áºááá¯á· á
á®áá¶ááááºážááᯠáááºáá±á¬ááºááá¯á· á¡áááºááá·áºááŒá
áºáá±áá«ááŒá®á ááá¯ááŸá±á¬ááºáá¯ááºááᯠááá¯áá«áá²ááá¯á· áá°ážááá·áºáá¬ážáááºá ~/TON/toná á¡ááá¯áá« ~/TON folder áá
áºáá¯áááºáá®ážáá«á 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ááá¯á·áá±á¬ááºá áááºááá·áº node ááŸáá·áºáááºáááºááá·áºáá±áá¬áá»á¬ážáá«ááŸááá±á¬ configuration ááá¯ááºááá¯áá»áœááºá¯ááºááá¯á·áá±á«ááºážáá¯ááºáá¯ááºáá«á lite-client áá»áááºáááºáá«áááá·áºáááºá
wget https://test.ton.org/ton-lite-client-test1.config.jsonTON ááá¯á· áŠážá áœá¬áá±á¬ááºážááá¯ááŸá¯áá»á¬áž ááŒá¯áá¯ááºáá²á·áááºá
áá² á
ááá¯ááºááŒáá¡á±á¬áẠlite-client.
cd ~/TON/build
./lite-client/lite-client -C ton-lite-client-test1.config.jsonáááºáá±á¬ááºááŸá¯á¡á±á¬ááºááŒááºáá«áá á áááºááŒá®ážáá±á¬ááºááœáẠlight client ááá»áááºáááºááŸá¯ááŸááºáááºážááᯠnode ááá¯á·ááœá±á·ááá«áááºá
[ 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)
...ááẠcommand ááᯠexecute áá¯ááºááá¯ááºáá«áááºá help áááºááá·áº command áá»á¬ážáááŸáááá¯ááºáááºááá¯ááŒáá·áºáá«á
helpá€áá±á¬ááºážáá«ážááœááºáá»áœááºá¯ááºááá¯á·á¡áá¯á¶ážááŒá¯ááá·áº command áá»á¬ážááá¯á á¬áááºážááŒá¯á á¯ááŒáá«á áá¯á·á
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 parameterslast пПлÑÑÐ°ÐµÑ Ð¿ÐŸÑлеЎМОй ÑПзЎаММÑй блПк Ñ ÑеÑвеÑа.
sendfile <filename> ПÑпÑавлÑÐµÑ Ð² TON Ñайл Ñ ÑППбÑеМОеЌ, ОЌеММП Ñ Ð¿ÐŸÐŒÐŸÑÑÑ ÑÑПй ÐºÐŸÐŒÐ°ÐœÐŽÑ Ð¿ÑблОкÑеÑÑÑ ÑЌаÑÑ-кПМÑÑÐ°ÐºÑ Ðž запÑÑПÑÑ Ðº МеЌÑ.
getaccount <addr> загÑÑÐ¶Ð°ÐµÑ ÑекÑÑее ÑПÑÑПÑМОе ÑЌаÑÑ-кПМÑÑакÑа Ñ ÑказаММÑÐŒ аЎÑеÑПЌ.
runmethod <addr> [<block-id-ext>] <method-id> <params> запÑÑÐºÐ°ÐµÑ get-ЌеÑÐŸÐŽÑ ÑЌаÑÑкПМÑÑакÑа. á¡áᯠá á¬áá»á¯ááºááᯠááá¯ááºááá¯ááºáá±ážááá¯á· á¡áááºááá·áºááŒá áºáá±áá«ááŒá®á
á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯
á áááºáá°áž
á¡áááºááŸá¬ áá±ážáá²á·áááá¯áá²á áá«ááá¯á·áá±ážáá±áá²á· á áááºá á¬áá»á¯ááºáᬠáá®áá±á«ááºáááºá
ááá¯á·á¡ááŒááºá áááºážááẠáááºáááºááŸááºáááºááŒá®áž áá
áºáá¬áá®á áá
áºááẠááá¯á·ááá¯áẠáá
áºáá
á±á¬áá·áºááẠááá¯á¡ááºááá·áºáá®ááá¯ááºáá±á¬áºáááºáž áá¯á¶ážá
áœá²áá°á á
á¬áá»á¯ááºááááºá
á¬ááá¯á· ááœáŸá²ááŒá±á¬ááºážáá±ážááá·áº áá»ááºááŒááºážáá
áºáá¯ááŒá
áºáááºá N ááááºá áá»ááºááŒááºážááŒááºáááá¯ááºáááºá 2 * N áááẠááá¯á·ááá¯áẠááŸá¯á¶ážáááºá áá»áœááºá¯ááºááá¯á·ááẠá¡ááá¯ááºáááẠááŒá
áºááá¯ááºááŒá± 40% ááá·áºááᯠááŒá¯áá¯ááºáá«áááºá ááœá±áá±ážáá»á±ááẠááááºááá¯á¶áá±á¬ááºáá«áá ááœá±áá±ážááœá±áá°ááᯠááŒáá·áºáááºážááŸá¯á¡ááŒá
Ạááá·áºááœááºážá
ááºážá
á¬ážáá«áááºá
ááá¯á·á¡ááŒááºá á¡áá±á¬ááºážá¡á á¬ážáá»á¬ážááᯠá¡áá»áááºááŸáá·áºáááŒá±ážáá® á¡áááºááŒá±áá±á¬áá¯á¶á á¶ááŒáá·áº ááŒááºááœá±á·ááá¯ááºá á±áááºá¡ááœáẠá¡áá¯á¶ážááŒá¯áá°ááẠá¡ááá¯ááºááááºááŒá áºá á± ááŸá¯á¶ážáááºááŒá áºá á± áá»ááºáá»ááºážáá¬ážáááºááá¯ááºá á±ááẠá¡áá±ážááŒá®ážáá«áááºá ááá¯á·ááŒá±á¬áá·áº TON á០áá±á¬ááºážáá á¬ážáá»á¬ážááŸáá·áº ááááºáá»á¬ážááᯠááá¯ááºááá¯ááºááŒáááá·áº áááºááá¯ááºáá áºáá¯ááᯠáááºáá®ážááẠááá¯á¡ááºáá«áááºá
á áááºáá»áá²á· á á¬áá»á¯ááºáá áºáá¯áá±ážáá«á
á¡áááºááŒá±á á±áááºá¡ááœááºá áá»áœááºá¯ááºááẠFunC á¡ááœáẠáá¯ááºáá®ážáá±á¬ááºážááá¯ážááŒáá¬ážáá«áááºá ááááºá¡ááºááᯠVisual Studio áá¯ááºááŸá¬ááœá±ááŸá¯ááœáẠááŸá¬ááœá±á·ááá¯ááºááŒá®áž áá áºáá¯áá¯ááᯠáá¯ááºááááºááá·áºááá¯áá«áá ááá¯á·áá±á¬ááºááœáẠááááºá¡ááºááᯠá¡áá»á¬ážáá°ááŸá¬ ááá¯ááááºážááœáẠáááºáá±ážáá¬ážáá«áááºá ááá¯á·á¡ááŒááºá áá áºá á¯á¶áá áºáŠážááẠááááºá Fift ááŸáá·áºá¡áá¯ááºáá¯ááºáááºá¡ááœáẠááááºá¡ááºáá áºáá¯ááŒá¯áá¯ááºáá²á·ááŒá®ážá áááºááẠáááºážááá¯ááá·áºááœááºážááŒá®áž VSC ááœááºááŸá¬ááœá±ááá¯ááºáááºá
á¡áááºá¡áááºááááºáá»á¬ážááᯠáá»áœááºá¯ááºááá¯á·áá¯ááºáá±á¬ááºááá·áº ááá¯ááŸá±á¬ááºáááºážáá áºáá¯ááᯠáá»ááºáá»ááºážáááºáá®ážááŒáá«á áá¯á·á
áá»áœááºá¯ááºááá¯á·áááááá¯ááá¯ááœááºáá°á á±áááºá áá»áœááºá¯ááºááá¯á·ááẠá áááºá á¬áá»á¯ááºáá áºáá¯áá±ážááŒá®áž á¡áááºááá·áºáááŒá áºáá®á¡áá áááºážááᯠááŒááºááœááºážá á ááºážáááºáááºááŒá áºáááºá ááá¯á·ááŸáᬠáá»áœááºá¯ááºááá¯á·ááẠáááºážááᯠTON ááŒáá·áº áá¯ááºáá±áá«áááºá
á
áááºá
á¬áá»á¯ááºááœáẠáá±á«áºááá¯ááºáá±á¬ ááŒááºááááºážáááºážááŸá
áºáá¯ááŸááááºá ááááá¯á¶áž, recv_external() á
á¬áá»á¯ááºááᯠááŒááºáááá¹áá¬á០áá±á¬ááºážááá¯ááŸá¯áá
áºáá¯ááẠTON ááŸááá¯ááºáá² á¥ááá¬á¡á¬ážááŒáá·áº áá»áœááºá¯ááºááá¯á·ááá¯ááºááá¯áẠáááºáá±á·áá»áºáá
áºáá¯ááœá²á·áᬠlite-client ááŸáá
áºááá·áº áá±ážááá¯á·ááá·áºá¡áá« á€áá¯ááºáá±á¬ááºáá»ááºááᯠáá¯ááºáá±á¬ááºáá«áááºá áá¯áááá recv_internal() TON á¡ááœááºážááŸá á¡áá»áá¯á·áá±á¬ á
á¬áá»á¯ááºáá»á¬ážááẠáá»áœááºá¯ááºááá¯á·á áá¯ááºáááºážááᯠáááºááœáŸááºážááá·áºá¡áá« ááŒá
áºáá«áááºá ááŸá
áºáá¯áá¯á¶ážááœááºá áá±á¬ááºáá»á¬ážááᯠfunction ááá¯á·áá°ážááá¯ááºáááºá
áá¯ááºáá±ááá¯ááºáá»áŸáẠá¡áá¯ááºááŒá áºááá·áº ááá¯ážááŸááºážáá±á¬ á¥ááá¬áá áºáá¯ááŒáá·áº á áááºááŒáá«á áá¯á·á ááá¯á·áá±á¬áº áááºážááẠáááºááá·áºáá¯ááºáá±á¬ááºááá¯ááºá áœááºážááá¯áá»áŸ ááá±ážáá±á¬ááºáá«á
() 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 compile áá¯ááºáá«á
~/TON/build/crypto/func -APSR -o lottery-compiled.fif ~/TON/ton/crypto/smartcont/stdlib.fc ./lottery-code.fc á¡áá¶áá»á¬ážáá¡áááá¹áá¬ááºááᯠcommand ááŒáá·áºááŒáá·áºááŸá¯ááá¯ááºáááºá
~/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 assembler á¡ááœáẠFift ááŒáá·áºáá±ážáá¬ážáá±á¬áá¯ááºááŒá
áºáááºá
áá»áœááºá¯ááºááá¯á·ááẠá
áááºá
á¬áá»á¯ááºááᯠá
ááºááœááºážááœáẠáá¯ááºáá±á¬ááºááŒá®áž á
ááºážáááºááá¯áá±á¬ááŒá±á¬áá·áºá ááá¯ááºáá
áºáᯠáááºáá®ážáá«áááºá lottery-test-suite.fif ááá¯áá±áá¬ááœáẠá
á¯á
ááºážáá¬ážáá±á¬ áá¯ááºááᯠáá°ážáá°ááŒá®áž áááºážááŸá áá±á¬ááºáá¯á¶ážá
á¬ááŒá±á¬ááºážááᯠá¡á
á¬ážááá¯ážáá¬á á
áááºá
á¬áá»á¯ááºáá¯ááºááᯠááááºážáá±á¡ááŒá
Ạáá±ážáá±ážáááºá codeááá¯á·áá±á¬áẠáááºážááᯠvirtual machine ááá¯á· ááœáŸá²ááŒá±á¬ááºážááá¯ááºá
á±áááºá
"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 ááᯠá
áááºááá·áº áá±áᬠ(ááá¯á·ááá¯áẠááœááºáááºá¡ááŒá±á¡áá±) áá°áá±á¬ á
áá¬ážáááºááᯠááŸááºáááºážáááºáá«áááºá ááŒáá¯ááºááœá²áá¬áá¡ááœááºážááŸá¬ááẠdeveloper áá
áºáŠážá áááºáá®ážáá¯á¶ááᯠááŒááá²á·áááºá c7 áá±á¬áºáá®áá°ážáááºá á€áá±á¬ááºážáá«ážááá»áœááºá¯ááºááá¯á·ááŒá±á¬ááºážáá²áááºááá¯á¡ááºááá¯ááºáá«áááºá rand_seed áá»áááºážáá¶áá«ááºáá
áºáá¯á áá»áá¯ážáááºááẠáááºážáá±á«áºááœááºáá°áááºááŒá®áž áááŒá±á¬ááºážáá²ááá¯ááºáá±á¬ááŒá±á¬áá·áº á¡ááŒáááºááá¯ááºáž áá°áá®áá±á¬áá¶áá«ááºááᯠááŒááºáá±ážáááºááŒá
áºáááºá
recv_internal О recv_external áááºááá¯áž 0 ááŸáá·áº -1 ááŸááá±á¬ ááááºážáá±áá»á¬ážááẠá
áááºá
á¬áá»á¯ááºááœáẠáááºááá¯ááºááá·áº áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠáá±á«áºááá¯áááºá¡ááœáẠáá¬áááºáá°áá«áááºá
ááᯠáá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·á á¡áá»ááºážááŸá®ážáá±á¬ á
áááºá
á¬áá»á¯ááºá¡ááœáẠááááá¯á¶ážá
ááºážáááºááŸá¯ááᯠáááºáá®ážááẠá¡áááºááá·áºááŒá
áºáá±áá«ááŒá®á ááŸááºážááŸááºážáááºážáááºážáááááºá áá»áœááºá¯ááºááá¯á·ááẠáááºááŸáááœáẠáá°áá®áá±á¬ááá¯ááºááœáẠá
ááºážáááºááŸá¯á¡á¬ážáá¯á¶ážááᯠáá±á«ááºážááá·áºáá«áááºá lottery-test-suite.fif.
variable áá
áºáá¯áááºáá®ážááŒáá·áºáá¡á±á¬áẠstorage á¡ááœááºáá
áºáá¯ááᯠáá±ážáá«á celláááºážááẠá
áááºá
á¬áá»á¯ááºá ááá¯ááŸá±á¬ááºááŸá¯ááŒá
áºáááá·áºáááºá
message á€áááºááŸá¬ ááŒááºáá០á
áááºá¡áááºá¡ááœááºáá¶ááá¯á· áá±ážááá¯á·ááá·áº áááºáá±á·áá»áºááŒá
áºáááºá áá±á¬áá±á¬áááºáá±á¬á· á¡á²áá«ááᯠá¡ááœááºáá¬ážáá²á·áááºá
variable storage
<b b> storage !
variable message
<b b> message ! áá»áœááºá¯ááºááá¯á·ááẠááááºážáá±áá»á¬ážááŸáá·áº ááááºážááŸááºáá»á¬ážááᯠááŒááºáááºááŒá®ážáá«áá áá»áœááºá¯ááºááá¯á·ááẠTVM ááᯠcommand ááᯠá¡áá¯á¶ážááŒá¯á áá¯ááºáá±á¬ááºáááºá runvmctx ááŸáá·áº áááºáá®ážáá¬ážáá±á¬ áá±á¬ááºáá»á¬ážááᯠááá·áºááœááºážáááºá
message @
recv_external
code
storage @
c7
runvmctx á¡áá¯á¶ážááœááºáá»áœááºá¯ááºááá¯á·á¡á±á¬ááºááŒááºáááá·áºáááºá á¡áááºá¡áááºáá¯ááºááᯠááœáá·áºáá«á Fift.
ááá¯áá»áœááºá¯ááºááá¯á·áááŸááá¬áá±á¬áá¯ááºááᯠrun ááá¯ááºáááºá
export FIFTPATH=~/TON/ton/crypto/fift/lib // вÑпПлМÑеЌ ПЎОМ Ñаз ÐŽÐ»Ñ ÑЎПбÑÑва
~/TON/build/crypto/fift -s lottery-test-suite.fif áááá¯ááááºááẠá¡ááŸá¬ážá¡ááœááºážáááŸááá² áá¯ááºáá±á¬ááºááá·áºááŒá®áž output ááœáẠexecution log ááá¯ááœá±á·ááá«áááºá
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 ááŒá®ážáá±á¬á· á á¬áá±ážááœá²ááᯠerror áá áºáá¯áá²á· áá¯ááºáá±á¬ááºáá¬ááᯠááœá±á·ááá«áááá·áºáááºá
[ 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-bit ááá¯áááºáá«á unsigned int áá±ážááá¯á·áá¬áá±á¬ ááááºážá
áá¬ážááŸ
ááá¯á·áá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠá áááºáááºáááá¯ááºááá¯ááŸá±á¬ááºááŸá¯á០32 áá áºáá»á¬ážááᯠáááºáá«áááºá áááºáá¬ážáá±á¬áá¶áá«ááºááẠááá¯á·áá¬ážáá±á¬áá¶áá«ááºááŸáá·áº ááá¯ááºáá®ááŸá¯ááŸááááŸáá á áºáá±ážáá«á ááá¯ááºáá«á ááŒáœááºážáá»ááºáá áºáá¯áá±ážáá«áááºá áá»áœááºá¯ááºááá¯á·áá¡ááŒá±á¡áá±ááœááºá áá»áœááºá¯ááºááá¯á·ááẠáááá¯ááºáá®ááŸá¯áá áºáá¯ááᯠáá±ážááá¯á·áá±áá±á¬ááŒá±á¬áá·áº ááŒáœááºážáá»ááºáá áºáá¯á¡á¬áž áá»áœááºážáá»ááºáá¬ážááá·áºáááºá
áá² á á¯á ááºážááá¯ááºáá¡á±á¬ááºá
~/TON/build/crypto/func -APSR -o lottery-compiled.fif ~/TON/ton/crypto/smartcont/stdlib.fc ./lottery-code.fc ááá¬áá²á·áá¯ááºááᯠCopy áá°ážááá¯ááºáá«á lottery-test-suite.fifáá±á¬ááºáá¯á¶ážá
á¬ááŒá±á¬ááºážááᯠá¡á
á¬ážááá¯ážááá¯á· ááá±á·áá«áá²á·á
á á¬áá±ážááœá² á¡á±á¬ááºááŒááºááŒá±á¬ááºáž á á áºáá±ážááŒáá·áºáá¡á±á¬ááºá
~/TON/build/crypto/fift -s lottery-test-suite.fifáááºááŸáááááºáá»á¬ážááŸáá·áºá¡áá° áááºááá¯ááºáᬠáááááááºááᯠáááºááœá±á·ááŒááºááá¯ááºáá«áááºá
á
ááºážáááºááŸá¯áá»á¬ážááŒáá·áº ááá¯ááºáá²ááá¯á· á
áááºá
á¬áá»á¯ááºá á
á¯á
ááºážáá¯ááºááᯠá¡áááºáááŒááºáá°ážáá°ááẠá¡áááºáááŒá±ááŒá±á¬ááºáž áááááŒá¯áá«á ááá¯á·ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·á¡ááœáẠáá¯ááºááᯠááááºážáá±á¡ááŒá
áºááá¯á· áá±ážáá±ážááá·áº script áá
áºáá¯ááᯠáá±ážáá¬ážáááºááŒá
áºááŒá®ážá á
á¯á
ááºážáá¬ážáá±á¬ áá¯ááºááᯠáá»áœááºá¯ááºááá¯á·á¡áá¯á¶ážááŒá¯á á
ááºážáááºááŸá¯áá»á¬ážááŸáá·áº ááá¯ážááá¯ážááŸááºážááŸááºážáá»áááºáááºáá«áááºá "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.
compiled ááá¯ááºááᯠááá¯ážááá¯ážáá±ážááœá¬ážááá·áº sh script ááŸá¬ áá¯ááºááá»áá¯á·ááá·áºááŒáá·áºáá¡á±á¬áẠ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ááá¯á
á
áºáá±ážááẠáááẠscript ááᯠrun ááŒáá«á
áá¯á·á ááá¯ááºáá
áºáá¯áá¯ááºáá±ážáááá·áºáááºá 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 á
á¬áá±ážááœá²áá»á¬ážááᯠá
á¯á
ááºážááŒá®áž áá»ááºáá»ááºážáá¯ááºáá±á¬ááºáá±ážáá«áááºá áá®ááŸá¬ link áá
áºáá¯ááŸááááºá .
áá±á¬ááºážááŒá®á áá«ááá¯á·ááŸá±á·ááááºáááºá á¡áááºááŒá±ááá¯á·á¡ááœáẠáá±á¬ááºáááºáá áºáá¯áá¯ááºáá¡á±á¬ááºá
ááá¯ááºááœá²áá
áºáá¯áááºáá®ážááŒáá«á
áá¯á· 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` пеÑÐµÐŒÐµÐœÐœÐ°Ñ ÑОпа ÑлПваÑÑ, Ñ
ÑÐ°ÐœÐžÑ Ð¿ÐŸÑлеЎМОе ЎваЎÑаÑÑ ÑÑавПк. áá±á¬ááºáá
áºáá¯á function ááŸá
áºáá¯ááá¯áá±ážááááºá áá«ááá¯á·á ááááá
áºáá±á¬ááºááᯠáá±á«áºáááºá 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;
}áá»áœááºá¯ááºááá¯á·ááẠá áááºá á¬áá»á¯ááºáá¡á ááœáẠá€áá¯ááºáá±á¬ááºáá»ááºááŸá áºáá¯ááᯠáá±á«ááºážááá·áºáá«áááºá áá»áœááºáá±á¬áºááᯠá¡áááºá¡áááºááááºá
áá±áá¬ááá¯ááááºážáááºážááẠbuilt-in áá¯ááºáá±á¬ááºáá»ááºááá¯áááºáá±á«áºááá¯áááºááá¯á¡ááºáááá·áºáááºá set_data() áááºážááẠdata áá»á¬ážááá¯ááŸááºáááºážáááºáááá·áºáááºá pack_state() á
áááºáááºáááá¯ááºááá¯ááŸá±á¬ááºááŸá¯ááœááºá
cell packed_state = pack_state(arg_1, .., arg_n);
set_data(packed_state);ááᯠáá»áœááºá¯ááºááá¯á·ááœáẠáá±áá¬áá±ážáá¬ážááŒááºážááŸáá·áº áááºááŸá¯ááŒááºážá¡ááœáẠá¡áááºááŒá±áá±á¬áá¯ááºáá±á¬ááºáá»ááºáá»á¬áž ááŸááá±á¬ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á· áááºáááºáá¯ááºáá±á¬ááºááá¯ááºáá«ááŒá®á
ááŒááºáááŸáááºáá¬áá±á¬áááºáá±á·áá»áºááᯠá á¬áá»á¯ááºááá¯ááºááŸáẠ(ááá¯á·ááá¯áẠáá®ážááá·áºáá±á¬á·ááá¯á¡áá¯á¶ážááŒá¯áá° á¡ááŒá¬ážá¡áá¯á¶ážááŒá¯áá°) á០áááºááŸááºáá±ážááá¯ážáá¬ážááŒá±á¬ááºáž á á áºáá±ážáááºááá¯áááºá
áá»áœááºá¯ááºááá¯á·ááẠá áááºá á¬áá»á¯ááºáá áºáá¯ááᯠáá¯ááºáá±áá±á¬á¡áá«ááœáẠáá»áœááºá¯ááºááá¯á·ááẠáááºážááᯠááá¯ááŸá±á¬ááºááŸá¯ááœáẠááá¯á¡ááºááá·áºáá±áá¬ááŒáá·áº á¡á ááŒá¯ááá¯ááºáááºá áááºážááᯠá¡áá¬áááºá¡áá¯á¶ážááŒá¯áááºá¡ááœáẠááááºážáááºážáááºááŒá áºáááºá á¡áááºáááºáá±á·áá»áºá áááºááŸááºááᯠáááºááá¯ááºáᬠáá»áŸáá¯á·ááŸááºáá±á¬á·ááŒáá·áº ááŒá¯áá¯ááºáá¬ážááŒá±á¬ááºáž á¡áááºááŒá¯ááá¯ááºááẠááá¯áá±áá¬ááœáẠá¡áá»á¬ážáá°ááŸá¬áá±á¬á·ááᯠáá±ážáá«áááºá
áááºááá¯ááºáááºááŸá¬ áá®ážááá·áºáá±á¬á·áá
áºáá¯ááᯠáááºáá®ážááŒá®áž á¡á²áá«ááᯠáá»áá±ážááá¯ááºááŒáá¡á±á¬áẠtest/keys/owner.pkáááºážááá¯áá¯ááºáá±á¬ááºáááºá áá»áœááºá¯ááºááá¯á·ááẠá¡ááŒááºá¡ááŸááºá¡áá»áá¯ážáááºáá±á¬ááºááŸá¯áá¯ááºááœáẠFift ááá¯ááœáá·áºááŒá®áž command áá±ážáá¯ááá¯áá¯ááºáá±á¬ááºáá«áááºá
`newkeypair` геМеÑаÑÐžÑ Ð¿ÑблОÑМПгП О пÑОваÑМПгП клÑÑа О запОÑÑ ÐžÑ
в ÑÑек.
`drop` ÑÐŽÐ°Ð»ÐµÐœÐžÑ ÐžÐ· ÑÑека веÑÑ
МегП ÑлеЌеМÑа (в ЎаММПЌ ÑлÑÑае пÑблОÑМÑй клÑÑ)
`.s` пÑПÑÑП пПÑЌПÑÑеÑÑ ÑÑП Ð»ÐµÐ¶ÐžÑ Ð² ÑÑеке в ЎаММÑй ЌПЌеМÑ
`"owner.pk" B>file` запОÑÑ Ð¿ÑОваÑМПгП клÑÑа в Ñайл Ñ ÐžÐŒÐµÐœÐµÐŒ `owner.pk`.
`bye` завеÑÑÐ°ÐµÑ ÑабПÑÑ Ñ Fift. ááá¯ááºááœá²áá
áºáá¯áááºáá®ážááŒáá«á
áá¯á· keys folder áá²ááŸá¬ test á¡á²áá®ááŸá¬ private key áá±ážáááºá
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áááºááŸá folder áá²ááŸá¬ ááá¯ááºááᯠááœá±á·áá«áááºá owner.pk.
áá»áœááºá¯ááºááá¯á·ááẠá¡áá»á¬ážáá°ááŸá¬áá±á¬á·ááᯠá¡á á¯á¡á ááºážá០áááºááŸá¬ážááŒá®áž ááá¯á¡ááºáá«á áá®ážááá·áºáá áºáá¯á០ááá°ááá¯ááºáá«áááºá
ááᯠáá»áœááºá¯ááºááá¯á·ááẠáááºááŸááºá
á
áºáá±ážááẠááá¯á¡ááºáá«áááºá á
ááºážáááºááŸá¯áá
áºáá¯áá²á·á
ááá¯ááºáá¡á±á¬ááºá ááááŠážá
áœá¬ áá»áœááºá¯ááºááá¯á·ááẠáá¯ááºáá±á¬ááºáá»ááºááᯠá¡áá¯á¶ážááŒá¯á ááá¯ááºá០áá®ážááá·áºáá±á¬á·ááᯠáááºáááºá file>B áááºážááᯠvariable áá
áºáá¯á¡ááŒá
áºáá±ážáá«á owner_private_keyááá¯á·áá±á¬áẠfunction ááá¯á¡áá¯á¶ážááŒá¯áá«á 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()áááºážááᯠvariable áá
áºáá¯á¡ááŒá
áºáá±ážáá«á 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 bits ááá¯áááºááŒá®áž variable áá áºáá¯á¡ááŒá áºáá±ážááŒá®ážáá±á¬áẠcounter variable á 32 bits ááá¯áááºáááºá
áá»áœááºá¯ááºááá¯á·ááœáẠá áááºáááºáááá¯ááºááá¯ááŸá±á¬ááºááŸá¯á០áá±áá¬áááºááŸá¯ááẠáá¯ááºáá±á¬ááºáá»ááºáá áºáᯠáá«ááŸááá±á¬ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á· áááºážááᯠá¡áá¯á¶ážááŒá¯áá«áááºá
ááá¯á·áá±á¬áẠááá¯ááŸá±á¬ááºááŸá¯ááŒáá·áº ááœáŸá²ááŒá±á¬ááºážáá¬ážáá±á¬ áá±á¬ááºáá¬ááᯠá á áºáá±ážááŒá®áž áááºááŸááºááᯠá á áºáá±ážáá«á áá áºáá¯áᯠáááá¯ááºáá®áá«á áááºááá¯ááºáᬠáá¯ááºááŒáá·áº ááŒáœááºážáá»ááºáá áºáᯠáá¬ážááá¯ááºáá«á
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-bit á¡áá¯ááºááá¹ááá¬ááá¯ááºáá±á¬ ááááºážááŒáá·áºááẠá
áááºá
á¬áá»á¯ááºááœáẠáááºáá±á·áá»áºááᯠáááºááá¯á·áá¯ááºáá±á¬ááºááááºááᯠááœá±ážáá»ááºáá«áááºá
<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 documentation ááœáẠvariable áá»á¬ážááᯠDeserialization ááœááºáá±á¬áºááŒáá¬ážáááºá
áá¯áá·áºá áááºážááááºáá±á«ááºážááŸáá·áºá¡áá°á
á ááºážáááºááŒá®áž áá»ááºááœá¬ážáᬠáá±áá»á¬áá«á á±á á¡áᯠáá®ááá¯ááºááŸááºáá²á·ááááºá á¬ááᯠááŒá±á¬ááºážááá¯á· áá¯áá¹áááá±áááᯠááá·áºááŒáá·áºáá¡á±á¬ááºá
á
áááºá
á¬áá»á¯ááºááœáẠáá»áœááºá¯ááºááá¯á· áááºááẠááœá²ááŒááºážá
áááºááŒá¬áááºá messageá áá«ááá¯á·áááºáááºá action. áá«ááá¯á·ááŸá
áºáá±á¬ááºááŸáááẠááá¯á· ááááá±ážáá«áá
á± action: ááááºá
á¬ááŒá±á¬ááºážááŒá®áž ááááºááá¯á·ááŒááºážá
ááá¯á·áá±á¬áẠá
á¬áá»á¯ááºááá¯ááºááŸááºá ááááºá
á¬á¡áá
áºááᯠáááºááŒá®áž ááá¯ááŸá±á¬ááºáááºážááœáẠááááºážáááºážáá«áááºá
áá»áœááºá¯ááºááá¯á·ááẠá
á
áºáá±ážááŸá¯áá»á¬ážááᯠáá¯ááºáá±á¬ááºááŒá®áž ááááá¡ááŒááẠá
á¬áá±ážááœá² áá»ááŸá¯á¶ážáááºááᯠááŒááºááœá±á·ááááºá ááᯠá
á¬áá»á¯ááºááẠá
ááºážáááºááŸá¯ááœáẠáá»á±á¬ááºáá¯á¶ážáá±áá±á¬ áááºáá±á·áá»áºá០7 bits ááᯠáááºáá¶ááœá²ááŒááºážá
áááºááŒá¬áá±ážáá±á¬ááŒá±á¬áá·áº áááºážááẠáá¡á±á¬ááºááŒááºáá«á ááá¹ááááᯠááá·áºááŒáá·áºáá¡á±á¬áẠ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().
á¡áᯠInternal Messaging ááᯠááœá¬ážááŒáá·áºáá¡á±á¬ááºá á¡ááŸááºááŸá¬á áá»áœááºá¯ááºááá¯á·ááẠááááºááá¯áᬠáááºáá¶ááŒá®áž áá°á¡ááá¯ááºááá«á áá á¬ážááá¬ážáá¶ ááá¬á ááŸá áºáááŸáá·áº ááŸá¯á¶ážáá«á ááá¯ááºááŸááºáá¶ áá¯á¶ážáá¯á¶áá áºáá¯á¶ ááŒááºááá¯á·áá±ážáá«áááºá
á¡áááºáá¯á¶áž ááá¯ážááŸááºážáá²á· á ááºážáááºááŸá¯áá áºáᯠáá±ážááŒáá·áºáá¡á±á¬ááºá áááºážá¡ááœááºá áá»áœááºá¯ááºááá¯á·ááẠá áááºá á¬áá»á¯ááºááá¯á· ááááºáá±ážááá¯á·ááá·áº á áááºá á¬áá»á¯ááºá á ááºážáááºááááºá á¬áá áºáᯠááá¯á¡ááºáá«áááºá
á áááºá á¬áá»á¯ááºááááºá á¬ááœáẠáá¶áá«ááºááŸá áºáá¯á workchain á¡ááœáẠáá¬áááºááŸááá±á¬ 32-bit ááááºážááŒáá·áºááŸáá·áº ဠworkchain ááŸá 256-bit á¡áá¯ááºááá¹ááá¬ááá¯ááºáá±á¬ ááááºážááŒáá·áºáá®ážááá·áºá¡áá±á¬áá·áºáá¶áá«ááºááá¯á· áá«áááºáááºá á¥ááá¬-1 ááŸáá·áº 12345 ááẠá€ááááºá á¬ááᯠááá¯ááºááœááºááááºážáááºážáá«á
ááááºá á¬ááᯠááááºážáááºážááẠáá¯ááºáá±á¬ááºáá»ááºááᯠáá°ážáá°áá²á·áááºá .
// ( wc addr fname -- ) Save address to file in 36-byte format
{ -rot 256 u>B swap 32 i>B B+ swap B>file } : save-addressfunction áááºááá¯á¡áá¯ááºáá¯ááºáá²ááá¯áá¬ááá¯ááŒáá·áºááá¯ááºáá¡á±á¬ááºá áá«á Fift á¡áá¯ááºáá¯ááºáá¯á¶ááá¯áá¬ážáááºáá±ážáááá·áºáááºá á¡ááŒááºá¡ááŸááºá¡áá»áá¯ážáááºáá±á¬ááºááŸá¯áá¯ááºááœáẠFift ááá¯ááœáá·áºáá«á
~/TON/build/crypto/fift -i ááááŠážá áœá¬áá»áœááºá¯ááºááá¯á·ááẠ-1á 12345 ááŸáá·áºá¡áá¬áááºááá¯áẠ"sender.addr" á¡áááºááᯠstack áá²ááá¯á·ááá·áºáááº-
-1 12345 "sender.addr" áá±á¬ááºáá
áºááá·áºááŸá¬ function ááᯠexecute ááŒá
áºáá«áááºá -rotááŒáá¯ááºáááºáááºážáá±á¬ á
áááºá
á¬áá»á¯ááºáá¶áá«ááºááẠstack áááááºááœááºááŸááá±á
á±áááºá stack ááá¯ááŒá±á¬ááºážáá±ážáá±á¬á
"sender.addr" -1 12345256 u>B 256-bit á¡áá¯ááºááá¹ááá¬ááá¯ááºáá±á¬ ááááºážááŒáá·áºááᯠbytes á¡ááŒá
ẠááŒá±á¬ááºážáááºá
"sender.addr" -1 BYTES:0000000000000000000000000000000000000000000000000000000000003039swap stack á ááááºáááºážááŒááºá
ááºááŸá
áºáá¯ááᯠáá²ááŸááºáá«á
"sender.addr" BYTES:0000000000000000000000000000000000000000000000000000000000003039 -132 i>B 32-bit integer ááᯠbytes á¡ááŒá
ẠááŒá±á¬ááºážáááºá
"sender.addr" BYTES:0000000000000000000000000000000000000000000000000000000000003039 BYTES:FFFFFFFFB+ bytes á sequence ááŸá
áºáá¯ááᯠáá±á«ááºážá
ááºáá¬ážáááºá
"sender.addr" BYTES:0000000000000000000000000000000000000000000000000000000000003039FFFFFFFFáá±á¬ááºáááẠswap.
BYTES:0000000000000000000000000000000000000000000000000000000000003039FFFFFFFF "sender.addr" áá±á¬ááºáá¯á¶ážááœáẠááá¯ááºáá»á¬ážááᯠááá¯ááºááá¯á· áá±ážáá±ážáááºá B>file. á€ááŒá®ážáá±á¬áẠáá»áœááºá¯ááºááá¯á·á stack ááẠááá¬ááŒá
áºáá±áááºá ááẠ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));
}áá«áá¡á¬ážáá¯á¶ážáá«áá²á .
ááá¯áá±á¬á· ááá¯ážááŸááºážáá«áááº- ááŒááºáááá¹áá¬á០á á¬áá»á¯ááºááá¯ááºáᬠá¡áá»ááºá¡áááºáá»á¬ážááᯠááá°ááá¯ááºááẠáááºážáááºážáá»á¬áž áááºáá®ážááŒáá«á áá¯á· (ááááºáá±á¬á· á áááºá á¬áá»á¯áẠááá¯ááŸá±á¬ááºááŸá¯á០áá±áá¬ááᯠáááºáá«)á
. á áááºáááºáááá¯ááºáá áºáá¯ááŸáá·áºáááºáááºááá·áº á¡áá»ááºá¡áááºáá»á¬ážááᯠáááºááá¯á·ááá°ááááºá¡ááŒá±á¬ááºáž á¡á±á¬ááºááœáẠáá±ážáá«áááºá
á áááºá á¬áá»á¯ááºááᯠáá¯ááºááŒááºááá·áºá¡áá« ááááá¯á¶ážáá±á¬ááºážááá¯ááŸá¯ááᯠááá¯ááºááœááºááá·áº áá¯ááºááᯠááá·áºáááºáá±á·ááœá¬ážáá«áááºá . ááᯠááá¬áá 1/3 ááᯠááá¯ááºááŸááºáá¡áá±á¬áá·áºááá¯á· áá±ážááá¯á·ááŒááºážááŒáá·áº áá»áá¯á·ááœááºážáá»ááºá
ááᯠáá»ááºááŸááá±áá±ážáááºááŸá¬ á
áááºá
á¬áá»á¯ááºááᯠáá¯ááºááŒááºáááºááŒá
áºáááºá ááá¯ááºááœá²áá
áºáá¯áááºáá®ážááŒáá«á
áá¯á· requests.
áá¯ááºáá±ááŸá¯áá¯ááºááᯠá¡ááŒá±áá¶á¡áá±áá²á· áá°áá²á·áááºá á¡áᬠááá¬ážááẠrepository áá²ááŸá¬á
áá¬ááᯠááááá¬ážáááá²á áá»áœááºá¯ááºááá¯á·ááẠá áááºáá»áá±á¬ ááá¯ááŸá±á¬ááºááŸá¯áá áºáá¯ááŸáá·áº ááá·áºááœááºážááá·áº áááºáá±á·áá»áºáá áºáá¯ááᯠáááºáá®ážáá¬ážáááºá ááá¯á·áá±á¬ááºááœááºá á áááºá á¬áá»á¯ááºááááºá á¬ááᯠáá¯ááºáá±ážáááºá ááá¯ááá¯áááºááŸá¬ 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 ááŸáá·áº á
áá¹ááá·áºá¡áááºážáááºááŒá¬ááŒá®ážáá±á¬áẠáá°áá®áá±á¬ command ááᯠexecute áá¯ááºáá«á ááááºááá¯á·ááá¯á· áá»áœááºáá±á¬áºáá¯á¶ážáááºá ááŸáá·áº áá±á¬ááºážáá«ážáá¡áá¯á¶ážááœáẠáá»áœááºá¯ááºááŒá±á¬ááá·áº á
áá¬ážááŒá±á¬áááºážá០áá
áºá
á¯á¶áá
áºáŠážáá¶á០á
ááºážáááºááááºááᯠááẠáá±á¬ááºážááá¯ááºáááºá
> getaccount 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksydáá
á¥áºážá
á¬ážáá¬ážáá¯á¶áááẠ(ááœááºáááºáá±á«áºááœáẠáá±á«áºáá¬áááºástate:account_uninit) ááá¯ááá¯á·áá±á¬ááááºá
á¬áá
áºáá¯ááŸáá·áº 1 nanograms áááºáá»ááºááœá±ááŒáá·áº á
áááºáá»áá±á¬á
á¬áá»á¯ááºá
account state is (account
addr:(addr_std
anycast:nothing workchain_id:0 address:x044910149DBEAF8EADBB2B28722E7D6A2DC6E264EC2F1D9BEBD6FB209079BC2A)
storage_stat:(storage_info
used:(storage_used
cells:(var_uint len:1 value:1)
bits:(var_uint len:1 value:103)
public_cells:(var_uint len:0 value:0)) last_paid:1583257959
due_payment:nothing)
storage:(account_storage last_trans_lt:3825478000002
balance:(currencies
grams:(nanograms
amount:(var_uint len:4 value:2000000000))
other:(extra_currencies
dict:hme_empty))
state:account_uninit))
x{C00044910149DBEAF8EADBB2B28722E7D6A2DC6E264EC2F1D9BEBD6FB209079BC2A20259C2F2F4CB3800000DEAC10776091DCD650004_}
last transaction lt = 3825478000001 hash = B043616AE016682699477FFF01E6E903878CDFD6846042BA1BFC64775E7AC6C4
account balance is 2000000000ngááᯠá áááºá á¬áá»á¯ááºááᯠáá¯ááºááŒááºááá¯ááºáá¡á±á¬ááºá Lite-client ááá¯ááœáá·áºááŒá®áž execute áá¯ááºáá«á
> 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 áááºážáááºážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á á áááºá á¬áá»á¯ááºáá áºáá¯á០á¡áá»ááºá¡áááºááá°ááŒááºážá
ááᯠSmart Contract ááá°áááºážáá»á¬ážááᯠáááºááá¯á·áá¯ááºáá±á¬ááºááááºááᯠáá±á·áá¬ááŒáá·áºááŒáá«á áá¯á·á
á
áááºááá¯ááºáá« lite-client áá»áœááºáá±á¬áºáá±ážáá¬ážáá²á· get method ááᯠrun ááá¯ááºáá«á
$ ./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]) ] ááá¯ááºáá±á«áºááŸá á áááºá á¬áá»á¯ááºá¡ááŒá±á¬ááºáž á¡áá»ááºá¡áááºáá»á¬ážááᯠááŒáááẠáá±á«á·áá±á«á·áá«ážáá«áž áá±á¬ááºáááºáá»á¬ážááŸáá·áº ááá°ááá·áºáááºážáááºážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áá«áááºá
áááºááá¯ááºááœáẠá áááºáá»áá±á¬ á á¬áá»á¯ááºá¡áá»ááºá¡áááºááᯠááŒááá¬ážáááºá
áá»áœááºá¯ááºááẠá áááºá á¬áá»á¯ááºáá±áá¬ááᯠá¡áááºááŒá±ááŒá±ááŒáááẠááá¯ážááŸááºážáá±á¬ Python áááºááá¯ááºááᯠáá±ážáá¬ážáá²á·áááºá á€áá±áá¬ááœáẠá¡áá±ážá áááºáááŒá±á¬áá² áááºááá¯ááºááᯠááœáŸáá·áºáááºáá«áááºá .
TON áá¶ áá±á¬ááºážááá¯ááŸá¯áá»á¬áž ááŒá¯áá¯ááºáá²á·áááºá Python ááŒááº. lite-clientá¡áááºááŒá±á
á±áááºá ááá¯ááºááᯠDocker ááœáẠáá¯ááºááá¯ážáá¬ážááŒá®áž Google Cloud ááœáẠáá¯ááºáá±áá¬ážáááºá .
ááŒáá¯ážá á¬ážáá±áá«áááºá
á¡áᯠááŒááºááŒáá·áºááá¯á· á¡á²áá®áá±áá¬ááᯠááááºááá¯á·ááá¯ááºáá¡á±á¬áẠ. 40 ááááºááá¯á·áááºá ááŸááºážááŸááºážáááºážáááºážááááẠá¡áá±á¬ááºážá¡á á¬ážá¡áá»áá¯á·ááᯠááŒá¯áá¯ááºáá«á áááºááá¯ááºááẠáá±á¬ááºážáá á¬ážááŸááºáááºážá áááºááŸáá¡ááá¯ááºááá¬ááá¯ááºááŸá¯ááºážááŸáá·áº á¡ááŒá¬ážá¡áá¯á¶ážáááºáá±á¬ á¡áá»ááºá¡áááºáá»á¬ážááᯠááŒááááºááᯠáá»áœááºá¯ááºááá¯á·ááœá±á·ááŒááºááá«áááºá
áá»áœááºáá±á¬áºááá¯á· ááááá áºáá¯á¶ážááᯠá¡ááá¯ááºáááŒá®áž áá¯ááááá áºáá¯ááᯠááŸá¯á¶ážáá²á·áá«áááºá
afterword
áá±á¬ááºážáá«ážááẠáá»áœááºáá±á¬áºáá»áŸá±á¬áºááá·áºáá¬ážáááºááẠáá»á¬ážá áœá¬ááŸááºááœá¬ážáááºá ááá¯ááá¯ááá¯ááºáááºá ááá¯á·ááá¯áẠTON á¡ááŒá±á¬ááºáž áá¬ááŸááááá±á¬ áá°ááŸáá·áº áááºážááŸáá·áº á¡ááŒááºá¡ááŸáẠáááºáá¶ááá¯ááºá áœááºážááŸááá±á¬ á¡ááœááºááá¯ážááŸááºážáá±á¬ á áááºáá»áá±á¬ á á¬áá»á¯ááºááᯠáá±ážáá¬ážáá¯ááºáá±ááá¯áá°á¡ááœááºáᬠááŒá áºááá¯ááºáááºá á¡áá»áá¯á·á¡áá¬áá»á¬ážááᯠááá¯áááá¯ážááŸááºážá áœá¬ ááŸááºážááŒááá¯ááºáá±áááºá
á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯á á¡áá»áá¯á·áá±á¬ááá¹ááá»á¬ážááẠááá¯ááá¯áááá±á¬ááºááŒá®áž á¡á¶áááºááœááºáá»ááŒá áºáá±á¬ááºážááŒá áºááá¯ááºáá±á¬áºáááºáž áá±á¬ááºážáá«ážááŒááºáááºááẠá¡áá»áááºááá¯áá°ááá±áááºá áá áºáá±áá¬áá¬ááŸá¬ á¡ááŸá¬ážáá¯ááºááááá¯ááºáᬠáá«ááŸááá¯áẠáá áºáá¯áá¯ááᯠáá¬ážááááºáá¬ááŒá±á¬áá·áºáááºáž ááŒá áºááá¯ááºáááºá áá«ááŒá±á¬áá·áº ááẠáá±ážáááºáá²á· áá áºáá¯áá¯ááᯠáá¯ááºáááºááá¯ááẠááá¬ážááẠá á¬ááœááºá á¬áááºáž áá«ááŸááá¯áẠTON áá¯ááºáá«áá²á· ááá¬ážááẠááá¯ááŸá±á¬ááºáá±áá¬ááᯠá¡á¬ážááá¯ážááá¯á· ááá¯áá«áááºá
TON ááá¯ááºááá¯ááºá ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯á¡ááá·áºááœááºááŸááá±áá²ááŒá áºáá±á¬ááŒá±á¬áá·áºá á€áá±á¬ááºážáá«ážáá« á¡ááá·áºáá»á¬ážáá²á០áá áºá á¯á¶áá áºáá¬ááᯠáá»áá¯ážáá»ááºááœá¬ážááá·áº á¡ááŒá±á¬ááºážá¡áá²áá»á¬áž ááŒá áºáá±á«áºááá¯ááºááẠ(áá»áœááºáá±á¬áºáá±ážáá±á á¥áºá¡áá»áááºá ááŒá áºáá²á·áááºááŸá¬ ááŒá¯ááŒááºáá¬ážááŒá®ážááŒá áºáááº)á ááá¯á·áá±á¬áº áá±áá¯áá»áá»ááºážáááºáá¯á¶ááŸá¬ ááŒá±á¬ááºážáá²ááœááºáááŸááá±á
TON áá²á· á¡áá¬áááºááᯠáá»áœááºáá±á¬áº áááá·áºááŸááºážáááºáá«áá°ážá ááááºáá±á¬ááºážááẠááá¯ááŒá®ážáá±á¬á¡áá¬áá áºáá¯ááŒá áºáá¬ááá¯ááºáááºá áá»áœááºá¯ááºááá¯á·ááẠáááºážááá¯áá±á·áá¬ááŒá®áž áá»áœááºá¯ááºááá¯á·ááá¯ááºáá¯ááºáá»á¬ážááŸáá·áºá¡áá° áááºáááºáá áºáá¯ááᯠááááºážááá¯ááºááẠá¡áá»áááºááŒá¯ááºážááá·áºáááºá
TON ááẠááá¯ááŒá®ážáá±á¬ á¡áá¯á¶ážááŒá¯áá° á¡áá¬ážá¡áá¬ááŸáááá·áº Facebook á០Libra áááºáž ááŸááá«áááºá Libra á¡ááŒá±á¬ááºáž áá»áœááºáá±á¬áº áá¬á០áááááá±á¬ááºáá²á ááá¯áááºá áá¯á¶ážááŒááºáá¬á TON á¡ááá¯ááºážá¡ááá¯ááºážááŸá¬ááẠá¡á²áá®ááŸá¬ ááŸá¯ááºááŸá¬ážááŸá¯ááœá± á¡áá»á¬ážááŒá®ážááŸááááºá developer áá»á¬ážááŸáá·áº TON á¡ááá¯ááºážá¡ááá¯ááºážááẠunderground ááŸáá·áºááá¯áá°áá±á¬áºáááºážá áááºážáááºá¡á±ážááŒáááºá
ááá¯ážáá¬áž
- ááá¬ážááẠTON á á¬ááœááºá á¬áááºáž-
- ááá¬ážááẠTON ááá¯ááŸá±á¬ááºááŸá¯-
- ááá°áá®áá±á¬ááááºáá±á¬ááºážáá»á¬ážá¡ááœááºááá¬ážáááºááá¯ááºáá¶á¡áááº-
- á€áá±á¬ááºážáá«ážá០á áááºáááºáááá¯áẠááá¯ááŸá±á¬ááºááŸá¯-
- á áááºá á¬áá»á¯áẠáááºááá¯ááºááá¯á· ááá·áºááº-
- FunC á¡ááœáẠVisual Studio Code ááá¯ážáá»á²á·ááá¯ááŸá±á¬ááºááŸá¯
- áááá¡ááá·áºááŸá¬ áá¬ážáááºááá¯á· á¡áá»á¬ážááŒá®áž á¡áá±á¬ááºá¡áá°ááŒá áºá á±áá²á· Telegram ááŸá¬ TON á¡ááŒá±á¬ááºáž chat áá«á TON á¡ááœáẠáá áºáá¯áᯠáá±ážáá²á·áá°ááá¯ááºáž ááŸáááẠááá¯á· ááŒá±á¬ááẠááŸá¬ážááẠááááºáá«áá°ážá á¡á²áá®á·ááŸá¬ á ááºážáááºááááºááá¯áááºáž áá±á¬ááºážááá¯ááºáá«áááºá
- á¡áá¯á¶ážáááºáá±á¬á¡áá»ááºá¡áááºáá»á¬ážááᯠáá»áœááºá¯ááºááœá±á·ááŸááá²á·áá±á¬ TON á¡ááŒá±á¬ááºáž áá±á¬ááºáááºáá»ááºáá áºáá¯
- ááŒáá¯ááºááœá²ááááá¡ááá·áº
- ááŒáá¯ááºááœá²ááá¯áááá¡ááá·áº
source: www.habr.com
