以太坊区块上的交易会有错误的吗?
本次是研究一下这个问题,大神请无视。
因为上次和区块链的朋友聊到这个话题,很多人对这个并不清楚,都认为gas不足应该是矿工判断过了,一旦交易进区块了就应该是成功的交易。当说到在etherscan上能看到有打惊叹号的交易,而且这种错误还不少见,有人认为可能是etherscan节点自己判断的数据。
实际情况如何呢?我们来看etherscan.io上的数据:
从图中我们看到这笔交易出错了,交易的hash是0xfb2969ce608a96b194f173a979956356a95eacd0f285b33be283c4e72adb3cbb
我们写一个简单的python小程序再去取一下这个区块数据:
from web3 import Web3, HTTPProvider, IPCProvider
web3 = Web3(HTTPProvider("http://192.168.0.122:8545"))
strHash = "0xfb2969ce608a96b194f173a979956356a95eacd0f285b33be283c4e72adb3cbb"
data = web3.eth.getTransaction(strHash)
print(data)
执行,取到记录如下:
AttributeDict({'blockHash': '0xc13eb7f4fdd193b60c11e7119b7a4a6c293c24c4e024e8cb265f53a4ba93bcc9', 'blockNumber': 5306471, 'from': '0xC9D81352fBdb0294b091e51d774A0652ef776D99', 'gas': 703075, 'gasPrice': 4000000000, 'hash': '0xfb2969ce608a96b194f173a979956356a95eacd0f285b33be283c4e72adb3cbb', 'input': '0x09c5eabe...', 'nonce': 1285, 'to': '0xBC41F47c9DF84EA0C2C198e50Df4B3666ffE3bd4', 'transactionIndex': 43, 'value': 0, 'v': '0x25', 'r': '0x6758284cb0b707d49f824a093c2d1f6a7edc3777efe7699393ffdd36f5779a58', 's': '0x6e254e410ab0ebe06b1f2d0371e4d4dcbbbe6b8b2779273d0a2578421710e709'})
这个记录和etherscan上是一样的,就是不同节点的区块上都会有这个错误的交易,而且从交易记录中是看不出这个交易出错的!
要判断交易结果,还得查询交易凭据,python代码增加以下两行:
data = web3.eth.getTransactionReceipt(strHash)
print(data)
再次执行,打出的交易凭据记录:
AttributeDict({'blockHash': '0xc13eb7f4fdd193b60c11e7119b7a4a6c293c24c4e024e8cb265f53a4ba93bcc9', 'blockNumber': 5306471, 'contractAddress': None, 'cumulativeGasUsed': 6095586, 'from': '0xc9d81352fbdb0294b091e51d774a0652ef776d99', 'gasUsed': 693434, 'logs': [], 'logsBloom': '0x...', 'status': 0, 'to': '0xbc41f47c9df84ea0c2c198e50df4b3666ffe3bd4', 'transactionHash': '0xfb2969ce608a96b194f173a979956356a95eacd0f285b33be283c4e72adb3cbb', 'transactionIndex': 43})
这个交易凭据信息和交易信息结合才是etherscan中看到的完整数据,而status为0则是交易出错,成功的交易status为1。
还有些是有错误出现,但交易成功的,如下图:
另一种错误类型:Out of gas
etherscan也提供了错误说明,错误原因主要是合约等执行出现问题。
区块上的交易会有执行错误的交易,而且数量还不少,但看到出错的交易都是目标地址是合约地址的交易。
那正常的发送以太币会出错吗?矿工是会先判断手续费够不够才打包吧?还有代币?代币可都是合约的调用。
不管怎么说,检查一下交易凭据还是有必要的!
感谢您阅读 @chaimyu 的帖子,期待您能留言交流!