TON ááœáẠá áááºáá»ááá·áº á á¬áá»á¯ááºááᯠáááºááá¯á·áá±ážáááºáááºáž
áá®áá±á¬ááºážáá«ážá áá¬á¡ááŒá±á¬ááºážáá²á
áá±á¬ááºážáá«ážááœáẠTelegram blockchain ááŒáá¯ááºááá¯ááºááŸá¯ááœáẠááááá¯á¶áž (ááŸá áºáá¯) ááœáẠáá»áœááºá¯ááºáá«áááºáá²á·áá¯á¶á¡ááŒá±á¬ááºážááŒá±á¬áááºááŒá áºááŒá®áž áá¯ááááŸááá²á·áá² áá±á·áá»á±á¬ááºááŒááºážááá¯á·ááá°ážááá¯ááºá¡á±á¬áẠáá±á¬ááºážáá«ážáá áºáá¯ááºááœáẠáá»áœááºá¯ááºáá¡ááœá±á·á¡ááŒá¯á¶ááᯠááŸááºáááºážáááºááẠáá¯á¶ážááŒááºáá²á·ááŒá®áž ááŒá áºáá±á¬ááºážááŒá áºááá¯ááºáááºáá áá áºá á¯á¶áá áºáá±á¬ááºá
á ááá¹áááá¯ááºááᯠááá±ážáá»ááºáá±á¬áºáááºáž á¡áá¯ááºáá áºáá¯áá¯áá¯ááºáááºá áá±á¬ááºážáá«ážá¡ááœáẠá¡áááºá¡áááºááá¯ááŸá±á¬ááºááŸá¯ááá¯á¶ážáá² TON áá¶á០á áááºá á¬áá»á¯ááºáá±áá¬ááᯠááá¯ááºááá¯ááºááŒáááá·áº áá±á¬ááºážáá«ážá¡ááœáẠá áááºáá»áá±á¬á á¬áá»á¯ááºááŸáá·áº TON áá¶á០á áááºá á¬áá»á¯ááºáá±áá¬ááᯠááŒáááá·áº áááºááá¯ááºáá áºáᯠáá±ážáá²á·áááºá
TON ááœáẠáááºážááá¯á·á ááááá¯á¶ážáá±á¬ á áááºá á¬áá»á¯ááºááᯠááŒá¯áá¯ááºááá¯áá°áá»á¬ážá¡ááœáẠáá±á¬ááºážáá«ážááẠá¡áá¯á¶ážáááºáááá·áºáááºá ááá¯á·áá±á¬áº áááºááá·áºáá±áá¬ááœáẠá áááºááááºááᯠááááá«á
áá¶á ááºážáá²ááᯠááá°áá¬á¡ááŒá Ạá¡áá¯á¶ážááŒá¯á áááºáááºážáá»ááºááᯠááá·áºááœááºážááŒááºážá០á áááºáááºáááá¯ááºáá áºáᯠáá¯ááºáá±ááŒááºážá áááºážááŸáá·áº á¡ááŒááºá¡ááŸáẠáááºááœááºááŒááºážá áá±áá¬áááºáá¶ááŒááºážááŸáá·áº áá¯ááºáá±ááŒááºážá¡ááœáẠáááºááá¯ááºáá áºáᯠáá±ážáá¬ážááŒááºážá¡áá áá¯ááºáá±á¬ááºááœá¬ážáá«áááºá
ááŒáá¯ááºááœá²ááœááºáá«áááºááŒááºážá¡ááŒá±á¬ááºáž
ááŒá®ážáá²á·ááá·áºá¡á±á¬ááºááá¯áá¬áááœáẠTelegram áááºáá¬áá¬á
áá¬ážá¡áá
áºáá»á¬ážááŒáá·áº blockchain ááŸááºááŒáá¯ááºááŸá¯ááá¯ááŒá±ááŒá¬áá²á·áááºá Fift
О FunC
. á¡ááá¯ááŒá¯áá¬ážáá±á¬ á
áááºá
á¬áá»á¯ááºáá«ážáá¯áá²á០áá
áºáá¯áá¯ááᯠáá±ážáá¬ážááŒááºážá០ááœá±ážáá»ááºááẠááá¯á¡ááºáá«áááºá á¡áá¬áááºááŸá¬ áááŒá¬ážáá¬ááŸáá±ážá
áᬠáááá¯áá±á¬á·áááºáá±á¬áẠááœá²ááŒá¬ážáá²á· áá
áºáá¯áá¯ááᯠáá¯ááºááá¯á·á áá¬áá¬á
áá¬ážáá
áºáᯠáááºáá°ááŒá®áž áá
áºáá¯áá¯áá¯ááºááẠáá±á¬ááºážáááºáááºáááºá ááá¯á·á¡ááŒáẠáá±á«ááºážá
ááºááẠáá«ážá
ááºáá»á¬ážááœáẠá¡ááŒá²ááá¯ááᯠááŸááá±áááºá
á áááºáááºáááá¯ááºáá»á¬áž áá±ážááœá²áá¬ááœáẠá¡ááœá±á·á¡ááŒá¯á¶áááŸááᯠááá¯ááá»áá¯ážáááºáá«áááºá
áá»áœááºáá±á¬áº áááºááá¯ááºááá±á¬áẠá¡áá¯á¶ážá¡áá áá«áááºááŒá®áž ááŒááºáááºáá¯á¶ážáááºáá»áẠáá±á¬ááºážáá«ážáá±ážááá¯á· á
á®á
ááºáá²á·áá±ááá·áº ááááá
áºáá¯ááºááŸá¬ áá»ááºáá»ááºáž áá¡á±á¬ááºááŒááºáá²á·áá«áá°ážá áá« FunC
áá±áá¯áá»á¡á¬ážááŒáá·áº á¡áá¯ááºáá¯ááºáááºá á¡ááŒá±áá¶á¡ááŒá
áºáá°áá²á·áááºá
á¡á²áá®áá¯ááºážááá±á¬á· áá®áá¬á á¡áááºážáá¯á¶áž áá¯áá±áá¬áá áºáá¯áá°ááá¯á· áá±áá»á¬áá±á«áẠáá¯á¶áá±á¬ááºáá±ááŒá®ááá¯á· áááºáá«áááºá ááááºá¡áá±áá²á· áá«áááºáá° 40 ááŸá¬ 60 áá±á¬ááºá áá¯ááá²á·ááŒá®áž áá»áá±á¬áºáááºáž ááá«áááºáá«áá°ážá áá±áá°áá»á¡á¬ážááŒáá·áºá á€á¡áá¬ááŸáá·áº áááºáááºá á¡ááŸá¬ážá¡ááœááºážáááŸááá±á¬áºáááºáž áá áºáá»ááºá áá»áœááºá¯ááºááᯠá áááºá¡ááŸá±á¬áá·áºá¡ááŸááºááŒá áºá á±áááºá ááááºáá»á¬ážááŒá±ááŒá¬áá»áááºááœááºá áá»áœááºá¯ááºáá á¬áá»á¯ááºá¡ááœáẠá á áºáá±ážááŸá¯á¡á¬áž ááŒááºáááºáá¯á¶ážáááºááŒááºáž áááŒá¯áá¯ááºááá±ážáá«á áááŸááá±á¬ á¡ááŒá¬ážáááºáá°áá»áŸ ááŸááááŸá áá»ááºááœáẠáá«áááºáá°áá»á¬ážá¡á¬áž áá±ážááŒááºážáá²á·áá«áááºá
áá»áœááºá¯ááºááááºáá±á·áá»áºáá»á¬ážááᯠá¡á¬áá¯á¶á áá¯ááºáá±áá¯á¶áááŒá®áž ááŸá áºáááºá¡ááŒá¬ááœáẠááá¬ážáá°ááŒá®ážáá»á¬ážá ááŸááºáá»ááºáá áºáá¯áá¯ááºááŒááºáá²á·ááŒá®áž ááá¬ážáá°ááŒá®ážáá»á¬ážá áá»áœááºá¯ááºáá áááºá á¬áá»á¯ááºááᯠááá±á¬áºáá ááœá²áá»á±á¬áºááœá¬ážááŒááºážááŸááááŸá áá¬ážááááºáá±ážááẠááá¯á·ááá¯áẠááŸááºáá»ááºáá±ážáááºáááá¯áá±á¬ááºá¡á±á¬áẠááá¯ážááœá¬ážáááºáᯠááá¯ážááá¯ážááŸááºážááŸááºážáááºááŒááºáá±áá«áááºá á á¬áá»ááºááŸá¬áá±á«áºááœáẠáá±ážááœááºážáá áºáá¯áá±ážáá²á·áá±á¬áºáááºáž á¡ááŒá±áááá²á·áá«á ááá¬ážá á®áááºáá°ááŸá¬ áá»áŸáá¯á·ááŸááºáá»ááºááá¯ááºáá±á¬áºáááºáž ááá¯ááºáá±ážááá¯ááºáá¬á á¬ááá¯áá»á¬ážáá±ážááẠáááá¯á¡ááºáᯠáá»áœááºáá±á¬áºáá°ááá«áááºá
áá¬ážáááºááŸá¯ á¡ááœáẠá¡áá»áááºáá»á¬ážá áœá¬ áá¯ááºáá¯á¶ážáá²á·áááŒáá·áº áá±á¬ááºážáá«ážáá áºáá¯ááºáá±ážááẠáá¯á¶ážááŒááºáá²á·áááºá á¡áá»ááºá¡áááºááœá± á¡áá»á¬ážááŒá®ážáááŸááá±ážáá²á·á¡ááœáẠáá®áá±á¬ááºážáá«ážá á áááºáááºá á¬ážáá°ááá¯ááºážá¡ááœáẠá¡áá»áááºáá¯ááºáááºáá¬á á±ááŸá¬áá«á
TON ááœáẠá áááºá á¬áá»á¯ááºáá»á¬ážá ááá±á¬ááá¬áž
áááºáá¬ááŸááá±ážáááºá áá®á¡ááŒá±á¬ááºážá¡áá¬ááᯠáááºáááºááᯠáá»ááºážáááºáááá²ááá¯áᬠá¡ááŒá±ááŸá¬ááá¯á· ááá¯áá«áááºá ááá¯á·ááŒá±á¬áá·áºá ááá¯áá»áœááºá¯ááºáááºááá·áºá¡á¬ážá áá áºááœááºáááºááá·áºá¡á áááºá¡ááá¯ááºážáá»á¬ážáá« á ááºáááºááá¯ááŒá±á¬ááŒáá«áááºá ááá¯áááááá»áá»ááŒá±á¬áááẠá¡áááºážáá¯á¶áž á¡áá¯ááºááá±á¬áá°á á¬áá»á¯ááºááᯠáá±ážááá¯ááºááá¯á· áááºá¡ááá¯ááºážááœá± áááá¬ážááá¯á· ááá¯áá²á
áá»áœááºá¯ááºááá¯á·ááẠá
áááºáá»áá±á¬ á
á¬áá»á¯ááºáá
áºáá¯ááᯠáá±ážáá¬ážááŒá®áž áááºááœá²áá¯ááºáá±á¬ááºááẠá¡á¬áá¯á¶á
áá¯ááºáá«áááºá 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.json
TON ááá¯á· áŠážá áœá¬áá±á¬ááºážááá¯ááŸá¯áá»á¬áž ááŒá¯áá¯ááºáá²á·áááºá
áá² á
ááá¯ááºááŒáá¡á±á¬áẠ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 ááᯠrun ááá¯ááºáá«áááºá 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 parameters
last пПлÑÑÐ°ÐµÑ Ð¿ÐŸÑлеЎМОй ÑПзЎаММÑй блПк Ñ ÑеÑвеÑа.
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 ááá¯ááºááá¯ááºááœááºá áááºááá·áºá
á¬áá»á¯ááºááẠáá»áœááºá¯ááºááá¯á·áá¡áá¬ááá¯áááᯠáááºááœáŸááºážááá·áºá¡áá»áááºááŒá
áºáááºá ááŸá
áºáá¯áá¯á¶ážááœááºá áááºááẠáá¯ááºáá±á¬ááºáá»ááºááá¯á· áá±á¬ááºáá»á¬ážááᯠááŒááºáááºážááá¯ááºáááºá
áá¯ááºáá±ááá¯ááºáá»áŸáẠá¡áá¯ááºááŒá áºááá·áº ááá¯ážááŸááºážáá±á¬ á¥ááá¬áá áºáá¯ááŒáá·áº á áááºááŒáá«á áá¯á·á ááá¯á·áá±á¬áº áááºážááœáẠáá¯ááºáá±á¬ááºááá¯ááºá áœááºáž áááºáááŸááá«á
() 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 ááá¯ááœáá·áºáá«á 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
áááá¯ááááºááẠá¡ááŸá¬ážá¡ááœááºážáááŸááá² áááºáááºáá±ááá·áºááŒá®áž á¡ááœááºááœáẠáá¯ááºáá±á¬ááºáá»ááºááŸááºáááºážááᯠáá»áœááºá¯ááºááá¯á·ááŒááºááá«áááº-
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
ááá¬áá²á·áá¯ááºááᯠáá±á¬áºáá®áá°ážááá¯ááºáá«á 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
.
á
á¯á
ááºážáá¬ážáá±á¬ááá¯ááºááᯠááá¯ážááŸááºážá
áœá¬ ááœá¬ážá
á±ááá·áº 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
ááá¯á
á
áºáá±ážáááºá áááẠ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
á
á¬áá±ážááœá²áá»á¬ážá¡áá¯ááºáá¯ááºááŒá±á¬ááºážáá±áá»á¬á
á±ááẠáááºážááᯠrun áá«á
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
á¡á²áá®ááŸá¬ áá®ážááá·áºáá±á¬á·ááᯠáá±ážáá«á
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
.
áá»áœááºá¯ááºááá¯á·ááẠá¡áá»á¬ážáá°ááŸá¬áá±á¬á·ááᯠstack ááŸáááºááŸá¬ážááŒá®áž ááá¯á¡ááºáá±á¬á¡áá«ááœáẠáááºážááᯠáá®ážááá·áºáá áºáá¯á០ááá°ááá¯ááºáá«áááºá
ááᯠáá»áœááºá¯ááºááá¯á·ááẠáááºááŸááºá¡áááºááŒá¯áá»ááºááᯠáá±ážáááºááá¯á¡ááºáá«áááºá á
ááºážáááºááŸá¯ááŒáá·áºá
ááŒáá«á
áá¯á·á áá¯ááºáá±á¬ááºáá»ááºááᯠá¡áá¯á¶ážááŒá¯á ááá¯ááºá០áá®ážááá·áºáá±á¬á·ááᯠáŠážá
áœá¬áááºáá«á 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));
áááºááá¯ááºáᬠáááááááº
á á¬áá±ážááœá²ááœá±ááŒá±ááŒá®áž áá¯áááá á¬áá±ážááœá² áá»ááŸá¯á¶ážáá¬ááᯠááŒáá·áºáá¡á±á¬ááºá á¡ááŒá±á¬ááºážááŸá áºáááºááŒá±á¬áá·áºá áááºáá±á·áá»áºááœáẠáá¯á¶áá±á¬ááºáá±á¬ bits áá»á¬ážáááŸáááá·áºá¡ááŒáẠááá¯ááŸá±á¬ááºááŸá¯ááœáẠáá áºáá»á¬ážááá¯á¶áá±á¬ááºáá±á¬ááŒá±á¬áá·áº ááœá²ááŒááºážá áááºááŒá¬ááá·áºá¡áá« áá¯ááºáá»ááºááœá¬ážáááºá áá»áœááºá¯ááºááá¯á·áá±ážááá¯á·áá±ááá·áº áááºáá±á·áá»áºááœáẠáááºááŸááºáá áºáá¯ááá·áºáááºááŸáá·áº áá±á¬ááºáá¯á¶ážá ááºážáááºááŸá¯á០ááá¯ááŸá±á¬ááºáááºážááᯠáá°ážáá°ááẠááá¯á¡ááºáááºá
áá¯áááá
ááºážáááºááŸá¯ááœááºá áá»áœááºá¯ááºááá¯á·ááẠáááºáá±á·áá»áºáááºááŸááºááᯠáá±á«ááºážááá·áºáᬠá
áááºá
á¬áá»á¯ááºááá¯ááŸá±á¬ááºááŸá¯ááᯠááŒá±á¬ááºážáá²áá«áááºá
á¡ááŒá¬ážáá°áááá¯ááºáá±ážááá¯ááºáá¬áá±á¬á·ááŒáá·áº áááºááŸááºááá¯ážáá¬ážáá±á¬ áááºáá±á·áá»áºááᯠáá±ážááá¯á·ááá·áº á
áá¯áá¹áá
ááºážáááºááŸá¯áá
áºáá¯ááᯠáá±ážááŒáá«á
áá¯á·á áá±á¬ááºááẠáá®ážááá·áºáá±á¬á·áá
áºáá¯ááᯠáááºáá®ážááŒá®áž ááá¯ááºáá
áºáá¯ááœáẠááááºážáááºážááŒáá«á
áá¯á· 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 !
á
ááºážáááºááŸá¯ááœáẠsmartcontract storage ááᯠáááºáá²á·ááá¯á· áááºáá¯ááºáá¬ážáááºááᯠáááºááœá±á·ááá¯ááºáááºá storage
Fift ááœáẠFift documentation ááœáẠvariable áá»á¬ážááᯠDeserialization ááœááºáá±á¬áºááŒáá¬ážáááºá
á ááºážáá¯á¶ážááŒáá·áºáá¡á±á¬ááºá áá¡á±á¬ááºááŒááºáá°ážáá¬ážá á¡áᯠáá®ááá¯ááºááŸááºáá²á· ááááºá á¬ááᯠááŒá±á¬ááºážááá¯á· áá¯áá¹áááá±áááᯠááá·áºááŒáá·áºáá¡á±á¬ááºá
á
áááºá
á¬áá»á¯ááºááœáẠáá»áœááºá¯ááºááá¯á· áááºááẠááœá²ááŒááºážá
áááºááŒá¬áááºá message
á áááºáááºáá«á action
. áá«ááá¯á·ááŸá
áºáá±á¬ááºááŸáááẠááá¯á· ááááá±ážáá«áá
á± action
: ááááºá
á¬ááŒá±á¬ááºážááŒá®áž ááááºááá¯á·áá«á
ááá¯á·áá±á¬áẠá
á¬áá»á¯ááºááá¯ááºááŸááºá ááááºá
á¬á¡áá
áºááᯠáááºááŒá®áž ááá¯ááŸá±á¬ááºááŸá¯ááœáẠááááºážáááºážáá«áááºá
áá»áœááºá¯ááºááá¯á·ááẠá
á
áºáá±ážááŸá¯áá»á¬ážááᯠáá¯ááºáá±á¬ááºááŒá®áž ááááá¡ááŒááẠá
á¬áá±ážááœá² áá»ááŸá¯á¶ážáááºááᯠááŒááºááœá±á·ááááºá ááᯠá
á¬áá»á¯ááºááẠá
ááºážáááºááŸá¯ááœáẠáá»á±á¬ááºáá¯á¶ážáá±ááá·áº áááºáá±á·áá»áºá០7 bits áá»á¬ážááᯠáááºáá¶ááœá²ááŒááºážá
áááºááŒá¬áá±ážááá·áºá¡ááœáẠáá»ááºááœá¬ážáá«áááºá áááºáá±á·áá»áºááœáẠáááá¯ááŸáááá±áá±á¬á¡áá¬ááᯠááá·áºáá«á action
. á
á¬áá±ážááœá²ááœá±ááŒá±ááŒá®áž á¡á¬ážáá¯á¶ážá¡á±á¬ááºááŒááºááœá¬ážáá¬ááᯠááŒáá·áºááŒáá¡á±á¬ááºá
ááᯠááááºááááºážáááºážáá¬ážááá·áº ááááºá á¬ááá¯á· áááºááŸááºáá¬ážáá±á¬ ááááºá¡áá±á¡ááœááºááᯠáá±ážááá¯á·ááŒááºážá¡ááœáẠáá¯áá¹áááá±áááᯠáá±ážááŒáá«á áá¯á·á
á¡áááºáá¯á¶áž á
á¬áá±ážááœá²áá
áºáá¯áá±ážááŒáá·áºáá¡á±á¬ááºá áááºáá»ááºááá¯á¶áá±á¬ááºáá±á¬á¡áá«á áá¯ááááá
áºáá¯ááẠá¡áá¬á¡á¬ážáá¯á¶ážá¡á±á¬ááºááŒááºá
áœá¬áá»á±á¬áºááŒááºááá±á¬á¡áá«ááœáẠá
á¬áá±ážááœá²ááŸá
áºáá¯ááᯠáá±ážáá«áááºá á
ááºážáááºááŸá¯áá»á¬ážááᯠááŒáá·áºááŸá¯ááá¯ááºáá«áááºá
á¡áᯠáá¯ááºááá·áºááá¯ááºáá¡á±á¬ááºá ááááŠážá áœá¬ helper method ááŸá áºáá¯ááá¯áá±ážááŒáá·áºáá¡á±á¬ááºá ááááá¯á¶ážáááŸáááá·áºáááºážáááºážááŸá¬ á áááºá á¬áá»á¯ááºáá áºáá¯á áááºááŸááááºáá»ááºááœá±ááᯠááŸá¬ááœá±áááºááŒá áºáááºá
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()
.
á¡áá¯áá² á¡ááœááºážá á¬ááœá±áá® áááºááœá¬ážáá¡á±á¬ááºá á¡ááŸááºááŸá¬á áá»áœááºá¯ááºááá¯á·ááẠááááºááá¯áᬠáááºáá¶ááŒá®áž áá°á¡ááá¯ááºááá«á áá á¬ážááá¬ážáᶠááá¬á ááŸá áºáááŸáá·áº ááŸá¯á¶ážáá«á ááá¯ááºááŸááºáᶠáá¯á¶ážáá¯á¶áá áºáá¯á¶ ááŒááºááá¯á·áá±ážáá«áááºá
á¡áááºáá¯á¶áž ááá¯ážááŸááºážáá²á· á ááºážáááºááŸá¯áá áºáᯠáá±ážááŒáá·áºáá¡á±á¬ááºá ááá¯ááá¯á·áá¯ááºáá±á¬ááºáááºá áá»áœááºá¯ááºááá¯á·ááẠá áááºáááºáááá¯ááºááá¯á· ááááºáá±ážááá¯á·áááºáᯠáá°áááá±á¬ á áááºá á¬áá»á¯ááºá á ááºážáááºááááºá á¬áá áºáᯠááá¯á¡ááºáá«áááºá
á áááºá á¬áá»á¯ááºááááºá á¬ááœáẠáá¶áá«ááºááŸá áºáá¯á workchain á¡ááœáẠáá¬áááºááŸááá±á¬ 32-áá ẠááááºážááŒáá·áºááŸáá·áº á€áá¯ááºáááºážááœááºážáááºááŸá 256-bit á¡áá¯ááºááá¹ááá¬ááá¯ááºáá±á¬ ááááºážááŒáá·áºáá®ážááá·áºá¡áá±á¬áá·áºáá¶áá«ááºááá¯á· áá«áááºáááºá á¥ááᬠ-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
function áááºááá¯á¡áá¯ááºáá¯ááºáá²ááá¯áá¬ááá¯ááŒáá·áºááá¯ááºáá¡á±á¬ááºá áá«á Fift á¡áá¯ááºáá¯ááºáá¯á¶ááá¯áá¬ážáááºáá±ážáááá·áºáááºá á¡ááŒááºá¡ááŸááºá¡áá»áá¯ážáááºáá±á¬ááºááŸá¯áá¯ááºááœáẠFift ááá¯ááœáá·áºáá«á
~/TON/build/crypto/fift -i
ááááŠážá áœá¬ áá»áœááºá¯ááºááá¯á·ááẠ-1á 12345 ááŸáá·áº á¡áá¬áááºááá¯áẠ"sender.addr" á¡áááºááᯠstack áá±á«áºááá¯á· ááœááºážááá¯ááºáá«-
-1 12345 "sender.addr"
áá±á¬ááºáá
áºááá·áºááŸá¬ function ááᯠexecute áá¯ááºáá«á -rot
stack áááááºááœááºáá°ážááŒá¬ážáá±á¬á
áááºáááºáááá¯ááºáá¶áá«ááºáá
áºáá¯ááŸááá±áá±á¬áá¯á¶á
á¶ááŒáá·áº stack ááá¯ááŒá±á¬ááºážáá±ážáááº-
"sender.addr" -1 12345
256 u>B
256-bit non-negative integer ááᯠbytes á¡ááŒá
ẠááŒá±á¬ááºážáááºá
"sender.addr" -1 BYTES:0000000000000000000000000000000000000000000000000000000000003039
swap
stack á ááááºáááºážááŒááºá
ááºááŸá
áºáá¯ááᯠáá²ááŸááºáá«á
"sender.addr" BYTES:0000000000000000000000000000000000000000000000000000000000003039 -1
32 i>B
32-bit integer ááᯠbytes á¡ááŒá
ẠááŒá±á¬ááºážáááºá
"sender.addr" BYTES:0000000000000000000000000000000000000000000000000000000000003039 BYTES:FFFFFFFF
B+
bytes á sequences ááŸá
áºáá¯ááᯠáá»áááºáááºáááºá
"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));
}
áá«áá¡á¬ážáá¯á¶ážáá«áá²á
áá»ááºáá¬á¡á¬ážáá¯á¶ážá ááá¯ážááŸááºážáá«áááºá ááŒááºáááá¹áá¬á á á¬áá»á¯ááºá¡ááŒá±á¡áá±áá²á· áááºáááºáá²á· á¡áá»ááºá¡áááºááœá±ááᯠááá°ááá¯ááºááá¯á· (ááááºáá±á¬á· áá°ááá¯á·áá²á· á áááºáááºáááá¯ááºááá¯ááŸá±á¬ááºááŸá¯á០áá±áá¬ááᯠáááºáá«)á
á
áááºá
á¬áá»á¯ááºáá
áºáá¯ááᯠáá¯ááºáá±ááá·áºá¡áá« ááááá¯á¶ážáá±á¬ááºážááá¯ááŸá¯ááᯠáá¯ááºáá±á¬ááºááá·áº áá¯ááºááá¯áááºáž ááá·áºáááºáá±á·ááœá¬ážáá«áááºá
áá±á¬ááºáá
áºááá·áºááŸá¬ á
áááºá
á¬áá»á¯ááºááᯠáá¯ááºááŒááºáááºááŒá
áºáááºá ááá¯ááºááœá²áá
áºáá¯áááºáá®ážááŒáá«á
áá¯á· requests
.
áá¯ááºáá±ááŸá¯áá¯ááºááᯠá¡ááŒá±áá¶á¡áá±áá²á· áá°áá²á·áááºá simple-wallet-code.fc
ááááá¬ážáááá·áº á¡áá¬áá
áºáá¯áá«á áá»áœááºá¯ááºááá¯á·ááẠá
áááºáá»áá±á¬ ááá¯ááŸá±á¬ááºááŸá¯áá
áºáá¯ááŸáá·áº ááá·áºááœááºážááŸá¯áááºáá±á·áá»áºáá
áºáá¯ááᯠáá¯ááºáá±ážáá«áááºá áááºážáá±á¬ááºááœááºá á
áááºá
á¬áá»á¯ááºáááááºá
á¬ááᯠáá¯ááºáá±ážáááºá ááá¯ááá¯áááºááŸá¬ TON ááœááºááá¯ááºááŒááºáá®ááœááºááẠááááºá
á¬ááᯠááááá¯ááºáááºá ááá¯á·áá±á¬ááºá áááºááẠá€ááááºá
á¬ááá¯á· ááááºáá»á¬ážá
áœá¬ áá±ážááá¯á·ááẠááá¯á¡ááºááŒá®áž áááºážá០á
áááºá
á¬áá»á¯ááºááá¯ááºááá¯áẠááá¯ááºáá
áºáᯠáá±ážááá¯á·ááẠááá¯á¡ááºáá«áááºá á
á¬áá»á¯ááºáá»á¬áž)á
ááá¯á·áá±á¬áẠáá»áœááºá¯ááºááá¯á·ááẠáá¯ááºáá±ááŒááºážáá¯ááºááᯠáá¯ááºáá±á¬ááºááŒá®áž ááá°áá«á lottery-query.boc
á
áááºá
á¬áá»á¯ááºááá¯ááºááŸáá·áºááááºá
á¬á
~/TON/build/crypto/fift -s requests/new-lottery.fif 0
áá¯ááºáá¯ááºáá¬ážáá±á¬ááá¯ááºáá»á¬ážááᯠááááºážáááºážááẠááá±á·áá«ááŸáá·áºá lottery-query.boc
, lottery.addr
, lottery.pk
.
á¡ááŒá¬ážá¡áá¬áá»á¬ážáá²ááœááºá á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááŸááºáááºážáá»á¬ážááœáẠá áááºá á¬áá»á¯ááºáááááºá á¬ááᯠááŒááºááœá±á·ááááºááŒá áºáááºá
new wallet address = 0:044910149dbeaf8eadbb2b28722e7d6a2dc6e264ec2f1d9bebd6fb209079bc2a
(Saving address to file lottery.addr)
Non-bounceable address (for init): 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd
Bounceable address (for later access): kQAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8KpFY
á¡áá»á±á¬áºááá±á¬áááºáááºáá²á· TON ááᯠáá±á¬ááºážááá¯ááá¯ááºááŒáá¡á±á¬ááº
$ ./lite-client/lite-client -C ton-lite-client-test1.config.json
getaccount 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd
á€ááááºá á¬áá«áá±á¬ á¡áá±á¬áá·áºááẠááá¬ááŒá áºáá±ááŒá±á¬ááºáž áá»áœááºá¯ááºááá¯á·ááœá±á·ááá«áááºá
account state is empty
ááááºá
á¬ááᯠááá¯á·áá±ážáá«áááºá 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd
2 Gram ááŸáá·áº á
áá¹ááá·áºá¡áááºážáááºááŒá¬ááŒá®ážáá±á¬áẠáá°áá®áá±á¬ command ááᯠáá»áœááºá¯ááºááá¯á· áá¯ááºáá±á¬ááºáá«áááºá ááááºááá¯á·ááá¯á· áá»áœááºáá±á¬áºáá¯á¶ážáááºá
> 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 ááœáẠáá¯ááºáá±áá¬ážáááºá
ááŒáá¯ážá á¬ážáá±áá«áááºá
ááᯠááŒáá·áºáááºážáááºá¡ááœáẠááá¯áá±áá¬ááá¯á· ááááºááá¯á·ááẠááŒáá¯ážá
á¬ážááŒáá«á
áá¯á·
afterword
áá±á¬ááºážáá«ážááẠáá»áœááºáá±á¬áºáá»áŸá±á¬áºááá·áºáá¬ážáááºááẠáá»á¬ážá áœá¬ááŸááºááœá¬ážáááºá ááá¯ááá¯ááá¯ááºááẠááá¯á·ááá¯áẠTON á¡ááŒá±á¬ááºáž áá¬ááŸááááá² áááºáá¶ááŒá±á¬ááá¯ááá¯ááºá áœááºážááŸááá±á¬ ááá¯ážááŸááºážáá±á¬ááá¯ááºáá±á¬ á áááºá á¬áá»á¯ááºáá áºáá¯ááᯠáá±ážáá¬ážáá¯ááºáá±ááá¯áá°á¡ááœááºáᬠááŒá áºááá¯ááºááẠá¡á²áá«á á¡áá»áá¯á·á¡áá¬áá»á¬ážááᯠááá¯áááá¯ážááŸááºážá áœá¬ ááŸááºážááŒááá¯ááºáá±áááºá
á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯á á¡áá»áá¯á·áá±á¬ááá¹ááá»á¬ážááẠááá¯ááá¯áááá±á¬ááºááŒá®áž á¡á¶áááºááœááºáá»ááŒá áºáá±á¬ááºážááŒá áºááá¯ááºáá±á¬áºáááºáž áá±á¬ááºážáá«ážááá¯ááŒááºáááºááẠá¡áá»áááºááá¯áá°ááá±áááºá áá áºáá±áá¬áá¬ááŸá¬ á¡ááŸá¬ážáá¯ááºááááá¯á· áá«ááŸááá¯áẠáá áºáá¯áá¯ááᯠáá¬ážááááºáá²á·áá¬áááºáž ááŒá áºááá¯ááºáááºá áá«ááŒá±á¬áá·áº ááẠáá±ážáááºáá²á· áá áºáá¯áá¯ááᯠáá¯ááºáá±áááºááá¯áááºáá±á¬á· ááá¬ážááẠá á¬ááœááºá á¬áááºáž áá«ááŸááá¯áẠTON áá¯ááºáá«áá²á· ááá¬ážááẠááá¯ááŸá±á¬ááºáá±áá¬ááᯠá¡á¬ážááá¯ážááá¯á· ááá¯áá«áááºá
TON ááá¯ááºááá¯ááºá ááœá¶á·ááŒáá¯ážáá²á¡ááá·áºááœááºááŸááá±áá²ááŒá áºáá±á¬ááŒá±á¬áá·áºá á€áá±á¬ááºážáá«ážáá« á¡ááá·áºáá»á¬ážáá²á០áá áºáá¯áá¯ááᯠáá»áá¯ážáá»ááºááœá¬ážááá·áº á¡ááŒá±á¬ááºážá¡áá²áá»á¬áž ááŒá áºáá±á«áºáá¬ááá¯ááºááẠ(áá»áœááºáá±á¬áºáá±ážáá±á á¥áºá¡áá»áááºá ááŒá áºáá²á·áá±á¬á ááŒá¯ááŒááºáá¬ážááŒá®ážááŒá áºáááº)á ááá¯á·áá±á¬áº áá±áá¯áá»áá»ááºážáááºáá¯á¶ááŸá¬á ááŒá±á¬ááºážáá²ááẠáááŒá áºááá¯ááºáá«á
TON áá²á· á¡áá¬áááºá¡ááŒá±á¬ááºáž áááŒá±á¬áá±á¬á·áá«áá°ážá ááááºáá±á¬ááºážááẠááŒá®ážááŒá®ážáá¬ážáá¬áž áá áºá á¯á¶áá áºáᬠááŒá áºáá¬ááá¯ááºááẠááŒá áºáá±á¬ááºážááŒá áºááá¯ááºáááºá áá»áœááºá¯ááºááá¯á·ááẠáááºážááᯠáá±á·áá¬ááŒá®áž áá»áœááºá¯ááºááá¯á·á áá¯ááºáá¯ááºáá»á¬ážááŸáá·áº áááºáááºáá áºáá¯ááᯠááŒáá·áºááœááºážááá·áºáááºá
TON ááẠááá¯ááŒá®ážáá±á¬ á¡áá¯á¶ážááŒá¯áá° á¡áá¬ážá¡áá¬ááŸáááá·áº Facebook á០Libra áááºáž ááŸááá«áááºá Libra á¡ááŒá±á¬ááºáž áá»áœááºáá±á¬áº áá¬á០ááááá«áá°ážá ááá¯áááºá áá¯á¶ážááŒááºáá¬á TON á¡ááá¯ááºážá¡ááá¯ááºážááŸá¬ááẠá¡á²áá®ááŸá¬ ááŸá¯ááºááŸá¬ážááŸá¯á á¡áá»á¬ážááŒá®áž ááá¯áá«áááºá TON á developer áá»á¬ážááŸáá·áº community ááẠunderground ááŸáá·áº ááá¯áá°áá±á¬áºáááºážá áááºážááẠá¡á±ážááŒáááºá
ááá¯ážáá¬áž
- ááá¬ážááẠTON á
á¬ááœááºá
á¬áááºáž-
https://test.ton.org - ááá¬ážááẠTON ááá¯ááŸá±á¬ááºááŸá¯-
https://github.com/ton-blockchain/ton - ááá°áá®áá±á¬ááááºáá±á¬ááºážáá»á¬ážá¡ááœááºááá¬ážáááºááá¯ááºáá¶á¡áááº-
https://wallet.ton.org - á€áá±á¬ááºážáá«ážá០á
áááºáááºáááá¯áẠááá¯ááŸá±á¬ááºááŸá¯-
https://github.com/raiym/astonished - á
áááºá
á¬áá»á¯áẠáááºááá¯ááºááá¯á· ááá·áºááº-
https://ton-lottery.appspot.com - FunC á¡ááœáẠVisual Studio áá¯ááºá¡ááœáẠááá¯ážáá»á²á·ááŸá¯á¡ááœáẠááá¯ááŸá±á¬ááºáá±áá¬
https://github.com/raiym/func-visual-studio-plugin - TON á¡ááŒá±á¬ááºáž áááºáá®ááááºááœáẠáá»ááºáááºáá«á áááºážááᯠáááŠážá¡ááá·áºááœáẠá¡ááŸááºáááẠá¡ááŒá±ááŸá¬ááá¯ááºáá²á·áááºá TON á¡ááœáẠáá
áºáá¯áá¯áá±ážáá²á·áá°ááá¯ááºáž ááŸááá±áááºááá¯á· ááŒá±á¬ááẠááŸá¬ážááẠááááºáá«áá°ážá á¡á²áá®á·ááŸá¬ á
ááºážáááºááááºááá¯áááºáž áá±á¬ááºážááá¯ááºáá«áááºá
https://t.me/tondev_ru - á¡áá¯á¶ážáááºáá±á¬á¡áá»ááºá¡áááºáá»á¬ážááᯠáá»áœááºá¯ááºááœá±á·ááŸááá²á·áá±á¬ TON á¡ááŒá±á¬ááºáž áá±á¬ááºáááºáá»ááºáá
áºáá¯
https://t.me/TONgramDev - ááŒáá¯ááºááœá²ááááá¡ááá·áº
https://contest.com/blockchain - ááŒáá¯ááºááœá²ááá¯áááá¡ááá·áº
https://contest.com/blockchain-2
source: www.habr.com