αααααΆααααα blockchain αα·ααααααααΆαααΆαααααααααΆααααααΆααααααΎααααααααααααααααα ααα»ααααααααΆααααα·αααααΆααααααααααα ααΆααααααααα αα αααα·ααααΆα ααΌα αααα ααΆαβαα·αβααΆαβααααβα’αααβαααα»αβαααβααΆαβαααααΊβααααβαααβααα ααα»ααααααα»ααααααΉαααΎααααΆααα·ααααα·ααα αα·ααααΆ ααααΆααΆαααααΆααααααΌαααααΆααααααα½ααααα αααα»α infobase αααααααΈαα αααααααα blockchain α αα αΌαααααααααααα, ααΆααααααα: ααΆαα’αα·αααααααα½ααα Rostelecom-Solar ααΊα’αΆα αα·αα·αααααΎααα»ααααα·ααΆααααααααα·ααΈαααααα’ααααΎ blockchain α α αΎααα ααΆαααααΌααααα·ααα½αα ααα½αααΎαα‘αΎαααΎααΆααααααααΆααααα αΆαααααΆαα’αα»αααααααα αααα blockchain α αα½ααααα»αα ααααααΆααα½α α αΌαααΈαα·αααΆααααα - αααααααααα’αΆααααααΆααααα·α αα αααααΆααααΆααααα»ααααααΆααα±ααααααΎααααΆαααααααααΎ CREATE2 - ααααααααααα»αα ααα αααααααααΆαα½αα’ααααααααααΆαααΆααα
ααΌα CREATE2 ααααΌαααΆααααααααα
αααα»ααααααααΉα Constantinople αα
ααααααΈ 28 αααα»ααααααααΆααααα ααΌα
αααααΆααααααΆαααα
αααα»α EIP ααΌα opcode αααααααΌαααΆαααααΆαααΆα
αααααααααΆαααααααΆαααααα ααααααΆαααΆααααα ααΎαααΆαααααΎααΆααΎααααΈαααααααΆααααα αΆαααααα
ααΆαα’αααααααΎααααΆαααααααΆααααα»ααααα ααΎααΆαααααΆααααααΌαα ααΎαααααΌααααααααα±ααα’αααααααΎααααΆααααααΆαααααΌαα’αΆααααααΆα Ethereum αααααααΆααααΆααα’αΆα ααααΎαααααΆαααααΆαα αααα ααα»αααααΆααααααααααΈαααααα½αααα α αΌαα α α’αΆααααααΆαααΆαααααααΆ "ααΆααΌα" α αα αααααααααααΆαααααΆαααααααααΆααΌα ααΎαααααΌαααααΎααΆαα ααΆααΌααααα½α (hotwallet)α
αα αααα»ααααααααΆαααααα αααα»ααα·ααΆααααααΎααααααΆααααΆααααααααΆααααα αΆααααααααααΆα CREATE2 α αΎαααααααααΈααΌαα ααα»αααααΎαααααααα αααα½αααα ααααα·αααΎα’αααα αΆααα’αΆααααααααααααααα α»αααααα α’αααα’αΆα αααααααααΆαα αααα»αααααααααααααααΆαα α»ααααααα
α’αΆααααααΆα Ethereum
αααααααααΆαααΆαααααααα»αααΊαααααΎαα’αΆααααααΆα ethereum ααααΈαααααΆααα’αααααααΎααααΆααααααΈα α’αΆααααααΆαααΆαααααααΉαααΆααΆααΌαα ααΎααααΈααααααααααΆαααααΆααααΈααΆααΌααα hotwallet α’αααααααΌαα α»αα αααααααΆααΎααααα·ααααα·ααΆααααα α αα»αααΆα ααααα() ααΆαα½αααΉαααα―αααααααΆααΌαααΈαααααααΆααααααα
αα·ααΈααΆααααααααααΆααα»ααααααααα·ααΌα ααΆααααααα
- ααΆααααΆααααααΆ
- αααααααααΆαααααααααααΆαααααΆααααΈααΆααΌααα hotwallet ααΊααααΎααΉααααααααααΆαα α αα»αααΆα ααααα()
αααααΆαααΆαααΆααααα ααΎαααΆαααααααα αααα·ααΈααΆαααααααα αααααααΆααΆααα»ααα·ααααα·ααααααΆαααα½αα α’αααααααΌααααααΆαα»αααα―ααααα ααααααααΆαα½αα α αΎαααΆαα·αααααΉαααα’αΆα ααΆαααααααα»ααααααα ααα»ααααα’αααααααΌααααααααααααΆαα αΌαααααΎααααΆαααααααααααα»ααααααααααααααα ααααα·αααΎαααΆαα αα ααΆαααα½ααααα»αα αααααα½αααααααΌαααΆααααααααααα½α ααααα·αα·ααααααααΆααααα’αααααααΎααααΆααααΆααααΆααααΉααα·ααα αααααΆααΌααααα αααααα
αααααΎααα·α αα αααααΆααααΆαααααΆα ααααα‘αααααααΆααα’αααααααΎααααΆααααααΆααα
ααΆαααΆαααααααΆααα·α αα αααααΆααααΆαααααΆα ααααα‘αααααααΆααα’αααααααΎααααΆααααΈαα½ααα’αα»ααααΆαα±ααα’ααααα·ααααααΆαα»αααα―αααααΈααΆααΌααα ααΎαααΆαααΈαααα ααΆαααααΆααααααΌαααΉαα α αα·α αα αααααΆααααΆααααααααΎααααΈααααααααααΆαααααΆαααα hotwallet α
ααΎαααααΆαααααααα αααααααααααΆααααααααα αααααΆαα’αααααααΎααααΆαααα·αα’αΆα αααα αΆαα’αΆααααααΆαααΆααΌαααααααΆααααααα·αααΆαααααααΆααα·α αα αααααΆααααΆααα (ααΆαα·αααΆα’αΆα αα αα½α ααα»ααααααΆααααααααα»αααααΆαααΆαα½αααΉααα»ααα·ααααα·αααααααααααααΎαααΉααα·ααα·ααΆααααΆαα ααΈααα)α αα ααΎααΆαααααΆααααααΌα α’αααααααΎααααΆααα’αΆα αααααΎαααααΈα αααΎαααΆααααααΆααααααΌαααΆα α αΎααααααααααΆααααΌαααΆαααΆααΌαααααΆαααααα½αα αααααΆααααααΆααΎαααααΌαα αααΆαααααΆααααΎααΆαααΆαααααααΆααα·α αα αααααΆααααα·αααααΆααααΆα’αααααααΎααααΆααααΉαααααΎααααΆααααααΈαααααα
Opcode CREATE 2
ααΎααααΈαααααααΆααααα αΆαααα·ααΈααΆααααααα»α ααΎαααΆααααααα α α·αααααααΎ CREATE2 opcodeα CREATE2 α’αα»ααααΆαα±ααα’ααααααααααΆαα»αααΌαα’αΆααααααΆαααααα·α αα αααααΆααααΆαααααΉαααααΌαααΆαααΆααα±ααααααΎααααΆααα α’αΆααααααΆαααααΌαααΆαααααΆαααααααΎααΌαααααααΆααααααα
keccak256 (0xff ++ address ++ salt ++ keccak256 (init_code)) [12:]
αααααΆαααααα:
- α’αΆααααααΆα - α’αΆααααααΆααααα·α αα αααααΆααααΆααααααααΉαα α CREATE2
- α’ααα·α - αααααα ααααα
- init_code - αααααΌααα·α αα αααααΆααααΆααααααααΆααααΆαααΆαααααααΆα
αααααΆααΆααΆα’αΆααααααΆααααααΎααααααα±ααα’αααααααΎααααΆαααα·αααΆααΆααααααΌααααααα
ααααΆαα ααααα αα·α
αα
αααααΆααααααΆααααααα’αΆα
ααααΌαααΆαααΆααα±ααααααΎααααΆαααα
αααααΆαααααΎαααααΌαααΆαα α§ααΆα ααα αα
αααα’αααααααΎααααΆαααααααα
α
α·αααααααΎααΆααΌααααααα½αααααΆααΎαααααΌαα
ααΎαααΈααααα
ααα α’αααα’αΆα
ααααΆα’αΆααααααΆααα·α
αα
αααααΆααααΆαααααΆααααααααα½αα±ααααΆααααααΆαα»αααΆ ααΈαααααα
- α’αΆααααααΆα αα αααα»αααΌαααααααΊααααααααααΆααΆα’αΆααααααΆααααααααα αααααΆααΌαααααααΎαα
- α’ααα·α - user_id hash
- init_code ααΆα’α α·αααααααα αααααΆαααΎαααααΎααΆααΌαααΌα ααααΆα
ααΆααααααα’ααααααααα
αααααααααΆαααΈαα»ααα ααααΆααα»ααα·ααααα·αα½α: α’αααααααΌαα αααΆααααααΆααααΆαααΆαααααααΆααα·α αα αααααΆααααΆαααα ααααααΆαααΆαααααα’αααα’αΆα αααα αΆααααΆααΆαα αααααΆααααΆααααα’αααα’αΆα α α αα»αααΆα ααααα(), α αΎαβαααααΆααβαα ααααααΆαβαααα½αα―α() αα αααα»αα’ααααααααΎαααΆααΌαα α αΎααααααΆααααα§ααααααααααΆααααΆαααααααΆααα·α αα αααααΆααααΆαααααΉααααααααααα·αα
αααα»αααΈααααΏααααααα·αα α’αααα’αΆα ααΆαααααααΆααα·α αα αααααΆααααΆααααα ααΆααα’αΆααααααΆαααΌα ααααΆα αααΎααααααααααΎααΌα CREATE2 α αααααΊαααααΆααα CREATE2 αα·αα·αααααΎαααΆ nonce ααα’αΆααααααΆαααααα ααΊααΌααα (ααΆααααΌαααΆααααααααααα "1" αα ααΎααα constructor) α αααααΉαααΉαααααα»αααΆα ααααααΆαβαααα½αα―α() αααααα’αΆααααααΆα nonce α‘αΎααα·αααΆαααααα ααΌα αααα ααααα·αααΎα’αααα α CREATE2 αααααααααΆαα½αααΉαα’αΆαα»αααααααΌα ααααΆααα ααΆααααα½ααα·αα·ααα nonce ααΉαα α»α α
ααΌαα αααΆαααΆαααααααααΆααααααΊαααααααα ααΉααααααααααΆαα’αΆααααααΆα ethereum ααα»ααααααααα·αα αΆαααΆα ααααααΆαα»αααα―αααααα αααααααααΆααααααααααΆααααΈααΆααΌααα½ααα hotwallet ααΊαααα ααααααΎααΉααααααααααΆαα α αα αα»αααΆααα½αα ααααα()α αΆααααΆααααΈααΎααα·ααααααααΆαααααααΆααααΆαααΆαααααααΆααα·α αα αααααΆααααΆαααα
ααΆααααααα α α·αααβα α»αααααα
ααΆααααα
αααΆαααα
- αα»αααΆαααΎααααΈααα½αααΆαα’ααα·α αααβαααααΆααβα’αααβααααΎ
- αα·α αα αααααΆααααΆααααααααΉαα α ααΌα CREATE2 ααΆαα½αα’ααα·ααααααα (α§. αααα αααααΆααΌα)
- wallet bytecode αααααααΌαααΉααα·α αα αααααΆααΆαα½αα’αααααΆααααααΆααααααα
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 α αΎααααααΆααααααααααΆααααα½αα―αα
ααΌαααααααα’αΆα
ααααΆα
α’ααααα·αααα Pavel Kondratenkov α’αααα―αααα Ethereum
ααααα: www.habr.com