在以太坊发送交易的时候,如果手续费计算有误或者没有事先判断账户余额是否足够,便会碰到“insufficient funds for gas * price + value”异常。今天就带大家看看源代码分析一下此异常的始末。

手续费不足异常

手续费不足异常,顾名思义就是发起交易所需手续费超过了地址中的余额。我们知道,发起交易所需的手续费是由gasLimit和gasPrice组成,即它们的乘积。然而交易一旦发出之后,实际消费的手续费却是由gasPrice和交易的字节数决定的。

我们先看一下异常信息:

Insufficient funds for gas * price + value

这条异常信息就是告诉我们:当前地址的余额不足以支付gasLimit乘以gasPrice再加上转账的value值。异常中的gas指的就是gasLimit,price就是gasPrice,value指的是发起交易转账的以太币。

源代码分析

异常定义代码,注释部分已经很明确的说明了异常信息发生的情况:

// ErrInsufficientFunds is returned if the total cost of executing a transaction// is higher than the balance of the user's account.ErrInsufficientFunds = errors.New("insufficient funds for gas * price + value")

调用检验金额代码:

// Transactor should have enough funds to cover the costs // cost == V + GP * GLif pool.currentState.GetBalance(from).Cmp(tx.Cost()) < 0 {return ErrInsufficientFunds}

再看一下tx.Cost是如何计算获取得到的:

// Cost returns amount + gasprice * gaslimit.
func (tx *Transaction) Cost() *big.Int {total := new(big.Int).Mul(tx.data.Price, new(big.Int).SetUint64(tx.data.GasLimit))total.Add(total, tx.data.Amount)return total
}

很明显代码中也是通过amount加上gasprice和gaslimit的乘积然后和余额进行比较。

其他情况

还有一些其他原因引起的此异常。比如有同学说,我通过区块链浏览器查询地址上余额足够,通过上面的公式计算获得的金额也小于余额,但每次通过节点发送交易,都会抛出此异常。

针对这个问题,需要做的第一步排查就是:发出交易的节点是否同步到了账户的余额,不是通过区块链浏览器查询余额,而是要直接在本地节点中查询余额。

原文链接:http://www.choupangxia.com/topic/detail/5

更多资讯

**获取更多资讯,请关注微信公众号:程序新视界。或加入QQ技术交流群:659809063。
本人诚接以太坊相关研发及技术支持(以太坊接口封装&代币开发等),如有需要请联系QQ:541075754。非诚勿扰。**

获得一对一技术咨询请扫码加入知识星球(小密圈)

以太坊手续费不足异常(insufficient funds)相关推荐

  1. 以太坊手续费详细分析

    前言 以太坊是新兴的区块链技术平台,其目标是成为"永不停机的世界计算机",人们在其上可以部署各种应用供全世界使用.以太币是以太坊公链这台虚拟世界计算机器运行的"燃油&qu ...

  2. 以太坊中gas、gasPrice、gasLimit是什么?

    1. 什么是gas? gas是"燃料"的意思.在以太坊区块链上实现了一个EVM(以太坊虚拟机)的代码运行环境,在链上执行写入操作时,网络中的每个全节点都会进行相同的计算并存储相同的 ...

  3. “误收”2100 个以太坊之后,星火矿池是退是分?

    编者按:本文来自36氪战略合作区块链媒体"Odaily星球日报https://www.odaily.com/"(公众号ID:o-daily,APP下载https://downloa ...

  4. Gavin Wood的故事:神级黄皮书、出走以太坊、乱世成名与三代区块链

    这个世界从来不缺乏希望用代码改变世界的程序员. 笔者很早就想写一写Dr. Gavin Wood的故事,此人是以太坊名副其实的「隐形大脑」,然而江湖甚少关于他的新闻或报道,因为此人甚是低调.相比时常出席 ...

  5. 以太坊天价手续费转账真相:资金盘项目GoodCycle上演误杀瞒天记!

    来源:PeckShield 此前有一部改编自印度<误杀瞒天记>的电影<误杀>上映后受到了广大用户的一致好评,其讲述了主角在发生误杀行为后,通过混淆时空.伪造证据等蒙太奇的手法成 ...

  6. 以太坊里面 gas price ,gas limit ,手续费之间的关系

    Eth 里面 gas price ,gas limit ,手续费之间的关系 在以太坊里面收手续费不是直接说多少以太币的,而是用 gas,同样是虚拟货币,你怎么就那么出类拔萃呢? 出类拔萃也就算了,一个 ...

  7. 以太坊-入门基础(以太坊黄皮书学习)

    文章目录 一.什么是以太坊黄皮书 二.以太坊黄皮书 1. 引言 2. 区块链范式 3. 约定 4. 区块.状态和交易 世界状态 账户状态 交易 区块 总结 5. Gas 及其支付 gasPrice 和 ...

  8. 区块链开发之搭建以太坊私有链

    (一)区块链开发之搭建以太坊私有链 本文链接:https://blog.csdn.net/rwdxll/article/details/82929417 1.安装ethereum/Go client( ...

  9. 以太坊智能合约安全入门了解一下(下)

    作者:RickGray 作者博客:http://rickgray.me/2018/05/26/ethereum-smart-contracts-vulnerabilities-review-part2 ...

  10. 从比特币脚本引擎到以太坊虚拟机

    这个系列是目标受众是区块链开发者和有其他开发经验的CS专业学生 面对媒体对区块链相关技术的解读和吹捧,许多人一时不知所措.投资人.大公司都在FOMO(fear of missing out)的心理驱动 ...

最新文章

  1. shell example01
  2. 0501 0503 模块区别_apollo介绍之planning模块(四)
  3. 中国移动开发者社区专访:学习Android的两大法宝
  4. 利用windbg探索进程和进程上下文
  5. 【数据结构-树】2.二叉树遍历与线索二叉树(图解+代码)
  6. mysql 触发器 注意事项_MySQL触发器的利弊-使用MySQL触发器时应该注意的事项
  7. java学习(23):if..else
  8. SQL Server 索引使用分析(1)- 索引结构
  9. 如何从我的eclipse项目中删除javascript验证?
  10. [渝粤教育] 西南科技大学 单片机原理与应用 在线考试复习资料(1)
  11. Eslint常用命令
  12. 电脑配置知识_高品质全铝迷你电脑主机推荐 适合家用/办公/游戏的锐龙APU电脑配置...
  13. Citrix HDX 3D Pro - 注意事项 - 2017H1
  14. 01.J2EE开发环境搭建
  15. Jlink按照用zadig升级用于openocd后,还原
  16. 信息安全风险评估学习笔记
  17. 有哪些超好用的邮件群发软件?这款做邮件推广的一定要试试!
  18. 【愿头发与你我同在队】团队项目第一次作业-组队与选题
  19. SPA是什么及原生js实现简易SPA单页面
  20. 猫哥教你写爬虫 043--模拟浏览器

热门文章

  1. AutoCAD云产品平台ForgeViewer格式离线部署思路分析
  2. TCP实现英英词典(多线程)(项目设计)新手思维
  3. Battery Historian电量分析工具安装运行详解
  4. 【温故知新】pytest框架执行用例并打印日志和报告
  5. android4.0手机访问某些网页提示证书过期或者证书不符的处理办法
  6. 天猫客户端组件动态化的方案——VirtualView 上手体验
  7. prestashop安装记录
  8. 哈希表练习题(C/C++)
  9. windows下Spark环境搭建
  10. 利用云技术转型:一家中国移动互联网公司的出海之旅