Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 46 additions & 12 deletions neo/SmartContract/ContractParameter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,9 @@ public ContractParameter(ContractParameterType type)
case ContractParameterType.Array:
this.Value = new List<ContractParameter>();
break;
case ContractParameterType.Map:
this.Value = new List<KeyValuePair<ContractParameter, ContractParameter>>();
break;
default:
throw new ArgumentException();
}
Expand All @@ -58,8 +61,7 @@ public static ContractParameter FromJson(JObject json)
{
Type = json["type"].AsEnum<ContractParameterType>()
};
JObject value = json["value"];
if (value != null)
if (json["value"] != null)
switch (parameter.Type)
{
case ContractParameterType.Signature:
Expand All @@ -85,7 +87,10 @@ public static ContractParameter FromJson(JObject json)
parameter.Value = json["value"].AsString();
break;
case ContractParameterType.Array:
parameter.Value = ((JArray)json["value"]).Select(p => FromJson(p)).ToArray();
parameter.Value = ((JArray)json["value"]).Select(p => FromJson(p)).ToList();
break;
case ContractParameterType.Map:
parameter.Value = ((JArray)json["value"]).Select(p => new KeyValuePair<ContractParameter, ContractParameter>(FromJson(p["key"]), FromJson(p["value"]))).ToList();
break;
default:
throw new ArgumentException();
Expand Down Expand Up @@ -152,6 +157,15 @@ public JObject ToJson()
case ContractParameterType.Array:
json["value"] = new JArray(((IList<ContractParameter>)Value).Select(p => p.ToJson()));
break;
case ContractParameterType.Map:
json["value"] = new JArray(((IList<KeyValuePair<ContractParameter, ContractParameter>>)Value).Select(p =>
{
JObject item = new JObject();
item["key"] = p.Key.ToJson();
item["value"] = p.Value.ToJson();
return item;
}));
break;
}
return json;
}
Expand All @@ -165,17 +179,37 @@ public override string ToString()
case byte[] data:
return data.ToHexString();
case IList<ContractParameter> data:
StringBuilder sb = new StringBuilder();
sb.Append('[');
foreach (ContractParameter item in data)
{
sb.Append(item);
sb.Append(", ");
StringBuilder sb = new StringBuilder();
sb.Append('[');
foreach (ContractParameter item in data)
{
sb.Append(item);
sb.Append(", ");
}
if (data.Count > 0)
sb.Length -= 2;
sb.Append(']');
return sb.ToString();
}
case IList<KeyValuePair<ContractParameter, ContractParameter>> data:
{
StringBuilder sb = new StringBuilder();
sb.Append('[');
foreach (var item in data)
{
sb.Append('{');
sb.Append(item.Key);
sb.Append(',');
sb.Append(item.Value);
sb.Append('}');
sb.Append(", ");
}
if (data.Count > 0)
sb.Length -= 2;
sb.Append(']');
return sb.ToString();
}
if (data.Count > 0)
sb.Length -= 2;
sb.Append(']');
return sb.ToString();
default:
return Value.ToString();
}
Expand Down
1 change: 1 addition & 0 deletions neo/SmartContract/ContractParameterType.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ public enum ContractParameterType : byte
String = 0x07,

Array = 0x10,
Map = 0x12,

InteropInterface = 0xf0,

Expand Down
8 changes: 7 additions & 1 deletion neo/VM/Helper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,13 @@ public static ContractParameter ToParameter(this StackItem item)
return new ContractParameter
{
Type = ContractParameterType.Array,
Value = array.Select(p => p.ToParameter()).ToArray()
Value = array.Select(p => p.ToParameter()).ToList()
};
case Map map:
return new ContractParameter
{
Type = ContractParameterType.Map,
Value = map.Select(p => new KeyValuePair<ContractParameter, ContractParameter>(p.Key.ToParameter(), p.Value.ToParameter())).ToList()
};
case VMBoolean _:
return new ContractParameter
Expand Down