Skip to content

Commit

Permalink
Merge pull request #866 from interlay/fix/rewards-rpc
Browse files Browse the repository at this point in the history
fix: make rewards rpc work
  • Loading branch information
sander2 authored Jan 19, 2023
2 parents e5b5656 + da0f693 commit 10f40eb
Show file tree
Hide file tree
Showing 7 changed files with 48 additions and 0 deletions.
1 change: 1 addition & 0 deletions parachain/runtime/interlay/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1609,6 +1609,7 @@ impl_runtime_apis! {
// distribute rewards accrued over block count
let reward = VaultAnnuity::min_reward_per_block().saturating_mul(YEARS.into());
<VaultCapacity as reward::RewardsApi<(), CurrencyId, Balance>>::distribute_reward(&(), NATIVE_CURRENCY_ID, reward)?;
Amount::<Runtime>::new(reward, NATIVE_CURRENCY_ID).mint_to(&Fee::fee_pool_account_id())?;
// compute and convert rewards
let received = Fee::compute_vault_rewards(&vault_id, &vault_id.account_id, NATIVE_CURRENCY_ID)?;
let received_as_wrapped = Oracle::collateral_to_wrapped(received, NATIVE_CURRENCY_ID)?;
Expand Down
1 change: 1 addition & 0 deletions parachain/runtime/kintsugi/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1595,6 +1595,7 @@ impl_runtime_apis! {
// distribute rewards accrued over block count
let reward = VaultAnnuity::min_reward_per_block().saturating_mul(YEARS.into());
<VaultCapacity as reward::RewardsApi<(), CurrencyId, Balance>>::distribute_reward(&(), NATIVE_CURRENCY_ID, reward)?;
Amount::<Runtime>::new(reward, NATIVE_CURRENCY_ID).mint_to(&Fee::fee_pool_account_id())?;
// compute and convert rewards
let received = Fee::compute_vault_rewards(&vault_id, &vault_id.account_id, NATIVE_CURRENCY_ID)?;
let received_as_wrapped = Oracle::collateral_to_wrapped(received, NATIVE_CURRENCY_ID)?;
Expand Down
1 change: 1 addition & 0 deletions parachain/runtime/testnet-interlay/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1547,6 +1547,7 @@ impl_runtime_apis! {
// distribute rewards accrued over block count
let reward = VaultAnnuity::min_reward_per_block().saturating_mul(YEARS.into());
<VaultCapacity as reward::RewardsApi<(), CurrencyId, Balance>>::distribute_reward(&(), NATIVE_CURRENCY_ID, reward)?;
Amount::<Runtime>::new(reward, NATIVE_CURRENCY_ID).mint_to(&Fee::fee_pool_account_id())?;
// compute and convert rewards
let received = Fee::compute_vault_rewards(&vault_id, &vault_id.account_id, NATIVE_CURRENCY_ID)?;
let received_as_wrapped = Oracle::collateral_to_wrapped(received, NATIVE_CURRENCY_ID)?;
Expand Down
1 change: 1 addition & 0 deletions parachain/runtime/testnet-kintsugi/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1601,6 +1601,7 @@ impl_runtime_apis! {
// distribute rewards accrued over block count
let reward = VaultAnnuity::min_reward_per_block().saturating_mul(YEARS.into());
<VaultCapacity as reward::RewardsApi<(), CurrencyId, Balance>>::distribute_reward(&(), NATIVE_CURRENCY_ID, reward)?;
Amount::<Runtime>::new(reward, NATIVE_CURRENCY_ID).mint_to(&Fee::fee_pool_account_id())?;
// compute and convert rewards
let received = Fee::compute_vault_rewards(&vault_id, &vault_id.account_id, NATIVE_CURRENCY_ID)?;
let received_as_wrapped = Oracle::collateral_to_wrapped(received, NATIVE_CURRENCY_ID)?;
Expand Down
1 change: 1 addition & 0 deletions standalone/runtime/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1537,6 +1537,7 @@ impl_runtime_apis! {
// distribute rewards accrued over block count
let reward = VaultAnnuity::min_reward_per_block().saturating_mul(YEARS.into());
<VaultCapacity as reward::RewardsApi<(), CurrencyId, Balance>>::distribute_reward(&(), NATIVE_CURRENCY_ID, reward)?;
Amount::<Runtime>::new(reward, NATIVE_CURRENCY_ID).mint_to(&Fee::fee_pool_account_id())?;
// compute and convert rewards
let received = Fee::compute_vault_rewards(&vault_id, &vault_id.account_id, NATIVE_CURRENCY_ID)?;
let received_as_wrapped = Oracle::collateral_to_wrapped(received, NATIVE_CURRENCY_ID)?;
Expand Down
2 changes: 2 additions & 0 deletions standalone/runtime/tests/mock/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,8 @@ pub type LoansPallet = loans::Pallet<Runtime>;

pub type AuraPallet = pallet_aura::Pallet<Runtime>;

pub type VaultAnnuityPallet = annuity::Pallet<Runtime, VaultAnnuityInstance>;

pub const DEFAULT_COLLATERAL_CURRENCY: <Runtime as orml_tokens::Config>::CurrencyId = Token(DOT);
pub const DEFAULT_WRAPPED_CURRENCY: <Runtime as orml_tokens::Config>::CurrencyId = Token(IBTC);
pub const DEFAULT_NATIVE_CURRENCY: <Runtime as orml_tokens::Config>::CurrencyId = Token(INTR);
Expand Down
41 changes: 41 additions & 0 deletions standalone/runtime/tests/test_fee_pool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,47 @@ fn get_vault_collateral(vault_id: &VaultId) -> Amount<Runtime> {
.unwrap()
}

fn estimate_vault_reward_rate(vault_id: VaultId) -> Result<UnsignedFixedPoint, DispatchError> {
// distribute and withdraw previous rewards
FeePallet::distribute_vault_rewards(&vault_id, REWARD_CURRENCY)?;
<VaultStakingPallet as reward::RewardsApi<(Option<u32>, VaultId), AccountId, Balance>>::withdraw_reward(
&(None, vault_id.clone()),
&vault_id.account_id,
REWARD_CURRENCY,
)?;
// distribute rewards accrued over block count
let reward = VaultAnnuityPallet::min_reward_per_block().saturating_mul(YEARS.into());
<CapacityRewardsPallet as reward::RewardsApi<(), CurrencyId, Balance>>::distribute_reward(
&(),
REWARD_CURRENCY,
reward,
)?;
Amount::<Runtime>::new(reward, REWARD_CURRENCY).mint_to(&FeePallet::fee_pool_account_id())?;
// compute and convert rewards
let received = FeePallet::compute_vault_rewards(&vault_id, &vault_id.account_id, REWARD_CURRENCY)?;
let received_as_wrapped = OraclePallet::collateral_to_wrapped(received, REWARD_CURRENCY)?;
// convert collateral stake to same currency
let collateral = <VaultStakingPallet as reward::RewardsApi<(Option<u32>, VaultId), AccountId, Balance>>::get_stake(
&(None, vault_id.clone()),
&vault_id.account_id,
)?;
let collateral_as_wrapped = OraclePallet::collateral_to_wrapped(collateral, vault_id.collateral_currency())?;
// rate is received / collateral
Ok(UnsignedFixedPoint::checked_from_rational(received_as_wrapped, collateral_as_wrapped).unwrap_or_default())
}

#[ignore] // fails because lendtokens are not supported yet (TODO!)
#[test]
fn integration_test_estimate_vault_reward_rate() {
test_with(|vault_id| {
let rewards1 = Amount::<Runtime>::new(1000000000000000, REWARD_CURRENCY);
rewards1.mint_to(&VaultAnnuityPallet::account_id()).unwrap();
VaultAnnuityPallet::update_reward_per_block();

estimate_vault_reward_rate(vault_id.clone()).unwrap();
});
}

#[test]
fn integration_test_fee_with_parachain_shutdown_fails() {
test_with(|vault_id_1| {
Expand Down

0 comments on commit 10f40eb

Please sign in to comment.