From 95845018702706df58c489a6dfcd985f6cddac76 Mon Sep 17 00:00:00 2001 From: Fernando Diaz Toledano Date: Fri, 23 Feb 2024 12:46:49 +0100 Subject: [PATCH 1/3] Add committee change events --- src/Neo/SmartContract/Native/NeoToken.cs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/Neo/SmartContract/Native/NeoToken.cs b/src/Neo/SmartContract/Native/NeoToken.cs index ed796a9756..e6996ba70d 100644 --- a/src/Neo/SmartContract/Native/NeoToken.cs +++ b/src/Neo/SmartContract/Native/NeoToken.cs @@ -63,6 +63,9 @@ public sealed class NeoToken : FungibleToken "from", ContractParameterType.PublicKey, "to", ContractParameterType.PublicKey, "amount", ContractParameterType.Integer)] + [ContractEvent(Hardfork.HF_Cockatrice, 3, name: "CommitteeChanged", + "previous", ContractParameterType.Array, + "new", ContractParameterType.Array)] internal NeoToken() : base() { this.TotalAmount = 100000000 * Factor; @@ -192,10 +195,23 @@ internal override ContractTask OnPersist(ApplicationEngine engine) // Set next committee if (ShouldRefreshCommittee(engine.PersistingBlock.Index, engine.ProtocolSettings.CommitteeMembersCount)) { - StorageItem storageItem = engine.Snapshot.GetAndChange(CreateStorageKey(Prefix_Committee)); + var storageItem = engine.Snapshot.GetAndChange(CreateStorageKey(Prefix_Committee)); var cachedCommittee = storageItem.GetInteroperable(); + + var prevCommittee = cachedCommittee.Select(u => u.PublicKey).ToArray(); + cachedCommittee.Clear(); cachedCommittee.AddRange(ComputeCommitteeMembers(engine.Snapshot, engine.ProtocolSettings)); + + var newCommittee = cachedCommittee.Select(u => u.PublicKey).ToArray(); + + if (!newCommittee.SequenceEqual(prevCommittee)) + { + engine.SendNotification(Hash, "CommitteeChanged", new VM.Types.Array(engine.ReferenceCounter) { + new VM.Types.Array(engine.ReferenceCounter, prevCommittee.Select(u => (ByteString)u.ToArray())) , + new VM.Types.Array(engine.ReferenceCounter, newCommittee.Select(u => (ByteString)u.ToArray())) + }); + } } return ContractTask.CompletedTask; } From 35a4d985f0988dce306a5e1d841f261f6a024857 Mon Sep 17 00:00:00 2001 From: Shargon Date: Mon, 26 Feb 2024 01:03:21 -0800 Subject: [PATCH 2/3] Update src/Neo/SmartContract/Native/NeoToken.cs --- src/Neo/SmartContract/Native/NeoToken.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Neo/SmartContract/Native/NeoToken.cs b/src/Neo/SmartContract/Native/NeoToken.cs index e6996ba70d..9059f0578f 100644 --- a/src/Neo/SmartContract/Native/NeoToken.cs +++ b/src/Neo/SmartContract/Native/NeoToken.cs @@ -64,7 +64,7 @@ public sealed class NeoToken : FungibleToken "to", ContractParameterType.PublicKey, "amount", ContractParameterType.Integer)] [ContractEvent(Hardfork.HF_Cockatrice, 3, name: "CommitteeChanged", - "previous", ContractParameterType.Array, + "old", ContractParameterType.Array, "new", ContractParameterType.Array)] internal NeoToken() : base() { From 4e283bf98345d1ed43c3f19e3fb9b357f8e2f7c2 Mon Sep 17 00:00:00 2001 From: Shargon Date: Mon, 26 Feb 2024 01:04:06 -0800 Subject: [PATCH 3/3] Update src/Neo/SmartContract/Native/NeoToken.cs --- src/Neo/SmartContract/Native/NeoToken.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Neo/SmartContract/Native/NeoToken.cs b/src/Neo/SmartContract/Native/NeoToken.cs index 9059f0578f..72c92a14bc 100644 --- a/src/Neo/SmartContract/Native/NeoToken.cs +++ b/src/Neo/SmartContract/Native/NeoToken.cs @@ -63,7 +63,7 @@ public sealed class NeoToken : FungibleToken "from", ContractParameterType.PublicKey, "to", ContractParameterType.PublicKey, "amount", ContractParameterType.Integer)] - [ContractEvent(Hardfork.HF_Cockatrice, 3, name: "CommitteeChanged", + [ContractEvent(3, name: "CommitteeChanged", "old", ContractParameterType.Array, "new", ContractParameterType.Array)] internal NeoToken() : base()