fuels-rs 测试钱包配置速成:WalletsConfig 一行搞定多资产注资
【免费下载链接】fuels-rsFuel Network Rust SDK项目地址: https://gitcode.com/GitHub_Trending/fu/fuels-rs
fuels-rs 里的 WalletsConfig 把起节点、批量造钱包、按资产注资打包成一次调用,测试里不用再手写转账。读完你能做到:在合约测试里一键拿到 N 个已注资的测试钱包,并核对每个资产的余额。
为什么手写注资总让测试钱包崩溃
给合约测试准备 N 个钱包、每个还压着不同资产的不同币数,手动造币转账能写半页代码,还容易漏资产。fuels-rs 里 WalletsConfig 就是干这件事的:用一张「钱包数 × 资产清单」的描述,一次launch_custom_provider_and_get_wallets调用就能起本地节点、批量生成已注资的测试钱包。它不替你签名也不管业务逻辑,只负责把钱摆到每个地址上。
先把 dev-dependencies 配齐
最小必要的依赖就这三行,直接拷进测试 crate:
[dev-dependencies] fuels = { features = ["default", "accounts-keystore"] } rand = "0.8" tokio = { features = ["full"] }launch_custom_provider_and_get_wallets是异步方法,得在tokio::test里跑,所以给 tokio 打开 full feature。
最小可用路径:WalletsConfig::default() 直接拿测试钱包
最省事的写法是直接拿默认配置,几行就得到一个已注资的钱包列表(默认 10 个):
use fuels::prelude::*; let wallets = launch_custom_provider_and_get_wallets(WalletsConfig::default(), None, None).await?;想自定义数量与金额,就改用WalletsConfig::new。它三个参数都是Option,传None就落到下表默认值,定义在 wallets_config.rs 的常量里:
| 参数 | 默认值 | 含义 |
|---|---|---|
| num_wallets | 10 | 生成几个测试钱包 |
| num_coins | 1 | 每个钱包持有几枚币 |
| coin_amount | 1_000_000_000 | 每枚币的金额 |
多资产进阶:new_multiple_assets 三步走
要控制每个资产的币数与金额,就分三步走:
- 声明
AssetConfig:每个资产填id、num_coins、coin_amount三个字段。 - 组装配置:
WalletsConfig::new_multiple_assets(钱包数, 资产列表)。 - 启动 provider:交给
launch_custom_provider_and_get_wallets生成测试钱包。
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 id = AssetId::zeroed(); id.try_fill(&mut rng)?; let custom = AssetConfig { id, num_coins: 6, coin_amount: 8 }; let wallets = launch_custom_provider_and_get_wallets( WalletsConfig::new_multiple_assets(1, vec![base, custom]), None, None, ).await?;完整例子可对照 examples/wallets/src/lib.rs。
⚠️基础资产必须手动加进列表。
new_multiple_assets不会自动补零值AssetId,漏掉它钱包就付不了 gas,任何交易都会直接失败。
用 get_balances 核对测试钱包余额
钱包到手后,两个方法就能把余额核清楚:
use fuels::prelude::*; let single: u128 = wallet.get_asset_balance(&asset_id).await?; let all: std::collections::HashMap<String, u128> = wallet.get_balances().await?; let base = all.get(&asset_id.to_string()).unwrap();断言就两条:单个资产余额等于num_coins × coin_amount,get_balances返回的键数等于资产总数(key 是资产 ID 的 hex 字符串)。e2e/tests/wallets.rs 里的test_wallet_balance_api_multi_asset取 number_of_assets=7、coins_per_asset=21、amount_per_coin=11,只是示例取值,换你自己的配置即可。
排错速查表
| 现象 / 原因 | 处理 |
|---|---|
| 每次跑测试钱包地址都一样 | 属正常,launch_provider_and_get_wallet与launch_custom_provider_and_get_wallets生成的是确定性地址 |
| 多资产钱包提交交易报 gas 不足 | 确认资产列表里有全零AssetId的基础资产 |
setup_multiple_assets_coins/setup_single_asset_coins跑得很慢 | 控制在 ≤1_000_000枚币,或币与资产同时 ≤1000 |
launch_custom_provider_and_get_wallets后两个参数填什么 | 文档示例恒传None, None,照抄即可 |
【免费下载链接】fuels-rsFuel Network Rust SDK项目地址: https://gitcode.com/GitHub_Trending/fu/fuels-rs
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考