From f1aa0117389660a7d71c117883e35c63574fb57d Mon Sep 17 00:00:00 2001 From: Buckram Date: Wed, 12 Jul 2023 17:37:48 +0300 Subject: [PATCH 1/7] install_adapter --- .../account/manager/tests/adapters.rs | 23 ++++++++++++++++++ .../contracts/account/manager/tests/apps.rs | 24 +++++++++++++++++++ .../native/module-factory/src/commands.rs | 2 +- .../abstract-interface/src/account/mod.rs | 11 ++++++--- 4 files changed, 56 insertions(+), 4 deletions(-) diff --git a/framework/contracts/account/manager/tests/adapters.rs b/framework/contracts/account/manager/tests/adapters.rs index 1ab6871be..7dd1b4598 100644 --- a/framework/contracts/account/manager/tests/adapters.rs +++ b/framework/contracts/account/manager/tests/adapters.rs @@ -366,3 +366,26 @@ fn installing_specific_version_should_install_expected() -> AResult { Ok(()) } + +#[test] +fn account_install_adapter() -> AResult { + let sender = Addr::unchecked(common::OWNER); + let chain = Mock::new(&sender); + let deployment = Abstract::deploy_on(chain.clone(), Empty {})?; + let account = create_default_account(&deployment.account_factory)?; + + deployment + .version_control + .claim_namespace(1, "tester".to_owned())?; + + let adapter = BootMockAdapter1V1::new_test(chain.clone()); + adapter.deploy(V1.parse().unwrap(), MockInitMsg)?; + let adapter_addr = account.install_adapter(adapter, &MockInitMsg, None)?; + let module_addr = account + .manager + .module_info(common::mock_modules::adapter_1::MOCK_ADAPTER_ID)? + .unwrap() + .address; + assert_that!(adapter_addr).is_equal_to(module_addr); + Ok(()) +} diff --git a/framework/contracts/account/manager/tests/apps.rs b/framework/contracts/account/manager/tests/apps.rs index 2d5296b89..56a19d3eb 100644 --- a/framework/contracts/account/manager/tests/apps.rs +++ b/framework/contracts/account/manager/tests/apps.rs @@ -1,4 +1,5 @@ mod common; +use abstract_app::gen_app_mock; use abstract_core::PROXY; use abstract_interface::*; @@ -8,6 +9,10 @@ use cw_orch::deploy::Deploy; use cw_orch::prelude::*; use speculoos::prelude::*; +const APP_ID: &str = "tester:app"; +const APP_VERSION: &str = "1.0.0"; +gen_app_mock!(MockApp, APP_ID, APP_VERSION, &[]); + #[test] fn execute_on_proxy_through_manager() -> AResult { let sender = Addr::unchecked(common::OWNER); @@ -49,3 +54,22 @@ fn execute_on_proxy_through_manager() -> AResult { Ok(()) } + +#[test] +fn account_install_app() -> AResult { + let sender = Addr::unchecked(common::OWNER); + let chain = Mock::new(&sender); + let deployment = Abstract::deploy_on(chain.clone(), Empty {})?; + let account = create_default_account(&deployment.account_factory)?; + + deployment + .version_control + .claim_namespace(1, "tester".to_owned())?; + + let app = MockApp::new_test(chain.clone()); + app.deploy(APP_VERSION.parse().unwrap())?; + let app_addr = account.install_app(app, &MockInitMsg, None)?; + let module_addr = account.manager.module_info(APP_ID)?.unwrap().address; + assert_that!(app_addr).is_equal_to(module_addr); + Ok(()) +} diff --git a/framework/contracts/native/module-factory/src/commands.rs b/framework/contracts/native/module-factory/src/commands.rs index 3517a375c..5038e4b77 100644 --- a/framework/contracts/native/module-factory/src/commands.rs +++ b/framework/contracts/native/module-factory/src/commands.rs @@ -103,7 +103,7 @@ pub fn execute_create_module( )? .into(); Ok( - ModuleFactoryResponse::new("execute_create_module", vec![("module", &module_id)]) + ModuleFactoryResponse::new("execute_create_module", vec![("new_module", &module_id)]) .add_message(register_msg), ) } diff --git a/framework/packages/abstract-interface/src/account/mod.rs b/framework/packages/abstract-interface/src/account/mod.rs index 6477921b5..a42d1a29a 100644 --- a/framework/packages/abstract-interface/src/account/mod.rs +++ b/framework/packages/abstract-interface/src/account/mod.rs @@ -132,7 +132,7 @@ impl AbstractAccount { adapter: T, custom_init_msg: &CustomInitMsg, funds: Option<&[Coin]>, - ) -> Result<(), crate::AbstractInterfaceError> { + ) -> Result { // retrieve the deployment let abstr = Abstract::load_from(self.manager.get_chain().to_owned())?; @@ -143,8 +143,13 @@ impl AbstractAccount { version_control_address: abstr.version_control.address()?.into(), }, }; - self.install_module(&adapter.id(), &init_msg, funds)?; - Ok(()) + + let resp = self.install_module(&adapter.id(), &init_msg, funds)?; + let adapter_address = resp.event_attr_value(ABSTRACT_EVENT_TYPE, "new_module").unwrap(); + let adapter_address = Addr::unchecked(adapter_address); + + adapter.set_address(&adapter_address); + Ok(adapter_address) } /// Installs an app from an app object From 8ca882093a9095a7a3347edc1a1c81d731b8a2fa Mon Sep 17 00:00:00 2001 From: Buckram Date: Wed, 12 Jul 2023 17:50:05 +0300 Subject: [PATCH 2/7] remove boilerplate --- .../abstract-interface/src/account/mod.rs | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/framework/packages/abstract-interface/src/account/mod.rs b/framework/packages/abstract-interface/src/account/mod.rs index a42d1a29a..c35547f33 100644 --- a/framework/packages/abstract-interface/src/account/mod.rs +++ b/framework/packages/abstract-interface/src/account/mod.rs @@ -143,13 +143,7 @@ impl AbstractAccount { version_control_address: abstr.version_control.address()?.into(), }, }; - - let resp = self.install_module(&adapter.id(), &init_msg, funds)?; - let adapter_address = resp.event_attr_value(ABSTRACT_EVENT_TYPE, "new_module").unwrap(); - let adapter_address = Addr::unchecked(adapter_address); - - adapter.set_address(&adapter_address); - Ok(adapter_address) + self.install_module_parse_addr(adapter, &init_msg, funds) } /// Installs an app from an app object @@ -168,13 +162,22 @@ impl AbstractAccount { ans_host_address: abstr.ans_host.address()?.into(), }, }; - let resp = self.install_module(&app.id(), &init_msg, funds)?; + self.install_module_parse_addr(app, &init_msg, funds) + } + + fn install_module_parse_addr>( + &self, + module: T, + init_msg: &InitMsg, + funds: Option<&[Coin]>, + ) -> Result { + let resp = self.install_module(&module.id(), &init_msg, funds)?; - let app_address = resp.event_attr_value(ABSTRACT_EVENT_TYPE, "new_module")?; - let app_address = Addr::unchecked(app_address); + let module_address = resp.event_attr_value(ABSTRACT_EVENT_TYPE, "new_module")?; + let module_address = Addr::unchecked(module_address); - app.set_address(&app_address); - Ok(app_address) + module.set_address(&module_address); + Ok(module_address) } } From aa63051f7712966192adf75c76a00551e3883dcc Mon Sep 17 00:00:00 2001 From: Buckram Date: Wed, 12 Jul 2023 17:50:39 +0300 Subject: [PATCH 3/7] format --- framework/contracts/native/module-factory/src/commands.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/framework/contracts/native/module-factory/src/commands.rs b/framework/contracts/native/module-factory/src/commands.rs index 5038e4b77..cba455bdd 100644 --- a/framework/contracts/native/module-factory/src/commands.rs +++ b/framework/contracts/native/module-factory/src/commands.rs @@ -102,10 +102,11 @@ pub fn execute_create_module( vec![], )? .into(); - Ok( - ModuleFactoryResponse::new("execute_create_module", vec![("new_module", &module_id)]) - .add_message(register_msg), + Ok(ModuleFactoryResponse::new( + "execute_create_module", + vec![("new_module", &module_id)], ) + .add_message(register_msg)) } ModuleReference::Standalone(code_id) => instantiate_contract( block_height, From f9f8ae6084e5ba902cc6c7c514dfc1528d454b88 Mon Sep 17 00:00:00 2001 From: Buckram Date: Wed, 12 Jul 2023 17:53:43 +0300 Subject: [PATCH 4/7] changelog update --- framework/CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/framework/CHANGELOG.md b/framework/CHANGELOG.md index 970f21ea9..f4fdac1bf 100644 --- a/framework/CHANGELOG.md +++ b/framework/CHANGELOG.md @@ -11,6 +11,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Changed +- Address of App/Adapter returned and set by default. + ### Fixed ## [0.17.0] - 2023-07-05 From a16370146a5abf7653eb29d16a1b4a578abd8a75 Mon Sep 17 00:00:00 2001 From: Buckram Date: Thu, 13 Jul 2023 13:43:01 +0300 Subject: [PATCH 5/7] clippy latest --- framework/contracts/account/manager/tests/adapters.rs | 2 +- framework/contracts/account/manager/tests/apps.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/contracts/account/manager/tests/adapters.rs b/framework/contracts/account/manager/tests/adapters.rs index 7dd1b4598..b4599915b 100644 --- a/framework/contracts/account/manager/tests/adapters.rs +++ b/framework/contracts/account/manager/tests/adapters.rs @@ -378,7 +378,7 @@ fn account_install_adapter() -> AResult { .version_control .claim_namespace(1, "tester".to_owned())?; - let adapter = BootMockAdapter1V1::new_test(chain.clone()); + let adapter = BootMockAdapter1V1::new_test(chain); adapter.deploy(V1.parse().unwrap(), MockInitMsg)?; let adapter_addr = account.install_adapter(adapter, &MockInitMsg, None)?; let module_addr = account diff --git a/framework/contracts/account/manager/tests/apps.rs b/framework/contracts/account/manager/tests/apps.rs index 56a19d3eb..3d11463ff 100644 --- a/framework/contracts/account/manager/tests/apps.rs +++ b/framework/contracts/account/manager/tests/apps.rs @@ -66,7 +66,7 @@ fn account_install_app() -> AResult { .version_control .claim_namespace(1, "tester".to_owned())?; - let app = MockApp::new_test(chain.clone()); + let app = MockApp::new_test(chain); app.deploy(APP_VERSION.parse().unwrap())?; let app_addr = account.install_app(app, &MockInitMsg, None)?; let module_addr = account.manager.module_info(APP_ID)?.unwrap().address; From 9cf0a5acd0278f4f095f293ec7438643758c9c41 Mon Sep 17 00:00:00 2001 From: Buckram Date: Thu, 13 Jul 2023 13:48:58 +0300 Subject: [PATCH 6/7] nightly clippy --- framework/contracts/native/version-control/src/queries.rs | 6 ++---- .../abstract-core/src/objects/entry/channel_entry.rs | 2 +- .../abstract-core/src/objects/entry/contract_entry.rs | 2 +- .../abstract-core/src/objects/entry/dex_asset_pairing.rs | 4 ++-- framework/packages/abstract-core/src/objects/module.rs | 4 ++-- .../abstract-core/src/objects/pool/pool_metadata.rs | 2 +- 6 files changed, 9 insertions(+), 11 deletions(-) diff --git a/framework/contracts/native/version-control/src/queries.rs b/framework/contracts/native/version-control/src/queries.rs index 41a663a80..dd1b111c6 100644 --- a/framework/contracts/native/version-control/src/queries.rs +++ b/framework/contracts/native/version-control/src/queries.rs @@ -120,8 +120,7 @@ pub fn handle_module_list_query( mod_lib .range(deps.storage, start_bound, None, Order::Ascending) .take(limit) - .collect::>>()? - .into_iter(), + .collect::>>()?, ); }; @@ -162,8 +161,7 @@ pub fn handle_namespaces_query( .account_id .prefix(account_id) .range(deps.storage, None, None, Order::Ascending) - .collect::>>()? - .into_iter(), + .collect::>>()?, ); } diff --git a/framework/packages/abstract-core/src/objects/entry/channel_entry.rs b/framework/packages/abstract-core/src/objects/entry/channel_entry.rs index 080f72611..115b09b65 100644 --- a/framework/packages/abstract-core/src/objects/entry/channel_entry.rs +++ b/framework/packages/abstract-core/src/objects/entry/channel_entry.rs @@ -72,7 +72,7 @@ impl<'a> PrimaryKey<'a> for &ChannelEntry { impl<'a> Prefixer<'a> for &ChannelEntry { fn prefix(&self) -> Vec { let mut res = self.connected_chain.prefix(); - res.extend(self.protocol.prefix().into_iter()); + res.extend(self.protocol.prefix()); res } } diff --git a/framework/packages/abstract-core/src/objects/entry/contract_entry.rs b/framework/packages/abstract-core/src/objects/entry/contract_entry.rs index fb06b4858..68996a84f 100644 --- a/framework/packages/abstract-core/src/objects/entry/contract_entry.rs +++ b/framework/packages/abstract-core/src/objects/entry/contract_entry.rs @@ -92,7 +92,7 @@ impl<'a> PrimaryKey<'a> for &ContractEntry { impl<'a> Prefixer<'a> for &ContractEntry { fn prefix(&self) -> Vec { let mut res = self.protocol.prefix(); - res.extend(self.contract.prefix().into_iter()); + res.extend(self.contract.prefix()); res } } diff --git a/framework/packages/abstract-core/src/objects/entry/dex_asset_pairing.rs b/framework/packages/abstract-core/src/objects/entry/dex_asset_pairing.rs index a457ffefa..f218cc97c 100644 --- a/framework/packages/abstract-core/src/objects/entry/dex_asset_pairing.rs +++ b/framework/packages/abstract-core/src/objects/entry/dex_asset_pairing.rs @@ -63,8 +63,8 @@ impl<'a> PrimaryKey<'a> for &DexAssetPairing { impl<'a> Prefixer<'a> for &DexAssetPairing { fn prefix(&self) -> Vec { let mut res = self.0 .0 .0.prefix(); - res.extend(self.0 .1 .0.prefix().into_iter()); - res.extend(self.0 .2.prefix().into_iter()); + res.extend(self.0 .1 .0.prefix()); + res.extend(self.0 .2.prefix()); res } } diff --git a/framework/packages/abstract-core/src/objects/module.rs b/framework/packages/abstract-core/src/objects/module.rs index 48873dc0a..c570f2f4a 100644 --- a/framework/packages/abstract-core/src/objects/module.rs +++ b/framework/packages/abstract-core/src/objects/module.rs @@ -152,8 +152,8 @@ impl<'a> PrimaryKey<'a> for &ModuleInfo { impl<'a> Prefixer<'a> for &ModuleInfo { fn prefix(&self) -> Vec { let mut res = self.namespace.prefix(); - res.extend(self.name.prefix().into_iter()); - res.extend(self.version.prefix().into_iter()); + res.extend(self.name.prefix()); + res.extend(self.version.prefix()); res } } diff --git a/framework/packages/abstract-core/src/objects/pool/pool_metadata.rs b/framework/packages/abstract-core/src/objects/pool/pool_metadata.rs index b1090bf97..69bc3b4a9 100644 --- a/framework/packages/abstract-core/src/objects/pool/pool_metadata.rs +++ b/framework/packages/abstract-core/src/objects/pool/pool_metadata.rs @@ -101,7 +101,7 @@ impl fmt::Display for PoolMetadata { write!( f, "{}", - vec![self.dex.clone(), assets_str, pool_type_str].join(ATTTRIBUTE_SEPARATOR) + [self.dex.clone(), assets_str, pool_type_str].join(ATTTRIBUTE_SEPARATOR) ) } } From f34d0f5fff9beed3147081587daaf4f7a0e271b6 Mon Sep 17 00:00:00 2001 From: Buckram Date: Thu, 13 Jul 2023 15:16:00 +0300 Subject: [PATCH 7/7] fix --- framework/contracts/native/module-factory/src/commands.rs | 3 ++- framework/packages/abstract-interface/src/account/mod.rs | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/contracts/native/module-factory/src/commands.rs b/framework/contracts/native/module-factory/src/commands.rs index cba455bdd..a609993ca 100644 --- a/framework/contracts/native/module-factory/src/commands.rs +++ b/framework/contracts/native/module-factory/src/commands.rs @@ -93,6 +93,7 @@ pub fn execute_create_module( ), ModuleReference::Adapter(addr) => { let module_id = new_module.info.id_with_version(); + let new_module_addr = addr.to_string(); let register_msg: CosmosMsg = wasm_execute( account_base.manager.into_string(), &ManagerMsg::RegisterModule { @@ -104,7 +105,7 @@ pub fn execute_create_module( .into(); Ok(ModuleFactoryResponse::new( "execute_create_module", - vec![("new_module", &module_id)], + vec![("module", module_id), ("new_module", new_module_addr)], ) .add_message(register_msg)) } diff --git a/framework/packages/abstract-interface/src/account/mod.rs b/framework/packages/abstract-interface/src/account/mod.rs index c35547f33..fb1b34894 100644 --- a/framework/packages/abstract-interface/src/account/mod.rs +++ b/framework/packages/abstract-interface/src/account/mod.rs @@ -172,7 +172,6 @@ impl AbstractAccount { funds: Option<&[Coin]>, ) -> Result { let resp = self.install_module(&module.id(), &init_msg, funds)?; - let module_address = resp.event_attr_value(ABSTRACT_EVENT_TYPE, "new_module")?; let module_address = Addr::unchecked(module_address);