Π’Π΅ΠΌΠ° Π±Π»ΠΎΠΊΡΠ΅ΠΉΠ½Π° Π½Π΅ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π΅Ρ Π±ΡΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠΌ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π²ΡΡΡΠ΅ΡΠΊΠΎΠ³ΠΎ Ρ Π°ΠΉΠΏΠ°, Π½ΠΎ ΠΈ Π²Π΅ΡΡΠΌΠ° ΡΠ΅Π½Π½ΡΡ Ρ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΈΠ΄Π΅ΠΉ. ΠΠΎΡΠ΅ΠΌΡ Π½Π΅ ΠΎΠ±ΠΎΡΠ»Π° ΠΎΠ½Π° ΡΡΠΎΡΠΎΠ½ΠΎΠΉ ΠΈ ΠΆΠΈΡΠ΅Π»Π΅ΠΉ ΡΠΎΠ»Π½Π΅ΡΠ½ΠΎΠ³ΠΎ Π³ΠΎΡΠΎΠ΄Π°. ΠΡΠΈΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ Π»ΡΠ΄ΠΈ, ΠΈΠ·ΡΡΠ°ΡΡ, ΠΏΡΡΠ°ΡΡΡΡ ΠΏΠ΅ΡΠ΅Π»ΠΎΠΆΠΈΡΡ ΡΠ²ΠΎΡ ΡΠΊΡΠΏΠ΅ΡΡΠΈΠ·Ρ Π² ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎΠΌ ΠΈΠ½ΡΠΎΠ±Π΅Π·Π΅ Π½Π° Π±Π»ΠΎΠΊΡΠ΅ΠΉΠ½-ΡΠΈΡΡΠ΅ΠΌΡ. ΠΠΎΠΊΠ° ΡΡΠΎ ΡΠΎΡΠ΅ΡΠ½ΠΎ: ΠΎΠ΄Π½Π° ΠΈΠ· ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΎΠΊ Β«Π ΠΎΡΡΠ΅Π»Π΅ΠΊΠΎΠΌ-Π‘ΠΎΠ»Π°ΡΒ» ΡΠΌΠ΅Π΅Ρ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΡΠΎΡΡΠ° Π½Π° Π±Π°Π·Π΅ Π±Π»ΠΎΠΊΡΠ΅ΠΉΠ½Π°. Π ΠΏΠΎΠΏΡΡΠ½ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡΡΠ»ΠΈ ΠΏΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΡΡ Π·Π°Π΄Π°Ρ Π±Π»ΠΎΠΊΡΠ΅ΠΉΠ½-ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π°. ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ°ΠΊΠΈΡ Π»Π°ΠΉΡΡ Π°ΠΊΠΎΠ² β ΠΊΠ°ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π°Π΄ΡΠ΅Ρ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ° Π΄ΠΎ Π΄Π΅ΠΏΠ»ΠΎΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ CREATE2 β ΡΠ΅Π³ΠΎΠ΄Π½Ρ Ρ ΠΎΡΡ Ρ Π²Π°ΠΌΠΈ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ ΠΏΠΎΠ΄ ΠΊΠ°ΡΠΎΠΌ.
ΠΠΏΠΊΠΎΠ΄ CREATE2 Π±ΡΠ» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² Ρ
Π°ΡΠ΄-ΡΠΎΡΠΊΠ΅ ΠΠΎΠ½ΡΡΠ°Π½ΡΠΈΠ½ΠΎΠΏΠΎΠ»Ρ 28 ΡΠ΅Π²ΡΠ°Π»Ρ ΡΡΠΎΠ³ΠΎ Π³ΠΎΠ΄Π°. ΠΠ°ΠΊ ΡΠΊΠ°Π·Π°Π½ΠΎ Π² EIP, ΡΡΠΎΡ ΠΎΠΏΠΊΠΎΠ΄ Π±ΡΠ» Π²Π²Π΅Π΄Π΅Π½ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π΄Π»Ρ ΠΊΠ°Π½Π°Π»ΠΎΠ² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ (state channels). ΠΠ΄Π½Π°ΠΊΠΎ, ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π΅Π³ΠΎ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
ΠΠ° Π±ΠΈΡΠΆΠ΅ Π΅ΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ Ρ Π±Π°Π»Π°Π½ΡΠ°ΠΌΠΈ. ΠΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ Ethereum-Π°Π΄ΡΠ΅Ρ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΠΊΡΠΎ ΡΠ³ΠΎΠ΄Π½ΠΎ ΡΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠΎΠΊΠ΅Π½Ρ, ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΠΏΠΎΠΏΠΎΠ»Π½ΡΡ ΡΠ²ΠΎΠΉ Π°ΠΊΠΊΠ°ΡΠ½Ρ. ΠΠ°Π²Π°ΠΉΡΠ΅ Π½Π°Π·ΠΎΠ²Π΅ΠΌ ΡΡΠΈ Π°Π΄ΡΠ΅ΡΠ° Β«ΠΊΠΎΡΠ΅Π»ΡΠΊΠ°ΠΌΠΈΒ». ΠΠΎΠ³Π΄Π° ΡΠΎΠΊΠ΅Π½Ρ ΠΏΡΠΈΡ ΠΎΠ΄ΡΡ Π½Π° ΠΊΠΎΡΠ΅Π»ΡΠΊΠΈ, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ ΠΈΡ Π½Π° Π΅Π΄ΠΈΠ½ΡΠΉ ΠΊΠΎΡΠ΅Π»Π΅ΠΊ (hotwallet).
Π ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΠ°Π·Π΄Π΅Π»Π°Ρ Ρ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΡ Π²Π°ΡΠΈΠ°Π½ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ Π±Π΅Π· CREATE2 ΠΈ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Ρ, ΠΏΠΎΡΠ΅ΠΌΡ ΠΌΡ ΠΎΡΠΊΠ°Π·Π°Π»ΠΈΡΡ ΠΎΡ Π½ΠΈΡ . ΠΡΠ»ΠΈ Π²Π°ΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΉΡΠΈ Π΅Π³ΠΎ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Β«ΠΡΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅Β».
Ethereum-Π°Π΄ΡΠ΅ΡΠ°
Π‘Π°ΠΌΠΎΠ΅ ΠΏΡΠΎΡΡΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ β Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π½ΠΎΠ²ΡΠ΅ ethereum-Π°Π΄ΡΠ΅ΡΠ° Π΄Π»Ρ Π½ΠΎΠ²ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. ΠΡΠΈ Π°Π΄ΡΠ΅ΡΠ° ΠΈ Π±ΡΠ΄ΡΡ ΠΊΠΎΡΠ΅Π»ΡΠΊΠ°ΠΌΠΈ. Π§ΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ ΡΠΎΠΊΠ΅Π½Ρ ΠΈΠ· ΠΊΠΎΡΠ΅Π»ΡΠΊΠ° Π² hotwallet, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ transfer() Ρ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ ΠΊΠΎΡΠ΅Π»ΡΠΊΠ° ΠΈΠ· Π±ΡΠΊΠ΅Π½Π΄Π°.
ΠΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°:
- ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ
- ΡΡΠΎΠΈΠΌΠΎΡΡΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° ΡΠΎΠΊΠ΅Π½ΠΎΠ² Ρ ΠΊΠΎΡΠ΅Π»ΡΠΊΠ° Π½Π° hotwallet ΡΠ°Π²Π½Π° ΡΠ΅Π½Π΅ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ transfer()
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΌΡ ΠΎΡΠΊΠ°Π·Π°Π»ΠΈΡΡ ΠΎΡ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ΄ΠΈΠ½ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΉ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ: Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π³Π΄Π΅-ΡΠΎ Ρ ΡΠ°Π½ΠΈΡΡ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠ΅ ΠΊΠ»ΡΡΠΈ. Π Π΄Π΅Π»ΠΎ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠΎΡΠ΅ΡΡΠ½Ρ, Π½ΠΎ Π΅ΡΡ ΠΈ Π² ΡΠΎΠΌ, ΡΡΠΎ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ Π΄ΠΎΡΡΡΠΏΠΎΠΌ ΠΊ ΡΡΠΈΠΌ ΠΊΠ»ΡΡΠ°ΠΌ. ΠΡΠ»ΠΈ Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ ΡΠΊΠΎΠΌΠΏΡΠΎΠΌΠ΅ΡΠΈΡΠΎΠ²Π°Π½, ΡΠΎ ΡΠΎΠΊΠ΅Π½Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡ Π³ΠΎΡΡΡΠ΅Π³ΠΎ ΠΊΠΎΡΠ΅Π»ΡΠΊΠ°.
Π‘ΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
Π Π°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ° Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π΅ Ρ ΡΠ°Π½ΠΈΡΡ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠ΅ ΠΊΠ»ΡΡΠΈ ΠΎΡ ΠΊΠΎΡΠ΅Π»ΡΠΊΠΎΠ² Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅. ΠΠΈΡΠΆΠ° Π²ΡΠ·ΠΎΠ²Π΅Ρ ΡΡΠΎΡ ΡΠΌΠ½ΡΠΉ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΠΎΠΊΠ΅Π½ΠΎΠ² Π² hotwallet.
ΠΡ ΡΡΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΌΡ ΡΠΎΠΆΠ΅ ΠΎΡΠΊΠ°Π·Π°Π»ΠΈΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅Π»ΡΠ·Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ Π°Π΄ΡΠ΅Ρ Π΅Π³ΠΎ ΠΊΠΎΡΠ΅Π»ΡΠΊΠ° Π±Π΅Π· ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ° (ΡΡΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ Π·Π΄Π΅ΡΡ ΠΎΠ±ΡΡΠΆΠ΄Π°ΡΡ). ΠΠ° Π±ΠΈΡΠΆΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΠΎΠ»ΡΠΊΠΎ Π°ΠΊΠΊΠ°ΡΠ½ΡΠΎΠ², ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΅ΠΌΡ Π½ΡΠΆΠ½ΠΎ, ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ Π½ΡΠΆΠ΅Π½ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠΎΡΠ΅Π»Π΅ΠΊ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΡΠ°ΡΠΈΡΡ Π΄Π΅Π½ΡΠ³ΠΈ Π½Π° Π΄Π΅ΠΏΠ»ΠΎΠΉ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°, Π΄Π°ΠΆΠ΅ Π½Π΅ Π±ΡΠ΄ΡΡΠΈ ΡΠ²Π΅ΡΠ΅Π½Π½ΡΠΌΠΈ, ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΡ ΡΡΠ΅ΡΠ½ΡΡ Π·Π°ΠΏΠΈΡΡ.
ΠΠΏΠΊΠΎΠ΄ CREATE2
Π§ΡΠΎΠ±Ρ ΡΡΡΡΠ°Π½ΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΡΠΏΠΎΡΠΎΠ±Π°, ΠΌΡ ΡΠ΅ΡΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΠΊΠΎΠ΄ CREATE2. CREATE2 ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°ΡΠ°Π½Π΅Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π°Π΄ΡΠ΅Ρ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π±ΡΠ΄Π΅Ρ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ. ΠΠ΄ΡΠ΅Ρ ΡΠ°ΡΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠΎΡΠΌΡΠ»Π΅:
keccak256 (0xff ++ address ++ salt ++ keccak256 (init_code)) [12:]
, Π³Π΄Π΅:
- address β Π°Π΄ΡΠ΅Ρ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ CREATE2
- salt β ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
- init_code β Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ° Π΄Π»Ρ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΡΡ, ΡΡΠΎ Π°Π΄ΡΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΆΠ΅Π»Π°Π΅ΠΌΡΠΉ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎΡ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡ, ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ΅ΡΠΈΡ Π²ΠΏΠ΅ΡΠ²ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΉ ΠΊΠΎΡΠ΅Π»Π΅ΠΊ.
ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°ΡΡΡΠΈΡΡΠ²Π°ΡΡ Π°Π΄ΡΠ΅Ρ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Ρ
ΡΠ°Π½ΠΈΡΡ Π΅Π³ΠΎ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ:
- address Π² ΡΠΎΡΠΌΡΠ»Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΡΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΡΠΎ Π°Π΄ΡΠ΅Ρ Π½Π°ΡΠ΅ΠΉ ΡΠ°Π±ΡΠΈΠΊΠΈ ΠΊΠΎΡΠ΅Π»ΡΠΊΠΎΠ²
- salt β Ρ Π΅Ρ user_id
- init_code ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΡΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΊΠΎΡΠ΅Π»Π΅ΠΊ
ΠΠΎΠ»ΡΡΠ΅ ΡΠ»ΡΡΡΠ΅Π½ΠΈΠΉ
ΠΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ΄ΠΈΠ½ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ: Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠ»Π°ΡΠΈΡΡ Π·Π° ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅ ΡΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·Π±Π°Π²ΠΈΡΡΡΡ ΠΎΡ ΡΡΠΎΠ³ΠΎ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ transfer(), Π° Π·Π°ΡΠ΅ΠΌ selfdestruct() Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ ΠΊΠΎΡΠ΅Π»ΡΠΊΠ°. Π ΡΠΎΠ³Π΄Π° Π³Π°Π· Π·Π° ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ° Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½.
ΠΠΎΠΏΡΠ΅ΠΊΠΈ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΠΎΠΌΡ Π·Π°Π±Π»ΡΠΆΠ΄Π΅Π½ΠΈΡ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈ ΡΠΎΠΌΡ ΠΆΠ΅ Π°Π΄ΡΠ΅ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· Ρ ΠΎΠΏΠΊΠΎΠ΄ΠΎΠΌ CREATE2. ΠΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ CREATE2 ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΡΡΠΎ nonce ΡΠ΅Π»Π΅Π²ΠΎΠ³ΠΎ Π°Π΄ΡΠ΅ΡΠ° ΡΠ°Π²Π΅Π½ Π½ΡΠ»Ρ (Π΅ΠΌΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Β«1Β» Π² Π½Π°ΡΠ°Π»Π΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°). ΠΡΠΈ ΡΡΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΡ selfdestruct() ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ nonce Π°Π΄ΡΠ΅ΡΠ°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΅ΡΠ»ΠΈ Π²Ρ ΡΠ½ΠΎΠ²Π° Π²ΡΠ·ΠΎΠ²Π΅ΡΠ΅ CREATE2 Ρ ΡΠ΅ΠΌΠΈ ΠΆΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ, ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° nonce ΠΏΡΠΎΠΉΠ΄Π΅Ρ.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΡΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΡ Ρ ethereum-Π°Π΄ΡΠ΅ΡΠ°ΠΌΠΈ, Π½ΠΎ Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Ρ ΡΠ°Π½ΠΈΡΡ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠ΅ ΠΊΠ»ΡΡΠΈ. Π‘ΡΠΎΠΈΠΌΠΎΡΡΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° Π΄Π΅Π½Π΅Π³ Ρ ΠΊΠΎΡΠ΅Π»ΡΠΊΠ° Π½Π° hotwallet ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°Π²Π½Π° ΡΡΠΎΠΈΠΌΠΎΡΡΠΈ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ transfer(), ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ Π½Π΅ ΠΏΠ»Π°ΡΠΈΠΌ Π·Π° ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°.
ΠΡΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅
ΠΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½ΠΎ:
- ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΎΠ»ΠΈ ΠΏΠΎ user_id
- ΡΠΌΠ½ΡΠΉ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΎΠΏΠΊΠΎΠ΄ CREATE2 Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΠΎΠ»ΡΡ (Ρ.Π΅. ΡΠ°Π±ΡΠΈΠΊΠ° ΠΊΠΎΡΠ΅Π»ΡΠΊΠΎΠ²)
- Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ ΠΊΠΎΡΠ΅Π»ΡΠΊΠ°, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΡ ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠΌ:
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:]
ΠΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡ ΡΠΎΠΊΠ΅Π½Ρ Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Π°Π΄ΡΠ΅Ρ ΠΊΠΎΡΠ΅Π»ΡΠΊΠ°, Π½Π°Ρ Π±ΡΠΊΡΠ½Π΄ Π²ΠΈΠ΄ΠΈΡ ΡΠΎΠ±ΡΡΠΈΠ΅ Transfer Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ _to, ΡΠ°Π²Π½ΡΠΌ Π°Π΄ΡΠ΅ΡΡ ΠΊΠΎΡΠ΅Π»ΡΠΊΠ°. ΠΠ° ΡΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ Π±Π°Π»Π°Π½Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π° Π±ΠΈΡΠΆΠ΅ Π΄ΠΎ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ ΠΊΠΎΡΠ΅Π»ΡΠΊΠ°.
ΠΠΎΠ³Π΄Π° Π½Π° Π°Π΄ΡΠ΅ΡΠ΅ ΠΊΠΎΡΠ΅Π»ΡΠΊΠ° Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°Π΅ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΎΠΊΠ΅Π½ΠΎΠ², ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ ΠΈΡ Π²ΡΠ΅ ΡΡΠ°Π·Ρ Π² hotwallet. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π±Π΅ΠΊΠ΅Π½Π΄ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ°Π±ΡΠΈΠΊΠΈ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ:
function deployWallet (ΡΠΎΠ»Ρ uint256) {
bytes memory walletBytecode =β¦;
// invoke CREATE2 with wallet bytecode and salt
}
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΡΠΌΠ°ΡΡ-ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ° ΠΊΠΎΡΠ΅Π»ΡΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π²ΡΠ΅ ΡΠ²ΠΎΠΈ ΡΠΎΠΊΠ΅Π½Ρ Π½Π° Π°Π΄ΡΠ΅Ρ hotwallet ΠΈ Π·Π°ΡΠ΅ΠΌ ΡΠ°ΠΌΠΎΡΠ½ΠΈΡΡΠΎΠΆΠ°Π΅ΡΡΡ.
ΠΠΎΠ»Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ
ΠΠ²ΡΠΎΡ ΠΠ°Π²Π΅Π» ΠΠΎΠ½Π΄ΡΠ°ΡΠ΅Π½ΠΊΠΎΠ², ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡ Π² ΠΎΠ±Π»Π°ΡΡΠΈ Ethereum
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com