
fuels-rs 里怎么给 N 个测试钱包各塞不同的币WalletsConfig 多资产注资实战【免费下载链接】fuels-rsFuel Network Rust SDK项目地址: https://gitcode.com/GitHub_Trending/fu/fuels-rs写合约或脚本测试想一次批量生成 N 个测试钱包、各持不同资产和币数fuels-rs 里WalletsConfig搭配launch_custom_provider_and_get_wallets就是干这个的拉起本地节点按配置批量造钱包并完成多资产注资。两条配置路径基础资产还是多资产入口其实只有两个先对号入座钱包只需要能付 gas 的基础资产走路径 A钱包要持有若干指定AssetId的自定义代币走路径 B。两条路最终都交给launch_custom_provider_and_get_wallets去落地执行。路径 A纯基础资产的钱包WalletsConfig::new基础资产就是付 gas 用的那个AssetId是 32 字节全零值。WalletsConfig::new收三个Optionu64——钱包数、每钱包币数、每币金额哪项传None就回落到该维度的默认值默认值常量DEFAULT_NUM_WALLETS、DEFAULT_NUM_COINS、DEFAULT_COIN_AMOUNT定义在 wallets_config.rs具体数字见文末对照表。三项全给None的话直接写WalletsConfig::default()即可。返回值是VecWallet按索引取用就行wallets[0]转给wallets[1]是最朴素的转账断言场景examples/wallets/src/lib.rs 里的转账用例可以照着看。验证也不复杂get_asset_balance查单个资产的余额。use fuels::prelude::*; #[tokio::test] async fn path_a_base_asset_wallets() - Result() { // 只显式给钱包数量币数与每币金额传 None 走默认 let config WalletsConfig::new(Some(5), None, None); // 拉起本地节点按配置批量生成钱包 let wallets launch_custom_provider_and_get_wallets(config, None, None).await?; // 查单个资产基础资产余额 let balance: u128 wallets[0].get_asset_balance(AssetId::zeroed()).await?; // 用 SDK 暴露的默认常量做断言避免手抄数字 assert_eq!(balance, (DEFAULT_NUM_COINS * DEFAULT_COIN_AMOUNT) as u128); Ok(()) }路径 B多资产钱包WalletsConfig::new_multiple_assets每种资产用一个AssetConfig描述就三个字段id、num_coins枚数、coin_amount每枚金额。把若干AssetConfig收进Vec和钱包数一起传给WalletsConfig::new_multiple_assets。生成随机 AssetId自定义代币的 id 不必手写rand::Fill往零值里填一版就能拿到随机 iduse rand::Fill; let mut rng rand::thread_rng(); let mut asset_id AssetId::zeroed(); asset_id.try_fill(mut rng)?;⚠️ 必踩的坑基础资产漏加new_multiple_assets这条路有个硬要求基础资产AssetId::zeroed()要由你自己写进assets列表num_coins和coin_amount一并给全。交易费只认基础资产漏加它钱包就发不出任何交易——这类问题往往不是配置阶段就报错而是后续每次调用都失败排查起来更费劲。断言余额条目数与 num_coins × coin_amount注资完成后用get_balances拿全量余额返回HashMapString, u128键是资产 id 的十六进制字符串checking-balances-and-coins.md 有说明。断言就两条len()等于资产数每种资产余额等于num_coins * coin_amount。端到端用例 e2e/tests/wallets.rs 的test_wallet_balance_api_multi_asset就是照这个思路写的示例取值 7 种资产、每资产 21 枚、每枚 11核心一行是assert_eq!(balances.len() as u64, number_of_assets)。use fuels::prelude::*; use rand::Fill; use std::collections::HashMap; #[tokio::test] async fn path_b_multi_asset_wallets() - Result() { let mut rng rand::thread_rng(); // 基础资产必须手动放进列表否则付不起 gas let base AssetConfig { id: AssetId::zeroed(), num_coins: 2, coin_amount: 4 }; // 随机 AssetId零值 try_fill let mut id_1 AssetId::zeroed(); id_1.try_fill(mut rng)?; let asset_1 AssetConfig { id: id_1, num_coins: 6, coin_amount: 8 }; let mut id_2 AssetId::zeroed(); id_2.try_fill(mut rng)?; let asset_2 AssetConfig { id: id_2, num_coins: 10, coin_amount: 12 }; let config WalletsConfig::new_multiple_assets(1, vec![base, asset_1, asset_2]); // 传入前用访问器自检一遍配置 assert_eq!(config.num_wallets(), 1); assert_eq!(config.assets().len(), 3); let wallets launch_custom_provider_and_get_wallets(config, None, None).await?; let wallet wallets[0]; // 键为资产 id 的十六进制字符串 let balances: HashMapString, u128 wallet.get_balances().await?; // 条目数应等于资产数 assert_eq!(balances.len(), 3); // 每种资产余额 num_coins × coin_amount assert_eq!(*balances.get(id_1.to_string()).unwrap(), 6 * 8); assert_eq!(*balances.get(id_2.to_string()).unwrap(), 10 * 12); Ok(()) }参数对照速查表选型犹豫时看这张表维度路径 A基础资产路径 B多资产入口方法WalletsConfig::new/WalletsConfig::default()WalletsConfig::new_multiple_assets参数三个Optionu64num_wallets: u64VecAssetConfig默认值10 钱包 / 1 币 / 每币 1_000_000_000无默认必须显式传典型场景gas 钱包、简单转账测试多代币合约测试验证 APIget_asset_balanceget_balances条目数 资产数依赖与运行环境Cargo.toml 怎么配测试项目按 examples/wallets/Cargo.toml 补齐 dev-dependencies示例 crate 开了default与accounts-keystore两个 feature[dev-dependencies] fuels { features [default, accounts-keystore] } rand 0.8 tokio { features [full] }launch_custom_provider_and_get_wallets是异步入口测试函数必须挂在#[tokio::test]下才能跑起来这是硬性要求。边界与坑位清单 地址是确定性的。凡是launch_provider_and_get_wallet或launch_custom_provider_and_get_wallets产出的钱包都带确定性地址test-wallets.md 有明确说明同样的配置每次运行地址相同测试可以稳定复现地址也能直接写进断言。 费用只认基础资产。gas 必须由全零AssetId的基础资产支付这条规则就是路径 B 那个漏加就全崩的坑的由来。 绕过WalletsConfig时要注意规模。改用setup_multiple_assets_coins/setup_single_asset_coins这类 helper 直接注资时文档建议最多1_000_000枚币或同时不超过1000枚币和1000种资产——数量一上量启动耗时会显著膨胀官方表示未来会优化眼下只能自己控制输入规模。 尾部参数保持None。launch_custom_provider_and_get_wallets除配置外还有两个尾部参数文档示例一律传None没有特殊需求就保持一致不必自己发挥。【免费下载链接】fuels-rsFuel Network Rust SDK项目地址: https://gitcode.com/GitHub_Trending/fu/fuels-rs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考