aboutsummaryrefslogtreecommitdiffstats
path: root/accounts/abi/abi_test.go
diff options
context:
space:
mode:
authorJeffrey Wilcke <geffobscura@gmail.com>2016-03-30 22:22:02 +0800
committerJeffrey Wilcke <geffobscura@gmail.com>2016-04-05 02:30:58 +0800
commit022cbd680052eb87b32d5f59587957779d382c0c (patch)
treef4894fc2eeea920233fcdd108e0977cc3b19fb6f /accounts/abi/abi_test.go
parent96c7c39ae4a031a508b0470ff2b1a95f0f3f9e51 (diff)
downloaddexon-022cbd680052eb87b32d5f59587957779d382c0c.tar
dexon-022cbd680052eb87b32d5f59587957779d382c0c.tar.gz
dexon-022cbd680052eb87b32d5f59587957779d382c0c.tar.bz2
dexon-022cbd680052eb87b32d5f59587957779d382c0c.tar.lz
dexon-022cbd680052eb87b32d5f59587957779d382c0c.tar.xz
dexon-022cbd680052eb87b32d5f59587957779d382c0c.tar.zst
dexon-022cbd680052eb87b32d5f59587957779d382c0c.zip
abi: accept input slices of all supported types
Diffstat (limited to 'accounts/abi/abi_test.go')
-rw-r--r--accounts/abi/abi_test.go119
1 files changed, 47 insertions, 72 deletions
diff --git a/accounts/abi/abi_test.go b/accounts/abi/abi_test.go
index 66d2e1b39..db33face9 100644
--- a/accounts/abi/abi_test.go
+++ b/accounts/abi/abi_test.go
@@ -49,7 +49,9 @@ const jsondata2 = `
{ "type" : "function", "name" : "foo", "const" : false, "inputs" : [ { "name" : "inputs", "type" : "uint32" } ] },
{ "type" : "function", "name" : "bar", "const" : false, "inputs" : [ { "name" : "inputs", "type" : "uint32" }, { "name" : "string", "type" : "uint16" } ] },
{ "type" : "function", "name" : "slice", "const" : false, "inputs" : [ { "name" : "inputs", "type" : "uint32[2]" } ] },
- { "type" : "function", "name" : "slice256", "const" : false, "inputs" : [ { "name" : "inputs", "type" : "uint256[2]" } ] }
+ { "type" : "function", "name" : "slice256", "const" : false, "inputs" : [ { "name" : "inputs", "type" : "uint256[2]" } ] },
+ { "type" : "function", "name" : "sliceAddress", "const" : false, "inputs" : [ { "name" : "inputs", "type" : "address[]" } ] },
+ { "type" : "function", "name" : "sliceMultiAddress", "const" : false, "inputs" : [ { "name" : "a", "type" : "address[]" }, { "name" : "b", "type" : "address[]" } ] }
]`
func TestType(t *testing.T) {
@@ -68,7 +70,7 @@ func TestType(t *testing.T) {
if typ.Kind != reflect.Slice {
t.Error("expected uint32[] to have type slice")
}
- if typ.Type != ubig_ts {
+ if typ.Type != ubig_t {
t.Error("expcted uith32[] to have type uint64")
}
@@ -79,7 +81,7 @@ func TestType(t *testing.T) {
if typ.Kind != reflect.Slice {
t.Error("expected uint32[2] to have kind slice")
}
- if typ.Type != ubig_ts {
+ if typ.Type != ubig_t {
t.Error("expcted uith32[2] to have type uint64")
}
if typ.Size != 2 {
@@ -202,16 +204,6 @@ func TestTestSlice(t *testing.T) {
t.FailNow()
}
- addr := make([]byte, 20)
- if _, err := abi.Pack("address", addr); err != nil {
- t.Error(err)
- }
-
- addr = make([]byte, 21)
- if _, err := abi.Pack("address", addr); err == nil {
- t.Error("expected address of 21 width to throw")
- }
-
slice := make([]byte, 2)
if _, err := abi.Pack("uint64[2]", slice); err != nil {
t.Error(err)
@@ -222,19 +214,6 @@ func TestTestSlice(t *testing.T) {
}
}
-func TestTestAddress(t *testing.T) {
- abi, err := JSON(strings.NewReader(jsondata2))
- if err != nil {
- t.Error(err)
- t.FailNow()
- }
-
- addr := make([]byte, 20)
- if _, err := abi.Pack("address", addr); err != nil {
- t.Error(err)
- }
-}
-
func TestMethodSignature(t *testing.T) {
String, _ := NewType("string")
String32, _ := NewType("string32")
@@ -310,44 +289,69 @@ func TestPackSlice(t *testing.T) {
}
sig := crypto.Keccak256([]byte("slice(uint32[2])"))[:4]
- sig = append(sig, make([]byte, 64)...)
- sig[35] = 1
- sig[67] = 2
+ sig = append(sig, common.LeftPadBytes([]byte{32}, 32)...)
+ sig = append(sig, common.LeftPadBytes([]byte{2}, 32)...)
+ sig = append(sig, common.LeftPadBytes([]byte{1}, 32)...)
+ sig = append(sig, common.LeftPadBytes([]byte{2}, 32)...)
packed, err := abi.Pack("slice", []uint32{1, 2})
if err != nil {
t.Error(err)
- t.FailNow()
}
if !bytes.Equal(packed, sig) {
t.Errorf("expected %x got %x", sig, packed)
}
-}
-func TestPackSliceBig(t *testing.T) {
- abi, err := JSON(strings.NewReader(jsondata2))
+ var addrA, addrB = common.Address{1}, common.Address{2}
+ sig = abi.Methods["sliceAddress"].Id()
+ sig = append(sig, common.LeftPadBytes([]byte{32}, 32)...)
+ sig = append(sig, common.LeftPadBytes([]byte{2}, 32)...)
+ sig = append(sig, common.LeftPadBytes(addrA[:], 32)...)
+ sig = append(sig, common.LeftPadBytes(addrB[:], 32)...)
+
+ packed, err = abi.Pack("sliceAddress", []common.Address{addrA, addrB})
if err != nil {
- t.Error(err)
- t.FailNow()
+ t.Fatal(err)
+ }
+ if !bytes.Equal(packed, sig) {
+ t.Errorf("expected %x got %x", sig, packed)
}
- sig := crypto.Keccak256([]byte("slice256(uint256[2])"))[:4]
- sig = append(sig, make([]byte, 64)...)
- sig[35] = 1
- sig[67] = 2
+ var addrC, addrD = common.Address{3}, common.Address{4}
+ sig = abi.Methods["sliceMultiAddress"].Id()
+ sig = append(sig, common.LeftPadBytes([]byte{64}, 32)...)
+ sig = append(sig, common.LeftPadBytes([]byte{160}, 32)...)
+ sig = append(sig, common.LeftPadBytes([]byte{2}, 32)...)
+ sig = append(sig, common.LeftPadBytes(addrA[:], 32)...)
+ sig = append(sig, common.LeftPadBytes(addrB[:], 32)...)
+ sig = append(sig, common.LeftPadBytes([]byte{2}, 32)...)
+ sig = append(sig, common.LeftPadBytes(addrC[:], 32)...)
+ sig = append(sig, common.LeftPadBytes(addrD[:], 32)...)
+
+ packed, err = abi.Pack("sliceMultiAddress", []common.Address{addrA, addrB}, []common.Address{addrC, addrD})
+ if err != nil {
+ t.Fatal(err)
+ }
+ if !bytes.Equal(packed, sig) {
+ t.Errorf("expected %x got %x", sig, packed)
+ }
- packed, err := abi.Pack("slice256", []*big.Int{big.NewInt(1), big.NewInt(2)})
+ sig = crypto.Keccak256([]byte("slice256(uint256[2])"))[:4]
+ sig = append(sig, common.LeftPadBytes([]byte{32}, 32)...)
+ sig = append(sig, common.LeftPadBytes([]byte{2}, 32)...)
+ sig = append(sig, common.LeftPadBytes([]byte{1}, 32)...)
+ sig = append(sig, common.LeftPadBytes([]byte{2}, 32)...)
+
+ packed, err = abi.Pack("slice256", []*big.Int{big.NewInt(1), big.NewInt(2)})
if err != nil {
t.Error(err)
- t.FailNow()
}
if !bytes.Equal(packed, sig) {
t.Errorf("expected %x got %x", sig, packed)
}
}
-
func ExampleJSON() {
const definition = `[{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"isBar","outputs":[{"name":"","type":"bool"}],"type":"function"}]`
@@ -370,7 +374,7 @@ func TestInputVariableInputLength(t *testing.T) {
{ "type" : "function", "name" : "strOne", "const" : true, "inputs" : [ { "name" : "str", "type" : "string" } ] },
{ "type" : "function", "name" : "bytesOne", "const" : true, "inputs" : [ { "name" : "str", "type" : "bytes" } ] },
{ "type" : "function", "name" : "strTwo", "const" : true, "inputs" : [ { "name" : "str", "type" : "string" }, { "name" : "str1", "type" : "string" } ] }
-]`
+ ]`
abi, err := JSON(strings.NewReader(definition))
if err != nil {
@@ -493,35 +497,6 @@ func TestInputVariableInputLength(t *testing.T) {
}
}
-func TestBytes(t *testing.T) {
- const definition = `[
- { "type" : "function", "name" : "balance", "const" : true, "inputs" : [ { "name" : "address", "type" : "bytes20" } ] },
- { "type" : "function", "name" : "send", "const" : false, "inputs" : [ { "name" : "amount", "type" : "uint256" } ] }
-]`
-
- abi, err := JSON(strings.NewReader(definition))
- if err != nil {
- t.Fatal(err)
- }
- ok := make([]byte, 20)
- _, err = abi.Pack("balance", ok)
- if err != nil {
- t.Error(err)
- }
-
- toosmall := make([]byte, 19)
- _, err = abi.Pack("balance", toosmall)
- if err != nil {
- t.Error(err)
- }
-
- toobig := make([]byte, 21)
- _, err = abi.Pack("balance", toobig)
- if err == nil {
- t.Error("expected error")
- }
-}
-
func TestDefaultFunctionParsing(t *testing.T) {
const definition = `[{ "name" : "balance" }]`