Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fixes for claim undistributed rewards #1012

Open
wants to merge 2 commits into
base: rc/v3.0.1.5
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions dex/farm-with-locked-rewards/src/external_interaction.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ pub trait ExternalInteractionsModule:
+ farm_base_impl::exit_farm::BaseExitFarmModule
+ farm_boosted_yields::FarmBoostedYieldsModule
+ farm_boosted_yields::boosted_yields_factors::BoostedYieldsFactorsModule
+ farm_boosted_yields::undistributed_rewards::UndistributedRewardsModule
+ week_timekeeping::WeekTimekeepingModule
+ weekly_rewards_splitting::WeeklyRewardsSplittingModule
+ weekly_rewards_splitting::events::WeeklyRewardsSplittingEventsModule
Expand Down
1 change: 1 addition & 0 deletions dex/farm-with-locked-rewards/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ pub trait Farm:
+ farm_base_impl::exit_farm::BaseExitFarmModule
+ farm_boosted_yields::FarmBoostedYieldsModule
+ farm_boosted_yields::boosted_yields_factors::BoostedYieldsFactorsModule
+ farm_boosted_yields::undistributed_rewards::UndistributedRewardsModule
+ week_timekeeping::WeekTimekeepingModule
+ weekly_rewards_splitting::WeeklyRewardsSplittingModule
+ weekly_rewards_splitting::events::WeeklyRewardsSplittingEventsModule
Expand Down
2 changes: 1 addition & 1 deletion dex/farm-with-locked-rewards/wasm/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 5 additions & 4 deletions dex/farm-with-locked-rewards/wasm/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@

// Init: 1
// Upgrade: 1
// Endpoints: 68
// Endpoints: 69
// Async Callback: 1
// Total number of exported functions: 71
// Total number of exported functions: 72

#![no_std]

Expand Down Expand Up @@ -69,13 +69,14 @@ multiversx_sc_wasm_adapter::endpoints! {
getPairContractManagedAddress => pair_contract_address
enterFarmOnBehalf => enter_farm_on_behalf
claimRewardsOnBehalf => claim_rewards_on_behalf
collectUndistributedBoostedRewards => collect_undistributed_boosted_rewards
getBoostedYieldsRewardsPercentage => boosted_yields_rewards_percentage
getAccumulatedRewardsForWeek => accumulated_rewards_for_week
getFarmSupplyForWeek => farm_supply_for_week
getRemainingBoostedRewardsToDistribute => remaining_boosted_rewards_to_distribute
setBoostedYieldsFactors => set_boosted_yields_factors
getBoostedYieldsFactors => get_boosted_yields_factors
setMultisigAddress => set_multisig_address
collectUndistributedBoostedRewards => collect_undistributed_boosted_rewards
getRemainingBoostedRewardsToDistribute => remaining_boosted_rewards_to_distribute
getCurrentWeek => get_current_week
getFirstWeekStartEpoch => first_week_start_epoch
getLastActiveWeekForUser => get_last_active_week_for_user_view
Expand Down
1 change: 1 addition & 0 deletions dex/farm/src/base_functions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ pub trait BaseFunctionsModule:
+ utils::UtilsModule
+ farm_boosted_yields::FarmBoostedYieldsModule
+ farm_boosted_yields::boosted_yields_factors::BoostedYieldsFactorsModule
+ farm_boosted_yields::undistributed_rewards::UndistributedRewardsModule
+ week_timekeeping::WeekTimekeepingModule
+ weekly_rewards_splitting::WeeklyRewardsSplittingModule
+ weekly_rewards_splitting::events::WeeklyRewardsSplittingEventsModule
Expand Down
1 change: 1 addition & 0 deletions dex/farm/src/external_interaction.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ pub trait ExternalInteractionsModule:
+ farm_base_impl::exit_farm::BaseExitFarmModule
+ farm_boosted_yields::FarmBoostedYieldsModule
+ farm_boosted_yields::boosted_yields_factors::BoostedYieldsFactorsModule
+ farm_boosted_yields::undistributed_rewards::UndistributedRewardsModule
+ week_timekeeping::WeekTimekeepingModule
+ weekly_rewards_splitting::WeeklyRewardsSplittingModule
+ weekly_rewards_splitting::events::WeeklyRewardsSplittingEventsModule
Expand Down
1 change: 1 addition & 0 deletions dex/farm/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ pub trait Farm:
+ farm_base_impl::exit_farm::BaseExitFarmModule
+ farm_boosted_yields::FarmBoostedYieldsModule
+ farm_boosted_yields::boosted_yields_factors::BoostedYieldsFactorsModule
+ farm_boosted_yields::undistributed_rewards::UndistributedRewardsModule
+ week_timekeeping::WeekTimekeepingModule
+ weekly_rewards_splitting::WeeklyRewardsSplittingModule
+ weekly_rewards_splitting::events::WeeklyRewardsSplittingEventsModule
Expand Down
13 changes: 8 additions & 5 deletions dex/farm/tests/farm_multi_user_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -696,14 +696,12 @@ fn farm_multiple_claim_weeks_with_collect_undistributed_rewards_test() {

farm_setup.check_error_collect_undistributed_boosted_rewards(
"Current week must be higher than the week offset",
1,
4,
);

// advance to week 6
farm_setup.b_mock.set_block_epoch(36);

farm_setup.collect_undistributed_boosted_rewards(1, 1);
farm_setup.collect_undistributed_boosted_rewards();
farm_setup.check_undistributed_boosted_rewards(1);
farm_setup.check_remaining_boosted_rewards_to_distribute(1, 0);
farm_setup.check_remaining_boosted_rewards_to_distribute(2, 1);
Expand All @@ -712,13 +710,18 @@ fn farm_multiple_claim_weeks_with_collect_undistributed_rewards_test() {
// advance to week 8
farm_setup.b_mock.set_block_epoch(50);

farm_setup.collect_undistributed_boosted_rewards(1, 3);
farm_setup.collect_undistributed_boosted_rewards();
farm_setup.check_undistributed_boosted_rewards(3);

farm_setup.check_remaining_boosted_rewards_to_distribute(1, 0);
farm_setup.check_remaining_boosted_rewards_to_distribute(2, 0);
farm_setup.check_remaining_boosted_rewards_to_distribute(3, 0);

// collecting multiple times has no effect
farm_setup.collect_undistributed_boosted_rewards();
farm_setup.collect_undistributed_boosted_rewards();
farm_setup.collect_undistributed_boosted_rewards();

// check entries are not empty
farm_setup
.b_mock
Expand Down Expand Up @@ -976,7 +979,7 @@ fn farm_claim_with_minimum_tokens() {
let remaining_boosted_yields_rewards =
total_boosted_yields_rewards - first_boosted_amt - second_boosted_amt;
farm_setup.check_undistributed_boosted_rewards(0);
farm_setup.collect_undistributed_boosted_rewards(1, 1);
farm_setup.collect_undistributed_boosted_rewards();
farm_setup.check_undistributed_boosted_rewards(remaining_boosted_yields_rewards);
farm_setup.check_remaining_boosted_rewards_to_distribute(1, 0);
farm_setup.check_remaining_boosted_rewards_to_distribute(2, 0);
Expand Down
32 changes: 10 additions & 22 deletions dex/farm/tests/farm_setup/multi_user_farm_setup.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
use common_structs::FarmTokenAttributes;
use config::ConfigModule;
use farm::external_interaction::ExternalInteractionsModule;
use farm_boosted_yields::undistributed_rewards::UndistributedRewardsModule;
use multiversx_sc::codec::multi_types::OptionalValue;
use multiversx_sc::{
storage::mappers::StorageTokenWrapper,
Expand All @@ -21,18 +22,17 @@ use energy_query::{Energy, EnergyQueryModule};
use energy_update::EnergyUpdate;
use farm::Farm;
use farm_boosted_yields::boosted_yields_factors::BoostedYieldsFactorsModule;
use farm_boosted_yields::FarmBoostedYieldsModule;
use farm_token::FarmTokenModule;
use pausable::{PausableModule, State};
use permissions_hub::PermissionsHub;
use permissions_hub_module::PermissionsHubModule;
use sc_whitelist_module::SCWhitelistModule;
use week_timekeeping::{Epoch, Week};
use week_timekeeping::Epoch;
use weekly_rewards_splitting::update_claim_progress_energy::UpdateClaimProgressEnergyModule;

use super::single_user_farm_setup::MEX_TOKEN_ID;

pub static REWARD_TOKEN_ID: &[u8] = b"REW-123456";
pub static REWARD_TOKEN_ID: &[u8] = MEX_TOKEN_ID;
pub static FARMING_TOKEN_ID: &[u8] = b"LPTOK-123456";
pub static FARM_TOKEN_ID: &[u8] = b"FARM-123456";
pub const DIV_SAFETY: u64 = 1_000_000_000_000;
Expand Down Expand Up @@ -187,6 +187,9 @@ where
sc.set_permissions_hub_address(managed_address!(
permissions_hub_wrapper.address_ref()
));

sc.multisig_address()
.set(managed_address!(&undistributed_rew_dest));
})
.assert_ok();

Expand Down Expand Up @@ -829,33 +832,18 @@ where
.assert_ok();
}

pub fn check_error_collect_undistributed_boosted_rewards(
&mut self,
expected_message: &str,
start_week: Week,
end_week: Week,
) {
let dest_address = self.undistributed_rew_dest.clone();
pub fn check_error_collect_undistributed_boosted_rewards(&mut self, expected_message: &str) {
self.b_mock
.execute_tx(&self.owner, &self.farm_wrapper, &rust_biguint!(0), |sc| {
sc.collect_undistributed_boosted_rewards(
start_week,
end_week,
managed_address!(&dest_address),
);
sc.collect_undistributed_boosted_rewards();
})
.assert_error(4, expected_message)
}

pub fn collect_undistributed_boosted_rewards(&mut self, start_week: Week, end_week: Week) {
let dest_address = self.undistributed_rew_dest.clone();
pub fn collect_undistributed_boosted_rewards(&mut self) {
self.b_mock
.execute_tx(&self.owner, &self.farm_wrapper, &rust_biguint!(0), |sc| {
sc.collect_undistributed_boosted_rewards(
start_week,
end_week,
managed_address!(&dest_address),
);
sc.collect_undistributed_boosted_rewards();
})
.assert_ok();
}
Expand Down
2 changes: 1 addition & 1 deletion dex/farm/wasm/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 5 additions & 4 deletions dex/farm/wasm/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@

// Init: 1
// Upgrade: 1
// Endpoints: 65
// Endpoints: 66
// Async Callback: 1
// Total number of exported functions: 68
// Total number of exported functions: 69

#![no_std]

Expand Down Expand Up @@ -66,13 +66,14 @@ multiversx_sc_wasm_adapter::endpoints! {
getPairContractManagedAddress => pair_contract_address
enterFarmOnBehalf => enter_farm_on_behalf
claimRewardsOnBehalf => claim_rewards_on_behalf
collectUndistributedBoostedRewards => collect_undistributed_boosted_rewards
getBoostedYieldsRewardsPercentage => boosted_yields_rewards_percentage
getAccumulatedRewardsForWeek => accumulated_rewards_for_week
getFarmSupplyForWeek => farm_supply_for_week
getRemainingBoostedRewardsToDistribute => remaining_boosted_rewards_to_distribute
setBoostedYieldsFactors => set_boosted_yields_factors
getBoostedYieldsFactors => get_boosted_yields_factors
setMultisigAddress => set_multisig_address
collectUndistributedBoostedRewards => collect_undistributed_boosted_rewards
getRemainingBoostedRewardsToDistribute => remaining_boosted_rewards_to_distribute
getCurrentWeek => get_current_week
getFirstWeekStartEpoch => first_week_start_epoch
getLastActiveWeekForUser => get_last_active_week_for_user_view
Expand Down
2 changes: 1 addition & 1 deletion dex/proxy-deployer/wasm/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion energy-integration/energy-update/wasm/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

63 changes: 3 additions & 60 deletions energy-integration/farm-boosted-yields/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,10 @@ use boosted_yields_factors::BoostedYieldsConfig;
use common_types::PaymentsVec;
use multiversx_sc::api::ErrorApi;
use week_timekeeping::Week;
use weekly_rewards_splitting::{
base_impl::WeeklyRewardsSplittingTraitsModule, USER_MAX_CLAIM_WEEKS,
};
use weekly_rewards_splitting::base_impl::WeeklyRewardsSplittingTraitsModule;

pub mod boosted_yields_factors;
pub mod undistributed_rewards;

const MAX_PERCENT: u64 = 10_000;

Expand All @@ -30,16 +29,6 @@ impl<M: ManagedTypeApi> SplitReward<M> {
}
}

mod energy_factory_proxy_send_rew {
multiversx_sc::imports!();

#[multiversx_sc::proxy]
pub trait EnergyFactorySendRewProxy {
#[endpoint(transferUnlockedToken)]
fn transfer_unlocked_token(&self, dest: ManagedAddress, amount: BigUint);
}
}

#[multiversx_sc::module]
pub trait FarmBoostedYieldsModule:
boosted_yields_factors::BoostedYieldsFactorsModule
Expand All @@ -53,44 +42,8 @@ pub trait FarmBoostedYieldsModule:
+ weekly_rewards_splitting::locked_token_buckets::WeeklyRewardsLockedTokenBucketsModule
+ weekly_rewards_splitting::update_claim_progress_energy::UpdateClaimProgressEnergyModule
+ energy_query::EnergyQueryModule
+ undistributed_rewards::UndistributedRewardsModule
{
#[only_owner]
#[endpoint(collectUndistributedBoostedRewards)]
fn collect_undistributed_boosted_rewards(
&self,
start_week: Week,
end_week: Week,
dest_address: ManagedAddress,
) {
let collect_rewards_offset = USER_MAX_CLAIM_WEEKS + 1;
let current_week = self.get_current_week();
require!(
current_week > collect_rewards_offset,
"Current week must be higher than the week offset"
);
require!(start_week <= end_week, "Invalid week numbers");
require!(
end_week <= current_week - collect_rewards_offset,
"Invalid end week"
);

let mut total_rewards = BigUint::zero();
for week in start_week..=end_week {
let rewards_to_distribute = self.remaining_boosted_rewards_to_distribute(week).take();
total_rewards += rewards_to_distribute;
}

if total_rewards == 0 {
return;
}

let energy_factory = self.energy_factory_address().get();
let _: () = self
.energy_factory_send_rew_proxy_obj(energy_factory)
.transfer_unlocked_token(dest_address, total_rewards)
.execute_on_dest_context();
}

fn take_reward_slice(&self, full_reward: BigUint) -> SplitReward<Self::Api> {
let percentage = self.boosted_yields_rewards_percentage().get();
if percentage == 0 {
Expand Down Expand Up @@ -165,16 +118,6 @@ pub trait FarmBoostedYieldsModule:
#[view(getFarmSupplyForWeek)]
#[storage_mapper("farmSupplyForWeek")]
fn farm_supply_for_week(&self, week: Week) -> SingleValueMapper<BigUint>;

#[view(getRemainingBoostedRewardsToDistribute)]
#[storage_mapper("remainingBoostedRewardsToDistribute")]
fn remaining_boosted_rewards_to_distribute(&self, week: Week) -> SingleValueMapper<BigUint>;

#[proxy]
fn energy_factory_send_rew_proxy_obj(
&self,
sc_address: ManagedAddress,
) -> energy_factory_proxy_send_rew::Proxy<Self::Api>;
}

pub struct FarmBoostedYieldsWrapper<T: FarmBoostedYieldsModule> {
Expand Down
Loading