ETH链上数据字段解读和Gas设置
1. 前言
区块链浏览器上一笔交易产生的数据很多,作为新手很多字段都不知道是什么意思。为什么要了解这些知识?结合我的实践,有以下几点:
-
区块链是不可篡改的,所有的数据都在链上,你发起转账判断是否交易已完成,最好的方式是去链上看信息确认。
-
当你发起交易的时候,如果对方一直没有收到币,你可以去链上查看交易的状态是成功还是失败。
-
Ethereum的手续费特别贵,设置Gas Price可以节约一点手续费,这需要懂区块链上的数据和字段。
-
当你的交易一直无法完成时,加速或者取消当前这笔交易,你需要区块链浏览器的数据作为辅助。
-
分析链上的数据,包括某个币哪些地址是大户,占比是多少等……
2021年的时候,我也花过一点时间去了解区块链浏览器上的数据字典含义和Gas设置,自认为了解得差不多、够用了。直到最近做zkSync刷空投的任务,从Ethereum跨链到zksync era链,使用Metamask钱包交易的时候,修改Gas的参数,尝试了2次都失败了,白白浪费了10u左右的Gas(穷0-0)。那一瞬间,我觉得在区块链世界里,每一笔交易都和Gas相关,那肯定得多花点时间,把Gas相关的知识点吃透,以后在交易的时候调整参数才能游刃有余。
1 ETH = 1,000,000,000 Gwei
1 Gwei = 0.000000001 ETH (10-9 ETH)
2. 区块链浏览器首页介绍
Ethereum (ETH) Blockchain Explorer
该页面上,大部分的数据都可以点击进入查看详情。
3. 区块高度页
区块状态有3种:Unfinalized、Unfinallized(Safe)、Finalized。
4. 交易详情页
交易的编号,这些名词是同一个意思:交易ID、Transaction ID、交易哈希、Transaction Hash。
Gas Limit(燃料上限):在这笔交易愿意花费的最大数量的Gas单位。假如这笔交易需要3,000Gas,但是你设置Gas Limit是2,000Gas,那这笔交易就会因为 Out of Gas 失败。就好像你开车从深圳到广州需要3,000L汽油,而你只准备了2,000L汽油,汽油不够,你当然不能到达目的地了。
Max Priority >Max,无法成交,不会被发送到区块链上。
5. 地址页
6. 合约地址页(代币页)
7. 手续费Gas查看
7.1 Ethereum官方
7.2 Blocknative
Gas Limit 实际用掉的叫做 Gas Used(Gas Limit 设置后实际使用的值,多了可以退,少了不能补),没用到的会自动退回到钱包里。理论上,可以设置一个特别大的数值就可以了,但是不要这么干,因为有些合约不靠谱(有bug),里面很多循环、重复语句,会不断消耗你的Gas。Gas Limit是限制Gas的上限,最多就只能消耗这么多了,再多宁愿让它失败。设置过低,交易会失败;设置过高,有消耗过多Gas的风险,恶意程序可能把你的Gas全消耗掉。所以,Gas Limit 使用默认值就可以了。
8. 常见问题
8.1 Nonce值-加速或取消交易
每一笔交易都有一个Nonce值,目的是为了防止双花,Nonce只能逐步往上增加,每笔交易+1。同一个地址发出2笔nonce值一样的交易,矿池会选择矿工费高的那一笔交易,另一笔交易就会被撤销。
账户当前Nonce=10,余额是10ETH
1. 先向A发起转账5ETH,Nonce=11。然后立即向B发起转账8ETH,显示余额不足。
2. 先向A发起转账5ETH,Nonce=11。然后立即向B发起转账3ETH,Nonce=12。
账户当前Nonce=10
1. 如果向A发起转账,Nonce设置为9,交易会被拒绝。
2. 如果向A发起转账,Nonce设置为12,该交易不会上链。交易会在队列里,等待Nonce为11的上链。
加速交易:
Nonce为10的交易一直 Pending状态,只需要再发起一笔交易,将Nonce设置为10,调整好Gas Price 就可以完成加速。
取消交易:
Nonce为10的交易一直 Pending状态,再发起一笔交易,将Nonce设置为10,发送0个ETH给自己就可以取消交易,但该付的Gas fee不能少。
8.2 修改Gas Limit导致失败的例子
虽然重新学习了一遍Gas的设置,但是还是不知道为什么以下2笔交易会失败,有兴趣的可以帮我看看,我们讨论讨论呀。我整理了一份Excel:
https://docs.google.com/spreadsheets/d/1ufwXLrS-y9TBn3gHp1aNbr8VgWkDbKSC9l7vEP0geyU/edit#gid=0Google Docs
失败的两笔交易:
https://etherscan.io/tx/0x26889b1a0c628d51a7a0472751801baf70d8b1c4b352c9b96116764bdcd6b25d
https://etherscan.io/tx/0x05519d941d781d9fda6b7d05b1525a1aff0f73ba06a59666ead09de11f668167
第三笔成功的交易:
https://etherscan.io/tx/0x0998938e0c854bfcada8ab4e9d9e1a129809a3a336e16b651766e2d9cf09a8b2
这是当时的截图,我修改了「燃料限制」,但是这个没超过实际使用量。
8.3 交易的时候,可以修改哪些值?
Gas 单价是波动的,即Base fee,当前区块交易笔数过多的时候,下一个区块的Base fee增加12.5%。Gas Limit消耗的量是固定的,比如说你开车从深圳到广州,需要消耗20L汽油是固定的,但是这20L汽油的价格是不固定的,你昨天加油可能是8元/L,今天加油可能是9元/L。
我们一般调整的是 Gas Price,即给矿工 的小费 or 最高收费。
Base Fee + Priority Fee =
Priority Fee = Min(Max Priority Fee, Max Fee - Base Fee)
Max Fee = (2 * Base Fee) + Max Priority Fee
8.4 刚写完文章就又踩坑(才出狼口,有入虎穴)
好蠢,写这篇文章的时候,因为需要截图,结果又发起了一笔交易,10u交易手续费没了,资金还要转回来,应该是20u左右手续费。
Metamask钱包发送(转账)是有2个页面来操作的,输入金额后下一个页面时修改Gas和确认页面;而「交换」只有一个页面,点击确认就上链了。属于粗心犯的错,慢一点应该不会出问题!!
9. 参考引用
Gas 和费用 | ethereum.org
从0到1学习Etherscan(上)|怎么查看区块详情和交易详情?#etherscan #ethereum #区块浏览器浏览器
从0到1学习Etherscan(下)|如何使用Etherscan?交易详情怎么看?区块确认是什么意思?#etherscan #web3 #区块链
2023年Metamask如何设置最高优先费用和最高收费?Priority Fee怎么计算?EIP-1559后设置多少Gas Fee比较好?Mint热门NFT,Gas War如何加速上链(第400期)
「第318期」「比特币入门系列」第14期,如何使用以太坊Etherscan区块链浏览器,查看转账和Uniswap等Dapp智能合约交互信息?如何在Metamask里设置Gas Limit和Price?
加速、取消交易,修改nonce值
以太坊ETH拥堵,一直是Pending状态转账慢,如何增加Gas Fee取消或者加速?如何在Metamask钱包里设置Nonce值将交易撤销或者添加手续费提速?(第205期)
教程:以太坊智能合约(3) | 交易费Gas是如何计算-【原创智能合约solidity教程】最新最全持续新增及更新课程内容Y站唯一官方