From fd36f1404c0a730969c0ab7be654be313c7ba410 Mon Sep 17 00:00:00 2001 From: Fernando Diaz Toledano Date: Fri, 21 Oct 2022 11:17:29 +0200 Subject: [PATCH 1/2] Fix rules --- src/RpcClient/Utility.cs | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/RpcClient/Utility.cs b/src/RpcClient/Utility.cs index b0d481eb4..93376bdfb 100644 --- a/src/RpcClient/Utility.cs +++ b/src/RpcClient/Utility.cs @@ -11,6 +11,7 @@ using Neo.Cryptography.ECC; using Neo.Json; using Neo.Network.P2P.Payloads; +using Neo.Network.P2P.Payloads.Conditions; using Neo.SmartContract; using Neo.SmartContract.Native; using Neo.VM.Types; @@ -188,6 +189,7 @@ public static Signer SignerFromJson(JObject json, ProtocolSettings protocolSetti return new Signer { Account = json["account"].ToScriptHash(protocolSettings), + Rules = ((JArray)json["rules"])?.Select(p => RuleFromJson((JObject)p, protocolSettings)).ToArray(), Scopes = (WitnessScope)Enum.Parse(typeof(WitnessScope), json["scopes"].AsString()), AllowedContracts = ((JArray)json["allowedcontracts"])?.Select(p => p.ToScriptHash(protocolSettings)).ToArray(), AllowedGroups = ((JArray)json["allowedgroups"])?.Select(p => ECPoint.Parse(p.AsString(), ECCurve.Secp256r1)).ToArray() @@ -219,6 +221,42 @@ public static Witness WitnessFromJson(JObject json) }; } + public static WitnessRule RuleFromJson(JObject json, ProtocolSettings protocolSettings) + { + return new WitnessRule() + { + Action = Enum.Parse(json["action"].AsString()), + Condition = RuleExpressionFromJson((JObject)json["condition"], protocolSettings) + }; + } + + public static WitnessCondition RuleExpressionFromJson(JObject json, ProtocolSettings protocolSettings) + { + switch (json["type"].AsString()) + { + case "Or": + return new OrCondition() { Expressions = ((JArray)json["expressions"])?.Select(p => RuleExpressionFromJson((JObject)p, protocolSettings)).ToArray() }; + case "And": + return new AndCondition() { Expressions = ((JArray)json["expressions"])?.Select(p => RuleExpressionFromJson((JObject)p, protocolSettings)).ToArray() }; + case "Boolean": + return new BooleanCondition() { Expression = json["expressions"].AsBoolean() }; + case "Not": + return new NotCondition() { Expression = RuleExpressionFromJson((JObject)json["expressions"], protocolSettings)) }; + case "Group": + return new GroupCondition() { Group = ECPoint.Parse(json["group"].AsString(), ECCurve.Secp256r1) }; + case "CalledByContract": + return new CalledByContractCondition() { Hash = json["hash"].ToScriptHash(protocolSettings) }; + case "ScriptHash": + return new ScriptHashCondition() { Hash = json["hash"].ToScriptHash(protocolSettings) }; + case "CalledByEntry": + return new CalledByEntryCondition(); + case "CalledByGroup": + return new CalledByGroupCondition() { Group = ECPoint.Parse(json["group"].AsString(), ECCurve.Secp256r1) }; + } + + throw new FormatException("Wrong rule's condition type"); + } + public static StackItem StackItemFromJson(JObject json) { StackItemType type = json["type"].GetEnum(); From 55ebdc21d0a3948b82aa548bf35d0a7ea1342d8e Mon Sep 17 00:00:00 2001 From: Owen Zhang <38493437+superboyiii@users.noreply.github.com> Date: Tue, 25 Oct 2022 11:38:33 +0800 Subject: [PATCH 2/2] Update src/RpcClient/Utility.cs --- src/RpcClient/Utility.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/RpcClient/Utility.cs b/src/RpcClient/Utility.cs index 93376bdfb..c455e95d6 100644 --- a/src/RpcClient/Utility.cs +++ b/src/RpcClient/Utility.cs @@ -241,7 +241,7 @@ public static WitnessCondition RuleExpressionFromJson(JObject json, ProtocolSett case "Boolean": return new BooleanCondition() { Expression = json["expressions"].AsBoolean() }; case "Not": - return new NotCondition() { Expression = RuleExpressionFromJson((JObject)json["expressions"], protocolSettings)) }; + return new NotCondition() { Expression = RuleExpressionFromJson((JObject)json["expressions"], protocolSettings) }; case "Group": return new GroupCondition() { Group = ECPoint.Parse(json["group"].AsString(), ECCurve.Secp256r1) }; case "CalledByContract":