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

Download history 114/week @ 2024-04-29 165/week @ 2024-05-06 182/week @ 2024-05-13 167/week @ 2024-05-20 754/week @ 2024-05-27 187/week @ 2024-06-03 162/week @ 2024-06-10 217/week @ 2024-06-17 263/week @ 2024-06-24 135/week @ 2024-07-01 242/week @ 2024-07-08 397/week @ 2024-07-15 145/week @ 2024-07-22 266/week @ 2024-07-29 302/week @ 2024-08-05 82/week @ 2024-08-12

806 每月下载量

GPL-3.0-or-later

2MB
14K SLoC

Abstract Client

Docs

该包提供中央 AbstractClient 对象,简化与Abstract框架的交互。客户端公开了两个构建器,一个 account_builderpublisher_builder,可以用来检索和创建账户。

然后,可以使用 install_appinstall_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>(())

与客户端交互

客户端的主要功能是构建 AccountApplicationPublisher 对象。

创建 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 存在,该函数将返回具有该 AccountIdAccount
  • 应用 Addr - 如果账户上已安装了 App,您可以通过提供其 Addr 来检索安装该 AppAccount
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