在测试合约时,通常需要创建一个或多个测试钱包。以下是如何执行的。
如果您需要多个测试钱包,可以使用 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?;
注意 使用
launch_provider_and_get_wallet
或launch_custom_provider_and_get_wallets
生成的钱包将具有确定性地址。
您可以创建包含多个资产(包括用于支付 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);
Vec<(UtxoId, Coin)>
具有 num_assets
* coins_per_assets
个币(UTXO) Vec<AssetId>
包含 num_assets
随机生成的 AssetId
(始终包括基本资产) 您还可以创建具有特定 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?;
注意 在这种情况下,您需要手动添加基本资产和相应的币数量和币金额
Fuel 区块链持有许多不同的资产;您可以使用其独特的 AssetId
创建您的资产,也可以为测试目的创建随机资产。
您只能使用一个资产来支付交易费用和 gas:基本资产,其 AssetId
为 0x000...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,
);
注意 如果设置多个资产,其中一个资产将始终是基本资产。
如果您只想使用基本资产创建币,则可以使用:
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,
);
注意 选择大量的币和资产对
setup_multiple_assets_coins
或setup_single_asset_coins
可能导致这些方法的运行时显着增加。这将在将来得到改进,但目前,我们建议同时使用最多 1_000_000 个币,或 1000 个币和资产。