由于以太坊已升级至 PoS 共识机制,因此本文中的矿工部分信息已过时,仅供参考。以太坊的最新共识机制介绍请点击下方链接查看。
每个人小时候都有过想要做神秘侦探的梦想,不知道你内心深处是否还保持着这份好奇呢,抑或是已经被现实所淹没。没关系,今天 imToken 就和大家一起到区块链的世界探个究竟。让我们从最简单的转账开始,一个个来击破他们的失败原因吧。
在开始正式转账之前,请确保你已经升级至 imToken 2.0 版本。事实上,部分的转账问题,完全是可以通过产品升级来避免的。这就像是旧汽车和新汽车的区别。你是想要继续开特斯拉 model 1,还是立刻上手最新款特斯拉 model 3 呢?已经使用上 2.0 版本的朋友们,请在评论区毫无保留地分享你的流畅体验!
还在使用 1.0 的用户也别着急,我们特意为你准备了一份 2.0 迁移指南:https://imtoken.fans/t/topic/19696
当你看到一笔交易,在 imToken 上显示转账失败的时候,通常是由以下三种原因造成的:
- Out of gas I Gas 不足
- Bad instruction I 指令错误
- Reverted I 回退
而且转账支付的矿工费不会回退至你的钱包,原因当然不是因为 imToken「独吞」了这笔费用,具体原因请你往下看👇。
Out of gas( Gas 不足)
在 Etherscan 中查询到的信息
在了解为什么会出现 Gas 不足的情况之前,我们先来回顾一下什么是 Gas。
打个通俗易懂的比喻吧。就像你开车必须要有汽油一样,你在以太坊上转账也需要有 Gas。开车 ≈ 转账,汽油 ≈ Gas。如果你要从 A 地驱车前往 B 地,按照实时的交通情况,你需要消耗 200 升汽油。但你为这次行程只准备了 150 升汽油,那是否能到达 B 地呢?在现实生活中,大家肯定都知道,你一定是到不了的。同时虽然你没到达 B 地,但是你的汽油却已经消耗了。
那么回到区块链的世界,也是同样的道理。如果你要进行一笔转账,就要为这笔转账设置一个 Gas。如果你设置的过低,就会出现「汽车」没到达目的地就没「油」的情况,即交易失败。失败原因就是 out of gas(汽油不足)。同时,又因为矿工们已经进行了打包的操作,但在打包过程中发现 Gas 不足,导致这笔交易打包失败了。矿工费仍然会被扣除,但这些矿工费都是由矿工们收取的,imToken 并不收你一分钱。
如何避免这种问题呢?别担心,imToken 2.0 版本会为你设置合理的 Gas 值,让你的交易被顺利打包。当然你也可以选择自定义设置,但请注意,如果设置不当的话就会损失矿工费哦。
Bad Instruction (指令错误 )
Bad instruction 字面意思是「指令错误」。出现这种提示的原因,大概率是因为智能合约的代码本身就存在逻辑问题,从而导致合约在执行的过程中,出现「指令错误」。这就像一台坏了的机器,你输入一个指令,机器是不能正常运作的。这时候,我们该找谁解决呢?当然是智能合约的创建方,去修复这台「坏了的机器」。另外转账的矿工费仍然会被矿工收走。
Reverted(回退)
以太坊上包含两类账户,普通账户和合约账户。普通账户是由用户通过私钥控制,而合约账户是由部署在以太坊上的智能合约控制。
那么 reverted 是什么情况呢?reverted 其实是一个函数,用于立即中止合约的执行,并且把状态回滚。虽然是智能合约,比一般的合约更「聪明」,但是有些合约在执行的过程中还是会「犯错」的。
这听起来是不是过于抽象,让我们打个简单的比方。出现 reverted 的一种可能情况:你的合约规定,当你输入一块钱,你可以得到一杯喜茶。但是这个合约并没有检查库存里是否有足够的喜茶。当店里没有喜茶库存的时候,后面来的人,即使它输入一块钱,也不能得到喜茶。这时候,你原本的函数 - 即输入一块钱就会得到一杯喜茶的函数就会失败,它会发出错误的信息并回滚到当前的交易状态。
看到这里,想必大家也已经明白了,出现 bad instruction 和 reverted,都是因为智能合约的问题,所以建议大家直接去找合约的创建者,也就是项目方。
Etherscan:
最后,我们推荐一款以太坊神器 -- Etherscan。大家在淘宝购物的时候,都知道如何查看自己的订单情况。在区块链上,我们怎么看呢?答案就是:Etherscan。这是一个以太坊区块浏览器,只要输入你的钱包地址或者交易号,就可以看到你所有的交易信息,赶紧试试吧!
Ethercan 的使用教程:https://imtoken.fans/t/topic/585