From 7ae9bd56054a3f8a27caf6285c2bc0702a821bb5 Mon Sep 17 00:00:00 2001 From: Martin Holst Swende Date: Fri, 28 Sep 2018 11:54:54 +0200 Subject: [PATCH] core/vm: create2 address generation tests --- core/vm/instructions_test.go | 70 ++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/core/vm/instructions_test.go b/core/vm/instructions_test.go index 48caadf1f1..bc32399fc3 100644 --- a/core/vm/instructions_test.go +++ b/core/vm/instructions_test.go @@ -17,6 +17,9 @@ package vm import ( + "bytes" + "fmt" + "github.com/ethereum/go-ethereum/crypto" "math/big" "testing" @@ -489,3 +492,70 @@ func BenchmarkOpMstore(bench *testing.B) { } poolOfIntPools.put(evmInterpreter.intPool) } + +func TestCreate2Addreses(t *testing.T) { + type testcase struct { + origin string + salt string + code string + expected string + } + + for i, tt := range []testcase{ + { + origin: "0x0000000000000000000000000000000000000000", + salt: "0x0000000000000000000000000000000000000000", + code: "0x00", + expected: "0x4d1a2e2bb4f88f0250f26ffff098b0b30b26bf38", + }, + { + origin: "0xdeadbeef00000000000000000000000000000000", + salt: "0x0000000000000000000000000000000000000000", + code: "0x00", + expected: "0xB928f69Bb1D91Cd65274e3c79d8986362984fDA3", + }, + { + origin: "0xdeadbeef00000000000000000000000000000000", + salt: "0xfeed000000000000000000000000000000000000", + code: "0x00", + expected: "0xD04116cDd17beBE565EB2422F2497E06cC1C9833", + }, + { + origin: "0x0000000000000000000000000000000000000000", + salt: "0x0000000000000000000000000000000000000000", + code: "0xdeadbeef", + expected: "0x70f2b2914A2a4b783FaEFb75f459A580616Fcb5e", + }, + { + origin: "0x00000000000000000000000000000000deadbeef", + salt: "0xcafebabe", + code: "0xdeadbeef", + expected: "0x60f3f640a8508fC6a86d45DF051962668E1e8AC7", + }, + { + origin: "0x00000000000000000000000000000000deadbeef", + salt: "0xcafebabe", + code: "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef", + expected: "0x1d8bfDC5D46DC4f61D6b6115972536eBE6A8854C", + }, + { + origin: "0x0000000000000000000000000000000000000000", + salt: "0x0000000000000000000000000000000000000000", + code: "0x", + expected: "0xE33C0C7F7df4809055C3ebA6c09CFe4BaF1BD9e0", + }, + + } { + + origin := common.BytesToAddress(common.FromHex(tt.origin)) + salt := common.BytesToHash(common.FromHex(tt.salt)) + code := common.FromHex(tt.code) + address := crypto.CreateAddress2(origin, salt, code) + fmt.Printf("Example %d\n* address `0x%x`\n* salt `0x%x`\n* code `0x%x`\n* result: `%s`\n\n", i,origin, salt, code, address.String()) + expected := common.BytesToAddress(common.FromHex(tt.expected)) + if bytes.Compare(expected.Bytes(), address.Bytes()) != 0 { + t.Errorf("test %d: expected %s, got %s", i, expected.String(), address.String()) + } + + } +}