⌘K

Test Wallets

Icon Link设置测试钱包

在测试合约时,通常需要创建一个或多个测试钱包。以下是如何执行的。

Icon Link设置多个测试钱包

如果您需要多个测试钱包,可以使用 launch_custom_provider_and_get_wallets 方法进行设置。

use fuels::prelude::*;
// This helper will launch a local node and provide 10 test wallets linked to it.
// The initial balance defaults to 1 coin per wallet with an amount of 1_000_000_000
let wallets =
    launch_custom_provider_and_get_wallets(WalletsConfig::default(), None, None).await?;

您可以通过 WalletsConfig 自定义测试钱包。

let num_wallets = 5;
let coins_per_wallet = 3;
let amount_per_coin = 100;
 
let config = WalletsConfig::new(
    Some(num_wallets),
    Some(coins_per_wallet),
    Some(amount_per_coin),
);
// Launches a local node and provides test wallets as specified by the config
let wallets = launch_custom_provider_and_get_wallets(config, None, None).await?;
Icon InfoCircle

注意 使用 launch_provider_and_get_walletlaunch_custom_provider_and_get_wallets 生成的钱包将具有确定性地址。

Icon Link使用多个随机资产设置测试钱包

您可以创建包含多个资产(包括用于支付 gas 的基本资产)的测试钱包。

use fuels::prelude::*;
let mut wallet = WalletUnlocked::new_random(None);
let num_assets = 5; // 5 different assets
let coins_per_asset = 10; // Per asset id, 10 coins in the wallet
let amount_per_coin = 15; // For each coin (UTXO) of the asset, amount of 15
 
let (coins, asset_ids) = setup_multiple_assets_coins(
    wallet.address(),
    num_assets,
    coins_per_asset,
    amount_per_coin,
);
let provider = setup_test_provider(coins.clone(), vec![], None, None).await?;
wallet.set_provider(provider);
  • coins: Vec<(UtxoId, Coin)> 具有 num_assets * coins_per_assets 个币(UTXO)
  • asset_ids: Vec<AssetId> 包含 num_assets 随机生成的 AssetId(始终包括基本资产)

Icon Link使用多个自定义资产设置测试钱包

您还可以创建具有特定 AssetId、币金额和币数量的资产。

use fuels::prelude::*;
use rand::Fill;
 
let mut wallet = WalletUnlocked::new_random(None);
let mut rng = rand::thread_rng();
 
let asset_base = AssetConfig {
    id: AssetId::zeroed(),
    num_coins: 2,
    coin_amount: 4,
};
 
let mut asset_id_1 = AssetId::zeroed();
asset_id_1.try_fill(&mut rng)?;
let asset_1 = AssetConfig {
    id: asset_id_1,
    num_coins: 6,
    coin_amount: 8,
};
 
let mut asset_id_2 = AssetId::zeroed();
asset_id_2.try_fill(&mut rng)?;
let asset_2 = AssetConfig {
    id: asset_id_2,
    num_coins: 10,
    coin_amount: 12,
};
 
let assets = vec![asset_base, asset_1, asset_2];
 
let coins = setup_custom_assets_coins(wallet.address(), &assets);
let provider = setup_test_provider(coins, vec![], None, None).await?;
wallet.set_provider(provider);

这也可以直接通过 WalletsConfig 实现。

let num_wallets = 1;
let wallet_config = WalletsConfig::new_multiple_assets(num_wallets, assets);
let wallets = launch_custom_provider_and_get_wallets(wallet_config, None, None).await?;
Icon InfoCircle

注意 在这种情况下,您需要手动添加基本资产和相应的币数量和币金额

Icon Link设置资产

Fuel 区块链持有许多不同的资产;您可以使用其独特的 AssetId 创建您的资产,也可以为测试目的创建随机资产。

您只能使用一个资产来支付交易费用和 gas:基本资产,其 AssetId0x000...0,32 字节的零值。

对于测试目的,您可以配置资产的币和金额。您可以使用 setup_multiple_assets_coins

use fuels::prelude::*;
let mut wallet = WalletUnlocked::new_random(None);
let num_assets = 5; // 5 different assets
let coins_per_asset = 10; // Per asset id, 10 coins in the wallet
let amount_per_coin = 15; // For each coin (UTXO) of the asset, amount of 15
 
let (coins, asset_ids) = setup_multiple_assets_coins(
    wallet.address(),
    num_assets,
    coins_per_asset,
    amount_per_coin,
);
Icon InfoCircle

注意 如果设置多个资产,其中一个资产将始终是基本资产。

如果您只想使用基本资产创建币,则可以使用:

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,
);
Icon InfoCircle

注意 选择大量的币和资产对 setup_multiple_assets_coinssetup_single_asset_coins 可能导致这些方法的运行时显着增加。这将在将来得到改进,但目前,我们建议同时使用最多 1_000_000 个币,或 1000 个币和资产。