diff --git a/accounts/abi/error.go b/accounts/abi/error.go index 90ab92f7549fa..e2c10a2769ec3 100644 --- a/accounts/abi/error.go +++ b/accounts/abi/error.go @@ -17,6 +17,8 @@ package abi import ( + "bytes" + "errors" "fmt" "strings" @@ -74,6 +76,16 @@ func NewError(name string, inputs Arguments) Error { } } -func (err *Error) String() string { - return err.str +func (e *Error) String() string { + return e.str +} + +func (e *Error) Unpack(data []byte) (interface{}, error) { + if len(data) < 4 { + return "", errors.New("invalid data for unpacking") + } + if !bytes.Equal(data[:4], e.ID[:4]) { + return "", errors.New("invalid data for unpacking") + } + return e.Inputs.Unpack(data[4:]) }