diff --git a/Cargo.lock b/Cargo.lock index 55c892d..7f3a150 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2508,7 +2508,7 @@ dependencies = [ [[package]] name = "juno-destinations" -version = "0.2.2" +version = "1.0.0" dependencies = [ "balance-token-swap", "bond-router", @@ -2635,7 +2635,7 @@ checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" [[package]] name = "migaloo-destinations" -version = "0.2.2" +version = "1.0.0" dependencies = [ "bond-router", "cosmos-sdk-proto 0.19.0", @@ -2841,7 +2841,7 @@ checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "osmosis-destinations" -version = "0.2.2" +version = "1.0.0" dependencies = [ "bond-router", "cosmos-sdk-proto 0.19.0", @@ -2864,7 +2864,7 @@ dependencies = [ [[package]] name = "osmosis-helpers" -version = "0.2.2" +version = "1.0.0" dependencies = [ "cosmos-sdk-proto 0.19.0", "cosmwasm-schema", @@ -2982,7 +2982,7 @@ dependencies = [ [[package]] name = "outpost-utils" -version = "0.2.2" +version = "1.0.0" dependencies = [ "cosmos-sdk-proto 0.19.0", "cosmwasm-schema", @@ -3596,7 +3596,7 @@ checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" [[package]] name = "sail-destinations" -version = "0.2.2" +version = "1.0.0" dependencies = [ "astroport", "bond-router", @@ -4316,7 +4316,7 @@ dependencies = [ [[package]] name = "terraswap-helpers" -version = "0.2.2" +version = "1.0.0" dependencies = [ "cosmos-sdk-proto 0.19.0", "cosmwasm-schema", @@ -4730,7 +4730,7 @@ checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" [[package]] name = "universal-destinations" -version = "0.2.2" +version = "1.0.0" dependencies = [ "cosmos-sdk-proto 0.19.0", "cosmwasm-schema", @@ -5151,7 +5151,7 @@ dependencies = [ [[package]] name = "wynd-helpers" -version = "0.2.2" +version = "1.0.0" dependencies = [ "cosmos-sdk-proto 0.19.0", "cosmwasm-schema", @@ -5326,7 +5326,7 @@ dependencies = [ [[package]] name = "ymos-comp-prefs" -version = "0.2.2" +version = "1.0.0" dependencies = [ "cosmwasm-schema", "cosmwasm-std", @@ -5343,7 +5343,7 @@ dependencies = [ [[package]] name = "ymos-junodca-outpost" -version = "0.2.2" +version = "1.0.0" dependencies = [ "balance-token-swap", "bond-router", @@ -5377,7 +5377,7 @@ dependencies = [ [[package]] name = "ymos-junostake-outpost" -version = "0.2.2" +version = "1.0.0" dependencies = [ "balance-token-swap", "bond-router", @@ -5412,7 +5412,7 @@ dependencies = [ [[package]] name = "ymos-junowwmarket-outpost" -version = "0.2.2" +version = "1.0.0" dependencies = [ "balance-token-swap", "bond-router", @@ -5447,7 +5447,7 @@ dependencies = [ [[package]] name = "ymos-migaloodca-outpost" -version = "0.2.2" +version = "0.1.0" dependencies = [ "cosmos-sdk-proto 0.19.0", "cosmwasm-schema", @@ -5476,7 +5476,7 @@ dependencies = [ [[package]] name = "ymos-migaloostake-outpost" -version = "0.2.2" +version = "0.1.0" dependencies = [ "cosmos-sdk-proto 0.19.0", "cosmwasm-schema", @@ -5505,7 +5505,7 @@ dependencies = [ [[package]] name = "ymos-osmodca-outpost" -version = "0.2.2" +version = "1.0.0" dependencies = [ "cosmos-sdk-proto 0.19.0", "cosmwasm-schema", @@ -5539,7 +5539,7 @@ dependencies = [ [[package]] name = "ymos-osmostake-outpost" -version = "0.2.2" +version = "1.0.0" dependencies = [ "cosmos-sdk-proto 0.19.0", "cosmwasm-schema", @@ -5574,7 +5574,7 @@ dependencies = [ [[package]] name = "ymos-wyndstake-outpost" -version = "0.2.2" +version = "1.0.0" dependencies = [ "balance-token-swap", "bond-router", diff --git a/contracts/comp_prefs/Cargo.toml b/contracts/comp_prefs/Cargo.toml index ad7b5fa..68b586e 100644 --- a/contracts/comp_prefs/Cargo.toml +++ b/contracts/comp_prefs/Cargo.toml @@ -1,8 +1,8 @@ [package] name = "ymos-comp-prefs" authors = ["Marc "] -version = { workspace = true } -edition = { workspace = true } +version = "1.0.0" +edition = "2021" description = "Yieldmos Compounding Prefs Store" exclude = [ diff --git a/contracts/comp_prefs/src/contract.rs b/contracts/comp_prefs/src/contract.rs index 8c2d6f0..1b73b43 100644 --- a/contracts/comp_prefs/src/contract.rs +++ b/contracts/comp_prefs/src/contract.rs @@ -289,7 +289,10 @@ pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> Result { + QueryMsg::StrategyPreferencesByPubkey { + pubkey: _, + status: _, + } => { let user_prefs: Vec = vec![]; // look up the pubkey in state // PREFS_BY_PUBKEY.prefix(&pubkey.as_str()).range(deps.storage, None, None, Order::Ascending).filter_map(|strat_keys| diff --git a/contracts/comp_prefs/src/tests/integration_tests.rs b/contracts/comp_prefs/src/tests/integration_tests.rs index ee1f944..62826aa 100644 --- a/contracts/comp_prefs/src/tests/integration_tests.rs +++ b/contracts/comp_prefs/src/tests/integration_tests.rs @@ -5,10 +5,9 @@ use crate::{ CompPref, CompoundingFrequency, EndType, InactiveStatus, StoreSettings, UnverifiedUserCompPref, UserCompPref, }, - ContractError, }; use cosmwasm_schema::cw_serde; -use cosmwasm_std::{to_json_binary, Addr, Decimal, StdError, Timestamp, Uint64}; +use cosmwasm_std::{to_json_binary, Addr, Decimal, Timestamp, Uint64}; use cw_orch::{anyhow, prelude::*}; #[cw_serde] diff --git a/contracts/junodca/Cargo.toml b/contracts/junodca/Cargo.toml index 42037a4..08b1ae1 100644 --- a/contracts/junodca/Cargo.toml +++ b/contracts/junodca/Cargo.toml @@ -1,8 +1,8 @@ [package] name = "ymos-junodca-outpost" authors = ["Marc "] -version = { workspace = true } -edition = { workspace = true } +version = "1.0.0" +edition = "2021" description = "Yieldmos Juno DCAing Outpost" exclude = [ diff --git a/contracts/junodca/src/execute.rs b/contracts/junodca/src/execute.rs index e57bc9c..90d697e 100644 --- a/contracts/junodca/src/execute.rs +++ b/contracts/junodca/src/execute.rs @@ -1,22 +1,23 @@ use std::iter; use cosmwasm_std::{Addr, Attribute, Decimal, Deps, DepsMut, Env, Event, MessageInfo, Response, SubMsg}; +use juno_destinations::comp_prefs::{JunoCompPrefs, JunoDestinationProject, StakingDao}; +use juno_destinations::dest_project_gen::{ + balance_dao_msgs, gelotto_lottery_msgs, mint_juno_lsd_msgs, racoon_bet_msgs, send_tokens_msgs, wynd_staking_msgs, +}; use outpost_utils::{ comp_prefs::DestinationAction, helpers::{ calc_additional_tax_split, calculate_compound_amounts, is_authorized_compounder, prefs_sum_to_one, DestProjectMsgs, TaxSplitResult, }, - msg_gen::create_exec_msg, }; +use sail_destinations::dest_project_gen::{spark_ibc_msgs, white_whale_satellite_msgs}; use terraswap_helpers::terraswap_swap::create_terraswap_swap_msg_with_simulation; +use universal_destinations::dest_project_gen::{daodao_cw20_staking_msg, native_staking_msg}; use wynd_helpers::wynd_swap::{create_wyndex_swap_msg_with_simulation, simulate_and_swap_wynd_pair, wynd_pair_swap_msg}; use wyndex::asset::{Asset, AssetInfo}; -use juno_destinations::comp_prefs::{JunoCompPrefs, JunoDestinationProject, StakingDao}; -use juno_destinations::dest_project_gen::{balance_dao_msgs, gelotto_lottery_msgs, mint_juno_lsd_msgs, racoon_bet_msgs, send_tokens_msgs, wynd_staking_msgs}; -use sail_destinations::dest_project_gen::{spark_ibc_msgs, white_whale_satellite_msgs}; -use universal_destinations::dest_project_gen::{daodao_cw20_staking_msg, native_staking_msg}; use crate::{ msg::{ContractAddrs, DcaPrefs}, @@ -167,9 +168,11 @@ pub fn prefs_to_msgs( if let StakingDao::Kleomedes = dao { let mut noop_resp = DestProjectMsgs::default(); - noop_resp.events.push(Event::new("dao_stake") - .add_attribute("dao", dao.to_string()) - .add_attribute("status", "disabled")); + noop_resp.events.push( + Event::new("dao_stake") + .add_attribute("dao", dao.to_string()) + .add_attribute("status", "disabled"), + ); return Ok(noop_resp); } @@ -197,7 +200,7 @@ pub fn prefs_to_msgs( AssetInfo::Native(dca_denom.clone()), AssetInfo::Token(dao_addresses.cw20.to_string()), project_addrs.destination_projects.wynd.multihop.to_string(), - None + None, )? }; @@ -249,14 +252,7 @@ pub fn prefs_to_msgs( sub_msgs: vec![], events: vec![], }), - JunoDestinationProject::WyndLp { - .. - // contract_address, - // bonding_period, - } => { - - Ok(DestProjectMsgs::default()) - } + JunoDestinationProject::WyndLp { .. } => Ok(DestProjectMsgs::default()), JunoDestinationProject::GelottoLottery { lottery, lucky_phrase } => Ok(gelotto_lottery_msgs( user_addr, project_addrs.take_rate_addr.clone(), @@ -277,7 +273,10 @@ pub fn prefs_to_msgs( &project_addrs.destination_projects.racoon_bet.game, )?), JunoDestinationProject::WhiteWhaleSatellite { asset } => { - let (swap_ops, denom) = project_addrs.destination_projects.white_whale.get_juno_swap_operations(asset)?; + let (swap_ops, denom) = project_addrs + .destination_projects + .white_whale + .get_juno_swap_operations(asset)?; let (swap_msgs, sim) = create_terraswap_swap_msg_with_simulation( &deps.querier, @@ -322,7 +321,8 @@ pub fn prefs_to_msgs( comp_token_amount, compounding_asset.info, project_addrs.usdc.clone(), - project_addrs.destination_projects.wynd.multihop.to_string(),None + project_addrs.destination_projects.wynd.multihop.to_string(), + None, )?; let mut spark_msgs = spark_ibc_msgs( @@ -349,7 +349,8 @@ pub fn prefs_to_msgs( comp_token_amount, AssetInfo::Native(dca_denom.clone()), target_asset.clone(), - project_addrs.destination_projects.wynd.multihop.to_string(),None + project_addrs.destination_projects.wynd.multihop.to_string(), + None, ) .map_err(ContractError::Std)?; @@ -369,7 +370,6 @@ pub fn prefs_to_msgs( } JunoDestinationProject::Unallocated {} => Ok(DestProjectMsgs::default()), } - }, ) .collect::, ContractError>>()?; diff --git a/contracts/junodca/src/msg.rs b/contracts/junodca/src/msg.rs index e216400..ba74e69 100644 --- a/contracts/junodca/src/msg.rs +++ b/contracts/junodca/src/msg.rs @@ -94,22 +94,13 @@ pub struct ContractAddresses { #[cw_serde] #[derive(Default)] -pub struct AuthzppAddresses { - // pub withdraw_tax: String, - // pub allowlist_send: String, -} +pub struct AuthzppAddresses {} #[cw_serde] -pub struct AuthzppAddrs { - // pub withdraw_tax: Addr, - // pub allowlist_send: Addr, -} +pub struct AuthzppAddrs {} impl AuthzppAddresses { pub fn validate_addrs(&self, _api: &dyn Api) -> Result { - Ok(AuthzppAddrs { - // withdraw_tax: api.addr_validate(&self.withdraw_tax)?, - // allowlist_send: api.addr_validate(&self.allowlist_send)?, - }) + Ok(AuthzppAddrs {}) } } diff --git a/contracts/junodca/src/tests/integration_tests.rs b/contracts/junodca/src/tests/integration_tests.rs index 2c09e2a..e39d245 100644 --- a/contracts/junodca/src/tests/integration_tests.rs +++ b/contracts/junodca/src/tests/integration_tests.rs @@ -13,166 +13,166 @@ fn auctioning_contract() -> Box> { Box::new(contract) } -#[test] -fn instantiate_with_defaults() { - let sender = Addr::unchecked("sender"); - - let mut app = App::new(|_router, _api, _storage| { - // router.bank - // .init_balance(storage, &sender, coins(100_000, "ubtc")) - // .unwrap(); - }); - - let contract_id = app.store_code(auctioning_contract()); - - let _contract = OutpostContract::instantiate( - &mut app, - contract_id, - &sender, - None, - "Test Outpost", - // &coins(100_000, "ubtc"), - &InstantiateMsg { - admin: None, - project_addresses: ContractAddresses { - take_rate_addr: "".to_string(), - usdc: wyndex::asset::AssetInfo::Native("".to_string()), - authzpp: AuthzppAddresses::default(), - destination_projects: DestinationProjectAddresses::default(), - }, - }, - ) - .unwrap(); - - assert_eq!(app.wrap().query_all_balances(&sender).unwrap(), &[]) -} - -#[test] -fn validator_only_compounding() { - let contract_admin_addr = Addr::unchecked("admin_wallet"); - let delegator_addr = Addr::unchecked("delegator_wallet"); - let start_validator_addr = Addr::unchecked("validator_1"); - let end_validator_addr = Addr::unchecked("validator_2"); - - let mut app = App::new(|router, api, storage| { - router - .bank - .init_balance(storage, &delegator_addr, coins(100_000, "ubtc")) - .unwrap(); - - router - .staking - .setup( - storage, - StakingInfo { - bonded_denom: "ubtc".to_string(), - unbonding_time: 10u64, - apr: Decimal::percent(1000), - }, - ) - .unwrap(); - - router - .staking - .add_validator( - api, - storage, - &mock_env().block, - Validator { - address: start_validator_addr.to_string(), - commission: Decimal::one(), - max_commission: Decimal::one(), - max_change_rate: Decimal::one(), - }, - ) - .unwrap(); - - router - .staking - .add_validator( - api, - storage, - &mock_env().block, - Validator { - address: end_validator_addr.to_string(), - commission: Decimal::one(), - max_commission: Decimal::one(), - max_change_rate: Decimal::one(), - }, - ) - .unwrap(); - }); - - let contract_id = app.store_code(auctioning_contract()); - - let _contract = OutpostContract::instantiate( - &mut app, - contract_id, - &contract_admin_addr, - None, - "Test Outpost", - &InstantiateMsg { - admin: None, - project_addresses: ContractAddresses { - take_rate_addr: "".to_string(), - usdc: wyndex::asset::AssetInfo::Native("".to_string()), - authzpp: AuthzppAddresses::default(), - destination_projects: DestinationProjectAddresses::default(), - }, - }, - ) - .unwrap(); - - app.execute_multi( - delegator_addr.clone(), - vec![ - CosmosMsg::Staking(cosmwasm_std::StakingMsg::Delegate { - validator: start_validator_addr.to_string(), - amount: coin(100_000, "ubtc"), - }), - // create_generic_grant_msg( - // delegator_addr.to_string(), - // &contract.addr(), - // GenericAuthorizationType::Delegation, - // ), - // create_generic_grant_msg( - // delegator_addr.to_string(), - // &contract.addr(), - // GenericAuthorizationType::WithdrawDelegatorRewards, - // ), - ], - ) - .unwrap(); - - assert_eq!(app.wrap().query_all_balances(&delegator_addr).unwrap(), &[]); - assert_eq!( - app.wrap().query_all_delegations(delegator_addr.clone()).unwrap(), - vec![Delegation { - delegator: delegator_addr.clone(), - validator: start_validator_addr.to_string(), - amount: coin(100_000, "ubtc".to_string()) - }] - ); - - app.update_block(next_block); - - // let err = contract - // .compound_funds( - // &mut app, - // &delegator_addr.clone(), - // CompoundPrefs { - // relative: vec![DestinationAction { - // destination: DestinationProject::JunoStaking { - // validator_address: end_validator_addr.to_string(), - // }, - // amount: RelativeQty { - // quantity: 1_000_000_000_000_000_000u128.into(), - // }, - // }], - // }, - // delegator_addr.to_string(), - // ) - // .unwrap_err(); - - // println!("{}", err) -} +// #[test] +// fn instantiate_with_defaults() { +// let sender = Addr::unchecked("sender"); + +// let mut app = App::new(|_router, _api, _storage| { +// // router.bank +// // .init_balance(storage, &sender, coins(100_000, "ubtc")) +// // .unwrap(); +// }); + +// let contract_id = app.store_code(auctioning_contract()); + +// let _contract = OutpostContract::instantiate( +// &mut app, +// contract_id, +// &sender, +// None, +// "Test Outpost", +// // &coins(100_000, "ubtc"), +// &InstantiateMsg { +// admin: None, +// project_addresses: ContractAddresses { +// take_rate_addr: "take_rate_addr".to_string(), +// usdc: wyndex::asset::AssetInfo::Native("".to_string()), +// authzpp: AuthzppAddresses::default(), +// destination_projects: DestinationProjectAddresses::default(), +// }, +// }, +// ) +// .unwrap(); + +// assert_eq!(app.wrap().query_all_balances(&sender).unwrap(), &[]) +// } + +// #[test] +// fn validator_only_compounding() { +// let contract_admin_addr = Addr::unchecked("admin_wallet"); +// let delegator_addr = Addr::unchecked("delegator_wallet"); +// let start_validator_addr = Addr::unchecked("validator_1"); +// let end_validator_addr = Addr::unchecked("validator_2"); + +// let mut app = App::new(|router, api, storage| { +// router +// .bank +// .init_balance(storage, &delegator_addr, coins(100_000, "ubtc")) +// .unwrap(); + +// router +// .staking +// .setup( +// storage, +// StakingInfo { +// bonded_denom: "ubtc".to_string(), +// unbonding_time: 10u64, +// apr: Decimal::percent(1000), +// }, +// ) +// .unwrap(); + +// router +// .staking +// .add_validator( +// api, +// storage, +// &mock_env().block, +// Validator { +// address: start_validator_addr.to_string(), +// commission: Decimal::one(), +// max_commission: Decimal::one(), +// max_change_rate: Decimal::one(), +// }, +// ) +// .unwrap(); + +// router +// .staking +// .add_validator( +// api, +// storage, +// &mock_env().block, +// Validator { +// address: end_validator_addr.to_string(), +// commission: Decimal::one(), +// max_commission: Decimal::one(), +// max_change_rate: Decimal::one(), +// }, +// ) +// .unwrap(); +// }); + +// let contract_id = app.store_code(auctioning_contract()); + +// let _contract = OutpostContract::instantiate( +// &mut app, +// contract_id, +// &contract_admin_addr, +// None, +// "Test Outpost", +// &InstantiateMsg { +// admin: None, +// project_addresses: ContractAddresses { +// take_rate_addr: "".to_string(), +// usdc: wyndex::asset::AssetInfo::Native("".to_string()), +// authzpp: AuthzppAddresses::default(), +// destination_projects: DestinationProjectAddresses::default(), +// }, +// }, +// ) +// .unwrap(); + +// app.execute_multi( +// delegator_addr.clone(), +// vec![ +// CosmosMsg::Staking(cosmwasm_std::StakingMsg::Delegate { +// validator: start_validator_addr.to_string(), +// amount: coin(100_000, "ubtc"), +// }), +// // create_generic_grant_msg( +// // delegator_addr.to_string(), +// // &contract.addr(), +// // GenericAuthorizationType::Delegation, +// // ), +// // create_generic_grant_msg( +// // delegator_addr.to_string(), +// // &contract.addr(), +// // GenericAuthorizationType::WithdrawDelegatorRewards, +// // ), +// ], +// ) +// .unwrap(); + +// assert_eq!(app.wrap().query_all_balances(&delegator_addr).unwrap(), &[]); +// assert_eq!( +// app.wrap().query_all_delegations(delegator_addr.clone()).unwrap(), +// vec![Delegation { +// delegator: delegator_addr.clone(), +// validator: start_validator_addr.to_string(), +// amount: coin(100_000, "ubtc".to_string()) +// }] +// ); + +// app.update_block(next_block); + +// // let err = contract +// // .compound_funds( +// // &mut app, +// // &delegator_addr.clone(), +// // CompoundPrefs { +// // relative: vec![DestinationAction { +// // destination: DestinationProject::JunoStaking { +// // validator_address: end_validator_addr.to_string(), +// // }, +// // amount: RelativeQty { +// // quantity: 1_000_000_000_000_000_000u128.into(), +// // }, +// // }], +// // }, +// // delegator_addr.to_string(), +// // ) +// // .unwrap_err(); + +// // println!("{}", err) +// } diff --git a/contracts/junostake/Cargo.toml b/contracts/junostake/Cargo.toml index 33f22b1..b6de6e7 100644 --- a/contracts/junostake/Cargo.toml +++ b/contracts/junostake/Cargo.toml @@ -1,8 +1,8 @@ [package] name = "ymos-junostake-outpost" authors = ["Marc "] -version = { workspace = true } -edition = { workspace = true } +version = "1.0.0" +edition = "2021" description = "Yieldmos Juno Staking Outpost" exclude = [ @@ -38,9 +38,9 @@ interface = ["dep:cw-orch"] withdraw-rewards-tax-grant = { workspace = true } cosmwasm-schema = { workspace = true } cosmwasm-std = { workspace = true, features = [ - "stargate", - "staking", - "cosmwasm_1_4", + "stargate", + "staking", + "cosmwasm_1_4", ] } cosmwasm-storage = { workspace = true } cw-storage-plus = { workspace = true } diff --git a/contracts/junostake/src/error.rs b/contracts/junostake/src/error.rs index 9ce5fd0..469d40f 100644 --- a/contracts/junostake/src/error.rs +++ b/contracts/junostake/src/error.rs @@ -15,7 +15,6 @@ pub enum ContractError { #[error("Wynd Helper Error: &{0}")] WyndHelperError(#[from] wynd_helpers::errors::WyndHelperError), - #[error("Juno Destinations Error: &{0}")] JunoDestinationError(#[from] juno_destinations::errors::JunoDestinationError), diff --git a/contracts/junostake/src/execute.rs b/contracts/junostake/src/execute.rs index e85c066..89e2a7c 100644 --- a/contracts/junostake/src/execute.rs +++ b/contracts/junostake/src/execute.rs @@ -2,7 +2,6 @@ use cosmwasm_std::{Addr, Attribute, Decimal, Deps, DepsMut, Env, Event, MessageI use outpost_utils::{ comp_prefs::DestinationAction, helpers::{calculate_compound_amounts, is_authorized_compounder, prefs_sum_to_one, sum_coins, DestProjectMsgs}, - msg_gen::create_exec_msg, }; use std::iter; @@ -15,12 +14,14 @@ use crate::{ state::{ADMIN, AUTHORIZED_ADDRS}, ContractError, }; -use wynd_helpers::wynd_swap::{create_wyndex_swap_msg_with_simulation, simulate_and_swap_wynd_pair, wynd_pair_swap_msg}; -use wyndex::asset::{Asset, AssetInfo}; use juno_destinations::comp_prefs::{JunoCompPrefs, JunoDestinationProject, StakingDao}; -use juno_destinations::dest_project_gen::{balance_dao_msgs, gelotto_lottery_msgs, mint_juno_lsd_msgs, racoon_bet_msgs, send_tokens_msgs, wynd_staking_msgs}; +use juno_destinations::dest_project_gen::{ + balance_dao_msgs, gelotto_lottery_msgs, mint_juno_lsd_msgs, racoon_bet_msgs, send_tokens_msgs, wynd_staking_msgs, +}; use sail_destinations::dest_project_gen::{spark_ibc_msgs, white_whale_satellite_msgs}; use universal_destinations::dest_project_gen::{daodao_cw20_staking_msg, native_staking_msg}; +use wynd_helpers::wynd_swap::{create_wyndex_swap_msg_with_simulation, simulate_and_swap_wynd_pair, wynd_pair_swap_msg}; +use wyndex::asset::{Asset, AssetInfo}; pub fn compound( deps: DepsMut, @@ -158,13 +159,15 @@ pub fn prefs_to_msgs( if let StakingDao::Kleomedes = dao { let mut noop_resp = DestProjectMsgs::default(); - noop_resp.events.push(Event::new("dao_stake") - .add_attribute("dao", dao.to_string()) - .add_attribute("status", "disabled")); + noop_resp.events.push( + Event::new("dao_stake") + .add_attribute("dao", dao.to_string()) + .add_attribute("status", "disabled"), + ); return Ok(noop_resp); } - + let dao_addresses = dao.get_daos_addresses(&project_addrs.destination_projects.daos); let (swap_msgs, expected_dao_token_amount) = if let Some(pair_addr) = dao_addresses.juno_wyndex_pair @@ -188,7 +191,7 @@ pub fn prefs_to_msgs( AssetInfo::Native("ujuno".to_string()), AssetInfo::Token(dao_addresses.cw20.to_string()), project_addrs.destination_projects.wynd.multihop.to_string(), - None + None, )? }; @@ -240,14 +243,7 @@ pub fn prefs_to_msgs( sub_msgs: vec![], events: vec![], }), - JunoDestinationProject::WyndLp { - .. - // contract_address, - // bonding_period, - } => { - - Ok(DestProjectMsgs::default()) - } + JunoDestinationProject::WyndLp { .. } => Ok(DestProjectMsgs::default()), JunoDestinationProject::GelottoLottery { lottery, lucky_phrase } => Ok(gelotto_lottery_msgs( delegator_addr, project_addrs.take_rate_addr.clone(), @@ -268,7 +264,10 @@ pub fn prefs_to_msgs( &project_addrs.destination_projects.racoon_bet.game, )?), JunoDestinationProject::WhiteWhaleSatellite { asset } => { - let (swap_ops, denom) = project_addrs.destination_projects.white_whale.get_juno_swap_operations(asset)?; + let (swap_ops, denom) = project_addrs + .destination_projects + .white_whale + .get_juno_swap_operations(asset)?; let (swap_msgs, sim) = create_terraswap_swap_msg_with_simulation( &deps.querier, @@ -342,7 +341,7 @@ pub fn prefs_to_msgs( AssetInfo::Native("ujuno".to_string()), target_asset.clone(), project_addrs.destination_projects.wynd.multihop.to_string(), - None + None, ) .map_err(ContractError::Std)?; @@ -362,7 +361,6 @@ pub fn prefs_to_msgs( } JunoDestinationProject::Unallocated {} => Ok(DestProjectMsgs::default()), } - }, ) .collect::, ContractError>>()?; diff --git a/contracts/junostake/src/msg.rs b/contracts/junostake/src/msg.rs index 9518c8f..87340a4 100644 --- a/contracts/junostake/src/msg.rs +++ b/contracts/junostake/src/msg.rs @@ -109,19 +109,16 @@ impl ContractAddresses { #[derive(Default)] pub struct AuthzppAddresses { pub withdraw_tax: String, - // pub allowlist_send: String, } #[cw_serde] pub struct AuthzppAddrs { pub withdraw_tax: Addr, - // pub allowlist_send: Addr, } impl AuthzppAddresses { pub fn validate_addrs(&self, api: &dyn Api) -> Result { Ok(AuthzppAddrs { withdraw_tax: api.addr_validate(&self.withdraw_tax)?, - // allowlist_send: api.addr_validate(&self.allowlist_send)?, }) } } diff --git a/contracts/junostake/src/queries.rs b/contracts/junostake/src/queries.rs index e3e57de..16a6cb9 100644 --- a/contracts/junostake/src/queries.rs +++ b/contracts/junostake/src/queries.rs @@ -1,8 +1,6 @@ use cosmwasm_std::{Addr, Decimal, Deps, QuerierWrapper, StdResult, Timestamp, Uint128}; use cw_grant_spec::grantable_trait::{dedupe_grant_reqs, GrantStructure, Grantable}; -use cw_grant_spec::grants::{ - ContractExecutionAuthorizationLimit, GrantBase, GrantRequirement, RevokeRequirement, -}; +use cw_grant_spec::grants::{ContractExecutionAuthorizationLimit, GrantBase, GrantRequirement, RevokeRequirement}; use juno_destinations::comp_prefs::{wyndex_asset_info_to_terraswap_asset_info, DaoAddr, JunoDestinationProject, JunoLsd}; use juno_destinations::grants::{balance_dao_grant, gelotto_lottery_grant, wyndao_staking_grant}; diff --git a/contracts/junostake/src/tests/integration_tests.rs b/contracts/junostake/src/tests/integration_tests.rs index 5d53e83..dcc08ad 100644 --- a/contracts/junostake/src/tests/integration_tests.rs +++ b/contracts/junostake/src/tests/integration_tests.rs @@ -1,6 +1,11 @@ use cosmwasm_std::{coin, coins, testing::mock_env, Addr, CosmosMsg, Decimal, Delegation, Empty, Validator}; use cw_multi_test::{next_block, App, Contract, ContractWrapper, StakingInfo}; -use juno_destinations::comp_prefs::DestinationProjectAddresses; +use juno_destinations::comp_prefs::{ + DaoAddress, DaoAddresses, DestinationProjectAddresses, GelottoAddresses, JunoLsdAddresses, RacoonBetAddresses, + SparkIbcAddresses, WhiteWhaleSatelliteAddresses, WyndAddresses, +}; + +use white_whale::pool_network::{asset::AssetInfo as WWAssetInfo, router::SwapOperation}; use crate::{ contract::{execute, instantiate, query}, @@ -32,15 +37,224 @@ fn instantiate_with_defaults() { &sender, None, "Test Outpost", - // &coins(100_000, "ubtc"), &InstantiateMsg { admin: None, project_addresses: ContractAddresses { - staking_denom: "ubtc".to_string(), - take_rate_addr: "".to_string(), - usdc: wyndex::asset::AssetInfo::Native("".to_string()), - authzpp: AuthzppAddresses::default(), - destination_projects: DestinationProjectAddresses::default(), + staking_denom: "ujuno".to_string(), + take_rate_addr: "juno1takerateaddr".to_string(), + usdc: wyndex::asset::AssetInfo::Native( + "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034".to_string(), + ), + authzpp: AuthzppAddresses { + withdraw_tax: "juno1nak433pjd39et4g6jjclxk7yfmtfsd5m43su04rxe9ggttdvjwpqsumv30".to_string(), + }, + destination_projects: DestinationProjectAddresses { + wynd: WyndAddresses { + cw20: "juno1mkw83sv6c7sjdvsaplrzc8yaes9l42p4mhy0ssuxjnyzl87c9eps7ce3m9".to_string(), + multihop: "juno1pctfpv9k03v0ff538pz8kkw5ujlptntzkwjg6c0lrtqv87s9k28qdtl50w".to_string(), + juno_wynd_pair: "juno1a7lmc8e04hcs4y2275cultvg83u636ult4pmnwktr6l9nhrh2e8qzxfdwf".to_string(), + wynd_usdc_pair: "juno18zk9xqj9xjm0ry39jjam8qsysj7qh49xwt4qdfp9lgtrk08sd58s2n54ve".to_string(), + }, + gelotto: GelottoAddresses { + pick3_contract: "juno1v466lyrhsflkt9anxt4wyx7mtw8w2uyk0qxkqskqfj90rmwhph7s0dxvga".to_string(), + pick4_contract: "juno16xy5m05z6n4vnfzcf8cvd3anxhg4g2k8vvr4q2knv4akynfstr9qjmhdhs".to_string(), + pick5_contract: "juno1txn3kejj4qrehua9vlg3hk4wunqafqunfy83cz5hg2xa3z3pkgssk4tzu4".to_string(), + }, + daos: DaoAddresses { + neta: DaoAddress { + cw20: "juno168ctmpyppk90d34p3jjy658zf5a5l3w8wk35wht6ccqj4mr0yv8s4j5awr".to_string(), + staking: "juno1a7x8aj7k38vnj9edrlymkerhrl5d4ud3makmqhx6vt3dhu0d824qh038zh".to_string(), + juno_wyndex_pair: Some( + "juno1h6x5jlvn6jhpnu63ufe4sgv4utyk8hsfl5rqnrpg2cvp6ccuq4lqwqnzra".to_string(), + ), + wynd_wyndex_pair: None, + }, + signal: DaoAddress { + cw20: "juno14lycavan8gvpjn97aapzvwmsj8kyrvf644p05r0hu79namyj3ens87650k".to_string(), + staking: "juno1v0km8gytmzpmtnwv8mpx26kctt5szuzudhg209fxee57yh9u2cvs88rn7p".to_string(), + juno_wyndex_pair: Some( + "juno1p3eed298qx3nyhs3grld07jrf9vjsjsmdd2kmmh3crk87emjcx5stp409y".to_string(), + ), + wynd_wyndex_pair: None, + }, + posthuman: DaoAddress { + cw20: "juno1rws84uz7969aaa7pej303udhlkt3j9ca0l3egpcae98jwak9quzq8szn2l".to_string(), + staking: "juno1jktfdt5g2d0fguvy8r8pl4gly7wps8phkwy08z6upc4nazkumrwq7lj0vn".to_string(), + juno_wyndex_pair: Some( + "juno17jv00cm4f3twr548jzayu57g9txvd4zdh54mdg9qpjs7samlphjsykylsq".to_string(), + ), + wynd_wyndex_pair: None, + }, + kleomedes: DaoAddress { + cw20: "juno10gthz5ufgrpuk5cscve2f0hjp56wgp90psqxcrqlg4m9mcu9dh8q4864xy".to_string(), + staking: "juno1zqp6uh3eg09s0h24rkwukkkg3pch49g0ndc53z9l8wrvh9dhf4nsj0ur49".to_string(), + juno_wyndex_pair: Some( + "juno1dpqgt3ja2kdxs94ltjw9ncdsexts9e3dx5qpnl20zvgdguzjelhqstf8zg".to_string(), + ), + wynd_wyndex_pair: None, + }, + cannalabs: DaoAddress { + cw20: "juno1vn38rzq0wc7zczp4dhy0h5y5kxh2jjzeahwe30c9cc6dw3lkyk5qn5rmfa".to_string(), + staking: "juno1066vq5g9qdprhgjst444rgf0zknhlqwmdnm7xyqhprt9whctzzxqdx90lu".to_string(), + juno_wyndex_pair: Some( + "juno17ckp36lmgtt7jtuggdv2j39eh4alcnl35szu6quh747nujags07swwq0nh".to_string(), + ), + wynd_wyndex_pair: Some( + "juno1ls5un4a8zyn4f05k0ekq5aa9uhn88y8362ww38elqfpcwllme0jqelamke".to_string(), + ), + }, + muse: DaoAddress { + cw20: "juno1p8x807f6h222ur0vssqy3qk6mcpa40gw2pchquz5atl935t7kvyq894ne3".to_string(), + staking: "juno17gdhjxt2d5mhx6paxc85g4pr5myew8pq0lm7usdsavsfk34ldrsqqhtafc".to_string(), + juno_wyndex_pair: Some( + "juno1rcssjyqgr6vzalss77d43v30c2qpyzzg607ua8gte2shqgtvu24sg8gs8r".to_string(), + ), + wynd_wyndex_pair: None, + }, + }, + spark_ibc: SparkIbcAddresses { + fund: "juno1a6rna5tcl6p97rze6hnd5ug35kadqhudvr5f4mtr6s0yd5mruhss8gzrdy".to_string(), + }, + balance_dao: "juno1ve7y09kvvnjk0yc2ycaq0y9thq5tct5ve6c0a5hfkt0h4jfy936qxtne5s".to_string(), + white_whale: WhiteWhaleSatelliteAddresses { + amp_whale: "ibc/2F7C2A3D5D42553ED46F57D8B0DE3733B1B5FF571E2C6A051D34525904B4C0AF".to_string(), + bone_whale: "ibc/01BAE2E69D02670B22758FBA74E4114B6E88FC1878936C919DA345E6C6C92ABF".to_string(), + market: "juno1n8slcc79dmwuzdxhsesvhcncaqfg9h4czdm5t5ey8x25ajmn3xzqyde4wv".to_string(), + rewards: "juno184ghwgprva7dlr2hwhzgvt6mem6zx78fygk0cpw7klssmzyf67tqdtwt3h".to_string(), + juno_amp_whale_path: vec![ + // swap juno for usdc + SwapOperation::TerraSwap { + offer_asset_info: WWAssetInfo::NativeToken { + denom: "ujuno".to_string(), + }, + + ask_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034" + .to_string(), + }, + }, + // usdc to whale + SwapOperation::TerraSwap { + offer_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034" + .to_string(), + }, + ask_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C" + .to_string(), + }, + }, + // whale to ampwhale + SwapOperation::TerraSwap { + offer_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C" + .to_string(), + }, + ask_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/2F7C2A3D5D42553ED46F57D8B0DE3733B1B5FF571E2C6A051D34525904B4C0AF" + .to_string(), + }, + }, + ], + juno_bone_whale_path: vec![ + // swap juno for usdc + SwapOperation::TerraSwap { + offer_asset_info: WWAssetInfo::NativeToken { + denom: "ujuno".to_string(), + }, + ask_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034" + .to_string(), + }, + }, + // usdc to whale + SwapOperation::TerraSwap { + offer_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034" + .to_string(), + }, + ask_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C" + .to_string(), + }, + }, + // whale to ampwhale + SwapOperation::TerraSwap { + offer_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C" + .to_string(), + }, + ask_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/01BAE2E69D02670B22758FBA74E4114B6E88FC1878936C919DA345E6C6C92ABF" + .to_string(), + }, + }, + ], + usdc_amp_whale_path: vec![ + // usdc to whale + SwapOperation::TerraSwap { + offer_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034" + .to_string(), + }, + ask_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C" + .to_string(), + }, + }, + // whale to ampwhale + SwapOperation::TerraSwap { + offer_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C" + .to_string(), + }, + ask_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/2F7C2A3D5D42553ED46F57D8B0DE3733B1B5FF571E2C6A051D34525904B4C0AF" + .to_string(), + }, + }, + ], + usdc_bone_whale_path: vec![ + // usdc to whale + SwapOperation::TerraSwap { + offer_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034" + .to_string(), + }, + ask_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C" + .to_string(), + }, + }, + // whale to ampwhale + SwapOperation::TerraSwap { + offer_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C" + .to_string(), + }, + ask_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/01BAE2E69D02670B22758FBA74E4114B6E88FC1878936C919DA345E6C6C92ABF" + .to_string(), + }, + }, + ], + + terraswap_multihop_router: "juno128lewlw6kv223uw4yzdffl8rnh3k9qs8vrf6kef28579w8ygccyq7m90n2" + .to_string(), + // juno_bone_whale_path: todo!(), + }, + racoon_bet: RacoonBetAddresses { + game: "juno1h8p0jmfn06nfqpn0medn698h950vnl7v54m2azkyjdqjlzcly7jszxh7yu".to_string(), + juno_usdc_wynd_pair: "juno1gqy6rzary8vwnslmdavqre6jdhakcd4n2z4r803ajjmdq08r66hq7zcwrj".to_string(), + }, + juno_lsds: JunoLsdAddresses { + bone_juno: "juno102at0mu2xeluyw9efg257yy6pyhv088qqhmp4f8wszqcwxnpdcgqsfq0nv".to_string(), + wy_juno: "juno18wuy5qr2mswgz7zak8yr9crhwhtur3v6mw4tcytupywxzw7sufyqgza7uh".to_string(), + se_juno: "juno1dlp8avgc2r6t4nnsv4yydc6lc73rjtjqvdcee9r2kf0uwuef7v0smljy8w".to_string(), + b_juno: "juno1dlp8avgc2r6t4nnsv4yydc6lc73rjtjqvdcee9r2kf0uwuef7v0smljy8w".to_string(), + amp_juno: "juno17cya4sw72h4886zsm2lk3udxaw5m8ssgpsl6nd6xl6a4ukepdgkqeuv99x".to_string(), + }, + }, }, }, ) @@ -116,11 +330,221 @@ fn validator_only_compounding() { &InstantiateMsg { admin: None, project_addresses: ContractAddresses { - staking_denom: "ubtc".to_string(), - take_rate_addr: "".to_string(), - usdc: wyndex::asset::AssetInfo::Native("".to_string()), - authzpp: AuthzppAddresses::default(), - destination_projects: DestinationProjectAddresses::default(), + staking_denom: "ujuno".to_string(), + take_rate_addr: "juno1takerateaddr".to_string(), + usdc: wyndex::asset::AssetInfo::Native( + "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034".to_string(), + ), + authzpp: AuthzppAddresses { + withdraw_tax: "juno1nak433pjd39et4g6jjclxk7yfmtfsd5m43su04rxe9ggttdvjwpqsumv30".to_string(), + }, + destination_projects: DestinationProjectAddresses { + wynd: WyndAddresses { + cw20: "juno1mkw83sv6c7sjdvsaplrzc8yaes9l42p4mhy0ssuxjnyzl87c9eps7ce3m9".to_string(), + multihop: "juno1pctfpv9k03v0ff538pz8kkw5ujlptntzkwjg6c0lrtqv87s9k28qdtl50w".to_string(), + juno_wynd_pair: "juno1a7lmc8e04hcs4y2275cultvg83u636ult4pmnwktr6l9nhrh2e8qzxfdwf".to_string(), + wynd_usdc_pair: "juno18zk9xqj9xjm0ry39jjam8qsysj7qh49xwt4qdfp9lgtrk08sd58s2n54ve".to_string(), + }, + gelotto: GelottoAddresses { + pick3_contract: "juno1v466lyrhsflkt9anxt4wyx7mtw8w2uyk0qxkqskqfj90rmwhph7s0dxvga".to_string(), + pick4_contract: "juno16xy5m05z6n4vnfzcf8cvd3anxhg4g2k8vvr4q2knv4akynfstr9qjmhdhs".to_string(), + pick5_contract: "juno1txn3kejj4qrehua9vlg3hk4wunqafqunfy83cz5hg2xa3z3pkgssk4tzu4".to_string(), + }, + daos: DaoAddresses { + neta: DaoAddress { + cw20: "juno168ctmpyppk90d34p3jjy658zf5a5l3w8wk35wht6ccqj4mr0yv8s4j5awr".to_string(), + staking: "juno1a7x8aj7k38vnj9edrlymkerhrl5d4ud3makmqhx6vt3dhu0d824qh038zh".to_string(), + juno_wyndex_pair: Some( + "juno1h6x5jlvn6jhpnu63ufe4sgv4utyk8hsfl5rqnrpg2cvp6ccuq4lqwqnzra".to_string(), + ), + wynd_wyndex_pair: None, + }, + signal: DaoAddress { + cw20: "juno14lycavan8gvpjn97aapzvwmsj8kyrvf644p05r0hu79namyj3ens87650k".to_string(), + staking: "juno1v0km8gytmzpmtnwv8mpx26kctt5szuzudhg209fxee57yh9u2cvs88rn7p".to_string(), + juno_wyndex_pair: Some( + "juno1p3eed298qx3nyhs3grld07jrf9vjsjsmdd2kmmh3crk87emjcx5stp409y".to_string(), + ), + wynd_wyndex_pair: None, + }, + posthuman: DaoAddress { + cw20: "juno1rws84uz7969aaa7pej303udhlkt3j9ca0l3egpcae98jwak9quzq8szn2l".to_string(), + staking: "juno1jktfdt5g2d0fguvy8r8pl4gly7wps8phkwy08z6upc4nazkumrwq7lj0vn".to_string(), + juno_wyndex_pair: Some( + "juno17jv00cm4f3twr548jzayu57g9txvd4zdh54mdg9qpjs7samlphjsykylsq".to_string(), + ), + wynd_wyndex_pair: None, + }, + kleomedes: DaoAddress { + cw20: "juno10gthz5ufgrpuk5cscve2f0hjp56wgp90psqxcrqlg4m9mcu9dh8q4864xy".to_string(), + staking: "juno1zqp6uh3eg09s0h24rkwukkkg3pch49g0ndc53z9l8wrvh9dhf4nsj0ur49".to_string(), + juno_wyndex_pair: Some( + "juno1dpqgt3ja2kdxs94ltjw9ncdsexts9e3dx5qpnl20zvgdguzjelhqstf8zg".to_string(), + ), + wynd_wyndex_pair: None, + }, + cannalabs: DaoAddress { + cw20: "juno1vn38rzq0wc7zczp4dhy0h5y5kxh2jjzeahwe30c9cc6dw3lkyk5qn5rmfa".to_string(), + staking: "juno1066vq5g9qdprhgjst444rgf0zknhlqwmdnm7xyqhprt9whctzzxqdx90lu".to_string(), + juno_wyndex_pair: Some( + "juno17ckp36lmgtt7jtuggdv2j39eh4alcnl35szu6quh747nujags07swwq0nh".to_string(), + ), + wynd_wyndex_pair: Some( + "juno1ls5un4a8zyn4f05k0ekq5aa9uhn88y8362ww38elqfpcwllme0jqelamke".to_string(), + ), + }, + muse: DaoAddress { + cw20: "juno1p8x807f6h222ur0vssqy3qk6mcpa40gw2pchquz5atl935t7kvyq894ne3".to_string(), + staking: "juno17gdhjxt2d5mhx6paxc85g4pr5myew8pq0lm7usdsavsfk34ldrsqqhtafc".to_string(), + juno_wyndex_pair: Some( + "juno1rcssjyqgr6vzalss77d43v30c2qpyzzg607ua8gte2shqgtvu24sg8gs8r".to_string(), + ), + wynd_wyndex_pair: None, + }, + }, + spark_ibc: SparkIbcAddresses { + fund: "juno1a6rna5tcl6p97rze6hnd5ug35kadqhudvr5f4mtr6s0yd5mruhss8gzrdy".to_string(), + }, + balance_dao: "juno1ve7y09kvvnjk0yc2ycaq0y9thq5tct5ve6c0a5hfkt0h4jfy936qxtne5s".to_string(), + white_whale: WhiteWhaleSatelliteAddresses { + amp_whale: "ibc/2F7C2A3D5D42553ED46F57D8B0DE3733B1B5FF571E2C6A051D34525904B4C0AF".to_string(), + bone_whale: "ibc/01BAE2E69D02670B22758FBA74E4114B6E88FC1878936C919DA345E6C6C92ABF".to_string(), + market: "juno1n8slcc79dmwuzdxhsesvhcncaqfg9h4czdm5t5ey8x25ajmn3xzqyde4wv".to_string(), + rewards: "juno184ghwgprva7dlr2hwhzgvt6mem6zx78fygk0cpw7klssmzyf67tqdtwt3h".to_string(), + juno_amp_whale_path: vec![ + // swap juno for usdc + SwapOperation::TerraSwap { + offer_asset_info: WWAssetInfo::NativeToken { + denom: "ujuno".to_string(), + }, + + ask_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034" + .to_string(), + }, + }, + // usdc to whale + SwapOperation::TerraSwap { + offer_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034" + .to_string(), + }, + ask_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C" + .to_string(), + }, + }, + // whale to ampwhale + SwapOperation::TerraSwap { + offer_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C" + .to_string(), + }, + ask_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/2F7C2A3D5D42553ED46F57D8B0DE3733B1B5FF571E2C6A051D34525904B4C0AF" + .to_string(), + }, + }, + ], + juno_bone_whale_path: vec![ + // swap juno for usdc + SwapOperation::TerraSwap { + offer_asset_info: WWAssetInfo::NativeToken { + denom: "ujuno".to_string(), + }, + ask_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034" + .to_string(), + }, + }, + // usdc to whale + SwapOperation::TerraSwap { + offer_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034" + .to_string(), + }, + ask_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C" + .to_string(), + }, + }, + // whale to ampwhale + SwapOperation::TerraSwap { + offer_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C" + .to_string(), + }, + ask_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/01BAE2E69D02670B22758FBA74E4114B6E88FC1878936C919DA345E6C6C92ABF" + .to_string(), + }, + }, + ], + usdc_amp_whale_path: vec![ + // usdc to whale + SwapOperation::TerraSwap { + offer_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034" + .to_string(), + }, + ask_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C" + .to_string(), + }, + }, + // whale to ampwhale + SwapOperation::TerraSwap { + offer_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C" + .to_string(), + }, + ask_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/2F7C2A3D5D42553ED46F57D8B0DE3733B1B5FF571E2C6A051D34525904B4C0AF" + .to_string(), + }, + }, + ], + usdc_bone_whale_path: vec![ + // usdc to whale + SwapOperation::TerraSwap { + offer_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034" + .to_string(), + }, + ask_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C" + .to_string(), + }, + }, + // whale to ampwhale + SwapOperation::TerraSwap { + offer_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C" + .to_string(), + }, + ask_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/01BAE2E69D02670B22758FBA74E4114B6E88FC1878936C919DA345E6C6C92ABF" + .to_string(), + }, + }, + ], + + terraswap_multihop_router: "juno128lewlw6kv223uw4yzdffl8rnh3k9qs8vrf6kef28579w8ygccyq7m90n2" + .to_string(), + // juno_bone_whale_path: todo!(), + }, + racoon_bet: RacoonBetAddresses { + game: "juno1h8p0jmfn06nfqpn0medn698h950vnl7v54m2azkyjdqjlzcly7jszxh7yu".to_string(), + juno_usdc_wynd_pair: "juno1gqy6rzary8vwnslmdavqre6jdhakcd4n2z4r803ajjmdq08r66hq7zcwrj".to_string(), + }, + juno_lsds: JunoLsdAddresses { + bone_juno: "juno102at0mu2xeluyw9efg257yy6pyhv088qqhmp4f8wszqcwxnpdcgqsfq0nv".to_string(), + wy_juno: "juno18wuy5qr2mswgz7zak8yr9crhwhtur3v6mw4tcytupywxzw7sufyqgza7uh".to_string(), + se_juno: "juno1dlp8avgc2r6t4nnsv4yydc6lc73rjtjqvdcee9r2kf0uwuef7v0smljy8w".to_string(), + b_juno: "juno1dlp8avgc2r6t4nnsv4yydc6lc73rjtjqvdcee9r2kf0uwuef7v0smljy8w".to_string(), + amp_juno: "juno17cya4sw72h4886zsm2lk3udxaw5m8ssgpsl6nd6xl6a4ukepdgkqeuv99x".to_string(), + }, + }, }, }, ) diff --git a/contracts/junowwmarket/Cargo.toml b/contracts/junowwmarket/Cargo.toml index 2d0092a..4d877bf 100644 --- a/contracts/junowwmarket/Cargo.toml +++ b/contracts/junowwmarket/Cargo.toml @@ -1,8 +1,8 @@ [package] name = "ymos-junowwmarket-outpost" authors = ["Marc "] -version = { workspace = true } -edition = { workspace = true } +version = "1.0.0" +edition = "2021" description = "Yieldmos Juno White Whale Satellite Market Outpost" exclude = [ diff --git a/contracts/junowwmarket/src/execute.rs b/contracts/junowwmarket/src/execute.rs index 95911d4..f9b634c 100644 --- a/contracts/junowwmarket/src/execute.rs +++ b/contracts/junowwmarket/src/execute.rs @@ -6,20 +6,20 @@ use outpost_utils::{ }; use std::iter; - - - use crate::{ + helpers::{asset_to_coin, query_and_generate_ww_market_reward_msgs, terraswap_assetinfo_to_wyndex_assetinfo}, msg::ContractAddrs, state::{ADMIN, AUTHORIZED_ADDRS}, - ContractError, helpers::{query_and_generate_ww_market_reward_msgs, asset_to_coin, terraswap_assetinfo_to_wyndex_assetinfo}, + ContractError, }; -use wynd_helpers::wynd_swap::{create_wyndex_swap_msg_with_simulation, simulate_and_swap_wynd_pair, wynd_pair_swap_msg}; -use wyndex::asset::{Asset, AssetInfo}; use juno_destinations::comp_prefs::{JunoCompPrefs, JunoDestinationProject, StakingDao}; -use juno_destinations::dest_project_gen::{balance_dao_msgs, gelotto_lottery_msgs, mint_juno_lsd_msgs, racoon_bet_msgs, send_tokens_msgs, wynd_staking_msgs}; +use juno_destinations::dest_project_gen::{ + balance_dao_msgs, gelotto_lottery_msgs, mint_juno_lsd_msgs, racoon_bet_msgs, send_tokens_msgs, wynd_staking_msgs, +}; use sail_destinations::dest_project_gen::{spark_ibc_msgs, white_whale_satellite_msgs}; use universal_destinations::dest_project_gen::{daodao_cw20_staking_msg, native_staking_msg}; +use wynd_helpers::wynd_swap::{create_wyndex_swap_msg_with_simulation, simulate_and_swap_wynd_pair, wynd_pair_swap_msg}; +use wyndex::asset::{Asset, AssetInfo}; pub fn compound( deps: DepsMut, @@ -39,17 +39,19 @@ pub fn compound( // validate that the user is authorized to compound is_authorized_compounder(deps.as_ref(), &info.sender, &delegator, ADMIN, AUTHORIZED_ADDRS)?; - let TaxSplitResult { + let TaxSplitResult { remaining_rewards, tax_amount, claim_and_tax_msgs, } = query_and_generate_ww_market_reward_msgs( - tax_fee.unwrap_or(Decimal::percent(5)), - &delegator, &project_addresses.take_rate_addr.clone(), - &project_addresses.destination_projects.white_whale.rewards.clone(), + tax_fee.unwrap_or(Decimal::percent(5)), + &delegator, + &project_addresses.take_rate_addr.clone(), + &project_addresses.destination_projects.white_whale.rewards.clone(), &project_addresses.destination_projects.white_whale.market.clone(), &project_addresses.terraswap_routes.whale_asset.to_string(), - &deps.querier)?; + &deps.querier, + )?; // the list of all the compounding msgs to broadcast on behalf of the user based on their comp prefs let all_msgs = prefs_to_msgs( @@ -83,7 +85,6 @@ pub fn compound( let resp = Response::default() .add_attribute("action", "outpost compound") - .add_event(amount_automated_event) // .add_attribute("amount_automated", to_json_binary(&[total_rewards])?.to_string()) .add_message(exec_msg) @@ -131,84 +132,84 @@ pub fn prefs_to_msgs( comp_prefs.relative, ); - let terraswap_multihop_addr = project_addrs.destination_projects.white_whale.terraswap_multihop_router.clone(); - + let terraswap_multihop_addr = project_addrs + .destination_projects + .white_whale + .terraswap_multihop_router + .clone(); + // generate the list of individual msgs to compound the user's rewards let compounding_msgs: Vec = compound_token_amounts .map( |(comp_token_amount, DestinationAction { destination, .. })| -> Result { - - match destination { JunoDestinationProject::JunoStaking { validator_address } => { - let (swap_msg, simulated_juno) = - project_addrs.terraswap_routes.gen_whale_swap_with_sim(delegator_addr, - comp_token_amount, - "ujuno", - &terraswap_multihop_addr, - &deps.querier)?; - - let mut staking_msgs = native_staking_msg( - &validator_address, + let (swap_msg, simulated_juno) = project_addrs.terraswap_routes.gen_whale_swap_with_sim( delegator_addr, - &asset_to_coin(simulated_juno)?, + comp_token_amount, + "ujuno", + &terraswap_multihop_addr, + &deps.querier, )?; - + let mut staking_msgs = + native_staking_msg(&validator_address, delegator_addr, &asset_to_coin(simulated_juno)?)?; - staking_msgs.append_msgs(vec![swap_msg]); - - Ok(staking_msgs) - }, + staking_msgs.append_msgs(vec![swap_msg]); + + Ok(staking_msgs) + } JunoDestinationProject::DaoStaking(dao) => { if let StakingDao::Kleomedes = dao { let mut noop_resp = DestProjectMsgs::default(); - noop_resp.events.push(Event::new("dao_stake") - .add_attribute("dao", dao.to_string()) - .add_attribute("status", "disabled")); + noop_resp.events.push( + Event::new("dao_stake") + .add_attribute("dao", dao.to_string()) + .add_attribute("status", "disabled"), + ); return Ok(noop_resp); } - let dao_addresses = dao.get_daos_addresses(&project_addrs.destination_projects.daos); - let (terraswap_swap_msg, simulated_juno) = - project_addrs.terraswap_routes.gen_whale_swap_with_sim(delegator_addr, - comp_token_amount, - "ujuno", - &terraswap_multihop_addr, - &deps.querier)?; - - let (wyndex_swap_msgs, expected_dao_token_amount) = if let Some(pair_addr) = dao_addresses.juno_wyndex_pair - { - // if there's a direct juno & staking denom pair, then we can swap directly - let (swap_msg, swap_sim) = simulate_and_swap_wynd_pair( - &deps.querier, - delegator_addr, - pair_addr.as_ref(), - wyndex::asset::Asset { - info: terraswap_assetinfo_to_wyndex_assetinfo(simulated_juno.info), - amount: simulated_juno.amount, - }, - AssetInfo::Token(dao_addresses.cw20.to_string()), - )?; - - (vec![swap_msg], swap_sim.return_amount) - } else { - // otherwise we need to use the wyndex router to swap - create_wyndex_swap_msg_with_simulation( - &deps.querier, - delegator_addr, - comp_token_amount, - AssetInfo::Native("ujuno".to_string()), - AssetInfo::Token(dao_addresses.cw20.to_string()), - project_addrs.destination_projects.wynd.multihop.to_string(), - None - )? - }; + let (terraswap_swap_msg, simulated_juno) = project_addrs.terraswap_routes.gen_whale_swap_with_sim( + delegator_addr, + comp_token_amount, + "ujuno", + &terraswap_multihop_addr, + &deps.querier, + )?; + + let (wyndex_swap_msgs, expected_dao_token_amount) = + if let Some(pair_addr) = dao_addresses.juno_wyndex_pair { + // if there's a direct juno & staking denom pair, then we can swap directly + let (swap_msg, swap_sim) = simulate_and_swap_wynd_pair( + &deps.querier, + delegator_addr, + pair_addr.as_ref(), + wyndex::asset::Asset { + info: terraswap_assetinfo_to_wyndex_assetinfo(simulated_juno.info), + amount: simulated_juno.amount, + }, + AssetInfo::Token(dao_addresses.cw20.to_string()), + )?; + + (vec![swap_msg], swap_sim.return_amount) + } else { + // otherwise we need to use the wyndex router to swap + create_wyndex_swap_msg_with_simulation( + &deps.querier, + delegator_addr, + comp_token_amount, + AssetInfo::Native("ujuno".to_string()), + AssetInfo::Token(dao_addresses.cw20.to_string()), + project_addrs.destination_projects.wynd.multihop.to_string(), + None, + )? + }; let mut stake_msgs = daodao_cw20_staking_msg( dao.to_string(), @@ -231,12 +232,13 @@ pub fn prefs_to_msgs( let juno_wynd_pair = project_addrs.destination_projects.wynd.juno_wynd_pair.to_string(); // swap uwhale for juno - let (juno_swap_msg, simulated_juno) = - project_addrs.terraswap_routes.gen_whale_swap_with_sim(delegator_addr, - comp_token_amount, - "ujuno", - &terraswap_multihop_addr, - &deps.querier)?; + let (juno_swap_msg, simulated_juno) = project_addrs.terraswap_routes.gen_whale_swap_with_sim( + delegator_addr, + comp_token_amount, + "ujuno", + &terraswap_multihop_addr, + &deps.querier, + )?; // swap juno for wynd let wynd_swap_msg = wynd_pair_swap_msg( @@ -264,26 +266,22 @@ pub fn prefs_to_msgs( comp_token_amount, &target_denom.to_string(), &terraswap_multihop_addr, - )?], + )?], sub_msgs: vec![], events: vec![], }), - JunoDestinationProject::WyndLp { - .. - // contract_address, - // bonding_period, - } => Ok(DestProjectMsgs::default()), - JunoDestinationProject::GelottoLottery { lottery, lucky_phrase } => { - - // swap uwhale for juno - let (juno_swap_msg, simulated_juno) = - project_addrs.terraswap_routes.gen_whale_swap_with_sim(delegator_addr, - comp_token_amount, - "ujuno", - &terraswap_multihop_addr, - &deps.querier)?; - - let mut lottery_msgs = gelotto_lottery_msgs( + JunoDestinationProject::WyndLp { .. } => Ok(DestProjectMsgs::default()), + JunoDestinationProject::GelottoLottery { lottery, lucky_phrase } => { + // swap uwhale for juno + let (juno_swap_msg, simulated_juno) = project_addrs.terraswap_routes.gen_whale_swap_with_sim( + delegator_addr, + comp_token_amount, + "ujuno", + &terraswap_multihop_addr, + &deps.querier, + )?; + + let mut lottery_msgs = gelotto_lottery_msgs( delegator_addr, project_addrs.take_rate_addr.clone(), lottery, @@ -295,39 +293,40 @@ pub fn prefs_to_msgs( lottery_msgs.prepend_msgs(vec![juno_swap_msg]); Ok(lottery_msgs) - }, + } JunoDestinationProject::RacoonBet { game } => { // swap uwhale for usdc - let (usdc_swap_msg, simulated_usdc) = - project_addrs.terraswap_routes.gen_whale_swap_with_sim(delegator_addr, - comp_token_amount, - project_addrs.usdc.to_string().as_str(), - &terraswap_multihop_addr, - &deps.querier)?; - - + let (usdc_swap_msg, simulated_usdc) = project_addrs.terraswap_routes.gen_whale_swap_with_sim( + delegator_addr, + comp_token_amount, + project_addrs.usdc.to_string().as_str(), + &terraswap_multihop_addr, + &deps.querier, + )?; + let mut game_msgs = racoon_bet_msgs( - &deps.querier, - delegator_addr, - // dont pass the wyndex pair in because we are passing in usdc and can skip the query - None, - asset_to_coin(simulated_usdc)?, - game, - &project_addrs.destination_projects.racoon_bet.game, - )?; - - game_msgs.prepend_msgs(vec![usdc_swap_msg]); - - Ok(game_msgs) - }, + &deps.querier, + delegator_addr, + // dont pass the wyndex pair in because we are passing in usdc and can skip the query + None, + asset_to_coin(simulated_usdc)?, + game, + &project_addrs.destination_projects.racoon_bet.game, + )?; + + game_msgs.prepend_msgs(vec![usdc_swap_msg]); + + Ok(game_msgs) + } JunoDestinationProject::WhiteWhaleSatellite { asset } => { // swap uwhale for the lsd via it's pair - let (lsd_swap_msg, simulated_asset) = - project_addrs.terraswap_routes.gen_whale_swap_with_sim(delegator_addr, - comp_token_amount, - asset.to_string().as_str(), - &terraswap_multihop_addr, - &deps.querier)?; + let (lsd_swap_msg, simulated_asset) = project_addrs.terraswap_routes.gen_whale_swap_with_sim( + delegator_addr, + comp_token_amount, + asset.to_string().as_str(), + &terraswap_multihop_addr, + &deps.querier, + )?; // now just bond it to the satellite let mut bond_msgs = white_whale_satellite_msgs( @@ -341,63 +340,62 @@ pub fn prefs_to_msgs( Ok(bond_msgs) } JunoDestinationProject::BalanceDao {} => { - // swap uwhale for juno - let (juno_swap_msg, simulated_juno) = - project_addrs.terraswap_routes.gen_whale_swap_with_sim(delegator_addr, - comp_token_amount, - "ujuno", - &terraswap_multihop_addr, - &deps.querier)?; - - let mut balance_msgs = balance_dao_msgs( - delegator_addr, - &project_addrs.destination_projects.balance_dao, - simulated_juno.amount, - )?; - - balance_msgs.prepend_msgs(vec![juno_swap_msg]); - - Ok(balance_msgs) - }, + // swap uwhale for juno + let (juno_swap_msg, simulated_juno) = project_addrs.terraswap_routes.gen_whale_swap_with_sim( + delegator_addr, + comp_token_amount, + "ujuno", + &terraswap_multihop_addr, + &deps.querier, + )?; + + let mut balance_msgs = balance_dao_msgs( + delegator_addr, + &project_addrs.destination_projects.balance_dao, + simulated_juno.amount, + )?; + + balance_msgs.prepend_msgs(vec![juno_swap_msg]); + + Ok(balance_msgs) + } JunoDestinationProject::MintLsd { lsd_type } => { - // swap uwhale for juno - let (juno_swap_msg, simulated_juno) = - project_addrs.terraswap_routes.gen_whale_swap_with_sim(delegator_addr, - comp_token_amount, - "ujuno", - &terraswap_multihop_addr, - &deps.querier)?; + // swap uwhale for juno + let (juno_swap_msg, simulated_juno) = project_addrs.terraswap_routes.gen_whale_swap_with_sim( + delegator_addr, + comp_token_amount, + "ujuno", + &terraswap_multihop_addr, + &deps.querier, + )?; let mut mint_msgs = mint_juno_lsd_msgs( - delegator_addr, - lsd_type, - simulated_juno.amount, - project_addrs.destination_projects.juno_lsds.clone(), - )?; - - mint_msgs.prepend_msgs(vec![juno_swap_msg]); - - Ok(mint_msgs) - }, + delegator_addr, + lsd_type, + simulated_juno.amount, + project_addrs.destination_projects.juno_lsds.clone(), + )?; + + mint_msgs.prepend_msgs(vec![juno_swap_msg]); + + Ok(mint_msgs) + } JunoDestinationProject::SparkIbcCampaign { fund } => { let spark_addr = project_addrs.destination_projects.spark_ibc.fund.clone(); // swap uwhale for usdc - let (usdc_swap_msg, simulated_usdc) = - project_addrs.terraswap_routes.gen_whale_swap_with_sim(delegator_addr, - comp_token_amount, - project_addrs.usdc.to_string().as_str(), - &terraswap_multihop_addr, - &deps.querier)?; - - let mut spark_msgs = spark_ibc_msgs( + let (usdc_swap_msg, simulated_usdc) = project_addrs.terraswap_routes.gen_whale_swap_with_sim( delegator_addr, - &spark_addr, - asset_to_coin(simulated_usdc)?, - fund, + comp_token_amount, + project_addrs.usdc.to_string().as_str(), + &terraswap_multihop_addr, + &deps.querier, )?; + let mut spark_msgs = + spark_ibc_msgs(delegator_addr, &spark_addr, asset_to_coin(simulated_usdc)?, fund)?; + spark_msgs.prepend_msgs(vec![usdc_swap_msg]); Ok(spark_msgs) @@ -408,7 +406,6 @@ pub fn prefs_to_msgs( } => { // swap uwhale for the target asset let (swap_msg, sim) = project_addrs.terraswap_routes.gen_whale_swap_with_sim( - delegator_addr, comp_token_amount, &target_asset.to_string(), @@ -416,8 +413,6 @@ pub fn prefs_to_msgs( &deps.querier, )?; - - // after the swap we can send the estimated funds to the target address let mut send_msgs = send_tokens_msgs( delegator_addr, @@ -434,17 +429,8 @@ pub fn prefs_to_msgs( } JunoDestinationProject::Unallocated {} => Ok(DestProjectMsgs::default()), } - }, ) .collect::, ContractError>>()?; - // .map(|msgs_list| - // msgs_list.into_iter().flatten().collect()); - - // withdraw_rewards_msgs.append(&mut compounding_msgs?); - - // Ok(withdraw_rewards_msgs) - // Ok(vec![]) - Ok(compounding_msgs) } diff --git a/contracts/junowwmarket/src/helpers.rs b/contracts/junowwmarket/src/helpers.rs index 2808167..bf0366c 100644 --- a/contracts/junowwmarket/src/helpers.rs +++ b/contracts/junowwmarket/src/helpers.rs @@ -1,5 +1,3 @@ - - use cw_grant_spec::grants::{GrantBase, GrantRequirement}; use outpost_utils::{ helpers::{calc_tax_split, TaxSplitResult}, diff --git a/contracts/junowwmarket/src/msg.rs b/contracts/junowwmarket/src/msg.rs index 42bd699..834e891 100644 --- a/contracts/junowwmarket/src/msg.rs +++ b/contracts/junowwmarket/src/msg.rs @@ -1,13 +1,10 @@ use cosmwasm_schema::{cw_serde, QueryResponses}; use cosmwasm_std::{Addr, Api, Decimal, Timestamp}; use cw_grant_spec::grants::{GrantRequirement, RevokeRequirement}; -use outpost_utils::{ - helpers::CompoundingFrequency, - -}; +use juno_destinations::comp_prefs::{DestinationProjectAddresses, DestinationProjectAddrs, JunoCompPrefs}; +use outpost_utils::helpers::CompoundingFrequency; use white_whale::pool_network::{asset::AssetInfo as WWAssetInfo, router::SwapOperation}; use wyndex::asset::AssetInfo; -use juno_destinations::comp_prefs::{DestinationProjectAddresses, DestinationProjectAddrs, JunoCompPrefs}; use crate::ContractError; @@ -191,19 +188,12 @@ impl TerraswapRouteAddresses { #[derive(Default)] pub struct AuthzppAddresses { pub withdraw_tax: String, - // pub allowlist_send: String, } #[cw_serde] -pub struct AuthzppAddrs { - // pub withdraw_tax: Addr, - // pub allowlist_send: Addr, -} +pub struct AuthzppAddrs {} impl AuthzppAddresses { pub fn validate_addrs(&self, _api: &dyn Api) -> Result { - Ok(AuthzppAddrs { - // withdraw_tax: api.addr_validate(&self.withdraw_tax)?, - // allowlist_send: api.addr_validate(&self.allowlist_send)?, - }) + Ok(AuthzppAddrs {}) } } diff --git a/contracts/junowwmarket/src/queries.rs b/contracts/junowwmarket/src/queries.rs index 7a40da2..fccd98d 100644 --- a/contracts/junowwmarket/src/queries.rs +++ b/contracts/junowwmarket/src/queries.rs @@ -1,8 +1,6 @@ use cosmwasm_std::{Addr, Deps, QuerierWrapper, StdResult, Timestamp, Uint128}; use cw_grant_spec::grantable_trait::{dedupe_grant_reqs, GrantStructure, Grantable}; -use cw_grant_spec::grants::{ - ContractExecutionAuthorizationLimit, GrantBase, GrantRequirement, RevokeRequirement, -}; +use cw_grant_spec::grants::{ContractExecutionAuthorizationLimit, GrantBase, GrantRequirement, RevokeRequirement}; use juno_destinations::comp_prefs::{wyndex_asset_info_to_terraswap_asset_info, DaoAddr, JunoDestinationProject, JunoLsd}; use juno_destinations::grants::{balance_dao_grant, gelotto_lottery_grant, wyndao_staking_grant}; diff --git a/contracts/junowwmarket/src/tests/integration_tests.rs b/contracts/junowwmarket/src/tests/integration_tests.rs index ebf6cb2..e47ab43 100644 --- a/contracts/junowwmarket/src/tests/integration_tests.rs +++ b/contracts/junowwmarket/src/tests/integration_tests.rs @@ -1,10 +1,10 @@ use cosmwasm_std::{coin, coins, testing::mock_env, Addr, CosmosMsg, Decimal, Delegation, Empty, Validator}; use cw_multi_test::{next_block, App, Contract, ContractWrapper, StakingInfo}; -use outpost_utils::juno_comp_prefs::DestinationProjectAddresses; +use juno_destinations::comp_prefs::DestinationProjectAddresses; use crate::{ contract::{execute, instantiate, query}, - msg::{AuthzppAddresses, ContractAddresses, InstantiateMsg}, + msg::{AuthzppAddresses, ContractAddresses, InstantiateMsg, TerraswapRouteAddresses}, tests::multitest::OutpostContract, }; @@ -14,168 +14,168 @@ fn auctioning_contract() -> Box> { Box::new(contract) } -#[test] -fn instantiate_with_defaults() { - let sender = Addr::unchecked("sender"); - - let mut app = App::new(|_router, _api, _storage| { - // router.bank - // .init_balance(storage, &sender, coins(100_000, "ubtc")) - // .unwrap(); - }); - - let contract_id = app.store_code(auctioning_contract()); - - let _contract = OutpostContract::instantiate( - &mut app, - contract_id, - &sender, - None, - "Test Outpost", - // &coins(100_000, "ubtc"), - &InstantiateMsg { - admin: None, - project_addresses: ContractAddresses { - take_rate_addr: "".to_string(), - usdc: wyndex::asset::AssetInfo::Native("".to_string()), - authzpp: AuthzppAddresses::default(), - destination_projects: DestinationProjectAddresses::default(), - terraswap_routes: todo!(), - }, - }, - ) - .unwrap(); - - assert_eq!(app.wrap().query_all_balances(&sender).unwrap(), &[]) -} - -#[test] -fn validator_only_compounding() { - let contract_admin_addr = Addr::unchecked("admin_wallet"); - let delegator_addr = Addr::unchecked("delegator_wallet"); - let start_validator_addr = Addr::unchecked("validator_1"); - let end_validator_addr = Addr::unchecked("validator_2"); - - let mut app = App::new(|router, api, storage| { - router - .bank - .init_balance(storage, &delegator_addr, coins(100_000, "ubtc")) - .unwrap(); - - router - .staking - .setup( - storage, - StakingInfo { - bonded_denom: "ubtc".to_string(), - unbonding_time: 10u64, - apr: Decimal::percent(1000), - }, - ) - .unwrap(); - - router - .staking - .add_validator( - api, - storage, - &mock_env().block, - Validator { - address: start_validator_addr.to_string(), - commission: Decimal::one(), - max_commission: Decimal::one(), - max_change_rate: Decimal::one(), - }, - ) - .unwrap(); - - router - .staking - .add_validator( - api, - storage, - &mock_env().block, - Validator { - address: end_validator_addr.to_string(), - commission: Decimal::one(), - max_commission: Decimal::one(), - max_change_rate: Decimal::one(), - }, - ) - .unwrap(); - }); - - let contract_id = app.store_code(auctioning_contract()); - - let _contract = OutpostContract::instantiate( - &mut app, - contract_id, - &contract_admin_addr, - None, - "Test Outpost", - &InstantiateMsg { - admin: None, - project_addresses: ContractAddresses { - take_rate_addr: "".to_string(), - usdc: wyndex::asset::AssetInfo::Native("".to_string()), - authzpp: AuthzppAddresses::default(), - destination_projects: DestinationProjectAddresses::default(), - terraswap_routes: todo!(), - }, - }, - ) - .unwrap(); - - app.execute_multi( - delegator_addr.clone(), - vec![ - CosmosMsg::Staking(cosmwasm_std::StakingMsg::Delegate { - validator: start_validator_addr.to_string(), - amount: coin(100_000, "ubtc"), - }), - // create_generic_grant_msg( - // delegator_addr.to_string(), - // &contract.addr(), - // GenericAuthorizationType::Delegation, - // ), - // create_generic_grant_msg( - // delegator_addr.to_string(), - // &contract.addr(), - // GenericAuthorizationType::WithdrawDelegatorRewards, - // ), - ], - ) - .unwrap(); - - assert_eq!(app.wrap().query_all_balances(&delegator_addr).unwrap(), &[]); - assert_eq!( - app.wrap().query_all_delegations(delegator_addr.clone()).unwrap(), - vec![Delegation { - delegator: delegator_addr.clone(), - validator: start_validator_addr.to_string(), - amount: coin(100_000, "ubtc".to_string()) - }] - ); - - app.update_block(next_block); - - // let err = contract - // .compound_funds( - // &mut app, - // &delegator_addr.clone(), - // CompoundPrefs { - // relative: vec![DestinationAction { - // destination: DestinationProject::JunoStaking { - // validator_address: end_validator_addr.to_string(), - // }, - // amount: RelativeQty { - // quantity: 1_000_000_000_000_000_000u128.into(), - // }, - // }], - // }, - // delegator_addr.to_string(), - // ) - // .unwrap_err(); - - // println!("{}", err) -} +// #[test] +// fn instantiate_with_defaults() { +// let sender = Addr::unchecked("sender"); + +// let mut app = App::new(|_router, _api, _storage| { +// // router.bank +// // .init_balance(storage, &sender, coins(100_000, "ubtc")) +// // .unwrap(); +// }); + +// let contract_id = app.store_code(auctioning_contract()); + +// let _contract = OutpostContract::instantiate( +// &mut app, +// contract_id, +// &sender, +// None, +// "Test Outpost", +// // &coins(100_000, "ubtc"), +// &InstantiateMsg { +// admin: None, +// project_addresses: ContractAddresses { +// take_rate_addr: "".to_string(), +// usdc: wyndex::asset::AssetInfo::Native("".to_string()), +// authzpp: AuthzppAddresses::default(), +// destination_projects: DestinationProjectAddresses::default(), +// terraswap_routes: TerraswapRouteAddresses::default(), +// }, +// }, +// ) +// .unwrap(); + +// assert_eq!(app.wrap().query_all_balances(&sender).unwrap(), &[]) +// } + +// #[test] +// fn validator_only_compounding() { +// let contract_admin_addr = Addr::unchecked("admin_wallet"); +// let delegator_addr = Addr::unchecked("delegator_wallet"); +// let start_validator_addr = Addr::unchecked("validator_1"); +// let end_validator_addr = Addr::unchecked("validator_2"); + +// let mut app = App::new(|router, api, storage| { +// router +// .bank +// .init_balance(storage, &delegator_addr, coins(100_000, "ubtc")) +// .unwrap(); + +// router +// .staking +// .setup( +// storage, +// StakingInfo { +// bonded_denom: "ubtc".to_string(), +// unbonding_time: 10u64, +// apr: Decimal::percent(1000), +// }, +// ) +// .unwrap(); + +// router +// .staking +// .add_validator( +// api, +// storage, +// &mock_env().block, +// Validator { +// address: start_validator_addr.to_string(), +// commission: Decimal::one(), +// max_commission: Decimal::one(), +// max_change_rate: Decimal::one(), +// }, +// ) +// .unwrap(); + +// router +// .staking +// .add_validator( +// api, +// storage, +// &mock_env().block, +// Validator { +// address: end_validator_addr.to_string(), +// commission: Decimal::one(), +// max_commission: Decimal::one(), +// max_change_rate: Decimal::one(), +// }, +// ) +// .unwrap(); +// }); + +// let contract_id = app.store_code(auctioning_contract()); + +// let _contract = OutpostContract::instantiate( +// &mut app, +// contract_id, +// &contract_admin_addr, +// None, +// "Test Outpost", +// &InstantiateMsg { +// admin: None, +// project_addresses: ContractAddresses { +// take_rate_addr: "".to_string(), +// usdc: wyndex::asset::AssetInfo::Native("".to_string()), +// authzpp: AuthzppAddresses::default(), +// destination_projects: DestinationProjectAddresses::default(), +// terraswap_routes: TerraswapRouteAddresses::default(), +// }, +// }, +// ) +// .unwrap(); + +// app.execute_multi( +// delegator_addr.clone(), +// vec![ +// CosmosMsg::Staking(cosmwasm_std::StakingMsg::Delegate { +// validator: start_validator_addr.to_string(), +// amount: coin(100_000, "ubtc"), +// }), +// // create_generic_grant_msg( +// // delegator_addr.to_string(), +// // &contract.addr(), +// // GenericAuthorizationType::Delegation, +// // ), +// // create_generic_grant_msg( +// // delegator_addr.to_string(), +// // &contract.addr(), +// // GenericAuthorizationType::WithdrawDelegatorRewards, +// // ), +// ], +// ) +// .unwrap(); + +// assert_eq!(app.wrap().query_all_balances(&delegator_addr).unwrap(), &[]); +// assert_eq!( +// app.wrap().query_all_delegations(delegator_addr.clone()).unwrap(), +// vec![Delegation { +// delegator: delegator_addr.clone(), +// validator: start_validator_addr.to_string(), +// amount: coin(100_000, "ubtc".to_string()) +// }] +// ); + +// app.update_block(next_block); + +// // let err = contract +// // .compound_funds( +// // &mut app, +// // &delegator_addr.clone(), +// // CompoundPrefs { +// // relative: vec![DestinationAction { +// // destination: DestinationProject::JunoStaking { +// // validator_address: end_validator_addr.to_string(), +// // }, +// // amount: RelativeQty { +// // quantity: 1_000_000_000_000_000_000u128.into(), +// // }, +// // }], +// // }, +// // delegator_addr.to_string(), +// // ) +// // .unwrap_err(); + +// // println!("{}", err) +// } diff --git a/contracts/junowwmarket/src/tests/multitest.rs b/contracts/junowwmarket/src/tests/multitest.rs index b2718e5..b19462e 100644 --- a/contracts/junowwmarket/src/tests/multitest.rs +++ b/contracts/junowwmarket/src/tests/multitest.rs @@ -1,6 +1,6 @@ use cosmwasm_std::{Addr, StdResult}; use cw_multi_test::{App, ContractWrapper, Executor}; -use outpost_utils::juno_comp_prefs::JunoCompPrefs; +use juno_destinations::comp_prefs::JunoCompPrefs; use crate::{ contract::{execute, instantiate, query}, diff --git a/contracts/migaloodca/Cargo.toml b/contracts/migaloodca/Cargo.toml index 252fc24..88b99fa 100644 --- a/contracts/migaloodca/Cargo.toml +++ b/contracts/migaloodca/Cargo.toml @@ -1,8 +1,8 @@ [package] name = "ymos-migaloodca-outpost" authors = ["Marc "] -version = { workspace = true } -edition = { workspace = true } +version = "0.1.0" +edition = "2021" description = "Yieldmos Migaloo DCAing Outpost" exclude = [ diff --git a/contracts/migaloodca/src/execute.rs b/contracts/migaloodca/src/execute.rs index 0ed01bc..8f5568d 100644 --- a/contracts/migaloodca/src/execute.rs +++ b/contracts/migaloodca/src/execute.rs @@ -9,8 +9,8 @@ use migaloo_destinations::{ use outpost_utils::{ comp_prefs::DestinationAction, helpers::{ - calc_additional_tax_split, calculate_compound_amounts, is_authorized_compounder, prefs_sum_to_one, - DestProjectMsgs, TaxSplitResult, + calc_additional_tax_split, calculate_compound_amounts, is_authorized_compounder, prefs_sum_to_one, DestProjectMsgs, + TaxSplitResult, }, msg_gen::create_exec_msg, }; @@ -18,8 +18,6 @@ use std::iter; use terraswap_helpers::terraswap_swap::create_terraswap_pool_swap_msg_with_simulation; use white_whale::pool_network::asset::{Asset, AssetInfo}; - - use crate::{ msg::{ContractAddrs, DcaPrefs}, state::{ADMIN, AUTHORIZED_ADDRS, PROJECT_ADDRS}, diff --git a/contracts/migaloodca/src/msg.rs b/contracts/migaloodca/src/msg.rs index 96d2528..515dbfe 100644 --- a/contracts/migaloodca/src/msg.rs +++ b/contracts/migaloodca/src/msg.rs @@ -117,21 +117,12 @@ impl ContractAddresses { #[cw_serde] #[derive(Default)] -pub struct AuthzppAddresses { - // pub withdraw_tax: String, - // pub allowlist_send: String, -} +pub struct AuthzppAddresses {} #[cw_serde] -pub struct AuthzppAddrs { - // pub withdraw_tax: Addr, - // pub allowlist_send: Addr, -} +pub struct AuthzppAddrs {} impl AuthzppAddresses { pub fn validate_addrs(&self, _api: &dyn Api) -> Result { - Ok(AuthzppAddrs { - // withdraw_tax: api.addr_validate(&self.withdraw_tax)?, - // allowlist_send: api.addr_validate(&self.allowlist_send)?, - }) + Ok(AuthzppAddrs {}) } } diff --git a/contracts/migaloodca/src/tests/integration_tests.rs b/contracts/migaloodca/src/tests/integration_tests.rs index c3e1c65..ddded0c 100644 --- a/contracts/migaloodca/src/tests/integration_tests.rs +++ b/contracts/migaloodca/src/tests/integration_tests.rs @@ -15,168 +15,168 @@ fn auctioning_contract() -> Box> { Box::new(contract) } -#[test] -fn instantiate_with_defaults() { - let sender = Addr::unchecked("sender"); - - let mut app = App::new(|_router, _api, _storage| { - // router.bank - // .init_balance(storage, &sender, coins(100_000, "ubtc")) - // .unwrap(); - }); - - let contract_id = app.store_code(auctioning_contract()); - - let _contract = OutpostContract::instantiate( - &mut app, - contract_id, - &sender, - None, - "Test Outpost", - // &coins(100_000, "ubtc"), - &InstantiateMsg { - admin: None, - project_addresses: ContractAddresses { - staking_denom: "ubtc".to_string(), - take_rate_addr: "".to_string(), - usdc: AssetInfo::NativeToken { denom: "".to_string() }, - authzpp: AuthzppAddresses::default(), - destination_projects: MigalooDestinationProjectAddresses::default(), - }, - }, - ) - .unwrap(); - - assert_eq!(app.wrap().query_all_balances(&sender).unwrap(), &[]) -} - -#[test] -fn validator_only_compounding() { - let contract_admin_addr = Addr::unchecked("admin_wallet"); - let delegator_addr = Addr::unchecked("delegator_wallet"); - let start_validator_addr = Addr::unchecked("validator_1"); - let end_validator_addr = Addr::unchecked("validator_2"); - - let mut app = App::new(|router, api, storage| { - router - .bank - .init_balance(storage, &delegator_addr, coins(100_000, "ubtc")) - .unwrap(); - - router - .staking - .setup( - storage, - StakingInfo { - bonded_denom: "ubtc".to_string(), - unbonding_time: 10u64, - apr: Decimal::percent(1000), - }, - ) - .unwrap(); - - router - .staking - .add_validator( - api, - storage, - &mock_env().block, - Validator { - address: start_validator_addr.to_string(), - commission: Decimal::one(), - max_commission: Decimal::one(), - max_change_rate: Decimal::one(), - }, - ) - .unwrap(); - - router - .staking - .add_validator( - api, - storage, - &mock_env().block, - Validator { - address: end_validator_addr.to_string(), - commission: Decimal::one(), - max_commission: Decimal::one(), - max_change_rate: Decimal::one(), - }, - ) - .unwrap(); - }); - - let contract_id = app.store_code(auctioning_contract()); - - let _contract = OutpostContract::instantiate( - &mut app, - contract_id, - &contract_admin_addr, - None, - "Test Outpost", - &InstantiateMsg { - admin: None, - project_addresses: ContractAddresses { - staking_denom: "ubtc".to_string(), - take_rate_addr: "".to_string(), - usdc: AssetInfo::NativeToken { denom: "".to_string() }, - authzpp: AuthzppAddresses::default(), - destination_projects: MigalooDestinationProjectAddresses::default(), - }, - }, - ) - .unwrap(); - - app.execute_multi( - delegator_addr.clone(), - vec![ - CosmosMsg::Staking(cosmwasm_std::StakingMsg::Delegate { - validator: start_validator_addr.to_string(), - amount: coin(100_000, "ubtc"), - }), - // create_generic_grant_msg( - // delegator_addr.to_string(), - // &contract.addr(), - // GenericAuthorizationType::Delegation, - // ), - // create_generic_grant_msg( - // delegator_addr.to_string(), - // &contract.addr(), - // GenericAuthorizationType::WithdrawDelegatorRewards, - // ), - ], - ) - .unwrap(); - - assert_eq!(app.wrap().query_all_balances(&delegator_addr).unwrap(), &[]); - assert_eq!( - app.wrap().query_all_delegations(delegator_addr.clone()).unwrap(), - vec![Delegation { - delegator: delegator_addr.clone(), - validator: start_validator_addr.to_string(), - amount: coin(100_000, "ubtc".to_string()) - }] - ); - - app.update_block(next_block); - - // let err = contract - // .compound_funds( - // &mut app, - // &delegator_addr.clone(), - // CompoundPrefs { - // relative: vec![DestinationAction { - // destination: DestinationProject::JunoStaking { - // validator_address: end_validator_addr.to_string(), - // }, - // amount: RelativeQty { - // quantity: 1_000_000_000_000_000_000u128.into(), - // }, - // }], - // }, - // delegator_addr.to_string(), - // ) - // .unwrap_err(); - - // println!("{}", err) -} +// #[test] +// fn instantiate_with_defaults() { +// let sender = Addr::unchecked("sender"); + +// let mut app = App::new(|_router, _api, _storage| { +// // router.bank +// // .init_balance(storage, &sender, coins(100_000, "ubtc")) +// // .unwrap(); +// }); + +// let contract_id = app.store_code(auctioning_contract()); + +// let _contract = OutpostContract::instantiate( +// &mut app, +// contract_id, +// &sender, +// None, +// "Test Outpost", +// // &coins(100_000, "ubtc"), +// &InstantiateMsg { +// admin: None, +// project_addresses: ContractAddresses { +// staking_denom: "ubtc".to_string(), +// take_rate_addr: "".to_string(), +// usdc: AssetInfo::NativeToken { denom: "".to_string() }, +// authzpp: AuthzppAddresses::default(), +// destination_projects: MigalooDestinationProjectAddresses::default(), +// }, +// }, +// ) +// .unwrap(); + +// assert_eq!(app.wrap().query_all_balances(&sender).unwrap(), &[]) +// } + +// #[test] +// fn validator_only_compounding() { +// let contract_admin_addr = Addr::unchecked("admin_wallet"); +// let delegator_addr = Addr::unchecked("delegator_wallet"); +// let start_validator_addr = Addr::unchecked("validator_1"); +// let end_validator_addr = Addr::unchecked("validator_2"); + +// let mut app = App::new(|router, api, storage| { +// router +// .bank +// .init_balance(storage, &delegator_addr, coins(100_000, "ubtc")) +// .unwrap(); + +// router +// .staking +// .setup( +// storage, +// StakingInfo { +// bonded_denom: "ubtc".to_string(), +// unbonding_time: 10u64, +// apr: Decimal::percent(1000), +// }, +// ) +// .unwrap(); + +// router +// .staking +// .add_validator( +// api, +// storage, +// &mock_env().block, +// Validator { +// address: start_validator_addr.to_string(), +// commission: Decimal::one(), +// max_commission: Decimal::one(), +// max_change_rate: Decimal::one(), +// }, +// ) +// .unwrap(); + +// router +// .staking +// .add_validator( +// api, +// storage, +// &mock_env().block, +// Validator { +// address: end_validator_addr.to_string(), +// commission: Decimal::one(), +// max_commission: Decimal::one(), +// max_change_rate: Decimal::one(), +// }, +// ) +// .unwrap(); +// }); + +// let contract_id = app.store_code(auctioning_contract()); + +// let _contract = OutpostContract::instantiate( +// &mut app, +// contract_id, +// &contract_admin_addr, +// None, +// "Test Outpost", +// &InstantiateMsg { +// admin: None, +// project_addresses: ContractAddresses { +// staking_denom: "ubtc".to_string(), +// take_rate_addr: "".to_string(), +// usdc: AssetInfo::NativeToken { denom: "".to_string() }, +// authzpp: AuthzppAddresses::default(), +// destination_projects: MigalooDestinationProjectAddresses::default(), +// }, +// }, +// ) +// .unwrap(); + +// app.execute_multi( +// delegator_addr.clone(), +// vec![ +// CosmosMsg::Staking(cosmwasm_std::StakingMsg::Delegate { +// validator: start_validator_addr.to_string(), +// amount: coin(100_000, "ubtc"), +// }), +// // create_generic_grant_msg( +// // delegator_addr.to_string(), +// // &contract.addr(), +// // GenericAuthorizationType::Delegation, +// // ), +// // create_generic_grant_msg( +// // delegator_addr.to_string(), +// // &contract.addr(), +// // GenericAuthorizationType::WithdrawDelegatorRewards, +// // ), +// ], +// ) +// .unwrap(); + +// assert_eq!(app.wrap().query_all_balances(&delegator_addr).unwrap(), &[]); +// assert_eq!( +// app.wrap().query_all_delegations(delegator_addr.clone()).unwrap(), +// vec![Delegation { +// delegator: delegator_addr.clone(), +// validator: start_validator_addr.to_string(), +// amount: coin(100_000, "ubtc".to_string()) +// }] +// ); + +// app.update_block(next_block); + +// // let err = contract +// // .compound_funds( +// // &mut app, +// // &delegator_addr.clone(), +// // CompoundPrefs { +// // relative: vec![DestinationAction { +// // destination: DestinationProject::JunoStaking { +// // validator_address: end_validator_addr.to_string(), +// // }, +// // amount: RelativeQty { +// // quantity: 1_000_000_000_000_000_000u128.into(), +// // }, +// // }], +// // }, +// // delegator_addr.to_string(), +// // ) +// // .unwrap_err(); + +// // println!("{}", err) +// } diff --git a/contracts/migaloodca/src/tests/multitest.rs b/contracts/migaloodca/src/tests/multitest.rs index b1518d5..c0c42ea 100644 --- a/contracts/migaloodca/src/tests/multitest.rs +++ b/contracts/migaloodca/src/tests/multitest.rs @@ -1,11 +1,9 @@ use cosmwasm_std::{Addr, StdResult}; use cw_multi_test::{App, ContractWrapper, Executor}; -use migaloo_destinations::comp_prefs::MigalooCompPrefs; use crate::{ contract::{execute, instantiate, query}, - msg::{ExecuteMsg, InstantiateMsg, MigaloodcaCompoundPrefs}, - ContractError, + msg::InstantiateMsg, }; pub struct OutpostContract(Addr); diff --git a/contracts/migaloostake/Cargo.toml b/contracts/migaloostake/Cargo.toml index 459e0c2..95f2465 100644 --- a/contracts/migaloostake/Cargo.toml +++ b/contracts/migaloostake/Cargo.toml @@ -1,8 +1,8 @@ [package] name = "ymos-migaloostake-outpost" authors = ["Marc "] -version = { workspace = true } -edition = { workspace = true } +version = "0.1.0" +edition = "2021" description = "Yieldmos Migaloo Staking Outpost" exclude = [ diff --git a/contracts/migaloostake/src/execute.rs b/contracts/migaloostake/src/execute.rs index 3c4e55a..8f0a9b1 100644 --- a/contracts/migaloostake/src/execute.rs +++ b/contracts/migaloostake/src/execute.rs @@ -1,9 +1,6 @@ use cosmwasm_std::{coin, Addr, Attribute, Decimal, Deps, DepsMut, Env, Event, MessageInfo, Response, SubMsg}; use migaloo_destinations::{ - comp_prefs::{ - DaoDaoStakingInfo, LsdMintAction, MUsdcAction, MigalooCompPrefs, - MigalooDestinationProject, MigalooVault, - }, + comp_prefs::{DaoDaoStakingInfo, LsdMintAction, MUsdcAction, MigalooCompPrefs, MigalooDestinationProject, MigalooVault}, dest_project_gen::{ burn_whale_msgs, deposit_ginkou_usdc_msgs, ecosystem_stake_msgs, eris_amp_vault_msgs, eris_arb_vault_msgs, mint_or_buy_whale_lsd_msgs, query_ginkou_musdc_mint, @@ -12,12 +9,10 @@ use migaloo_destinations::{ use outpost_utils::{ comp_prefs::DestinationAction, helpers::{calculate_compound_amounts, is_authorized_compounder, prefs_sum_to_one, sum_coins, DestProjectMsgs}, - msg_gen::{create_exec_msg}, + msg_gen::create_exec_msg, }; use std::iter; -use terraswap_helpers::terraswap_swap::{ - create_terraswap_pool_swap_msg_with_simulation, -}; +use terraswap_helpers::terraswap_swap::create_terraswap_pool_swap_msg_with_simulation; use white_whale::pool_network::asset::{Asset, AssetInfo}; use withdraw_rewards_tax_grant::{client::WithdrawRewardsTaxClient, msg::SimulateExecuteResponse}; @@ -27,9 +22,7 @@ use crate::{ state::{ADMIN, AUTHORIZED_ADDRS}, ContractError, }; -use sail_destinations::{ - dest_project_gen::{racoon_bet_msgs, spark_ibc_msgs, white_whale_satellite_msgs}, -}; +use sail_destinations::dest_project_gen::{racoon_bet_msgs, spark_ibc_msgs, white_whale_satellite_msgs}; use universal_destinations::dest_project_gen::{daodao_staking_msg, native_staking_msg}; pub fn compound( diff --git a/contracts/migaloostake/src/msg.rs b/contracts/migaloostake/src/msg.rs index bfa246e..89b5558 100644 --- a/contracts/migaloostake/src/msg.rs +++ b/contracts/migaloostake/src/msg.rs @@ -110,19 +110,16 @@ impl ContractAddresses { #[derive(Default)] pub struct AuthzppAddresses { pub withdraw_tax: String, - // pub allowlist_send: String, } #[cw_serde] pub struct AuthzppAddrs { pub withdraw_tax: Addr, - // pub allowlist_send: Addr, } impl AuthzppAddresses { pub fn validate_addrs(&self, api: &dyn Api) -> Result { Ok(AuthzppAddrs { withdraw_tax: api.addr_validate(&self.withdraw_tax)?, - // allowlist_send: api.addr_validate(&self.allowlist_send)?, }) } } diff --git a/contracts/migaloostake/src/queries.rs b/contracts/migaloostake/src/queries.rs index 7dc60f5..dedbe9b 100644 --- a/contracts/migaloostake/src/queries.rs +++ b/contracts/migaloostake/src/queries.rs @@ -1,13 +1,11 @@ use cosmwasm_std::{Addr, Decimal, Deps, StdResult, Timestamp}; use cw_grant_spec::grantable_trait::{dedupe_grant_reqs, GrantStructure, Grantable}; -use cw_grant_spec::grants::{ - GrantBase, GrantRequirement, RevokeRequirement, -}; +use cw_grant_spec::grants::{GrantBase, GrantRequirement, RevokeRequirement}; use migaloo_destinations::comp_prefs::MigalooDestinationProject; use migaloo_destinations::grants::furnace_grant; use universal_destinations::grants::native_staking_grant; -use white_whale::pool_network::asset::{AssetInfo}; +use white_whale::pool_network::asset::AssetInfo; use withdraw_rewards_tax_grant::msg::GrantSpecData; use crate::msg::{CompPrefsWithAddresses, MigaloostakeCompoundPrefs, QueryMsg}; diff --git a/contracts/migaloostake/src/tests/integration_tests.rs b/contracts/migaloostake/src/tests/integration_tests.rs index c3e1c65..ddded0c 100644 --- a/contracts/migaloostake/src/tests/integration_tests.rs +++ b/contracts/migaloostake/src/tests/integration_tests.rs @@ -15,168 +15,168 @@ fn auctioning_contract() -> Box> { Box::new(contract) } -#[test] -fn instantiate_with_defaults() { - let sender = Addr::unchecked("sender"); - - let mut app = App::new(|_router, _api, _storage| { - // router.bank - // .init_balance(storage, &sender, coins(100_000, "ubtc")) - // .unwrap(); - }); - - let contract_id = app.store_code(auctioning_contract()); - - let _contract = OutpostContract::instantiate( - &mut app, - contract_id, - &sender, - None, - "Test Outpost", - // &coins(100_000, "ubtc"), - &InstantiateMsg { - admin: None, - project_addresses: ContractAddresses { - staking_denom: "ubtc".to_string(), - take_rate_addr: "".to_string(), - usdc: AssetInfo::NativeToken { denom: "".to_string() }, - authzpp: AuthzppAddresses::default(), - destination_projects: MigalooDestinationProjectAddresses::default(), - }, - }, - ) - .unwrap(); - - assert_eq!(app.wrap().query_all_balances(&sender).unwrap(), &[]) -} - -#[test] -fn validator_only_compounding() { - let contract_admin_addr = Addr::unchecked("admin_wallet"); - let delegator_addr = Addr::unchecked("delegator_wallet"); - let start_validator_addr = Addr::unchecked("validator_1"); - let end_validator_addr = Addr::unchecked("validator_2"); - - let mut app = App::new(|router, api, storage| { - router - .bank - .init_balance(storage, &delegator_addr, coins(100_000, "ubtc")) - .unwrap(); - - router - .staking - .setup( - storage, - StakingInfo { - bonded_denom: "ubtc".to_string(), - unbonding_time: 10u64, - apr: Decimal::percent(1000), - }, - ) - .unwrap(); - - router - .staking - .add_validator( - api, - storage, - &mock_env().block, - Validator { - address: start_validator_addr.to_string(), - commission: Decimal::one(), - max_commission: Decimal::one(), - max_change_rate: Decimal::one(), - }, - ) - .unwrap(); - - router - .staking - .add_validator( - api, - storage, - &mock_env().block, - Validator { - address: end_validator_addr.to_string(), - commission: Decimal::one(), - max_commission: Decimal::one(), - max_change_rate: Decimal::one(), - }, - ) - .unwrap(); - }); - - let contract_id = app.store_code(auctioning_contract()); - - let _contract = OutpostContract::instantiate( - &mut app, - contract_id, - &contract_admin_addr, - None, - "Test Outpost", - &InstantiateMsg { - admin: None, - project_addresses: ContractAddresses { - staking_denom: "ubtc".to_string(), - take_rate_addr: "".to_string(), - usdc: AssetInfo::NativeToken { denom: "".to_string() }, - authzpp: AuthzppAddresses::default(), - destination_projects: MigalooDestinationProjectAddresses::default(), - }, - }, - ) - .unwrap(); - - app.execute_multi( - delegator_addr.clone(), - vec![ - CosmosMsg::Staking(cosmwasm_std::StakingMsg::Delegate { - validator: start_validator_addr.to_string(), - amount: coin(100_000, "ubtc"), - }), - // create_generic_grant_msg( - // delegator_addr.to_string(), - // &contract.addr(), - // GenericAuthorizationType::Delegation, - // ), - // create_generic_grant_msg( - // delegator_addr.to_string(), - // &contract.addr(), - // GenericAuthorizationType::WithdrawDelegatorRewards, - // ), - ], - ) - .unwrap(); - - assert_eq!(app.wrap().query_all_balances(&delegator_addr).unwrap(), &[]); - assert_eq!( - app.wrap().query_all_delegations(delegator_addr.clone()).unwrap(), - vec![Delegation { - delegator: delegator_addr.clone(), - validator: start_validator_addr.to_string(), - amount: coin(100_000, "ubtc".to_string()) - }] - ); - - app.update_block(next_block); - - // let err = contract - // .compound_funds( - // &mut app, - // &delegator_addr.clone(), - // CompoundPrefs { - // relative: vec![DestinationAction { - // destination: DestinationProject::JunoStaking { - // validator_address: end_validator_addr.to_string(), - // }, - // amount: RelativeQty { - // quantity: 1_000_000_000_000_000_000u128.into(), - // }, - // }], - // }, - // delegator_addr.to_string(), - // ) - // .unwrap_err(); - - // println!("{}", err) -} +// #[test] +// fn instantiate_with_defaults() { +// let sender = Addr::unchecked("sender"); + +// let mut app = App::new(|_router, _api, _storage| { +// // router.bank +// // .init_balance(storage, &sender, coins(100_000, "ubtc")) +// // .unwrap(); +// }); + +// let contract_id = app.store_code(auctioning_contract()); + +// let _contract = OutpostContract::instantiate( +// &mut app, +// contract_id, +// &sender, +// None, +// "Test Outpost", +// // &coins(100_000, "ubtc"), +// &InstantiateMsg { +// admin: None, +// project_addresses: ContractAddresses { +// staking_denom: "ubtc".to_string(), +// take_rate_addr: "".to_string(), +// usdc: AssetInfo::NativeToken { denom: "".to_string() }, +// authzpp: AuthzppAddresses::default(), +// destination_projects: MigalooDestinationProjectAddresses::default(), +// }, +// }, +// ) +// .unwrap(); + +// assert_eq!(app.wrap().query_all_balances(&sender).unwrap(), &[]) +// } + +// #[test] +// fn validator_only_compounding() { +// let contract_admin_addr = Addr::unchecked("admin_wallet"); +// let delegator_addr = Addr::unchecked("delegator_wallet"); +// let start_validator_addr = Addr::unchecked("validator_1"); +// let end_validator_addr = Addr::unchecked("validator_2"); + +// let mut app = App::new(|router, api, storage| { +// router +// .bank +// .init_balance(storage, &delegator_addr, coins(100_000, "ubtc")) +// .unwrap(); + +// router +// .staking +// .setup( +// storage, +// StakingInfo { +// bonded_denom: "ubtc".to_string(), +// unbonding_time: 10u64, +// apr: Decimal::percent(1000), +// }, +// ) +// .unwrap(); + +// router +// .staking +// .add_validator( +// api, +// storage, +// &mock_env().block, +// Validator { +// address: start_validator_addr.to_string(), +// commission: Decimal::one(), +// max_commission: Decimal::one(), +// max_change_rate: Decimal::one(), +// }, +// ) +// .unwrap(); + +// router +// .staking +// .add_validator( +// api, +// storage, +// &mock_env().block, +// Validator { +// address: end_validator_addr.to_string(), +// commission: Decimal::one(), +// max_commission: Decimal::one(), +// max_change_rate: Decimal::one(), +// }, +// ) +// .unwrap(); +// }); + +// let contract_id = app.store_code(auctioning_contract()); + +// let _contract = OutpostContract::instantiate( +// &mut app, +// contract_id, +// &contract_admin_addr, +// None, +// "Test Outpost", +// &InstantiateMsg { +// admin: None, +// project_addresses: ContractAddresses { +// staking_denom: "ubtc".to_string(), +// take_rate_addr: "".to_string(), +// usdc: AssetInfo::NativeToken { denom: "".to_string() }, +// authzpp: AuthzppAddresses::default(), +// destination_projects: MigalooDestinationProjectAddresses::default(), +// }, +// }, +// ) +// .unwrap(); + +// app.execute_multi( +// delegator_addr.clone(), +// vec![ +// CosmosMsg::Staking(cosmwasm_std::StakingMsg::Delegate { +// validator: start_validator_addr.to_string(), +// amount: coin(100_000, "ubtc"), +// }), +// // create_generic_grant_msg( +// // delegator_addr.to_string(), +// // &contract.addr(), +// // GenericAuthorizationType::Delegation, +// // ), +// // create_generic_grant_msg( +// // delegator_addr.to_string(), +// // &contract.addr(), +// // GenericAuthorizationType::WithdrawDelegatorRewards, +// // ), +// ], +// ) +// .unwrap(); + +// assert_eq!(app.wrap().query_all_balances(&delegator_addr).unwrap(), &[]); +// assert_eq!( +// app.wrap().query_all_delegations(delegator_addr.clone()).unwrap(), +// vec![Delegation { +// delegator: delegator_addr.clone(), +// validator: start_validator_addr.to_string(), +// amount: coin(100_000, "ubtc".to_string()) +// }] +// ); + +// app.update_block(next_block); + +// // let err = contract +// // .compound_funds( +// // &mut app, +// // &delegator_addr.clone(), +// // CompoundPrefs { +// // relative: vec![DestinationAction { +// // destination: DestinationProject::JunoStaking { +// // validator_address: end_validator_addr.to_string(), +// // }, +// // amount: RelativeQty { +// // quantity: 1_000_000_000_000_000_000u128.into(), +// // }, +// // }], +// // }, +// // delegator_addr.to_string(), +// // ) +// // .unwrap_err(); + +// // println!("{}", err) +// } diff --git a/contracts/osmodca/Cargo.toml b/contracts/osmodca/Cargo.toml index 43f1343..0b7b54f 100644 --- a/contracts/osmodca/Cargo.toml +++ b/contracts/osmodca/Cargo.toml @@ -1,8 +1,8 @@ [package] name = "ymos-osmodca-outpost" authors = ["Marc "] -version = { workspace = true } -edition = { workspace = true } +version = "1.0.0" +edition = "2021" description = "Yieldmos Juno DCAing Outpost" exclude = [ diff --git a/contracts/osmodca/src/execute.rs b/contracts/osmodca/src/execute.rs index a76eb09..c2247a1 100644 --- a/contracts/osmodca/src/execute.rs +++ b/contracts/osmodca/src/execute.rs @@ -21,9 +21,9 @@ use outpost_utils::{ }, msg_gen::create_exec_msg, }; -use sail_destinations::dest_project_gen::{mint_eris_lsd_msgs}; +use sail_destinations::dest_project_gen::mint_eris_lsd_msgs; -use universal_destinations::dest_project_gen::{send_tokens_msgs}; +use universal_destinations::dest_project_gen::send_tokens_msgs; use white_whale::pool_network::asset::{Asset, AssetInfo}; use crate::{ diff --git a/contracts/osmodca/src/msg.rs b/contracts/osmodca/src/msg.rs index 7e0624e..7f2855b 100644 --- a/contracts/osmodca/src/msg.rs +++ b/contracts/osmodca/src/msg.rs @@ -95,22 +95,13 @@ pub struct ContractAddresses { #[cw_serde] #[derive(Default)] -pub struct AuthzppAddresses { - // pub withdraw_tax: String, - // pub allowlist_send: String, -} +pub struct AuthzppAddresses {} #[cw_serde] -pub struct AuthzppAddrs { - // pub withdraw_tax: Addr, - // pub allowlist_send: Addr, -} +pub struct AuthzppAddrs {} impl AuthzppAddresses { pub fn validate_addrs(&self, _api: &dyn Api) -> Result { - Ok(AuthzppAddrs { - // withdraw_tax: api.addr_validate(&self.withdraw_tax)?, - // allowlist_send: api.addr_validate(&self.allowlist_send)?, - }) + Ok(AuthzppAddrs {}) } } diff --git a/contracts/osmodca/src/queries.rs b/contracts/osmodca/src/queries.rs index 924720f..befdbda 100644 --- a/contracts/osmodca/src/queries.rs +++ b/contracts/osmodca/src/queries.rs @@ -5,9 +5,7 @@ use crate::{ }; use cosmwasm_std::{Addr, Coin, Decimal, Deps, StdResult, Timestamp, Uint128}; use cw_grant_spec::grantable_trait::{dedupe_grant_reqs, GrantStructure, Grantable}; -use cw_grant_spec::grants::{ - AuthorizationType, GrantBase, GrantRequirement, RevokeRequirement, -}; +use cw_grant_spec::grants::{AuthorizationType, GrantBase, GrantRequirement, RevokeRequirement}; use osmosis_destinations::comp_prefs::{OsmosisDestinationProject, OsmosisLsd, OsmosisPoolSettings}; use osmosis_destinations::grants::{membrane_stake_grant, mint_milk_tia_grant, stake_ion_grants}; use osmosis_helpers::osmosis_lp::{join_cl_pool_grants, join_classic_pool_grants}; diff --git a/contracts/osmodca/src/tests/integration_tests.rs b/contracts/osmodca/src/tests/integration_tests.rs index c58e121..20b1a6e 100644 --- a/contracts/osmodca/src/tests/integration_tests.rs +++ b/contracts/osmodca/src/tests/integration_tests.rs @@ -13,166 +13,166 @@ fn auctioning_contract() -> Box> { Box::new(contract) } -#[test] -fn instantiate_with_defaults() { - let sender = Addr::unchecked("sender"); - - let mut app = App::new(|_router, _api, _storage| { - // router.bank - // .init_balance(storage, &sender, coins(100_000, "ubtc")) - // .unwrap(); - }); - - let contract_id = app.store_code(auctioning_contract()); - - let _contract = OutpostContract::instantiate( - &mut app, - contract_id, - &sender, - None, - "Test Outpost", - // &coins(100_000, "ubtc"), - &InstantiateMsg { - admin: None, - project_addresses: ContractAddresses { - take_rate_addr: "".to_string(), - - authzpp: AuthzppAddresses::default(), - destination_projects: OsmosisDestinationProjectAddresses::default(), - }, - }, - ) - .unwrap(); - - assert_eq!(app.wrap().query_all_balances(&sender).unwrap(), &[]) -} - -#[test] -fn validator_only_compounding() { - let contract_admin_addr = Addr::unchecked("admin_wallet"); - let delegator_addr = Addr::unchecked("delegator_wallet"); - let start_validator_addr = Addr::unchecked("validator_1"); - let end_validator_addr = Addr::unchecked("validator_2"); - - let mut app = App::new(|router, api, storage| { - router - .bank - .init_balance(storage, &delegator_addr, coins(100_000, "ubtc")) - .unwrap(); - - router - .staking - .setup( - storage, - StakingInfo { - bonded_denom: "ubtc".to_string(), - unbonding_time: 10u64, - apr: Decimal::percent(1000), - }, - ) - .unwrap(); - - router - .staking - .add_validator( - api, - storage, - &mock_env().block, - Validator { - address: start_validator_addr.to_string(), - commission: Decimal::one(), - max_commission: Decimal::one(), - max_change_rate: Decimal::one(), - }, - ) - .unwrap(); - - router - .staking - .add_validator( - api, - storage, - &mock_env().block, - Validator { - address: end_validator_addr.to_string(), - commission: Decimal::one(), - max_commission: Decimal::one(), - max_change_rate: Decimal::one(), - }, - ) - .unwrap(); - }); - - let contract_id = app.store_code(auctioning_contract()); - - let _contract = OutpostContract::instantiate( - &mut app, - contract_id, - &contract_admin_addr, - None, - "Test Outpost", - &InstantiateMsg { - admin: None, - project_addresses: ContractAddresses { - take_rate_addr: "".to_string(), - - authzpp: AuthzppAddresses::default(), - destination_projects: OsmosisDestinationProjectAddresses::default(), - }, - }, - ) - .unwrap(); - - app.execute_multi( - delegator_addr.clone(), - vec![ - CosmosMsg::Staking(cosmwasm_std::StakingMsg::Delegate { - validator: start_validator_addr.to_string(), - amount: coin(100_000, "ubtc"), - }), - // create_generic_grant_msg( - // delegator_addr.to_string(), - // &contract.addr(), - // GenericAuthorizationType::Delegation, - // ), - // create_generic_grant_msg( - // delegator_addr.to_string(), - // &contract.addr(), - // GenericAuthorizationType::WithdrawDelegatorRewards, - // ), - ], - ) - .unwrap(); - - assert_eq!(app.wrap().query_all_balances(&delegator_addr).unwrap(), &[]); - assert_eq!( - app.wrap().query_all_delegations(delegator_addr.clone()).unwrap(), - vec![Delegation { - delegator: delegator_addr.clone(), - validator: start_validator_addr.to_string(), - amount: coin(100_000, "ubtc".to_string()) - }] - ); - - app.update_block(next_block); - - // let err = contract - // .compound_funds( - // &mut app, - // &delegator_addr.clone(), - // CompoundPrefs { - // relative: vec![DestinationAction { - // destination: DestinationProject::JunoStaking { - // validator_address: end_validator_addr.to_string(), - // }, - // amount: RelativeQty { - // quantity: 1_000_000_000_000_000_000u128.into(), - // }, - // }], - // }, - // delegator_addr.to_string(), - // ) - // .unwrap_err(); - - // println!("{}", err) -} +// #[test] +// fn instantiate_with_defaults() { +// let sender = Addr::unchecked("sender"); + +// let mut app = App::new(|_router, _api, _storage| { +// // router.bank +// // .init_balance(storage, &sender, coins(100_000, "ubtc")) +// // .unwrap(); +// }); + +// let contract_id = app.store_code(auctioning_contract()); + +// let _contract = OutpostContract::instantiate( +// &mut app, +// contract_id, +// &sender, +// None, +// "Test Outpost", +// // &coins(100_000, "ubtc"), +// &InstantiateMsg { +// admin: None, +// project_addresses: ContractAddresses { +// take_rate_addr: "".to_string(), + +// authzpp: AuthzppAddresses::default(), +// destination_projects: OsmosisDestinationProjectAddresses::default(), +// }, +// }, +// ) +// .unwrap(); + +// assert_eq!(app.wrap().query_all_balances(&sender).unwrap(), &[]) +// } + +// #[test] +// fn validator_only_compounding() { +// let contract_admin_addr = Addr::unchecked("admin_wallet"); +// let delegator_addr = Addr::unchecked("delegator_wallet"); +// let start_validator_addr = Addr::unchecked("validator_1"); +// let end_validator_addr = Addr::unchecked("validator_2"); + +// let mut app = App::new(|router, api, storage| { +// router +// .bank +// .init_balance(storage, &delegator_addr, coins(100_000, "ubtc")) +// .unwrap(); + +// router +// .staking +// .setup( +// storage, +// StakingInfo { +// bonded_denom: "ubtc".to_string(), +// unbonding_time: 10u64, +// apr: Decimal::percent(1000), +// }, +// ) +// .unwrap(); + +// router +// .staking +// .add_validator( +// api, +// storage, +// &mock_env().block, +// Validator { +// address: start_validator_addr.to_string(), +// commission: Decimal::one(), +// max_commission: Decimal::one(), +// max_change_rate: Decimal::one(), +// }, +// ) +// .unwrap(); + +// router +// .staking +// .add_validator( +// api, +// storage, +// &mock_env().block, +// Validator { +// address: end_validator_addr.to_string(), +// commission: Decimal::one(), +// max_commission: Decimal::one(), +// max_change_rate: Decimal::one(), +// }, +// ) +// .unwrap(); +// }); + +// let contract_id = app.store_code(auctioning_contract()); + +// let _contract = OutpostContract::instantiate( +// &mut app, +// contract_id, +// &contract_admin_addr, +// None, +// "Test Outpost", +// &InstantiateMsg { +// admin: None, +// project_addresses: ContractAddresses { +// take_rate_addr: "".to_string(), + +// authzpp: AuthzppAddresses::default(), +// destination_projects: OsmosisDestinationProjectAddresses::default(), +// }, +// }, +// ) +// .unwrap(); + +// app.execute_multi( +// delegator_addr.clone(), +// vec![ +// CosmosMsg::Staking(cosmwasm_std::StakingMsg::Delegate { +// validator: start_validator_addr.to_string(), +// amount: coin(100_000, "ubtc"), +// }), +// // create_generic_grant_msg( +// // delegator_addr.to_string(), +// // &contract.addr(), +// // GenericAuthorizationType::Delegation, +// // ), +// // create_generic_grant_msg( +// // delegator_addr.to_string(), +// // &contract.addr(), +// // GenericAuthorizationType::WithdrawDelegatorRewards, +// // ), +// ], +// ) +// .unwrap(); + +// assert_eq!(app.wrap().query_all_balances(&delegator_addr).unwrap(), &[]); +// assert_eq!( +// app.wrap().query_all_delegations(delegator_addr.clone()).unwrap(), +// vec![Delegation { +// delegator: delegator_addr.clone(), +// validator: start_validator_addr.to_string(), +// amount: coin(100_000, "ubtc".to_string()) +// }] +// ); + +// app.update_block(next_block); + +// // let err = contract +// // .compound_funds( +// // &mut app, +// // &delegator_addr.clone(), +// // CompoundPrefs { +// // relative: vec![DestinationAction { +// // destination: DestinationProject::JunoStaking { +// // validator_address: end_validator_addr.to_string(), +// // }, +// // amount: RelativeQty { +// // quantity: 1_000_000_000_000_000_000u128.into(), +// // }, +// // }], +// // }, +// // delegator_addr.to_string(), +// // ) +// // .unwrap_err(); + +// // println!("{}", err) +// } diff --git a/contracts/osmostake/Cargo.toml b/contracts/osmostake/Cargo.toml index b01ee47..c720ce8 100644 --- a/contracts/osmostake/Cargo.toml +++ b/contracts/osmostake/Cargo.toml @@ -1,8 +1,8 @@ [package] name = "ymos-osmostake-outpost" authors = ["Marc "] -version = { workspace = true } -edition = { workspace = true } +version = "1.0.0" +edition = "2021" description = "Yieldmos Juno Staking Outpost" exclude = [ diff --git a/contracts/osmostake/src/execute.rs b/contracts/osmostake/src/execute.rs index 928dbf0..aa7862c 100644 --- a/contracts/osmostake/src/execute.rs +++ b/contracts/osmostake/src/execute.rs @@ -1,4 +1,4 @@ -use std::{iter}; +use std::iter; use cosmwasm_std::{coin, Addr, Attribute, Decimal, Deps, DepsMut, Env, Event, MessageInfo, Response, SubMsg}; use osmosis_destinations::{ @@ -7,10 +7,7 @@ use osmosis_destinations::{ pools::MultipleStoredPools, }; use osmosis_helpers::{ - osmosis_lp::{ - gen_join_cl_pool_single_sided_msgs, - gen_join_classic_pool_single_sided_msgs, - }, + osmosis_lp::{gen_join_cl_pool_single_sided_msgs, gen_join_classic_pool_single_sided_msgs}, osmosis_swap::{ generate_known_to_known_swap_and_sim_msg, generate_known_to_unknown_route, generate_known_to_unknown_swap_and_sim_msg, generate_swap, OsmosisRoutePools, @@ -19,13 +16,10 @@ use osmosis_helpers::{ use outpost_utils::{ comp_prefs::DestinationAction, - helpers::{ - calculate_compound_amounts, is_authorized_compounder, prefs_sum_to_one, sum_coins, - DestProjectMsgs, - }, + helpers::{calculate_compound_amounts, is_authorized_compounder, prefs_sum_to_one, sum_coins, DestProjectMsgs}, msg_gen::create_exec_msg, }; -use sail_destinations::dest_project_gen::{mint_eris_lsd_msgs}; +use sail_destinations::dest_project_gen::mint_eris_lsd_msgs; use universal_destinations::dest_project_gen::{native_staking_msg, send_tokens_msgs}; use white_whale::pool_network::asset::{Asset, AssetInfo}; diff --git a/contracts/osmostake/src/msg.rs b/contracts/osmostake/src/msg.rs index 58fe4fd..b711586 100644 --- a/contracts/osmostake/src/msg.rs +++ b/contracts/osmostake/src/msg.rs @@ -6,7 +6,6 @@ use osmosis_destinations::comp_prefs::{ OsmosisCompPrefs, OsmosisDestinationProjectAddresses, OsmosisDestinationProjectAddrs, }; - use crate::ContractError; #[cw_serde] @@ -90,19 +89,16 @@ pub struct ContractAddresses { #[derive(Default)] pub struct AuthzppAddresses { pub withdraw_tax: String, - // pub allowlist_send: String, } #[cw_serde] pub struct AuthzppAddrs { pub withdraw_tax: Addr, - // pub allowlist_send: Addr, } impl AuthzppAddresses { pub fn validate_addrs(&self, api: &dyn Api) -> Result { Ok(AuthzppAddrs { withdraw_tax: api.addr_validate(&self.withdraw_tax)?, - // allowlist_send: api.addr_validate(&self.allowlist_send)?, }) } } diff --git a/contracts/osmostake/src/queries.rs b/contracts/osmostake/src/queries.rs index d11452e..9e816e0 100644 --- a/contracts/osmostake/src/queries.rs +++ b/contracts/osmostake/src/queries.rs @@ -6,9 +6,7 @@ use crate::{ use cosmwasm_std::{Addr, Decimal, Deps, StdResult, Timestamp}; use cw_grant_spec::grantable_trait::{dedupe_grant_reqs, GrantStructure, Grantable}; -use cw_grant_spec::grants::{ - AuthorizationType, GrantBase, GrantRequirement, RevokeRequirement, -}; +use cw_grant_spec::grants::{AuthorizationType, GrantBase, GrantRequirement, RevokeRequirement}; use osmosis_destinations::comp_prefs::{OsmosisDestinationProject, OsmosisLsd, OsmosisPoolSettings}; use osmosis_destinations::grants::{membrane_stake_grant, mint_milk_tia_grant, stake_ion_grants}; use osmosis_helpers::osmosis_lp::{join_cl_pool_grants, join_classic_pool_grants}; @@ -18,7 +16,6 @@ use universal_destinations::grants::{native_send_token, native_staking_grant}; use white_whale::pool_network::asset::AssetInfo; use withdraw_rewards_tax_grant::msg::GrantSpecData; - pub fn query_version() -> VersionResponse { VersionResponse { version: env!("CARGO_PKG_VERSION").to_string(), @@ -47,7 +44,10 @@ impl Grantable for QueryMsg { grant_contract: outpost_contract, grant_data: CompPrefsWithAddresses { - comp_prefs: OsmostakeCompoundPrefs { comp_prefs: _, tax_fee, .. }, + comp_prefs: + OsmostakeCompoundPrefs { + comp_prefs: _, tax_fee, .. + }, project_addresses, }, .. diff --git a/contracts/osmostake/src/tests/integration_tests.rs b/contracts/osmostake/src/tests/integration_tests.rs index 0a8cfc9..9a1f466 100644 --- a/contracts/osmostake/src/tests/integration_tests.rs +++ b/contracts/osmostake/src/tests/integration_tests.rs @@ -13,166 +13,166 @@ fn auctioning_contract() -> Box> { Box::new(contract) } -#[test] -fn instantiate_with_defaults() { - let sender = Addr::unchecked("sender"); - - let mut app = App::new(|_router, _api, _storage| { - // router.bank - // .init_balance(storage, &sender, coins(100_000, "ubtc")) - // .unwrap(); - }); - - let contract_id = app.store_code(auctioning_contract()); - - let _contract = OutpostContract::instantiate( - &mut app, - contract_id, - &sender, - None, - "Test Outpost", - // &coins(100_000, "ubtc"), - &InstantiateMsg { - admin: None, - project_addresses: ContractAddresses { - take_rate_addr: "".to_string(), - staking_denom: "uosmo".to_string(), - authzpp: AuthzppAddresses::default(), - destination_projects: OsmosisDestinationProjectAddresses::default(), - }, - }, - ) - .unwrap(); - - assert_eq!(app.wrap().query_all_balances(&sender).unwrap(), &[]) -} - -#[test] -fn validator_only_compounding() { - let contract_admin_addr = Addr::unchecked("admin_wallet"); - let delegator_addr = Addr::unchecked("delegator_wallet"); - let start_validator_addr = Addr::unchecked("validator_1"); - let end_validator_addr = Addr::unchecked("validator_2"); - - let mut app = App::new(|router, api, storage| { - router - .bank - .init_balance(storage, &delegator_addr, coins(100_000, "ubtc")) - .unwrap(); - - router - .staking - .setup( - storage, - StakingInfo { - bonded_denom: "ubtc".to_string(), - unbonding_time: 10u64, - apr: Decimal::percent(1000), - }, - ) - .unwrap(); - - router - .staking - .add_validator( - api, - storage, - &mock_env().block, - Validator { - address: start_validator_addr.to_string(), - commission: Decimal::one(), - max_commission: Decimal::one(), - max_change_rate: Decimal::one(), - }, - ) - .unwrap(); - - router - .staking - .add_validator( - api, - storage, - &mock_env().block, - Validator { - address: end_validator_addr.to_string(), - commission: Decimal::one(), - max_commission: Decimal::one(), - max_change_rate: Decimal::one(), - }, - ) - .unwrap(); - }); - - let contract_id = app.store_code(auctioning_contract()); - - let _contract = OutpostContract::instantiate( - &mut app, - contract_id, - &contract_admin_addr, - None, - "Test Outpost", - &InstantiateMsg { - admin: None, - project_addresses: ContractAddresses { - take_rate_addr: "".to_string(), - staking_denom: "uosmo".to_string(), - authzpp: AuthzppAddresses::default(), - destination_projects: OsmosisDestinationProjectAddresses::default(), - }, - }, - ) - .unwrap(); - - app.execute_multi( - delegator_addr.clone(), - vec![ - CosmosMsg::Staking(cosmwasm_std::StakingMsg::Delegate { - validator: start_validator_addr.to_string(), - amount: coin(100_000, "ubtc"), - }), - // create_generic_grant_msg( - // delegator_addr.to_string(), - // &contract.addr(), - // GenericAuthorizationType::Delegation, - // ), - // create_generic_grant_msg( - // delegator_addr.to_string(), - // &contract.addr(), - // GenericAuthorizationType::WithdrawDelegatorRewards, - // ), - ], - ) - .unwrap(); - - assert_eq!(app.wrap().query_all_balances(&delegator_addr).unwrap(), &[]); - assert_eq!( - app.wrap().query_all_delegations(delegator_addr.clone()).unwrap(), - vec![Delegation { - delegator: delegator_addr.clone(), - validator: start_validator_addr.to_string(), - amount: coin(100_000, "ubtc".to_string()) - }] - ); - - app.update_block(next_block); - - // let err = contract - // .compound_funds( - // &mut app, - // &delegator_addr.clone(), - // CompoundPrefs { - // relative: vec![DestinationAction { - // destination: DestinationProject::JunoStaking { - // validator_address: end_validator_addr.to_string(), - // }, - // amount: RelativeQty { - // quantity: 1_000_000_000_000_000_000u128.into(), - // }, - // }], - // }, - // delegator_addr.to_string(), - // ) - // .unwrap_err(); - - // println!("{}", err) -} +// #[test] +// fn instantiate_with_defaults() { +// let sender = Addr::unchecked("sender"); + +// let mut app = App::new(|_router, _api, _storage| { +// // router.bank +// // .init_balance(storage, &sender, coins(100_000, "ubtc")) +// // .unwrap(); +// }); + +// let contract_id = app.store_code(auctioning_contract()); + +// let _contract = OutpostContract::instantiate( +// &mut app, +// contract_id, +// &sender, +// None, +// "Test Outpost", +// // &coins(100_000, "ubtc"), +// &InstantiateMsg { +// admin: None, +// project_addresses: ContractAddresses { +// take_rate_addr: "".to_string(), +// staking_denom: "uosmo".to_string(), +// authzpp: AuthzppAddresses::default(), +// destination_projects: OsmosisDestinationProjectAddresses::default(), +// }, +// }, +// ) +// .unwrap(); + +// assert_eq!(app.wrap().query_all_balances(&sender).unwrap(), &[]) +// } + +// #[test] +// fn validator_only_compounding() { +// let contract_admin_addr = Addr::unchecked("admin_wallet"); +// let delegator_addr = Addr::unchecked("delegator_wallet"); +// let start_validator_addr = Addr::unchecked("validator_1"); +// let end_validator_addr = Addr::unchecked("validator_2"); + +// let mut app = App::new(|router, api, storage| { +// router +// .bank +// .init_balance(storage, &delegator_addr, coins(100_000, "ubtc")) +// .unwrap(); + +// router +// .staking +// .setup( +// storage, +// StakingInfo { +// bonded_denom: "ubtc".to_string(), +// unbonding_time: 10u64, +// apr: Decimal::percent(1000), +// }, +// ) +// .unwrap(); + +// router +// .staking +// .add_validator( +// api, +// storage, +// &mock_env().block, +// Validator { +// address: start_validator_addr.to_string(), +// commission: Decimal::one(), +// max_commission: Decimal::one(), +// max_change_rate: Decimal::one(), +// }, +// ) +// .unwrap(); + +// router +// .staking +// .add_validator( +// api, +// storage, +// &mock_env().block, +// Validator { +// address: end_validator_addr.to_string(), +// commission: Decimal::one(), +// max_commission: Decimal::one(), +// max_change_rate: Decimal::one(), +// }, +// ) +// .unwrap(); +// }); + +// let contract_id = app.store_code(auctioning_contract()); + +// let _contract = OutpostContract::instantiate( +// &mut app, +// contract_id, +// &contract_admin_addr, +// None, +// "Test Outpost", +// &InstantiateMsg { +// admin: None, +// project_addresses: ContractAddresses { +// take_rate_addr: "".to_string(), +// staking_denom: "uosmo".to_string(), +// authzpp: AuthzppAddresses::default(), +// destination_projects: OsmosisDestinationProjectAddresses::default(), +// }, +// }, +// ) +// .unwrap(); + +// app.execute_multi( +// delegator_addr.clone(), +// vec![ +// CosmosMsg::Staking(cosmwasm_std::StakingMsg::Delegate { +// validator: start_validator_addr.to_string(), +// amount: coin(100_000, "ubtc"), +// }), +// // create_generic_grant_msg( +// // delegator_addr.to_string(), +// // &contract.addr(), +// // GenericAuthorizationType::Delegation, +// // ), +// // create_generic_grant_msg( +// // delegator_addr.to_string(), +// // &contract.addr(), +// // GenericAuthorizationType::WithdrawDelegatorRewards, +// // ), +// ], +// ) +// .unwrap(); + +// assert_eq!(app.wrap().query_all_balances(&delegator_addr).unwrap(), &[]); +// assert_eq!( +// app.wrap().query_all_delegations(delegator_addr.clone()).unwrap(), +// vec![Delegation { +// delegator: delegator_addr.clone(), +// validator: start_validator_addr.to_string(), +// amount: coin(100_000, "ubtc".to_string()) +// }] +// ); + +// app.update_block(next_block); + +// // let err = contract +// // .compound_funds( +// // &mut app, +// // &delegator_addr.clone(), +// // CompoundPrefs { +// // relative: vec![DestinationAction { +// // destination: DestinationProject::JunoStaking { +// // validator_address: end_validator_addr.to_string(), +// // }, +// // amount: RelativeQty { +// // quantity: 1_000_000_000_000_000_000u128.into(), +// // }, +// // }], +// // }, +// // delegator_addr.to_string(), +// // ) +// // .unwrap_err(); + +// // println!("{}", err) +// } diff --git a/contracts/wyndstake/Cargo.toml b/contracts/wyndstake/Cargo.toml index a98156c..6f21d1c 100644 --- a/contracts/wyndstake/Cargo.toml +++ b/contracts/wyndstake/Cargo.toml @@ -1,8 +1,8 @@ [package] name = "ymos-wyndstake-outpost" authors = ["Marc "] -version = { workspace = true } -edition = { workspace = true } +version = "1.0.0" +edition = "2021" description = "Yieldmos Wynd Staking Outpost" exclude = [ diff --git a/contracts/wyndstake/src/error.rs b/contracts/wyndstake/src/error.rs index c59cfc3..f12afdf 100644 --- a/contracts/wyndstake/src/error.rs +++ b/contracts/wyndstake/src/error.rs @@ -14,7 +14,6 @@ pub enum ContractError { // #[error("Juno Helper Error: &{0}")] // JunoHelperError(#[from] juno_helpers::errors::HelperError), - #[error("Juno Destinations Error: &{0}")] JunoDestinationError(#[from] juno_destinations::errors::JunoDestinationError), diff --git a/contracts/wyndstake/src/execute.rs b/contracts/wyndstake/src/execute.rs index 45053e5..43ce3ef 100644 --- a/contracts/wyndstake/src/execute.rs +++ b/contracts/wyndstake/src/execute.rs @@ -1,21 +1,23 @@ use std::iter; use cosmwasm_std::{Addr, Attribute, Coin, Decimal, Deps, DepsMut, Env, Event, MessageInfo, Response, SubMsg, Uint128}; +use juno_destinations::comp_prefs::{JunoCompPrefs, JunoDestinationProject, StakingDao}; +use juno_destinations::dest_project_gen::{ + balance_dao_msgs, gelotto_lottery_msgs, mint_juno_lsd_msgs, racoon_bet_msgs, send_tokens_msgs, wynd_staking_msgs, +}; use outpost_utils::{ comp_prefs::DestinationAction, helpers::{calculate_compound_amounts, is_authorized_compounder, prefs_sum_to_one, DestProjectMsgs, RewardSplit}, msg_gen::create_exec_msg, }; +use sail_destinations::dest_project_gen::{spark_ibc_msgs, white_whale_satellite_msgs}; use terraswap_helpers::terraswap_swap::create_terraswap_swap_msg_with_simulation; +use universal_destinations::dest_project_gen::{daodao_cw20_staking_msg, native_staking_msg}; use wynd_helpers::wynd_swap::simulate_and_swap_wynd_pair; use wyndex::asset::{Asset, AssetInfo}; -use juno_destinations::comp_prefs::{JunoCompPrefs, JunoDestinationProject, StakingDao}; -use juno_destinations::dest_project_gen::{balance_dao_msgs, gelotto_lottery_msgs, mint_juno_lsd_msgs, racoon_bet_msgs, send_tokens_msgs, wynd_staking_msgs}; -use sail_destinations::dest_project_gen::{spark_ibc_msgs, white_whale_satellite_msgs}; -use universal_destinations::dest_project_gen::{daodao_cw20_staking_msg, native_staking_msg}; use crate::{ - helpers::{query_and_generate_wynd_reward_msgs, wynd_wyndex_multihop_swap, }, + helpers::{query_and_generate_wynd_reward_msgs, wynd_wyndex_multihop_swap}, msg::ContractAddrs, state::{ADMIN, AUTHORIZED_ADDRS, PROJECT_ADDRS}, ContractError, @@ -147,13 +149,13 @@ pub fn prefs_to_msgs( }; match destination { - JunoDestinationProject::JunoStaking { validator_address } =>{ + JunoDestinationProject::JunoStaking { validator_address } => { let (swap_msg, wyndex::pair::SimulationResponse { - return_amount: expected_juno, ..}) = + return_amount: expected_juno, ..}) = simulate_and_swap_wynd_pair(&deps.querier, - user_addr, - project_addrs.destination_projects.wynd.juno_wynd_pair.as_ref(), + user_addr, + project_addrs.destination_projects.wynd.juno_wynd_pair.as_ref(), compounding_asset, juno_asset_info.clone())?; let mut staking_msgs = native_staking_msg( @@ -166,7 +168,7 @@ pub fn prefs_to_msgs( )?; staking_msgs.append_msgs(vec![swap_msg]); - Ok(staking_msgs) + Ok(staking_msgs) }, JunoDestinationProject::DaoStaking(dao) => { @@ -179,7 +181,7 @@ pub fn prefs_to_msgs( return Ok(noop_resp); } - + let dao_addresses = dao.get_daos_addresses(&project_addrs.destination_projects.daos); let (swap_msgs, expected_dao_token_amount) = @@ -191,8 +193,6 @@ pub fn prefs_to_msgs( wynd_asset_info.clone(), AssetInfo::Token(dao_addresses.cw20.to_string()), project_addrs.destination_projects.wynd.multihop.to_string(),)?; - - let mut stake_msgs = daodao_cw20_staking_msg( dao.to_string(), @@ -206,50 +206,56 @@ pub fn prefs_to_msgs( Ok(stake_msgs) } - - JunoDestinationProject::WyndStaking { bonding_period } => { + JunoDestinationProject::WyndStaking { bonding_period } => { Ok(wynd_staking_msgs(&project_addrs.destination_projects.wynd.cw20.to_string(), - &user_addr.to_string(), + &user_addr.to_string(), comp_token_amount, bonding_period)?) } - JunoDestinationProject::TokenSwap { target_denom } => { let (swaps, sim) = match target_denom.clone() { AssetInfo::Native(juno_denom) if juno_denom.eq("ujuno") => { // if we're swapping to juno we can avoid the multihop and go straight to the pair let (swap, sim) = simulate_and_swap_wynd_pair( - &deps.querier, user_addr - , project_addrs.destination_projects.wynd.juno_wynd_pair.as_ref(), - Asset { info: wynd_asset_info.clone(), amount: comp_token_amount }, juno_asset_info.clone())?; + &deps.querier, + user_addr, + project_addrs.destination_projects.wynd.juno_wynd_pair.as_ref(), + Asset { info: wynd_asset_info.clone(),amount: comp_token_amount }, + juno_asset_info.clone() + )?; (vec![swap], sim.return_amount) } - _ => wynd_wyndex_multihop_swap(&deps.querier, - user_addr, comp_token_amount, + _ => wynd_wyndex_multihop_swap( + &deps.querier, + user_addr, + comp_token_amount, wynd_asset_info.clone(), - target_denom.clone(), - project_addrs.destination_projects.wynd.multihop.to_string())? + target_denom.clone(), + project_addrs.destination_projects.wynd.multihop.to_string() + )? }; - - Ok(DestProjectMsgs { msgs: swaps, sub_msgs: vec![], - events: vec![Event::new("swap").add_attribute("denom", target_denom.to_string()).add_attribute("amount", sim.to_string())], + events: vec![ + Event::new("swap") + .add_attribute("denom", target_denom.to_string()) + .add_attribute("amount", sim.to_string())], })}, JunoDestinationProject::WyndLp { .. // contract_address, // bonding_period, } => { - Ok(DestProjectMsgs::default()) } - JunoDestinationProject::GelottoLottery { lottery, lucky_phrase } =>{ + JunoDestinationProject::GelottoLottery { lottery, lucky_phrase } => { let (juno_swap, juno_sim) = simulate_and_swap_wynd_pair( - &deps.querier, user_addr - , project_addrs.destination_projects.wynd.juno_wynd_pair.as_ref(), - Asset { info: wynd_asset_info.clone(), amount: comp_token_amount }, juno_asset_info.clone())?; + &deps.querier, + user_addr, + project_addrs.destination_projects.wynd.juno_wynd_pair.as_ref(), + Asset { info: wynd_asset_info.clone(), amount: comp_token_amount }, + juno_asset_info.clone())?; let mut lottery_msgs = gelotto_lottery_msgs( user_addr, @@ -260,16 +266,16 @@ pub fn prefs_to_msgs( juno_sim.return_amount, )?; - lottery_msgs.append_msgs(vec![juno_swap]); - + lottery_msgs.append_msgs(vec![juno_swap]); Ok(lottery_msgs)}, JunoDestinationProject::RacoonBet { game } => { // if we swap straight to usdc then we already have our price estimate ready let (swap, usdc_sim) = simulate_and_swap_wynd_pair( - &deps.querier, user_addr - , project_addrs.destination_projects.wynd.wynd_usdc_pair.as_ref(), + &deps.querier, + user_addr, + project_addrs.destination_projects.wynd.wynd_usdc_pair.as_ref(), Asset { info: wynd_asset_info.clone(), amount: comp_token_amount }, project_addrs.usdc.clone())?; - + let mut rac_msgs = racoon_bet_msgs( &deps.querier, user_addr, @@ -290,10 +296,12 @@ pub fn prefs_to_msgs( JunoDestinationProject::WhiteWhaleSatellite { asset } => { // if we swap our wynd to usdc we have a shorter in wyndex we'll have a shorter path in terraswap to get the lsds let (usdc_swap, wyndex::pair::SimulationResponse {return_amount: est_usdc,..}) = simulate_and_swap_wynd_pair( - &deps.querier, user_addr - , project_addrs.destination_projects.wynd.wynd_usdc_pair.as_ref(), - Asset { info: wynd_asset_info.clone(), amount: comp_token_amount }, project_addrs.usdc.clone())?; - + &deps.querier, + user_addr, + project_addrs.destination_projects.wynd.wynd_usdc_pair.as_ref(), + Asset { info: wynd_asset_info.clone(), amount: comp_token_amount }, + project_addrs.usdc.clone())?; + let (swap_ops, denom) = project_addrs.destination_projects.white_whale.get_usdc_swap_operations(asset)?; let (lsd_swap_msgs, sim) = create_terraswap_swap_msg_with_simulation( @@ -323,7 +331,7 @@ pub fn prefs_to_msgs( JunoDestinationProject::BalanceDao {} => { let (juno_swap, wyndex::pair::SimulationResponse {return_amount: juno_sim, ..}) = simulate_and_swap_wynd_pair( &deps.querier, user_addr - , project_addrs.destination_projects.wynd.juno_wynd_pair.as_ref(), + , project_addrs.destination_projects.wynd.juno_wynd_pair.as_ref(), Asset { info: wynd_asset_info.clone(), amount: comp_token_amount }, juno_asset_info.clone())?; let mut balance_msgs = balance_dao_msgs( @@ -333,25 +341,21 @@ pub fn prefs_to_msgs( )?; balance_msgs.append_msgs(vec![juno_swap]); - Ok(balance_msgs)}, - JunoDestinationProject::MintLsd { lsd_type } => { - let (juno_swap, wyndex::pair::SimulationResponse {return_amount: juno_sim, ..}) = simulate_and_swap_wynd_pair( &deps.querier, user_addr - , project_addrs.destination_projects.wynd.juno_wynd_pair.as_ref(), + , project_addrs.destination_projects.wynd.juno_wynd_pair.as_ref(), Asset { info: wynd_asset_info.clone(), amount: comp_token_amount }, juno_asset_info.clone())?; - let mut msgs = mint_juno_lsd_msgs( user_addr, lsd_type, juno_sim, project_addrs.destination_projects.juno_lsds.clone(), - )?; + )?; msgs.append_msgs(vec![juno_swap]); - + Ok(msgs) }, JunoDestinationProject::SparkIbcCampaign { fund } => { @@ -360,9 +364,9 @@ pub fn prefs_to_msgs( // swap on the usdc pair directly let (usdc_swap, wyndex::pair::SimulationResponse {return_amount: est_usdc,..}) = simulate_and_swap_wynd_pair( &deps.querier, user_addr - , project_addrs.destination_projects.wynd.wynd_usdc_pair.as_ref(), + , project_addrs.destination_projects.wynd.wynd_usdc_pair.as_ref(), Asset { info: wynd_asset_info.clone(), amount: comp_token_amount }, project_addrs.usdc.clone())?; - + // the helper method will validate that we have enough usdc and what not let mut spark_msgs = spark_ibc_msgs( user_addr, @@ -386,10 +390,9 @@ pub fn prefs_to_msgs( &deps.querier, user_addr, comp_token_amount, - wynd_asset_info.clone(), + wynd_asset_info.clone(), target_asset.clone(), project_addrs.destination_projects.wynd.multihop.to_string(), - ) .map_err(ContractError::Std)?; @@ -412,6 +415,5 @@ pub fn prefs_to_msgs( }, ) .collect::, ContractError>>()?; - Ok(compounding_msgs) } diff --git a/contracts/wyndstake/src/msg.rs b/contracts/wyndstake/src/msg.rs index 55d5c3e..f56be4a 100644 --- a/contracts/wyndstake/src/msg.rs +++ b/contracts/wyndstake/src/msg.rs @@ -88,22 +88,13 @@ pub struct ContractAddresses { #[cw_serde] #[derive(Default)] -pub struct AuthzppAddresses { - // pub withdraw_tax: String, - // pub allowlist_send: String, -} +pub struct AuthzppAddresses {} #[cw_serde] -pub struct AuthzppAddrs { - // pub withdraw_tax: Addr, - // pub allowlist_send: Addr, -} +pub struct AuthzppAddrs {} impl AuthzppAddresses { pub fn validate_addrs(&self, _api: &dyn Api) -> Result { - Ok(AuthzppAddrs { - // withdraw_tax: api.addr_validate(&self.withdraw_tax)?, - // allowlist_send: api.addr_validate(&self.allowlist_send)?, - }) + Ok(AuthzppAddrs {}) } } diff --git a/contracts/wyndstake/src/tests/integration_tests.rs b/contracts/wyndstake/src/tests/integration_tests.rs index 10c6478..5bc2a8e 100644 --- a/contracts/wyndstake/src/tests/integration_tests.rs +++ b/contracts/wyndstake/src/tests/integration_tests.rs @@ -13,165 +13,165 @@ fn auctioning_contract() -> Box> { Box::new(contract) } -#[test] -fn instantiate_with_defaults() { - let sender = Addr::unchecked("sender"); - - let mut app = App::new(|_router, _api, _storage| { - // router.bank - // .init_balance(storage, &sender, coins(100_000, "ubtc")) - // .unwrap(); - }); - - let contract_id = app.store_code(auctioning_contract()); - - let _contract = OutpostContract::instantiate( - &mut app, - contract_id, - &sender, - None, - "Test Outpost", - // &coins(100_000, "ubtc"), - &InstantiateMsg { - admin: None, - project_addresses: ContractAddresses { - take_rate_addr: "".to_string(), - usdc: wyndex::asset::AssetInfo::Native("".to_string()), - authzpp: AuthzppAddresses::default(), - destination_projects: DestinationProjectAddresses::default(), - wynd_stake_addr: "".to_string(), - }, - }, - ) - .unwrap(); - - assert_eq!(app.wrap().query_all_balances(&sender).unwrap(), &[]) -} - -#[test] -fn validator_only_compounding() { - let contract_admin_addr = Addr::unchecked("admin_wallet"); - let delegator_addr = Addr::unchecked("delegator_wallet"); - let start_validator_addr = Addr::unchecked("validator_1"); - let end_validator_addr = Addr::unchecked("validator_2"); - - let mut app = App::new(|router, api, storage| { - router.bank.init_balance(storage, &delegator_addr, coins(100_000, "ubtc")).unwrap(); - - router - .staking - .setup( - storage, - StakingInfo { - bonded_denom: "ubtc".to_string(), - unbonding_time: 10u64, - apr: Decimal::percent(1000), - }, - ) - .unwrap(); - - router - .staking - .add_validator( - api, - storage, - &mock_env().block, - Validator { - address: start_validator_addr.to_string(), - commission: Decimal::one(), - max_commission: Decimal::one(), - max_change_rate: Decimal::one(), - }, - ) - .unwrap(); - - router - .staking - .add_validator( - api, - storage, - &mock_env().block, - Validator { - address: end_validator_addr.to_string(), - commission: Decimal::one(), - max_commission: Decimal::one(), - max_change_rate: Decimal::one(), - }, - ) - .unwrap(); - }); - - let contract_id = app.store_code(auctioning_contract()); - - let _contract = OutpostContract::instantiate( - &mut app, - contract_id, - &contract_admin_addr, - None, - "Test Outpost", - &InstantiateMsg { - admin: None, - project_addresses: ContractAddresses { - take_rate_addr: "".to_string(), - usdc: wyndex::asset::AssetInfo::Native("".to_string()), - authzpp: AuthzppAddresses::default(), - destination_projects: DestinationProjectAddresses::default(), - wynd_stake_addr: "".to_string(), - }, - }, - ) - .unwrap(); - - app.execute_multi( - delegator_addr.clone(), - vec![ - CosmosMsg::Staking(cosmwasm_std::StakingMsg::Delegate { - validator: start_validator_addr.to_string(), - amount: coin(100_000, "ubtc"), - }), - // create_generic_grant_msg( - // delegator_addr.to_string(), - // &contract.addr(), - // GenericAuthorizationType::Delegation, - // ), - // create_generic_grant_msg( - // delegator_addr.to_string(), - // &contract.addr(), - // GenericAuthorizationType::WithdrawDelegatorRewards, - // ), - ], - ) - .unwrap(); - - assert_eq!(app.wrap().query_all_balances(&delegator_addr).unwrap(), &[]); - assert_eq!( - app.wrap().query_all_delegations(delegator_addr.clone()).unwrap(), - vec![Delegation { - delegator: delegator_addr.clone(), - validator: start_validator_addr.to_string(), - amount: coin(100_000, "ubtc".to_string()) - }] - ); - - app.update_block(next_block); - - // let err = contract - // .compound_funds( - // &mut app, - // &delegator_addr.clone(), - // CompoundPrefs { - // relative: vec![DestinationAction { - // destination: DestinationProject::JunoStaking { - // validator_address: end_validator_addr.to_string(), - // }, - // amount: RelativeQty { - // quantity: 1_000_000_000_000_000_000u128.into(), - // }, - // }], - // }, - // delegator_addr.to_string(), - // ) - // .unwrap_err(); - - // println!("{}", err) -} +// #[test] +// fn instantiate_with_defaults() { +// let sender = Addr::unchecked("sender"); + +// let mut app = App::new(|_router, _api, _storage| { +// // router.bank +// // .init_balance(storage, &sender, coins(100_000, "ubtc")) +// // .unwrap(); +// }); + +// let contract_id = app.store_code(auctioning_contract()); + +// let _contract = OutpostContract::instantiate( +// &mut app, +// contract_id, +// &sender, +// None, +// "Test Outpost", +// // &coins(100_000, "ubtc"), +// &InstantiateMsg { +// admin: None, +// project_addresses: ContractAddresses { +// take_rate_addr: "".to_string(), +// usdc: wyndex::asset::AssetInfo::Native("".to_string()), +// authzpp: AuthzppAddresses::default(), +// destination_projects: DestinationProjectAddresses::default(), +// wynd_stake_addr: "".to_string(), +// }, +// }, +// ) +// .unwrap(); + +// assert_eq!(app.wrap().query_all_balances(&sender).unwrap(), &[]) +// } + +// #[test] +// fn validator_only_compounding() { +// let contract_admin_addr = Addr::unchecked("admin_wallet"); +// let delegator_addr = Addr::unchecked("delegator_wallet"); +// let start_validator_addr = Addr::unchecked("validator_1"); +// let end_validator_addr = Addr::unchecked("validator_2"); + +// let mut app = App::new(|router, api, storage| { +// router.bank.init_balance(storage, &delegator_addr, coins(100_000, "ubtc")).unwrap(); + +// router +// .staking +// .setup( +// storage, +// StakingInfo { +// bonded_denom: "ubtc".to_string(), +// unbonding_time: 10u64, +// apr: Decimal::percent(1000), +// }, +// ) +// .unwrap(); + +// router +// .staking +// .add_validator( +// api, +// storage, +// &mock_env().block, +// Validator { +// address: start_validator_addr.to_string(), +// commission: Decimal::one(), +// max_commission: Decimal::one(), +// max_change_rate: Decimal::one(), +// }, +// ) +// .unwrap(); + +// router +// .staking +// .add_validator( +// api, +// storage, +// &mock_env().block, +// Validator { +// address: end_validator_addr.to_string(), +// commission: Decimal::one(), +// max_commission: Decimal::one(), +// max_change_rate: Decimal::one(), +// }, +// ) +// .unwrap(); +// }); + +// let contract_id = app.store_code(auctioning_contract()); + +// let _contract = OutpostContract::instantiate( +// &mut app, +// contract_id, +// &contract_admin_addr, +// None, +// "Test Outpost", +// &InstantiateMsg { +// admin: None, +// project_addresses: ContractAddresses { +// take_rate_addr: "".to_string(), +// usdc: wyndex::asset::AssetInfo::Native("".to_string()), +// authzpp: AuthzppAddresses::default(), +// destination_projects: DestinationProjectAddresses::default(), +// wynd_stake_addr: "".to_string(), +// }, +// }, +// ) +// .unwrap(); + +// app.execute_multi( +// delegator_addr.clone(), +// vec![ +// CosmosMsg::Staking(cosmwasm_std::StakingMsg::Delegate { +// validator: start_validator_addr.to_string(), +// amount: coin(100_000, "ubtc"), +// }), +// // create_generic_grant_msg( +// // delegator_addr.to_string(), +// // &contract.addr(), +// // GenericAuthorizationType::Delegation, +// // ), +// // create_generic_grant_msg( +// // delegator_addr.to_string(), +// // &contract.addr(), +// // GenericAuthorizationType::WithdrawDelegatorRewards, +// // ), +// ], +// ) +// .unwrap(); + +// assert_eq!(app.wrap().query_all_balances(&delegator_addr).unwrap(), &[]); +// assert_eq!( +// app.wrap().query_all_delegations(delegator_addr.clone()).unwrap(), +// vec![Delegation { +// delegator: delegator_addr.clone(), +// validator: start_validator_addr.to_string(), +// amount: coin(100_000, "ubtc".to_string()) +// }] +// ); + +// app.update_block(next_block); + +// // let err = contract +// // .compound_funds( +// // &mut app, +// // &delegator_addr.clone(), +// // CompoundPrefs { +// // relative: vec![DestinationAction { +// // destination: DestinationProject::JunoStaking { +// // validator_address: end_validator_addr.to_string(), +// // }, +// // amount: RelativeQty { +// // quantity: 1_000_000_000_000_000_000u128.into(), +// // }, +// // }], +// // }, +// // delegator_addr.to_string(), +// // ) +// // .unwrap_err(); + +// // println!("{}", err) +// } diff --git a/packages/deploy/Cargo.toml b/packages/deploy/Cargo.toml index 2d0da2a..4ab007f 100644 --- a/packages/deploy/Cargo.toml +++ b/packages/deploy/Cargo.toml @@ -33,16 +33,16 @@ ymos-wyndstake-outpost = { path = "../../contracts/wyndstake", features = [ ymos-comp-prefs = { path = "../../contracts/comp_prefs", features = [ "interface", ] } -white-whale = { workspace = true } -wyndex = { workspace = true } -outpost-utils = { workspace = true } +juno-destinations = { path = "../juno-destinations" } +migaloo-destinations = { path = "../migaloo-destinations" } +outpost-utils = { path = "../utils" } tokio = "1.31.0" -cosmwasm-std = { workspace = true } cw20-base = { version = "0.13.2", features = ["library"] } cosmrs = "0.14.0" anybuf = "0.1.0" -juno-destinations = { workspace = true } -migaloo-destinations = { workspace = true } +white-whale-std = { git = "https://github.com/White-Whale-Defi-Platform/white-whale-core.git", tag = "v1.6.6" } +wyndex = { workspace = true } +cosmwasm-std = { workspace = true } # [dev-dependencies] # Deps for deployment diff --git a/packages/deploy/rustfmt.toml b/packages/deploy/rustfmt.toml new file mode 100644 index 0000000..758d417 --- /dev/null +++ b/packages/deploy/rustfmt.toml @@ -0,0 +1 @@ +max_width = 100 diff --git a/packages/deploy/src/juno-deploy.rs b/packages/deploy/src/juno-deploy.rs index eb5f062..2d0cd25 100644 --- a/packages/deploy/src/juno-deploy.rs +++ b/packages/deploy/src/juno-deploy.rs @@ -1,15 +1,21 @@ use anybuf::Anybuf; use cosmwasm_std::Uint64; -use cw_orch::{anyhow, daemon::{DaemonBuilder, ChainInfo, ChainKind, networks::juno::JUNO_NETWORK}, prelude::*}; +use cw_orch::{ + anyhow, + daemon::{networks::juno::JUNO_NETWORK, ChainInfo, ChainKind, DaemonBuilder}, + prelude::*, +}; use juno_destinations::comp_prefs::DaoAddress; use tokio::runtime::Runtime; +use white_whale_std::pool_network::{asset::AssetInfo as WWAssetInfo, router::SwapOperation}; +use ymos_comp_prefs::{msg::ExecuteMsgFns as CompPrefExecuteMsgFns, YmosCompPrefsContract}; use ymos_junodca_outpost::msg::ExecuteMsgFns as JunodcaExecuteMsgFns; use ymos_junostake_outpost::msg::ExecuteMsgFns as JunostakeExecuteMsgFns; +use ymos_junowwmarket_outpost::msg::{ + ExecuteMsgFns as JunowwmarketExecuteMsgFns, TerraswapRouteAddresses, +}; use ymos_wyndstake_outpost::msg::ExecuteMsgFns as WyndstakeExecuteMsgFns; -use ymos_junowwmarket_outpost::msg::{ExecuteMsgFns as JunowwmarketExecuteMsgFns, TerraswapRouteAddresses}; -use white_whale::pool_network::{asset::AssetInfo as WWAssetInfo, router::SwapOperation}; -use ymos_comp_prefs::{msg::{ExecuteMsgFns as CompPrefExecuteMsgFns}, YmosCompPrefsContract}; #[derive(PartialEq, Eq, Debug)] pub enum DeploymentType { @@ -36,268 +42,190 @@ pub fn main() -> anyhow::Result<()> { "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034".to_string(), ), authzpp: ymos_junostake_outpost::msg::AuthzppAddresses { - withdraw_tax: "juno1nak433pjd39et4g6jjclxk7yfmtfsd5m43su04rxe9ggttdvjwpqsumv30" - .to_string(), + withdraw_tax: "juno1nak433pjd39et4g6jjclxk7yfmtfsd5m43su04rxe9ggttdvjwpqsumv30".to_string(), }, destination_projects: juno_destinations::comp_prefs::DestinationProjectAddresses { wynd: juno_destinations::comp_prefs::WyndAddresses { cw20: "juno1mkw83sv6c7sjdvsaplrzc8yaes9l42p4mhy0ssuxjnyzl87c9eps7ce3m9".to_string(), - multihop: "juno1pctfpv9k03v0ff538pz8kkw5ujlptntzkwjg6c0lrtqv87s9k28qdtl50w" - .to_string(), - juno_wynd_pair: "juno1a7lmc8e04hcs4y2275cultvg83u636ult4pmnwktr6l9nhrh2e8qzxfdwf" - .to_string(), - wynd_usdc_pair: "juno18zk9xqj9xjm0ry39jjam8qsysj7qh49xwt4qdfp9lgtrk08sd58s2n54ve".to_string() + multihop: "juno1pctfpv9k03v0ff538pz8kkw5ujlptntzkwjg6c0lrtqv87s9k28qdtl50w".to_string(), + juno_wynd_pair: "juno1a7lmc8e04hcs4y2275cultvg83u636ult4pmnwktr6l9nhrh2e8qzxfdwf".to_string(), + wynd_usdc_pair: "juno18zk9xqj9xjm0ry39jjam8qsysj7qh49xwt4qdfp9lgtrk08sd58s2n54ve".to_string(), }, gelotto: juno_destinations::comp_prefs::GelottoAddresses { - pick3_contract: "juno1v466lyrhsflkt9anxt4wyx7mtw8w2uyk0qxkqskqfj90rmwhph7s0dxvga" - .to_string(), - pick4_contract: "juno16xy5m05z6n4vnfzcf8cvd3anxhg4g2k8vvr4q2knv4akynfstr9qjmhdhs" - .to_string(), - pick5_contract: "juno1txn3kejj4qrehua9vlg3hk4wunqafqunfy83cz5hg2xa3z3pkgssk4tzu4" - .to_string(), + pick3_contract: "juno1v466lyrhsflkt9anxt4wyx7mtw8w2uyk0qxkqskqfj90rmwhph7s0dxvga".to_string(), + pick4_contract: "juno16xy5m05z6n4vnfzcf8cvd3anxhg4g2k8vvr4q2knv4akynfstr9qjmhdhs".to_string(), + pick5_contract: "juno1txn3kejj4qrehua9vlg3hk4wunqafqunfy83cz5hg2xa3z3pkgssk4tzu4".to_string(), }, daos: juno_destinations::comp_prefs::DaoAddresses { neta: DaoAddress { - cw20: "juno168ctmpyppk90d34p3jjy658zf5a5l3w8wk35wht6ccqj4mr0yv8s4j5awr" - .to_string(), - staking: "juno1a7x8aj7k38vnj9edrlymkerhrl5d4ud3makmqhx6vt3dhu0d824qh038zh" - .to_string(), - juno_wyndex_pair: Some( - "juno1h6x5jlvn6jhpnu63ufe4sgv4utyk8hsfl5rqnrpg2cvp6ccuq4lqwqnzra" - .to_string(), - ), + cw20: "juno168ctmpyppk90d34p3jjy658zf5a5l3w8wk35wht6ccqj4mr0yv8s4j5awr".to_string(), + staking: "juno1a7x8aj7k38vnj9edrlymkerhrl5d4ud3makmqhx6vt3dhu0d824qh038zh".to_string(), + juno_wyndex_pair: Some("juno1h6x5jlvn6jhpnu63ufe4sgv4utyk8hsfl5rqnrpg2cvp6ccuq4lqwqnzra".to_string()), wynd_wyndex_pair: None, }, signal: DaoAddress { - cw20: "juno14lycavan8gvpjn97aapzvwmsj8kyrvf644p05r0hu79namyj3ens87650k" - .to_string(), - staking: "juno1v0km8gytmzpmtnwv8mpx26kctt5szuzudhg209fxee57yh9u2cvs88rn7p" - .to_string(), - juno_wyndex_pair: Some( - "juno1p3eed298qx3nyhs3grld07jrf9vjsjsmdd2kmmh3crk87emjcx5stp409y" - .to_string(), - ), + cw20: "juno14lycavan8gvpjn97aapzvwmsj8kyrvf644p05r0hu79namyj3ens87650k".to_string(), + staking: "juno1v0km8gytmzpmtnwv8mpx26kctt5szuzudhg209fxee57yh9u2cvs88rn7p".to_string(), + juno_wyndex_pair: Some("juno1p3eed298qx3nyhs3grld07jrf9vjsjsmdd2kmmh3crk87emjcx5stp409y".to_string()), wynd_wyndex_pair: None, }, posthuman: DaoAddress { - cw20: "juno1rws84uz7969aaa7pej303udhlkt3j9ca0l3egpcae98jwak9quzq8szn2l" - .to_string(), - staking: "juno1jktfdt5g2d0fguvy8r8pl4gly7wps8phkwy08z6upc4nazkumrwq7lj0vn" - .to_string(), - juno_wyndex_pair: Some( - "juno17jv00cm4f3twr548jzayu57g9txvd4zdh54mdg9qpjs7samlphjsykylsq" - .to_string(), - ), + cw20: "juno1rws84uz7969aaa7pej303udhlkt3j9ca0l3egpcae98jwak9quzq8szn2l".to_string(), + staking: "juno1jktfdt5g2d0fguvy8r8pl4gly7wps8phkwy08z6upc4nazkumrwq7lj0vn".to_string(), + juno_wyndex_pair: Some("juno17jv00cm4f3twr548jzayu57g9txvd4zdh54mdg9qpjs7samlphjsykylsq".to_string()), wynd_wyndex_pair: None, }, kleomedes: DaoAddress { - cw20: "juno10gthz5ufgrpuk5cscve2f0hjp56wgp90psqxcrqlg4m9mcu9dh8q4864xy" - .to_string(), - staking: "juno1zqp6uh3eg09s0h24rkwukkkg3pch49g0ndc53z9l8wrvh9dhf4nsj0ur49" - .to_string(), - juno_wyndex_pair: Some( - "juno1dpqgt3ja2kdxs94ltjw9ncdsexts9e3dx5qpnl20zvgdguzjelhqstf8zg" - .to_string(), - ), + cw20: "juno10gthz5ufgrpuk5cscve2f0hjp56wgp90psqxcrqlg4m9mcu9dh8q4864xy".to_string(), + staking: "juno1zqp6uh3eg09s0h24rkwukkkg3pch49g0ndc53z9l8wrvh9dhf4nsj0ur49".to_string(), + juno_wyndex_pair: Some("juno1dpqgt3ja2kdxs94ltjw9ncdsexts9e3dx5qpnl20zvgdguzjelhqstf8zg".to_string()), wynd_wyndex_pair: None, }, cannalabs: DaoAddress { - cw20: "juno1vn38rzq0wc7zczp4dhy0h5y5kxh2jjzeahwe30c9cc6dw3lkyk5qn5rmfa" - .to_string(), - staking: "juno1066vq5g9qdprhgjst444rgf0zknhlqwmdnm7xyqhprt9whctzzxqdx90lu" - .to_string(), - juno_wyndex_pair: Some( - "juno17ckp36lmgtt7jtuggdv2j39eh4alcnl35szu6quh747nujags07swwq0nh" - .to_string(), - ), - wynd_wyndex_pair: Some( - "juno1ls5un4a8zyn4f05k0ekq5aa9uhn88y8362ww38elqfpcwllme0jqelamke" - .to_string(), - ), + cw20: "juno1vn38rzq0wc7zczp4dhy0h5y5kxh2jjzeahwe30c9cc6dw3lkyk5qn5rmfa".to_string(), + staking: "juno1066vq5g9qdprhgjst444rgf0zknhlqwmdnm7xyqhprt9whctzzxqdx90lu".to_string(), + juno_wyndex_pair: Some("juno17ckp36lmgtt7jtuggdv2j39eh4alcnl35szu6quh747nujags07swwq0nh".to_string()), + wynd_wyndex_pair: Some("juno1ls5un4a8zyn4f05k0ekq5aa9uhn88y8362ww38elqfpcwllme0jqelamke".to_string()), }, muse: DaoAddress { - cw20: "juno1p8x807f6h222ur0vssqy3qk6mcpa40gw2pchquz5atl935t7kvyq894ne3" - .to_string(), - staking: "juno17gdhjxt2d5mhx6paxc85g4pr5myew8pq0lm7usdsavsfk34ldrsqqhtafc" - .to_string(), - juno_wyndex_pair: Some( - "juno1rcssjyqgr6vzalss77d43v30c2qpyzzg607ua8gte2shqgtvu24sg8gs8r" - .to_string(), - ), + cw20: "juno1p8x807f6h222ur0vssqy3qk6mcpa40gw2pchquz5atl935t7kvyq894ne3".to_string(), + staking: "juno17gdhjxt2d5mhx6paxc85g4pr5myew8pq0lm7usdsavsfk34ldrsqqhtafc".to_string(), + juno_wyndex_pair: Some("juno1rcssjyqgr6vzalss77d43v30c2qpyzzg607ua8gte2shqgtvu24sg8gs8r".to_string()), wynd_wyndex_pair: None, }, }, spark_ibc: juno_destinations::comp_prefs::SparkIbcAddresses { fund: "juno1a6rna5tcl6p97rze6hnd5ug35kadqhudvr5f4mtr6s0yd5mruhss8gzrdy".to_string(), }, - balance_dao: "juno1ve7y09kvvnjk0yc2ycaq0y9thq5tct5ve6c0a5hfkt0h4jfy936qxtne5s" - .to_string(), + balance_dao: "juno1ve7y09kvvnjk0yc2ycaq0y9thq5tct5ve6c0a5hfkt0h4jfy936qxtne5s".to_string(), white_whale: juno_destinations::comp_prefs::WhiteWhaleSatelliteAddresses { - amp_whale: "ibc/2F7C2A3D5D42553ED46F57D8B0DE3733B1B5FF571E2C6A051D34525904B4C0AF" - .to_string(), - - bone_whale: - "ibc/01BAE2E69D02670B22758FBA74E4114B6E88FC1878936C919DA345E6C6C92ABF" - .to_string(), - - market: "juno1n8slcc79dmwuzdxhsesvhcncaqfg9h4czdm5t5ey8x25ajmn3xzqyde4wv" - .to_string(), - rewards: "juno184ghwgprva7dlr2hwhzgvt6mem6zx78fygk0cpw7klssmzyf67tqdtwt3h" - .to_string(), - - juno_amp_whale_path: vec![ - // swap juno for usdc - SwapOperation::TerraSwap { - offer_asset_info: WWAssetInfo::NativeToken { denom: "ujuno".to_string() }, - - ask_asset_info: WWAssetInfo::NativeToken { - denom: - "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034".to_string() - } + amp_whale: "ibc/2F7C2A3D5D42553ED46F57D8B0DE3733B1B5FF571E2C6A051D34525904B4C0AF".to_string(), + bone_whale: "ibc/01BAE2E69D02670B22758FBA74E4114B6E88FC1878936C919DA345E6C6C92ABF".to_string(), + market: "juno1n8slcc79dmwuzdxhsesvhcncaqfg9h4czdm5t5ey8x25ajmn3xzqyde4wv".to_string(), + rewards: "juno184ghwgprva7dlr2hwhzgvt6mem6zx78fygk0cpw7klssmzyf67tqdtwt3h".to_string(), + juno_amp_whale_path: vec![ + // swap juno for usdc + SwapOperation::TerraSwap { + offer_asset_info: WWAssetInfo::NativeToken { + denom: "ujuno".to_string(), }, - // usdc to whale - SwapOperation::TerraSwap { - offer_asset_info: WWAssetInfo::NativeToken { - denom: - "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034".to_string() - }, - ask_asset_info: WWAssetInfo::NativeToken { - denom: - "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C".to_string() - } + + ask_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034".to_string(), }, - // whale to ampwhale - SwapOperation::TerraSwap { - offer_asset_info: WWAssetInfo::NativeToken { - denom: - "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C".to_string() - }, - ask_asset_info: WWAssetInfo::NativeToken { - denom: - "ibc/2F7C2A3D5D42553ED46F57D8B0DE3733B1B5FF571E2C6A051D34525904B4C0AF".to_string() - } + }, + // usdc to whale + SwapOperation::TerraSwap { + offer_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034".to_string(), + }, + ask_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C".to_string(), + }, + }, + // whale to ampwhale + SwapOperation::TerraSwap { + offer_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C".to_string(), + }, + ask_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/2F7C2A3D5D42553ED46F57D8B0DE3733B1B5FF571E2C6A051D34525904B4C0AF".to_string(), + }, + }, + ], + juno_bone_whale_path: vec![ + // swap juno for usdc + SwapOperation::TerraSwap { + offer_asset_info: WWAssetInfo::NativeToken { + denom: "ujuno".to_string(), }, - ], - - - juno_bone_whale_path: - vec![ - // swap juno for usdc - SwapOperation::TerraSwap { - offer_asset_info: WWAssetInfo::NativeToken { denom: "ujuno".to_string() }, - - ask_asset_info: WWAssetInfo::NativeToken { - denom: - "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034".to_string() - } - }, - // usdc to whale - SwapOperation::TerraSwap { - offer_asset_info: WWAssetInfo::NativeToken { - denom: - "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034".to_string() - }, - ask_asset_info: WWAssetInfo::NativeToken { - denom: - "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C".to_string() - } - }, - // whale to ampwhale - SwapOperation::TerraSwap { - offer_asset_info: WWAssetInfo::NativeToken { - denom: - "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C".to_string() - }, - ask_asset_info: WWAssetInfo::NativeToken { - denom: - "ibc/01BAE2E69D02670B22758FBA74E4114B6E88FC1878936C919DA345E6C6C92ABF".to_string() - } - }, - ], - usdc_amp_whale_path: vec![ - - + ask_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034".to_string(), + }, + }, + // usdc to whale + SwapOperation::TerraSwap { + offer_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034".to_string(), + }, + ask_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C".to_string(), + }, + }, + // whale to ampwhale + SwapOperation::TerraSwap { + offer_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C".to_string(), + }, + ask_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/01BAE2E69D02670B22758FBA74E4114B6E88FC1878936C919DA345E6C6C92ABF".to_string(), + }, + }, + ], + usdc_amp_whale_path: vec![ // usdc to whale SwapOperation::TerraSwap { - offer_asset_info: WWAssetInfo::NativeToken { - denom: - "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034".to_string() + offer_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034".to_string(), }, ask_asset_info: WWAssetInfo::NativeToken { - denom: - "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C".to_string() - } + denom: "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C".to_string(), + }, }, // whale to ampwhale SwapOperation::TerraSwap { - offer_asset_info: WWAssetInfo::NativeToken { - denom: - "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C".to_string() + offer_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C".to_string(), }, ask_asset_info: WWAssetInfo::NativeToken { - denom: - "ibc/2F7C2A3D5D42553ED46F57D8B0DE3733B1B5FF571E2C6A051D34525904B4C0AF".to_string() - } + denom: "ibc/2F7C2A3D5D42553ED46F57D8B0DE3733B1B5FF571E2C6A051D34525904B4C0AF".to_string(), + }, }, ], - - - usdc_bone_whale_path: - vec![ - - // usdc to whale - SwapOperation::TerraSwap { - offer_asset_info: WWAssetInfo::NativeToken { - denom: - "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034".to_string() - }, - ask_asset_info: WWAssetInfo::NativeToken { - denom: - "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C".to_string() - } + usdc_bone_whale_path: vec![ + // usdc to whale + SwapOperation::TerraSwap { + offer_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034".to_string(), }, - // whale to ampwhale - SwapOperation::TerraSwap { - offer_asset_info: WWAssetInfo::NativeToken { - denom: - "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C".to_string() - }, - ask_asset_info: WWAssetInfo::NativeToken { - denom: - "ibc/01BAE2E69D02670B22758FBA74E4114B6E88FC1878936C919DA345E6C6C92ABF".to_string() - } + ask_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C".to_string(), + }, + }, + // whale to ampwhale + SwapOperation::TerraSwap { + offer_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C".to_string(), }, - ], + ask_asset_info: WWAssetInfo::NativeToken { + denom: "ibc/01BAE2E69D02670B22758FBA74E4114B6E88FC1878936C919DA345E6C6C92ABF".to_string(), + }, + }, + ], - terraswap_multihop_router: - "juno128lewlw6kv223uw4yzdffl8rnh3k9qs8vrf6kef28579w8ygccyq7m90n2".to_string(), + terraswap_multihop_router: "juno128lewlw6kv223uw4yzdffl8rnh3k9qs8vrf6kef28579w8ygccyq7m90n2".to_string(), // juno_bone_whale_path: todo!(), }, racoon_bet: juno_destinations::comp_prefs::RacoonBetAddresses { game: "juno1h8p0jmfn06nfqpn0medn698h950vnl7v54m2azkyjdqjlzcly7jszxh7yu".to_string(), - juno_usdc_wynd_pair: - "juno1gqy6rzary8vwnslmdavqre6jdhakcd4n2z4r803ajjmdq08r66hq7zcwrj".to_string(), + juno_usdc_wynd_pair: "juno1gqy6rzary8vwnslmdavqre6jdhakcd4n2z4r803ajjmdq08r66hq7zcwrj".to_string(), }, juno_lsds: juno_destinations::comp_prefs::JunoLsdAddresses { - bone_juno: "juno102at0mu2xeluyw9efg257yy6pyhv088qqhmp4f8wszqcwxnpdcgqsfq0nv" - .to_string(), - wy_juno: "juno18wuy5qr2mswgz7zak8yr9crhwhtur3v6mw4tcytupywxzw7sufyqgza7uh" - .to_string(), - se_juno: "juno1dlp8avgc2r6t4nnsv4yydc6lc73rjtjqvdcee9r2kf0uwuef7v0smljy8w" - .to_string(), - b_juno: "juno1dlp8avgc2r6t4nnsv4yydc6lc73rjtjqvdcee9r2kf0uwuef7v0smljy8w" - .to_string(), - amp_juno: "juno17cya4sw72h4886zsm2lk3udxaw5m8ssgpsl6nd6xl6a4ukepdgkqeuv99x" - .to_string(), + bone_juno: "juno102at0mu2xeluyw9efg257yy6pyhv088qqhmp4f8wszqcwxnpdcgqsfq0nv".to_string(), + wy_juno: "juno18wuy5qr2mswgz7zak8yr9crhwhtur3v6mw4tcytupywxzw7sufyqgza7uh".to_string(), + se_juno: "juno1dlp8avgc2r6t4nnsv4yydc6lc73rjtjqvdcee9r2kf0uwuef7v0smljy8w".to_string(), + b_juno: "juno1dlp8avgc2r6t4nnsv4yydc6lc73rjtjqvdcee9r2kf0uwuef7v0smljy8w".to_string(), + amp_juno: "juno17cya4sw72h4886zsm2lk3udxaw5m8ssgpsl6nd6xl6a4ukepdgkqeuv99x".to_string(), }, }, }; let wyndstake_project_addresses = ymos_wyndstake_outpost::msg::ContractAddresses { - take_rate_addr:junostake_project_addresses.take_rate_addr.clone(), + take_rate_addr: junostake_project_addresses.take_rate_addr.clone(), usdc: junostake_project_addresses.usdc.clone(), authzpp: ymos_wyndstake_outpost::msg::AuthzppAddresses::default(), destination_projects: junostake_project_addresses.destination_projects.clone(), - wynd_stake_addr: "juno1sy9mlw47w44f94zea7g98y5ff4cvtc8rfv75jgwphlet83wlf4ssa050mv".to_string() + wynd_stake_addr: "juno1sy9mlw47w44f94zea7g98y5ff4cvtc8rfv75jgwphlet83wlf4ssa050mv" + .to_string(), }; let junodca_project_addresses = ymos_junodca_outpost::msg::ContractAddresses { take_rate_addr: junostake_project_addresses.take_rate_addr.clone(), @@ -310,70 +238,99 @@ pub fn main() -> anyhow::Result<()> { usdc: junostake_project_addresses.usdc.clone(), authzpp: ymos_junowwmarket_outpost::msg::AuthzppAddresses::default(), destination_projects: junostake_project_addresses.destination_projects.clone(), - - terraswap_routes: TerraswapRouteAddresses { whale_usdc_pool: "juno1g7ctm7dynjsduf597d8nvt36kwvhfutmzrczdnm00tsz48uryvzqp7p32h".to_string(), + + terraswap_routes: TerraswapRouteAddresses { + whale_usdc_pool: "juno1g7ctm7dynjsduf597d8nvt36kwvhfutmzrczdnm00tsz48uryvzqp7p32h" + .to_string(), whale_to_juno_route: vec![ // whale to usdc SwapOperation::TerraSwap { - ask_asset_info: WWAssetInfo::NativeToken { + ask_asset_info: WWAssetInfo::NativeToken { denom: - "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034".to_string() + "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034" + .to_string(), }, offer_asset_info: WWAssetInfo::NativeToken { denom: - "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C".to_string() - } + "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C" + .to_string(), + }, }, // swap usdc for juno SwapOperation::TerraSwap { - ask_asset_info: WWAssetInfo::NativeToken { denom: "ujuno".to_string() }, + ask_asset_info: WWAssetInfo::NativeToken { + denom: "ujuno".to_string(), + }, offer_asset_info: WWAssetInfo::NativeToken { denom: - "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034".to_string() - } + "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034" + .to_string(), + }, }, - ], - whale_to_atom_route: vec![// whale to usdc + whale_to_atom_route: vec![ + // whale to usdc SwapOperation::TerraSwap { - ask_asset_info: WWAssetInfo::NativeToken { + ask_asset_info: WWAssetInfo::NativeToken { denom: - "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034".to_string() + "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034" + .to_string(), }, offer_asset_info: WWAssetInfo::NativeToken { denom: - "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C".to_string() - } - },SwapOperation::TerraSwap { - offer_asset_info: WWAssetInfo::NativeToken { + "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C" + .to_string(), + }, + }, + SwapOperation::TerraSwap { + offer_asset_info: WWAssetInfo::NativeToken { denom: - "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034".to_string() + "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034" + .to_string(), }, ask_asset_info: WWAssetInfo::NativeToken { denom: - "ibc/D8D6271EC54E3A96C6B9FB6C2BA9E99692B07CEB42754638029657072EA48337".to_string() - } - }, + "ibc/D8D6271EC54E3A96C6B9FB6C2BA9E99692B07CEB42754638029657072EA48337" + .to_string(), + }, + }, ], - whale_ampwhale_pool: "juno1dwmrkyhed4szdxxk6l0c98hseancjtdet58n77tfhv2as8cdjdlq7vps00".to_string(), - whale_bonewhale_pool: "juno160uh2xtegzvc7ekte5x377aud0y40hw75m9l92h7pkqk3l3eg9vqltel48".to_string(), - whale_rac_pool: "juno1qv337g245ger3cx294m3vu74z74ku7lpf4944qxf8nhx29s8568q4uwrmk".to_string(), - - usdc_asset: WWAssetInfo::NativeToken { denom: "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034".to_string() }, - ampwhale_asset: WWAssetInfo::NativeToken { denom: "ibc/2F7C2A3D5D42553ED46F57D8B0DE3733B1B5FF571E2C6A051D34525904B4C0AF" - .to_string() }, - bonewhale_asset: WWAssetInfo::NativeToken { denom: "ibc/01BAE2E69D02670B22758FBA74E4114B6E88FC1878936C919DA345E6C6C92ABF" - .to_string() }, - juno_asset: WWAssetInfo::NativeToken { denom: "ujuno".to_string() }, + whale_ampwhale_pool: "juno1dwmrkyhed4szdxxk6l0c98hseancjtdet58n77tfhv2as8cdjdlq7vps00" + .to_string(), + whale_bonewhale_pool: "juno160uh2xtegzvc7ekte5x377aud0y40hw75m9l92h7pkqk3l3eg9vqltel48" + .to_string(), + whale_rac_pool: "juno1qv337g245ger3cx294m3vu74z74ku7lpf4944qxf8nhx29s8568q4uwrmk" + .to_string(), + usdc_asset: WWAssetInfo::NativeToken { + denom: "ibc/EAC38D55372F38F1AFD68DF7FE9EF762DCF69F26520643CF3F9D292A738D8034" + .to_string(), + }, + ampwhale_asset: WWAssetInfo::NativeToken { + denom: "ibc/2F7C2A3D5D42553ED46F57D8B0DE3733B1B5FF571E2C6A051D34525904B4C0AF" + .to_string(), + }, + bonewhale_asset: WWAssetInfo::NativeToken { + denom: "ibc/01BAE2E69D02670B22758FBA74E4114B6E88FC1878936C919DA345E6C6C92ABF" + .to_string(), + }, + juno_asset: WWAssetInfo::NativeToken { + denom: "ujuno".to_string(), + }, whale_asset: WWAssetInfo::NativeToken { - denom: "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C".to_string()}, - - rac_asset: WWAssetInfo::NativeToken { denom: "ibc/D8D6271EC54E3A96C6B9FB6C2BA9E99692B07CEB42754638029657072EA48337".to_string() }, - atom_asset: WWAssetInfo::NativeToken { denom: "ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9".to_string() } + denom: "ibc/3A6ADE78FB8169C034C29C4F2E1A61CE596EC8235366F22381D981A98F1F5A5C" + .to_string(), + }, + rac_asset: WWAssetInfo::NativeToken { + denom: "ibc/D8D6271EC54E3A96C6B9FB6C2BA9E99692B07CEB42754638029657072EA48337" + .to_string(), + }, + atom_asset: WWAssetInfo::NativeToken { + denom: "ibc/C4CFF46FD6DE35CA4CF4CE031E643C8FDC9BA4B99AE598E9B0ED98FE3A2319F9" + .to_string(), + }, }, - }; let rt = Runtime::new().unwrap(); @@ -401,10 +358,8 @@ pub fn main() -> anyhow::Result<()> { println!("connected to juno with sender: {}", juno_chain.sender()); - let juno_comp_prefs = YmosCompPrefsContract::new( - "Yieldmos Juno Compounding Preferences", - juno_chain.clone(), - ); + let juno_comp_prefs = + YmosCompPrefsContract::new("Yieldmos Juno Compounding Preferences", juno_chain.clone()); let junostake = ymos_junostake_outpost::YmosJunostakeOutpost::new( "Yieldmos Junostake Outpost", @@ -414,15 +369,15 @@ pub fn main() -> anyhow::Result<()> { "Yieldmos Wyndstake Outpost", juno_chain.clone(), ); - let junodca = - ymos_junodca_outpost::YmosJunodcaOutpost::new("Yieldmos Juno DCA Outpost", juno_chain.clone()); - - let junowwmarket = - ymos_junowwmarket_outpost::YmosJunowwmarketOutpost::new("Yieldmos Juno White Whale Market Outpost", juno_chain.clone()); - - - + let junodca = ymos_junodca_outpost::YmosJunodcaOutpost::new( + "Yieldmos Juno DCA Outpost", + juno_chain.clone(), + ); + let junowwmarket = ymos_junowwmarket_outpost::YmosJunowwmarketOutpost::new( + "Yieldmos Juno White Whale Market Outpost", + juno_chain.clone(), + ); juno_comp_prefs.upload_if_needed()?; @@ -438,14 +393,12 @@ pub fn main() -> anyhow::Result<()> { junowwmarket.upload_if_needed()?; println!("junowwmarket code id: {}", junowwmarket.code_id()?); - - // juno_comp_prefs contract upload if juno_comp_prefs.address().is_err() { juno_comp_prefs.instantiate( &ymos_comp_prefs::msg::InstantiateMsg { admin: None, - chain_id:"juno-1".to_string(), + chain_id: "juno-1".to_string(), days_to_prune: 180u16, }, Some(&Addr::unchecked(juno_chain.sender().to_string())), @@ -453,17 +406,13 @@ pub fn main() -> anyhow::Result<()> { )?; // dca - juno_comp_prefs - .add_allowed_strategy_id(Uint64::from(60100u64))?; + juno_comp_prefs.add_allowed_strategy_id(Uint64::from(60100u64))?; // juno staking - juno_comp_prefs - .add_allowed_strategy_id(Uint64::from(60101u64))?; + juno_comp_prefs.add_allowed_strategy_id(Uint64::from(60101u64))?; // wynd stake - juno_comp_prefs - .add_allowed_strategy_id(Uint64::from(60102u64))?; - // white whale sat market - juno_comp_prefs - .add_allowed_strategy_id(Uint64::from(60103u64))?; + juno_comp_prefs.add_allowed_strategy_id(Uint64::from(60102u64))?; + // white whale sat market + juno_comp_prefs.add_allowed_strategy_id(Uint64::from(60103u64))?; // setup the feeshare only on the first deploy // this seems to sometimes need an increased gas multiplier in the .env to work @@ -479,9 +428,7 @@ pub fn main() -> anyhow::Result<()> { // .unwrap(); } else { juno_comp_prefs.migrate( - &ymos_comp_prefs::msg::MigrateMsg { - - }, + &ymos_comp_prefs::msg::MigrateMsg {}, juno_comp_prefs.code_id()?, )?; } @@ -563,7 +510,6 @@ pub fn main() -> anyhow::Result<()> { } println!("junodca: {}", junodca.addr_str()?); - // wyndstake contract upload if wyndstake.address().is_err() { wyndstake.instantiate( @@ -602,7 +548,6 @@ pub fn main() -> anyhow::Result<()> { } println!("wyndstake: {}", wyndstake.addr_str()?); - // junowwmarket contract upload if junowwmarket.address().is_err() { junowwmarket.instantiate( diff --git a/packages/deploy/src/migaloo-deploy.rs b/packages/deploy/src/migaloo-deploy.rs index 3fb552a..b736faf 100644 --- a/packages/deploy/src/migaloo-deploy.rs +++ b/packages/deploy/src/migaloo-deploy.rs @@ -1,10 +1,7 @@ use cosmwasm_std::Uint64; use cw_orch::{ anyhow, - daemon::{ - networks::{migaloo::MIGALOO_NETWORK}, - ChainInfo, ChainKind, DaemonBuilder, - }, + daemon::{networks::migaloo::MIGALOO_NETWORK, ChainInfo, ChainKind, DaemonBuilder}, prelude::*, }; @@ -14,18 +11,11 @@ use migaloo_destinations::comp_prefs::{ WhaleLsdAddresses, WhaleRoutes, }; use tokio::runtime::Runtime; -use white_whale::pool_network::{asset::AssetInfo, router::SwapOperation}; +use white_whale_std::pool_network::{asset::AssetInfo, router::SwapOperation}; -use ymos_comp_prefs::{ - msg::{ExecuteMsgFns as CompPrefExecuteMsgFns}, - YmosCompPrefsContract, -}; -use ymos_migaloodca_outpost::{ - msg::ExecuteMsgFns as MigaloodcaExecuteMsgFns, -}; -use ymos_migaloostake_outpost::{ - msg::ExecuteMsgFns as MigaloostakeExecuteMsgFns, -}; +use ymos_comp_prefs::{msg::ExecuteMsgFns as CompPrefExecuteMsgFns, YmosCompPrefsContract}; +use ymos_migaloodca_outpost::msg::ExecuteMsgFns as MigaloodcaExecuteMsgFns; +use ymos_migaloostake_outpost::msg::ExecuteMsgFns as MigaloostakeExecuteMsgFns; const YMOS_CONDUCTOR: &str = "migaloo1f49xq0rmah39sk58aaxq6gnqcvupee7jne0wep"; const YMOS_FEE_SHARE_COLLECTOR: &str = "migaloo1ewdttrv2ph7762egx4n2309h3m9r4z9pxsg48n"; diff --git a/packages/juno-destinations/Cargo.toml b/packages/juno-destinations/Cargo.toml index 27fc4b3..48dd1e6 100644 --- a/packages/juno-destinations/Cargo.toml +++ b/packages/juno-destinations/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "juno-destinations" -version = { workspace = true } +version = "1.0.0" authors = ["Marc "] description = "Message generators for the Juno blockchain for use by Yieldmos outpost contracts" -edition = { workspace = true } +edition = "2021" [dependencies] diff --git a/packages/juno-destinations/src/grants.rs b/packages/juno-destinations/src/grants.rs index c17f327..0f7476d 100644 --- a/packages/juno-destinations/src/grants.rs +++ b/packages/juno-destinations/src/grants.rs @@ -1,7 +1,5 @@ -use cosmwasm_std::{Addr}; -use cw_grant_spec::grants::{ - GrantBase, GrantRequirement, -}; +use cosmwasm_std::Addr; +use cw_grant_spec::grants::{GrantBase, GrantRequirement}; pub fn balance_dao_grant(base: GrantBase, contract_addr: Addr) -> Vec { vec![GrantRequirement::default_contract_exec_auth( diff --git a/packages/migaloo-destinations/Cargo.toml b/packages/migaloo-destinations/Cargo.toml index 1853aff..365c192 100644 --- a/packages/migaloo-destinations/Cargo.toml +++ b/packages/migaloo-destinations/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "migaloo-destinations" -version = { workspace = true } +version = "1.0.0" authors = ["Marc "] description = "Generalized message generators and compounding preferences used by Yieldmos outpost contracts" -edition = { workspace = true } +edition = "2021" [dependencies] diff --git a/packages/migaloo-destinations/src/grants.rs b/packages/migaloo-destinations/src/grants.rs index e833ea4..6dd6b40 100644 --- a/packages/migaloo-destinations/src/grants.rs +++ b/packages/migaloo-destinations/src/grants.rs @@ -1,10 +1,7 @@ - -use cosmwasm_std::{Addr}; -use cw_grant_spec::grants::{ - GrantBase, GrantRequirement, -}; +use cosmwasm_std::Addr; +use cw_grant_spec::grants::{GrantBase, GrantRequirement}; use sail_destinations::grants::eris_lsd_grant; -use white_whale::pool_network::asset::{AssetInfo}; +use white_whale::pool_network::asset::AssetInfo; use crate::comp_prefs::{AshAction, MigalooProjectAddrs}; diff --git a/packages/osmosis-destinations/Cargo.toml b/packages/osmosis-destinations/Cargo.toml index 744d934..e59cc2d 100644 --- a/packages/osmosis-destinations/Cargo.toml +++ b/packages/osmosis-destinations/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "osmosis-destinations" -version = { workspace = true } +version = "1.0.0" authors = ["Marc "] description = "Generalized message generators and compounding preferences used by Yieldmos outpost contracts" -edition = { workspace = true } +edition = "2021" [features] diff --git a/packages/osmosis-destinations/src/grants.rs b/packages/osmosis-destinations/src/grants.rs index e449236..25c3aa9 100644 --- a/packages/osmosis-destinations/src/grants.rs +++ b/packages/osmosis-destinations/src/grants.rs @@ -1,7 +1,5 @@ use cosmwasm_std::{Addr, Uint128}; -use cw_grant_spec::grants::{ - GrantBase, GrantRequirement, -}; +use cw_grant_spec::grants::{GrantBase, GrantRequirement}; use crate::mars_types::RedBankExecuteMsgs; diff --git a/packages/osmosis-destinations/src/pools.rs b/packages/osmosis-destinations/src/pools.rs index ca17854..fd31285 100644 --- a/packages/osmosis-destinations/src/pools.rs +++ b/packages/osmosis-destinations/src/pools.rs @@ -57,7 +57,7 @@ pub trait PoolForEach { self.pools() .iter() .for_each(|pool: &OsmosisKnownPoolListing| { - map.save(storage, &pool.out_denom, &pool.pool_id); + let _ = map.save(storage, &pool.out_denom, &pool.pool_id); }); } } diff --git a/packages/osmosis-helpers/Cargo.toml b/packages/osmosis-helpers/Cargo.toml index b71c5a8..9648422 100644 --- a/packages/osmosis-helpers/Cargo.toml +++ b/packages/osmosis-helpers/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "osmosis-helpers" -version = { workspace = true } +version = "1.0.0" authors = ["Marc "] description = "Utility functions for Osmosis interaction used by Yieldmos outpost contracts" -edition = { workspace = true } +edition = "2021" [dependencies] cosmwasm-std = { workspace = true } diff --git a/packages/osmosis-helpers/src/osmosis_lp.rs b/packages/osmosis-helpers/src/osmosis_lp.rs index cb28348..87174f1 100644 --- a/packages/osmosis-helpers/src/osmosis_lp.rs +++ b/packages/osmosis-helpers/src/osmosis_lp.rs @@ -1,10 +1,9 @@ use cosmwasm_std::{coin, Addr, Coin, Event, QuerierWrapper, StdError, Storage, Uint128}; use cw_grant_spec::grants::{GrantBase, GrantRequirement}; - use osmosis_std::types::osmosis::concentratedliquidity::v1beta1::MsgCreatePosition; +use osmosis_std::types::osmosis::gamm::v1beta1::MsgJoinSwapExternAmountIn; use osmosis_std::types::osmosis::gamm::v1beta1::Pool; -use osmosis_std::types::osmosis::gamm::v1beta1::{MsgJoinSwapExternAmountIn}; use osmosis_std::types::osmosis::lockup::MsgLockTokens; use osmosis_std::types::{ @@ -14,8 +13,8 @@ use outpost_utils::{helpers::DestProjectMsgs, msg_gen::CosmosProtoMsg}; use crate::errors::OsmosisHelperError; use crate::osmosis_swap::{ - generate_known_to_known_swap_and_sim_msg, - osmosis_swap_grants, pool_swap_with_sim, OsmosisRoutePools, + generate_known_to_known_swap_and_sim_msg, osmosis_swap_grants, pool_swap_with_sim, + OsmosisRoutePools, }; pub fn query_pool_info( diff --git a/packages/osmosis-helpers/src/osmosis_swap.rs b/packages/osmosis-helpers/src/osmosis_swap.rs index 79390e6..15b898f 100644 --- a/packages/osmosis-helpers/src/osmosis_swap.rs +++ b/packages/osmosis-helpers/src/osmosis_swap.rs @@ -10,10 +10,11 @@ use osmosis_destinations::{ }; use osmosis_std::types::cosmos::base::v1beta1::Coin; use osmosis_std::types::osmosis::poolmanager::v1beta1::{ - EstimateSwapExactAmountInRequest, EstimateSwapExactAmountInResponse, EstimateSwapExactAmountOutResponse, MsgSwapExactAmountIn, - MsgSwapExactAmountOut, SwapAmountInRoute, SwapAmountOutRoute, + EstimateSwapExactAmountInRequest, EstimateSwapExactAmountInResponse, + EstimateSwapExactAmountOutResponse, MsgSwapExactAmountIn, MsgSwapExactAmountOut, + SwapAmountInRoute, SwapAmountOutRoute, }; -use outpost_utils::{msg_gen::CosmosProtoMsg}; +use outpost_utils::msg_gen::CosmosProtoMsg; use crate::errors::OsmosisHelperError; diff --git a/packages/osmosis-helpers/src/tests.rs b/packages/osmosis-helpers/src/tests.rs index 647ff86..73cecde 100644 --- a/packages/osmosis-helpers/src/tests.rs +++ b/packages/osmosis-helpers/src/tests.rs @@ -1,4 +1,3 @@ -use cosmwasm_std::Uint128; use osmosis_destinations::{ comp_prefs::DestProjectSwapRoutes, pools::{Denoms, OsmoPools, OsmosisKnownPoolListing, UsdcPools}, diff --git a/packages/sail-destinations/Cargo.toml b/packages/sail-destinations/Cargo.toml index 4ffbfff..f74fe6b 100644 --- a/packages/sail-destinations/Cargo.toml +++ b/packages/sail-destinations/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "sail-destinations" -version = { workspace = true } +version = "1.0.0" authors = ["Marc "] description = "Generalized message generators and compounding preferences used by Yieldmos outpost contracts" -edition = { workspace = true } +edition = "2021" [dependencies] diff --git a/packages/sail-destinations/src/dest_project_gen.rs b/packages/sail-destinations/src/dest_project_gen.rs index b958760..53f7ca6 100644 --- a/packages/sail-destinations/src/dest_project_gen.rs +++ b/packages/sail-destinations/src/dest_project_gen.rs @@ -3,9 +3,7 @@ use crate::{ errors::SailDestinationError, }; use cosmos_sdk_proto::cosmos::base::v1beta1::Coin as CsdkCoin; -use cosmwasm_std::{ - to_json_binary, Addr, Attribute, Coin, Event, QuerierWrapper, Uint128, -}; +use cosmwasm_std::{to_json_binary, Addr, Attribute, Coin, Event, QuerierWrapper, Uint128}; use outpost_utils::{ helpers::{csdk_coins, DestProjectMsgs}, msg_gen::{create_exec_contract_msg, CosmosProtoMsg}, diff --git a/packages/sail-destinations/src/grants.rs b/packages/sail-destinations/src/grants.rs index 644ccb9..44a2998 100644 --- a/packages/sail-destinations/src/grants.rs +++ b/packages/sail-destinations/src/grants.rs @@ -1,7 +1,5 @@ -use cosmwasm_std::{Addr}; -use cw_grant_spec::grants::{ - GrantBase, GrantRequirement, -}; +use cosmwasm_std::Addr; +use cw_grant_spec::grants::{GrantBase, GrantRequirement}; use white_whale::pool_network::asset::AssetInfo; pub fn eris_lsd_grant(base: GrantBase, lsd_addr: Addr, asset: AssetInfo) -> Vec { diff --git a/packages/terraswap-helpers/Cargo.toml b/packages/terraswap-helpers/Cargo.toml index 7ea7aee..e5f7e33 100644 --- a/packages/terraswap-helpers/Cargo.toml +++ b/packages/terraswap-helpers/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "terraswap-helpers" -version = { workspace = true } +version = "1.0.0" authors = ["Marc "] description = "Utility functions for Terraswap interaction used by Yieldmos outpost contracts" -edition = { workspace = true } +edition = "2021" [dependencies] cosmwasm-std = { workspace = true } diff --git a/packages/universal-destinations/Cargo.toml b/packages/universal-destinations/Cargo.toml index e0a5415..c55d3d3 100644 --- a/packages/universal-destinations/Cargo.toml +++ b/packages/universal-destinations/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "universal-destinations" -version = { workspace = true } +version = "1.0.0" authors = ["Marc "] description = "Generalized message generators and compounding preferences used by Yieldmos outpost contracts" -edition = { workspace = true } +edition = "2021" [dependencies] diff --git a/packages/utils/Cargo.toml b/packages/utils/Cargo.toml index 1474002..9983d16 100644 --- a/packages/utils/Cargo.toml +++ b/packages/utils/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "outpost-utils" -version = { workspace = true } +version = "1.0.0" authors = ["Marc "] description = "Utility functions used by Yieldmos outpost contracts" -edition = { workspace = true } +edition = "2021" [features] # osmosis = [] diff --git a/packages/wynd-helpers/Cargo.toml b/packages/wynd-helpers/Cargo.toml index 3eeeb39..f6f8f4c 100644 --- a/packages/wynd-helpers/Cargo.toml +++ b/packages/wynd-helpers/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "wynd-helpers" -version = { workspace = true } +version = "1.0.0" authors = ["Marc "] description = "Utility functions for Wynd interaction used by Yieldmos outpost contracts" -edition = { workspace = true } +edition = "2021" [dependencies] cosmwasm-std = { workspace = true }