From a8f3ae1d16b504c4c05f063a499051b155dba0a6 Mon Sep 17 00:00:00 2001 From: Konstantin Shuplenkov Date: Fri, 13 Jan 2023 15:06:39 +0300 Subject: [PATCH 1/6] feat(drive): log number of refunded epochs --- .../abci/handlers/proposal/endBlockFactory.js | 3 ++- packages/rs-drive-abci/src/abci/messages.rs | 8 +++++-- .../execution/fee_pools/fee_distribution.rs | 23 +++++++++++++++---- .../execution/fee_pools/process_block_fees.rs | 4 ++++ packages/rs-drive-nodejs/Drive.js | 1 + packages/rs-drive-nodejs/test/Drive.spec.js | 1 + 6 files changed, 33 insertions(+), 7 deletions(-) diff --git a/packages/js-drive/lib/abci/handlers/proposal/endBlockFactory.js b/packages/js-drive/lib/abci/handlers/proposal/endBlockFactory.js index a121a3d0536..411aeeb8691 100644 --- a/packages/js-drive/lib/abci/handlers/proposal/endBlockFactory.js +++ b/packages/js-drive/lib/abci/handlers/proposal/endBlockFactory.js @@ -89,7 +89,8 @@ function endBlockFactory( currentEpochIndex, proposersPaidCount: rsResponse.proposersPaidCount, paidEpochIndex: rsResponse.paidEpochIndex, - }, `${rsResponse.proposersPaidCount} masternodes were paid for epoch #${rsResponse.paidEpochIndex}`); + refundedEpochsCount: rsResponse.refundedEpochsCount, + }, `${rsResponse.proposersPaidCount} masternodes were paid for epoch #${rsResponse.paidEpochIndex}. ${rsResponse.refundedEpochsCount} epochs were refunded.`); } const consensusParamUpdates = await createConsensusParamUpdate(height, round, consensusLogger); diff --git a/packages/rs-drive-abci/src/abci/messages.rs b/packages/rs-drive-abci/src/abci/messages.rs index b9b357b2d94..43c7192cda1 100644 --- a/packages/rs-drive-abci/src/abci/messages.rs +++ b/packages/rs-drive-abci/src/abci/messages.rs @@ -116,6 +116,8 @@ pub struct BlockEndResponse { pub proposers_paid_count: Option, /// Index of the last epoch that marked as paid pub paid_epoch_index: Option, + /// A number of epochs which had refunded + pub refunded_epochs_count: Option, } impl BlockEndResponse { @@ -123,19 +125,21 @@ impl BlockEndResponse { pub(crate) fn from_process_block_fees_result( process_block_fees_result: &ProcessedBlockFeesResult, ) -> Self { - let (proposers_paid_count, paid_epoch_index) = process_block_fees_result + let (proposers_paid_count, paid_epoch_index, refunded_epochs_count) = process_block_fees_result .payouts .as_ref() - .map_or((None, None), |proposer_payouts| { + .map_or((None, None, None), |proposer_payouts| { ( Some(proposer_payouts.proposers_paid_count), Some(proposer_payouts.paid_epoch_index), + Some(proposer_payouts.refunded_epochs_count), ) }); Self { proposers_paid_count, paid_epoch_index, + refunded_epochs_count, } } } diff --git a/packages/rs-drive-abci/src/execution/fee_pools/fee_distribution.rs b/packages/rs-drive-abci/src/execution/fee_pools/fee_distribution.rs index 91e35932247..6e0eb867b7a 100644 --- a/packages/rs-drive-abci/src/execution/fee_pools/fee_distribution.rs +++ b/packages/rs-drive-abci/src/execution/fee_pools/fee_distribution.rs @@ -57,6 +57,8 @@ pub struct ProposersPayouts { pub proposers_paid_count: u16, /// Index of last epoch marked as paid pub paid_epoch_index: u16, + /// A number of epochs which had refunded + pub refunded_epochs_count: usize, } /// Struct containing the amount of processing and storage fees in the distribution pools @@ -100,6 +102,7 @@ impl Platform { &self, current_epoch_index: u16, cached_current_epoch_start_block_height: Option, + refunded_epochs_count: usize, transaction: TransactionArg, batch: &mut GroveDbOpBatch, ) -> Result, Error> { @@ -145,6 +148,7 @@ impl Platform { Ok(Some(ProposersPayouts { proposers_paid_count, paid_epoch_index: unpaid_epoch.epoch_index, + refunded_epochs_count, })) } @@ -449,6 +453,7 @@ mod tests { .add_distribute_fees_from_oldest_unpaid_epoch_pool_to_proposers_operations( current_epoch_index, None, + 0, Some(&transaction), &mut batch, ) @@ -510,6 +515,7 @@ mod tests { .add_distribute_fees_from_oldest_unpaid_epoch_pool_to_proposers_operations( current_epoch_index, None, + 0, Some(&transaction), &mut batch, ) @@ -524,7 +530,8 @@ mod tests { proposer_payouts, Some(ProposersPayouts { proposers_paid_count: 50, - paid_epoch_index: 0 + paid_epoch_index: 0, + refunded_epochs_count: 0, }) )); } @@ -597,6 +604,7 @@ mod tests { .add_distribute_fees_from_oldest_unpaid_epoch_pool_to_proposers_operations( current_epoch_index, None, + 0, Some(&transaction), &mut batch, ) @@ -611,7 +619,8 @@ mod tests { proposer_payouts, Some(ProposersPayouts { proposers_paid_count: 100, - paid_epoch_index: 0 + paid_epoch_index: 0, + refunded_epochs_count: 0 }) )); } @@ -699,6 +708,7 @@ mod tests { .add_distribute_fees_from_oldest_unpaid_epoch_pool_to_proposers_operations( current_epoch_index, None, + 1, Some(&transaction), &mut batch, ) @@ -713,7 +723,8 @@ mod tests { proposer_payouts, Some(ProposersPayouts { proposers_paid_count: 150, - paid_epoch_index: 0 + paid_epoch_index: 0, + refunded_epochs_count: 1 }) )); } @@ -769,6 +780,7 @@ mod tests { .add_distribute_fees_from_oldest_unpaid_epoch_pool_to_proposers_operations( current_epoch.index, None, + 0, Some(&transaction), &mut batch, ) @@ -861,6 +873,7 @@ mod tests { .add_distribute_fees_from_oldest_unpaid_epoch_pool_to_proposers_operations( current_epoch.index, None, + 0, Some(&transaction), &mut batch, ) @@ -875,7 +888,8 @@ mod tests { proposer_payouts, Some(ProposersPayouts { proposers_paid_count: proposers_count, - paid_epoch_index: 0 + paid_epoch_index: 0, + refunded_epochs_count: 0 }) )); @@ -895,6 +909,7 @@ mod tests { .add_distribute_fees_from_oldest_unpaid_epoch_pool_to_proposers_operations( current_epoch.index, None, + 0, Some(&transaction), &mut batch, ) diff --git a/packages/rs-drive-abci/src/execution/fee_pools/process_block_fees.rs b/packages/rs-drive-abci/src/execution/fee_pools/process_block_fees.rs index 5e76534974a..5881a363828 100644 --- a/packages/rs-drive-abci/src/execution/fee_pools/process_block_fees.rs +++ b/packages/rs-drive-abci/src/execution/fee_pools/process_block_fees.rs @@ -186,6 +186,10 @@ impl Platform { .add_distribute_fees_from_oldest_unpaid_epoch_pool_to_proposers_operations( epoch_info.current_epoch_index, cached_current_epoch_start_block_height, + storage_fee_distribution_result + .as_ref() + .map(|result| result.refunded_epochs_count) + .unwrap_or(0), transaction, &mut batch, )?; diff --git a/packages/rs-drive-nodejs/Drive.js b/packages/rs-drive-nodejs/Drive.js index f543741b0e6..0a6bffb09b5 100644 --- a/packages/rs-drive-nodejs/Drive.js +++ b/packages/rs-drive-nodejs/Drive.js @@ -527,6 +527,7 @@ Drive.calculateStorageFeeDistributionAmountAndLeftovers = calculateStorageFeeDis * @typedef BlockEndResponse * @property {number} [proposersPaidCount] * @property {number} [paidEpochIndex] + * @property {number} [refundedEpochsCount] */ /** diff --git a/packages/rs-drive-nodejs/test/Drive.spec.js b/packages/rs-drive-nodejs/test/Drive.spec.js index de74729aec5..5466a9741b1 100644 --- a/packages/rs-drive-nodejs/test/Drive.spec.js +++ b/packages/rs-drive-nodejs/test/Drive.spec.js @@ -580,6 +580,7 @@ describe('Drive', () => { expect(response).to.have.property('proposersPaidCount'); expect(response).to.have.property('paidEpochIndex'); + expect(response).to.have.property('refundedEpochsCount'); }); }); From e0273874c930677a3b8da3873833d837dca6459e Mon Sep 17 00:00:00 2001 From: Konstantin Shuplenkov Date: Mon, 16 Jan 2023 18:17:43 +0300 Subject: [PATCH 2/6] empty commit From e9c1facc3d5fbcc6b86fe8a02af4e793801b136e Mon Sep 17 00:00:00 2001 From: Konstantin Shuplenkov Date: Mon, 16 Jan 2023 19:10:02 +0300 Subject: [PATCH 3/6] WIP --- packages/rs-drive-abci/src/abci/messages.rs | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/packages/rs-drive-abci/src/abci/messages.rs b/packages/rs-drive-abci/src/abci/messages.rs index 43c7192cda1..20a2952b9af 100644 --- a/packages/rs-drive-abci/src/abci/messages.rs +++ b/packages/rs-drive-abci/src/abci/messages.rs @@ -125,16 +125,17 @@ impl BlockEndResponse { pub(crate) fn from_process_block_fees_result( process_block_fees_result: &ProcessedBlockFeesResult, ) -> Self { - let (proposers_paid_count, paid_epoch_index, refunded_epochs_count) = process_block_fees_result - .payouts - .as_ref() - .map_or((None, None, None), |proposer_payouts| { - ( - Some(proposer_payouts.proposers_paid_count), - Some(proposer_payouts.paid_epoch_index), - Some(proposer_payouts.refunded_epochs_count), - ) - }); + let (proposers_paid_count, paid_epoch_index, refunded_epochs_count) = + process_block_fees_result.payouts.as_ref().map_or( + (None, None, None), + |proposer_payouts| { + ( + Some(proposer_payouts.proposers_paid_count), + Some(proposer_payouts.paid_epoch_index), + Some(proposer_payouts.refunded_epochs_count), + ) + }, + ); Self { proposers_paid_count, From 1d257eb97b2c090aa1437c11ef8597adeb644a4e Mon Sep 17 00:00:00 2001 From: Konstantin Shuplenkov Date: Tue, 17 Jan 2023 17:03:55 +0300 Subject: [PATCH 4/6] WIP --- packages/rs-drive-abci/src/abci/messages.rs | 2 +- .../src/execution/fee_pools/fee_distribution.rs | 15 --------------- .../src/execution/fee_pools/process_block_fees.rs | 4 ---- 3 files changed, 1 insertion(+), 20 deletions(-) diff --git a/packages/rs-drive-abci/src/abci/messages.rs b/packages/rs-drive-abci/src/abci/messages.rs index 20a2952b9af..e2957455716 100644 --- a/packages/rs-drive-abci/src/abci/messages.rs +++ b/packages/rs-drive-abci/src/abci/messages.rs @@ -132,7 +132,7 @@ impl BlockEndResponse { ( Some(proposer_payouts.proposers_paid_count), Some(proposer_payouts.paid_epoch_index), - Some(proposer_payouts.refunded_epochs_count), + process_block_fees_result.refunded_epochs_count, ) }, ); diff --git a/packages/rs-drive-abci/src/execution/fee_pools/fee_distribution.rs b/packages/rs-drive-abci/src/execution/fee_pools/fee_distribution.rs index 6e0eb867b7a..bccaaadbc71 100644 --- a/packages/rs-drive-abci/src/execution/fee_pools/fee_distribution.rs +++ b/packages/rs-drive-abci/src/execution/fee_pools/fee_distribution.rs @@ -57,8 +57,6 @@ pub struct ProposersPayouts { pub proposers_paid_count: u16, /// Index of last epoch marked as paid pub paid_epoch_index: u16, - /// A number of epochs which had refunded - pub refunded_epochs_count: usize, } /// Struct containing the amount of processing and storage fees in the distribution pools @@ -102,7 +100,6 @@ impl Platform { &self, current_epoch_index: u16, cached_current_epoch_start_block_height: Option, - refunded_epochs_count: usize, transaction: TransactionArg, batch: &mut GroveDbOpBatch, ) -> Result, Error> { @@ -148,7 +145,6 @@ impl Platform { Ok(Some(ProposersPayouts { proposers_paid_count, paid_epoch_index: unpaid_epoch.epoch_index, - refunded_epochs_count, })) } @@ -453,7 +449,6 @@ mod tests { .add_distribute_fees_from_oldest_unpaid_epoch_pool_to_proposers_operations( current_epoch_index, None, - 0, Some(&transaction), &mut batch, ) @@ -515,7 +510,6 @@ mod tests { .add_distribute_fees_from_oldest_unpaid_epoch_pool_to_proposers_operations( current_epoch_index, None, - 0, Some(&transaction), &mut batch, ) @@ -531,7 +525,6 @@ mod tests { Some(ProposersPayouts { proposers_paid_count: 50, paid_epoch_index: 0, - refunded_epochs_count: 0, }) )); } @@ -604,7 +597,6 @@ mod tests { .add_distribute_fees_from_oldest_unpaid_epoch_pool_to_proposers_operations( current_epoch_index, None, - 0, Some(&transaction), &mut batch, ) @@ -620,7 +612,6 @@ mod tests { Some(ProposersPayouts { proposers_paid_count: 100, paid_epoch_index: 0, - refunded_epochs_count: 0 }) )); } @@ -708,7 +699,6 @@ mod tests { .add_distribute_fees_from_oldest_unpaid_epoch_pool_to_proposers_operations( current_epoch_index, None, - 1, Some(&transaction), &mut batch, ) @@ -724,7 +714,6 @@ mod tests { Some(ProposersPayouts { proposers_paid_count: 150, paid_epoch_index: 0, - refunded_epochs_count: 1 }) )); } @@ -780,7 +769,6 @@ mod tests { .add_distribute_fees_from_oldest_unpaid_epoch_pool_to_proposers_operations( current_epoch.index, None, - 0, Some(&transaction), &mut batch, ) @@ -873,7 +861,6 @@ mod tests { .add_distribute_fees_from_oldest_unpaid_epoch_pool_to_proposers_operations( current_epoch.index, None, - 0, Some(&transaction), &mut batch, ) @@ -889,7 +876,6 @@ mod tests { Some(ProposersPayouts { proposers_paid_count: proposers_count, paid_epoch_index: 0, - refunded_epochs_count: 0 }) )); @@ -909,7 +895,6 @@ mod tests { .add_distribute_fees_from_oldest_unpaid_epoch_pool_to_proposers_operations( current_epoch.index, None, - 0, Some(&transaction), &mut batch, ) diff --git a/packages/rs-drive-abci/src/execution/fee_pools/process_block_fees.rs b/packages/rs-drive-abci/src/execution/fee_pools/process_block_fees.rs index 5881a363828..5e76534974a 100644 --- a/packages/rs-drive-abci/src/execution/fee_pools/process_block_fees.rs +++ b/packages/rs-drive-abci/src/execution/fee_pools/process_block_fees.rs @@ -186,10 +186,6 @@ impl Platform { .add_distribute_fees_from_oldest_unpaid_epoch_pool_to_proposers_operations( epoch_info.current_epoch_index, cached_current_epoch_start_block_height, - storage_fee_distribution_result - .as_ref() - .map(|result| result.refunded_epochs_count) - .unwrap_or(0), transaction, &mut batch, )?; From cc8421dec82303945306cb41e3615610b44df160 Mon Sep 17 00:00:00 2001 From: Konstantin Shuplenkov Date: Tue, 17 Jan 2023 17:39:14 +0300 Subject: [PATCH 5/6] WIP --- .../lib/abci/handlers/proposal/endBlockFactory.js | 8 +++++++- packages/rs-drive-abci/src/abci/messages.rs | 7 +++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/js-drive/lib/abci/handlers/proposal/endBlockFactory.js b/packages/js-drive/lib/abci/handlers/proposal/endBlockFactory.js index 411aeeb8691..0e4fd206282 100644 --- a/packages/js-drive/lib/abci/handlers/proposal/endBlockFactory.js +++ b/packages/js-drive/lib/abci/handlers/proposal/endBlockFactory.js @@ -89,8 +89,14 @@ function endBlockFactory( currentEpochIndex, proposersPaidCount: rsResponse.proposersPaidCount, paidEpochIndex: rsResponse.paidEpochIndex, + }, `${rsResponse.proposersPaidCount} masternodes were paid for epoch #${rsResponse.paidEpochIndex}`); + } + + if (rsResponse.refundedEpochsCount) { + consensusLogger.debug({ + currentEpochIndex, refundedEpochsCount: rsResponse.refundedEpochsCount, - }, `${rsResponse.proposersPaidCount} masternodes were paid for epoch #${rsResponse.paidEpochIndex}. ${rsResponse.refundedEpochsCount} epochs were refunded.`); + }, `${rsResponse.refundedEpochsCount} epochs were refunded`); } const consensusParamUpdates = await createConsensusParamUpdate(height, round, consensusLogger); diff --git a/packages/rs-drive-abci/src/abci/messages.rs b/packages/rs-drive-abci/src/abci/messages.rs index e2957455716..bff86f81975 100644 --- a/packages/rs-drive-abci/src/abci/messages.rs +++ b/packages/rs-drive-abci/src/abci/messages.rs @@ -125,14 +125,13 @@ impl BlockEndResponse { pub(crate) fn from_process_block_fees_result( process_block_fees_result: &ProcessedBlockFeesResult, ) -> Self { - let (proposers_paid_count, paid_epoch_index, refunded_epochs_count) = + let (proposers_paid_count, paid_epoch_index) = process_block_fees_result.payouts.as_ref().map_or( - (None, None, None), + (None, None), |proposer_payouts| { ( Some(proposer_payouts.proposers_paid_count), Some(proposer_payouts.paid_epoch_index), - process_block_fees_result.refunded_epochs_count, ) }, ); @@ -140,7 +139,7 @@ impl BlockEndResponse { Self { proposers_paid_count, paid_epoch_index, - refunded_epochs_count, + refunded_epochs_count: process_block_fees_result.refunded_epochs_count, } } } From 7a1e7db3be9a6ee2948bfec90a02db0eabedaf49 Mon Sep 17 00:00:00 2001 From: Konstantin Shuplenkov Date: Tue, 17 Jan 2023 17:42:22 +0300 Subject: [PATCH 6/6] WIP --- packages/rs-drive-abci/src/abci/messages.rs | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/packages/rs-drive-abci/src/abci/messages.rs b/packages/rs-drive-abci/src/abci/messages.rs index bff86f81975..b480de4b28e 100644 --- a/packages/rs-drive-abci/src/abci/messages.rs +++ b/packages/rs-drive-abci/src/abci/messages.rs @@ -125,16 +125,15 @@ impl BlockEndResponse { pub(crate) fn from_process_block_fees_result( process_block_fees_result: &ProcessedBlockFeesResult, ) -> Self { - let (proposers_paid_count, paid_epoch_index) = - process_block_fees_result.payouts.as_ref().map_or( - (None, None), - |proposer_payouts| { - ( - Some(proposer_payouts.proposers_paid_count), - Some(proposer_payouts.paid_epoch_index), - ) - }, - ); + let (proposers_paid_count, paid_epoch_index) = process_block_fees_result + .payouts + .as_ref() + .map_or((None, None), |proposer_payouts| { + ( + Some(proposer_payouts.proposers_paid_count), + Some(proposer_payouts.paid_epoch_index), + ) + }); Self { proposers_paid_count,