|
|
@@ -44,15 +44,13 @@ func TestUnpack(t *testing.T) {
|
|
|
if err != nil {
|
|
|
t.Fatalf("invalid hex %s: %v", test.packed, err)
|
|
|
}
|
|
|
- outptr := reflect.New(reflect.TypeOf(test.unpacked))
|
|
|
- err = abi.Unpack(outptr.Interface(), "method", encb)
|
|
|
+ out, err := abi.Unpack("method", encb)
|
|
|
if err != nil {
|
|
|
t.Errorf("test %d (%v) failed: %v", i, test.def, err)
|
|
|
return
|
|
|
}
|
|
|
- out := outptr.Elem().Interface()
|
|
|
- if !reflect.DeepEqual(test.unpacked, out) {
|
|
|
- t.Errorf("test %d (%v) failed: expected %v, got %v", i, test.def, test.unpacked, out)
|
|
|
+ if !reflect.DeepEqual(test.unpacked, ConvertType(out[0], test.unpacked)) {
|
|
|
+ t.Errorf("test %d (%v) failed: expected %v, got %v", i, test.def, test.unpacked, out[0])
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
@@ -221,7 +219,7 @@ func TestLocalUnpackTests(t *testing.T) {
|
|
|
t.Fatalf("invalid hex %s: %v", test.enc, err)
|
|
|
}
|
|
|
outptr := reflect.New(reflect.TypeOf(test.want))
|
|
|
- err = abi.Unpack(outptr.Interface(), "method", encb)
|
|
|
+ err = abi.UnpackIntoInterface(outptr.Interface(), "method", encb)
|
|
|
if err := test.checkError(err); err != nil {
|
|
|
t.Errorf("test %d (%v) failed: %v", i, test.def, err)
|
|
|
return
|
|
|
@@ -234,7 +232,7 @@ func TestLocalUnpackTests(t *testing.T) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func TestUnpackSetDynamicArrayOutput(t *testing.T) {
|
|
|
+func TestUnpackIntoInterfaceSetDynamicArrayOutput(t *testing.T) {
|
|
|
abi, err := JSON(strings.NewReader(`[{"constant":true,"inputs":[],"name":"testDynamicFixedBytes15","outputs":[{"name":"","type":"bytes15[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"testDynamicFixedBytes32","outputs":[{"name":"","type":"bytes32[]"}],"payable":false,"stateMutability":"view","type":"function"}]`))
|
|
|
if err != nil {
|
|
|
t.Fatal(err)
|
|
|
@@ -249,7 +247,7 @@ func TestUnpackSetDynamicArrayOutput(t *testing.T) {
|
|
|
)
|
|
|
|
|
|
// test 32
|
|
|
- err = abi.Unpack(&out32, "testDynamicFixedBytes32", marshalledReturn32)
|
|
|
+ err = abi.UnpackIntoInterface(&out32, "testDynamicFixedBytes32", marshalledReturn32)
|
|
|
if err != nil {
|
|
|
t.Fatal(err)
|
|
|
}
|
|
|
@@ -266,7 +264,7 @@ func TestUnpackSetDynamicArrayOutput(t *testing.T) {
|
|
|
}
|
|
|
|
|
|
// test 15
|
|
|
- err = abi.Unpack(&out15, "testDynamicFixedBytes32", marshalledReturn15)
|
|
|
+ err = abi.UnpackIntoInterface(&out15, "testDynamicFixedBytes32", marshalledReturn15)
|
|
|
if err != nil {
|
|
|
t.Fatal(err)
|
|
|
}
|
|
|
@@ -367,7 +365,7 @@ func TestMethodMultiReturn(t *testing.T) {
|
|
|
tc := tc
|
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
|
require := require.New(t)
|
|
|
- err := abi.Unpack(tc.dest, "multi", data)
|
|
|
+ err := abi.UnpackIntoInterface(tc.dest, "multi", data)
|
|
|
if tc.error == "" {
|
|
|
require.Nil(err, "Should be able to unpack method outputs.")
|
|
|
require.Equal(tc.expected, tc.dest)
|
|
|
@@ -390,7 +388,7 @@ func TestMultiReturnWithArray(t *testing.T) {
|
|
|
|
|
|
ret1, ret1Exp := new([3]uint64), [3]uint64{9, 9, 9}
|
|
|
ret2, ret2Exp := new(uint64), uint64(8)
|
|
|
- if err := abi.Unpack(&[]interface{}{ret1, ret2}, "multi", buff.Bytes()); err != nil {
|
|
|
+ if err := abi.UnpackIntoInterface(&[]interface{}{ret1, ret2}, "multi", buff.Bytes()); err != nil {
|
|
|
t.Fatal(err)
|
|
|
}
|
|
|
if !reflect.DeepEqual(*ret1, ret1Exp) {
|
|
|
@@ -414,7 +412,7 @@ func TestMultiReturnWithStringArray(t *testing.T) {
|
|
|
ret2, ret2Exp := new(common.Address), common.HexToAddress("ab1257528b3782fb40d7ed5f72e624b744dffb2f")
|
|
|
ret3, ret3Exp := new([2]string), [2]string{"Ethereum", "Hello, Ethereum!"}
|
|
|
ret4, ret4Exp := new(bool), false
|
|
|
- if err := abi.Unpack(&[]interface{}{ret1, ret2, ret3, ret4}, "multi", buff.Bytes()); err != nil {
|
|
|
+ if err := abi.UnpackIntoInterface(&[]interface{}{ret1, ret2, ret3, ret4}, "multi", buff.Bytes()); err != nil {
|
|
|
t.Fatal(err)
|
|
|
}
|
|
|
if !reflect.DeepEqual(*ret1, ret1Exp) {
|
|
|
@@ -452,7 +450,7 @@ func TestMultiReturnWithStringSlice(t *testing.T) {
|
|
|
buff.Write(common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000065")) // output[1][1] value
|
|
|
ret1, ret1Exp := new([]string), []string{"ethereum", "go-ethereum"}
|
|
|
ret2, ret2Exp := new([]*big.Int), []*big.Int{big.NewInt(100), big.NewInt(101)}
|
|
|
- if err := abi.Unpack(&[]interface{}{ret1, ret2}, "multi", buff.Bytes()); err != nil {
|
|
|
+ if err := abi.UnpackIntoInterface(&[]interface{}{ret1, ret2}, "multi", buff.Bytes()); err != nil {
|
|
|
t.Fatal(err)
|
|
|
}
|
|
|
if !reflect.DeepEqual(*ret1, ret1Exp) {
|
|
|
@@ -492,7 +490,7 @@ func TestMultiReturnWithDeeplyNestedArray(t *testing.T) {
|
|
|
{{0x411, 0x412, 0x413}, {0x421, 0x422, 0x423}},
|
|
|
}
|
|
|
ret2, ret2Exp := new(uint64), uint64(0x9876)
|
|
|
- if err := abi.Unpack(&[]interface{}{ret1, ret2}, "multi", buff.Bytes()); err != nil {
|
|
|
+ if err := abi.UnpackIntoInterface(&[]interface{}{ret1, ret2}, "multi", buff.Bytes()); err != nil {
|
|
|
t.Fatal(err)
|
|
|
}
|
|
|
if !reflect.DeepEqual(*ret1, ret1Exp) {
|
|
|
@@ -531,7 +529,7 @@ func TestUnmarshal(t *testing.T) {
|
|
|
buff.Write(common.Hex2Bytes("000000000000000000000000000000000000000000000000000000000000000a"))
|
|
|
buff.Write(common.Hex2Bytes("0102000000000000000000000000000000000000000000000000000000000000"))
|
|
|
|
|
|
- err = abi.Unpack(&mixedBytes, "mixedBytes", buff.Bytes())
|
|
|
+ err = abi.UnpackIntoInterface(&mixedBytes, "mixedBytes", buff.Bytes())
|
|
|
if err != nil {
|
|
|
t.Error(err)
|
|
|
} else {
|
|
|
@@ -546,7 +544,7 @@ func TestUnmarshal(t *testing.T) {
|
|
|
|
|
|
// marshal int
|
|
|
var Int *big.Int
|
|
|
- err = abi.Unpack(&Int, "int", common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000001"))
|
|
|
+ err = abi.UnpackIntoInterface(&Int, "int", common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000001"))
|
|
|
if err != nil {
|
|
|
t.Error(err)
|
|
|
}
|
|
|
@@ -557,7 +555,7 @@ func TestUnmarshal(t *testing.T) {
|
|
|
|
|
|
// marshal bool
|
|
|
var Bool bool
|
|
|
- err = abi.Unpack(&Bool, "bool", common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000001"))
|
|
|
+ err = abi.UnpackIntoInterface(&Bool, "bool", common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000001"))
|
|
|
if err != nil {
|
|
|
t.Error(err)
|
|
|
}
|
|
|
@@ -574,7 +572,7 @@ func TestUnmarshal(t *testing.T) {
|
|
|
buff.Write(bytesOut)
|
|
|
|
|
|
var Bytes []byte
|
|
|
- err = abi.Unpack(&Bytes, "bytes", buff.Bytes())
|
|
|
+ err = abi.UnpackIntoInterface(&Bytes, "bytes", buff.Bytes())
|
|
|
if err != nil {
|
|
|
t.Error(err)
|
|
|
}
|
|
|
@@ -590,7 +588,7 @@ func TestUnmarshal(t *testing.T) {
|
|
|
bytesOut = common.RightPadBytes([]byte("hello"), 64)
|
|
|
buff.Write(bytesOut)
|
|
|
|
|
|
- err = abi.Unpack(&Bytes, "bytes", buff.Bytes())
|
|
|
+ err = abi.UnpackIntoInterface(&Bytes, "bytes", buff.Bytes())
|
|
|
if err != nil {
|
|
|
t.Error(err)
|
|
|
}
|
|
|
@@ -606,7 +604,7 @@ func TestUnmarshal(t *testing.T) {
|
|
|
bytesOut = common.RightPadBytes([]byte("hello"), 64)
|
|
|
buff.Write(bytesOut)
|
|
|
|
|
|
- err = abi.Unpack(&Bytes, "bytes", buff.Bytes())
|
|
|
+ err = abi.UnpackIntoInterface(&Bytes, "bytes", buff.Bytes())
|
|
|
if err != nil {
|
|
|
t.Error(err)
|
|
|
}
|
|
|
@@ -616,7 +614,7 @@ func TestUnmarshal(t *testing.T) {
|
|
|
}
|
|
|
|
|
|
// marshal dynamic bytes output empty
|
|
|
- err = abi.Unpack(&Bytes, "bytes", nil)
|
|
|
+ err = abi.UnpackIntoInterface(&Bytes, "bytes", nil)
|
|
|
if err == nil {
|
|
|
t.Error("expected error")
|
|
|
}
|
|
|
@@ -627,7 +625,7 @@ func TestUnmarshal(t *testing.T) {
|
|
|
buff.Write(common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000005"))
|
|
|
buff.Write(common.RightPadBytes([]byte("hello"), 32))
|
|
|
|
|
|
- err = abi.Unpack(&Bytes, "bytes", buff.Bytes())
|
|
|
+ err = abi.UnpackIntoInterface(&Bytes, "bytes", buff.Bytes())
|
|
|
if err != nil {
|
|
|
t.Error(err)
|
|
|
}
|
|
|
@@ -641,7 +639,7 @@ func TestUnmarshal(t *testing.T) {
|
|
|
buff.Write(common.RightPadBytes([]byte("hello"), 32))
|
|
|
|
|
|
var hash common.Hash
|
|
|
- err = abi.Unpack(&hash, "fixed", buff.Bytes())
|
|
|
+ err = abi.UnpackIntoInterface(&hash, "fixed", buff.Bytes())
|
|
|
if err != nil {
|
|
|
t.Error(err)
|
|
|
}
|
|
|
@@ -654,12 +652,12 @@ func TestUnmarshal(t *testing.T) {
|
|
|
// marshal error
|
|
|
buff.Reset()
|
|
|
buff.Write(common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000020"))
|
|
|
- err = abi.Unpack(&Bytes, "bytes", buff.Bytes())
|
|
|
+ err = abi.UnpackIntoInterface(&Bytes, "bytes", buff.Bytes())
|
|
|
if err == nil {
|
|
|
t.Error("expected error")
|
|
|
}
|
|
|
|
|
|
- err = abi.Unpack(&Bytes, "multi", make([]byte, 64))
|
|
|
+ err = abi.UnpackIntoInterface(&Bytes, "multi", make([]byte, 64))
|
|
|
if err == nil {
|
|
|
t.Error("expected error")
|
|
|
}
|
|
|
@@ -670,7 +668,7 @@ func TestUnmarshal(t *testing.T) {
|
|
|
buff.Write(common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000003"))
|
|
|
// marshal int array
|
|
|
var intArray [3]*big.Int
|
|
|
- err = abi.Unpack(&intArray, "intArraySingle", buff.Bytes())
|
|
|
+ err = abi.UnpackIntoInterface(&intArray, "intArraySingle", buff.Bytes())
|
|
|
if err != nil {
|
|
|
t.Error(err)
|
|
|
}
|
|
|
@@ -691,7 +689,7 @@ func TestUnmarshal(t *testing.T) {
|
|
|
buff.Write(common.Hex2Bytes("0000000000000000000000000100000000000000000000000000000000000000"))
|
|
|
|
|
|
var outAddr []common.Address
|
|
|
- err = abi.Unpack(&outAddr, "addressSliceSingle", buff.Bytes())
|
|
|
+ err = abi.UnpackIntoInterface(&outAddr, "addressSliceSingle", buff.Bytes())
|
|
|
if err != nil {
|
|
|
t.Fatal("didn't expect error:", err)
|
|
|
}
|
|
|
@@ -718,7 +716,7 @@ func TestUnmarshal(t *testing.T) {
|
|
|
A []common.Address
|
|
|
B []common.Address
|
|
|
}
|
|
|
- err = abi.Unpack(&outAddrStruct, "addressSliceDouble", buff.Bytes())
|
|
|
+ err = abi.UnpackIntoInterface(&outAddrStruct, "addressSliceDouble", buff.Bytes())
|
|
|
if err != nil {
|
|
|
t.Fatal("didn't expect error:", err)
|
|
|
}
|
|
|
@@ -746,7 +744,7 @@ func TestUnmarshal(t *testing.T) {
|
|
|
buff.Reset()
|
|
|
buff.Write(common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000100"))
|
|
|
|
|
|
- err = abi.Unpack(&outAddr, "addressSliceSingle", buff.Bytes())
|
|
|
+ err = abi.UnpackIntoInterface(&outAddr, "addressSliceSingle", buff.Bytes())
|
|
|
if err == nil {
|
|
|
t.Fatal("expected error:", err)
|
|
|
}
|
|
|
@@ -769,7 +767,7 @@ func TestUnpackTuple(t *testing.T) {
|
|
|
B *big.Int
|
|
|
}{new(big.Int), new(big.Int)}
|
|
|
|
|
|
- err = abi.Unpack(&v, "tuple", buff.Bytes())
|
|
|
+ err = abi.UnpackIntoInterface(&v, "tuple", buff.Bytes())
|
|
|
if err != nil {
|
|
|
t.Error(err)
|
|
|
} else {
|
|
|
@@ -841,7 +839,7 @@ func TestUnpackTuple(t *testing.T) {
|
|
|
A: big.NewInt(1),
|
|
|
}
|
|
|
|
|
|
- err = abi.Unpack(&ret, "tuple", buff.Bytes())
|
|
|
+ err = abi.UnpackIntoInterface(&ret, "tuple", buff.Bytes())
|
|
|
if err != nil {
|
|
|
t.Error(err)
|
|
|
}
|