Skip to content

Commit

Permalink
fix: stricter collateral checks in vault registration
Browse files Browse the repository at this point in the history
  • Loading branch information
sander2 committed Sep 15, 2022
1 parent bd462ac commit 3078e04
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 1 deletion.
18 changes: 18 additions & 0 deletions crates/issue/src/mock.rs
Expand Up @@ -299,6 +299,24 @@ impl ExtBuilder {
.assimilate_storage(&mut storage)
.unwrap();

const PAIR: VaultCurrencyPair<CurrencyId> = VaultCurrencyPair {
collateral: DEFAULT_COLLATERAL_CURRENCY,
wrapped: DEFAULT_WRAPPED_CURRENCY,
};
vault_registry::GenesisConfig::<Test> {
minimum_collateral_vault: vec![(DEFAULT_COLLATERAL_CURRENCY, 0)],
punishment_delay: 8,
system_collateral_ceiling: vec![(PAIR, 1_000_000_000_000)],
secure_collateral_threshold: vec![(PAIR, UnsignedFixedPoint::checked_from_rational(200, 100).unwrap())],
premium_redeem_threshold: vec![(PAIR, UnsignedFixedPoint::checked_from_rational(120, 100).unwrap())],
liquidation_collateral_threshold: vec![(
PAIR,
UnsignedFixedPoint::checked_from_rational(110, 100).unwrap(),
)],
}
.assimilate_storage(&mut storage)
.unwrap();

storage.into()
}

Expand Down
24 changes: 24 additions & 0 deletions crates/vault-registry/src/lib.rs
Expand Up @@ -615,6 +615,9 @@ pub mod pallet {

/// Vault is not accepting new issue requests.
VaultNotAcceptingIssueRequests,

// Minimum collateral was not found for the given currency
MinimumCollateralNotSet,
}

/// The minimum collateral (e.g. DOT/KSM) a Vault needs to provide to register.
Expand Down Expand Up @@ -757,6 +760,27 @@ impl<T: Config> Pallet<T> {
}

pub fn _register_vault(vault_id: DefaultVaultId<T>, collateral: BalanceOf<T>) -> DispatchResult {
ensure!(
SecureCollateralThreshold::<T>::contains_key(&vault_id.currencies),
Error::<T>::ThresholdNotSet
);
ensure!(
PremiumRedeemThreshold::<T>::contains_key(&vault_id.currencies),
Error::<T>::ThresholdNotSet
);
ensure!(
LiquidationCollateralThreshold::<T>::contains_key(&vault_id.currencies),
Error::<T>::ThresholdNotSet
);
ensure!(
MinimumCollateralVault::<T>::contains_key(vault_id.collateral_currency()),
Error::<T>::MinimumCollateralNotSet
);
ensure!(
SystemCollateralCeiling::<T>::contains_key(&vault_id.currencies),
Error::<T>::CeilingNotSet
);

// make sure a public key is registered
let _ = Self::get_bitcoin_public_key(&vault_id.account_id)?;

Expand Down
2 changes: 1 addition & 1 deletion standalone/runtime/tests/mock/mod.rs
Expand Up @@ -1383,7 +1383,7 @@ impl ExtBuilder {
.unwrap();

vault_registry::GenesisConfig::<Runtime> {
minimum_collateral_vault: vec![(Token(DOT), 0), (Token(KSM), 0)],
minimum_collateral_vault: vec![(Token(DOT), 0), (Token(KSM), 0), (ForeignAsset(1), 0), (Token(INTR), 0)],
punishment_delay: 8,
system_collateral_ceiling: iter_currency_pairs().map(|pair| (pair, FUND_LIMIT_CEILING)).collect(),
secure_collateral_threshold: iter_currency_pairs()
Expand Down

0 comments on commit 3078e04

Please sign in to comment.