From 05748140bcab9dc26d75d2dd003a5466c72c4313 Mon Sep 17 00:00:00 2001 From: codehans <94654388+codehans@users.noreply.github.com> Date: Thu, 25 Apr 2024 16:10:17 +0100 Subject: [PATCH] support multiple target denoms --- README.md | 6 + artifacts/checksums.txt | 2 +- artifacts/kujira_revenue_converter.wasm | Bin 214206 -> 217218 bytes src/contract.rs | 200 ++++++++++++++++++------ src/msg.rs | 4 +- src/state.rs | 8 +- 6 files changed, 162 insertions(+), 58 deletions(-) diff --git a/README.md b/README.md index 51e8db6..67d8b67 100644 --- a/README.md +++ b/README.md @@ -14,3 +14,9 @@ At the end of each execution, `revenue_token` balance is read and is deposited t - code-id `3147` - address `kujira158ydy6qlfq7khtnj5lj9a5dy25ep8hece4d0lqngzxqrwuz6dctsdl5eqx` + +### Mainnet + +- code-id `282` +- `kujira1xajlwpfpjnvwehurrj2w7d8ru6sm4579vzfp44c6fd5sj86u6tvqdk6mjn`: USK target +- `kujira1x97ay4eq7uv7hh59ytdxm3lsz567yz9wrwn74gq7dsspuapqvjtq03tajj`: KUJI target diff --git a/artifacts/checksums.txt b/artifacts/checksums.txt index 4333759..20bd600 100644 --- a/artifacts/checksums.txt +++ b/artifacts/checksums.txt @@ -1 +1 @@ -3e32932f38991ab7fb572aaa0aea4792b6d72ff034b7a9927dfdcd790e8b940b kujira_revenue_converter.wasm +30e7100ba9fe0599593ca45bf9b42efbd0b317ee11e1fa702dfda797d1a2e01a kujira_revenue_converter.wasm diff --git a/artifacts/kujira_revenue_converter.wasm b/artifacts/kujira_revenue_converter.wasm index 51628728b502fa6b443379cb6bb99f750758b526..081d5c38cc5c7c4923d40aedcfb6ea4cd352e5d9 100644 GIT binary patch delta 86332 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

>WLYiJ7*O=G735n#Z~ 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 z

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 lAQqU7CwXo2QiJZPIe3yc#cR?X#5$MX75o Result { +pub fn migrate(deps: DepsMut, _env: Env, msg: InstantiateMsg) -> Result { + cw2::set_contract_version(deps.storage, CONTRACT_NAME, CONTRACT_VERSION)?; + let config = Config::from(msg); + config.save(deps.storage)?; Ok(Response::default()) } @@ -82,25 +85,38 @@ pub fn execute( if info.sender != config.executor { return Err(ContractError::Unauthorized {}); } - - if let Some((action, msg)) = get_action_msg(deps, &env.contract.address)? { - let event = - Event::new("revenue/run").add_attribute("denom", action.denom.to_string()); - return Ok(Response::default() - .add_event(event) - .add_submessage(SubMsg::reply_always(msg, 0))); + let action_msg = get_action_msg(deps.storage, deps.querier, &env.contract.address)?; + + match action_msg { + Some((action, msg)) => { + let event = + Event::new("revenue/run").add_attribute("denom", action.denom.to_string()); + Ok(Response::default() + .add_event(event) + .add_submessage(SubMsg::reply_always(msg, 0))) + } + // If there's no compatible action, skip to the reply + None => { + let mut sends: Vec = vec![]; + for target in config.target_denoms.clone() { + distribute_denom(deps.as_ref(), &env, &config, &mut sends, target)?; + } + + Ok(Response::default().add_messages(sends)) + } } - Ok(Response::default()) } } } -fn get_action_msg(deps: DepsMut, contract: &Addr) -> StdResult> { +fn get_action_msg( + storage: &mut dyn Storage, + querier: QuerierWrapper, + contract: &Addr, +) -> StdResult> { // Fetch the next action in the iterator - if let Some(action) = Action::next(deps.storage)? { - let balance = deps - .querier - .query_balance(contract, action.denom.to_string())?; + if let Some(action) = Action::next(storage)? { + let balance = querier.query_balance(contract, action.denom.to_string())?; return match action.execute(balance)? { None => Ok(None), Some(msg) => Ok(Some((action, msg))), @@ -111,38 +127,17 @@ fn get_action_msg(deps: DepsMut, contract: &Addr) -> StdResult Result { - let config = Config::load(deps.storage)?; - let balance = deps - .querier - .query_balance(env.contract.address, config.target_denom.to_string())?; - let send = if balance.amount.is_zero() { - vec![] - } else { - let total_weight = config.target_addresses.iter().fold(0, |a, e| e.1 + a); - let mut sends = vec![]; - let mut remaining = balance.amount; - let mut targets = config.target_addresses.iter().peekable(); + execute_reply(deps.as_ref(), env) +} - while let Some((addr, weight)) = targets.next() { - let amount = if targets.peek().is_none() { - remaining - } else { - balance - .amount - .mul_floor(Decimal::from_ratio(*weight, total_weight)) - }; - if amount.is_zero() { - continue; - } - remaining -= amount; - sends.push(config.target_denom.send(&addr, &balance.amount)); - } +pub fn execute_reply(deps: Deps, env: Env) -> Result { + let config = Config::load(deps.storage)?; + let mut sends: Vec = vec![]; + for target in config.target_denoms.clone() { + distribute_denom(deps, &env, &config, &mut sends, target)?; + } - sends - }; - Ok(Response::default() - .add_messages(send) - .add_event(Event::new("revenue/reply").add_attribute("send", balance.to_string()))) + Ok(Response::default().add_messages(sends)) } #[cfg_attr(not(feature = "library"), entry_point)] @@ -161,14 +156,48 @@ pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { } } +fn distribute_denom( + deps: Deps, + env: &Env, + config: &Config, + sends: &mut Vec, + denom: Denom, +) -> StdResult<()> { + let balance = deps + .querier + .query_balance(env.contract.address.clone(), denom.to_string())?; + + let total_weight = config.target_addresses.iter().fold(0, |a, e| e.1 + a); + if !balance.amount.is_zero() { + let mut remaining = balance.amount; + let mut targets = config.target_addresses.iter().peekable(); + + while let Some((addr, weight)) = targets.next() { + let amount = if targets.peek().is_none() { + remaining + } else { + let ratio = Decimal::from_ratio(*weight, total_weight); + balance.amount.mul_floor(ratio) + }; + + if amount.is_zero() { + continue; + } + remaining -= amount; + sends.push(denom.send(&addr, &amount)) + } + }; + Ok(()) +} + #[cfg(test)] mod tests { use super::*; use cosmwasm_std::{ - coin, from_json, + coin, coins, from_json, testing::{mock_dependencies, mock_dependencies_with_balances, mock_env, mock_info}, - Uint128, + BankMsg, ReplyOn, Uint128, }; use kujira::fee_address; @@ -178,7 +207,7 @@ mod tests { let info = mock_info("owner", &vec![]); let msg = InstantiateMsg { owner: Addr::unchecked("owner"), - target_denom: Denom::from("ukuji"), + target_denoms: vec![Denom::from("ukuji"), Denom::from("another")], target_addresses: vec![(fee_address(), 1)], executor: Addr::unchecked("executor"), }; @@ -186,7 +215,10 @@ mod tests { let config: ConfigResponse = from_json(query(deps.as_ref(), mock_env(), QueryMsg::Config {}).unwrap()).unwrap(); assert_eq!(config.owner, Addr::unchecked("owner")); - assert_eq!(config.target_denom, Denom::from("ukuji")); + assert_eq!( + config.target_denoms, + vec![Denom::from("ukuji"), Denom::from("another")], + ); let status: StatusResponse = from_json(query(deps.as_ref(), mock_env(), QueryMsg::Status {}).unwrap()).unwrap(); assert_eq!(status.last, None); @@ -200,7 +232,7 @@ mod tests { let info = mock_info("owner", &vec![]); let msg = InstantiateMsg { owner: Addr::unchecked("owner"), - target_denom: Denom::from("ukuji"), + target_denoms: vec![Denom::from("ukuji"), Denom::from("another")], target_addresses: vec![(fee_address(), 1)], executor: Addr::unchecked("executor"), }; @@ -308,7 +340,7 @@ mod tests { let info = mock_info("contract-0", &vec![]); let msg = InstantiateMsg { owner: Addr::unchecked("owner"), - target_denom: Denom::from("ukuji"), + target_denoms: vec![Denom::from("ukuji"), Denom::from("another")], target_addresses: vec![(fee_address(), 1)], executor: Addr::unchecked("executor"), }; @@ -422,4 +454,70 @@ mod tests { ) .unwrap(); } + + #[test] + fn distribution() { + let mut deps = mock_dependencies_with_balances(&[( + "cosmos2contract", + &[coin(1000u128, "ukuji"), coin(2000u128, "another")], + )]); + let info = mock_info("contract-0", &vec![]); + let msg = InstantiateMsg { + owner: Addr::unchecked("owner"), + target_denoms: vec![Denom::from("ukuji"), Denom::from("another")], + target_addresses: vec![(fee_address(), 1), (Addr::unchecked("another"), 3)], + executor: Addr::unchecked("executor"), + }; + instantiate(deps.as_mut(), mock_env(), info.clone(), msg).unwrap(); + // Dummy action to make sure it cranks the reply + set_action(deps.as_mut(), "token-a", "contract-a", Uint128::MAX); + + // Make sure that execution ends when there are no actions + let res = execute( + deps.as_mut(), + mock_env(), + mock_info("executor", &vec![]), + ExecuteMsg::Run {}, + ) + .unwrap(); + + assert!(res.messages.contains(&SubMsg { + id: 0, + msg: CosmosMsg::Bank(BankMsg::Send { + to_address: "kujira17xpfvakm2amg962yls6f84z3kell8c5lp3pcxh".to_string(), + amount: coins(250, "ukuji"), + },), + gas_limit: None, + reply_on: ReplyOn::Never, + })); + assert!(res.messages.contains(&SubMsg { + id: 0, + msg: CosmosMsg::Bank(BankMsg::Send { + to_address: "another".to_string(), + amount: coins(750, "ukuji"), + },), + gas_limit: None, + reply_on: ReplyOn::Never, + })); + + assert!(res.messages.contains(&SubMsg { + id: 0, + msg: CosmosMsg::Bank(BankMsg::Send { + to_address: "kujira17xpfvakm2amg962yls6f84z3kell8c5lp3pcxh".to_string(), + amount: coins(500, "another"), + },), + gas_limit: None, + reply_on: ReplyOn::Never, + })); + + assert!(res.messages.contains(&SubMsg { + id: 0, + msg: CosmosMsg::Bank(BankMsg::Send { + to_address: "another".to_string(), + amount: coins(1500, "another"), + },), + gas_limit: None, + reply_on: ReplyOn::Never, + })); + } } diff --git a/src/msg.rs b/src/msg.rs index bfa5696..c39c136 100644 --- a/src/msg.rs +++ b/src/msg.rs @@ -8,7 +8,7 @@ use crate::state::Action; pub struct InstantiateMsg { pub owner: Addr, pub executor: Addr, - pub target_denom: Denom, + pub target_denoms: Vec, pub target_addresses: Vec<(Addr, u8)>, } @@ -36,7 +36,7 @@ pub enum QueryMsg { pub struct ConfigResponse { pub owner: Addr, pub executor: Addr, - pub target_denom: Denom, + pub target_denoms: Vec, pub target_addresses: Vec<(Addr, u8)>, } diff --git a/src/state.rs b/src/state.rs index aef64bb..49120b2 100644 --- a/src/state.rs +++ b/src/state.rs @@ -20,8 +20,8 @@ pub struct Config { /// The address permitted to execute the crank pub executor: Addr, - /// The denom that is transferred to the fee_collector at the end of every execution - pub target_denom: Denom, + /// The denoms that are transferred to the fee_collector at the end of every execution + pub target_denoms: Vec, /// The final destinations that `target_denom` is sent to (address, weight) pub target_addresses: Vec<(Addr, u8)>, @@ -42,7 +42,7 @@ impl From for Config { Self { owner: value.owner, executor: value.executor, - target_denom: value.target_denom, + target_denoms: value.target_denoms, target_addresses: value.target_addresses, } } @@ -53,7 +53,7 @@ impl From for ConfigResponse { Self { owner: value.owner, executor: value.executor, - target_denom: value.target_denom, + target_denoms: value.target_denoms, target_addresses: value.target_addresses, } }