diff --git a/Cargo.lock b/Cargo.lock index be4c57217..83bfeb192 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -753,7 +753,7 @@ dependencies = [ [[package]] name = "andromeda-osmosis-token-factory" -version = "0.1.1-b.3" +version = "0.1.1-b.4" dependencies = [ "andromeda-socket", "andromeda-std", @@ -892,7 +892,7 @@ dependencies = [ [[package]] name = "andromeda-socket-astroport" -version = "0.1.8-b.5" +version = "0.1.8-b.6" dependencies = [ "andromeda-socket", "andromeda-std", diff --git a/contracts/socket/andromeda-osmosis-token-factory/Cargo.toml b/contracts/socket/andromeda-osmosis-token-factory/Cargo.toml index 286dade73..8ccb8a546 100644 --- a/contracts/socket/andromeda-osmosis-token-factory/Cargo.toml +++ b/contracts/socket/andromeda-osmosis-token-factory/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "andromeda-osmosis-token-factory" -version = "0.1.1-b.3" +version = "0.1.1-b.4" edition = "2021" rust-version = "1.86.0" diff --git a/contracts/socket/andromeda-socket-astroport/Cargo.toml b/contracts/socket/andromeda-socket-astroport/Cargo.toml index 59ee26359..082581839 100644 --- a/contracts/socket/andromeda-socket-astroport/Cargo.toml +++ b/contracts/socket/andromeda-socket-astroport/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "andromeda-socket-astroport" -version = "0.1.8-b.5" +version = "0.1.8-b.6" edition = "2021" rust-version = "1.86.0" diff --git a/contracts/socket/andromeda-socket-astroport/src/contract.rs b/contracts/socket/andromeda-socket-astroport/src/contract.rs index b970170d8..e9bde36c1 100644 --- a/contracts/socket/andromeda-socket-astroport/src/contract.rs +++ b/contracts/socket/andromeda-socket-astroport/src/contract.rs @@ -13,7 +13,7 @@ use cosmwasm_std::{ attr, entry_point, from_json, wasm_execute, Binary, Decimal, Deps, DepsMut, Env, MessageInfo, Reply, Response, StdError, Uint128, }; -use cosmwasm_std::{CosmosMsg, SubMsg}; +use cosmwasm_std::{CosmosMsg, Event, SubMsg}; use cw2::set_contract_version; use cw20::{Cw20ExecuteMsg, Cw20ReceiveMsg}; @@ -36,9 +36,9 @@ use crate::{ }; use andromeda_socket::astroport::{ - transform_asset_info, AssetEntry, AssetInfo, AssetInfoAstroport, Cw20HookMsg, ExecuteMsg, - InstantiateMsg, PairExecuteMsg, PairType, QueryMsg, SimulateSwapOperationResponse, - SwapOperation, + transform_asset_entry, transform_asset_entry_info, transform_asset_info, AndromedaAssetEntry, + AssetEntry, AssetInfo, AssetInfoAstroport, Cw20HookMsg, ExecuteMsg, InstantiateMsg, + PairExecuteMsg, PairType, QueryMsg, SimulateSwapOperationResponse, SwapOperation, }; const CONTRACT_NAME: &str = "crates.io:andromeda-socket-astroport"; @@ -126,7 +126,6 @@ pub fn execute(ctx: ExecuteContext, msg: ExecuteMsg) -> Result Result create_pair_and_provide_liquidity( ctx, pair_type, - asset_infos, init_params, assets, slippage_tolerance, @@ -368,11 +366,17 @@ fn provide_liquidity( let provide_wasm_msg = wasm_execute(pair_addr_raw, &provide_liquidity_msg, native_coins)?; response_msgs = response_msgs.add_message(provide_wasm_msg); - Ok(response_msgs.add_attributes(vec![ - attr("action", "provide_liquidity"), - attr("pair_address", pair_address.to_string()), - attr("assets", format!("{:?}", assets)), - ])) + Ok(response_msgs + .add_attributes(vec![ + attr("action", "provide_liquidity"), + attr("pair_address", pair_address.to_string()), + attr("assets", format!("{:?}", assets)), + ]) + .add_event( + Event::new("liquidity_provided") + .add_attribute("pair_address", pair_address.to_string()) + .add_attribute("assets", format!("{:?}", assets)), + )) } fn execute_update_swap_router( @@ -399,9 +403,8 @@ fn execute_update_swap_router( fn create_pair_and_provide_liquidity( ctx: ExecuteContext, pair_type: PairType, - asset_infos: Vec, init_parameters: Option, - assets: Vec, + assets: Vec, slippage_tolerance: Option, auto_stake: Option, receiver: Option, @@ -412,7 +415,7 @@ fn create_pair_and_provide_liquidity( // Store the liquidity provision parameters for use in the reply handler let liquidity_state = LiquidityProvisionState { - assets: assets.clone(), + assets: transform_asset_entry(&assets, &deps)?, slippage_tolerance, auto_stake, receiver, @@ -420,9 +423,9 @@ fn create_pair_and_provide_liquidity( }; LIQUIDITY_PROVISION_STATE.save(deps.storage, &liquidity_state)?; - let asset_infos: Vec = asset_infos + let asset_infos: Vec = assets .iter() - .map(|asset_info| transform_asset_info(asset_info, &deps)) + .map(|asset| transform_asset_entry_info(asset, &deps)) .collect::, ContractError>>()?; let create_factory_pair_msg = AstroportFactoryExecuteMsg::CreatePair { @@ -561,10 +564,15 @@ pub fn reply(deps: DepsMut, env: Env, msg: Reply) -> Result { if msg.result.is_err() { @@ -660,11 +668,20 @@ pub fn reply(deps: DepsMut, env: Env, msg: Reply) -> Result { if msg.result.is_err() { @@ -675,7 +692,8 @@ pub fn reply(deps: DepsMut, env: Env, msg: Reply) -> Result { if msg.result.is_err() { @@ -738,10 +756,15 @@ pub fn reply(deps: DepsMut, env: Env, msg: Reply) -> Result Err(ContractError::Std(StdError::generic_err( "Invalid Reply ID".to_string(), diff --git a/contracts/socket/andromeda-socket-osmosis/src/contract.rs b/contracts/socket/andromeda-socket-osmosis/src/contract.rs index 6d55860f0..396558038 100644 --- a/contracts/socket/andromeda-socket-osmosis/src/contract.rs +++ b/contracts/socket/andromeda-socket-osmosis/src/contract.rs @@ -10,8 +10,8 @@ use andromeda_std::{ #[cfg(not(feature = "library"))] use cosmwasm_std::entry_point; use cosmwasm_std::{ - attr, ensure, BankMsg, Binary, CosmosMsg, Deps, DepsMut, Env, MessageInfo, Reply, Response, - StdError, SubMsg, SubMsgResponse, SubMsgResult, + attr, ensure, BankMsg, Binary, CosmosMsg, Deps, DepsMut, Env, Event, MessageInfo, Reply, + Response, StdError, SubMsg, SubMsgResponse, SubMsgResult, }; use cw2::set_contract_version; use cw_utils::one_coin; @@ -130,14 +130,23 @@ fn execute_swap_and_forward( route, )?; + let from_denom_attr = from_denom.clone(); + let to_denom_attr = to_denom.clone(); Ok(Response::default() .add_submessage(swap_msg) .add_attributes(vec![ - attr("from_denom", from_denom), + attr("from_denom", from_denom_attr.clone()), attr("from_amount", fund.amount), - attr("to_denom", to_denom), + attr("to_denom", to_denom_attr.clone()), attr("recipient", recipient.get_addr()), - ])) + ]) + .add_event( + Event::new("swap_and_forward") + .add_attribute("from_denom", from_denom_attr) + .add_attribute("from_amount", fund.amount.to_string()) + .add_attribute("to_denom", to_denom_attr) + .add_attribute("recipient", recipient.get_addr()), + )) } pub fn execute_create_pool( @@ -229,7 +238,13 @@ pub fn execute_create_pool( } }; - Ok(Response::default().add_submessage(msg)) + Ok(Response::default().add_submessage(msg).add_event( + Event::new("create_pool_requested") + .add_attribute("denom0", denom0.clone()) + .add_attribute("amount0", amount0.to_string()) + .add_attribute("denom1", denom1.clone()) + .add_attribute("amount1", amount1.to_string()), + )) } fn execute_withdraw_pool( @@ -341,13 +356,22 @@ pub fn reply(deps: DepsMut, env: Env, msg: Reply) -> Result Result { if msg.result.is_err() { @@ -372,7 +398,8 @@ pub fn reply(deps: DepsMut, env: Env, msg: Reply) -> Result { if msg.result.is_err() { @@ -381,7 +408,9 @@ pub fn reply(deps: DepsMut, env: Env, msg: Reply) -> Result { if msg.result.is_err() { @@ -390,7 +419,9 @@ pub fn reply(deps: DepsMut, env: Env, msg: Reply) -> Result Err(ContractError::Std(StdError::generic_err( "Invalid Reply ID".to_string(), diff --git a/packages/andromeda-socket/src/astroport.rs b/packages/andromeda-socket/src/astroport.rs index 7ddca3881..599579863 100644 --- a/packages/andromeda-socket/src/astroport.rs +++ b/packages/andromeda-socket/src/astroport.rs @@ -71,12 +71,18 @@ pub enum ExecuteMsg { CreatePairAndProvideLiquidity { /// The pair type (exposed in [`PairType`]) pair_type: PairType, - /// The assets to create the pool for - asset_infos: Vec, /// Optional binary serialised parameters for custom pool types init_params: Option, + /// The assets used for creating pair type + /// AssetEntry { + /// info : AssetInfo { + /// Token: {contract: addr} + /// NativeToken: {denom: String} + /// } + /// amount: Uint128 + /// } /// The assets to deposit as liquidity - assets: Vec, + assets: Vec, /// The slippage tolerance for the liquidity provision slippage_tolerance: Option, /// Determines whether the LP tokens minted for the user are auto staked in the Generator contract @@ -282,6 +288,14 @@ pub struct AssetEntry { pub amount: Uint128, } +#[cw_serde] +pub struct AndromedaAssetEntry { + /// Asset info + pub info: AssetInfoAstroport, + /// Asset amount + pub amount: Uint128, +} + /// Astroport Pair contract execute messages #[cw_serde] pub enum PairExecuteMsg { @@ -304,6 +318,43 @@ pub struct PairAddressResponse { pub pair_address: Option, } +pub fn transform_asset_entry_info( + asset_entry: &AndromedaAssetEntry, + deps: &DepsMut, +) -> Result { + match &asset_entry.info { + AssetInfoAstroport::Token { contract_addr } => Ok(AssetInfo::Token { + contract_addr: contract_addr.get_raw_address(&deps.as_ref())?, + }), + AssetInfoAstroport::NativeToken { denom } => Ok(AssetInfo::NativeToken { + denom: denom.clone(), + }), + } +} + +pub fn transform_asset_entry( + asset_entries: &[AndromedaAssetEntry], + deps: &DepsMut, +) -> Result, ContractError> { + asset_entries + .iter() + .map(|entry| { + let info = match &entry.info { + AssetInfoAstroport::Token { contract_addr } => AssetInfo::Token { + contract_addr: contract_addr.get_raw_address(&deps.as_ref())?, + }, + AssetInfoAstroport::NativeToken { denom } => AssetInfo::NativeToken { + denom: denom.clone(), + }, + }; + Ok(AssetEntry { + info, + amount: entry.amount, + }) + }) + .collect() +} + pub fn transform_asset_info( asset_info: &AssetInfoAstroport, deps: &DepsMut, diff --git a/tests/e2e/tests/socket_astroport_pool.rs b/tests/e2e/tests/socket_astroport_pool.rs index 04112c85b..f09718cbd 100644 --- a/tests/e2e/tests/socket_astroport_pool.rs +++ b/tests/e2e/tests/socket_astroport_pool.rs @@ -1,6 +1,6 @@ use andromeda_app_contract::AppContract; use andromeda_socket::astroport::{ - AssetEntry, AssetInfo, AssetInfoAstroport, ExecuteMsg as SocketAstroportExecuteMsg, + AndromedaAssetEntry, AssetInfoAstroport, ExecuteMsg as SocketAstroportExecuteMsg, InstantiateMsg, PairType, }; @@ -178,24 +178,16 @@ fn test_create_pool_and_provide_liquidity_and_withdraw(setup: TestCase) { .execute( &SocketAstroportExecuteMsg::CreatePairAndProvideLiquidity { pair_type: PairType::Xyk {}, - asset_infos: vec![ - AssetInfoAstroport::Token { - contract_addr: cw20_contract.address().unwrap().into(), - }, - AssetInfoAstroport::NativeToken { - denom: "untrn".to_string(), - }, - ], init_params: None, assets: vec![ - AssetEntry { - info: AssetInfo::Token { - contract_addr: cw20_contract.address().unwrap(), + AndromedaAssetEntry { + info: AssetInfoAstroport::Token { + contract_addr: cw20_contract.address().unwrap().into(), }, amount: cw20_amount, }, - AssetEntry { - info: AssetInfo::NativeToken { + AndromedaAssetEntry { + info: AssetInfoAstroport::NativeToken { denom: "untrn".to_string(), }, amount: native_amount,