blockchain ááá±á«ááºážá ááºááẠhype á¡áá»áá¯ážá¡á á¬ážá¡á¬ážáá¯á¶ážááá¯áá¬áá áááºážááá¬ááá¯ááºáá¬ááŸá¯áá±á¬áá·áºá០á¡ááœááºá¡ááá¯ážáááºáá±á¬ á¡ááœá±ážá¡áá±á«áºáá»á¬áž ááááºážááŒá áºáá áºáá¯á¡ááŒá Ạáááºáá±á¬á·ááŸááááºááá·áºáá«á ááá¯á·ááŒá±á¬áá·áº áá±áá¬áá±á¬ááŒáá¯á·áá°ááŒáá¯á·áá¬ážáá»á¬ážááᯠáááŸá±á¬ááºááœááºážáá²á·áá«á áá°áá»á¬ážááẠááá¯ážáá¬á¡áá»ááºá¡áááºáá¯á¶ááŒá¯á¶áá±ážááá¯ááºáᬠáááºážááá¯á·ááá»áœááºážáá»ááºááŸá¯áá»á¬ážááᯠblockchain á áá áºáá»á¬ážááá¯á· ááœáŸá²ááŒá±á¬ááºážááẠá¡áá®ážáááºááŒáá·áºááŸá¯áá±á·áá¬áá»áẠááŸááááºá ááá¯á¡áá»áááºá¡ááá Rostelecom-Solar áááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯áá»á¬ážáá²ááŸáá áºáá¯ááẠblockchain-based software ááá¯á¶ááŒá¯á¶áá±ážááá¯á á áºáá±ážááá¯ááºáááºá ááŸáá·áºáááºážáá áºáá»áŸá±á¬ááºááœáẠblockchain á¡ááá¯ááºážá¡ááá¯ááºážáá¡áá¯á¶ážáá»ááŒá¿áá¬áá»á¬ážááá¯ááŒá±ááŸááºážáááºá áááºáá°ážá¡áá»áá¯á·áá±á«áºáá¬áááºá á€áááááºáá¬áá»á¬ážáá²ááŸáá áºáᯠ- CREATE2 ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážáááŒá¯áá® á áááºá á¬áá»á¯ááºáá áºáá¯áááááºá á¬ááᯠáá¯á¶ážááŒááºáááºáž - ááá±á·ááŒááºááá¯ááºážá¡á±á¬ááºááœáẠááá·áºá¡á¬áž áá»áŸáá±ááá¯áá«áááºá
CREATE2 opcode ááᯠááá¯ááŸá
Ạáá±áá±á¬áºáá«áá®á 28 áááºáá±á·ááœáẠConstantinople hard fork ááœáẠááá·áºááœááºážáá²á·áááºá EIP ááœááºáá±á¬áºááŒáá¬ážááá·áºá¡ááá¯ááºážá ဠopcode ááᯠááŒááºáááºáá»ááºáááºáá»á¬ážá¡ááœáẠá¡áááááááºáááºáá±ážáá²á·áááºá ááá¯á·áá±á¬áºáááºáž ááá°áá®áá±á¬ááŒá¿áá¬áá
áºáá¯ááᯠááŒá±ááŸááºážáááºá¡ááœáẠáááºážááᯠáá»áœááºá¯ááºááá¯á·á¡áá¯á¶ážááŒá¯áá²á·áááºá
áá²ááŸááºááŸá¯ááœáẠáááºáá»ááºááœá±ááŸáááá·áº áá¯á¶ážá áœá²áá°áá»á¬áž ááŸááá«áááºá áááºáá°áááᯠááá¯áááºáá»á¬ážáá±ážááá¯á·ááá¯ááºááá·áº Ethereum ááááºá á¬áá áºáá¯á á®ááᯠáá»áœááºá¯ááºááá¯á· áá±ážáá±á¬ááºááááºááŒá áºááŒá®ážá ááá¯á·ááŒá±á¬áá·áº áááºážááá¯á·áá¡áá±á¬áá·áºááᯠááŒáá·áºáá±ážááá«áááºá á€ááááºá á¬áá»á¬ážááᯠ"ááá¯ááºáá¶á¡áááºáá»á¬áž" áá¯áá±á«áºááŒáá«á áá¯á·á ááá¯áááºáá»á¬áž ááá¯ááºáá¶á¡áááºáá»á¬áž áá±á¬ááºááŸááá¬áá±á¬á¡áá«á áááºážááá¯á·ááᯠááá¯ááºáá¶á¡áááºáá áºáá¯áááºáž (hotwallet) ááá¯á· áá±ážááá¯á·ááá«áááºá
á¡á±á¬ááºáá±á¬áºááŒáá« ááá¹ááá»á¬ážááœáẠCREATE2 ááá«áá² á€ááŒá¿áá¬ááᯠááŒá±ááŸááºážááẠááœá±ážáá»ááºá áá¬áá»á¬ážááᯠáá»áœááºá¯áẠááá¯ááºážááŒá¬ážá áááºááŒá¬ááŒá®áž áááºážááá¯á·ááᯠá¡áááºááŒá±á¬áá·áº á áœáá·áºáá áºáá²á·áááºááᯠááŒá±á¬ááŒáá«á á¡áááºá áááºááẠáá±á¬ááºáá¯á¶ážááááºááᯠá áááºáááºá á¬ážáá«áá "áá±á¬ááºáá¯á¶ážááŒá±ááŸááºážáá»ááº" ááá¹áááœáẠáááºážááᯠáááºááŸá¬ááœá±ááá¯ááºáá«áááºá
Ethereum ááááºá á¬áá»á¬áž
á¡ááá¯ážááŸááºážáá¯á¶ážááŒá±ááŸááºážáá»ááºááŸá¬ áá¯á¶ážá áœá²áá°á¡áá áºáá»á¬ážá¡ááœáẠEthereum ááááºá á¬á¡áá áºáá»á¬ážááᯠáá¯ááºáá¯ááºáááºááŒá áºáááºá á€ááááºá á¬áá»á¬ážááẠááá¯ááºáá¶á¡áááºáá»á¬áž ááŒá áºáááá·áºáááºá ááá¯áááºáá»á¬ážááᯠááá¯ááºáá¶á¡áááºá០hotwallet ááá¯á· ááœáŸá²ááŒá±á¬ááºážáááºá áá¯ááºáá±á¬ááºáá»ááºááá¯áá±á«áºááá¯ááŒááºážááŒáá·áº ááœá±áá±ážááœá±áá°ááᯠáááºááŸááºáá±ážááá¯ážááẠááá¯á¡ááºáá«áááºá ááœáŸá²ááŒá±á¬ááºáž() áá±á¬ááºááœááºá០ááá¯ááºáá¶á¡áááºá áá®ážááá·áºáá±á¬á·ááŒáá·áº
á€áá»ááºážáááºááŸá¯ááœáẠá¡á±á¬ááºáá«á¡á¬ážáá¬áá»ááºáá»á¬ážááŸááááºá
- áá«ááŒá±á¬ááºá·ááá¯ááºá·áá²á·
- ááá¯áááºáá»á¬ážááᯠááá¯ááºáá¶á¡áááºá០hotwallet ááá¯á· ááœáŸá²ááŒá±á¬ááºážáá¬ááœáẠáá¯ááºáá»á ááááºááẠáá¯ááºáá±á¬ááºáá»ááºáá±á«áºááá¯ááŸá¯áá áºáá¯á áá¯ááºáá»á ááááºááŸáá·áº áá®áá»áŸáááºá ááœáŸá²ááŒá±á¬ááºáž()
ááá¯á·áá±á¬áºá áááºážááœáẠá¡áááá¡á¬ážáááºážáá»ááºáá áºáá¯ááŸááá±áá±á¬ááŒá±á¬áá·áº á€áá»ááºážáááºáááºážááᯠááá·áºáá»ááºááẠáá¯á¶ážááŒááºáá²á·áááº- áááºááẠááá¯ááºáá±ážááá¯ááºáá¬áá±á¬á·áá»á¬ážááᯠáá áºáá±áá¬ááœáẠááááºážáááºážáá¬ážááẠááá¯á¡ááºáá«áááºá áááºážááá¯á· áá¯á¶ážááŸá¯á¶ážááá¯ááºáá¯á¶áá¬áá á€áá±á¬á·áá»á¬ážááá¯á· áááºáá±á¬ááºááœáá·áºááá¯áááºáž ááá¯áá áá¯áẠá á®áá¶ááá·áºááœá²ááẠááá¯á¡ááºáá«áááºá áááºážááá¯á·áá²á០á¡áááºážáá¯á¶ážáá áºáá¯ááẠá¡áá±ážá¡áá°áá¯ááºáá¶ááá«áá áá¯á¶ážá áœá²áá°áá áºáŠážá ááá¯áááºáá»á¬ážááẠhot wallet ááá¯á· áá±á¬ááºááŸááááºááá¯ááºáá«á
á¡áá¯á¶ážááŒá¯áá°áá áºáŠážá á®á¡ááœáẠáá®ážááŒá¬ážá áááºá á¬áá»á¯ááºáá áºáᯠáááºáá®ážáá«á
áá¯á¶ážá áœá²áá°áá áºáŠážá á®á¡ááœáẠáá®ážááŒá¬ážá áááºá á¬áá»á¯ááºááᯠá¡áá¯á¶ážáá»ááŒááºážááẠáá¬áá¬áá±á«áºááœáẠááá¯ááºáá¶á¡áááºáá»á¬ážá¡ááœáẠáá®ážááá·áºáá±á¬á·áá»á¬ážááᯠááááºážáááºážááŒááºážá០ááŸá±á¬ááºááŒááºááá¯ááºáááºááŒá áºáááºá ááá¯áááºáá»á¬ážááᯠhotwallet ááá¯á·ááœáŸá²ááŒá±á¬ááºážááẠáá²ááŸááºáá°á á€á áááºá á¬áá»á¯ááºááᯠáá±á«áºáá«áááºá
á áááºáááºáááá¯ááºááᯠá¡áá¯á¶ážáááŒá¯áá² á¡áá¯á¶ážááŒá¯áá°á ááá¯ááºáá¶á¡áááºááááºá á¬ááᯠáááŒááá¯ááºáá±á¬ááŒá±á¬áá·áº á€ááŒá±ááŸááºážáá»ááºááᯠáá»áœááºá¯ááºááá¯á· á áœáá·áºááœáŸááºááá¯ááºááẠ(áááºážááẠá¡ááŸááºáááẠááŒá áºááá¯ááºáá±á¬áºáááºáž á€áá±áá¬ááœáẠáá»áœááºá¯ááºááá¯á· ááœá±ážááœá±ážáááºááá¯ááºáá±á¬ á¡ááŒá¬ážá¡á¬ážáááºážáá»ááºáá»á¬ážááŸáá·áº ááŸá¯ááºááœá±ážáá±á¬áááºážáááºážááŒáá·áº)á áá²ááŸááºááŸá¯ááœááºá á¡áá¯á¶ážááŒá¯áá°áá áºáŠážááẠááááááá¯á¡ááºááá±á¬áẠá¡áá±á¬áá·áºáá»á¬ážá áœá¬ááᯠáááºáá®ážááá¯ááºááŒá®áž áá áºáŠážá á®ááẠáááºážáááá¯ááºááá¯ááºááá¯ááºáá¶á¡ááẠááá¯á¡ááºáááºá ááá¯ááá¯áááºááŸá¬ á¡áá¯á¶ážááŒá¯áá°ááẠá€á¡áá±á¬áá·áºááᯠá¡áá¯á¶ážááŒá¯áááºááᯠáá±áá»á¬ááááá² á á¬áá»á¯ááºáá áºáá¯á¡áá¯á¶ážááŒá¯ááẠááœá±áá¯á¶ážá áœá²ááẠááá¯á¡ááºáá«áááºá
Opcode CREATE2
ááááºáááºážáááºážáááŒá¿áá¬ááá¯ááŒá±ááŸááºážááẠCREATE2 opcode ááá¯á¡áá¯á¶ážááŒá¯áááºáá¯á¶ážááŒááºáá²á·áááºá CREATE2 ááẠááá·áºá¡á¬áž á áááºá á¬áá»á¯ááºááᯠá¡áá¯á¶ážááŒá¯ááá·áºááááºá á¬ááᯠááŒáá¯áááºáááºááŸááºááá¯ááºá á±áá«áááºá ááááºá á¬ááᯠá¡á±á¬ááºáá«áá±á¬áºááŒá°áá¬ááŒáá·áº ááœááºáá»ááºáááº-
keccak256 (0xff ++ address ++ salt ++ keccak256 (init_code)) [12:]
á¡áááºááŸá¬:
- ááááºá ᬠ- CREATE2 ááá¯áá±á«áºááá¯ááá·áº á áááºá á¬áá»á¯ááºáááááºá á¬
- áá¬ážááẠ- áá»áááºážáááºááá¯áž
- init_áá¯áẠ- ááŒáá·áºáá»ááºááŒááºážá¡ááœáẠá áááºá á¬áá»á¯áẠááá¯ááºáá¯ááº
áááºážááẠá¡áá¯á¶ážááŒá¯áá°á¡á¬áž áá»áœááºá¯ááºááá¯á·áá±ážáá±á¬ááºááá·áº ááááºá
á¬ááœáẠááá¯áá»ááºáá±á¬ bytecode áá«áááºááŒá±á¬ááºáž áá±áá»á¬á
á±áá«áááºá ááá¯á·á¡ááŒááºá á€á
áááºá
á¬áá»á¯ááºááᯠáá»áœááºá¯ááºááá¯á· ááá¯á¡ááºááá·áºá¡áá«ááá¯ááºáž á¡áá¯á¶ážáá»ááá¯ááºáááºá á¥ááá¬á¡á¬ážááŒáá·áºá á¡áá¯á¶ážááŒá¯áá°áá
áºáŠážááẠáááºážááá¯á·áááá¯ááºáá¶á¡áááºááᯠááááá¯á¶ážá¡ááŒáááºá¡áá¯á¶ážááŒá¯ááẠáá¯á¶ážááŒááºáá±á¬á¡áá«á
ááá¯á·á¡ááŒááºá á¡ááŒá±á¬ááºážááŸá¬ áááºážááᯠááááºážáááºážááá·áºá¡á
á¬áž á
áááºá
á¬áá»á¯ááºááááºá
á¬ááᯠá¡áá»áááºááá¯ááºáž ááœááºáá»ááºááá¯ááºáááº-
- ááááºá ᬠáá±á¬áºááŒá°áá¬áá²ááœáẠá€á¡áá¬ááẠáá»áœááºá¯ááºááá¯á·á ááá¯ááºáá¶á¡áááºá ááºáá¯á¶áááááºá á¬ááŒá áºáá±á¬ááŒá±á¬áá·áº ááááºážáá±ááŒá áºáá«áááºá
- áá¬ážááẠâ user_id hash
- init_áá¯áẠáá»áœááºá¯ááºááá¯á·ááẠáá°áá®áá±á¬ ááá¯ááºáá¶á¡áááºááᯠá¡áá¯á¶ážááŒá¯áá±á¬ááŒá±á¬áá·áº á¡ááŒá²áááŒááºááŸááá±áá«áááºá
ááá¯ááá¯ááá¯ážáááºááŸá¯áá»á¬áž
ááááºááŒá±ááŸááºážáá»ááºááœáẠá¡á¬ážáááºážáá»ááºáá áºáá¯ááŸááá±áá±ážáááº- á áááºá á¬áá»á¯ááºááᯠá¡áá¯á¶ážááŒá¯ááẠáááºáá±ážáá»á±ááẠááá¯á¡ááºáá«áááºá ááá¯á·áá±á¬áº áááºááẠáááºážááᯠáááºááŸá¬ážááá¯ááºáááºá áá®ááá¯áá¯ááºááá¯á· ááẠfunction ááá¯áá±á«áºááá¯ááºáá«áááºá ááœáŸá²ááŒá±á¬ááºáž(), ááŒá®ážáá±á¬á· selfdestruct() wallet constructor áá²ááŸá¬á ááá¯á·áá±á¬áẠá áááºáááºáááá¯ááºááᯠáááºááŒáá·áºááŒááºážá¡ááœáẠáá¬ááºááœá±á·ááᯠááŒááºáááºáá±ážá¡ááºáááºááŒá áºáááºá
áá°ááŒáá¯ááºáá»á¬ážáá±á¬áá¯á¶ááŒááºáá»ááºááŸáá·áºááá·áºáá»ááºáááºá áááºááẠCREATE2 opcode ááŒáá·áº áá°áá®áá±á¬ááááºá á¬ááá¯á· á áááºáá»áá±á¬á á¬áá»á¯ááºááᯠá¡ááŒáááºáá»á¬ážá áœá¬ á¡áá¯á¶ážáá»ááá¯ááºáááºá á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº CREATE2 ááẠáá áºááŸááºááááºá á¬á áá¶áá«ááºááẠáá¯áááŒá áºááẠ(áááºážááᯠáááºáá±á¬ááºáá°áá¡á ááœáẠáááºááá¯áž "1" áááºááŸááºáá±ážáááº) ááá¯á á áºáá±ážáá±á¬ááŒá±á¬áá·áºááŒá áºáááºá á€ááá á¹á ááœááºáá¯ááŸá áº, function ááᯠselfdestruct() nonce ááááºá á¬áá»á¬ážááᯠá¡áá»áááºááá¯ááºáž ááŒááºáááºáááºááŸááºáá«á ááá¯á·ááŒá±á¬áá·áº áááºááẠCREATE2 ááᯠáá°áá®áá±á¬á¡ááŒá±á¬ááºážááŒáá»ááºáá»á¬ážááŒáá·áº áááºáá¶áá±á«áºááá¯áá«áá nonce check ááẠáá»á±á¬áºááœá¬ážáááºááŒá áºáááºá
á€ááŒá±ááŸááºážáá»ááºááẠEthereum ááááºá á¬ááœá±ážáá»ááºááŸá¯ááŸáá·áº áááºáá°áá±á¬áºáááºáž áá®ážááá·áºáá±á¬á·áá»á¬ážááᯠááááºážáááºážáááºáááá¯á¡ááºáá² áá»á±ážáá°ážááŒá¯á áááááŒá¯áá«á ááá¯ááºáá¶á¡áááºá០hotwallet ááá¯á· ááœá±ááœáŸá²áá¬ááœáẠáá¯ááºáá»á ááááºááẠáá¯ááºáá±á¬ááºáá»ááºáá áºáá¯ááᯠáá±á«áºááá¯ááá·áº áá¯ááºáá»á ááááºááŸáá·áº ááá·áºááŸááºážááŒá± áá®áá»áŸáááºá ááœáŸá²ááŒá±á¬ááºáž()á áááºáááºáááá¯ááºááŒáá·áºáá»ááºááŸá¯á¡ááœáẠáá»áœááºá¯ááºááá¯á· ááá±ážáá±á¬ááŒá±á¬áá·áºá
áá±á¬ááºáá¯á¶ážáá¯á¶ážááŒááºáá»ááº
áá°áááŒááºáááºáááº-
- áá¬ážááá°ááẠáá¯ááºáá±á¬ááºáá»áẠáá¯á¶ážá áœá²áá°á¡áá¯ááºáá®
- ááá·áºáá»á±á¬áºáá±á¬áá¬áž (ááá¯ááá¯áááºááŸá¬ ááá¯ááºáá¶á¡áááºá ááºáá¯á¶) ááŒáá·áº CREATE2 opcode ááá¯áá±á«áºááá¯ááá·áº á áááºáá»áá±á¬á á¬áá»á¯ááºá
- á¡á±á¬ááºáá« constructor ááŸáá·áº á á¬áá»á¯ááºááŸáá·áº áááºááá¯ááºáá±á¬ 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
}
ááá¯á·ááŒá±á¬áá·áºá wallet smart contract constructor áá¯áá±á«áºáááºá áááºážááẠáááºážáááá¯áááºáá»á¬ážá¡á¬ážáá¯á¶ážááᯠhotwallet ááááºá
á¬ááá¯á· ááœáŸá²ááŒá±á¬ááºážááŒá®ážáá±á¬áẠááá¯ááºááá¯ááºáá»ááºá
á®ážááœá¬ážáá«áááºá
áá¯ááºá¡ááŒáá·áºá¡á
á¯á¶ááᯠááœá±á·ááá¯ááºáááºá
á
á¬áá±ážááᬠPavel Kondratenková Ethereum áá»áœááºážáá»ááºáá°
source: www.habr.com