рддреИрдирд╛рддреАрдкреВрд░реНрд╡реА рд╕реНрдорд╛рд░реНрдЯ рдХрд░рд╛рд░рд╛рдЪрд╛ рдкрддреНрддрд╛ рдХрд╕рд╛ рдард░рд╡рд╛рдпрдЪрд╛: рдХреНрд░рд┐рдкреНрдЯреЛ рдПрдХреНрд╕рдЪреЗрдВрдЬрд╕рд╛рдареА CREATE2 рд╡рд╛рдкрд░рдгреЗ

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

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

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

рдЦрд╛рд▓реАрд▓ рд╡рд┐рднрд╛рдЧрд╛рдВрдордзреНрдпреЗ, рдореА 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" рдореВрд▓реНрдп рдирд┐рдпреБрдХреНрдд рдХреЗрд▓реЗ рдЖрд╣реЗ). рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рдХрд╛рд░реНрдп рд╕реНрд╡рдд:рдЪрд╛ рд╡рд┐рдирд╛рд╢() рдкреНрд░рддреНрдпреЗрдХ рд╡реЗрд│реА рдЧреИрд░ рдкрддреНрддреЗ рд░реАрд╕реЗрдЯ рдХрд░рддреЗ. рддреНрдпрд╛рдореБрд│реЗ рддреБрдореНрд╣реА рддреНрдпрд╛рдЪ рдпреБрдХреНрддрд┐рд╡рд╛рджрд╛рдВрд╕рд╣ CREATE2 рд▓рд╛ рдкреБрдиреНрд╣рд╛ рдХреЙрд▓ рдХреЗрд▓реНрдпрд╛рд╕, рдиреЙрдирд╕ рдЪреЗрдХ рдкрд╛рд╕ рд╣реЛрдИрд▓.

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

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

рддреИрдирд╛рддреАрдкреВрд░реНрд╡реА рд╕реНрдорд╛рд░реНрдЯ рдХрд░рд╛рд░рд╛рдЪрд╛ рдкрддреНрддрд╛ рдХрд╕рд╛ рдард░рд╡рд╛рдпрдЪрд╛: рдХреНрд░рд┐рдкреНрдЯреЛ рдПрдХреНрд╕рдЪреЗрдВрдЬрд╕рд╛рдареА 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 рдордзреНрдпреЗ рд▓рд┐рд╣рд┐рд▓рд╛.

рд▓реЗрдЦрдХ рдкрд╛рд╡реЗрд▓ рдХреЛрдиреНрдбреНрд░рд╛рдЯреЗрдиреНрдХреЛрд╡реНрд╣, рдЗрдерд░рд┐рдпрдо рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ

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

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