ื ืืฉื ืืืืืงืฆ'ืืื ืื ืืคืกืืง ืืืืืช ืืงืืจ ืื ืจืง ืืื ืืื ื ืืืืค, ืืื ืื ืืจืขืืื ืืช ืืขืื ืขืจื ืจื ืืืืื ื ืืื ืืืืืืช. ืืื, ืืื ืื ืขืงืคื ืืช ืชืืฉืื ืืขืืจ ืฉืืืคืช ืืฉืืฉ. ืื ืฉืื ืืกืชืืืื ืืงืจืื, ืืืืืื, ืื ืกืื ืืืขืืืจ ืืช ืืืืืืืืช ืฉืืื ืืืืืจ ืืืืืข ืืืกืืจืชื ืืืขืจืืืช ืืืืงืฆ'ืืื. ืขื ืื, ื ืงืืืชืืช: ืืื ืืคืืชืืืื ืฉื Rostelecom-Solar ืืกืืื ืืืืืง ืืช ืืืืืช ืืชืืื ื ืืืืืกืกืช ืขื ืืืืืงืฆ'ืืื. ืืขื ืืืจื ืขืืืืช ืืื ืืืฉืืืช ืขื ืคืชืจืื ืืขืืืช ืืืฉืืืืืช ืฉื ืงืืืืช ืืืืืงืฆ'ืืื. ืืืช ืืืคืจืืฆืืช ืืืืื ืืืื - ืืื ืืงืืืข ืืช ืืืชืืืช ืฉื ืืืื ืืื ืืคื ื ืคืจืืกื ืืืืฆืขืืช CREATE2 - ืืืื ืื ื ืจืืฆื ืืฉืชืฃ ืืชืื ืืืชื.
ืงืื ื-CREATE2 ืืชืืืกืฃ ืืืืื ืืงืฉืื ืฉื ืงืื ืกืื ืืื ืืคืื ื-28 ืืคืืจืืืจ ืืฉื ื. ืืคื ืฉืฆืืื ื-EIP, ืงืื ืื ืืืฆื ืืขืืงืจ ืขืืืจ ืขืจืืฆื ืืืืื ื. ืขื ืืืช, ืืฉืชืืฉื ื ืื ืืื ืืคืชืืจ ืืขืื ืืืจืช.
ืืฉื ื ืืฉืชืืฉืื ืขื ืืชืจืืช ืืืืจืกื. ืขืืื ื ืืกืคืง ืืื ืืฉืชืืฉ ืืชืืืช Ethereum, ืฉืืืื ืื ืืื ืืืื ืืฉืืื ืืกืืืื ืื, ืืืื ืืืืฉ ืืช ืืฉืืื ื. ืืืื ื ืงืจื ืืืชืืืืช ืืื "ืืจื ืงืื". ืืืฉืจ ืืกืืืื ืื ืืืืขืื ืืืจื ืงืื, ืขืืื ื ืืฉืืื ืืืชื ืืืจื ืง ืืืื (hotwallet).
ืืกืขืืคืื ืืืืื, ืื ื ืื ืชื ืืคืฉืจืืืืช ืืคืชืจืื ืืขืื ืื ืืื CREATE2 ืืืกืืืจ ืืืืข ื ืืฉื ื ืืืชื. ืื ืืชื ืืขืื ืืื ืจืง ืืชืืฆืื ืืกืืคืืช, ืชืืื ืืืฆืื ืืืชื ืืกืขืืฃ ืืคืชืจืื ืืกืืคื.
ืืชืืืืช Ethereum
ืืคืชืจืื ืืคืฉืื ืืืืชืจ ืืื ืืืฆืืจ ืืชืืืืช ืืชืจืื ืืืฉืืช ืขืืืจ ืืฉืชืืฉืื ืืืฉืื. ืืืชืืืืช ืืืื ืืืื ืืืจื ืงืื. ืืื ืืืขืืืจ ืืกืืืื ืื ืืืืจื ืง ื-hotwallet, ืขืืื ืืืชืื ืขื ืืขืกืงื ืขื ืืื ืงืจืืื ืืคืื ืงืฆืื ืึฐืึทืขึฒืึดืืจ() ืขื ืืืคืชื ืืคืจืื ืฉื ืืืจื ืง ืืืืืง ืืืืืจื.
ืืืืฉื ืื ืืฉ ืืช ืืืชืจืื ืืช ืืืืื:
- ืื ืคืฉืื
- ืขืืืช ืืขืืจืช ืืืกืืืื ืื ืืืจื ืง ื-hotwallet ืฉืืื ืืขืืืช ืืงืจืืื ืืคืื ืงืฆืื ืึฐืึทืขึฒืึดืืจ()
ืขื ืืืช, ื ืืฉื ื ืืช ืืืืฉื ืืื ืืืืืื ืฉืืฉ ืื ืืืกืจืื ืืื ืืฉืืขืืชื: ืืชื ืฆืจืื ืืืืกื ืืคืชืืืช ืคืจืืืื ืืืคืฉืื. ืืื ืื ืจืง ืฉืื ืืืืืื ืืืืช ืืืืืื, ืืื ืื ืฉืืชื ืฆืจืื ืื ืื ืืงืคืืื ืืช ืืืืฉื ืืืคืชืืืช ืืืื. ืื ืืคืืืช ืืื ืืื ื ืคืืข, ืื ืืืกืืืื ืื ืฉื ืืฉืชืืฉ ืืกืืื ืื ืืืืขื ืืืจื ืง ืืื.
ืฆืืจ ืืืื ืืื ื ืคืจื ืืื ืืฉืชืืฉ
ืคืจืืกืช ืืืื ืืื ื ืคืจื ืืื ืืฉืชืืฉ ืืืคืฉืจืช ืื ืืืืกื ืืคืชืืืช ืคืจืืืื ืืืจื ืงืื ืืฉืจืช. ืืืืจืกื ืชืงืจื ืืืืื ืืืื ืืื ืืื ืืืขืืืจ ืืช ืืืกืืืื ืื ื-hotwallet.
ืื ืืช ืืคืชืจืื ืืื ื ืืฉื ื, ืฉืื ืื ื ืืชื ืืืฆืื ืืืฉืชืืฉ ืืช ืืชืืืช ืืืจื ืง ืฉืื ืืืื ืืคืจืืก ืืืื ืืื (ืื ืืืืงื ืืคืฉืจื, ืืื ืืฆืืจื ืื ืืกืืืืช ืขื ืืกืจืื ืืช ื ืืกืคืื ืฉืื ื ืืื ืืื ืืื). ืืืืจืกื, ืืืฉืชืืฉ ืืืื ืืืฆืืจ ืืื ืืฉืืื ืืช ืฉืืื ืฆืจืื, ืืื ืืื ืฆืจืื ืืช ืืืจื ืง ืฉืื. ืื ืืืืจ ืฉืื ืื ื ืฆืจืืืื ืืืืฆืื ืืกืฃ ืขื ืคืจืืกืช ืืืื ืืคืืื ืืื ืืืืืช ืืืืืื ืฉืืืฉืชืืฉ ืืฉืชืืฉ ืืืฉืืื ืืื.
Opcode CREATE2
ืืื ืืชืงื ืืช ืืืขืื ืฉื ืืฉืืื ืืงืืืืช, ืืืืื ื ืืืฉืชืืฉ ืืงืื CREATE2. CREATE2 ืืืคืฉืจ ืื ืืงืืืข ืืจืืฉ ืืช ืืืชืืืช ืฉืื ืืชืคืจืก ืืืืื ืืืื. ืืืชืืืช ืืืืฉืืช ืืืืฆืขืืช ืื ืืกืื ืืืื:
keccak256 (0xff ++ address ++ salt ++ keccak256 (init_code)) [12:]
, ืฉืื
- ืืชืืืช - ืืชืืืช ืืืืื ืืืื ืฉืืงืจื CREATE2
- ืืื - ืขืจื ืืงืจืื
- init_code - ืงืื ืืืช ืืืื ืืื ืืคืจืืกื
ืื ืืืืื ืฉืืืชืืืช ืฉืื ื ืืกืคืงืื ืืืฉืชืืฉ ืชืืื ืืืขืฉื ืืช ืงืื ืืืืืื ืืจืฆืื. ืืื ืื, ื ืืชื ืืคืจืืก ืืช ืืืืื ืืืื ืืื ืืื ืคืขื ืฉื ืฆืืจื. ืืืืืื, ืืืฉืจ ืืฉืชืืฉ ืืืืื ืืืฉืชืืฉ ืืืจื ืงื ืืคืขื ืืจืืฉืื ื.
ืืชืจ ืขื ืื, ืืชื ืืืื ืืืฉื ืืช ืืชืืืช ืืืืื ืืืื ืืื ืคืขื ืืืงืื ืืืืกื ืืืชื, ืืืืืื:
- ืืชืืืช ืื ืืกืื ืงืืืขื ืฉืื ืืื ืืืชืืืช ืฉื ืืคืขื ืืืจื ืงืื ืฉืื ื
- ืืื - hash ืฉื user_id
- init_code ืืื ืงืืืข ืืืืืื ืฉืื ื ืืฉืชืืฉืื ืืืืชื ืืจื ืง
ืขืื ืฉืืคืืจืื
ืืคืชืจืื ืืงืืื ืขืืืื ืืฉ ืืืกืจืื ืืื: ืืชื ืฆืจืื ืืฉืื ืขืืืจ ืคืจืืกืช ืืืืื ืืืื. ืขื ืืืช, ืืชื ืืืื ืืืืคืืจ ืืื ื. ืืฉืืื ืื ืืชื ืืืื ืืงืจืื ืืคืื ืงืฆืื ืึฐืึทืขึฒืึดืืจ()ืืื ืืฉืืื ืขืฆืืืช() ืืงืื ืกืืจืืงืืืจ ืืืจื ืง. ืืื ืืืืืจ ืืื ืืคืจืืกืช ืืืืื ืืืื.
ืื ืืืื ืืืืื ื ืืจืืืืช, ืืชื ืืืื ืืคืจืืก ืืืื ืืื ืืืืชื ืืชืืืช ืืกืคืจ ืคืขืืื ืขื ืงืื CREATE2. ืืกืืื ืืื ืืื ืฉ-CREATE2 ืืืืง ืฉืืื-ื ืื ืก ืฉื ืืชืืืช ืืืขื ืืื ืืคืก (ืืืงืฆื ืื ืืขืจื "1" ืืชืืืืช ืืื ืื). ืืืงืืื, ืืคืื ืงืฆืื ืืฉืืื ืขืฆืืืช() ืืืคืก ืืช ืืชืืืช ื-nonce ืืื ืคืขื. ืืคืืื, ืื ืชืชืงืฉืจ ืฉืื ื-CREATE2 ืขื ืืืชื ืืจืืืื ืืื, ืืืืงืช ื-nonce ืชืขืืืจ.
ืฉืืื ืื ืฉืคืชืจืื ืื ืืืื ืืคืชืจืื ืืชืืืช ืืืชืจืืื, ืื ืืื ืฆืืจื ืืืืกืื ืืคืชืืืช ืคืจืืืื. ืขืืืช ืืขืืจืช ืืืกืฃ ืืืจื ืง ื-hotwallet ืฉืืื ืืขืจื ืืขืืืช ืืงืจืืื ืืคืื ืงืฆืื ืึฐืึทืขึฒืึดืืจ(), ืืืืจ ืฉืืื ื ื ืืฉืืืื ืขื ืคืจืืกืช ืืืืื ืืืื.
ืืืืื ืกืืคืืช
ืืื ื ืจืืฉืื ืืช:
- ืืชืคืงื ืืื ืืงืื ืืื ืขื ืืื 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:]
ืืืฉืจ ืืืฉืชืืฉ ืืขืืืจ ืืกืืืื ืื ืืืชืืืช ืืืจื ืง ืืืชืืืื, ืืงืฆื ืืขืืจืคื ืฉืื ื ืจืืื ืืช ืืืจืืข ืืขืืจื ืขื ืืคืจืืืจ _ืืฉืืื ืืืชืืืช ืืืจื ืง. ืืฉืื ืื ืืืจ ื ืืชื ืืืืืื ืืช ืืชืจืช ืืืฉืชืืฉ ืืืืจืกื ืืคื ื ืคืจืืกืช ืืืจื ืง.
ืืืฉืจ ืืกืคืืง ืืกืืืื ืื ืืฆืืืจืื ืืืชืืืช ืืืจื ืง, ื ืืื ืืืขืืืจ ืืช ืืืื ืืืช ืืืช ื-hotwallet. ืืฉื ืื, ืืงืฆื ืืืืืจื ืงืืจื ืืคืื ืงืฆืืืช ืืคืขื ืืืืื ืืืื, ืืฉืจ ืืืฆืขืช ืืช ืืคืขืืืืช ืืืืืช:
function deployWallet (ัะพะปั uint256) {
bytes memory walletBytecode =โฆ;
// invoke CREATE2 with wallet bytecode and salt
}
ืืคืืื, ื ืงืจื ืืื ื ืืืืื ืืืื ืฉื ืืืจื ืง, ืืฉืจ ืืขืืืจ ืืช ืื ืืืกืืืื ืื ืฉืื ืืืชืืืช ื-hotwallet ืืื ืืฉืืื ืืช ืขืฆืื.
ื ืืชื ืืืฆืื ืืช ืืงืื ืืืื
ืืกืืคืจ ืคืืื ืงืื ืืจืื ืงืื, ืืืืื ื-Ethereum
ืืงืืจ: www.habr.com