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

资讯详情

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

WalletsConfig 实战:在 fuels-rs 中批量创建指定资产的测试钱包

WalletsConfig 实战:在 fuels-rs 中批量创建指定资产的测试钱包 WalletsConfig 实战在 fuels-rs 中批量创建指定资产的测试钱包【免费下载链接】fuels-rsFuel Network Rust SDK项目地址: https://gitcode.com/GitHub_Trending/fu/fuels-rs在 fuels-rs 中编写合约或脚本测试时你常需要一次性准备多个测试钱包并控制每个钱包持有哪种资产、各持有多少。读完本文你可以用 WalletsConfig 批量生成注资钱包并在节点启动后逐个核对余额数值。声明最小依赖与运行前提这段代码用于声明钱包测试项目所需的开发依赖。[dev-dependencies] fuels { features [default, accounts-keystore] } rand 0.8 tokio { features [full] }依赖取自 examples/wallets/Cargo.toml。launch_custom_provider_and_get_wallets 是异步函数测试需放在 tokio::test 环境中运行。配置基础资产钱包这段代码用于启动本地节点并批量生成 5 个各持 3 枚基础资产币的钱包。use fuels::prelude::*; let config WalletsConfig::new(Some(5), Some(3), Some(100)); let wallets launch_custom_provider_and_get_wallets(config, None, None).await?;三个参数均为Option传None时取 wallets_config.rs 中的默认常量num_wallets — 生成的钱包数量 — 默认 10num_coins — 每个钱包持有的基础资产base asset币数 — 默认 1coin_amount — 每枚币的金额 — 默认 1_000_000_000不想逐项定制时直接传WalletsConfig::default()也可以用num_wallets()与assets()两个访问器在启动前检查配置。返回值wallets是VecWallet按索引取用即可完成wallets[0]向wallets[1]的转账。注入多资产余额这段代码用于在基础钱包之上增量配置一个同时持有两种自定义资产的钱包。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)?; 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不再接收统一的 num_coins 与 coin_amount而是由每个AssetConfig的 id、num_coins、coin_amount 三字段分别描述。额外的 import 是rand::Fill配合rand::thread_rng用于填充随机 AssetId。使用 new_multiple_assets 时必须手动把基础资产AssetId::zeroed()连同币数、金额加入 assets 列表否则钱包没有资产可付 gas。校验钱包余额这段代码用于核对钱包的资产条目数与各资产的具体余额。let balances: std::collections::HashMapString, u128 wallet.get_balances().await?; assert_eq!(balances.len(), 2); // matches the number of configured assets let base_balance: u128 wallet.get_asset_balance(AssetId::zeroed()).await?; assert_eq!(base_balance, 8); // 2 coins * 4 per coin let custom_balance: u128 wallet.get_asset_balance(asset_id).await?; assert_eq!(custom_balance, 48); // 6 coins * 8 per coinget_balances返回以资产 ID 十六进制字符串为键的HashMap单个资产余额恒等于其AssetConfig中 num_coins × coin_amount断言写法参照 e2e/tests/wallets.rs。易踩的坑交易费用只能由 base asset 支付。测试钱包的地址是确定性的deterministic addresses。get_balances 的键是资产 ID 的十六进制字符串。超过 1_000_000 枚币时运行时间显著增长。【免费下载链接】fuels-rsFuel Network Rust SDK项目地址: https://gitcode.com/GitHub_Trending/fu/fuels-rs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表