fuels-rs 测试钱包批量注资:用 WalletsConfig 一次拉起本地节点并配好多资产余额

fuels-rs 测试钱包批量注资:用 WalletsConfig 一次拉起本地节点并配好多资产余额 fuels-rs 测试钱包批量注资用 WalletsConfig 一次拉起本地节点并配好多资产余额【免费下载链接】fuels-rsFuel Network Rust SDK项目地址: https://gitcode.com/GitHub_Trending/fu/fuels-rs当你需要一批余额可控的测试钱包来跑合约或脚本测试时逐个建钱包、逐笔注资既慢又容易漏配。本文基于 fuels-rs 的WalletsConfig描述要几个钱包、每个钱包持有哪些资产、各多少币的配置结构讲解如何在一次调用里启动本地测试节点并按资产精确发币。读完你可以独立完成多资产测试钱包的批量生成并逐项核对每个钱包的余额。流程速览在dev-dependencies中启用fuels并声明rand、tokio。用AssetConfig逐个描述资产AssetId、币数、每枚币金额。把配置交给launch_custom_provider_and_get_wallets启动本地节点并拿到VecWallet。用get_asset_balance/get_balances验证条目数与单资产金额。前提与准备依赖 / 常量说明出处fuelsfeature:default、accounts-keystore测试辅助能力所在的依赖examples/wallets/Cargo.tomlrand0.8生成随机AssetId同上tokiofeature:fulllaunch_custom_provider_and_get_wallets是异步方法需要tokio::test环境同上WalletsConfig、AssetConfig定义配置结构与两个访问器num_wallets()、assets()packages/fuels-test-helpers/src/wallets_config.rs 默认值速查定义于 packages/fuels-test-helpers/src/wallets_config.rsDEFAULT_NUM_WALLETS 10DEFAULT_NUM_COINS 1DEFAULT_COIN_AMOUNT 1_000_000_000为每个钱包指定多个资产及各自金额目标测试里要转移某几种固定AssetId的资产需要每个钱包同时持有这些资产。use fuels::prelude::*; use rand::Fill; let mut rng rand::thread_rng(); // 基础资产只能用它付 gasAssetId 为 32 字节全零 let asset_base AssetConfig { id: AssetId::zeroed(), num_coins: 1, coin_amount: 500 }; // 一个随机 AssetId 的自定义资产 let mut asset_id AssetId::zeroed(); asset_id.try_fill(mut rng)?; let asset_custom AssetConfig { id: asset_id, num_coins: 3, coin_amount: 80 }; let config WalletsConfig::new_multiple_assets(2, vec![asset_base, asset_custom]); let wallets: VecWallet launch_custom_provider_and_get_wallets(config, None, None).await?;在这个例子里new_multiple_assets的第二个参数是AssetConfig列表每个钱包都会按列表拿到全部资产。生成 2 个钱包每个钱包的自定义资产余额应为 3 × 80 240。后两个参数是节点与链配置None即走默认值。只需要基础资产时的简写配置目标测试只用基础资产付 gas 和转账不想手动列资产。use fuels::prelude::*; // 三个参数都是 Option传 None 的项取默认值 let config WalletsConfig::new(Some(4), Some(2), Some(1_000)); let wallets launch_custom_provider_and_get_wallets(config, None, None).await?; // wallets[0] 持有 2 枚基础资产币合计 2_000在这个例子里WalletsConfig::new固定只配置AssetId::zeroed()这一种资产三项参数分别控制钱包数、每钱包币数、每枚币金额缺省项按上文默认值补齐。什么都不想传时可直接用WalletsConfig::default()等价于 10 个钱包、每钱包 1 枚币、金额 1_000_000_000完整示例见 examples/wallets/src/lib.rs。核对余额条目数与单资产金额目标断言钱包确实拿到了预期的资产与数量。use std::collections::HashMap; let base AssetId::zeroed(); let balance: u128 wallet.get_asset_balance(base).await?; // 单资产余额 let balances: HashMapString, u128 wallet.get_balances().await?; let got *balances.get(base.to_string()).unwrap(); // 按 hex 字符串取条目 assert_eq!(balances.len(), 2); // 条目数 配置的资产数在这个例子里get_balances返回的键是AssetId的十六进制字符串见 docs/src/wallets/checking-balances-and-coins.md所以要用asset_id.to_string()作键。断言口径与端到端测试test_wallet_balance_api_multi_asset一致条目数等于资产数、每个资产余额等于num_coins * coin_amount参考 e2e/tests/wallets.rs。结果自检清单检查项期望值不符时查哪里wallets.len()等于传入的num_wallets传给new/new_multiple_assets的钱包数参数get_balances().len()等于assets列表长度AssetConfig列表是否漏写、重复单资产余额num_coins * coin_amount对应AssetConfig的两个数值基础资产余额大于 0 且够付 gas列表里是否包含AssetId::zeroed()易踩坑与边界多资产钱包发不了交易、余额显示不足原因new_multiple_assets只按你给的列表注资不会自动补基础资产漏掉它钱包就付不起 gas。 处理手动往assets里加一个id: AssetId::zeroed()且金额大于 0 的AssetConfig。传了None却多出 10 个钱包或天文数字余额原因WalletsConfig::new的None不是清零而是落到默认值10 钱包、1 币、1_000_000_000。 处理需要锁定某一项时传Some(x)。setup_multiple_assets_coins等 helper 运行极慢原因币数与资产数过大会拉长节点初始化时间。 处理按 docs/src/wallets/test-wallets.md 的建议控制在最多 1_000_000 枚币或同时不超过 1000 枚币和资产。balances.get(asset_id)取不到条目原因get_balances返回HashMapString, u128键不是AssetId而是其 hex 字符串。 处理统一用asset_id.to_string()作键。多次运行测试拿到相同钱包地址原因launch_custom_provider_and_get_wallets按序号1..num_wallets确定性派生私钥见 packages/fuels-test-helpers/src/accounts.rs。 处理这是预期行为便于测试复现需要非固定地址时自行创建PrivateKeySigner。收尾WalletsConfig把起节点 批量注资收敛为一次调用把余额核对留给两个get_*balance*方法即可。延伸阅读docs/src/wallets/test-wallets.md、packages/fuels-test-helpers/src/wallets_config.rs。【免费下载链接】fuels-rsFuel Network Rust SDK项目地址: https://gitcode.com/GitHub_Trending/fu/fuels-rs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考