diff --git a/pkg/smartcontract/parameter.go b/pkg/smartcontract/parameter.go index 498e4dc8c..fd306709d 100644 --- a/pkg/smartcontract/parameter.go +++ b/pkg/smartcontract/parameter.go @@ -72,16 +72,13 @@ func (p *Parameter) MarshalJSON() ([]byte, error) { resultRawValue, resultErr = json.Marshal(hex.EncodeToString(p.Value.([]byte))) } case ArrayType: - var value = make([]rawParameter, 0) + var value = make([]json.RawMessage, 0) for _, parameter := range p.Value.([]Parameter) { - rawValue, err := json.Marshal(parameter.Value) + rawValue, err := json.Marshal(¶meter) if err != nil { return nil, err } - value = append(value, rawParameter{ - Type: parameter.Type, - Value: rawValue, - }) + value = append(value, rawValue) } resultRawValue, resultErr = json.Marshal(value) case MapType: diff --git a/pkg/smartcontract/parameter_test.go b/pkg/smartcontract/parameter_test.go index 565ca95d6..3135ddd08 100644 --- a/pkg/smartcontract/parameter_test.go +++ b/pkg/smartcontract/parameter_test.go @@ -51,6 +51,22 @@ var marshalJSONTestCases = []struct { }, result: `{"type":"Array","value":[{"type":"String","value":"str 1"},{"type":"Integer","value":2}]}`, }, + { + input: Parameter{ + Type: ArrayType, + Value: []Parameter{ + {Type: ByteArrayType, Value: []byte{1, 2}}, + { + Type: ArrayType, + Value: []Parameter{ + {Type: ByteArrayType, Value: []byte{3, 2, 1}}, + {Type: ByteArrayType, Value: []byte{7, 8, 9}}, + }}, + }, + }, + result: `{"type":"Array","value":[{"type":"ByteArray","value":"0102"},{"type":"Array","value":[` + + `{"type":"ByteArray","value":"030201"},{"type":"ByteArray","value":"070809"}]}]}`, + }, { input: Parameter{ Type: MapType,