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