@@ -6,13 +6,13 @@ use acropolis_common::{
6
6
queries:: accounts:: { PoolsLiveStakes , DEFAULT_ACCOUNTS_QUERY_TOPIC } ,
7
7
rest_helper:: handle_rest,
8
8
state_history:: { StateHistory , StateHistoryStore } ,
9
- BlockInfo , BlockStatus , StakeAddressDiff ,
9
+ BlockInfo , BlockStatus ,
10
10
} ;
11
11
use anyhow:: Result ;
12
12
use caryatid_sdk:: { message_bus:: Subscription , module, Context , Module } ;
13
13
use config:: Config ;
14
14
use std:: sync:: Arc ;
15
- use tokio:: sync:: Mutex ;
15
+ use tokio:: { join , sync:: Mutex } ;
16
16
use tracing:: { error, info, info_span, Instrument } ;
17
17
18
18
mod drep_distribution_publisher;
@@ -21,9 +21,9 @@ mod spo_distribution_publisher;
21
21
use spo_distribution_publisher:: SPODistributionPublisher ;
22
22
mod spo_rewards_publisher;
23
23
use spo_rewards_publisher:: SPORewardsPublisher ;
24
- mod stake_diffs_publisher ;
24
+ mod stake_reward_deltas_publisher ;
25
25
mod state;
26
- use stake_diffs_publisher :: StakeDiffsPublisher ;
26
+ use stake_reward_deltas_publisher :: StakeRewardDeltasPublisher ;
27
27
use state:: State ;
28
28
mod monetary;
29
29
mod rest;
@@ -45,7 +45,7 @@ const DEFAULT_DREP_DISTRIBUTION_TOPIC: &str = "cardano.drep.distribution";
45
45
const DEFAULT_SPO_DISTRIBUTION_TOPIC : & str = "cardano.spo.distribution" ;
46
46
const DEFAULT_SPO_REWARDS_TOPIC : & str = "cardano.spo.rewards" ;
47
47
const DEFAULT_PROTOCOL_PARAMETERS_TOPIC : & str = "cardano.protocol.parameters" ;
48
- const DEFAULT_STAKE_DIFFS_TOPIC : & str = "cardano.stake.diffs " ;
48
+ const DEFAULT_STAKE_REWARD_DELTAS_TOPIC : & str = "cardano.stake.reward.deltas " ;
49
49
50
50
const DEFAULT_HANDLE_POTS_TOPIC : ( & str , & str ) = ( "handle-topic-pots" , "rest.get.pots" ) ;
51
51
@@ -64,7 +64,7 @@ impl AccountsState {
64
64
mut drep_publisher : DRepDistributionPublisher ,
65
65
mut spo_publisher : SPODistributionPublisher ,
66
66
mut spo_rewards_publisher : SPORewardsPublisher ,
67
- mut stake_diffs_publisher : StakeDiffsPublisher ,
67
+ mut stake_reward_deltas_publisher : StakeRewardDeltasPublisher ,
68
68
mut spos_subscription : Box < dyn Subscription < Message > > ,
69
69
mut ea_subscription : Box < dyn Subscription < Message > > ,
70
70
mut certs_subscription : Box < dyn Subscription < Message > > ,
@@ -117,7 +117,6 @@ impl AccountsState {
117
117
let stake_message_f = stake_subscription. read ( ) ;
118
118
let withdrawals_message_f = withdrawals_subscription. read ( ) ;
119
119
let mut current_block: Option < BlockInfo > = None ;
120
- let mut stake_diffs = Vec :: < StakeAddressDiff > :: new ( ) ;
121
120
122
121
// Use certs_message as the synchroniser, but we have to handle it after the
123
122
// epoch things, because they apply to the new epoch, not the last
@@ -201,20 +200,28 @@ impl AccountsState {
201
200
) ;
202
201
async {
203
202
Self :: check_sync ( & current_block, & block_info) ;
204
- let spo_rewards = state
203
+ let after_epoch_result = state
205
204
. handle_epoch_activity ( ea_msg)
206
205
. await
207
206
. inspect_err ( |e| error ! ( "EpochActivity handling error: {e:#}" ) )
208
207
. ok ( ) ;
209
- // SPO rewards is for previous epoch
210
- if let Some ( ( spo_rewards, diffs) ) = spo_rewards {
211
- if let Err ( e) = spo_rewards_publisher
212
- . publish_spo_rewards ( block_info, spo_rewards)
213
- . await
214
- {
208
+ if let Some ( ( spo_rewards, stake_reward_deltas) ) = after_epoch_result {
209
+ // SPO Rewards Future
210
+ let spo_rewards_future = spo_rewards_publisher
211
+ . publish_spo_rewards ( block_info, spo_rewards) ;
212
+ // Stake Reward Deltas Future
213
+ let stake_reward_deltas_future = stake_reward_deltas_publisher
214
+ . publish_stake_reward_deltas ( block_info, stake_reward_deltas) ;
215
+
216
+ // publish in parallel
217
+ let ( spo_rewards_result, stake_reward_deltas_result) =
218
+ join ! ( spo_rewards_future, stake_reward_deltas_future) ;
219
+ spo_rewards_result. unwrap_or_else ( |e| {
215
220
error ! ( "Error publishing SPO rewards: {e:#}" )
216
- }
217
- stake_diffs. extend ( diffs) ;
221
+ } ) ;
222
+ stake_reward_deltas_result. unwrap_or_else ( |e| {
223
+ error ! ( "Error publishing stake reward deltas: {e:#}" )
224
+ } ) ;
218
225
}
219
226
}
220
227
. instrument ( span)
@@ -264,13 +271,10 @@ impl AccountsState {
264
271
let span = info_span ! ( "account_state.handle_certs" , block = block_info. number) ;
265
272
async {
266
273
Self :: check_sync ( & current_block, & block_info) ;
267
- let diffs = state
274
+ state
268
275
. handle_tx_certificates ( tx_certs_msg)
269
276
. inspect_err ( |e| error ! ( "TxCertificates handling error: {e:#}" ) )
270
277
. ok ( ) ;
271
- if let Some ( diffs) = diffs {
272
- stake_diffs. extend ( diffs) ;
273
- }
274
278
}
275
279
. instrument ( span)
276
280
. await ;
@@ -289,13 +293,10 @@ impl AccountsState {
289
293
) ;
290
294
async {
291
295
Self :: check_sync ( & current_block, & block_info) ;
292
- let diffs = state
296
+ state
293
297
. handle_withdrawals ( withdrawals_msg)
294
298
. inspect_err ( |e| error ! ( "Withdrawals handling error: {e:#}" ) )
295
299
. ok ( ) ;
296
- if let Some ( diffs) = diffs {
297
- stake_diffs. extend ( diffs) ;
298
- }
299
300
}
300
301
. instrument ( span)
301
302
. await ;
@@ -314,13 +315,10 @@ impl AccountsState {
314
315
) ;
315
316
async {
316
317
Self :: check_sync ( & current_block, & block_info) ;
317
- let diffs = state
318
+ state
318
319
. handle_stake_deltas ( deltas_msg)
319
320
. inspect_err ( |e| error ! ( "StakeAddressDeltas handling error: {e:#}" ) )
320
321
. ok ( ) ;
321
- if let Some ( diffs) = diffs {
322
- stake_diffs. extend ( diffs) ;
323
- }
324
322
}
325
323
. instrument ( span)
326
324
. await ;
@@ -331,13 +329,6 @@ impl AccountsState {
331
329
332
330
// Commit the new state
333
331
if let Some ( block_info) = current_block {
334
- // publish stake address diffs message
335
- if let Err ( e) =
336
- stake_diffs_publisher. publish_stake_diffs ( & block_info, stake_diffs) . await
337
- {
338
- error ! ( "Error publishing stake diffs: {e:#}" )
339
- }
340
-
341
332
history. lock ( ) . await . commit ( block_info. number , state) ;
342
333
}
343
334
}
@@ -409,10 +400,10 @@ impl AccountsState {
409
400
. get_string ( "publish-spo-rewards-topic" )
410
401
. unwrap_or ( DEFAULT_SPO_REWARDS_TOPIC . to_string ( ) ) ;
411
402
412
- let stake_diffs_topic = config
413
- . get_string ( "publish-stake-diffs -topic" )
414
- . unwrap_or ( DEFAULT_STAKE_DIFFS_TOPIC . to_string ( ) ) ;
415
- info ! ( "Creating stake diffs subscriber on '{stake_diffs_topic }'" ) ;
403
+ let stake_reward_deltas_topic = config
404
+ . get_string ( "publish-stake-reward-deltas -topic" )
405
+ . unwrap_or ( DEFAULT_STAKE_REWARD_DELTAS_TOPIC . to_string ( ) ) ;
406
+ info ! ( "Creating stake reward deltas subscriber on '{stake_reward_deltas_topic }'" ) ;
416
407
417
408
// REST handler topics
418
409
let handle_pots_topic = config
@@ -546,7 +537,8 @@ impl AccountsState {
546
537
DRepDistributionPublisher :: new ( context. clone ( ) , drep_distribution_topic) ;
547
538
let spo_publisher = SPODistributionPublisher :: new ( context. clone ( ) , spo_distribution_topic) ;
548
539
let spo_rewards_publisher = SPORewardsPublisher :: new ( context. clone ( ) , spo_rewards_topic) ;
549
- let stake_diffs_publisher = StakeDiffsPublisher :: new ( context. clone ( ) , stake_diffs_topic) ;
540
+ let stake_reward_deltas_publisher =
541
+ StakeRewardDeltasPublisher :: new ( context. clone ( ) , stake_reward_deltas_topic) ;
550
542
551
543
// Subscribe
552
544
let spos_subscription = context. subscribe ( & spo_state_topic) . await ?;
@@ -565,7 +557,7 @@ impl AccountsState {
565
557
drep_publisher,
566
558
spo_publisher,
567
559
spo_rewards_publisher,
568
- stake_diffs_publisher ,
560
+ stake_reward_deltas_publisher ,
569
561
spos_subscription,
570
562
ea_subscription,
571
563
certs_subscription,
0 commit comments