diff options
author | gary rong <garyrong0905@gmail.com> | 2018-08-14 23:30:42 +0800 |
---|---|---|
committer | Péter Szilágyi <peterke@gmail.com> | 2018-08-14 23:30:42 +0800 |
commit | e0e0e53401e93733d921338b6d794162c40a7883 (patch) | |
tree | 99c25ef0e0a691c59aa3cfd2c85e81849a8af212 | |
parent | 97887d98da703a31040bceee13bce9ee77fca673 (diff) | |
download | dexon-e0e0e53401e93733d921338b6d794162c40a7883.tar dexon-e0e0e53401e93733d921338b6d794162c40a7883.tar.gz dexon-e0e0e53401e93733d921338b6d794162c40a7883.tar.bz2 dexon-e0e0e53401e93733d921338b6d794162c40a7883.tar.lz dexon-e0e0e53401e93733d921338b6d794162c40a7883.tar.xz dexon-e0e0e53401e93733d921338b6d794162c40a7883.tar.zst dexon-e0e0e53401e93733d921338b6d794162c40a7883.zip |
crypto: change formula for create2 (#17393)
-rw-r--r-- | core/vm/evm.go | 2 | ||||
-rw-r--r-- | crypto/crypto.go | 4 |
2 files changed, 3 insertions, 3 deletions
diff --git a/core/vm/evm.go b/core/vm/evm.go index a2722537d..a24f6f386 100644 --- a/core/vm/evm.go +++ b/core/vm/evm.go @@ -427,7 +427,7 @@ func (evm *EVM) Create(caller ContractRef, code []byte, gas uint64, value *big.I // Create2 creates a new contract using code as deployment code. // -// The different between Create2 with Create is Create2 uses sha3(msg.sender ++ salt ++ init_code)[12:] +// The different between Create2 with Create is Create2 uses sha3(0xff ++ msg.sender ++ salt ++ sha3(init_code))[12:] // instead of the usual sender-and-nonce-hash as the address where the contract is initialized at. func (evm *EVM) Create2(caller ContractRef, code []byte, gas uint64, endowment *big.Int, salt *big.Int) (ret []byte, contractAddr common.Address, leftOverGas uint64, err error) { contractAddr = crypto.CreateAddress2(caller.Address(), common.BigToHash(salt), code) diff --git a/crypto/crypto.go b/crypto/crypto.go index dec6e3c19..3211957e0 100644 --- a/crypto/crypto.go +++ b/crypto/crypto.go @@ -78,8 +78,8 @@ func CreateAddress(b common.Address, nonce uint64) common.Address { // CreateAddress2 creates an ethereum address given the address bytes, initial // contract code and a salt. -func CreateAddress2(b common.Address, salt common.Hash, code []byte) common.Address { - return common.BytesToAddress(Keccak256([]byte{0xff}, b.Bytes(), salt.Bytes(), code)[12:]) +func CreateAddress2(b common.Address, salt [32]byte, code []byte) common.Address { + return common.BytesToAddress(Keccak256([]byte{0xff}, b.Bytes(), salt[:], Keccak256(code))[12:]) } // ToECDSA creates a private key with the given D value. |