difftreelog
Merge pull request #800 from UniqueNetwork/fix/payout-stakers
in: master
Fix/payout stakers
4 files changed
Cargo.lockdiffbeforeafterboth--- a/Cargo.lock
+++ b/Cargo.lock
@@ -5549,7 +5549,7 @@
[[package]]
name = "pallet-app-promotion"
-version = "0.1.1"
+version = "0.1.2"
dependencies = [
"frame-benchmarking",
"frame-support",
pallets/app-promotion/CHANGELOG.mddiffbeforeafterboth--- a/pallets/app-promotion/CHANGELOG.md
+++ b/pallets/app-promotion/CHANGELOG.md
@@ -4,6 +4,13 @@
<!-- bureaucrate goes here -->
+## [0.1.2] - 2022-12-20
+
+### Fixed
+
+- The behaviour of the `payoutStakers` extrinsic
+ in which only one stake is calculated for the last processed staker.
+
## [0.1.1] - 2022-12-13
### Added
pallets/app-promotion/Cargo.tomldiffbeforeafterboth--- a/pallets/app-promotion/Cargo.toml
+++ b/pallets/app-promotion/Cargo.toml
@@ -9,7 +9,7 @@
license = 'GPLv3'
name = 'pallet-app-promotion'
repository = 'https://github.com/UniqueNetwork/unique-chain'
-version = '0.1.1'
+version = '0.1.2'
[package.metadata.docs.rs]
targets = ['x86_64-unknown-linux-gnu']
pallets/app-promotion/src/lib.rsdiffbeforeafterboth608 {608 {609 // Address handled in the last payout loop iteration (below)609 // Address handled in the last payout loop iteration (below)610 let last_id = RefCell::new(None);610 let last_id = RefCell::new(None);611 // Block number (as a part of the key) for which calculation was performed in the last payout loop iteration612 let mut last_staked_calculated_block = Default::default();611 // Reward balance for the address in the iteration613 // Reward balance for the address in the iteration612 let income_acc = RefCell::new(BalanceOf::<T>::default());614 let income_acc = RefCell::new(BalanceOf::<T>::default());613 // Staked balance for the address in the iteration (before stake is recalculated)615 // Staked balance for the address in the iteration (before stake is recalculated)666 // or just start handling the very first address. In the latter case last_id will be None and668 // or just start handling the very first address. In the latter case last_id will be None and667 // flush_stake will do nothing669 // flush_stake will do nothing668 if last_id.borrow().as_ref() != Some(¤t_id) {670 if last_id.borrow().as_ref() != Some(¤t_id) {671 if stakers_number > 0 {669 flush_stake()?;672 flush_stake()?;670 *last_id.borrow_mut() = Some(current_id.clone());673 *last_id.borrow_mut() = Some(current_id.clone());671 stakers_number -= 1;674 stakers_number -= 1;672 };675 }676 // Break out if we reached the address limit677 else {678 if let Some(staker) = &*last_id.borrow() {679 // Save the last calculated record to pick up in the next extrinsic call680 PreviousCalculatedRecord::<T>::set(Some((681 staker.clone(),682 last_staked_calculated_block,683 )));684 }685 break;686 };687 };673688674 // Increase accumulated reward for current address and update current staking record, i.e. (address, staked_block) -> amount689 // Increase accumulated reward for current address and update current staking record, i.e. (address, staked_block) -> amount686 );701 );687 }702 }688689 // Break out if we reached the address limit690 if stakers_number == 0 {691 if storage_iterator.next().is_some() {692 // Save the last calculated record to pick up in the next extrinsic call693 PreviousCalculatedRecord::<T>::set(Some((current_id, staked_block)));703 last_staked_calculated_block = staked_block;694 }695 break;696 }697 }704 }698 flush_stake()?;705 flush_stake()?;699 }706 }