рдбрд┐рдкреНрд▓реЛрдЗрдореЗрдиреНрдЯ рдЕрдШрд┐ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдзрдХреЛ рдареЗрдЧрд╛рдирд╛ рдХрд╕рд░реА рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрдиреЗ: рдХреНрд░рд┐рдкреНрдЯреЛ рдПрдХреНрд╕рдЪреЗрдиреНрдЬрдХреЛ рд▓рд╛рдЧрд┐ CREATE2 рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ

рдмреНрд▓рдХрдЪреЗрдирдХреЛ рд╡рд┐рд╖рдпрд▓реЗ рд╕рдмреИ рдкреНрд░рдХрд╛рд░рдХреЛ рдкреНрд░рдЪрд╛рд░рдХреЛ рд╕реНрд░реЛрдд рдорд╛рддреНрд░ рд╣реЛрдЗрди, рдкреНрд░рд╛рд╡рд┐рдзрд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдгрдмрд╛рдЯ рдзреЗрд░реИ рдореВрд▓реНрдпрд╡рд╛рди рд╡рд┐рдЪрд╛рд░рд╣рд░реВ рдкрдирд┐ рдмрдирд╛рдЙрдБрджреИрдиред рддреНрдпрд╕рдХрд╛рд░рдг, рдпрд╕рд▓реЗ рдШрдорд╛рдЗрд▓реЛ рд╢рд╣рд░рдХрд╛ рдмрд╛рд╕рд┐рдиреНрджрд╛рд╣рд░реВрд▓рд╛рдИ рдмрд╛рдЗрдкрд╛рд╕ рдЧрд░реЗрдиред рдорд╛рдирд┐рд╕рд╣рд░реВ рдирдЬрд┐рдХрдмрд╛рдЯ рд╣реЗрд░рд┐рд░рд╣реЗрдХрд╛ рдЫрдиреН, рдЕрдзреНрдпрдпрди рдЧрд░реНрджреИ рдЫрдиреН, рдкрд░рдореНрдкрд░рд╛рдЧрдд рд╕реВрдЪрдирд╛ рд╕реБрд░рдХреНрд╖рд╛рдорд╛ рдЖрдлреНрдиреЛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛рд▓рд╛рдИ рдмреНрд▓рдХрдЪреЗрди рдкреНрд░рдгрд╛рд▓реАрд╣рд░реВрдорд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрди рдкреНрд░рдпрд╛рд╕ рдЧрд░рд┐рд░рд╣реЗрдХрд╛ рдЫрдиреНред рдЕрд╣рд┐рд▓реЗрд╕рдореНрдо, рдпреЛ рд╕реНрдерд╛рдирдорд╛ рдЫ: Rostelecom-Solar рдХреЛ рд╡рд┐рдХрд╛рд╕рд╣рд░реВ рдордзреНрдпреЗ рдПрдХрд▓реЗ blockchain-рдЖрдзрд╛рд░рд┐рдд рд╕рдлреНрдЯрд╡реЗрдпрд░рдХреЛ рд╕реБрд░рдХреНрд╖рд╛ рдЬрд╛рдБрдЪ рдЧрд░реНрди рд╕рдХреНрдЫред рд░ рдмрд╛рдЯреЛрдорд╛, рдмреНрд▓рдХрдЪреЗрди рд╕рдореБрджрд╛рдпрдХреЛ рд▓рд╛рдЧреВ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрдиреЗ рдмрд╛рд░реЗ рдХреЗрд╣реА рд╡рд┐рдЪрд╛рд░рд╣рд░реВ рдЙрддреНрдкрдиреНрди рд╣реБрдиреНрдЫрдиреНред рдпреА рд▓рд╛рдЗрдл рд╣реНрдпрд╛рдХрд╣рд░реВ рдордзреНрдпреЗ рдПрдЙрдЯрд╛ - рдХрд╕рд░реА CREATE2 рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдбрд┐рдкреНрд▓реЛрдпрдореЗрдиреНрдЯ рдЕрдШрд┐ рд╕реНрдорд╛рд░реНрдЯ рд╕рдореНрдЭреМрддрд╛рдХреЛ рдареЗрдЧрд╛рдирд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрдиреЗ - рдЖрдЬ рдо рддрдкрд╛рдИрдВрд╕рдБрдЧ рдХрдЯ рдЕрдиреНрддрд░реНрдЧрдд рд╕рд╛рдЭрд╛ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреБред

рдбрд┐рдкреНрд▓реЛрдЗрдореЗрдиреНрдЯ рдЕрдШрд┐ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдзрдХреЛ рдареЗрдЧрд╛рдирд╛ рдХрд╕рд░реА рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрдиреЗ: рдХреНрд░рд┐рдкреНрдЯреЛ рдПрдХреНрд╕рдЪреЗрдиреНрдЬрдХреЛ рд▓рд╛рдЧрд┐ CREATE2 рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ
CREATE2 opcode рдпрд╕ рд╡рд░реНрд╖рдХреЛ рдлреЗрдмреНрд░реБрдЕрд░реА 28 рдорд╛ Constantinople рд╣рд╛рд░реНрдб рдлреЛрд░реНрдХрдорд╛ рдердкрд┐рдПрдХреЛ рдерд┐рдпреЛред EIP рдорд╛ рдЙрд▓реНрд▓реЗрдЦ рдЧрд░рд┐рдП рдЕрдиреБрд╕рд╛рд░, рдпреЛ opcode рдореБрдЦреНрдп рд░реВрдкрдорд╛ рд░рд╛рдЬреНрдп рдЪреНрдпрд╛рдирд▓рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдкреЗрд╢ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛред рдпрджреНрдпрдкрд┐, рд╣рд╛рдореАрд▓реЗ рдпрд╕рд▓рд╛рдИ рдлрд░рдХ рд╕рдорд╕реНрдпрд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНтАНрдпреМрдВред

рдПрдХреНрд╕рдЪреЗрдиреНрдЬрдорд╛ рдмреНрдпрд╛рд▓реЗрдиреНрд╕ рднрдПрдХрд╛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВ рдЫрдиреНред рд╣рд╛рдореАрд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓рд╛рдИ Ethereum рдареЗрдЧрд╛рдирд╛ рдкреНрд░рджрд╛рди рдЧрд░реНрдиреБрдкрд░реНрдЫ рдЬрд╕рдорд╛ рдЬреЛ рдХреЛрд╣реАрд▓реЗ рдЯреЛрдХрдирд╣рд░реВ рдкрдард╛рдЙрди рд╕рдХреНрдЫрдиреН, рдЬрд╕рд▓реЗ рдЧрд░реНрджрд╛ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдЦрд╛рддрд╛ рдкреБрдирдГрдкреВрд░реНрддрд┐ рд╣реБрдиреНрдЫред рдпреА рдареЗрдЧрд╛рдирд╛рд╣рд░реВрд▓рд╛рдИ "рд╡рд╛рд▓реЗрдЯ" рднрдирд┐рдиреНрдЫред рдЯреЛрдХрдирд╣рд░реВ рд╡рд╛рд▓реЗрдЯрд╣рд░реВрдорд╛ рдЖрдЗрдкреБрдЧреНрджрд╛, рд╣рд╛рдореАрд▓реЗ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдПрдЙрдЯреИ рд╡рд╛рд▓реЗрдЯ (рд╣рдЯрд╡рд╛рд▓реЗрдЯ) рдорд╛ рдкрдард╛рдЙрдиреБ рдкрд░реНрдЫред

рдирд┐рдореНрди рдЦрдгреНрдбрд╣рд░реВрдорд╛, рдо CREATE2 рдмрд┐рдирд╛ рдпреЛ рд╕рдорд╕реНрдпрд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рд╡рд┐рдХрд▓реНрдкрд╣рд░реВрдХреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЧрд░реНрдЫреБ рд░ рд╣рд╛рдореАрд▓реЗ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдХрд┐рди рддреНрдпрд╛рдЧреНрдпреМрдВ рднрдиреЗрд░ рдмрддрд╛рдЙрдБрдЫреБред рдпрджрд┐ рддрдкрд╛рдЗрдБ рдЕрдиреНрддрд┐рдо рдирддрд┐рдЬрд╛рдорд╛ рдорд╛рддреНрд░ рд░реБрдЪрд┐ рд░рд╛рдЦреНрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдЗрдБ рдпрд╕рд▓рд╛рдИ "рдЕрдиреНрддрд┐рдо рд╕рдорд╛рдзрд╛рди" рд╕реЗрдХреНрд╕рдирдорд╛ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

рдЗрдерд░рд┐рдпрдо рдареЗрдЧрд╛рдирд╛рд╣рд░реВ

рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдирдпрд╛рдБ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдирдпрд╛рдБ Ethereum рдареЗрдЧрд╛рдирд╛рд╣рд░реВ рдЙрддреНрдкрдиреНрди рдЧрд░реНрди рд╣реЛред рдпреА рдареЗрдЧрд╛рдирд╛рд╣рд░реВ рд╡рд╛рд▓реЗрдЯрд╣рд░реВ рд╣реБрдиреЗрдЫрдиреНред рд╡рд╛рд▓реЗрдЯрдмрд╛рдЯ рд╣рдЯрд╡рд╛рд▓реЗрдЯрдорд╛ рдЯреЛрдХрдирд╣рд░реВ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрди, рддрдкрд╛рдИрдВрд▓реЗ рдкреНрд░рдХрд╛рд░реНрдпрд▓рд╛рдИ рдХрд▓ рдЧрд░реЗрд░ рд▓реЗрдирджреЗрдирдорд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг() рдмреНрдпрд╛рдХрдЗрдиреНрдбрдмрд╛рдЯ рд╡рд╛рд▓реЗрдЯрдХреЛ рдирд┐рдЬреА рдХреБрдЮреНрдЬреАрд╕рдБрдЧред

рдпреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдирд┐рдореНрди рдлрд╛рдЗрджрд╛рд╣рд░реВ рдЫрдиреН:

  • рдпреЛ рд╕рд░рд▓ рдЫ
  • рд╡рд╛рд▓реЗрдЯрдмрд╛рдЯ рд╣рдЯрд╡рд╛рд▓реЗрдЯрдорд╛ рдЯреЛрдХрдирд╣рд░реВ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрдиреЗ рд▓рд╛рдЧрдд рдлрдВрдХреНрд╢рди рдХрд▓рдХреЛ рд▓рд╛рдЧрдд рдмрд░рд╛рдмрд░ рд╣реБрдиреНрдЫ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг()

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

рдбрд┐рдкреНрд▓реЛрдЗрдореЗрдиреНрдЯ рдЕрдШрд┐ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдзрдХреЛ рдареЗрдЧрд╛рдирд╛ рдХрд╕рд░реА рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрдиреЗ: рдХреНрд░рд┐рдкреНрдЯреЛ рдПрдХреНрд╕рдЪреЗрдиреНрдЬрдХреЛ рд▓рд╛рдЧрд┐ CREATE2 рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ

рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдЫреБрдЯреНрдЯреИ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН

рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдЫреБрдЯреНрдЯреИ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рдбрд┐рдкреНрд▓реЛрдп рдЧрд░реНрдирд╛рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рд╕рд░реНрднрд░рдорд╛ рд╡рд╛рд▓реЗрдЯрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдирд┐рдЬреА рдХреБрдЮреНрдЬреАрд╣рд░реВ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрдирдмрд╛рдЯ рдмрдЪреНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рдПрдХреНрд╕рдЪреЗрдиреНрдЬрд▓реЗ рдЯреЛрдХрдирд╣рд░реВрд▓рд╛рдИ рд╣рдЯрд╡рд╛рд▓реЗрдЯрдорд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрди рдпреЛ рд╕реНрдорд╛рд░реНрдЯ рд╕рдореНрдЭреМрддрд╛рд▓рд╛рдИ рдХрд▓ рдЧрд░реНрдиреЗрдЫред

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

Opcode CREATE2

рдЕрдШрд┐рд▓реНрд▓реЛ рд╡рд┐рдзрд┐рдХреЛ рд╕рдорд╕реНрдпрд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди, рд╣рд╛рдореАрд▓реЗ CREATE2 opcode рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реНрдпреМрдВред CREATE2 рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдареЗрдЧрд╛рдирд╛ рдкреВрд░реНрд╡-рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ рдЬрд╣рд╛рдБ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рддреИрдирд╛рдд рдЧрд░рд┐рдиреЗрдЫред рдареЗрдЧрд╛рдирд╛ рдирд┐рдореНрди рд╕реВрддреНрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЧрдгрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдЫ:

keccak256 (0xff ++ address ++ salt ++ keccak256 (init_code)) [12:]


рдХрд╣рд╛рдБ:

  • рдареЗрдЧрд╛рдирд╛ - CREATE2 рд▓рд╛рдИ рдХрд▓ рдЧрд░реНрдиреЗ рд╕реНрдорд╛рд░реНрдЯ рд╕рдореНрдЭреМрддрд╛рдХреЛ рдареЗрдЧрд╛рдирд╛
  • рдирдордХ - рдЕрдирд┐рдпрдорд┐рдд рдореВрд▓реНрдп
  • init_code - рдкрд░рд┐рдирд┐рдпреЛрдЬрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рдмрд╛рдЗрдЯрдХреЛрдб

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

  • рдареЗрдЧрд╛рдирд╛ рд╕реВрддреНрд░рдорд╛ рд╕реНрдерд┐рд░ рдЫ, рдХрд┐рдирдХрд┐ рдпреЛ рд╣рд╛рдореНрд░реЛ рд╡рд╛рд▓реЗрдЯ рдХрд╛рд░рдЦрд╛рдирд╛рдХреЛ рдареЗрдЧрд╛рдирд╛ рд╣реЛ
  • рдирдордХ - user_id рд╣реНрдпрд╛рд╕
  • init_code рд╣рд╛рдореА рдПрдЙрдЯреИ рд╡рд╛рд▓реЗрдЯ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрд╛ рд╕реНрдерд┐рд░ рдЫ

рдердк рд╕реБрдзрд╛рд░рд╣рд░реВ

рдЕрдШрд┐рд▓реНрд▓реЛ рд╕рдорд╛рдзрд╛рдирдорд╛ рдЕрдЭреИ рдкрдирд┐ рдПрдЙрдЯрд╛ рдХрдордЬреЛрд░реА рдЫ: рддрдкрд╛рдИрдВрд▓реЗ рд╕реНрдорд╛рд░реНрдЯ рд╕рдореНрдЭреМрддрд╛ рд▓рд╛рдЧреВ рдЧрд░реНрди рддрд┐рд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рддрд░, рддрдкрд╛рдИрдВ рдпрд╕рдмрд╛рдЯ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдпреЛ рдЧрд░реНрди рдХреЛ рд▓рд╛рдЧреА рддрдкрд╛рдЗрдБ рдкреНрд░рдХрд╛рд░реНрдп рдХрд▓ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг()рд░ рддреНрдпрд╕рдкрдЫрд┐ рдЖрддреНрдо рд╡рд┐рдирд╛рд╢ () рд╡рд╛рд▓реЗрдЯ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░рдорд╛ред рд░ рддреНрдпрд╕рдкрдЫрд┐ рд╕реНрдорд╛рд░реНрдЯ рдареЗрдХреНрдХрд╛ рдкреНрд░рдпреЛрдЧрдХреЛ рд▓рд╛рдЧрд┐ рдЧреНрдпрд╛рд╕ рдлрд┐рд░реНрддрд╛ рдЧрд░рд┐рдиреЗрдЫред

рд▓реЛрдХрдкреНрд░рд┐рдп рд╡рд┐рд╢реНрд╡рд╛рд╕рдХреЛ рд╡рд┐рдкрд░рд┐рдд, рддрдкрд╛рдИрдВрд▓реЗ CREATE2 opcode рдХреЛ рд╕рд╛рде рдПрдЙрдЯреИ рдареЗрдЧрд╛рдирд╛рдорд╛ рдзреЗрд░реИ рдкрдЯрдХ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рддреИрдирд╛рдд рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдпреЛ рдХрд┐рдирднрдиреЗ CREATE2 рд▓реЗ рд▓рдХреНрд╖реНрдп рдареЗрдЧрд╛рдирд╛рдХреЛ рд╢реВрдиреНрдп рдЫ рднрдиреЗрд░ рдЬрд╛рдБрдЪ рдЧрд░реНрджрдЫ (рдпрд╕рд▓рд╛рдИ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░рдХреЛ рд╕реБрд░реБрдорд╛ "1" рдорд╛рди рддреЛрдХрд┐рдПрдХреЛ рдЫ)ред рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рд╕рдорд╛рд░реЛрд╣ рдЖрддреНрдо рд╡рд┐рдирд╛рд╢ () рд╣рд░реЗрдХ рдкрдЯрдХ nonce рдареЗрдЧрд╛рдирд╛рд╣рд░реВ рд░рд┐рд╕реЗрдЯ рдЧрд░реНрджрдЫред рддреНрдпрд╕реЛрднрдП рдпрджрд┐ рддрдкрд╛рдИрд▓реЗ CREATE2 рд▓рд╛рдИ рдЙрд╣реА рдЖрд░реНрдЧреБрдореЗрдиреНрдЯрд╣рд░реВрд╕рдБрдЧ рдлреЗрд░рд┐ рдХрд▓ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рдирдиреНрд╕ рдЪреЗрдХ рдкрд╛рд╕ рд╣реБрдиреЗрдЫред

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рдпреЛ рд╕рдорд╛рдзрд╛рди Ethereum рдареЗрдЧрд╛рдирд╛ рд╡рд┐рдХрд▓реНрдк рдЬрд╕реНрддреИ рдЫ, рддрд░ рдирд┐рдЬреА рдХреБрдЮреНрдЬреАрд╣рд░реВ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХрддрд╛ рдмрд┐рдирд╛ред рд╡рд╛рд▓реЗрдЯрдмрд╛рдЯ рд╣рдЯрд╡рд╛рд▓реЗрдЯрдорд╛ рдкреИрд╕рд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдгрдХреЛ рд▓рд╛рдЧрдд рд▓рдЧрднрдЧ рдПрдХ рдкреНрд░рдХрд╛рд░реНрдп рдХрд▓ рдЧрд░реНрдиреЗ рд▓рд╛рдЧрдд рдмрд░рд╛рдмрд░ рд╣реБрдиреНрдЫред рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг(), рдХрд┐рдирдХрд┐ рд╣рд╛рдореАрд▓реЗ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рдкрд░рд┐рдирд┐рдпреЛрдЬрдирдХреЛ рд▓рд╛рдЧрд┐ рднреБрдХреНрддрд╛рди рдЧрд░реНрджреИрдиреМрдВред

рдЕрдиреНрддрд┐рдо рдирд┐рд░реНрдгрдп

рдбрд┐рдкреНрд▓реЛрдЗрдореЗрдиреНрдЯ рдЕрдШрд┐ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдзрдХреЛ рдареЗрдЧрд╛рдирд╛ рдХрд╕рд░реА рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрдиреЗ: рдХреНрд░рд┐рдкреНрдЯреЛ рдПрдХреНрд╕рдЪреЗрдиреНрдЬрдХреЛ рд▓рд╛рдЧрд┐ CREATE2 рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ

рдореВрд▓рддрдГ рджреНрд╡рд╛рд░рд╛ рддрдпрд╛рд░:

  • ╤Д╤Г╨╜╨║╤Ж╨╕╤П ╨┤╨╗╤П ╨┐╨╛╨╗╤Г╤З╨╡╨╜╨╕╤П ╤Б╨╛╨╗╨╕ ╨┐╨╛ USER_ID
  • рдЙрдкрдпреБрдХреНрдд рдиреБрди (рдЬрд╕реНрддреИ рд╡рд╛рд▓реЗрдЯ рдХрд╛рд░рдЦрд╛рдирд╛) рд╕рдВрдЧ CREATE2 opcode рд▓рд╛рдИ рдХрд▓ рдЧрд░реНрдиреЗ рд╕реНрдорд╛рд░реНрдЯ рд╕рдореНрдЭреМрддрд╛
  • рд╡рд╛рд▓реЗрдЯ рдмрд╛рдЗрдЯрдХреЛрдб рдирд┐рдореНрди рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░рд╕рдБрдЧрдХреЛ рд╕рдореНрдЭреМрддрд╛ рдЕрдиреБрд░реВрдк:

constructor () {
    address hotWallet = 0xтАж;
    address token = 0xтАж;
    token.transfer (hotWallet, token.balanceOf (address (this)));
    selfdestruct (address (0));
}


рдкреНрд░рддреНрдпреЗрдХ рдирдпрд╛рдБ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдЧрдгрдирд╛ рджреНрд╡рд╛рд░рд╛ рдЙрд╕рдХреЛ рд╡рд╛рд▓реЗрдЯ рдареЗрдЧрд╛рдирд╛ рджреЗрдЦрд╛рдЙрдБрдЫреМрдВ

keccak256 (0xff ++ address ++ salt ++ keccak256 (init_code)) [12:]


рдЬрдм рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓реЗ рдЯреЛрдХрдирд╣рд░реВ рд╕рдореНрдмрдиреНрдзрд┐рдд рд╡рд╛рд▓реЗрдЯ рдареЗрдЧрд╛рдирд╛рдорд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрджрдЫ, рд╣рд╛рдореНрд░реЛ рдмреНрдпрд╛рдХрдПрдиреНрдбрд▓реЗ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рдХреЛ рд╕рд╛рде рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдШрдЯрдирд╛ рджреЗрдЦреНрдЫред _ рд▓рд╛рдИ, рд╡рд╛рд▓реЗрдЯ рдареЗрдЧрд╛рдирд╛ рдмрд░рд╛рдмрд░ред рдпрд╕ рдмрд┐рдиреНрджреБрдорд╛, рд╡рд╛рд▓реЗрдЯ рдбрд┐рдкреНрд▓реЛрдЗ рдЧрд░реНрдиреБ рдЕрдШрд┐ рдПрдХреНрд╕рдЪреЗрдиреНрдЬрдорд╛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рдмреНрдпрд╛рд▓реЗрдиреНрд╕ рдмрдврд╛рдЙрди рд╕рдореНрднрд╡ рдЫред

рдЬрдм рд╡рд╛рд▓реЗрдЯ рдареЗрдЧрд╛рдирд╛рд▓реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╕рдВрдЦреНрдпрд╛рдорд╛ рдЯреЛрдХрдирд╣рд░реВ рдЬрдореНрдорд╛ рдЧрд░реНрдЫ, рд╣рд╛рдореА рддреА рд╕рдмреИрд▓рд╛рдИ рдПрдХреИ рдкрдЯрдХ рд╣рдЯрд╡рд╛рд▓реЗрдЯрдорд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рдмреНрдпрд╛рдХрдЗрдиреНрдбрд▓реЗ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рдХрд╛рд░рдЦрд╛рдирд╛ рдкреНрд░рдХрд╛рд░реНрдпрд▓рд╛рдИ рдХрд▓ рдЧрд░реНрджрдЫ, рдЬрд╕рд▓реЗ рдирд┐рдореНрди рдХрд╛рд░реНрдпрд╣рд░реВ рдЧрд░реНрджрдЫ:

function deployWallet (╤Б╨╛╨╗╤М uint256) {
    bytes memory walletBytecode =тАж;
    // invoke CREATE2 with wallet bytecode and salt
}


рдпрд╕рд░реА, рд╡рд╛рд▓реЗрдЯ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рднрдирд┐рдиреНрдЫ, рдЬрд╕рд▓реЗ рдЖрдлреНрдирд╛ рд╕рдмреИ рдЯреЛрдХрдирд╣рд░реВрд▓рд╛рдИ рд╣рдЯрд╡рд╛рд▓реЗрдЯ рдареЗрдЧрд╛рдирд╛рдорд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрдЫ рд░ рддреНрдпрд╕рдкрдЫрд┐ рдЖрддреНрдо-рд╡рд┐рдирд╛рд╢ рдЧрд░реНрдЫред

рдкреВрд░рд╛ рдХреЛрдб рдкрд╛рдЙрди рд╕рдХрд┐рдиреНрдЫ рдпрд╣рд╛рдБред рдХреГрдкрдпрд╛ рдиреЛрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН рдХрд┐ рдпреЛ рд╣рд╛рдореНрд░реЛ рдЙрддреНрдкрд╛рджрди рдХреЛрдб рд╣реЛрдЗрди, рдХрд┐рдирдХрд┐ рд╣рд╛рдореАрд▓реЗ рд╡рд╛рд▓реЗрдЯ рдмрд╛рдЗрдЯрдХреЛрдбрд▓рд╛рдИ рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬ рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реНрдпреМрдВ рд░ рдпрд╕рд▓рд╛рдИ opcodes рдорд╛ рд▓реЗрдЦреНрдпреМрдВред

рд▓реЗрдЦрдХ рдкрд╛рд╡реЗрд▓ Kondratenkov, Ethereum рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди