一旦您设置了提供程序,就可以与 Fuel 区块链进行交互。以下是您可以使用提供程序执行的一些操作示例;有关 API 的更详细概述,请查阅官方提供程序 API 文档 。
您可能需要首先设置一个测试区块链。如果您连接到外部区块链,则可以跳过此步骤。
use fuels::prelude::*;
// Set up our test blockchain.
// Create a random wallet (more on wallets later).
let wallet = WalletUnlocked::new_random(None);
// How many coins in our wallet.
let number_of_coins = 1;
// The amount/value in each coin in our wallet.
let amount_per_coin = 3;
let coins = setup_single_asset_coins(
wallet.address(),
AssetId::zeroed(),
number_of_coins,
amount_per_coin,
);
let retry_config = RetryConfig::new(3, Backoff::Fixed(Duration::from_secs(2)))?;
let provider = setup_test_provider(coins.clone(), vec![], None, None)
.await?
.with_retry_config(retry_config);
此方法返回钱包中所有未使用的币(特定资产 ID 的)。
let coins = provider
.get_coins(wallet.address(), *provider.base_asset_id())
.await?;
assert_eq!(coins.len(), 1);
以下示例显示了如何获取地址拥有的资源。首先,您创建一个 ResourceFilter
,其中指定了目标地址、资产 ID 和金额。您还可以定义在检索资源时应排除的 UTXO ID 和消息 ID:
pub struct ResourceFilter {
pub from: Bech32Address,
pub asset_id: Option<AssetId>,
pub amount: u64,
pub excluded_utxos: Vec<UtxoId>,
pub excluded_message_nonces: Vec<Nonce>,
}
该示例使用了资产 ID 和排除列表的默认值。这分别解析为基本资产 ID 和空向量用于 ID 列表:
let filter = ResourceFilter {
from: wallet.address().clone(),
amount: 1,
..Default::default()
};
let spendable_resources = provider.get_spendable_resources(filter).await?;
assert_eq!(spendable_resources.len(), 1);
获取地址的所有资产的可花费余额。这与获取币不同,因为我们只返回数字(每个资产 ID 的 UTXOs 币金额之和),而不是 UTXOs 币本身。
let _balances = provider.get_balances(wallet.address()).await?;