aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeffrey Wilcke <geffobscura@gmail.com>2016-04-21 03:25:19 +0800
committerJeffrey Wilcke <geffobscura@gmail.com>2016-04-28 18:41:42 +0800
commitc3d5250473794e5b7732e0d06941a6736cff2fca (patch)
tree453048c29297295260c698b330c804c7cdd7c78c
parente0dc45fce2276fcabae8dca61dc766f98dde23e2 (diff)
downloaddexon-c3d5250473794e5b7732e0d06941a6736cff2fca.tar.gz
dexon-c3d5250473794e5b7732e0d06941a6736cff2fca.tar.zst
dexon-c3d5250473794e5b7732e0d06941a6736cff2fca.zip
accounts/abi: added unpacking "anything" in to interface{}
-rw-r--r--accounts/abi/abi.go2
-rw-r--r--accounts/abi/abi_test.go9
2 files changed, 11 insertions, 0 deletions
diff --git a/accounts/abi/abi.go b/accounts/abi/abi.go
index e7cf4aac7..cce89de1b 100644
--- a/accounts/abi/abi.go
+++ b/accounts/abi/abi.go
@@ -316,6 +316,8 @@ func set(dst, src reflect.Value, output Argument) error {
return fmt.Errorf("abi: cannot unmarshal src (len=%d) in to dst (len=%d)", output.Type.SliceSize, dst.Len())
}
reflect.Copy(dst, src)
+ case dstType.Kind() == reflect.Interface:
+ dst.Set(src)
default:
return fmt.Errorf("abi: cannot unmarshal %v in to %v", src.Type(), dst.Type())
}
diff --git a/accounts/abi/abi_test.go b/accounts/abi/abi_test.go
index 249d37dca..4b41d2eee 100644
--- a/accounts/abi/abi_test.go
+++ b/accounts/abi/abi_test.go
@@ -161,6 +161,13 @@ func TestSimpleMethodUnpack(t *testing.T) {
"hash",
nil,
},
+ {
+ `[ { "type": "bytes32" } ]`,
+ pad([]byte{1}, 32, false),
+ pad([]byte{1}, 32, false),
+ "interface",
+ nil,
+ },
} {
abiDefinition := fmt.Sprintf(`[{ "name" : "method", "outputs": %s}]`, test.def)
abi, err := JSON(strings.NewReader(abiDefinition))
@@ -203,6 +210,8 @@ func TestSimpleMethodUnpack(t *testing.T) {
var v common.Hash
err = abi.Unpack(&v, "method", test.marshalledOutput)
outvar = v
+ case "interface":
+ err = abi.Unpack(&outvar, "method", test.marshalledOutput)
default:
t.Errorf("unsupported type '%v' please add it to the switch statement in this test", test.outVar)
continue