diff --git a/pkg/smartcontract/parameter.go b/pkg/smartcontract/parameter.go index 379a75593..5dad09926 100644 --- a/pkg/smartcontract/parameter.go +++ b/pkg/smartcontract/parameter.go @@ -85,6 +85,8 @@ func (p *Parameter) MarshalJSON() ([]byte, error) { case MapType: ppair := p.Value.([]ParameterPair) resultRawValue, resultErr = json.Marshal(ppair) + case InteropInterfaceType: + resultRawValue = []byte("null") default: resultErr = errors.Errorf("Marshaller for type %s not implemented", p.Type) } @@ -166,6 +168,9 @@ func (p *Parameter) UnmarshalJSON(data []byte) (err error) { return } p.Value = h + case InteropInterfaceType: + // stub, ignore value, it can only be null + p.Value = nil default: return errors.Errorf("Unmarshaller for type %s not implemented", p.Type) } diff --git a/pkg/smartcontract/parameter_test.go b/pkg/smartcontract/parameter_test.go index 61d2fd6a6..72ce299a4 100644 --- a/pkg/smartcontract/parameter_test.go +++ b/pkg/smartcontract/parameter_test.go @@ -122,6 +122,13 @@ var marshalJSONTestCases = []struct { }, result: `{"type":"Hash256","value":"0xf037308fa0ab18155bccfc08485468c112409ea5064595699e98c545f245f32d"}`, }, + { + input: Parameter{ + Type: InteropInterfaceType, + Value: nil, + }, + result: `{"type":"InteropInterface","value":null}`, + }, } var marshalJSONErrorCases = []Parameter{ @@ -129,10 +136,6 @@ var marshalJSONErrorCases = []Parameter{ Type: UnknownType, Value: nil, }, - { - Type: InteropInterfaceType, - Value: nil, - }, { Type: IntegerType, Value: math.Inf(1), @@ -252,6 +255,27 @@ var unmarshalJSONTestCases = []struct { }, input: `{"type":"PublicKey","value":"03b3bf1502fbdc05449b506aaf04579724024b06542e49262bfaa3f70e200040a9"}`, }, + { + input: `{"type":"InteropInterface","value":null}`, + result: Parameter{ + Type: InteropInterfaceType, + Value: nil, + }, + }, + { + input: `{"type":"InteropInterface","value":""}`, + result: Parameter{ + Type: InteropInterfaceType, + Value: nil, + }, + }, + { + input: `{"type":"InteropInterface","value":"Hundertwasser"}`, + result: Parameter{ + Type: InteropInterfaceType, + Value: nil, + }, + }, } var unmarshalJSONErrorCases = []string{ @@ -272,8 +296,6 @@ var unmarshalJSONErrorCases = []string{ `{"type": "Map","value": ["key": {}]}`, // incorrect Map value `{"type": "Map","value": ["key": {"type":"String", "value":"qwer"}, "value": {"type":"Boolean"}]}`, // incorrect Map Value value `{"type": "Map","value": ["key": {"type":"String"}, "value": {"type":"Boolean", "value":true}]}`, // incorrect Map Key value - - `{"type": "InteropInterface","value": ""}`, // ununmarshable type } func TestParam_UnmarshalJSON(t *testing.T) {