4个版本 (重大变更)
0.23.0 | 2024年7月16日 |
---|---|
0.22.1 | 2024年5月8日 |
0.21.0 | 2024年2月20日 |
0.20.0 | 2024年1月24日 |
16 在 #cosmos
806 每月下载量
2MB
14K SLoC
Abstract Client
该包提供中央 AbstractClient
对象,简化与Abstract框架的交互。客户端公开了两个构建器,一个 account_builder
和 publisher_builder
,可以用来检索和创建账户。
然后,可以使用 install_app
或 install_app_with_dependencies
函数在 Account
上安装应用程序及其依赖项。
创建 AbstractClient
要开始,您需要创建一个 Abstract Client
。客户端是交互Abstract框架的主要入口点。
根据环境的不同,有两种创建客户端的方式。
对于公共部署
如果您想与公共部署的Abstract(如测试网或主网)交互,则可以使用以下 Abstract::new
函数
use abstract_client::AbstractClient;
use cw_orch::prelude::{Daemon, DaemonBuilder, networks};
// Specify a network to connect to (e.g. juno testnet, uni-6)
let juno_testnet: Daemon = DaemonBuilder::default()
.handle(rt.handle())
.chain(networks::UNI_6)
.build()?;
// Connect to the deployment
let client: AbstractClient<Daemon> = AbstractClient::new(juno_testnet)?;
对于本地部署
当与本地部署(模拟或本地守护进程)一起工作时,您在交互之前需要部署Abstract。为此,您可以使用 AbstractClient::builder
函数,该函数将在构建器构建时部署基础设施,并返回一个客户端。
use cw_orch::prelude::*;
use abstract_client::AbstractClient;
let chain = MockBech32::new("mock");
// Build the client, which will deploy the infrastructure
let client: AbstractClient<MockBech32> =
AbstractClient::builder(chain)
// ... Configure builder
.build()?;
Ok::<(), abstract_client::AbstractClientError>(())
与客户端交互
客户端的主要功能是构建 Account
、Application
和 Publisher
对象。
创建 Account
要创建一个账户,您可以使用 AbstractClient::account_builder
函数。此函数将返回一个 AccountBuilder
,您可以使用它来配置并构建一个 Account
。如果向构建器提供了声明的命名空间,构建器将返回拥有该命名空间的 Account
。在其他场景下,构建器将创建一个新的账户。
我们的示例将使用
MockBech32
环境以简化操作。然而,相同的函数可以用于任何CwEnv
。
use cw_orch::prelude::*;
use abstract_client::{AbstractClient, Account, Application};
use abstract_app::mock::{mock_app_dependency::interface::MockAppI as App, MockInitMsg as AppInitMsg};
let chain = MockBech32::new("mock");
// Construct the client
let client: AbstractClient<MockBech32> = AbstractClient::builder(chain).build()?;
// Build a new account.
let account: Account<MockBech32> = client.account_builder().build()?;
// Install an application.
let my_app: Application<MockBech32, App<MockBech32>> =
account.install_app::<App<MockBech32>>(&AppInitMsg {}, &[])?;
Ok::<(), abstract_client::AbstractClientError>(())
有关如何自定义账户的更多信息,请参阅 AccountBuilder
文档。
创建 Publisher
创建 Publisher
的过程与创建账户类似。您可以使用 AbstractClient::publisher_builder
函数创建一个 PublisherBuilder
,您可以使用它来配置并构建一个 Publisher
。
然而,与 Account
不同,一个 Publisher
必须 拥有命名空间。如果命名空间尚未被声明,构建器将创建一个新的账户并声明该命名空间。 Publisher
只是一个围绕 Account
的包装器。
然后可以使用 Publisher
来发布模块到抽象应用商店,如下所示。
应用 App
发布后,可以安装到账户上。
use cw_orch::prelude::*;
use abstract_client::{AbstractClient, Namespace, Publisher, Application};
use abstract_app::mock::{mock_app_dependency::interface::MockAppI, MockInitMsg};
let chain = MockBech32::new("mock");
// Construct the client
let client: AbstractClient<MockBech32> = AbstractClient::builder(chain).build()?;
// Build a Publisher
let publisher: Publisher<MockBech32> = client.publisher_builder(Namespace::new("tester")?)
.build()?;
publisher.publish_app::<MockAppI<_>>()?;
// Install the published app
let app: Application<MockBech32, MockAppI<MockBech32>> =
publisher.account().install_app::<MockAppI<MockBech32>>(&MockInitMsg {}, &[])?;
Ok::<(), abstract_client::AbstractClientError>(())
获取 Account
如果您之前创建了一个 Account
并希望检索它,您可以使用 AbstractClient::account_from
函数。此函数接受三种不同类型的输入
Namespace
- 如果命名空间已被声明,该函数将返回拥有该命名空间的Account
。AccountId
- 如果此AccountId
存在,该函数将返回具有该AccountId
的Account
。- 应用
Addr
- 如果账户上已安装了App
,您可以通过提供其Addr
来检索安装该App
的Account
。
use cw_orch::prelude::*;
use abstract_client::{AbstractClient, Namespace, Account};
use abstract_app::mock::{mock_app_dependency::interface::MockAppI, MockInitMsg};
let chain = MockBech32::new("mock");
// Construct the client
let client: AbstractClient<MockBech32> = AbstractClient::builder(chain).build()?;
let namespace = Namespace::new("some-namespace")?;
// Build a new account.
let account: Account<MockBech32> = client.account_builder().namespace(namespace.clone()).build()?;
// Fetch the account
let fetched_account: Account<MockBech32> = client.account_from(namespace)?;
Ok::<(), abstract_client::AbstractClientError>(())
客户端测试助手
此外,客户端还支持一组您可以探索的辅助函数,您可以在 此处 找到。
依赖关系
~19–34MB
~570K SLoC