1use crate::error::MixnetContractError;
5use crate::gateway::GatewayConfigUpdate;
6use crate::mixnode::{MixNodeConfigUpdate, NodeCostParams};
7use crate::nym_node::Role;
8use crate::reward_params::{ActiveSetUpdate, IntervalRewardParams, IntervalRewardingParamsUpdate};
9use crate::rewarding::RewardDistribution;
10use crate::{BlockHeight, ContractStateParamsUpdate, EpochId, IdentityKeyRef, Interval, NodeId};
11use cosmwasm_std::{Addr, Coin, Decimal, Event, attr};
12pub use nym_contracts_common::events::*;
13use std::fmt::Display;
14
15pub const EVENT_VERSION_PREFIX: &str = "v2_";
16
17pub enum MixnetEventType {
18 MixnodeBonding,
19 NymNodeBonding,
20 NymNodeUnbonding,
21 PendingNymNodeUnbonding,
22 GatewayMigration,
23 MixnodeMigration,
24 PendingPledgeIncrease,
25 PledgeIncrease,
26 PendingPledgeDecrease,
27 PledgeDecrease,
28 GatewayBonding,
29 GatewayUnbonding,
30 PendingMixnodeUnbonding,
31 MixnodeUnbonding,
32 MixnodeConfigUpdate,
33 PendingCostParamsUpdate,
34 CostParamsUpdate,
35 NodeRewarding,
36 WithdrawDelegatorReward,
37 WithdrawOperatorReward,
38 PendingActiveSetUpdate,
39 ActiveSetUpdate,
40 PendingIntervalRewardingParamsUpdate,
41 IntervalRewardingParamsUpdate,
42 PendingDelegation,
43 PendingUndelegation,
44 Delegation,
45 DelegationOnUnbonding,
46 Undelegation,
47 ContractSettingsUpdate,
48 NymNodeSemverUpdate,
49 RewardingValidatorUpdate,
50 BeginEpochTransition,
51 AdvanceEpoch,
52 RoleAssignment,
53 ExecutePendingEpochEvents,
54 ExecutePendingIntervalEvents,
55 ReconcilePendingEvents,
56 PendingIntervalConfigUpdate,
57 IntervalConfigUpdate,
58 GatewayConfigUpdate,
59}
60
61impl From<MixnetEventType> for String {
62 fn from(typ: MixnetEventType) -> Self {
63 typ.to_string()
64 }
65}
66
67impl Display for MixnetEventType {
68 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
69 let event_name = match self {
70 MixnetEventType::MixnodeBonding => "mixnode_bonding",
71 MixnetEventType::NymNodeBonding => "nymnode_bonding",
72 MixnetEventType::NymNodeUnbonding => "nymnode_unbonding",
73 MixnetEventType::PendingNymNodeUnbonding => "pending_nymnode_unbonding",
74 MixnetEventType::GatewayMigration => "gateway_migration",
75 MixnetEventType::MixnodeMigration => "mixnode_migration",
76 MixnetEventType::PendingPledgeIncrease => "pending_pledge_increase",
77 MixnetEventType::PledgeIncrease => "pledge_increase",
78 MixnetEventType::PendingPledgeDecrease => "pending_pledge_decrease",
79 MixnetEventType::PledgeDecrease => "pledge_decrease",
80 MixnetEventType::GatewayBonding => "gateway_bonding",
81 MixnetEventType::GatewayUnbonding => "gateway_unbonding",
82 MixnetEventType::PendingMixnodeUnbonding => "pending_mixnode_unbonding",
83 MixnetEventType::MixnodeConfigUpdate => "mixnode_config_update",
84 MixnetEventType::MixnodeUnbonding => "mixnode_unbonding",
85 MixnetEventType::PendingCostParamsUpdate => "pending_cost_params_update",
86 MixnetEventType::CostParamsUpdate => "cost_params_update",
87 MixnetEventType::NodeRewarding => "node_rewarding",
88 MixnetEventType::WithdrawDelegatorReward => "withdraw_delegator_reward",
89 MixnetEventType::WithdrawOperatorReward => "withdraw_operator_reward",
90 MixnetEventType::PendingActiveSetUpdate => "pending_active_set_update",
91 MixnetEventType::ActiveSetUpdate => "active_set_update",
92 MixnetEventType::PendingIntervalRewardingParamsUpdate => {
93 "pending_interval_rewarding_params_update"
94 }
95 MixnetEventType::IntervalRewardingParamsUpdate => "interval_rewarding_params_update",
96 MixnetEventType::PendingDelegation => "pending_delegation",
97 MixnetEventType::PendingUndelegation => "pending_undelegation",
98 MixnetEventType::Delegation => "delegation",
99 MixnetEventType::Undelegation => "undelegation",
100 MixnetEventType::ContractSettingsUpdate => "settings_update",
101 MixnetEventType::NymNodeSemverUpdate => "nym_node_semver_update",
102 MixnetEventType::RewardingValidatorUpdate => "rewarding_validator_address_update",
103 MixnetEventType::BeginEpochTransition => "beginning_epoch_transition",
104 MixnetEventType::AdvanceEpoch => "advance_epoch",
105 MixnetEventType::RoleAssignment => "role_assignment",
106 MixnetEventType::ExecutePendingEpochEvents => "execute_pending_epoch_events",
107 MixnetEventType::ExecutePendingIntervalEvents => "execute_pending_interval_events",
108 MixnetEventType::ReconcilePendingEvents => "reconcile_pending_events",
109 MixnetEventType::PendingIntervalConfigUpdate => "pending_interval_config_update",
110 MixnetEventType::IntervalConfigUpdate => "interval_config_update",
111 MixnetEventType::DelegationOnUnbonding => "delegation_on_unbonding_node",
112 MixnetEventType::GatewayConfigUpdate => "gateway_config_update",
113 };
114
115 write!(f, "{EVENT_VERSION_PREFIX}{event_name}")
116 }
117}
118
119pub const OWNER_KEY: &str = "owner";
121pub const AMOUNT_KEY: &str = "amount";
122pub const ERROR_MESSAGE_KEY: &str = "error_message";
123
124pub const DELEGATOR_KEY: &str = "delegator";
128pub const DELEGATION_TARGET_KEY: &str = "delegation_target";
129pub const UNIT_REWARD_KEY: &str = "unit_reward";
130
131pub const MIX_ID_KEY: &str = "mix_id";
133pub const NODE_ID_KEY: &str = "node_id";
134pub const NODE_IDENTITY_KEY: &str = "identity";
135
136pub const NEW_MINIMUM_PLEDGE_KEY: &str = "new_minimum_pledge";
138pub const NEW_MINIMUM_DELEGATION_KEY: &str = "new_minimum_delegation";
139pub const NEW_PROFIT_MARGIN_RANGE_KEY: &str = "new_profit_margin_range";
140pub const NEW_INTERVAL_OPERATING_COST_RANGE_KEY: &str = "new_interval_operating_cost_range";
141pub const NEW_VERSION_WEIGHTS_RANGE_KEY: &str = "new_version_weights_range";
142pub const NEW_VERSION_SCORE_FORMULA_PARAMS_KEY: &str = "new_version_score_formula_params";
143pub const NYM_NODE_CURRENT_SEMVER_KEY: &str = "new_current_semver";
144pub const NYM_NODE_CURRENT_SEMVER_ID_KEY: &str = "new_current_semver_id";
145
146pub const OLD_REWARDING_VALIDATOR_ADDRESS_KEY: &str = "old_rewarding_validator_address";
147pub const NEW_REWARDING_VALIDATOR_ADDRESS_KEY: &str = "new_rewarding_validator_address";
148
149pub const UPDATED_MIXNODE_CONFIG_KEY: &str = "updated_mixnode_config";
150pub const UPDATED_GATEWAY_CONFIG_KEY: &str = "updated_gateway_config";
151pub const UPDATED_MIXNODE_COST_PARAMS_KEY: &str = "updated_mixnode_cost_params";
152
153pub const INTERVAL_KEY: &str = "interval_details";
155pub const OPERATOR_REWARD_KEY: &str = "operator_reward";
156pub const DELEGATES_REWARD_KEY: &str = "delegates_reward";
157pub const APPROXIMATE_TIME_LEFT_SECS_KEY: &str = "approximate_time_left_secs";
158pub const INTERVAL_REWARDING_PARAMS_UPDATE_KEY: &str = "interval_rewarding_params_update";
159pub const UPDATED_INTERVAL_REWARDING_PARAMS_KEY: &str = "updated_interval_rewarding_params";
160pub const PRIOR_DELEGATES_KEY: &str = "prior_delegates";
161pub const PRIOR_UNIT_REWARD_KEY: &str = "prior_unit_reward";
162
163pub const NO_REWARD_REASON_KEY: &str = "no_reward_reason";
164pub const BOND_NOT_FOUND_VALUE: &str = "bond_not_found";
165pub const ZERO_PERFORMANCE_OR_WORK_VALUE: &str = "zero_performance_or_work";
166
167pub const NUM_MIXNODES_KEY: &str = "num_mixnodes";
169pub const NUM_ENTRIES_KEY: &str = "num_entry_gateways";
170pub const NUM_EXITS_KEY: &str = "num_exit_gateways";
171
172pub const CURRENT_EPOCH_KEY: &str = "current_epoch";
173pub const NEW_CURRENT_EPOCH_KEY: &str = "new_current_epoch";
174
175pub const ROLE_KEY: &str = "role";
176pub const NODE_COUNT_KEY: &str = "node_count";
177
178pub const EVENTS_EXECUTED_KEY: &str = "number_of_events_executed";
180pub const EVENT_CREATION_HEIGHT_KEY: &str = "created_at";
181pub const REWARDED_SET_NODES_KEY: &str = "rewarded_set_nodes";
182pub const NEW_EPOCHS_DURATION_SECS_KEY: &str = "new_epoch_durations_secs";
183pub const NEW_EPOCHS_IN_INTERVAL: &str = "new_epochs_in_interval";
184
185pub fn new_delegation_event(
186 created_at: BlockHeight,
187 delegator: &Addr,
188 amount: &Coin,
189 mix_id: NodeId,
190 unit_reward: Decimal,
191) -> Event {
192 Event::new(MixnetEventType::Delegation)
193 .add_attribute(EVENT_CREATION_HEIGHT_KEY, created_at.to_string())
194 .add_attribute(DELEGATOR_KEY, delegator)
195 .add_attribute(AMOUNT_KEY, amount.to_string())
196 .add_attribute(DELEGATION_TARGET_KEY, mix_id.to_string())
197 .add_attribute(UNIT_REWARD_KEY, unit_reward.to_string())
198}
199
200pub fn new_delegation_on_unbonded_node_event(delegator: &Addr, mix_id: NodeId) -> Event {
201 Event::new(MixnetEventType::Delegation)
202 .add_attribute(DELEGATOR_KEY, delegator)
203 .add_attribute(DELEGATION_TARGET_KEY, mix_id.to_string())
204}
205
206pub fn new_pending_delegation_event(delegator: &Addr, amount: &Coin, mix_id: NodeId) -> Event {
207 Event::new(MixnetEventType::PendingDelegation)
208 .add_attribute(DELEGATOR_KEY, delegator)
209 .add_attribute(AMOUNT_KEY, amount.to_string())
210 .add_attribute(DELEGATION_TARGET_KEY, mix_id.to_string())
211}
212
213pub fn new_withdraw_operator_reward_event(owner: &Addr, amount: Coin, mix_id: NodeId) -> Event {
214 Event::new(MixnetEventType::WithdrawOperatorReward)
215 .add_attribute(OWNER_KEY, owner.as_str())
216 .add_attribute(AMOUNT_KEY, amount.to_string())
217 .add_attribute(MIX_ID_KEY, mix_id.to_string())
218}
219
220pub fn new_withdraw_delegator_reward_event(
221 delegator: &Addr,
222 amount: Coin,
223 mix_id: NodeId,
224) -> Event {
225 Event::new(MixnetEventType::WithdrawDelegatorReward)
226 .add_attribute(DELEGATOR_KEY, delegator)
227 .add_attribute(AMOUNT_KEY, amount.to_string())
228 .add_attribute(DELEGATION_TARGET_KEY, mix_id.to_string())
229}
230
231pub fn new_active_set_update_failure(err: MixnetContractError) -> Event {
232 Event::new(MixnetEventType::ActiveSetUpdate).add_attribute(ERROR_MESSAGE_KEY, err.to_string())
233}
234
235pub fn new_active_set_update_event(created_at: BlockHeight, update: ActiveSetUpdate) -> Event {
236 Event::new(MixnetEventType::ActiveSetUpdate)
237 .add_attribute(EVENT_CREATION_HEIGHT_KEY, created_at.to_string())
238 .add_attribute(NUM_MIXNODES_KEY, update.mixnodes.to_string())
239 .add_attribute(NUM_ENTRIES_KEY, update.entry_gateways.to_string())
240 .add_attribute(NUM_EXITS_KEY, update.exit_gateways.to_string())
241}
242
243pub fn new_pending_active_set_update_event(
244 update: ActiveSetUpdate,
245 approximate_time_remaining_secs: i64,
246) -> Event {
247 Event::new(MixnetEventType::PendingActiveSetUpdate)
248 .add_attribute(NUM_MIXNODES_KEY, update.mixnodes.to_string())
249 .add_attribute(NUM_ENTRIES_KEY, update.entry_gateways.to_string())
250 .add_attribute(NUM_EXITS_KEY, update.exit_gateways.to_string())
251 .add_attribute(
252 APPROXIMATE_TIME_LEFT_SECS_KEY,
253 approximate_time_remaining_secs.to_string(),
254 )
255}
256
257pub fn new_rewarding_params_update_event(
258 created_at: BlockHeight,
259 update: IntervalRewardingParamsUpdate,
260 updated: IntervalRewardParams,
261) -> Event {
262 Event::new(MixnetEventType::IntervalRewardingParamsUpdate)
263 .add_attribute(EVENT_CREATION_HEIGHT_KEY, created_at.to_string())
264 .add_attribute(
265 INTERVAL_REWARDING_PARAMS_UPDATE_KEY,
266 update.to_inline_json(),
267 )
268 .add_attribute(
269 UPDATED_INTERVAL_REWARDING_PARAMS_KEY,
270 updated.to_inline_json(),
271 )
272}
273
274pub fn new_pending_rewarding_params_update_event(
275 update: IntervalRewardingParamsUpdate,
276 approximate_time_remaining_secs: i64,
277) -> Event {
278 Event::new(MixnetEventType::PendingIntervalRewardingParamsUpdate)
279 .add_attribute(
280 INTERVAL_REWARDING_PARAMS_UPDATE_KEY,
281 update.to_inline_json(),
282 )
283 .add_attribute(
284 APPROXIMATE_TIME_LEFT_SECS_KEY,
285 approximate_time_remaining_secs.to_string(),
286 )
287}
288
289pub fn new_undelegation_event(created_at: BlockHeight, delegator: &Addr, mix_id: NodeId) -> Event {
290 Event::new(MixnetEventType::Undelegation)
291 .add_attribute(EVENT_CREATION_HEIGHT_KEY, created_at.to_string())
292 .add_attribute(DELEGATOR_KEY, delegator)
293 .add_attribute(MIX_ID_KEY, mix_id.to_string())
294}
295
296pub fn new_pending_undelegation_event(delegator: &Addr, mix_id: NodeId) -> Event {
297 Event::new(MixnetEventType::PendingUndelegation)
298 .add_attribute(DELEGATOR_KEY, delegator)
299 .add_attribute(MIX_ID_KEY, mix_id.to_string())
300}
301
302pub fn new_gateway_unbonding_event(
303 owner: &Addr,
304 amount: &Coin,
305 identity: IdentityKeyRef<'_>,
306) -> Event {
307 Event::new(MixnetEventType::GatewayUnbonding)
308 .add_attribute(OWNER_KEY, owner)
309 .add_attribute(NODE_IDENTITY_KEY, identity)
310 .add_attribute(AMOUNT_KEY, amount.to_string())
311}
312
313pub fn new_nym_node_bonding_event(
314 owner: &Addr,
315 amount: &Coin,
316 identity: IdentityKeyRef<'_>,
317 node_id: NodeId,
318) -> Event {
319 Event::new(MixnetEventType::NymNodeBonding)
320 .add_attribute(NODE_ID_KEY, node_id.to_string())
321 .add_attribute(NODE_IDENTITY_KEY, identity)
322 .add_attribute(OWNER_KEY, owner)
323 .add_attribute(AMOUNT_KEY, amount.to_string())
324}
325
326pub fn new_nym_node_unbonding_event(created_at: BlockHeight, node_id: NodeId) -> Event {
327 Event::new(MixnetEventType::NymNodeUnbonding)
328 .add_attribute(EVENT_CREATION_HEIGHT_KEY, created_at.to_string())
329 .add_attribute(NODE_ID_KEY, node_id.to_string())
330}
331
332pub fn new_pending_nym_node_unbonding_event(
333 owner: &Addr,
334 identity: IdentityKeyRef<'_>,
335 node_id: NodeId,
336) -> Event {
337 Event::new(MixnetEventType::PendingNymNodeUnbonding)
338 .add_attribute(NODE_ID_KEY, node_id.to_string())
339 .add_attribute(NODE_IDENTITY_KEY, identity)
340 .add_attribute(OWNER_KEY, owner)
341}
342
343pub fn new_migrated_gateway_event(
344 owner: &Addr,
345 identity: IdentityKeyRef<'_>,
346 node_id: NodeId,
347) -> Event {
348 Event::new(MixnetEventType::GatewayMigration)
349 .add_attribute(NODE_ID_KEY, node_id.to_string())
350 .add_attribute(NODE_IDENTITY_KEY, identity)
351 .add_attribute(OWNER_KEY, owner)
352}
353
354pub fn new_migrated_mixnode_event(
355 owner: &Addr,
356 identity: IdentityKeyRef<'_>,
357 node_id: NodeId,
358) -> Event {
359 Event::new(MixnetEventType::MixnodeMigration)
360 .add_attribute(NODE_ID_KEY, node_id.to_string())
361 .add_attribute(NODE_IDENTITY_KEY, identity)
362 .add_attribute(OWNER_KEY, owner)
363}
364
365pub fn new_pending_pledge_increase_event(node_id: NodeId, amount: &Coin) -> Event {
366 Event::new(MixnetEventType::PendingPledgeIncrease)
367 .add_attribute(NODE_ID_KEY, node_id.to_string())
368 .add_attribute(AMOUNT_KEY, amount.to_string())
369}
370
371pub fn new_pledge_increase_event(created_at: BlockHeight, node_id: NodeId, amount: &Coin) -> Event {
372 Event::new(MixnetEventType::PledgeIncrease)
373 .add_attribute(EVENT_CREATION_HEIGHT_KEY, created_at.to_string())
374 .add_attribute(NODE_ID_KEY, node_id.to_string())
375 .add_attribute(AMOUNT_KEY, amount.to_string())
376}
377
378pub fn new_pending_pledge_decrease_event(node_id: NodeId, amount: &Coin) -> Event {
379 Event::new(MixnetEventType::PendingPledgeDecrease)
380 .add_attribute(NODE_ID_KEY, node_id.to_string())
381 .add_attribute(AMOUNT_KEY, amount.to_string())
382}
383
384pub fn new_pledge_decrease_event(created_at: BlockHeight, node_id: NodeId, amount: &Coin) -> Event {
385 Event::new(MixnetEventType::PledgeDecrease)
386 .add_attribute(EVENT_CREATION_HEIGHT_KEY, created_at.to_string())
387 .add_attribute(NODE_ID_KEY, node_id.to_string())
388 .add_attribute(AMOUNT_KEY, amount.to_string())
389}
390
391pub fn new_mixnode_unbonding_event(created_at: BlockHeight, mix_id: NodeId) -> Event {
392 Event::new(MixnetEventType::MixnodeUnbonding)
393 .add_attribute(EVENT_CREATION_HEIGHT_KEY, created_at.to_string())
394 .add_attribute(MIX_ID_KEY, mix_id.to_string())
395}
396
397pub fn new_pending_mixnode_unbonding_event(
398 owner: &Addr,
399 identity: IdentityKeyRef<'_>,
400 mix_id: NodeId,
401) -> Event {
402 Event::new(MixnetEventType::PendingMixnodeUnbonding)
403 .add_attribute(MIX_ID_KEY, mix_id.to_string())
404 .add_attribute(NODE_IDENTITY_KEY, identity)
405 .add_attribute(OWNER_KEY, owner)
406}
407
408pub fn new_mixnode_config_update_event(
409 mix_id: NodeId,
410 owner: &Addr,
411 update: &MixNodeConfigUpdate,
412) -> Event {
413 Event::new(MixnetEventType::MixnodeConfigUpdate)
414 .add_attribute(MIX_ID_KEY, mix_id.to_string())
415 .add_attribute(OWNER_KEY, owner)
416 .add_attribute(UPDATED_MIXNODE_CONFIG_KEY, update.to_inline_json())
417}
418
419pub fn new_gateway_config_update_event(owner: &Addr, update: &GatewayConfigUpdate) -> Event {
420 Event::new(MixnetEventType::GatewayConfigUpdate)
421 .add_attribute(OWNER_KEY, owner)
422 .add_attribute(UPDATED_GATEWAY_CONFIG_KEY, update.to_inline_json())
423}
424
425pub fn new_pending_cost_params_update_event(mix_id: NodeId, new_costs: &NodeCostParams) -> Event {
426 Event::new(MixnetEventType::PendingCostParamsUpdate)
427 .add_attribute(NODE_ID_KEY, mix_id.to_string())
428 .add_attribute(UPDATED_MIXNODE_COST_PARAMS_KEY, new_costs.to_inline_json())
429}
430
431pub fn new_cost_params_update_event(
432 created_at: BlockHeight,
433 mix_id: NodeId,
434 new_costs: &NodeCostParams,
435) -> Event {
436 Event::new(MixnetEventType::CostParamsUpdate)
437 .add_attribute(EVENT_CREATION_HEIGHT_KEY, created_at.to_string())
438 .add_attribute(MIX_ID_KEY, mix_id.to_string())
439 .add_attribute(UPDATED_MIXNODE_COST_PARAMS_KEY, new_costs.to_inline_json())
440}
441
442pub fn new_rewarding_validator_address_update_event(old: Addr, new: Addr) -> Event {
443 Event::new(MixnetEventType::RewardingValidatorUpdate)
444 .add_attribute(OLD_REWARDING_VALIDATOR_ADDRESS_KEY, old)
445 .add_attribute(NEW_REWARDING_VALIDATOR_ADDRESS_KEY, new)
446}
447
448pub fn new_settings_update_event(update: &ContractStateParamsUpdate) -> Event {
449 let mut event = Event::new(MixnetEventType::ContractSettingsUpdate);
450
451 if let Some(delegations_update) = &update.delegations_params {
453 event.attributes.push(attr(
454 NEW_MINIMUM_DELEGATION_KEY,
455 delegations_update
456 .minimum_delegation
457 .as_ref()
458 .map(|d| d.to_string())
459 .unwrap_or("empty".to_string()),
460 ));
461 }
462
463 if let Some(operators_update) = &update.operators_params {
465 if let Some(minimum_pledge) = &operators_update.minimum_pledge {
466 event
467 .attributes
468 .push(attr(NEW_MINIMUM_PLEDGE_KEY, minimum_pledge.to_string()))
469 }
470 if let Some(profit_margin) = &operators_update.profit_margin {
471 event
472 .attributes
473 .push(attr(NEW_PROFIT_MARGIN_RANGE_KEY, profit_margin.to_string()))
474 }
475 if let Some(interval_operating_cost) = &operators_update.interval_operating_cost {
476 event.attributes.push(attr(
477 NEW_INTERVAL_OPERATING_COST_RANGE_KEY,
478 interval_operating_cost.to_string(),
479 ))
480 }
481 }
482
483 if let Some(config_score_update) = &update.config_score_params {
485 if let Some(version_weights) = &config_score_update.version_weights {
486 event.attributes.push(attr(
487 NEW_VERSION_WEIGHTS_RANGE_KEY,
488 format!("{version_weights:?}"),
489 ))
490 }
491 if let Some(version_score_formula_params) =
492 &config_score_update.version_score_formula_params
493 {
494 event.attributes.push(attr(
495 NEW_VERSION_SCORE_FORMULA_PARAMS_KEY,
496 format!("{version_score_formula_params:?}"),
497 ))
498 }
499 }
500
501 event
502}
503
504pub fn new_update_nym_node_semver_event(new_version: &str, new_id: u32) -> Event {
505 Event::new(MixnetEventType::NymNodeSemverUpdate)
506 .add_attribute(NYM_NODE_CURRENT_SEMVER_KEY, new_version)
507 .add_attribute(NYM_NODE_CURRENT_SEMVER_ID_KEY, new_id.to_string())
508}
509
510pub fn new_not_found_node_operator_rewarding_event(interval: Interval, node_id: NodeId) -> Event {
511 Event::new(MixnetEventType::NodeRewarding)
512 .add_attribute(
513 INTERVAL_KEY,
514 interval.current_epoch_absolute_id().to_string(),
515 )
516 .add_attribute(NODE_ID_KEY, node_id.to_string())
517 .add_attribute(NO_REWARD_REASON_KEY, BOND_NOT_FOUND_VALUE)
518}
519
520pub fn new_zero_uptime_mix_operator_rewarding_event(interval: Interval, node_id: NodeId) -> Event {
521 Event::new(MixnetEventType::NodeRewarding)
522 .add_attribute(
523 INTERVAL_KEY,
524 interval.current_epoch_absolute_id().to_string(),
525 )
526 .add_attribute(NODE_ID_KEY, node_id.to_string())
527 .add_attribute(NO_REWARD_REASON_KEY, ZERO_PERFORMANCE_OR_WORK_VALUE)
528}
529
530pub fn new_mix_rewarding_event(
531 interval: Interval,
532 node_id: NodeId,
533 reward_distribution: RewardDistribution,
534 prior_delegates: Decimal,
535 prior_unit_reward: Decimal,
536) -> Event {
537 Event::new(MixnetEventType::NodeRewarding)
538 .add_attribute(
539 INTERVAL_KEY,
540 interval.current_epoch_absolute_id().to_string(),
541 )
542 .add_attribute(PRIOR_DELEGATES_KEY, prior_delegates.to_string())
543 .add_attribute(PRIOR_UNIT_REWARD_KEY, prior_unit_reward.to_string())
544 .add_attribute(NODE_ID_KEY, node_id.to_string())
545 .add_attribute(
546 OPERATOR_REWARD_KEY,
547 reward_distribution.operator.to_string(),
548 )
549 .add_attribute(
550 DELEGATES_REWARD_KEY,
551 reward_distribution.delegates.to_string(),
552 )
553}
554
555pub fn new_epoch_transition_start_event(current_interval: Interval) -> Event {
556 Event::new(MixnetEventType::BeginEpochTransition).add_attribute(
557 CURRENT_EPOCH_KEY,
558 current_interval.current_epoch_absolute_id().to_string(),
559 )
560}
561
562pub fn new_assigned_role_event(role: Role, nodes: u32) -> Event {
563 Event::new(MixnetEventType::RoleAssignment)
564 .add_attribute(ROLE_KEY, role.to_string())
565 .add_attribute(NODE_COUNT_KEY, nodes.to_string())
566}
567
568pub fn new_advance_epoch_event(epoch_id: EpochId) -> Event {
569 Event::new(MixnetEventType::AdvanceEpoch)
570 .add_attribute(NEW_CURRENT_EPOCH_KEY, epoch_id.to_string())
571}
572
573pub fn new_pending_epoch_events_execution_event(executed: u32) -> Event {
574 Event::new(MixnetEventType::ExecutePendingEpochEvents)
575 .add_attribute(EVENTS_EXECUTED_KEY, executed.to_string())
576}
577
578pub fn new_pending_interval_events_execution_event(executed: u32) -> Event {
579 Event::new(MixnetEventType::ExecutePendingIntervalEvents)
580 .add_attribute(EVENTS_EXECUTED_KEY, executed.to_string())
581}
582
583pub fn new_reconcile_pending_events() -> Event {
584 Event::new(MixnetEventType::ReconcilePendingEvents)
585}
586
587pub fn new_interval_config_update_event(
588 created_at: BlockHeight,
589 epochs_in_interval: u32,
590 epoch_duration_secs: u64,
591 updated_rewarding_params: IntervalRewardParams,
592) -> Event {
593 Event::new(MixnetEventType::IntervalConfigUpdate)
594 .add_attribute(EVENT_CREATION_HEIGHT_KEY, created_at.to_string())
595 .add_attribute(
596 NEW_EPOCHS_DURATION_SECS_KEY,
597 epoch_duration_secs.to_string(),
598 )
599 .add_attribute(NEW_EPOCHS_IN_INTERVAL, epochs_in_interval.to_string())
600 .add_attribute(
601 UPDATED_INTERVAL_REWARDING_PARAMS_KEY,
602 updated_rewarding_params.to_inline_json(),
603 )
604}
605
606pub fn new_pending_interval_config_update_event(
607 epochs_in_interval: u32,
608 epoch_duration_secs: u64,
609 approximate_time_remaining_secs: i64,
610) -> Event {
611 Event::new(MixnetEventType::PendingIntervalConfigUpdate)
612 .add_attribute(
613 NEW_EPOCHS_DURATION_SECS_KEY,
614 epoch_duration_secs.to_string(),
615 )
616 .add_attribute(NEW_EPOCHS_IN_INTERVAL, epochs_in_interval.to_string())
617 .add_attribute(
618 APPROXIMATE_TIME_LEFT_SECS_KEY,
619 approximate_time_remaining_secs.to_string(),
620 )
621}