Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Additional pause #198

Open
wants to merge 29 commits into
base: feat/audit-fixes-oak-2024-11
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 23 commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
e589049
Add token contract pauses
faust403 Nov 11, 2024
0d0943e
Add set_pause method into token contract
faust403 Nov 11, 2024
6b4bc44
Add default value into instantitate()
faust403 Nov 11, 2024
3ab2ce7
Initial implementation
faust403 Nov 11, 2024
a529109
Add basic tests
faust403 Nov 11, 2024
3e487bd
Add voucher
faust403 Nov 11, 2024
9422d3d
Add tests
faust403 Nov 11, 2024
1743987
Add native_bond_provider
faust403 Nov 12, 2024
724414b
Add puppeteer
faust403 Nov 12, 2024
2d30d6f
Add pausing test
faust403 Nov 12, 2024
9715450
Solustion for initia puppeteer ambiguity
faust403 Nov 12, 2024
a244c9e
Add puppeteer initia
faust403 Nov 12, 2024
1598a0a
Remove unused import
faust403 Nov 13, 2024
08fa03d
Merge branch 'main' into feat/additional-pause
faust403 Nov 14, 2024
455f1a8
bond(mint),unbond(burn) methods for token contract
faust403 Nov 14, 2024
4585e6e
unbond(burn -- withdrawal_voucher)
faust403 Nov 14, 2024
156c725
uncomment given section
faust403 Nov 14, 2024
4c49655
Remove unused import
faust403 Nov 14, 2024
156a1b9
Add puppeteer
faust403 Nov 18, 2024
9f63361
Add native bond provider
faust403 Nov 18, 2024
8f003e2
Add lsm bond provider
faust403 Nov 18, 2024
ab740b0
Add default PAUSE
faust403 Nov 19, 2024
e8aa351
Remove package-lock
faust403 Nov 22, 2024
e9ead00
Review remars fixes
albertandrejev Dec 4, 2024
e637ce2
Upda ts client
albertandrejev Dec 4, 2024
45da38e
fix pause set object
albertandrejev Dec 4, 2024
ff4993d
complete merge
faust403 Dec 8, 2024
bff8b56
complete merge x2
faust403 Dec 8, 2024
563c4d1
Unpause token mint
faust403 Dec 8, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

29 changes: 26 additions & 3 deletions contracts/lsm-share-bond-provider/src/contract.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ use cw_ownable::{get_ownership, update_ownership};
use drop_helpers::answer::{attr_coin, response};
use drop_helpers::ibc_client_state::query_client_state;
use drop_helpers::ibc_fee::query_ibc_fee;
use drop_helpers::pause::PauseError;
use drop_puppeteer_base::peripheral_hook::{
IBCTransferReason, ReceiverExecuteMsg, ResponseAnswer, ResponseHookErrorMsg, ResponseHookMsg,
ResponseHookSuccessMsg, Transaction,
Expand All @@ -22,8 +23,8 @@ use drop_staking_base::msg::lsm_share_bond_provider::{
};
use drop_staking_base::state::core::LAST_PUPPETEER_RESPONSE;
use drop_staking_base::state::lsm_share_bond_provider::{
Config, ConfigOptional, ReplyMsg, TxState, TxStateStatus, CONFIG, LAST_LSM_REDEEM,
LSM_SHARES_TO_REDEEM, PENDING_LSM_SHARES, TOTAL_LSM_SHARES_REAL_AMOUNT, TX_STATE,
Config, ConfigOptional, Pause, ReplyMsg, TxState, TxStateStatus, CONFIG, LAST_LSM_REDEEM,
LSM_SHARES_TO_REDEEM, PAUSE, PENDING_LSM_SHARES, TOTAL_LSM_SHARES_REAL_AMOUNT, TX_STATE,
};
use neutron_sdk::bindings::msg::NeutronMsg;
use neutron_sdk::bindings::query::NeutronQuery;
Expand Down Expand Up @@ -61,7 +62,7 @@ pub fn instantiate(
lsm_redeem_maximum_interval: msg.lsm_redeem_maximum_interval,
};
CONFIG.save(deps.storage, config)?;

PAUSE.save(deps.storage, &Pause::default())?;
TOTAL_LSM_SHARES_REAL_AMOUNT.save(deps.storage, &0)?;
LAST_LSM_REDEEM.save(deps.storage, &env.block.time.seconds())?;
TX_STATE.save(deps.storage, &TxState::default())?;
Expand Down Expand Up @@ -109,6 +110,7 @@ pub fn query(deps: Deps<NeutronQuery>, env: Env, msg: QueryMsg) -> ContractResul
QueryMsg::AsyncTokensAmount {} => {
to_json_binary(&TOTAL_LSM_SHARES_REAL_AMOUNT.load(deps.storage)?).map_err(From::from)
}
QueryMsg::Pause {} => Ok(to_json_binary(&PAUSE.load(deps.storage)?)?),
}
}

Expand Down Expand Up @@ -219,14 +221,35 @@ pub fn execute(
ExecuteMsg::Bond {} => execute_bond(deps, info),
ExecuteMsg::ProcessOnIdle {} => execute_process_on_idle(deps, env, info),
ExecuteMsg::PeripheralHook(msg) => execute_puppeteer_hook(deps, env, info, *msg),
ExecuteMsg::SetPause(pause) => execute_set_pause(deps.into_empty(), info, pause),
}
}

fn execute_set_pause(
deps: DepsMut,
info: MessageInfo,
pause: Pause,
) -> ContractResult<Response<NeutronMsg>> {
cw_ownable::assert_owner(deps.storage, &info.sender)?;

PAUSE.save(deps.storage, &pause)?;

Ok(response(
"execute-set-pause",
CONTRACT_NAME,
[("process_on_idle", pause.process_on_idle.to_string())],
))
}

fn execute_process_on_idle(
mut deps: DepsMut<NeutronQuery>,
env: Env,
info: MessageInfo,
) -> ContractResult<Response<NeutronMsg>> {
if PAUSE.load(deps.as_ref().storage)?.process_on_idle {
Err(ContractError::PauseError(PauseError::Paused {}))?
}

let config = CONFIG.load(deps.storage)?;
ensure_eq!(
info.sender,
Expand Down
98 changes: 93 additions & 5 deletions contracts/lsm-share-bond-provider/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,16 @@ use cw_ownable::{Action, Ownership};
use cw_utils::PaymentError;
use drop_helpers::{
ica::IcaState,
pause::PauseError,
testing::{mock_dependencies, WasmMockQuerier},
};
use drop_staking_base::{
error::lsm_share_bond_provider::ContractError,
msg::puppeteer::DelegationsResponse,
state::{
lsm_share_bond_provider::{
Config, ConfigOptional, ReplyMsg, TxState, CONFIG, LAST_LSM_REDEEM, PENDING_LSM_SHARES,
TOTAL_LSM_SHARES_REAL_AMOUNT, TX_STATE,
Config, ConfigOptional, Pause, ReplyMsg, TxState, CONFIG, LAST_LSM_REDEEM, PAUSE,
PENDING_LSM_SHARES, TOTAL_LSM_SHARES_REAL_AMOUNT, TX_STATE,
},
puppeteer::{Delegations, DropDelegation},
},
Expand Down Expand Up @@ -359,9 +360,82 @@ fn test_update_ownership() {
}

#[test]
fn process_on_idle_not_core_contract() {
fn execute_set_pause() {
let mut deps = mock_dependencies(&[]);
let deps_mut = deps.as_mut();
cw_ownable::initialize_owner(deps_mut.storage, deps_mut.api, Some("core")).unwrap();
PAUSE
.save(
deps.as_mut().storage,
&Pause {
process_on_idle: false,
},
)
.unwrap();

let res = crate::contract::execute(
deps.as_mut(),
mock_env(),
mock_info("core", &[]),
drop_staking_base::msg::lsm_share_bond_provider::ExecuteMsg::SetPause(Pause {
process_on_idle: true,
}),
)
.unwrap();
assert_eq!(
res,
cosmwasm_std::Response::new().add_event(
Event::new("crates.io:drop-staking__drop-lsm-share-bond-provider-execute-set-pause")
.add_attributes(vec![attr("process_on_idle", "true")])
)
);
assert_eq!(
PAUSE.load(deps.as_ref().storage).unwrap(),
Pause {
process_on_idle: true,
}
);
}

#[test]
fn process_on_idle_paused() {
let mut deps = mock_dependencies(&[]);
PAUSE
.save(
deps.as_mut().storage,
&Pause {
process_on_idle: true,
},
)
.unwrap();

let error = crate::contract::execute(
deps.as_mut(),
mock_env(),
mock_info("not_core_contract", &[]),
drop_staking_base::msg::lsm_share_bond_provider::ExecuteMsg::ProcessOnIdle {},
)
.unwrap_err();

assert_eq!(
error,
drop_staking_base::error::lsm_share_bond_provider::ContractError::PauseError(
PauseError::Paused {}
)
);
}

#[test]
fn process_on_idle_not_core_contract() {
let mut deps = mock_dependencies(&[]);
PAUSE
.save(
deps.as_mut().storage,
&Pause {
process_on_idle: false,
},
)
.unwrap();
CONFIG
.save(deps.as_mut().storage, &get_default_config(100u64, 200u64))
.unwrap();
Expand All @@ -384,7 +458,14 @@ fn process_on_idle_not_core_contract() {
fn test_process_on_idle_lsm_share_not_ready() {
let mut deps = mock_dependencies(&[]);
let deps_mut = deps.as_mut();

PAUSE
.save(
deps_mut.storage,
&Pause {
process_on_idle: false,
},
)
.unwrap();
CONFIG
.save(deps_mut.storage, &get_default_config(100u64, 200u64))
.unwrap();
Expand Down Expand Up @@ -412,7 +493,14 @@ fn test_process_on_idle_lsm_share_not_ready() {
#[test]
fn test_process_on_idle_supported() {
let mut deps = mock_dependencies(&[]);

PAUSE
.save(
deps.as_mut().storage,
&Pause {
process_on_idle: false,
},
)
.unwrap();
deps.querier.add_custom_query_response(|_| {
to_json_binary(&MinIbcFeeResponse {
min_fee: IbcFee {
Expand Down
29 changes: 26 additions & 3 deletions contracts/native-bond-provider/src/contract.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ use cw_ownable::{get_ownership, update_ownership};
use drop_helpers::answer::{attr_coin, response};
use drop_helpers::ibc_client_state::query_client_state;
use drop_helpers::ibc_fee::query_ibc_fee;
use drop_helpers::pause::PauseError;
use drop_puppeteer_base::peripheral_hook::{
IBCTransferReason, ReceiverExecuteMsg, ResponseAnswer, ResponseHookErrorMsg, ResponseHookMsg,
ResponseHookSuccessMsg, Transaction,
Expand All @@ -19,8 +20,8 @@ use drop_staking_base::msg::native_bond_provider::{
ExecuteMsg, InstantiateMsg, MigrateMsg, QueryMsg,
};
use drop_staking_base::state::native_bond_provider::{
Config, ConfigOptional, ReplyMsg, TxState, TxStateStatus, CONFIG, LAST_PUPPETEER_RESPONSE,
NON_STAKED_BALANCE, TX_STATE,
Config, ConfigOptional, Pause, ReplyMsg, TxState, TxStateStatus, CONFIG,
LAST_PUPPETEER_RESPONSE, NON_STAKED_BALANCE, PAUSE, TX_STATE,
};
use neutron_sdk::bindings::msg::NeutronMsg;
use neutron_sdk::bindings::query::NeutronQuery;
Expand Down Expand Up @@ -57,7 +58,7 @@ pub fn instantiate(
timeout: msg.timeout,
};
CONFIG.save(deps.storage, config)?;

PAUSE.save(deps.storage, &Pause::default())?;
NON_STAKED_BALANCE.save(deps.storage, &Uint128::zero())?;
TX_STATE.save(deps.storage, &TxState::default())?;

Expand Down Expand Up @@ -100,6 +101,7 @@ pub fn query(deps: Deps<NeutronQuery>, env: Env, msg: QueryMsg) -> ContractResul
QueryMsg::LastPuppeteerResponse {} => Ok(to_json_binary(&LastPuppeteerResponse {
response: LAST_PUPPETEER_RESPONSE.may_load(deps.storage)?,
})?),
QueryMsg::Pause {} => Ok(to_json_binary(&PAUSE.load(deps.storage)?)?),
}
}

Expand Down Expand Up @@ -202,9 +204,26 @@ pub fn execute(
ExecuteMsg::Bond {} => execute_bond(deps, info),
ExecuteMsg::ProcessOnIdle {} => execute_process_on_idle(deps, env, info),
ExecuteMsg::PeripheralHook(msg) => execute_puppeteer_hook(deps, env, info, *msg),
ExecuteMsg::SetPause(pause) => execute_set_pause(deps.into_empty(), info, pause),
}
}

fn execute_set_pause(
deps: DepsMut,
info: MessageInfo,
pause: Pause,
) -> ContractResult<Response<NeutronMsg>> {
cw_ownable::assert_owner(deps.storage, &info.sender)?;

PAUSE.save(deps.storage, &pause)?;

Ok(response(
"execute-set-pause",
CONTRACT_NAME,
[("process_on_idle", pause.process_on_idle.to_string())],
))
}

fn execute_update_config(
deps: DepsMut<NeutronQuery>,
info: MessageInfo,
Expand Down Expand Up @@ -288,6 +307,10 @@ fn execute_process_on_idle(
env: Env,
info: MessageInfo,
) -> ContractResult<Response<NeutronMsg>> {
if PAUSE.load(deps.as_ref().storage)?.process_on_idle {
Err(ContractError::PauseError(PauseError::Paused {}))?
}

let config = CONFIG.load(deps.storage)?;
ensure_eq!(
info.sender,
Expand Down
Loading
Loading