尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
fuels-ts Predicate 转出全部余额时因 Gas 费用不足报错怎么解决
fuels-ts Predicate 转出全部余额时因 Gas 费用不足报错怎么解决【免费下载链接】fuels-tsFuel Network Typescript SDK项目地址: https://gitcode.com/GitHub_Trending/fu/fuels-ts用 fuels-ts SDK 操作 Predicate 时有一个明确的边界不能把 Predicate 持有的全部余额一次性转走。交易费用Gas必须从 Predicate 的同一余额中扣付如果转账金额等于余额费用就没有资金来源交易构建阶段就会直接报错。本文对应的报错场景与 fuels-ts 文档 Send and Spend Funds From Predicates 中 “Spending Entire Predicate Held Amount” 一节一致把 Predicate 的全部持有金额转给接收方时SDK 抛出如下错误文档原文示例其中资产 ID 为运行时取回的实际值Insufficient funds or too many small value coins. Consider combining UTXOs. For the following asset ID: ${baseAssetId}.解决方法就是文档给出的转账模式本身只转出小于余额的金额用createTransfer会自动通过 dry-run 估算交易成本并用 Predicate 的资源给请求注资或transfer提交转完后余额里自然留出一小部分覆盖费用。下面按可执行的步骤说明。报错原因与适用前提文档对这一报错的解释是Trying to forward the entire amount held by the predicate results in an error because no funds are left to cover the transaction fees.即错误发生在 SDK 组交易阶段还没有提交到链上原因是找不到能覆盖转账金额加交易费用的资源组合。文档中该错误信息的示例见 failure-not-enough-funds.ts注意该示例本身是在 Predicate 未注资的情况下尝试转账任意金额都会触发同一类Insufficient funds报错而“转出全部余额”是文档正文明确指出的另一类触发条件两者报错信息相同。适用前提与文档示例代码一致本地有可用的节点Provider 使用文档 env 中的LOCAL_NETWORK_URL已用forc build编译过 Predicate拿到 JSON ABI 与字节码代码中使用 fuels 文档 typegen 生成的 Predicate 类文档示例从../../../../typegend导入SimplePredicate/ReturnTruePredicate你需要按自己项目的 typegen 配置生成对应类有一个用于给 Predicate 注资的资金钱包文档示例用Wallet.fromPrivateKey(WALLET_PVT_KEY, provider)。先确认 Predicate 当前余额Predicate 继承Account类可以用getBalances查询它持有的全部资产余额见 Interacting With Predicates 的 “Checking Balances” 一节。拿到余额后才能确定“转出全部”到底意味着多少也才能留出费用部分import { Provider, Wallet } from fuels; const provider new Provider(LOCAL_NETWORK_URL); const baseAssetId await provider.getBaseAssetId(); const predicate new ReturnTruePredicate({ provider }); // 查询 Predicate 持有的全部资产余额 const balances await predicate.getBalances();主路径用 createTransfer 转出“余额 − 费用”不要直接对transfer/createTransfer传入等于余额的金额。正确做法是设置一个留出费用余量的转账金额。文档 Interacting With Predicates 对createTransfer的说明是ThecreateTransfermethod creates a transaction request with all the necessary transfer details. It automatically estimates the transaction costs via a dry-run call and funds the request with the required predicate resources. After this, one can submit the returned transaction request with greater certainty that it will succeed.即createTransfer内部会先 dry-run 估算费用再用 Predicate 的资源含找零把请求注资好最后你只需提交返回的ScriptTransactionRequest。文档 pre-stage.ts 展示的完整主路径其中WALLET_PVT_KEY、LOCAL_NETWORK_URL来自文档 env 配置inputAddress为示例中写死的 B256 地址需替换成你自己 Predicate 条件要求的地址import { Provider, Wallet } from fuels; const provider new Provider(LOCAL_NETWORK_URL); const baseAssetId await provider.getBaseAssetId(); const sender Wallet.fromPrivateKey(WALLET_PVT_KEY, provider); const receiver Wallet.generate({ provider }); const inputAddress 0xfc05c23a8f7f66222377170ddcbfea9c543dff0dd2d2ba4d0478a4521423a9d4; const predicate new SimplePredicate({ provider, data: [inputAddress], }); const amountToPredicate 10_000_000; const tx await sender.transfer( predicate.address, amountToPredicate, baseAssetId, { gasLimit: 1_000, } ); const { isStatusSuccess } await tx.waitForResult(); console.log(Transfer to predicate should be successful, isStatusSuccess); const amountToReceiver 200; // Create the transaction for transferring funds from the predicate. const transactionRequest await predicate.createTransfer( receiver.address, amountToReceiver, baseAssetId, { gasLimit: 1000, } ); // We can obtain the transaction ID before submitting the transaction. const chainId await provider.getChainId(); const transactionId transactionRequest.getTransactionId(chainId); // We can submit the transaction and wait for the result. const submitTransaction await predicate.sendTransaction(transactionRequest); await submitTransaction.waitForResult();关键参数说明均来自文档示例不额外推断含义amountToReceiver转账金额。要“清账”时它必须小于 Predicate 当前余额差额留给交易费用文档示例用的是固定金额200你的场景下应替换为“余额 − 费用余量”。gasLimit: 1000文档示例在注资和转出两处都显式传了这个参数原样保留。一个限制Predicate 的 data 在实例化之后想换必须创建新的Predicate实例文档原文If you want to pass in the predicate data after instantiating the Predicate or if you want to use a different data than the one passed in the constructor, you will have to create a new Predicate instance.。验证交易是否成功主路径末尾用waitForResult()的结果判断文档示例的验证方式是检查返回的isStatusSuccessconst { isStatusSuccess } await submitTransaction.waitForResult(); console.log( Transfer from predicate should be successful, isStatusSuccess );另外pre-stage 模式还展示了提交前就能拿到交易 ID 的核对方式const chainId await provider.getChainId(); const transactionId transactionRequest.getTransactionId(chainId); // 提交后核对 console.log( Transaction ID should be equal, transactionId submitTransaction.id );如果想在真正提交前先 dry-run 确认资金能覆盖交易费用文档 Interacting With Predicates 提供了simulateTransactionYou can use thesimulateTransactionmethod to dry-run a predicate call without consuming resources. A typical use case of a dry-run call is to validate that sufficient funds are available to cover the transaction fees.示例见 simulate-transaction.ts先provider.assembleTx({ request, feePayerAccount: predicate, ... })完成估算与注资再predicate.simulateTransaction(assembledRequest)验证方式是检查返回 receipts 中是否同时存在ReceiptType.Return与ReceiptType.ScriptResult两种回执文档示例的验证代码const hasReturnReceipt result.receipts.some( (receipt) receipt.type ReceiptType.Return ); const hasScriptResultReceipt result.receipts.some( (receipt) receipt.type ReceiptType.ScriptResult );另一种失败现象Predicate 校验失败不要混淆还有一种报错与费用无关Predicate 校验不通过。文档 failure-returns-false.ts 展示了这种情况——给 Predicate 的 data 传了与条件不符的值转账时 SDK 抛出的错误信息以PredicateVerificationFailed开头。它与上面的Insufficient funds报错根因不同前者是 data 不满足 Predicate 条件后者是资金不够覆盖费用。看到PredicateVerificationFailed时应检查传给 Predicate 构造函数的 data而不是去调金额。边界与小结文档没有给出“精确费用计算后转出余额”的公式createTransfer的 dry-run 注资机制意味着你只需保证转账金额小于余额、留出费用空间金额等于余额的尝试会直接得到Insufficient funds报错。如果余额由多个小额 UTXO 组成同一报错信息里也提示了Consider combining UTXOs.文档原文示例的一部分此时 SDK 提示的是资源组合问题处理方式是让 Predicate 先积累成可使用的资源再转出。钱包相关用法注资、生成接收钱包不在本文展开文档指到 wallets 指南 查阅。转完之后的余额即费用余量部分文档没有描述如何二次取回Predicate 后续每笔交易都会继续消耗这部分余额。【免费下载链接】fuels-tsFuel Network Typescript SDK项目地址: https://gitcode.com/GitHub_Trending/fu/fuels-ts创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

使用 Nx 配置缓存输出,正确处理 Next.js 的 `.next` 文件夹

使用 Nx 配置缓存输出,正确处理 Next.js 的 `.next` 文件夹

使用 Nx 配置缓存输出,正确处理 Next.js 的 .next 文件夹 【免费下载链接】nx The Monorepo Platform that amplifies both developers and AI agents. Nx optimizes your builds, scales your CI, and fixes failed PRs automatically. Ship in half the time. 项…

📅 2026/9/10 21:27:01
擦亮眼睛!不是随便一个 AI 就能搞定毕业论文,2026 高校认可工具精选

擦亮眼睛!不是随便一个 AI 就能搞定毕业论文,2026 高校认可工具精选

每年毕业季,无数同学深陷论文难题:开题毫无思路、搭建框架耗费数日、初稿逻辑松散、查重标红泛滥、AI检测超标、格式反复被导师驳回。面对这些普遍存在的痛点,不少学生选择借助通用型AI工具来辅助写作。然而,市面上的AI工具虽多&a…

📅 2026/9/10 21:27:01
TelegramUI安全最佳实践:保护Mini App用户数据的10个要点

TelegramUI安全最佳实践:保护Mini App用户数据的10个要点

TelegramUI安全最佳实践:保护Mini App用户数据的10个要点 在Telegram Mini Apps开发中,保护用户数据安全是至关重要的任务。TelegramUI作为专为Telegram生态设计的React组件库,提供了丰富的安全特性和最佳实践。本文将分享10个关键的安全要点…

📅 2026/9/10 21:27:01
MORE NEWS

更多资讯

📰

route-pattern 基准测试全解析:从 Vitest bench 到跨分支性能对比

route-pattern 基准测试全解析:从 Vitest bench 到跨分支性能对比 【免费下载链接】remix The fully-stacked web framework 项目地址: https://gitcode.com/GitHub_Trending/re/remix route-pattern 是 Remix 全栈框架中负责类型安全 URL 匹配与 href 生成的…

📰

Chat2DB Java Web Controller 分层契约:从 HTTP 入口到领域服务的职责边界与代码规范

Chat2DB Java Web Controller 分层契约:从 HTTP 入口到领域服务的职责边界与代码规范 【免费下载链接】Chat2DB Chat2DB is a free, cross-platform, local-first database client and SQL workspace for developers, DBAs, analysts, and data teams. Connect to 4…

📰

CANN/ge图引擎CreateTensor API

CreateTensor 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前…

📰

Svelte Query 的 createQueries:并行执行、动态追踪与合并多个查询结果的权威指南

Svelte Query 的 createQueries:并行执行、动态追踪与合并多个查询结果的权威指南 【免费下载链接】query 🤖 Powerful asynchronous state management, server-state utilities and data fetching for the web. TS/JS, React Query, Solid Query, Svelt…

📰

生信数据库检索脚本零基础入门:不写代码也能批量下载

经常来问我“序列不会下载”的人,十有八九都被“写脚本”这三个字吓住了。实验出身的朋友,一听要敲代码就觉得自己不行,但你在NCBI、Ensembl、UniProt上翻来翻去拉数据拉得多了就会明白,所谓“生信数据库检索脚本”,本…

📰

Nacos V3 HTTP API 规范全景解读:受众分级、路径契约、鉴权与统一响应设计

Nacos V3 HTTP API 规范全景解读:受众分级、路径契约、鉴权与统一响应设计 【免费下载链接】nacos an easy-to-use dynamic service discovery, configuration and service management platform for building AI cloud native applications. 项目地址: https://gi…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬