尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

如何用 fuels-rs WalletsConfig 批量生成多资产测试钱包(完整指南)

如何用 fuels-rs WalletsConfig 批量生成多资产测试钱包(完整指南) 如何用 fuels-rs WalletsConfig 批量生成多资产测试钱包完整指南【免费下载链接】fuels-rsFuel Network Rust SDK项目地址: https://gitcode.com/GitHub_Trending/fu/fuels-rs写合约或脚本测试时经常要一次性准备 N 个测试钱包并且让每个钱包持有指定资产、指定数量的币。在 fuels-rs 里WalletsConfig就是描述这套注资方案的结构体把它交给launch_custom_provider_and_get_walletsSDK 会自动拉起本地节点再按配置批量生成已注资的钱包列表。本文按「配置路线 → 断言验证 → 避坑」的顺序讲清整个过程。一次配齐WalletsConfig 能拿到什么WalletsConfig只包含两个字段钱包数量以及一组资产描述。每个资产由AssetConfig { id, num_coins, coin_amount }表示即资产AssetId、钱包内该资产的枚数、每枚金额见 packages/fuels-test-helpers/src/wallets_config.rs。配置完成后你拿到的是一份VecWallet钱包已按索引生成且地址可预测直接下标取用即可例如让wallets[0]转给wallets[1]。最小准备依赖与 tokio 环境launch_custom_provider_and_get_wallets是异步函数测试需跑在tokio::test环境里。参考 examples/wallets/Cargo.toml 声明 dev-dependencies[dev-dependencies] fuels { features [default, accounts-keystore] } rand 0.8 tokio { features [full] }路线 A只配基础资产WalletsConfig::new / default如果钱包只需要基础资产——32 字节全零的AssetId::zeroed()也就是唯一能付 gas 的资产——直接用WalletsConfig::new或WalletsConfig::default()。三个入参都是Option传None取默认值参数含义默认值num_wallets钱包个数10num_coins每钱包币数1coin_amount每枚币金额1_000_000_000use fuels::prelude::*; // 三个参数按需指定None 的项取默认值下面的数字仅为演示 let config WalletsConfig::new(Some(5), Some(3), Some(100)); let wallets launch_custom_provider_and_get_wallets(config, None, None).await?;完全不想调参时WalletsConfig::default()等价于上表默认值返回 10 个各持 1 枚、金额 1_000_000_000 基础资产币的钱包。路线 B 多资产测试钱包配置AssetConfig new_multiple_assets当测试要覆盖多个自定义资产时先逐个构造AssetConfig再交给WalletsConfig::new_multiple_assets(num_wallets, assets)。为什么基础资产不能省因为链上交易费用只能由基础资产支付。new会替你隐式加入基础资产而new_multiple_assets只认你传入的列表——漏掉它钱包手里全是自定义资产任何一笔转账都会因付不起 gas 而失败。use fuels::prelude::*; use rand::Fill; let mut rng rand::thread_rng(); let base AssetConfig { id: AssetId::zeroed(), num_coins: 2, coin_amount: 4 }; let mut asset_id AssetId::zeroed(); asset_id.try_fill(mut rng)?; // 随机一个自定义 AssetId let custom AssetConfig { id: asset_id, num_coins: 6, coin_amount: 8 }; let config WalletsConfig::new_multiple_assets(1, vec![base, custom]); let wallets launch_custom_provider_and_get_wallets(config, None, None).await?;⚠️加粗重点new_multiple_assets的assets列表中必须包含AssetId::zeroed()对应的基础资产条目。上面 2/4/6/8 是演示取值实际按测试需要替换。传入前还可用访问器num_wallets()和assets()自检配置是否符合预期。多资产场景下的断言写法get_balances 与 get_asset_balance验证注资结果有两个 APIget_asset_balance(asset_id)查单个资产余额get_balances()返回HashMapString, u128键是资产 ID 的十六进制字符串即asset_id.to_string()。仓库 e2e 测试e2e/tests/wallets.rs 的test_wallet_balance_api_multi_asset即按此断言条目数等于配置的资产数单项余额等于num_coins * coin_amountlet balances: HashMapString, u128 wallet.get_balances().await?; assert_eq!(balances.len() as u64, number_of_assets); for asset_id in asset_ids { let balance: u128 wallet.get_asset_balance(asset_id).await?; assert_eq!(balance, (coins_per_asset * amount_per_coin) as u128); }测试中用到的 7、21、11 等只是该用例的取值换成你配置的资产数与金额即可。避坑清单确定性地址launch_provider_and_get_wallet、launch_custom_provider_and_get_wallets生成的钱包地址由序号派生具有确定性重复运行地址不变见 docs/src/wallets/test-wallets.md。gas 只认基础资产32 字节全零AssetId之外的资产付不了交易费用多资产配置务必手动补上。helper 性能上限绕开WalletsConfig、直接用setup_multiple_assets_coins/setup_single_asset_coins注资时币数与资产数过大会显著拉长运行时间官方建议最多 1_000_000 枚币或同时不超过 1000 枚币和资产。后两个参数launch_custom_provider_and_get_wallets的node_config、chain_config在仓库示例中均传None使用默认节点配置即可。【免费下载链接】fuels-rsFuel Network Rust SDK项目地址: https://gitcode.com/GitHub_Trending/fu/fuels-rs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表