From da0f693dd67ae799979ead805493a82ace489c73 Mon Sep 17 00:00:00 2001 From: Sander Bosma Date: Thu, 19 Jan 2023 13:44:40 +0100 Subject: [PATCH] fix: make rewards rpc work --- parachain/runtime/interlay/src/lib.rs | 1 + parachain/runtime/kintsugi/src/lib.rs | 1 + parachain/runtime/testnet-interlay/src/lib.rs | 1 + parachain/runtime/testnet-kintsugi/src/lib.rs | 1 + standalone/runtime/src/lib.rs | 1 + standalone/runtime/tests/mock/mod.rs | 2 + standalone/runtime/tests/test_fee_pool.rs | 41 +++++++++++++++++++ 7 files changed, 48 insertions(+) diff --git a/parachain/runtime/interlay/src/lib.rs b/parachain/runtime/interlay/src/lib.rs index d921e3c6c5..cfc0118ec2 100644 --- a/parachain/runtime/interlay/src/lib.rs +++ b/parachain/runtime/interlay/src/lib.rs @@ -1609,6 +1609,7 @@ impl_runtime_apis! { // distribute rewards accrued over block count let reward = VaultAnnuity::min_reward_per_block().saturating_mul(YEARS.into()); >::distribute_reward(&(), NATIVE_CURRENCY_ID, reward)?; + Amount::::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)?; diff --git a/parachain/runtime/kintsugi/src/lib.rs b/parachain/runtime/kintsugi/src/lib.rs index c19b4ec03e..ae7cb85940 100644 --- a/parachain/runtime/kintsugi/src/lib.rs +++ b/parachain/runtime/kintsugi/src/lib.rs @@ -1595,6 +1595,7 @@ impl_runtime_apis! { // distribute rewards accrued over block count let reward = VaultAnnuity::min_reward_per_block().saturating_mul(YEARS.into()); >::distribute_reward(&(), NATIVE_CURRENCY_ID, reward)?; + Amount::::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)?; diff --git a/parachain/runtime/testnet-interlay/src/lib.rs b/parachain/runtime/testnet-interlay/src/lib.rs index 61af7a4fd4..bc5a7bdd0e 100644 --- a/parachain/runtime/testnet-interlay/src/lib.rs +++ b/parachain/runtime/testnet-interlay/src/lib.rs @@ -1547,6 +1547,7 @@ impl_runtime_apis! { // distribute rewards accrued over block count let reward = VaultAnnuity::min_reward_per_block().saturating_mul(YEARS.into()); >::distribute_reward(&(), NATIVE_CURRENCY_ID, reward)?; + Amount::::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)?; diff --git a/parachain/runtime/testnet-kintsugi/src/lib.rs b/parachain/runtime/testnet-kintsugi/src/lib.rs index c85bfc5de2..0115f32cb5 100644 --- a/parachain/runtime/testnet-kintsugi/src/lib.rs +++ b/parachain/runtime/testnet-kintsugi/src/lib.rs @@ -1601,6 +1601,7 @@ impl_runtime_apis! { // distribute rewards accrued over block count let reward = VaultAnnuity::min_reward_per_block().saturating_mul(YEARS.into()); >::distribute_reward(&(), NATIVE_CURRENCY_ID, reward)?; + Amount::::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)?; diff --git a/standalone/runtime/src/lib.rs b/standalone/runtime/src/lib.rs index 56f488db70..a902eef9a3 100644 --- a/standalone/runtime/src/lib.rs +++ b/standalone/runtime/src/lib.rs @@ -1537,6 +1537,7 @@ impl_runtime_apis! { // distribute rewards accrued over block count let reward = VaultAnnuity::min_reward_per_block().saturating_mul(YEARS.into()); >::distribute_reward(&(), NATIVE_CURRENCY_ID, reward)?; + Amount::::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)?; diff --git a/standalone/runtime/tests/mock/mod.rs b/standalone/runtime/tests/mock/mod.rs index 260040b54b..4d11ab5c9d 100644 --- a/standalone/runtime/tests/mock/mod.rs +++ b/standalone/runtime/tests/mock/mod.rs @@ -193,6 +193,8 @@ pub type LoansPallet = loans::Pallet; pub type AuraPallet = pallet_aura::Pallet; +pub type VaultAnnuityPallet = annuity::Pallet; + pub const DEFAULT_COLLATERAL_CURRENCY: ::CurrencyId = Token(DOT); pub const DEFAULT_WRAPPED_CURRENCY: ::CurrencyId = Token(IBTC); pub const DEFAULT_NATIVE_CURRENCY: ::CurrencyId = Token(INTR); diff --git a/standalone/runtime/tests/test_fee_pool.rs b/standalone/runtime/tests/test_fee_pool.rs index 59b7e79720..6f4ae71abb 100644 --- a/standalone/runtime/tests/test_fee_pool.rs +++ b/standalone/runtime/tests/test_fee_pool.rs @@ -122,6 +122,47 @@ fn get_vault_collateral(vault_id: &VaultId) -> Amount { .unwrap() } +fn estimate_vault_reward_rate(vault_id: VaultId) -> Result { + // distribute and withdraw previous rewards + FeePallet::distribute_vault_rewards(&vault_id, REWARD_CURRENCY)?; + , 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()); + >::distribute_reward( + &(), + REWARD_CURRENCY, + reward, + )?; + Amount::::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 = , 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::::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| {