рдкрд░рдорд╛рдгреБ рд╕реНрд╡реИрдк рдХреНрдпреЛрдВ рдмреБрд░реЗ рд╣реИрдВ рдФрд░ рдЪреИрдирд▓ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдЙрдирдХреА рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд╛рдВрд╕реНрдЯреЗрдВрдЯрд┐рдиреЛрдкрд▓ рд╣рд╛рд░реНрдб рдлреЛрд░реНрдХ рдореЗрдВ рдХреНрдпрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬреЗрдВ рд╣реБрдИрдВ рдФрд░ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдЧреИрд╕ рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рди рд╣реЛ рддреЛ рдХреНрдпрд╛ рдХрд░реЗрдВред
рдХрд┐рд╕реА рднреА рд╕реБрд░рдХреНрд╖рд╛ рдкреЗрд╢реЗрд╡рд░ рдХреА рдореБрдЦреНрдп рдкреНрд░реЗрд░рдгрд╛ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╕реЗ рдмрдЪрдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реЛрддреА рд╣реИред
рдИрд╢реНрд╡рд░ рдХреА рдХреГрдкрд╛ рдереА, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд▓реЗрдирджреЗрди рд╕реЗ рдкрд╣рд▓реЗ рд╣реА ICO рдЫреЛрдбрд╝ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЬрд▓реНрдж рд╣реА рдореИрдВрдиреЗ рдЦреБрдж рдХреЛ рдПрдХ рдХреНрд░рд┐рдкреНрдЯреЛ рдПрдХреНрд╕рдЪреЗрдВрдЬ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╣реБрдП рдкрд╛рдпрд╛ред
рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдорд╛рд▓реНрдХрд┐рд╢ рдХрд┐рдмрд╛рд▓реНрдЪрд┐рд╢ рдирд╣реАрдВ рд╣реВрдВ, рдФрд░ рдПрдХ рд╕рдЦреНрдд рдирдЬрд╝рд░ рд╣реА рдореБрдЭреЗ рд╕рднреА рдЪрд╛рдмрд┐рдпрд╛рдБ рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рд╕реМрдВрдкрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЕрддрдГ рдПрдХ рд╡рд╛рд╕реНрддреБрдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдореЗрд░рд╛ рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рдХреНрд░рд┐рдкреНрдЯреИрдирд╛рд▓рд┐рд╕рд┐рд╕ рдХреЗ рддреАрд╡реНрд░ рдкреНрд░рднрд╛рд╡ рдХреЛ рдЙрди рдЕрд╡рд╕рдВрд░рдЪрдирд╛ рддрддреНрд╡реЛрдВ рд╕реЗ рдпрдерд╛рд╕рдВрднрд╡ рджреВрд░ рд░рдЦрдирд╛ рдерд╛, рдЬреЛ рдореБрдЭреЗ рдкреНрд░рд┐рдп рдереЗред
рди рдЖрдкрдХреА рдЪрд╛рдмрд┐рдпрд╛рдБ, рди рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛рдПрдБ
рд╣рдо рдПрдХ рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рд╡рд┐рдирд┐рдордп рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЗрди рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЗ рдордзреНрдпрд╡рд░реНрддреА рднрдВрдбрд╛рд░рдг рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рд▓реЗрдирджреЗрди рдХреА рд╕реБрд░рдХреНрд╖рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреА рд╣реЛрдЧреАред
рдЖрдк рдХрд┐рд╕реА рд╡рд┐рд╡рд╛рдж рдореЗрдВ рдиреНрдпрд╛рдпрд╛рдзреАрд╢ рдХреА рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡реЙрд▓реЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рд▓реЗрдирджреЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рддреАрди рдореЗрдВ рд╕реЗ рджреЛ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: рдХреНрд░реЗрддрд╛, рд╡рд┐рдХреНрд░реЗрддрд╛ рдФрд░ рдПрд╕реНрдХреНрд░реЛред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдкреНрд░рддрд┐рднрд╛рдЧреА рдПрд╕реНрдХреНрд░реЛ рдкрд░ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЖрдХреНрд░рдордг рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рджреЛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВред
рдПрдЯреЛрдорд┐рдХ рд╕реНрд╡реИрдк рдПрдХ рд╡рд┐рдирд┐рдордп рдпреЛрдЬрдирд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЧрд╛рд░рдВрдЯрд░ рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдХреЗрд╡рд▓ рдИрдорд╛рдирджрд╛рд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рднреЗрдбрд╝рд┐рдпрд╛, рдмрдХрд░реА рдФрд░ рдЧреЛрднреА рд╡рд╛рд▓реА рдкрд╣реЗрд▓реА рдХреА рддрд░рд╣, рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рд╕рд╣реА рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣реА рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрджрд┐ рдЖрдк рдЙрд╕рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдиреБрдХрд╕рд╛рди рдЙрдард╛рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред
рдХреЗрд╡рд▓ рдкреЗрдЯреВ рдЬрд╛рдирд╡рд░реЛрдВ рдХреЗ рдмрдЬрд╛рдп, рдПрдХ рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдЖрджреЗрд╢ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЯрдХрд░рд╛рд╡ рдвреВрдВрдврдирд╛ рдЗрддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рднреА рдирд╣реАрдВ рд╣реИред
рдкрд╣рд▓рд╛ рдХрджрдо: рдкрд╣реЗрд▓реА
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдРрд▓рд┐рд╕ рдПрдХ рд╕реБрдмрд╣ рдмреЙрдм рдХреЛ рдореБрдЯреНрдареА рднрд░ "рдХреНрд░рд┐рдкреНрдЯреЛрдпреБрдЖрди" рдХреЗ рдмрджрд▓реЗ рдХреБрдЫ рдмрд┐рдЯрдХреЙрдЗрди рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреА рд╣реИред
- рд╡рд╣ рдХреЛрдИ рдмрдбрд╝рд╛ рд░рд╣рд╕реНрдп рдЙрдЬрд╛рдЧрд░ рдХрд░ рд░рд╣реА рд╣реИред
- рдЙрд╕рд╕реЗ рдПрдХ рд╣реИрд╢ рдорд┐рд▓рддрд╛ рд╣реИ
- рдмрд┐рдЯрдХреЙрдЗрди рдХреЛ рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдмреЙрдм рдПрдХ тАЛтАЛрд░рд╣рд╕реНрдп рдкреНрд░рд╕реНрддреБрдд рдХрд░рдХреЗ рдкреИрд╕реЗ рдирд┐рдХрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ (рдЗрд╕рдХрд╛ рд╣реИрд╢ рдЕрдиреБрдмрдВрдз рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдПрдХ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)
- рдпрджрд┐ рдмреЙрдм рд╢рд╛рдо рддрдХ рдЕрдкрдиреЗ рдмрд┐рдЯрдХреЙрдЗрди рд▓реЗрдиреЗ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ, рддреЛ рдРрд▓рд┐рд╕ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рд▓реЗ рд╕рдХрддреА рд╣реИред
рджреВрд╕рд░рд╛ рдЪрд░рдг: рдЪрд╛рд░рд╛
рдмреЙрдм рдЦреЗрд▓ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИ рдФрд░ тАЬрдХреНрд░рд┐рдкреНрдЯреЛ рдпреВрд░реЛтАЭ рдХреЛ рдЕрдкрдиреЗ рдЕрдиреБрдмрдВрдз рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ:
- рдРрд▓рд┐рд╕ рдПрдХ рдЧреБрдкреНрдд рдирдВрдмрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдХреЗ рдЕрдкрдиреЗ "рдХреНрд░рд┐рдкреНрдЯреЛрдХреЙрдЗрди" рдХрд╛ рджрд╛рд╡рд╛ рдХрд░ рд╕рдХрддреА рд╣реИ
- рдпрджрд┐ рдПрд▓рд┐рд╕ рдирд╣реАрдВ рдЖрддреА рд╣реИ рддреЛ рдмреЙрдм рджреЛрдкрд╣рд░ рдХреЗ рднреЛрдЬрди рд╕реЗ рдкрд╣рд▓реЗ рдЬрдорд╛ рд░рд╛рд╢рд┐ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рддреАрд╕рд░рд╛ рдХрджрдо: рд╕реБрд░рд╛рдЧ рдЪрд╛рд░реЗ рдореЗрдВ рд╣реИ
рдРрд▓рд┐рд╕ рдЕрдкрдиреЗ рдкреИрд╕реЗ рд▓реЗрдиреЗ рдЖрддреА рд╣реИ рдФрд░ рдмреЙрдм рдХреЗ рдЕрдиреБрдмрдВрдз рд╕реЗ рдкреИрд╕реЗ рд▓реЗ рд▓реЗрддреА рд╣реИ, рдФрд░ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЕрдкрдирд╛ рд░рд╣рд╕реНрдп рдЙрдЬрд╛рдЧрд░ рдХрд░ рджреЗрддреА рд╣реИред
рдЕрдВрддрд┐рдо рдЪрд░рдг: рд░рд╣рд╕реНрдп рд╕реБрд▓рдЭ рдЧрдпрд╛
рдмреЙрдм рд▓реЗрди-рджреЗрди рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ рдФрд░ рдЕрдкрдиреА рдкреИрдиреА рдирдЬрд░ рд╕реЗ рдЙрд╕ рд░рд╣рд╕реНрдп рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрд▓рд┐рд╕ рдиреЗ рдЕрдиреБрдмрдВрдз рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдерд╛ред рд╡рд╣ рдЕрдкрдиреЗ рдмрд┐рдЯрдХреЙрдЗрди рд╡рд╛рдкрд╕ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд░рд╣рд╕реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдЬрдм рдЪреАрдЬреЗрдВ рдЧрд╝рд▓рдд рд╣реЛ рдЬрд╛рдПрдВ
рдпрджрд┐ рдРрд▓рд┐рд╕ рдЕрдЪрд╛рдирдХ рдирд╢реНрд╡рд░ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдмреЙрдм рдХреЛ рджреЛрдкрд╣рд░ рдХреЗ рднреЛрдЬрди рдореЗрдВ рдЙрд╕рдХрд╛ рдпреБрдЖрди рдорд┐рд▓ рдЬрд╛рддрд╛ рд╣реИред
рдмрджрд▓реЗ рдореЗрдВ, рдпрджрд┐ рд╡рд┐рд╢реНрд╡рд╛рд╕рдШрд╛рддреА рдмреЙрдм рдмреЗрд╣рддрд░ рд╕рдордп рддрдХ рдкреИрд╕реЗ рдХреЛ рдЕрдкрдиреЗ рдкрд╛рд╕ рд░рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдРрд▓рд┐рд╕ рд╢рд╛рдо рддрдХ рдмрд┐рдЯрдХреЙрдЗрди рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддреА рд╣реИред
рдпрджрд┐ рдЖрдк рдкрд╛рда рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдЕрдзрд┐рдХ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣реИрдмрд░ рдХреЗ рдкрд╛рд╕ рдЖрдкрдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдФрд░ рджреГрд╢реНрдпрд╛рддреНрдордХ рд╡рд┐рдХрд▓реНрдк рд╣реИред .
рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рд╣рдореЗрдВ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдРрд▓рд┐рд╕ рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЬреЛ рдмреЙрдм рдХреЗ рдкреИрд╕реЗ рдХреЛ рдЕрдВрддрд┐рдо рдХреНрд╖рдг рдореЗрдВ рд▓реЗ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ рдЙрд╕ рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд╡рд╣ рдХрд╛рдВрдкрддреА рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рд╕реЗ рд▓реЗрдирджреЗрди рдореЗрдВ рд╣реЗрдХреНрд╕ рдЯрд╛рдЗрдк рдХрд░ рд░рд╣рд╛ рд╣реЛрддрд╛ рд╣реИред
рдкреНрд░рддрд┐рднрд╛рдЧреА рдЕрдкрдирд╛ рдкреИрд╕рд╛ рдирд╣реАрдВ рдЦреЛ рд╕рдХрддреЗ, рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдЙрдиреНрд╣реЗрдВ рдзрди рд╡рд╛рдкрд╕реА рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдмреНрд▓реЙрдХрдЪреЗрди рд╕рдорд░реНрдердирдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдпреЛрдЬрдирд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкрд░рд╕реНрдкрд░ рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмреНрд▓реЙрдХрдЪреЗрди рд╕реЗ рдмрд╣реБрдд рдХрдо рдкреНрд░рдпрд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:
- рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╢рд╛рдЦрд╛ рд╡рд╛рд▓реЗ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдзреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди
- рджреЛрдиреЛрдВ рдмреНрд▓реЙрдХрдЪреЗрди рдХреЛ рд╕рдорд╛рди рд╣реИрд╢рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЧреБрдкреНрдд рд▓рдВрдмрд╛рдИ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ)
- рдЯрд╛рдЗрдорд▓реЙрдХреНрд╕.
рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдРрд╕рд╛ рд▓рдЧреЗрдЧрд╛ рдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╣реА рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХреЛ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ тАЬрдЕрд▓рд╡рд┐рджрд╛, рд╣рдорд╛рд░реА рдореБрд▓рд╛рдХрд╛рдд рдПрдХ рдЧрд▓рддреА рдереАтАЭ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рдерд╛ред
рдЕрдкрдиреЗ рд╕рднреА рд▓рд╛рднреЛрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдкрд░рдорд╛рдгреБ рд╕реНрд╡реИрдк рд╕рдорд╛рдзрд╛рди рдЕрдкрдиреА рддрд░рд▓рддрд╛ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдЬреЛрдбрд╝реА рдмреАрдЯреАрд╕реА-рдпреВрдПрд╕рдбреА рдореЗрдВ рдлрд┐рдПрдЯ рднрд╛рдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЯреЛрдХрдирдХреГрдд рдирд╣реАрдВ рдерд╛ред
USDT рдХреА рд╕рдлрд▓рддрд╛ рдиреЗ рдХрд╕реНрдЯреЛрдбрд┐рдпрд▓ USDC рд╕реЗ рд▓реЗрдХрд░ рдПрд▓реНрдЧреЛрд░рд┐рдердо DAI рддрдХ, рд╣рд░ рд╕реНрд╡рд╛рдж рдХреЗ рд▓рд┐рдП ERC20 рд╕реНрдерд┐рд░ рд╕рд┐рдХреНрдХреЛрдВ рдХреА рд▓рд╣рд░ рдкреИрджрд╛ рдХрд░ рджреА рд╣реИред
рдЗрд╕рд▓рд┐рдП рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдпрд╣ рддрд░реНрдХ рджреЗрдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдРрд▓рд┐рд╕ рдХреБрдЫ ERC20 рдЯреЛрдХрди рдХреЗ рдмрджрд▓реЗ рдмреЙрдм рдХреЛ рдмрд┐рдЯрдХреЙрдЗрди рдмреЗрдЪрддреА рд╣реИ, рдФрд░ рд╕реНрдЯреЗрдмрд▓рд╛рдЗрдЬрд░реНрд╕ рдХреА рд╕рдлрд▓рддрд╛ рдХреА рдЖрд╢рд╛ рдХрд░рддреЗ рд╣реИрдВ, рд╕реМрднрд╛рдЧреНрдп рд╕реЗ рд╣рдорд╛рд░реЗ рд╕рд╛рдордиреЗ рдЕрднреА рднреА рдХрдИ рддрдХрдиреАрдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред
рдЧрддрд┐
рдмрд┐рдЯрдХреЙрдЗрди рдФрд░ рдПрдереЗрд░рд┐рдпрдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмрд╣реБрдд рддреЗрдЬрд╝ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдПрдХ рдЬрдорд╛ рдХреЗ рд▓рд┐рдП рд╕рднреА рдкреБрд╖реНрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдлрд┐рд░ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдПред
рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ рдЬреЛ рдкреНрд░рддрд┐рднрд╛рдЧреА рд░рд╣рд╕реНрдп рдЬрд╛рдирддрд╛ рд╣реИ рд╡рд╣ рдзрди рдХрд╛ рдпреЛрдЧрджрд╛рди рджреЗрддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡реА рд╕рдорд╛рдкрди рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдЕрдкрдирд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдПрдХ рдмрд╣реБрдд рд╣реА рдЕрд╕реНрдерд┐рд░ рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рджреМрд░рд╛рди рджрд░ рдореЗрдВ рдХрд╛рдлреА рдмрджрд▓рд╛рд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдмрджрд▓рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред
╨Ъ╨╛╨╜╤Д╨╕╨┤╨╡╨╜╤Ж╨╕╨░╨╗╤М╨╜╨╛╤Б╤В╤М
рдХреЛрдИ рднреА рдПрдХреНрд╕рдЪреЗрдВрдЬ рджреЛрдиреЛрдВ рдмреНрд▓реЙрдХрдЪреЗрди рдкрд░ рдХрд▓рд╛рдХреГрддрд┐рдпрд╛рдБ рдЫреЛрдбрд╝рддрд╛ рд╣реИред рдПрдХ рдЪреМрдХрд╕ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдзреЛрдВ рдореЗрдВ рд╕рдорд╛рди рд╣реИрд╢ рдХреЛ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рддрд╛рд░реНрдХрд┐рдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдПрдХ рд╕реМрджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╡рд┐рдирд┐рдордп рджрд░реЛрдВ рд╕реЗ рд▓реЗрдХрд░ рдХрд░реЛрдВ рддрдХ рдХрдИ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЬрдм рд╕реНрдЯреЙрдХ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХреЛ рдЖрдкрдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдмреЗрд╣рдж рдЕрдкреНрд░рд┐рдп рд╣реЛрддрд╛ рд╣реИ; рдЬрдм рд╣рд░ рдХреЛрдИ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддрд╛ рд╣реИ, рддреЛ рдпрд╣ рджреЛрдЧреБрдирд╛ рдЕрдкреНрд░рд┐рдп рд╣реЛрддрд╛ рд╣реИред
рдкреНрд░рдпреЛрдЬреНрдп
рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдмреНрд▓реЙрдХрдЪреЗрди рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдИрдерд░ рдХрд╛ рдордЬрдмреВрдд рдмрд┐рдВрджреБред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╡рд┐рдХреНрд░реЗрддрд╛ рдФрд░ рдХреНрд░реЗрддрд╛ рдХреЛ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐рдпрд╛рдБ рдЕрдкрдирд╛рдиреА рд╣реЛрдВрдЧреАред
рд╡рд┐рдХреНрд░реЗрддрд╛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рд╕рдм рдХреБрдЫ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рд╣реИ: рдЖрдкрдХреЛ рдмрд╕ рдмрд┐рдЯрдХреЙрдЗрди рдХреЛ p2sh рдкрддреЗ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдИрдерд░ рдХреЗ рд╕рд╛рде рддреЛ рд╕рдмрдХреБрдЫ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреЗрдЪреАрджрд╛ рд╣реИред
рдЕрдиреБрдмрдВрдзрдЖрдЗрдП GitHub рдкрд░ рд╕реНрд╡реИрдк рдХреЗ рд▓рд┐рдП рдФрд╕рдд рдЕрдиреБрдмрдВрдз рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
contract iERC20 {
function totalSupply() public view returns (uint256);
function transfer(address receiver, uint numTokens) public returns (bool);
function balanceOf(address tokenOwner) public view returns (uint);
function approve(address delegate, uint numTokens) public returns (bool);
function allowance(address owner, address delegate) public view returns (uint);
function transferFrom(address owner, address buyer, uint numTokens) public returns (bool);
}
contract Swapper {
struct Swap {
iERC20 token;
bytes32 hash;
uint amount;
uint refundTime;
bytes32 secret;
}
mapping (address => mapping(address => Swap)) swaps;
function create(iERC20 token, bytes32 hash, address receiver, uint amount, uint refundTime) public {
require(swaps[msg.sender][receiver].amount == 0); // check is swap with given hash already exists
require(token.transferFrom(msg.sender, address(this), amount)); // transfer locked tokens to swap contract
swaps[msg.sender][receiver] = Swap(token, hash, amount, refundTime, 0x00); //create swap
}
function hashOf(bytes32 secret) public pure returns(bytes32) {
return sha256(abi.encodePacked(secret));
}
function withdraw(address owner, bytes32 secret) public {
Swap memory swap = swaps[owner][msg.sender];
require(swap.secret == bytes32(0));
require(swap.hash == sha256(abi.encodePacked(secret))); // swap exists
swaps[owner][msg.sender].secret = secret;
swap.token.transfer(msg.sender, swap.amount);
}
function refund(address receiver) public {
Swap memory swap = swaps[msg.sender][receiver];
require(now > swap.refundTime);
delete swaps[msg.sender][receiver];
swap.token.transfer(msg.sender, swap.amount);
}
}
рдЪреЗрддрд╛рд╡рдиреА! рдЗрд╕ рдпрд╛ рд▓реЗрдЦ рдХреЗ рдЕрдиреНрдп рдЕрдиреБрдмрдВрдзреЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рд╡реЗ рдХреЗрд╡рд▓ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред рд╡рд┐рд╢реЗрд╖рдХрд░ рдпрд╣.
- рдмреЙрдм рдХреЛ рдЯреЛрдХрди рдЕрдиреБрдмрдВрдз рдХреА рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
approve, рд╕реНрд╡реИрдк рдЕрдиреБрдмрдВрдз рдХреЛ рдЙрд╕рдХреЗ рдЯреЛрдХрди рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ - рдмреЙрдм рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕реНрд╡реИрдк рдФрд░ рдПрдХ рдЕрдиреБрдмрдВрдз рдмрдирд╛рддрд╛ рд╣реИ
transferFromрдкреНрд░реЗрд╖рдХ рдХреЗ рдЯреЛрдХрди рдХреЛ рдЕрдкрдиреЗ рдкрддреЗ рдкрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ - рдРрд▓рд┐рд╕ рдЗрди
withdrawрд░рд╣рд╕реНрдп рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЕрдиреБрдмрдВрдз рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИtransfer
рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡реЙрд▓реЗрдЯ рдФрд░ рдХреНрд░рд┐рдкреНрдЯреЛ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ approve рдЯреЛрдХрди, рдФрд░ рдЕрдЪреНрдЫреЗ рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдПред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрд╡рдпрдВ рдЕрдХреНрд╕рд░ рдЧрд▓рддрд┐рдпрд╛рдБ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЯреЛрдХрди рдХреЛ рдЕрдиреБрдмрдВрдз рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЯреЛрдХрди рдЦреЛ рдЬрд╛рддреЗ рд╣реИрдВред рдЗрдерд░рд╕реНрдХреИрди рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд▓реЛрдЧреЛрдВ рдХреЗ рд╡рд┐рд▓рд╛рдк рд╕реЗ рднрд░реА рд╣реИрдВред
рдФрд░ рдПрдХ рдЕрдиреБрдмрдВрдз рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ ETH рдореЗрдВ рдХрдореАрд╢рди рдХрд╛ рднреБрдЧрддрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд▓реЗрдирджреЗрди рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рджреЛрдиреЛрдВ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ рдЗрд╕реЗ рд╕реНрдЯреЙрдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдмрд╣реБрдд рдХрдо рд▓реЛрдЧ рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдЧреИрд╕ рд╣реЛрд▓реНрдбрд░
рдкрд╣рд▓рд╛ рдХрджрдо рдпрд╣ рд╣реИ рдХрд┐ рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрд╕рдВрднрд╡ рд╣реЛ, рдкреНрд░реЗрд╖рдХ рдХреА рдЬрд╛рдВрдЪ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдпрд╣ рдорд╛рди рд▓рд┐рдпрд╛ рдЬрд╛рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдпрд╣рд╛рдВ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рдЧреИрд╕ рдХреА рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдкреАрдбрд╝рд┐рдд рд╣реИ рдФрд░ рд╣рдо рд╕рднреА рдХреЗ рд▓рд┐рдП рдЕрдиреБрдмрдВрдз рдмреБрд▓рд╛ рд░рд╣реЗ рд╣реИрдВред
рдЖрдзреБрдирд┐рдХреАрдХреГрдд рдЕрдиреБрдмрдВрдз
contract Swapper {
struct Swap {
iERC20 token;
address receiver;
uint amount;
address refundAddress;
uint refundTime;
}
mapping (bytes32 => Swap) swaps;
function create(iERC20 token, bytes32 hash, address receiver, uint amount, address refundAddress, uint refundTime) public {
require(swaps[hash].amount == 0); // use hash once
require(token.transferFrom(msg.sender, address(this), amount));
swaps[hash] = Swap(token, receiver, amount, refundAddress, refundTime);
}
function withdraw(bytes memory secret) public {
bytes32 hash = sha256(secret);
Swap memory swap = swaps[hash];
require(swap.amount > 0);
delete swaps[hash];
swap.token.transfer(swap.receiver, swap.amount);
}
function refund(bytes32 hash) public {
Swap memory swap = swaps[hash];
require(now > swap.refundTime);
delete swaps[hash];
swap.token.transfer(swap.refundAddress, swap.amount);
}
}
рд╕рдВрд╡рд┐рджрд╛рддреНрдордХ-рдХреБрдВрдЬреА рджреНрд╡реИрддрд╡рд╛рдж рдФрд░ EIP 712
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╣рд╡рд╛ рдореЗрдВ рдПрдХ рдкрддрд╛ рдПрдХ рдЕрдиреБрдмрдВрдз рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдпрд╣ рдПрдХ рд╡рд┐рд╖рдп, рдпрд╛рдиреА рдПрдХ рдХреБрдВрдЬреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдХреБрдВрдЬреА рдХрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рд╕рдВрджреЗрд╢реЛрдВ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдирд╛ рд╣реИред
рд╣рдо рдмреЙрдм-рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдХреЛ рдПрдХ рдкреНрд░реЗрд╖рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдкрд╛рд╕ рдмрдирд╛рддрд╛ рд╣реИ, рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдмреЙрдм-рдХреБрдВрдЬреА рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЕрдм, рдХреЛрдИ рднреА рдкреНрд░рддрд┐рднрд╛рдЧреА рдХреЗ рдХрдореАрд╢рди рдХреЛ рдкреНрд░рд╛рдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рд░реНрдгрдп рдХреЗрд╡рд▓ рд╡рд╣реА рд╡реНрдпрдХреНрддрд┐ рд▓реЗрддрд╛ рд╣реИ рдЬреЛ рдХреБрдВрдЬреА рдЬрд╛рдирддрд╛ рд╣реИред
рдмреЙрдм-рдЕрдиреБрдмрдВрдз
library EIP712ProxyLibrary {
function hashCommand(address sender, iERC20 token, Swapper swapper, bytes32 hash, address receiver, uint amount, address refundAddress, uint refundTime) public view returns(bytes32);
}
contract ProxyBob {
address owner;
constructor(address _owner) public {
owner = _owner;
}
function createSwap(Swapper swapper, iERC20 token, bytes32 hash, address receiver, uint amount, address refundAddress, uint refundTime, uint8 v, bytes32 r, bytes32 s) public {
require(owner == ecrecover(EIP712ProxyLibrary.hashCommand(address(this), token, swapper, hash, receiver, amount, refundAddress, refundTime), v, r, s));
token.approve(address(swapper), amount);
swapper.create(token, hash, receiver, amount, refundAddress, refundTime);
}
}
рдПрдереЗрд░рд┐рдпрдо рдореЗрдВ рдЬрдЯрд┐рд▓ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдХ рд╣реИ , рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ
рдлреВрдЯ рдбрд╛рд▓реЛ рдФрд░ рдЬреАрддреЛ
рдЕрдХреНрд╕рд░, рдПрдереЗрд░рд┐рдпрдо рдЕрдиреБрдмрдВрдз рдХреЛ рд╣реИрдХ рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рджреГрд╢реНрдп рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
- рднрд╛рдЧреАрджрд╛рд░ рдЕрдиреБрдмрдВрдз рдореЗрдВ рдзрди рд▓рдЧрд╛рддрд╛ рд╣реИ
- рдлрд┐рд░ рд╡рд╣ рдзрди рд▓реЗ рд▓реЗрддрд╛ рд╣реИ
- рдХреБрдЫ рдЧрд╝рд▓рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ
- рдШреЛрдЯрд╛рд▓реЗрдмрд╛рдЬ рдмрд╛рд░-рдмрд╛рд░ рдкреИрд╕реЗ рд▓реЗ рд▓реЗрддрд╛ рд╣реИ
рдпрджрд┐ рд╣рдо рдЕрдкрдиреЗ рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ, рддреЛ рдпрджрд┐ рд░рд╣рд╕реНрдп рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдПрдХ рд░рд┐рдХреНрдд рд╕рдореВрд╣ рд╣реИ, рддреЛ рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдХ рд▓рд╛рдЦ рдХреА рдЪреЛрд░реА рдХреИрд╕реЗ рдХрд░реЗрдВрд╣реИрд╢ рдХреЗ рд╕рд╛рде рд╕реНрд╡реИрдк рдмрдирд╛рдПрдВ 0x66687aadf862bd776c8fc18b8e9f8e20089714856ee233b3902a591d0d5f2925
рдпрд╣ sha256 рд╣реИ 0x0000000000000000000000000000000000000000000000000000000000000000
рд╣рдо рд░рд╣рд╕реНрдп рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рдЯреЛрдХрди рд▓реЗрддреЗ рд╣реИрдВ
рд╣рдо рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХрд┐рд╕реА рдФрд░ рдХрд╛ рд▓реЗ рд▓реЗрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ 0 = 0
рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрд╛рдкрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдЕрдиреБрдмрдВрдз рдмрдирд╛рдХрд░, рд╣рдо рдИрд╡реАрдПрдо рд╕реНрддрд░ рдкрд░ рдЕрдиреБрдмрдВрдзреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рдЗрддрдирд╛ рд╣реА рдирд╣реАрдВ: рдЕрдм рдкреНрд░рддреНрдпреЗрдХ рд▓реЗрдирджреЗрди рдХрд╛ рдЕрдкрдирд╛ рдкрддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдЖрдк рдХрд┐рд╕реА рднреА рд╡реЙрд▓реЗрдЯ рдпрд╛ рдПрдХреНрд╕рдЪреЗрдВрдЬ рд╕реЗ рдЯреЛрдХрди рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкрд░рд┐рддреНрдпрдХреНрдд рдЕрдиреБрдмрдВрдз рдФрд░ create2
рд▓реЗрдХрд┐рди рдЕрдм рдкреНрд░рддреНрдпреЗрдХ рд▓реЗрдирджреЗрди рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рдЕрдиреБрдмрдВрдз рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рддрдм рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрдм рддрдХ рдЦрд░реАрджрд╛рд░ рд╢реНрд░рдо "рдХреНрд░рд┐рдкреНрдЯреЛрдлреЗрдирд┐рдВрдЧ" рдХреЛ рд╡рд╣рд╛рдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд░ рджреЗрддрд╛ред "рд╕реБрдмрд╣ рдЕрдиреБрдмрдВрдз, рд╢рд╛рдо рдХреЛ рдкреИрд╕рд╛" рдпреЛрдЬрдирд╛ рдореЗрдВ, рд╣рдореЗрд╢рд╛ рдпрд╣ рдЦрддрд░рд╛ рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИ рдХрд┐ рдЦрд░реАрджрд╛рд░ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЕрдиреБрдмрдВрдз рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдзрди рдкрд╣рд▓реЗ рд╣реА рдЦрд░реНрдЪ рд╣реЛ рдЪреБрдХрд╛ рд╣реЛрдЧрд╛ред
рдХреНрдпрд╛ рдРрд╕рд╛ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╕реБрдмрд╣ рдкреИрд╕рд╛ рд╣реЛ рдФрд░ рд╢рд╛рдо рдХреЛ рдмрд╛рдЗрдЯреНрд╕ рд╣реЛрдВ?
рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯрд┐рдиреЛрдкрд▓ рд╣рд╛рд░реНрдб рдлреЛрд░реНрдХ рдореЗрдВ, рдбреЗрд╡рд▓рдкрд░реНрд╕ create2 рдирд┐рд░реНрджреЗрд╢ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛, рдЬреЛ рдПрдХ рдирд┐рдпрддрд╛рддреНрдордХ рдкрддреЗ рдкрд░ рдПрдХ рдирдпрд╛ рдЕрдиреБрдмрдВрдз рдмрдирд╛рддрд╛ рд╣реИ
keccak256( 0xff ++ address ++ salt ++ keccak256(init_code))[12:]
рдЬрд╣рд╛рдБ
- рдкрддрд╛ тАФ рдлреИрдХреНрдЯреНрд░реА рдЕрдиреБрдмрдВрдз рдкрддрд╛
- рдирдордХ - рдХреБрдЫ рд╕рдВрдЦреНрдпрд╛, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣рдо рдЕрдЧрд▓реА рдХрдбрд╝реА рдореЗрдВ рдЬрд╛рдиреЗрдВрдЧреЗ
- init_code тАФ рдЕрдиреБрдмрдВрдз рдмрд╛рдЗрдЯрдХреЛрдб рдФрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░.
рдХрд╛рд░рдЦрд╛рдирд╛ рд╣реИрдирд┐рд░реНрджреЗрд╢ рдХреЗрд╡рд▓ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдлреИрдХреНрдЯреНрд░реА рдереЛрдбрд╝реА рдбрд░рд╛рд╡рдиреА рд▓рдЧрддреА рд╣реИ:
contract Factory {
event Deployed(address addr, uint256 salt);
function create2(bytes memory code, uint256 salt) public {
address addr;
assembly {
addr := create2(0, add(code, 0x20), mload(code), salt)
}
emit Deployed(addr, salt);
}
}
рдЖрдкрдХрд╛ рдЕрдиреБрдмрдВрдз рдХреЛрдб web3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
const MyContract = new web3.eth.Contract(ABI, {})
const ╤Бode = MyContract.deploy({
data: BYTECODE,
arguments: contructorArgs
}).encodeABI();
const factory = new web3.eth.Contract(FACTORY_ABI, factoryAddress);
tx = factory.methods.create2(╤Бode, salt);
рд╕реЙрд▓рд┐рдбрд┐рдЯреА рдореЗрдВ рд╕реАрдорд┐рдд рд╕рдорд░реНрдерди рдХреЗ рдХрд╛рд░рдг, рдПрдереЗрд░рд┐рдпрдо рдХреА рдХреБрдЫ рд╕реВрдХреНрд╖реНрдорддрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рдЕрдиреБрдмрдВрдз рдХреЗ рд▓рд┐рдП рдЧреИрд╕ рдХреА рдЧрдгрдирд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдЧреИрд╕ рдХреА рдХрдореА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдиреБрдмрдВрдз рдЖрдВрддрд░рд┐рдХ рддреНрд░реБрдЯрд┐ рдХреЗ рдХрд╛рд░рдг рд░рджреНрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд┐рдирд╛ рдпрд╣ рдмрддрд╛рдП рдХрд┐ рдкрд░реНрдпрд╛рдкреНрдд рдЧреИрд╕ рдирд╣реАрдВ рдереА, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛ред
рдЕрдм рд╣рдо рдЯреЛрдХрди рдХреЛ рдЕрдиреБрдмрдВрдзреЛрдВ рдореЗрдВ рдмрд┐рдирд╛ рдкреВрд░реНрд╡ рддреИрдпрд╛рд░реА рдХреЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЬрдм рддрдХ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ, рддрдм рддрдХ рдХреЛрдИ рднреА рдпрд╣ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХреЗрдЧрд╛ рдХрд┐ рдЕрдиреБрдмрдВрдз рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред
рдХреМрдЖ рдХреМрдЖ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдЭрд╛рдБрдХреЗрдЧрд╛
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡рд╣ рдЬрд┐рд╕рдиреЗ рдордиреА рд▓реЙрдиреНрдбреНрд░рд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╢рд╛рд╕рди рдХреЗ рджреБрд╢реНрдордиреЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рд▓рдбрд╝рд╛рдИ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рдирд┐рд╡реЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рд╣реИ, рдРрд╕реА рдмрдЪрдХрд╛рдиреА рдЪрд╛рд▓реЛрдВ рд╕реЗ рдирд╣реАрдВ рд░реБрдХреЗрдЧрд╛, рдФрд░ рдЕрдиреБрдмрдВрдз рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж рднреА рд╡рд╣ рд╣реИрд╢ рдХреЛ рджреЗрдЦреЗрдЧрд╛ред
рдпрд╣ рдХреИрд╕реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП рдХрд┐ рд╣реИрд╢ рдЙрдЬрд╛рдЧрд░ рди рд╣реЛ?
рд╣рдо рд╕реНрд╡реИрдк рдХреЛ рдСрдл-рдЪреЗрди рдореЗрдВ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ: рдкреНрд░рддрд┐рднрд╛рдЧреА рд╕реНрд╡реИрдк рдЕрдиреБрдмрдВрдз рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд░рд╣рд╕реНрдп рдХреЛ рдирд┐рдЬреА рддреМрд░ рдкрд░ рдЙрдЬрд╛рдЧрд░ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХрджрдо рд╕реЗ рдХрджрдорджреЛ "рдорд▓реНрдЯреА-рд╕рд┐рдЧреНрдиреЗрдЪрд░" рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рдирд╕реЗ рдзрдирд░рд╛рд╢рд┐ рдирд┐рдХрд╛рд▓реА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдпрджрд┐ рдПрд▓рд┐рд╕ рдФрд░ рдмреЙрдм рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реЛрдВред
рдХрд┐рд╕реА рднреА рдкреНрд░рддрд┐рднрд╛рдЧреА рдХреЗ рдСрдлрд▓рд╛рдЗрди рд╣реЛ рдЬрд╛рдиреЗ рд╕реЗ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рджреБрд░реНрдШрдЯрдирд╛ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рд╣рдо рдПрдХ рдЕрдЪреНрдЫрд╛ рдЯрд╛рдЗрдордЖрдЙрдЯ рдЬреЛрдбрд╝ рджреЗрдВред
рдРрд▓рд┐рд╕ рдФрд░ рдмреЙрдм рд╕рдорд╛рдирд╛рдВрддрд░ рд░реВрдк рд╕реЗ рдЬрдорд╛ рдХрд░рддреЗ рд╣реИрдВ
- рдРрд▓рд┐рд╕ рдПрдХ рд░рд╣рд╕реНрдп рдмрдирд╛рддреА рд╣реИ рдФрд░ рдмреЙрдм рдХреЛ рд░рд╣рд╕реНрдп рдХрд╛ рд╣реИрд╢ рдФрд░ рд▓реЗрдирджреЗрди рдХрд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рджреЗрддреА рд╣реИ рдЬреЛ рдмрд┐рдЯрдХреЙрдЗрди рдХреЛ рд╕реНрд╡реИрдк рдкрддреЗ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
- рдмреЙрдм рдПрд▓рд┐рд╕ рдХреЛ рджрд┐рдП рдЧрдП рд╣реИрд╢ рдХреЗ рд╕рд╛рде рд╕реНрд╡реИрдк рдЕрдиреБрдмрдВрдз рдореЗрдВ рдЯреЛрдХрди рд╡рд╛рдкрд╕ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рджреЗрддрд╛ рд╣реИред
- рдРрд▓рд┐рд╕ рдмреЙрдм рдХреЛ рдПрдХ рд░рд╣рд╕реНрдп рдмрддрд╛рддреА рд╣реИред
рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╕рд╛рдордВрдЬрд╕реНрдп рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрддрд╛ рд╣реИ: рдРрд▓рд┐рд╕ рдФрд░ рдмреЙрдм рджреЛрдиреЛрдВ рдХрд┐рд╕реА рднреА рд╕рдордп рд▓реЗрдирджреЗрди рдкреВрд░рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕реЗ рдореИрддреНрд░реАрдкреВрд░реНрдг рдорд╛рд╣реМрд▓ рдореЗрдВ, рд╡реЗ рдЕрдВрддрд┐рдо рдкрддреЗ рдкрд░ рдзрди рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдмрд╛рд╣рд░реА рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдзрдирд░рд╛рд╢рд┐ 2-рдореЗрдВ-2 рдмрд╣реБ-рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЕрдиреБрдмрдВрдз рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реБрдИ рд╣реИред
рдпрд╣ рдпреЛрдЬрдирд╛ рджреЛрдиреЛрдВ рдкрдХреНрд╖реЛрдВ рдХреЛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЬрдорд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдкреБрд╖реНрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рдж рд░рд╣рд╕реНрдп рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рд╣реЛрддрд╛ рд╣реИред
рд╕реНрддрд░ 2
рдЪреВрдВрдХрд┐ рд╣рдо рдПрдХ рдкрддреЗ рдкрд░ рдкреИрд╕рд╛ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдИ рдордзреНрдпрд╡рд░реНрддреА рд▓реЗрдирджреЗрди рдкреНрд░рдХрд╛рд╢рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдХрдИ рдкрддреЛрдВ рдкрд░ рдкреИрд╕рд╛ рдирд┐рдХрд╛рд▓рдиреЗ рдФрд░ рдЕрд╕реАрдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдордзреНрдпрд╡рд░реНрддреА рд▓реЗрдирджреЗрди рдХрд░рдиреЗ рд╕реЗ рдХреЛрдИ рдирд╣реАрдВ рд░реЛрдХ рд╕рдХрддрд╛ред рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдирд┐рдордп рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕реЗрдЯ рдерд╛, рд▓реЗрдХрд┐рди рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рд╕реНрд╡реИрдк рдПрдХрддреНрд░ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рд░реЛрдХрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрддрд╛ рд╣реИред
рдЕрдм рдРрд▓рд┐рд╕ рдФрд░ рдмреЙрдм рд╕рдЪрдореБрдЪ рдЦреБрд▓рдХрд░ рдмрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдФрд╕рдд рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ, рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рд╕рд╛рддреЛрд╢реА рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░реЗрдВ, рдпрд╛ рд╕реАрдзреЗ рдмрд╛рдЬрд╛рд░ рдирд┐рд░реНрдорд╛рддрд╛ рдФрд░ рддрд░рд▓рддрд╛ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред
рдХрджрдо рд╕реЗ рдХрджрдо
- рд╡рд┐рдХреНрд░реЗрддрд╛ рдПрдХ рд░рд╣рд╕реНрдп рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЦрд░реАрджрд╛рд░ рдХреЛ рд░рд╣рд╕реНрдп рдХрд╛ рдПрдХ рд╣реИрд╢ рдФрд░ рд▓реЗрдирджреЗрди рдХрд╛ рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рджреЗрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдзрди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ p2sh рд╕реНрд╡реИрдк рдкрддреЗ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╢реЗрд╖ рд╡рд┐рдХреНрд░реЗрддрд╛ рдХреЗ рдкрддреЗ рдкрд░ рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
- рдХреНрд░реЗрддрд╛ рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЯреЛрдХрди рдФрд░ рдЦреБрд▓реЗ рдкреИрд╕реЗ рдХреЛ рд╕реНрд╡реИрдк рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХреЗ рдкрддреЗ рдкрд░ рд╡рд╛рдкрд╕ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- рд╡рд┐рдХреНрд░реЗрддрд╛ рдиреЗ рд░рд╣рд╕реНрдп рдмрддрд╛рдпрд╛
- рдЗрддрд┐рд╣рд╛рд╕ рдПрдХ рдирдП рд░рд╣рд╕реНрдп рдХреЗ рд╕рд╛рде рдЦреБрдж рдХреЛ рджреЛрд╣рд░рд╛рддрд╛ рд╣реИ, рдФрд░ рдЕрджрд▓рд╛-рдмрджрд▓реА рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкрд╣рд▓реЗ рд╕реЗ рдЦрд░реАрджреА рдЧрдИ рд╡рд╕реНрддреБ рдХреЛ рдЦрд░реАрджрд╛рд░ рдХреЗ рдкрддреЗ рдкрд░ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рднреБрдЧрддрд╛рди рдХреА рдЧрдИ рд╡рд╕реНрддреБ рдХреЛ рд╡рд┐рдХреНрд░реЗрддрд╛ рдХреЗ рдкрддреЗ рдкрд░ рд╡рд╛рдкрд╕ рд▓реЗрдирд╛ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрдЪреНрдЪ рдЧрддрд┐ рд╡рд╛рд▓реЗ рдкреА2рдкреА рдЯреНрд░реЗрдбрд┐рдВрдЧ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИ, рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕рдордп рдХрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдФрд░ рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реМрджрд╛ рдмрдВрдж рдХрд░ рд▓реЗрдВред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдкрдиреЗ рдЕрдиреБрдмрдВрдзреЛрдВ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рдорд╛рдпреЛрдЬрди рдХрд░рдХреЗ, рд╣рдо рдЕрдкрдиреЗ рдЪреИрдирд▓реЛрдВ рдХреЛ рдЕрдорд░рддрд╛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдЧрд▓реЗ рдПрдкрд┐рд╕реЛрдб рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред
рд╕реНрд░реЛрдд: www.habr.com
