diff --git a/Cargo.lock b/Cargo.lock index fc95dfed..b8d29102 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -801,7 +801,7 @@ checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" [[package]] name = "drop-factory" version = "1.0.0" -source = "git+https://github.com/hadronlabs-org/drop-contracts.git?branch=main#afaa0229b7535e344a2d852b9596dde69dab23a3" +source = "git+https://github.com/hadronlabs-org/drop-contracts.git?branch=feat/audit-fixes#a4da7691eb86e0c2364b9d4daccba9b1f036d2ab" dependencies = [ "cosmwasm-schema", "cosmwasm-std", @@ -813,18 +813,22 @@ dependencies = [ "drop-puppeteer-base", "drop-staking-base", "neutron-sdk 0.10.0 (git+https://github.com/neutron-org/neutron-sdk?branch=feat/proposal-votes)", + "semver", "thiserror", ] [[package]] name = "drop-helpers" version = "1.0.0" -source = "git+https://github.com/hadronlabs-org/drop-contracts.git?branch=main#afaa0229b7535e344a2d852b9596dde69dab23a3" +source = "git+https://github.com/hadronlabs-org/drop-contracts.git?branch=feat/audit-fixes#a4da7691eb86e0c2364b9d4daccba9b1f036d2ab" dependencies = [ + "cosmos-sdk-proto 0.20.0", "cosmwasm-schema", "cosmwasm-std", "cw-storage-plus 1.2.0", "neutron-sdk 0.10.0 (git+https://github.com/neutron-org/neutron-sdk?branch=feat/proposal-votes)", + "prost 0.12.4", + "schemars", "serde", "serde-json-wasm 1.0.1", "thiserror", @@ -833,7 +837,7 @@ dependencies = [ [[package]] name = "drop-macros" version = "1.0.0" -source = "git+https://github.com/hadronlabs-org/drop-contracts.git?branch=main#afaa0229b7535e344a2d852b9596dde69dab23a3" +source = "git+https://github.com/hadronlabs-org/drop-contracts.git?branch=feat/audit-fixes#a4da7691eb86e0c2364b9d4daccba9b1f036d2ab" dependencies = [ "cosmwasm-schema", "cosmwasm-std", @@ -845,7 +849,7 @@ dependencies = [ [[package]] name = "drop-puppeteer-base" version = "1.0.0" -source = "git+https://github.com/hadronlabs-org/drop-contracts.git?branch=main#afaa0229b7535e344a2d852b9596dde69dab23a3" +source = "git+https://github.com/hadronlabs-org/drop-contracts.git?branch=feat/audit-fixes#a4da7691eb86e0c2364b9d4daccba9b1f036d2ab" dependencies = [ "cosmos-sdk-proto 0.20.0", "cosmwasm-schema", @@ -857,6 +861,7 @@ dependencies = [ "prost 0.12.4", "prost-types 0.12.4", "schemars", + "semver", "serde", "serde-json-wasm 1.0.1", "thiserror", @@ -865,7 +870,7 @@ dependencies = [ [[package]] name = "drop-staking-base" version = "1.0.0" -source = "git+https://github.com/hadronlabs-org/drop-contracts.git?branch=main#afaa0229b7535e344a2d852b9596dde69dab23a3" +source = "git+https://github.com/hadronlabs-org/drop-contracts.git?branch=feat/audit-fixes#a4da7691eb86e0c2364b9d4daccba9b1f036d2ab" dependencies = [ "astroport 3.12.2", "cosmos-sdk-proto 0.20.0", @@ -873,6 +878,7 @@ dependencies = [ "cosmwasm-std", "cw-ownable", "cw-storage-plus 1.2.0", + "cw-utils 1.0.3", "cw721 0.18.0", "cw721-base 0.18.0", "drop-helpers", @@ -881,6 +887,7 @@ dependencies = [ "neutron-sdk 0.10.0 (git+https://github.com/neutron-org/neutron-sdk?branch=feat/proposal-votes)", "optfield", "prost 0.12.4", + "semver", "serde", "thiserror", ] diff --git a/Cargo.toml b/Cargo.toml index 414d3691..6a93dfee 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,8 +37,8 @@ cw-utils = "1.0.3" cw-multi-test = "0.20.0" ibc-proto = { version = "0.32.1", default-features = false } lido-satellite = { git = "https://github.com/hadronlabs-org/lido-satellite", branch = "main", features = ["library"] } -drop-factory = { git = "https://github.com/hadronlabs-org/drop-contracts.git", branch = "main", features = ["library"] } -drop-staking-base = { git = "https://github.com/hadronlabs-org/drop-contracts.git", branch = "main", features = ["library"] } +drop-factory = { git = "https://github.com/hadronlabs-org/drop-contracts.git", branch = "feat/audit-fixes", features = ["library"] } +drop-staking-base = { git = "https://github.com/hadronlabs-org/drop-contracts.git", branch = "feat/audit-fixes", features = ["library"] } neutron-proto = { version = "0.1.1", default-features = false, features = ["cosmwasm"] } neutron-sdk = "0.10.0" osmosis-std = "0.15.3" diff --git a/contracts/adapters/swap/drop/src/contract.rs b/contracts/adapters/swap/drop/src/contract.rs index 43052b8e..7bf15331 100644 --- a/contracts/adapters/swap/drop/src/contract.rs +++ b/contracts/adapters/swap/drop/src/contract.rs @@ -1,6 +1,9 @@ use crate::{ error::{ContractError, ContractResult}, - state::{BONDED_DENOM, DROP_CORE_CONTRACT_ADDRESS, ENTRY_POINT_CONTRACT_ADDRESS, REMOTE_DENOM}, + state::{ + DROP_CORE_CONTRACT_ADDRESS, DROP_TOKEN_CONTRACT_ADDRESS, ENTRY_POINT_CONTRACT_ADDRESS, + FACTORY_BONDED_DENOM, IBC_REMOTE_DENOM, + }, }; use cosmwasm_std::{ entry_point, to_json_binary, Binary, Coin, Decimal, Deps, DepsMut, Env, MessageInfo, Response, @@ -66,17 +69,27 @@ pub fn instantiate( &deps.api.addr_validate(&drop_factory_state.core_contract)?, )?; + DROP_TOKEN_CONTRACT_ADDRESS.save( + deps.storage, + &deps.api.addr_validate(&drop_factory_state.token_contract)?, + )?; + + let drop_token_config: drop_staking_base::msg::token::ConfigResponse = + deps.querier.query_wasm_smart( + &drop_factory_state.token_contract, + &drop_staking_base::msg::token::QueryMsg::Config {}, + )?; + + let bonded_denom = drop_token_config.denom; + + FACTORY_BONDED_DENOM.save(deps.storage, &bonded_denom)?; + let drop_core_config: drop_staking_base::state::core::Config = deps.querier.query_wasm_smart( - &checked_drop_factory_contract_address, + &drop_factory_state.core_contract, &drop_staking_base::msg::core::QueryMsg::Config {}, )?; - let bonded_denom = drop_core_config - .ld_denom - .ok_or(ContractError::BondedDenomNotSet {})?; - - BONDED_DENOM.save(deps.storage, &bonded_denom)?; - REMOTE_DENOM.save(deps.storage, &drop_core_config.remote_denom)?; + IBC_REMOTE_DENOM.save(deps.storage, &drop_core_config.base_denom)?; Ok(Response::new() .add_attribute("action", "instantiate") @@ -92,8 +105,8 @@ pub fn instantiate( "drop_core_contract_address", drop_factory_state.core_contract, ) - .add_attribute("bonded_denom", bonded_denom) - .add_attribute("remote_denom", drop_core_config.remote_denom)) + .add_attribute("factory_bonded_denom", bonded_denom) + .add_attribute("ibc_remote_denom", drop_core_config.base_denom)) } /////////////// @@ -142,13 +155,16 @@ fn execute_swap( // Get coin in from the message info, error if there is not exactly one coin sent let coin_in = one_coin(&info)?; - let remote_denom = REMOTE_DENOM.load(deps.storage)?; - let bonded_denom = BONDED_DENOM.load(deps.storage)?; + let remote_denom = IBC_REMOTE_DENOM.load(deps.storage)?; + let bonded_denom = FACTORY_BONDED_DENOM.load(deps.storage)?; // Decide which message to Core contract should be emitted let (drop_core_msg, return_denom) = if coin_in.denom == remote_denom { ( - drop_staking_base::msg::core::ExecuteMsg::Bond { receiver: None }, + drop_staking_base::msg::core::ExecuteMsg::Bond { + r#ref: None, + receiver: None, + }, bonded_denom, ) } else { @@ -185,8 +201,8 @@ fn execute_swap( #[cfg_attr(not(feature = "library"), entry_point)] pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> ContractResult { - let remote_denom = REMOTE_DENOM.load(deps.storage)?; - let bonded_denom = BONDED_DENOM.load(deps.storage)?; + let remote_denom = IBC_REMOTE_DENOM.load(deps.storage)?; + let bonded_denom = FACTORY_BONDED_DENOM.load(deps.storage)?; match msg { QueryMsg::SimulateSwapExactAssetIn { asset_in, .. } => { diff --git a/contracts/adapters/swap/drop/src/state.rs b/contracts/adapters/swap/drop/src/state.rs index 03a28c54..bb938c56 100644 --- a/contracts/adapters/swap/drop/src/state.rs +++ b/contracts/adapters/swap/drop/src/state.rs @@ -3,6 +3,7 @@ use cw_storage_plus::Item; pub const ENTRY_POINT_CONTRACT_ADDRESS: Item = Item::new("entry_point_contract_address"); pub const DROP_CORE_CONTRACT_ADDRESS: Item = Item::new("drop_core_contract_address"); +pub const DROP_TOKEN_CONTRACT_ADDRESS: Item = Item::new("drop_token_contract_address"); -pub const BONDED_DENOM: Item = Item::new("bonded_denom"); -pub const REMOTE_DENOM: Item = Item::new("remote_denom"); +pub const FACTORY_BONDED_DENOM: Item = Item::new("factory_bonded_denom"); +pub const IBC_REMOTE_DENOM: Item = Item::new("ibc_remote_denom"); diff --git a/contracts/adapters/swap/drop/tests/test_execute_swap.rs b/contracts/adapters/swap/drop/tests/test_execute_swap.rs index 90e29e26..1f5f855a 100644 --- a/contracts/adapters/swap/drop/tests/test_execute_swap.rs +++ b/contracts/adapters/swap/drop/tests/test_execute_swap.rs @@ -8,7 +8,10 @@ use cosmwasm_std::{ use skip::swap::ExecuteMsg; use skip_api_swap_adapter_drop::{ error::{ContractError, ContractResult}, - state::{BONDED_DENOM, DROP_CORE_CONTRACT_ADDRESS, ENTRY_POINT_CONTRACT_ADDRESS, REMOTE_DENOM}, + state::{ + DROP_CORE_CONTRACT_ADDRESS, ENTRY_POINT_CONTRACT_ADDRESS, FACTORY_BONDED_DENOM, + IBC_REMOTE_DENOM, + }, }; use test_case::test_case; @@ -44,7 +47,7 @@ struct Params { id: 0, msg: WasmMsg::Execute { contract_addr: "drop_core_contract".to_string(), - msg: to_json_binary(&drop_staking_base::msg::core::ExecuteMsg::Bond{ receiver: None })?, + msg: to_json_binary(&drop_staking_base::msg::core::ExecuteMsg::Bond{ r#ref: None, receiver: None })?, funds: vec![Coin::new(100, "ibc/uatom")], } .into(), @@ -131,8 +134,8 @@ fn test_execute_swap(params: Params) -> ContractResult<()> { )?; // Store Lido Satellite denoms - REMOTE_DENOM.save(deps.as_mut().storage, &String::from("ibc/uatom"))?; - BONDED_DENOM.save(deps.as_mut().storage, &String::from("factory/uatom"))?; + IBC_REMOTE_DENOM.save(deps.as_mut().storage, &String::from("ibc/uatom"))?; + FACTORY_BONDED_DENOM.save(deps.as_mut().storage, &String::from("factory/uatom"))?; // Call execute_swap with the given test parameters let res = skip_api_swap_adapter_drop::contract::execute( diff --git a/contracts/adapters/swap/drop/tests/test_queries.rs b/contracts/adapters/swap/drop/tests/test_queries.rs index 960d88a0..db596613 100644 --- a/contracts/adapters/swap/drop/tests/test_queries.rs +++ b/contracts/adapters/swap/drop/tests/test_queries.rs @@ -7,7 +7,7 @@ use cosmwasm_std::{ use skip::{asset::Asset, swap::QueryMsg}; use skip_api_swap_adapter_drop::{ error::ContractResult, - state::{BONDED_DENOM, DROP_CORE_CONTRACT_ADDRESS, REMOTE_DENOM}, + state::{DROP_CORE_CONTRACT_ADDRESS, FACTORY_BONDED_DENOM, IBC_REMOTE_DENOM}, }; use test_case::test_case; @@ -176,8 +176,8 @@ fn test_queries(params: Params) -> ContractResult<()> { )?; // Store Lido Satellite denoms - REMOTE_DENOM.save(deps.as_mut().storage, &String::from("ibc/uatom"))?; - BONDED_DENOM.save(deps.as_mut().storage, &String::from("factory/uatom"))?; + IBC_REMOTE_DENOM.save(deps.as_mut().storage, &String::from("ibc/uatom"))?; + FACTORY_BONDED_DENOM.save(deps.as_mut().storage, &String::from("factory/uatom"))?; // Call execute_swap with the given test parameters let res = skip_api_swap_adapter_drop::contract::query(deps.as_ref(), env, params.query.clone())