mars_params/
emergency_powers.rs1use 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, ¶ms)?;
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, ¶ms)?;
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}