diff --git a/pallets/loans/src/interest.rs b/pallets/loans/src/interest.rs index 7176c2033..93f2d9a4d 100644 --- a/pallets/loans/src/interest.rs +++ b/pallets/loans/src/interest.rs @@ -151,10 +151,10 @@ impl Pallet { Ok(Ratio::from_rational(borrows, total)) } - /// The exchange rate should be greater than 0.02 and less than 1 + /// The exchange rate should be greater than 0.015 and less than 1 pub(crate) fn ensure_valid_exchange_rate(exchange_rate: Rate) -> DispatchResult { ensure!( - exchange_rate >= Rate::from_inner(MIN_EXCHANGE_RATE) + exchange_rate >= Rate::from_inner(MIN_VALID_EXCHANGE_RATE) && exchange_rate < Rate::from_inner(MAX_EXCHANGE_RATE), Error::::InvalidExchangeRate ); diff --git a/pallets/loans/src/lib.rs b/pallets/loans/src/lib.rs index 0ac3c344c..a21cf8696 100644 --- a/pallets/loans/src/lib.rs +++ b/pallets/loans/src/lib.rs @@ -80,6 +80,7 @@ pub const MIN_INTEREST_CALCULATING_INTERVAL: u64 = 100; // 100 seconds pub const MAX_EXCHANGE_RATE: u128 = 1_000_000_000_000_000_000; // 1 pub const MIN_EXCHANGE_RATE: u128 = 20_000_000_000_000_000; // 0.02 +pub const MIN_VALID_EXCHANGE_RATE: u128 = 15_000_000_000_000_000; // 0.015 type AccountIdOf = ::AccountId; type AssetIdOf = @@ -1470,7 +1471,7 @@ impl Pallet { Self::update_reward_supply_index(asset_id)?; Self::distribute_supplier_reward(asset_id, who)?; - let exchange_rate = Self::exchange_rate_stored(asset_id)?; + let exchange_rate: FixedU128 = Self::exchange_rate_stored(asset_id)?; let redeem_amount = Self::calc_underlying_amount(voucher_amount, exchange_rate)?; AccountDeposits::::try_mutate_exists(asset_id, who, |deposits| -> DispatchResult { @@ -1583,11 +1584,16 @@ impl Pallet { ) -> DispatchResult { let deposits = AccountDeposits::::get(asset_id, who); let account_earned = AccountEarned::::get(asset_id, who); - let total_earned_prior_new = exchange_rate - .checked_sub(&account_earned.exchange_rate_prior) - .and_then(|r| r.checked_mul_int(deposits.voucher_balance)) - .and_then(|r| r.checked_add(account_earned.total_earned_prior)) - .ok_or(ArithmeticError::Overflow)?; + + let total_earned_prior_new = if exchange_rate >= account_earned.exchange_rate_prior { + exchange_rate + .checked_sub(&account_earned.exchange_rate_prior) + .and_then(|delta| delta.checked_mul_int(deposits.voucher_balance)) + .and_then(|result| result.checked_add(account_earned.total_earned_prior)) + .ok_or(ArithmeticError::Overflow)? + } else { + account_earned.total_earned_prior + }; AccountEarned::::insert( asset_id, diff --git a/runtime/heiko/src/lib.rs b/runtime/heiko/src/lib.rs index 6f7ca8592..857331596 100644 --- a/runtime/heiko/src/lib.rs +++ b/runtime/heiko/src/lib.rs @@ -180,7 +180,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("heiko"), impl_name: create_runtime_str!("heiko"), authoring_version: 1, - spec_version: 207, + spec_version: 210, impl_version: 33, apis: RUNTIME_API_VERSIONS, transaction_version: 17, diff --git a/runtime/kerria/src/lib.rs b/runtime/kerria/src/lib.rs index 528f1ced6..a1ae7a6e3 100644 --- a/runtime/kerria/src/lib.rs +++ b/runtime/kerria/src/lib.rs @@ -180,7 +180,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("kerria"), impl_name: create_runtime_str!("kerria"), authoring_version: 1, - spec_version: 207, + spec_version: 210, impl_version: 33, apis: RUNTIME_API_VERSIONS, transaction_version: 17, diff --git a/runtime/parallel/src/lib.rs b/runtime/parallel/src/lib.rs index 42a82d956..4623e76ad 100644 --- a/runtime/parallel/src/lib.rs +++ b/runtime/parallel/src/lib.rs @@ -185,7 +185,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("parallel"), impl_name: create_runtime_str!("parallel"), authoring_version: 1, - spec_version: 207, + spec_version: 210, impl_version: 33, apis: RUNTIME_API_VERSIONS, transaction_version: 17, diff --git a/runtime/vanilla/src/lib.rs b/runtime/vanilla/src/lib.rs index fd4836115..e2dcfe135 100644 --- a/runtime/vanilla/src/lib.rs +++ b/runtime/vanilla/src/lib.rs @@ -180,7 +180,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("vanilla"), impl_name: create_runtime_str!("vanilla"), authoring_version: 1, - spec_version: 207, + spec_version: 210, impl_version: 33, apis: RUNTIME_API_VERSIONS, transaction_version: 17, diff --git a/scripts/collator.sh b/scripts/collator.sh index 5390e2b2d..46818597d 100755 --- a/scripts/collator.sh +++ b/scripts/collator.sh @@ -20,7 +20,7 @@ VOLUME="chains" NODE_KEY="$1" KEYSTORE_PATH="$2" NODE_NAME="$3" -DOCKER_IMAGE="parallelfinance/parallel:v2.0.7" +DOCKER_IMAGE="parallelfinance/parallel:v2.1.0" BASE_PATH="/data" if [ $# -lt 3 ]; then