рд╣реЕрд╕реНрдХреЗрд▓рд╕рд╣ рдлрдирд╕реАрд▓рд╛ рдлрдВрдХреНрд╢рдирд▓рдордзреНрдпреЗ рдмрджрд▓рдгреЗ: рд╕реЗрд░реЛрдХреЗрд▓рдиреЗ рдЯреЗрд▓рд┐рдЧреНрд░рд╛рдо рдмреНрд▓реЙрдХрдЪреЗрди рд╕реНрдкрд░реНрдзрд╛ рдХрд╢реА рдЬрд┐рдВрдХрд▓реА

рддреБрдореНрд╣реА рддреЗ рдЯреЗрд▓рд┐рдЧреНрд░рд╛рдо рдРрдХрд▓реЗ рдЕрд╕реЗрд▓ рдЯрди рдмреНрд▓реЙрдХрдЪреЗрди рдкреНрд▓реЕрдЯрдлреЙрд░реНрдо рд▓реЙрдиреНрдЪ рдХрд░рдгрд╛рд░ рдЖрд╣реЗ. рдкрдг рдХрд╛рд╣реА рд╡реЗрд│рд╛рдкреВрд░реНрд╡реАрдЪреА рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рд╣реА рдмрд╛рддрдореА рддреБрдореНрд╣рд╛рд▓рд╛ рдЪреБрдХрд▓реА рдЕрд╕реЗрд▓ рд╕реНрдкрд░реНрдзреЗрдЪреА рдШреЛрд╖рдгрд╛ рдХреЗрд▓реА рдпрд╛ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдорд╕рд╛рдареА рдПрдХ рдХрд┐рдВрд╡рд╛ рдЕрдзрд┐рдХ рд╕реНрдорд╛рд░реНрдЯ рдХрд░рд╛рд░рд╛рдВрдЪреНрдпрд╛ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрд╕рд╛рдареА.

рд╕реЗрд░реЛрдХреЗрд▓ рд╕рдВрдШ, рдореЛрдареНрдпрд╛ рдмреНрд▓реЙрдХрдЪреЗрди рдкреНрд░рдХрд▓реНрдк рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рд╡реНрдпрд╛рдкрдХ рдЕрдиреБрднрд╡ рдЕрд╕рд▓реЗрд▓рд╛, рдмрд╛рдЬреВрд▓рд╛ рд░рд╛рд╣реВ рд╢рдХрд▓рд╛ рдирд╛рд╣реА. рдЖрдореНрд╣реА рдкрд╛рдЪ рдХрд░реНрдордЪрд╛рд░реНтАНрдпрд╛рдВрдирд╛ рд╕реНрдкрд░реНрдзреЗрд╕рд╛рдареА рдирд┐рдпреБрдХреНрдд рдХреЗрд▓реЗ рдЖрдгрд┐ рджреЛрди рдЖрдард╡рдбреНрдпрд╛рдВрдирдВрддрд░ рддреНрдпрд╛рдВрдиреА рддреНрдпрд╛рдордзреНрдпреЗ (рдЗрди) рдорд╛рдлрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЯреЛрдкрдгрдирд╛рд╡ рд╕реЗрдХреНрд╕реА рдХреЕрдореЗрд▓рд┐рдпрдирдордзреНрдпреЗ рдкреНрд░рдердо рд╕реНрдерд╛рди рдорд┐рд│рд╡рд┐рд▓реЗ. рдпрд╛ рд▓реЗрдЦрд╛рдд рдореА рддреЗ рдХрд╕реЗ рдХреЗрд▓реЗ рдпрд╛рдмрджреНрджрд▓ рдмреЛрд▓реЗрди. рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрд╢рд╛ рдЖрд╣реЗ рдХреА рдкреБрдвреАрд▓ рджрд╣рд╛ рдорд┐рдирд┐рдЯрд╛рдВрдд рддреБрдореНрд╣реА рдХрд┐рдорд╛рди рдПрдХ рдордиреЛрд░рдВрдЬрдХ рдХрдерд╛ рд╡рд╛рдЪрд╛рд▓ рдЖрдгрд┐ рдЬрд╛рд╕реНрддреАрдд рдЬрд╛рд╕реНрдд рддреБрдореНрд╣рд╛рд▓рд╛ рддреНрдпрд╛рдд рдХрд╛рд╣реАрддрд░реА рдЙрдкрдпреБрдХреНрдд рд╕рд╛рдкрдбреЗрд▓ рдЬреЗ рддреБрдореНрд╣реА рддреБрдордЪреНрдпрд╛ рдХрд╛рдорд╛рдд рд▓рд╛рдЧреВ рдХрд░реВ рд╢рдХрддрд╛.

рдкрдг рдереЛрдбреНрдпрд╛ рд╕рдВрджрд░реНрднрд╛рдиреЗ рд╕реБрд░реБрд╡рд╛рдд рдХрд░реВрдпрд╛.

рд╕реНрдкрд░реНрдзрд╛ рдЖрдгрд┐ рддреНрдпрд╛рдЪреНрдпрд╛ рдЕрдЯреА

рддрд░, рд╕рд╣рднрд╛рдЧреАрдВрдЪреА рдореБрдЦреНрдп рдХрд╛рд░реНрдпреЗ рдореНрд╣рдгрдЬреЗ рдПрдХ рдХрд┐рдВрд╡рд╛ рдЕрдзрд┐рдХ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕реНрдорд╛рд░реНрдЯ рдХрд░рд╛рд░рд╛рдВрдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдХрд░рдгреЗ, рддрд╕реЗрдЪ TON рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рд╕реБрдзрд╛рд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рд╕реНрддрд╛рд╡ рддрдпрд╛рд░ рдХрд░рдгреЗ. рд╣реА рд╕реНрдкрд░реНрдзрд╛ 24 рд╕рдкреНрдЯреЗрдВрдмрд░ рддреЗ 15 рдСрдХреНрдЯреЛрдмрд░ рдпрд╛ рдХрд╛рд▓рд╛рд╡рдзреАрдд рдЪрд╛рд▓рд▓реА рдЖрдгрд┐ 15 рдиреЛрд╡реНрд╣реЗрдВрдмрд░рд▓рд╛рдЪ рдирд┐рдХрд╛рд▓ рдЬрд╛рд╣реАрд░ рдЭрд╛рд▓рд╛. рдмрд░рд╛рдЪ рдХрд╛рд│ рд▓рдХреНрд╖рд╛рдд рдШреЗрддрд╛, рдпрд╛ рдХрд╛рд│рд╛рдд рдЯреЗрд▓рд┐рдЧреНрд░рд╛рдордиреЗ рдЯреЗрд▓реАрдЧреНрд░рд╛рдордордзреАрд▓ VoIP рдХреЙрд▓реНрд╕рдЪреНрдпрд╛ рдЧреБрдгрд╡рддреНрддреЗрдЪреА рдЪрд╛рдЪрдгреА рдЖрдгрд┐ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА C++ рдордзреАрд▓ рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдЪреНрдпрд╛ рдбрд┐рдЭрд╛рдЗрди рдЖрдгрд┐ рд╡рд┐рдХрд╛рд╕рд╛рд╡рд░реАрд▓ рд╕реНрдкрд░реНрдзрд╛рдВрдЪреЗ рдирд┐рдХрд╛рд▓ рдЖрдпреЛрдЬрд┐рдд рдХрд░рдгреНрдпрд╛рдд рдЖрдгрд┐ рдЬрд╛рд╣реАрд░ рдХрд░рдгреНрдпрд╛рдд рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗ.

рдЖрдпреЛрдЬрдХрд╛рдВрдиреА рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдпрд╛рджреАрддреВрди рдЖрдореНрд╣реА рджреЛрди рд╕реНрдорд╛рд░реНрдЯ рдХрд░рд╛рд░ рдирд┐рд╡рдбрд▓реЗ. рддреНрдпрд╛рдкреИрдХреА рдПрдХрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА TON рд╕рд╣ рд╡рд┐рддрд░реАрдд рдХреЗрд▓реЗрд▓реА рд╕рд╛рдзрдиреЗ рд╡рд╛рдкрд░рд▓реА рдЖрдгрд┐ рджреБрд╕рд░реЗ рдЖрдордЪреНрдпрд╛ рдЕрднрд┐рдпрдВрддреНрдпрд╛рдВрдиреА рд╡рд┐рд╢реЗрд╖рддрдГ TON рд╕рд╛рдареА рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЖрдгрд┐ Haskell рдордзреНрдпреЗ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдирд╡реАрди рднрд╛рд╖реЗрдд рд▓рд╛рдЧреВ рдХреЗрд▓реЗ.

рдлрдВрдХреНрд╢рдирд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖реЗрдЪреА рдирд┐рд╡рдб рдЕрдкрдШрд╛рддреА рдирд╛рд╣реА. рдЖрдордЪреНрдпрд╛рдордзреНрдпреЗ рдХреЙрд░реНрдкреЛрд░реЗрдЯ рдмреНрд▓реЙрдЧ рдлрдВрдХреНрд╢рдирд▓ рднрд╛рд╖рд╛рдВрдЪреА рдЬрдЯрд┐рд▓рддрд╛ рд╣реА рдПрдХ рдкреНрд░рдЪрдВрдб рдЕрддрд┐рд╢рдпреЛрдХреНрддреА рдХрд╛ рдЖрд╣реЗ рдЕрд╕реЗ рдЖрдореНрд╣рд╛рд▓рд╛ рдХрд╛ рд╡рд╛рдЯрддреЗ рдЖрдгрд┐ рдЖрдореНрд╣реА рддреНрдпрд╛рдВрдирд╛ рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдСрдмреНрдЬреЗрдХреНрдЯ рдУрд░рд┐рдПрдВрдЯреЗрдб рдХрд╛ рдкрд╕рдВрдд рдХрд░рддреЛ рдпрд╛рдмрджреНрджрд▓ рдЖрдореНрд╣реА рдЕрдиреЗрдХрджрд╛ рдмреЛрд▓рддреЛ. рддрд╕реЗ, рддреНрдпрд╛рдд рджреЗрдЦреАрд▓ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ рдпрд╛ рд▓реЗрдЦрд╛рдЪреЗ рдореВрд│.

рдЖрдореНрд╣реА рд╕рд╣рднрд╛рдЧреА рд╣реЛрдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдХрд╛ рдШреЗрддрд▓рд╛?

рдереЛрдбрдХреНрдпрд╛рдд, рдХрд╛рд░рдг рдЖрдордЪреЗ рд╕реНрдкреЗрд╢рд▓рд╛рдпрдЭреЗрд╢рди рдЕ-рдорд╛рдирдХ рдЖрдгрд┐ рдЧреБрдВрддрд╛рдЧреБрдВрддреАрдЪреЗ рдкреНрд░рдХрд▓реНрдк рдЖрд╣реЗрдд рдЬреНрдпрд╛рдВрдирд╛ рд╡рд┐рд╢реЗрд╖ рдХреМрд╢рд▓реНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕рддреЗ рдЖрдгрд┐ рддреЗ рдЖрдпрдЯреА рд╕рдореБрджрд╛рдпрд╛рд╕рд╛рдареА рдмрд░реЗрдЪрджрд╛ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдореВрд▓реНрдпрд╛рдЪреЗ рдЕрд╕рддрд╛рдд. рдЖрдореНрд╣реА рдУрдкрди-рд╕реЛрд░реНрд╕ рдбреЗрд╡реНрд╣рд▓рдкрдореЗрдВрдЯрдЪреЗ рдЬреЛрд░рджрд╛рд░ рд╕рдорд░реНрдерди рдХрд░рддреЛ рдЖрдгрд┐ рддреНрдпрд╛рдЪреНрдпрд╛ рд▓реЛрдХрдкреНрд░рд┐рдпрддреЗрдордзреНрдпреЗ рдЧреБрдВрддрд▓реЗрд▓реЗ рдЖрд╣реЛрдд, рддрд╕реЗрдЪ рд╕рдВрдЧрдгрдХ рд╡рд┐рдЬреНрдЮрд╛рди рдЖрдгрд┐ рдЧрдгрд┐рддрд╛рдЪреНрдпрд╛ рдХреНрд╖реЗрддреНрд░рд╛рддреАрд▓ рдЖрдШрд╛рдбреАрдЪреНрдпрд╛ рд░рд╢рд┐рдпрди рд╡рд┐рджреНрдпрд╛рдкреАрдард╛рдВрдирд╛ рд╕рд╣рдХрд╛рд░реНрдп рдХрд░рддреЛ.

рд╕реНрдкрд░реНрдзреЗрддреАрд▓ рдордиреЛрд░рдВрдЬрдХ рдХрд╛рд░реНрдпреЗ рдЖрдгрд┐ рдЖрдордЪреНрдпрд╛ рдкреНрд░рд┐рдп рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдкреНрд░рдХрд▓реНрдкрд╛рддреАрд▓ рд╕рд╣рднрд╛рдЧ рд╕реНрд╡рддрдГрдордзреНрдпреЗ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдкреНрд░реЗрд░рдгрд╛ рд╣реЛрддреА, рдкрд░рдВрддреБ рдмрдХреНрд╖реАрд╕ рдирд┐рдзреА рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░реЛрддреНрд╕рд╛рд╣рди рдмрдирд▓рд╛. ЁЯЩВ

TON рдмреНрд▓реЙрдХрдЪреЗрди рд╕рдВрд╢реЛрдзрди

рдЖрдореНрд╣реА рдмреНрд▓реЙрдХрдЪреЗрди, рдЖрд░реНрдЯрд┐рдлрд┐рд╢рд┐рдпрд▓ рдЗрдВрдЯреЗрд▓рд┐рдЬрдиреНрд╕ рдЖрдгрд┐ рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧрдордзреАрд▓ рдирд╡реАрди рдШрдбрд╛рдореЛрдбреАрдВрдЪреЗ рдмрд╛рд░рдХрд╛рдИрдиреЗ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддреЛ рдЖрдгрд┐ рдЖрдореНрд╣реА рдЬреНрдпрд╛ рдХреНрд╖реЗрддреНрд░рд╛рдд рдХрд╛рдо рдХрд░рддреЛ рддреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░рд╛рдд рдПрдХрд╣реА рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рд░рд┐рд▓реАрдЭ рди рдЪреБрдХрд╡рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рддреЛ. рддреНрдпрд╛рдореБрд│реЗ, рд╕реНрдкрд░реНрдзрд╛ рд╕реБрд░реВ рд╣реЛрдИрдкрд░реНрдпрдВрдд, рдЖрдордЪрд╛ рд╕рдВрдШ рдЖрдзреАрдЪ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдХрд▓реНрдкрдирд╛рдВрд╢реА рдкрд░рд┐рдЪрд┐рдд рд╣реЛрддрд╛ TON рдкрд╛рдВрдврд░рд╛ рдХрд╛рдЧрдж. рддрдерд╛рдкрд┐, TON рд╕рд╣ рдХрд╛рдо рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА, рдЖрдореНрд╣реА рддрд╛рдВрддреНрд░рд┐рдХ рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг рдЖрдгрд┐ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдордЪреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрддреНрд░реЛрдд рдХреЛрдбрдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗрд▓реЗ рдирд╛рд╣реА, рдореНрд╣рдгреВрди рдкрд╣рд┐рд▓реА рдкрд╛рдпрд░реА рдЕрдЧрджреА рд╕реНрдкрд╖реНрдЯ рд╣реЛрддреА - рдЕрдзрд┐рдХреГрдд рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдгрд╛рдЪрд╛ рд╕рдЦреЛрд▓ рдЕрднреНрдпрд╛рд╕ рд╕рд╛рдЗрдЯ рдЖрдгрд┐ рдордзреНрдпреЗ рдкреНрд░рдХрд▓реНрдк рднрд╛рдВрдбрд╛рд░.

рд╕реНрдкрд░реНрдзрд╛ рд╕реБрд░реВ рд╣реЛрдИрдкрд░реНрдпрдВрдд, рдХреЛрдб рдЖрдзреАрдЪ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЭрд╛рд▓рд╛ рд╣реЛрддрд╛, рддреНрдпрд╛рдореБрд│реЗ рд╡реЗрд│ рд╡рд╛рдЪрд╡рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдПрдХ рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ рдХрд┐рдВрд╡рд╛ рд╕рд╛рд░рд╛рдВрд╢ рд╢реЛрдзрдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрджреНрд╡рд╛рд░реЗ. рджреБрд░реНрджреИрд╡рд╛рдиреЗ, рдпрд╛рдореБрд│реЗ рдХреЛрдгрддреЗрд╣реА рдкрд░рд┐рдгрд╛рдо рдорд┐рд│рд╛рд▓реЗ рдирд╛рд╣реАрдд - рдЙрдмрдВрдЯреВрд╡рд░ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдо рдПрдХрддреНрд░ рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рд╕реВрдЪрдирд╛рдВрд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдЖрдореНрд╣рд╛рд▓рд╛ рдЗрддрд░ рдХреЛрдгрддреАрд╣реА рд╕рд╛рдордЧреНрд░реА рд╕рд╛рдкрдбрд▓реА рдирд╛рд╣реА.

рджрд╕реНрддрдРрд╡рдЬ рд╕реНрд╡рддрдГ рдЪрд╛рдВрдЧрд▓реЗ рд╕рдВрд╢реЛрдзрди рдХреЗрд▓реЗ рд╣реЛрддреЗ, рдкрд░рдВрддреБ рдХрд╛рд╣реА рднрд╛рдЧрд╛рдд рд╡рд╛рдЪрдгреЗ рдХрдареАрдг рд╣реЛрддреЗ. рдмрд░реНтАНрдпрд╛рдЪрджрд╛ рдЖрдореНрд╣рд╛рд▓рд╛ рдард░рд╛рд╡рд┐рдХ рдореБрджреНрджреНрдпрд╛рдВрд╡рд░ рдкрд░рдд рдпрд╛рд╡реЗ рд▓рд╛рдЧрддреЗ рдЖрдгрд┐ рдЕрдореВрд░реНрдд рдХрд▓реНрдкрдирд╛рдВрдЪреНрдпрд╛ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╡рд░реНрдгрдирд╛рдкрд╛рд╕реВрди рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рддрдкрд╢реАрд▓рд╛рдВрд╡рд░ рд╕реНрд╡рд┐рдЪ рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧрддреЗ.

рддрдкрд╢реАрд▓рд╛рдордзреНрдпреЗ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдЪреЗ рддрдкрд╢реАрд▓рд╡рд╛рд░ рд╡рд░реНрдгрди рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдирд╕рд▓реНрдпрд╛рд╕ рддреЗ рд╕реЛрдкреЗ рд╣реЛрдИрд▓. рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрди рддреНрдпрд╛рдЪреНрдпрд╛ рд╕реНрдЯреЕрдХрдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╕реЗ рдХрд░рддреЗ рдпрд╛рдмрджреНрджрд▓рдЪреА рдорд╛рд╣рд┐рддреА рд╡рд┐рдХрд╛рд╕рдХрд╛рдВрдирд╛ рдорджрдд рдХрд░рдгреНрдпрд╛рдкреЗрдХреНрд╖рд╛ TON рдкреНрд▓реЕрдЯрдлреЙрд░реНрдорд╕рд╛рдареА рд╕реНрдорд╛рд░реНрдЯ рдХреЙрдиреНрдЯреНрд░реЕрдХреНрдЯреНрд╕ рддрдпрд╛рд░ рдХрд░рдгрд╛рд▒реНрдпрд╛рдВрдЪреЗ рд▓рдХреНрд╖ рд╡рд┐рдЪрд▓рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдЕрдзрд┐рдХ рд╢рдХреНрдпрддрд╛ рдЕрд╕рддреЗ.

рдирд┐рдХреНрд╕: рдкреНрд░рдХрд▓реНрдк рдПрдХрддреНрд░ рдареЗрд╡рдгреЗ

рд╕реЗрд░реЛрдХреЗрд▓рдордзреНрдпреЗ рдЖрдореНрд╣реА рдореЛрдареЗ рдЪрд╛рд╣рддреЗ рдЖрд╣реЛрдд рдирд┐рдХреНрд╕. рдЖрдореНрд╣реА рдЖрдордЪреЗ рдкреНрд░рдХрд▓реНрдк рддреНрдпрд╛рдЪреНрдпрд╛рд╕рд╣ рдЧреЛрд│рд╛ рдХрд░рддреЛ рдЖрдгрд┐ рддреЗ рд╡рд╛рдкрд░реВрди рддреИрдирд╛рдд рдХрд░рддреЛ рдирд┐рдХреНрд╕рдСрдкреНрд╕, рдЖрдгрд┐ рдЖрдордЪреНрдпрд╛ рд╕рд░реНрд╡ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗ рдирд┐рдХреНрд╕реЛрд╕. рдпрд╛рдмрджреНрджрд▓ рдзрдиреНрдпрд╡рд╛рдж, рдЖрдордЪреНрдпрд╛ рд╕рд░реНрд╡ рдмрд┐рд▓реНрдбреНрд╕ рдкреБрдирд░реБрддреНрдкрд╛рджрдХ рдЖрд╣реЗрдд рдЖрдгрд┐ рдХреЛрдгрддреНрдпрд╛рд╣реА рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдорд╡рд░ рдХрд╛рд░реНрдп рдХрд░рддрд╛рдд рдЬреНрдпрд╛рд╡рд░ Nix рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ.

рдореНрд╣рдгреВрди рдЖрдореНрд╣реА рддрдпрд╛рд░ рдХрд░реВрди рд╕реБрд░реБрд╡рд╛рдд рдХреЗрд▓реА TON рдЕрд╕реЗрдВрдмрд▓реАрд╕рд╛рдареА рдЕрднрд┐рд╡реНрдпрдХреНрддреАрд╕рд╣ рдирд┐рдХреНрд╕ рдЖрдЪреНрдЫрд╛рджрди. рддреНрдпрд╛рдЪреНрдпрд╛ рдорджрддреАрдиреЗ, TON рд╕рдВрдХрд▓рд┐рдд рдХрд░рдгреЗ рд╢рдХреНрдп рддрд┐рддрдХреЗ рд╕реЛрдкреЗ рдЖрд╣реЗ:

$ cd ~/.config/nixpkgs/overlays && git clone https://github.com/serokell/ton.nix
$ cd /path/to/ton/repo && nix-shell
[nix-shell]$ cmakeConfigurePhase && make

рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рд╛ рдХреА рддреБрдореНрд╣рд╛рд▓рд╛ рдХреЛрдгрддреЗрд╣реА рдЕрд╡рд▓рдВрдмрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╛рд╣реА. рддреБрдореНрд╣реА NixOS, Ubuntu рдХрд┐рдВрд╡рд╛ macOS рд╡рд╛рдкрд░рдд рдЕрд╕рд▓рд╛рдд рддрд░реАрд╣реА Nix рдЬрд╛рджреВрдиреЗ рддреБрдордЪреНрдпрд╛рд╕рд╛рдареА рд╕рд░реНрд╡рдХрд╛рд╣реА рдХрд░реЗрд▓.

TON рд╕рд╛рдареА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ

TON рдиреЗрдЯрд╡рд░реНрдХрдордзреАрд▓ рд╕реНрдорд╛рд░реНрдЯ рдХреЙрдиреНрдЯреНрд░реЕрдХреНрдЯ рдХреЛрдб TON рд╡рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрди (TVM) рд╡рд░ рдЪрд╛рд▓рддреЛ. TVM рдЗрддрд░ рдмрд░реНтАНрдпрд╛рдЪ рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрдирдкреЗрдХреНрд╖рд╛ рдЕрдзрд┐рдХ рдХреНрд▓рд┐рд╖реНрдЯ рдЖрд╣реЗ, рдЖрдгрд┐ рддреНрдпрд╛рдд рдЕрддрд┐рд╢рдп рдордиреЛрд░рдВрдЬрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЖрд╣реЗ, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рддреЗ рдХрд╛рд░реНрдп рдХрд░реВ рд╢рдХрддреЗ рд╕рд╛рддрддреНрдп ╨╕ рдбреЗрдЯрд╛рдЪреЗ рджреБрд╡реЗ.

рд╢рд┐рд╡рд╛рдп, TON рдордзреАрд▓ рдореБрд▓рд╛рдВрдиреА рддреАрди рдирд╡реАрди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рддрдпрд╛рд░ рдХреЗрд▓реНрдпрд╛:

рдкрд╛рдЪ рдПрдХ рдпреБрдирд┐рд╡реНрд╣рд░реНрд╕рд▓ рд╕реНрдЯреЕрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдЖрд╣реЗ рдЬреА рд╕рд╛рд░рдЦреА рджрд┐рд╕рддреЗ рдкреБрдвреЗ. рдЯреАрд╡реНрд╣реАрдПрдорд╢реА рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ рд╣реА рддреНрдпрд╛рдЪреА рдЙрддреНрдХреГрд╖реНрдЯ рдХреНрд╖рдорддрд╛ рдЖрд╣реЗ.

FunC рд╕рд╛рд░рдЦреАрдЪ рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдХреЙрдиреНрдЯреНрд░реЕрдХреНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдЖрд╣реЗ C рдЖрдгрд┐ рджреБрд╕рд░реНтАНрдпрд╛ рднрд╛рд╖реЗрдд рд╕рдВрдХрд▓рд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗ - рдлрд┐рдлреНрдЯ рдЕрд╕реЗрдВрдмрд▓рд░.

рдкрд╛рдЪрд╡рд╛ рдЕрд╕реЗрдВрдмрд▓рд░ тАФ TVM рд╕рд╛рдареА рдмрд╛рдпрдирд░реА рдПрдХреНрдЭрд┐рдХреНрдпреБрдЯреЗрдмрд▓ рдХреЛрдб рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкрд╛рдЪ рд▓рд╛рдпрдмреНрд░рд░реА. рдкрд╛рдЪрд╡реНрдпрд╛ рдЕрд╕реЗрдВрдмрд▓рд░рдХрдбреЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдирд╛рд╣реА. рдпрд╛ рдПрдореНрдмреЗрдбреЗрдб рдбреЛрдореЗрди рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХ рд▓рдБрдЧреНрд╡реЗрдЬ (eDSL).

рдЖрдордЪреА рд╕реНрдкрд░реНрдзрд╛ рдХрд╛рд░реНрдп рдХрд░рддреЗ

рд╢реЗрд╡рдЯреА, рдЖрдордЪреНрдпрд╛ рдкреНрд░рдпрддреНрдирд╛рдВрдЪреЗ рдкрд░рд┐рдгрд╛рдо рдкрд╛рд╣рдгреНрдпрд╛рдЪреА рд╡реЗрд│ рдЖрд▓реА рдЖрд╣реЗ.

рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреЗрдореЗрдВрдЯ рдЪреЕрдиреЗрд▓

рдкреЗрдореЗрдВрдЯ рдЪреЕрдиреЗрд▓ рд╣рд╛ рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдХрд░рд╛рд░ рдЖрд╣реЗ рдЬреЛ рджреЛрди рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдирд╛ рдмреНрд▓реЙрдХрдЪреЗрдирдЪреНрдпрд╛ рдмрд╛рд╣реЗрд░ рдкреЗрдореЗрдВрдЯ рдкрд╛рдард╡реВ рджреЗрддреЛ. рдкрд░рд┐рдгрд╛рдореА, рддреБрдореНрд╣реА рдХреЗрд╡рд│ рдкреИрд╕реЗрдЪ рд╡рд╛рдЪрд╡рддрд╛ (рдХреЛрдгрддреЗрд╣реА рдХрдорд┐рд╢рди рдирд╛рд╣реА), рдкрд░рдВрддреБ рд╡реЗрд│ рджреЗрдЦреАрд▓ рд╡рд╛рдЪрд╡рддрд╛ (рдкреБрдвреАрд▓ рдмреНрд▓реЙрдХрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рд╛рд╡реА рд▓рд╛рдЧрдгрд╛рд░ рдирд╛рд╣реА). рджреЗрдпрдХреЗ рдЗрдЪреНрдЫреЗрдиреБрд╕рд╛рд░ рд▓рд╣рд╛рди рдЖрдгрд┐ рдЖрд╡рд╢реНрдпрдХ рддрд┐рддрдХреНрдпрд╛ рд╡реЗрд│рд╛ рдЕрд╕реВ рд╢рдХрддрд╛рдд. рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рдкрдХреНрд╖рд╛рдВрдирд╛ рдПрдХрдореЗрдХрд╛рдВрд╡рд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдареЗрд╡рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА, рдХрд╛рд░рдг рдЕрдВрддрд┐рдо рд╕реЗрдЯрд▓рдореЗрдВрдЯрдЪреА рдирд┐рд╖реНрдкрдХреНрд╖рддрд╛ рд╕реНрдорд╛рд░реНрдЯ рдХрд░рд╛рд░рд╛рджреНрд╡рд╛рд░реЗ рд╣рдореА рджрд┐рд▓реА рдЬрд╛рддреЗ.

рдЖрдореНрд╣рд╛рд▓рд╛ рд╕рдорд╕реНрдпреЗрд╡рд░ рдПрдХ рд╕реЛрдкрд╛ рдЙрдкрд╛рдп рд╕рд╛рдкрдбрд▓рд╛. рджреЛрди рдкрдХреНрд╖ рд╕реНрд╡рд╛рдХреНрд╖рд░реА рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕рдВрджреЗрд╢рд╛рдВрдЪреА рджреЗрд╡рд╛рдгрдШреЗрд╡рд╛рдг рдХрд░реВ рд╢рдХрддрд╛рдд, рдкреНрд░рддреНрдпреЗрдХрд╛рдордзреНрдпреЗ рджреЛрди рдХреНрд░рдорд╛рдВрдХ рдЕрд╕рддрд╛рддтАФрдкреНрд░рддреНрдпреЗрдХ рдкрдХреНрд╖рд╛рдиреЗ рджрд┐рд▓реЗрд▓реА рд╕рдВрдкреВрд░реНрдг рд░рдХреНрдХрдо. рд╣реЗ рджреЛрди рдирдВрдмрд░ рдЬрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛рдд рд╡реЗрдХреНрдЯрд░ рдШрдбреНрдпрд╛рд│ рдкрд╛рд░рдВрдкрд╛рд░рд┐рдХ рд╡рд┐рддрд░рдг рдкреНрд░рдгрд╛рд▓реАрдВрдордзреНрдпреЗ рдЖрдгрд┐ рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдВрд╡рд░ "рдЖрдзреА рдШрдбрд▓реЗ" рдСрд░реНрдбрд░ рд╕реЗрдЯ рдХрд░рд╛. рдпрд╛ рдбреЗрдЯрд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди, рдХрд░рд╛рд░ рдХреЛрдгрддреНрдпрд╛рд╣реА рд╕рдВрднрд╛рд╡реНрдп рд╕рдВрдШрд░реНрд╖рд╛рдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд░рдгреНрдпрд╛рдд рд╕рдХреНрд╖рдо рдЕрд╕реЗрд▓.

рдЦрд░рдВ рддрд░, рд╣реА рдХрд▓реНрдкрдирд╛ рдЕрдВрдорд▓рд╛рдд рдЖрдгрдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдкреБрд░реЗрд╢реА рдЖрд╣реЗ, рдкрд░рдВрддреБ рдЖрдореНрд╣реА рджреЛрдиреНрд╣реА рд╕реЛрдбрд▓реЗ рдХрд╛рд░рдг рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рдЖрдореНрд╣реА рдЕрдзрд┐рдХ рд╕реЛрдпреАрд╕реНрдХрд░ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╡реВ рд╢рдХрддреЛ. рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдЖрдореНрд╣реА рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрджреЗрд╢рд╛рдордзреНрдпреЗ рджреЗрдп рд░рдХреНрдХрдо рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛. рддреНрдпрд╛рд╢рд┐рд╡рд╛рдп, рдЬрд░ рдХрд╛рд╣реА рдХрд╛рд░рдгрд╛рд╕реНрддрд╡ рд╕рдВрджреЗрд╢ рд╣рд░рд╡рд▓рд╛ рдЕрд╕реЗрд▓, рддрд░, рд╕рд░реНрд╡ рд░рдХреНрдХрдо рдЖрдгрд┐ рдЕрдВрддрд┐рдо рдЧрдгрдирд╛ рдмрд░реЛрдмрд░ рдЕрд╕рд▓реА рддрд░реА, рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд▓рд╛ рддреЛрдЯрд╛ рд▓рдХреНрд╖рд╛рдд рдпреЗрдгрд╛рд░ рдирд╛рд╣реА.

рдЖрдордЪреНрдпрд╛ рдХрд▓реНрдкрдиреЗрдЪреА рдЪрд╛рдЪрдгреА рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдЕрд╢рд╛ рд╕реЛрдкреНрдпрд╛ рдЖрдгрд┐ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкреЗрдореЗрдВрдЯ рдЪреЕрдиреЗрд▓ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдЙрджрд╛рд╣рд░рдгреЗ рдкрд╛рд╣рд┐рд▓реА. рдЖрд╢реНрдЪрд░реНрдпрд╛рдЪреА рдЧреЛрд╖реНрдЯ рдореНрд╣рдгрдЬреЗ, рдЖрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд рджреЛрди рд╕рд╛рдкрдбрд▓реЗ:

  1. рд╡рд░реНрдгрди рдПрдХ рд╕рдорд╛рди рджреГрд╖реНрдЯреАрдХреЛрди, рдХреЗрд╡рд│ рджрд┐рд╢рд╛рд╣реАрди рдЪреЕрдиреЗрд▓рдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд.
  2. рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓, рдЬреЗ рдЖрдордЪреНрдпрд╛ рд╕рд╛рд░рдЦреНрдпрд╛рдЪ рдХрд▓реНрдкрдиреЗрдЪреЗ рд╡рд░реНрдгрди рдХрд░рддреЗ, рдкрд░рдВрддреБ рд╕рд╛рдорд╛рдиреНрдп рд╢реБрджреНрдзрддрд╛ рдЖрдгрд┐ рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕ рдирд┐рд░рд╛рдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдпрд╛рд╕рд╛рд░рдЦреЗ рдЕрдиреЗрдХ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рддрдкрд╢реАрд▓ рд╕реНрдкрд╖реНрдЯ рди рдХрд░рддрд╛.

рд╣реЗ рд╕реНрдкрд╖реНрдЯ рдЭрд╛рд▓реЗ рдХреА рдЖрдордЪреНрдпрд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓рдЪреЗ рддрдкрд╢реАрд▓рд╡рд╛рд░ рд╡рд░реНрдгрди рдХрд░рдгреЗ рдЕрд░реНрдердкреВрд░реНрдг рдЖрд╣реЗ, рддреНрдпрд╛рдЪреНрдпрд╛ рд╢реБрджреНрдзрддреЗрдХрдбреЗ рд╡рд┐рд╢реЗрд╖ рд▓рдХреНрд╖ рджреЗрдКрди. рдмрд░реНтАНрдпрд╛рдЪ рдкреБрдирд░рд╛рд╡реГрддреНрддреАрдВрдирдВрддрд░, рддрдкрд╢реАрд▓ рддрдпрд╛рд░ рд╣реЛрддреЗ рдЖрдгрд┐ рдЖрддрд╛ рддреБрдореНрд╣реА рджреЗрдЦреАрд▓ рдХрд░реВ рд╢рдХрддрд╛. рддрд┐рдЪреНрдпрд╛рдХрдбреЗ рдкрд╣рд╛.

рдЖрдореНрд╣реА FunC рдордзреНрдпреЗ рдХрд░рд╛рд░рд╛рдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдХреЗрд▓реА рдЖрдгрд┐ рдЖрдпреЛрдЬрдХрд╛рдВрдЪреНрдпрд╛ рд╢рд┐рдлрд╛рд░рд╕реАрдиреБрд╕рд╛рд░ рдЖрдореНрд╣реА рдЖрдордЪреНрдпрд╛ рдХрд░рд╛рд░рд╛рд╢реА рдкреВрд░реНрдгрдкрдгреЗ рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрдгреНрдпрд╛рд╕рд╛рдареА рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдпреБрдЯрд┐рд▓рд┐рдЯреА рд▓рд┐рд╣рд┐рд▓реА. рдЖрдореНрд╣реА рдЖрдордЪреНрдпрд╛ CLI рд╕рд╛рдареА рдЗрддрд░ рдХреЛрдгрддреАрд╣реА рднрд╛рд╖рд╛ рдирд┐рд╡рдбреВ рд╢рдХрд▓реЛ рдЕрд╕рддреЛ, рдкрд░рдВрддреБ Fit рдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдд рдХрд╕реЗ рдХрд╛рд░реНрдп рдХреЗрд▓реЗ рд╣реЗ рдкрд╛рд╣рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣рд╛рд▓рд╛ рд╕реНрд╡рд╛рд░рд╕реНрдп рд╣реЛрддреЗ.

рдЦрд░реЗ рд╕рд╛рдВрдЧрд╛рдпрдЪреЗ рддрд░, рдлрд┐рдлреНрдЯрд╕реЛрдмрдд рдХрд╛рдо рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рд╡рд┐рдХрд╕рд┐рдд рд╕рд╛рдзрдиреЗ рдЖрдгрд┐ рд▓рд╛рдпрдмреНрд░рд░реА рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд▓реЛрдХрдкреНрд░рд┐рдп рдЖрдгрд┐ рд╕рдХреНрд░рд┐рдпрдкрдгреЗ рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рдгрд╛рд░реНтАНрдпрд╛ рднрд╛рд╖рд╛рдВрдкреЗрдХреНрд╖рд╛ рдпрд╛ рднрд╛рд╖реЗрд▓рд╛ рдкреНрд░рд╛рдзрд╛рдиреНрдп рджреЗрдгреНрдпрд╛рдЪреЗ рдХреЛрдгрддреЗрд╣реА рдЖрдХрд░реНрд╖рдХ рдХрд╛рд░рдг рдЖрдореНрд╣рд╛рд▓рд╛ рджрд┐рд╕рд▓реЗ рдирд╛рд╣реА. рд╕реНрдЯреЕрдХ-рдЖрдзрд╛рд░рд┐рдд рднрд╛рд╖реЗрдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд░рдгреЗ рдЦреВрдк рдЕрдкреНрд░рд┐рдп рдЖрд╣реЗ, рдХрд╛рд░рдг рд╕реНрдЯреЕрдХрд╡рд░ рдХрд╛рдп рдЖрд╣реЗ рд╣реЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╕рддрдд рдЖрдкрд▓реНрдпрд╛ рдбреЛрдХреНрдпрд╛рдд рдареЗрд╡рд╛рд╡реЗ рд▓рд╛рдЧрддреЗ рдЖрдгрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдпрд╛рд╕ рдорджрдд рдХрд░рдд рдирд╛рд╣реА.

рдореНрд╣рдгреВрди, рдЖрдордЪреНрдпрд╛ рдорддреЗ, рдлрд┐рдлреНрдЯрдЪреНрдпрд╛ рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдЪреЗ рдПрдХрдореЗрд╡ рдФрдЪрд┐рддреНрдп рдореНрд╣рдгрдЬреЗ рдлрд┐рдлреНрдЯ рдЕрд╕реЗрдВрдмрд▓рд░рд╕рд╛рдареА рд╣реЛрд╕реНрдЯ рднрд╛рд╖рд╛ рдореНрд╣рдгреВрди рддреНрдпрд╛рдЪреА рднреВрдорд┐рдХрд╛. рдкрд░рдВрддреБ рдпрд╛ рдПрдХрдореЗрд╡ рдЙрджреНрджреЗрд╢рд╛рд╕рд╛рдареА рдирд╡реАрди рд╢реЛрдз рдШреЗрдгреНрдпрд╛рдкреЗрдХреНрд╖рд╛ TVM рдЕрд╕реЗрдВрдмрд▓рд░рд▓рд╛ рдХрд╛рд╣реА рд╡рд┐рджреНрдпрдорд╛рди рднрд╛рд╖реЗрдд рдПрдореНрдмреЗрдб рдХрд░рдгреЗ рдЪрд╛рдВрдЧрд▓реЗ рдирд╛рд╣реА рдХрд╛?

TVM Haskell eDSL

рдЖрддрд╛ рдЖрдордЪреНрдпрд╛ рджреБрд╕рд▒реНрдпрд╛ рд╕реНрдорд╛рд░реНрдЯ рдХрд░рд╛рд░рд╛рдмрджреНрджрд▓ рдмреЛрд▓рдгреНрдпрд╛рдЪреА рд╡реЗрд│ рдЖрд▓реА рдЖрд╣реЗ. рдЖрдореНрд╣реА рдПрдХ рдмрд╣реБ-рд╕реНрд╡рд╛рдХреНрд╖рд░реА рд╡реЙрд▓реЗрдЯ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛, рдкрд░рдВрддреБ FunC рдордзреНрдпреЗ рдЖрдгрдЦреА рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдХрд░рд╛рд░ рд▓рд┐рд╣рд┐рдгреЗ рдЦреВрдк рдХрдВрдЯрд╛рд│рд╡рд╛рдгреЗ рдЕрд╕реЗрд▓. рдЖрдореНрд╣рд╛рд▓рд╛ рдХрд╛рд╣реА рдЪрд╡ рдЬреЛрдбрд╛рдпрдЪреА рд╣реЛрддреА рдЖрдгрд┐ рддреА TVM рд╕рд╛рдареА рдЖрдордЪреА рд╕реНрд╡рддрдГрдЪреА рдЕрд╕реЗрдВрдмрд▓реА рднрд╛рд╖рд╛ рд╣реЛрддреА.

рдлрд┐рдлреНрдЯ рдЕрд╕реЗрдВрдмрд▓рд░ рдкреНрд░рдорд╛рдгреЗ, рдЖрдордЪреА рдирд╡реАрди рднрд╛рд╖рд╛ рдПрдореНрдмреЗрдб рдХреЗрд▓реЗрд▓реА рдЖрд╣реЗ, рдкрд░рдВрддреБ рдЖрдореНрд╣реА рдлрд┐рдлреНрдЯ рдРрд╡рдЬреА рд╣реЕрд╕реНрдХреЗрд▓рд▓рд╛ рд╣реЛрд╕реНрдЯ рдореНрд╣рдгреВрди рдирд┐рд╡рдбрд▓реЗ, рдЬреНрдпрд╛рдореБрд│реЗ рдЖрдореНрд╣рд╛рд▓рд╛ рддреНрдпрд╛рдЪреНрдпрд╛ рдкреНрд░рдЧрдд рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реАрдЪрд╛ рдкреВрд░реНрдг рдлрд╛рдпрджрд╛ рдШреЗрддрд╛ рдпреЗрдИрд▓. рд╕реНрдорд╛рд░реНрдЯ рдХреЙрдиреНрдЯреНрд░реЕрдХреНрдЯрд╕рд╣ рдХрд╛рдо рдХрд░рддрд╛рдирд╛, рдЬрд┐рдереЗ рдЕрдЧрджреА рд▓рд╣рд╛рди рддреНрд░реБрдЯреАрдЪреА рдХрд┐рдВрдордд рдЦреВрдк рдЬрд╛рд╕реНрдд рдЕрд╕реВ рд╢рдХрддреЗ, рдЖрдордЪреНрдпрд╛ рдорддреЗ, рд╕реНрдерд┐рд░ рдЯрд╛рдпрдкрд┐рдВрдЧ рд╣рд╛ рдПрдХ рдореЛрдард╛ рдлрд╛рдпрджрд╛ рдЖрд╣реЗ.

Haskell рдордзреНрдпреЗ рдПрдореНрдмреЗрдб рдХреЗрд▓реЗрд▓рд╛ TVM рдЕрд╕реЗрдВрдмрд▓рд░ рдХрд╕рд╛ рджрд┐рд╕рддреЛ рд╣реЗ рджрд╛рдЦрд╡рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рддреНрдпрд╛рд╡рд░ рдПрдХ рдорд╛рдирдХ рд╡реЙрд▓реЗрдЯ рд▓рд╛рдЧреВ рдХреЗрд▓реЗ. рдпреЗрдереЗ рд▓рдХреНрд╖ рджреЗрдгреНрдпрд╛рд╕рд╛рд░рдЦреНрдпрд╛ рдХрд╛рд╣реА рдЧреЛрд╖реНрдЯреА рдЖрд╣реЗрдд:

  • рдпрд╛ рдХреЙрдиреНрдЯреНрд░реЕрдХреНрдЯрдордзреНрдпреЗ рдПрдХ рдлрдВрдХреНрд╢рди рдЕрд╕рддреЗ, рдкрд░рдВрддреБ рддреБрдореНрд╣реА рддреБрдореНрд╣рд╛рд▓рд╛ рд╣рд╡реЗ рддрд┐рддрдХреЗ рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛. рдЬреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣реА рд╣реЛрд╕реНрдЯ рд▓рдБрдЧреНрд╡реЗрдЬрдордзреНрдпреЗ (рдореНрд╣рдгрдЬреЗ рд╣реЕрд╕реНрдХреЗрд▓) рдирд╡реАрди рдлрдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛, рддреЗрд╡реНрд╣рд╛ рдЖрдордЪреЗ eDSL рддреБрдореНрд╣рд╛рд▓рд╛ рддреЗ TVM рдордзреНрдпреЗ рд╡реЗрдЧрд│реЗ рд░реВрдЯреАрди рдмрдирд╡рд╛рдпрдЪреЗ рдЖрд╣реЗ рдХреА рдХреЙрд▓ рдкреЙрдЗрдВрдЯрд╡рд░ рдлрдХреНрдд рдЗрдирд▓рд╛рдЗрди рдХрд░рд╛рдпрдЪреЗ рдЖрд╣реЗ рд╣реЗ рдирд┐рд╡рдбрдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ.
  • Haskell рдкреНрд░рдорд╛рдгреЗ, рдлрдВрдХреНрд╢рдиреНрд╕рдордзреНрдпреЗ рдЕрд╕реЗ рдкреНрд░рдХрд╛рд░ рдЕрд╕рддрд╛рдд рдЬреЗ рдХрдВрдкрд╛рдЗрд▓рдЪреНрдпрд╛ рд╡реЗрд│реА рддрдкрд╛рд╕рд▓реЗ рдЬрд╛рддрд╛рдд. рдЖрдордЪреНрдпрд╛ eDSL рдордзреНрдпреЗ, рдлрдВрдХреНрд╢рдирдЪрд╛ рдЗрдирдкреБрдЯ рдкреНрд░рдХрд╛рд░ рд╣рд╛ рдлрдВрдХреНрд╢рдирд▓рд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рдЕрд╕рд▓реЗрд▓рд╛ рд╕реНрдЯреЕрдХрдЪрд╛ рдкреНрд░рдХрд╛рд░ рдЖрд╣реЗ рдЖрдгрд┐ рдирд┐рдХрд╛рд▓рд╛рдЪрд╛ рдкреНрд░рдХрд╛рд░ рдХреЙрд▓рдирдВрддрд░ рддрдпрд╛рд░ рд╣реЛрдгрд╛рд░рд╛ рд╕реНрдЯреЕрдХрдЪрд╛ рдкреНрд░рдХрд╛рд░ рдЖрд╣реЗ.
  • рдХреЛрдбрдордзреНрдпреЗ рднрд╛рд╖реНрдпреЗ рдЖрд╣реЗрдд stacktype, рдХреЙрд▓ рдкреЙрдЗрдВрдЯрд╡рд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╕реНрдЯреЕрдХ рдкреНрд░рдХрд╛рд░рд╛рдЪреЗ рд╡рд░реНрдгрди рдХрд░рдгреЗ. рдореВрд│ рд╡реЙрд▓реЗрдЯ рдХреЙрдиреНрдЯреНрд░реЕрдХреНрдЯрдордзреНрдпреЗ рдпрд╛ рдлрдХреНрдд рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рд╣реЛрддреНрдпрд╛, рдкрд░рдВрддреБ рдЖрдордЪреНрдпрд╛ eDSL рдордзреНрдпреЗ рддреНрдпрд╛ рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рдХреЛрдбрдЪрд╛ рднрд╛рдЧ рдЖрд╣реЗрдд рдЖрдгрд┐ рд╕рдВрдХрд▓рд┐рдд рд╡реЗрд│реА рддрдкрд╛рд╕рд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд. рддреЗ рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг рдХрд┐рдВрд╡рд╛ рд╡рд┐рдзрд╛рдиреЗ рдореНрд╣рдгреВрди рдХрд╛рдо рдХрд░реВ рд╢рдХрддрд╛рдд рдЬреЗ рд╡рд┐рдХрд╛рд╕рдХрд╛рд▓рд╛ рдХреЛрдб рдмрджрд▓рд▓реНрдпрд╛рд╕ рдЖрдгрд┐ рд╕реНрдЯреЕрдХ рдкреНрд░рдХрд╛рд░ рдмрджрд▓рд▓реНрдпрд╛рд╕ рд╕рдорд╕реНрдпрд╛ рд╢реЛрдзрдгреНрдпрд╛рдд рдорджрдд рдХрд░рддрд╛рдд. рдЕрд░реНрдерд╛рдд, рдЕрд╢рд╛ рднрд╛рд╖реНрдпрд╛рдВрдЪрд╛ рд░рдирдЯрд╛рдЗрдо рдХрд╛рдордЧрд┐рд░реАрд╡рд░ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдд рдирд╛рд╣реА, рдХрд╛рд░рдг рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕рд╛рдареА рдХреЛрдгрддрд╛рд╣реА TVM рдХреЛрдб рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗрд▓реЗрд▓рд╛ рдирд╛рд╣реА.
  • рд╣реЗ рдЕрджреНрдпрд╛рдк рджреЛрди рдЖрдард╡рдбреНрдпрд╛рдВрдд рд▓рд┐рд╣рд┐рд▓реЗрд▓реЗ рдПрдХ рдирдореБрдирд╛ рдЖрд╣реЗ, рддреНрдпрд╛рдореБрд│реЗ рдкреНрд░рдХрд▓реНрдкрд╛рд╡рд░ рдЕрджреНрдпрд╛рдк рдмрд░реЗрдЪ рдХрд╛рдо рдХрд░рдгреЗ рдмрд╛рдХреА рдЖрд╣реЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рддреБрдореНрд╣реА рдЦрд╛рд▓реАрд▓ рдХреЛрдбрдордзреНрдпреЗ рдкрд╛рд╣рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╡рд░реНрдЧрд╛рдВрдЪреА рд╕рд░реНрд╡ рдЙрджрд╛рд╣рд░рдгреЗ рдЖрдкреЛрдЖрдк рддрдпрд╛рд░ рдХреЗрд▓реА рдЬрд╛рд╡реАрдд.

рдЖрдордЪреНрдпрд╛ eDSL рд╡рд░ рдорд▓реНрдЯреАрд╕рд┐рдЧ рд╡реЙрд▓реЗрдЯрдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдЕрд╕реЗ рджрд┐рд╕рддреЗ:

main :: IO ()
main = putText $ pretty $ declProgram procedures methods
  where
    procedures =
      [ ("recv_external", decl recvExternal)
      , ("recv_internal", decl recvInternal)
      ]
    methods =
      [ ("seqno", declMethod getSeqno)
      ]

data Storage = Storage
  { sCnt :: Word32
  , sPubKey :: PublicKey
  }

instance DecodeSlice Storage where
  type DecodeSliceFields Storage = [PublicKey, Word32]
  decodeFromSliceImpl = do
    decodeFromSliceImpl @Word32
    decodeFromSliceImpl @PublicKey

instance EncodeBuilder Storage where
  encodeToBuilder = do
    encodeToBuilder @Word32
    encodeToBuilder @PublicKey

data WalletError
  = SeqNoMismatch
  | SignatureMismatch
  deriving (Eq, Ord, Show, Generic)

instance Exception WalletError

instance Enum WalletError where
  toEnum 33 = SeqNoMismatch
  toEnum 34 = SignatureMismatch
  toEnum _ = error "Uknown MultiSigError id"

  fromEnum SeqNoMismatch = 33
  fromEnum SignatureMismatch = 34

recvInternal :: '[Slice] :-> '[]
recvInternal = drop

recvExternal :: '[Slice] :-> '[]
recvExternal = do
  decodeFromSlice @Signature
  dup
  preloadFromSlice @Word32
  stacktype @[Word32, Slice, Signature]
  -- cnt cs sign

  pushRoot
  decodeFromCell @Storage
  stacktype @[PublicKey, Word32, Word32, Slice, Signature]
  -- pk cnt' cnt cs sign

  xcpu @1 @2
  stacktype @[Word32, Word32, PublicKey, Word32, Slice, Signature]
  -- cnt cnt' pk cnt cs sign

  equalInt >> throwIfNot SeqNoMismatch

  push @2
  sliceHash
  stacktype @[Hash Slice, PublicKey, Word32, Slice, Signature]
  -- hash pk cnt cs sign

  xc2pu @0 @4 @4
  stacktype @[PublicKey, Signature, Hash Slice, Word32, Slice, PublicKey]
  -- pubk sign hash cnt cs pubk

  chkSignU
  stacktype @[Bool, Word32, Slice, PublicKey]
  -- ? cnt cs pubk

  throwIfNot SignatureMismatch
  accept

  swap
  decodeFromSlice @Word32
  nip

  dup
  srefs @Word8

  pushInt 0
  if IsEq
  then ignore
  else do
    decodeFromSlice @Word8
    decodeFromSlice @(Cell MessageObject)
    stacktype @[Slice, Cell MessageObject, Word8, Word32, PublicKey]
    xchg @2
    sendRawMsg
    stacktype @[Slice, Word32, PublicKey]

  endS
  inc

  encodeToCell @Storage
  popRoot

getSeqno :: '[] :-> '[Word32]
getSeqno = do
  pushRoot
  cToS
  preloadFromSlice @Word32

рдЖрдордЪреНрдпрд╛ eDSL рдЖрдгрд┐ рдмрд╣реБ-рд╕реНрд╡рд╛рдХреНрд╖рд░реА рд╡реЙрд▓реЗрдЯ рдХрд░рд╛рд░рд╛рдЪрд╛ рд╕рдВрдкреВрд░реНрдг рд╕реНрддреНрд░реЛрдд рдХреЛрдб рдпреЗрдереЗ рдЖрдврд│реВ рд╢рдХрддреЛ рд╣реЗ рднрд╛рдВрдбрд╛рд░. рдЖрдгрд┐ рдЕрдзрд┐рдХ рддрдкрд╢реАрд▓рд╡рд╛рд░ рд╕рд╛рдВрдЧрд┐рддрд▓реЗ рдЕрдВрдЧрднреВрдд рднрд╛рд╖рд╛рдВрдмрджреНрджрд▓, рдЖрдордЪреЗ рд╕рд╣рдХрд╛рд░реА рдЬреЙрд░реНрдЬреА рдЕрдЧрд╛рдкреЛрд╡реНрд╣.

рд╕реНрдкрд░реНрдзрд╛ рдЖрдгрд┐ TON рдмрджреНрджрд▓ рдирд┐рд╖реНрдХрд░реНрд╖

рдПрдХреВрдг, рдЖрдордЪреНрдпрд╛ рдХрд╛рдорд╛рд▓рд╛ 380 рддрд╛рд╕ рд▓рд╛рдЧрд▓реЗ (рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг, рдмреИрдардХрд╛ рдЖрдгрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рдХрд╛рд╕рд╛рд╕рд╣ рдкрд░рд┐рдЪрд┐рдд). рд╕реНрдкрд░реНрдзреЗрдЪреНрдпрд╛ рдкреНрд░рдХрд▓реНрдкрд╛рдд рдкрд╛рдЪ рд╡рд┐рдХрд╛рд╕рдХрд╛рдВрдиреА рднрд╛рдЧ рдШреЗрддрд▓рд╛: CTO, рдЯреАрдо рд▓реАрдб, рдмреНрд▓реЙрдХрдЪреЗрди рдкреНрд▓реЕрдЯрдлреЙрд░реНрдо рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдЖрдгрд┐ Haskell рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рдбреЗрд╡реНрд╣рд▓рдкрд░.

рд╣реЕрдХрд╛рдереЙрдирдЪреА рднрд╛рд╡рдирд╛, рдирд┐рдХрд░рд╛рдЪреА рдЯреАрдо рд╡рд░реНрдХ рдЖрдгрд┐ рдирд╡реАрди рддрдВрддреНрд░рдЬреНрдЮрд╛рдирд╛рдЪреНрдпрд╛ рдкреИрд▓реВрдВрдордзреНрдпреЗ рддреНрд╡рд░реАрдд рд╕реНрд╡рддрдГрд▓рд╛ рд╡рд┐рд╕рд░реНрдЬрд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдЕрд╕рд▓реНрдпрд╛рдиреЗ рдЖрдореНрд╣рд╛рд▓рд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдЕрдбрдЪрдгреАрд╢рд┐рд╡рд╛рдп рд╕реНрдкрд░реНрдзреЗрдд рд╕рд╣рднрд╛рдЧреА рд╣реЛрдгреНрдпрд╛рд╕рд╛рдареА рд╕рдВрд╕рд╛рдзрдиреЗ рд╕рд╛рдкрдбрд▓реА. рдорд░реНрдпрд╛рджрд┐рдд рд╕рдВрд╕рд╛рдзрдирд╛рдВрдЪреНрдпрд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдд рдЬрд╛рд╕реНрддреАрдд рдЬрд╛рд╕реНрдд рдкрд░рд┐рдгрд╛рдо рдорд┐рд│рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рдЕрдиреЗрдХ рдирд┐рджреНрд░рд╛рдирд╛рд╢ рд░рд╛рддреНрд░реАрдЪреА рднрд░рдкрд╛рдИ рдЕрдирдореЛрд▓ рдЕрдиреБрднрд╡ рдЖрдгрд┐ рдЙрддреНрдХреГрд╖реНрдЯ рдЖрдард╡рдгреАрдВрджреНрд╡рд╛рд░реЗ рдХреЗрд▓реА рдЬрд╛рддреЗ. рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдЕрд╢рд╛ рдХрд╛рд░реНрдпрд╛рдВрд╡рд░ рдХрд╛рд░реНрдп рдХрд░рдгреЗ рд╣реА рдХрдВрдкрдиреАрдЪреНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪреА рдиреЗрд╣рдореАрдЪ рдЪрд╛рдВрдЧрд▓реА рдЪрд╛рдЪрдгреА рдЕрд╕рддреЗ, рдХрд╛рд░рдг рдЕрдВрддрд░реНрдЧрдд рд╕рдВрдкреНрд░реЗрд╖рдг рдЪрд╛рдВрдЧрд▓реНрдпрд╛ рдкреНрд░рдХрд╛рд░реЗ рдХрд╛рд░реНрдп рдХреЗрд▓реНрдпрд╛рд╢рд┐рд╡рд╛рдп рдЦрд░реЛрдЦрд░ рд╕рднреНрдп рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреЗ рдЕрддреНрдпрдВрдд рдХрдареАрдг рдЖрд╣реЗ.

рдЧрд╛рдгреНрдпрд╛рдЪреЗ рдмреЛрд▓ рдмрд╛рдЬреВрд▓рд╛: TON рдЯреАрдордиреЗ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдХрд╛рдорд╛рдореБрд│реЗ рдЖрдореНрд╣реА рдкреНрд░рднрд╛рд╡рд┐рдд рдЭрд╛рд▓реЛ. рддреНрдпрд╛рдВрдиреА рдПрдХ рдЬрдЯрд┐рд▓, рд╕реБрдВрджрд░ рдЖрдгрд┐ рд╕рд░реНрд╡рд╛рдд рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдореНрд╣рдгрдЬреЗ рдХрд╛рд░реНрдпрд░рдд рдкреНрд░рдгрд╛рд▓реА рддрдпрд╛рд░ рдХреЗрд▓реА. TON рдиреЗ рд╕реНрд╡рддрдГрд▓рд╛ рдореЛрдареНрдпрд╛ рдХреНрд╖рдорддреЗрд╕рд╣ рдПрдХ рд╡реНрдпрд╛рд╕рдкреАрда рдЕрд╕рд▓реНрдпрд╛рдЪреЗ рд╕рд┐рджреНрдз рдХреЗрд▓реЗ рдЖрд╣реЗ. рддрдерд╛рдкрд┐, рдпрд╛ рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдордЪрд╛ рд╡рд┐рдХрд╛рд╕ рд╣реЛрдгреНрдпрд╛рд╕рд╛рдареА, рдмреНрд▓реЙрдХрдЪреЗрди рдкреНрд░рдХрд▓реНрдкрд╛рдВрдордзреНрдпреЗ рддреНрдпрд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рджреГрд╖реНрдЯреАрдиреЗ рдЖрдгрд┐ рд╡рд┐рдХрд╛рд╕ рд╕рд╛рдзрдиреЗ рд╕реБрдзрд╛рд░рдгреНрдпрд╛рдЪреНрдпрд╛ рджреГрд╖реНрдЯреАрдиреЗ рдмрд░реЗрдЪ рдХрд╛рд╣реА рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдЖрддрд╛ рдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪрд╛ рднрд╛рдЧ рдЕрд╕рд▓реНрдпрд╛рдЪрд╛ рдЖрдореНрд╣рд╛рд▓рд╛ рдЕрднрд┐рдорд╛рди рдЖрд╣реЗ.

рд╣рд╛ рд▓реЗрдЦ рд╡рд╛рдЪрд▓реНрдпрд╛рдирдВрддрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдЕрдЬреВрдирд╣реА рдХрд╛рд╣реА рдкреНрд░рд╢реНрди рдЕрд╕рд▓реНрдпрд╛рд╕ рдХрд┐рдВрд╡рд╛ рддреБрдордЪреНрдпрд╛ рд╕рдорд╕реНрдпрд╛рдВрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА TON рдХрд╕реЗ рд╡рд╛рдкрд░рд╛рд╡реЗ рдпрд╛рдмрджреНрджрд▓ рдХрд▓реНрдкрдирд╛ рдЕрд╕рд▓реНрдпрд╛рд╕, рдЖрдореНрд╣рд╛рд▓рд╛ рд▓рд┐рд╣рд╛ - рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрдордЪрд╛ рдЕрдиреБрднрд╡ рд╢реЗрдЕрд░ рдХрд░рдгреНрдпрд╛рдд рдЖрдирдВрдж рд╣реЛрдИрд▓.

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛