Skip to main content

mars_params/
emergency_powers.rs

1use cosmwasm_std::{Decimal, DepsMut, MessageInfo, Response, Uint128};
2
3use crate::{
4    error::ContractError,
5    state::{ASSET_PARAMS, OWNER, VAULT_CONFIGS},
6};
7
8pub fn disable_borrowing(
9    deps: DepsMut,
10    info: MessageInfo,
11    denom: &str,
12) -> Result<Response, ContractError> {
13    OWNER.assert_emergency_owner(deps.storage, &info.sender)?;
14
15    let mut params = ASSET_PARAMS.load(deps.storage, denom)?;
16    params.red_bank.borrow_enabled = false;
17    ASSET_PARAMS.save(deps.storage, denom, &params)?;
18
19    let response = Response::new()
20        .add_attribute("action", "emergency_disable_borrowing")
21        .add_attribute("denom", denom.to_string());
22
23    Ok(response)
24}
25
26pub fn disallow_coin(
27    deps: DepsMut,
28    info: MessageInfo,
29    denom: &str,
30) -> Result<Response, ContractError> {
31    OWNER.assert_emergency_owner(deps.storage, &info.sender)?;
32
33    let mut params = ASSET_PARAMS.load(deps.storage, denom)?;
34    params.credit_manager.whitelisted = false;
35    ASSET_PARAMS.save(deps.storage, denom, &params)?;
36
37    let response = Response::new()
38        .add_attribute("action", "emergency_disallow_coin")
39        .add_attribute("denom", denom.to_string());
40
41    Ok(response)
42}
43
44pub fn set_zero_max_ltv(
45    deps: DepsMut,
46    info: MessageInfo,
47    vault: &str,
48) -> Result<Response, ContractError> {
49    OWNER.assert_emergency_owner(deps.storage, &info.sender)?;
50
51    let vault_addr = deps.api.addr_validate(vault)?;
52
53    let mut config = VAULT_CONFIGS.load(deps.storage, &vault_addr)?;
54    config.max_loan_to_value = Decimal::zero();
55    VAULT_CONFIGS.save(deps.storage, &vault_addr, &config)?;
56
57    let response = Response::new()
58        .add_attribute("action", "emergency_set_zero_max_ltv")
59        .add_attribute("vault", vault.to_string());
60
61    Ok(response)
62}
63
64pub fn set_zero_deposit_cap(
65    deps: DepsMut,
66    info: MessageInfo,
67    vault: &str,
68) -> Result<Response, ContractError> {
69    OWNER.assert_emergency_owner(deps.storage, &info.sender)?;
70
71    let vault_addr = deps.api.addr_validate(vault)?;
72
73    let mut config = VAULT_CONFIGS.load(deps.storage, &vault_addr)?;
74    config.deposit_cap.amount = Uint128::zero();
75    VAULT_CONFIGS.save(deps.storage, &vault_addr, &config)?;
76
77    let response = Response::new()
78        .add_attribute("action", "emergency_set_zero_deposit_cap")
79        .add_attribute("vault", vault.to_string());
80
81    Ok(response)
82}