@@ -26,7 +26,16 @@ public sealed class RoleManagement : NativeContract
26
26
{
27
27
[ ContractEvent ( 0 , name : "Designation" ,
28
28
"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
+
30
39
internal RoleManagement ( ) : base ( ) { }
31
40
32
41
/// <summary>
@@ -69,7 +78,18 @@ private void DesignateAsRole(ApplicationEngine engine, Role role, ECPoint[] node
69
78
list . AddRange ( nodes ) ;
70
79
list . Sort ( ) ;
71
80
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
+ }
73
93
}
74
94
75
95
private class NodeList : InteroperableList < ECPoint >
0 commit comments