aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/vm/evm.go2
-rw-r--r--crypto/crypto.go4
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.