Skip to content

Commit 993e3fe

Browse files
shargonJim8y
authored andcommitted
Add entries to Designation event (#3397)
* Add entries to Designation event * Change to HF_Echidna * Add UT * Add count
1 parent 7e31d0c commit 993e3fe

File tree

2 files changed

+40
-2
lines changed

2 files changed

+40
-2
lines changed

src/Neo/SmartContract/Native/RoleManagement.cs

+22-2
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,16 @@ public sealed class RoleManagement : NativeContract
2626
{
2727
[ContractEvent(0, name: "Designation",
2828
"Role", ContractParameterType.Integer,
29-
"BlockIndex", ContractParameterType.Integer)]
29+
"BlockIndex", ContractParameterType.Integer,
30+
Hardfork.HF_Echidna)]
31+
32+
[ContractEvent(Hardfork.HF_Echidna, 0, name: "Designation",
33+
"Role", ContractParameterType.Integer,
34+
"BlockIndex", ContractParameterType.Integer,
35+
"Old", ContractParameterType.Array,
36+
"New", ContractParameterType.Array
37+
)]
38+
3039
internal RoleManagement() : base() { }
3140

3241
/// <summary>
@@ -69,7 +78,18 @@ private void DesignateAsRole(ApplicationEngine engine, Role role, ECPoint[] node
6978
list.AddRange(nodes);
7079
list.Sort();
7180
engine.SnapshotCache.Add(key, new StorageItem(list));
72-
engine.SendNotification(Hash, "Designation", new VM.Types.Array(engine.ReferenceCounter, new StackItem[] { (int)role, engine.PersistingBlock.Index }));
81+
82+
if (engine.IsHardforkEnabled(Hardfork.HF_Echidna))
83+
{
84+
var oldNodes = new VM.Types.Array(engine.ReferenceCounter, GetDesignatedByRole(engine.Snapshot, role, index - 1).Select(u => (ByteString)u.EncodePoint(true)));
85+
var newNodes = new VM.Types.Array(engine.ReferenceCounter, nodes.Select(u => (ByteString)u.EncodePoint(true)));
86+
87+
engine.SendNotification(Hash, "Designation", new VM.Types.Array(engine.ReferenceCounter, [(int)role, engine.PersistingBlock.Index, oldNodes, newNodes]));
88+
}
89+
else
90+
{
91+
engine.SendNotification(Hash, "Designation", new VM.Types.Array(engine.ReferenceCounter, [(int)role, engine.PersistingBlock.Index]));
92+
}
7393
}
7494

7595
private class NodeList : InteroperableList<ECPoint>

tests/Neo.UnitTests/SmartContract/Native/UT_NativeContract.cs

+18
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,24 @@ public void TestActiveDeprecatedIn()
8080
Assert.IsFalse(NativeContract.IsActive(new active() { ActiveIn = null, DeprecatedIn = Hardfork.HF_Cockatrice }, settings.IsHardforkEnabled, 20));
8181
}
8282

83+
[TestMethod]
84+
public void TestActiveDeprecatedInRoleManagement()
85+
{
86+
string json = UT_ProtocolSettings.CreateHKSettings("\"HF_Echidna\": 20");
87+
var file = Path.GetTempFileName();
88+
File.WriteAllText(file, json);
89+
ProtocolSettings settings = ProtocolSettings.Load(file, false);
90+
File.Delete(file);
91+
92+
var before = NativeContract.RoleManagement.GetContractState(settings.IsHardforkEnabled, 19);
93+
var after = NativeContract.RoleManagement.GetContractState(settings.IsHardforkEnabled, 20);
94+
95+
Assert.AreEqual(2, before.Manifest.Abi.Events[0].Parameters.Length);
96+
Assert.AreEqual(1, before.Manifest.Abi.Events.Length);
97+
Assert.AreEqual(4, after.Manifest.Abi.Events[0].Parameters.Length);
98+
Assert.AreEqual(1, after.Manifest.Abi.Events.Length);
99+
}
100+
83101
[TestMethod]
84102
public void TestGetContract()
85103
{

0 commit comments

Comments
 (0)