主页 > imtoken怎么注册 > 区块链技术知识:以太坊交易的打包规则
区块链技术知识:以太坊交易的打包规则
本篇区块链技术科普,将带你深入了解以太坊交易背后的知识和原理:
我们的交易请求和链上区块之间发生了什么?
为什么以太坊拥堵?
交易拥堵在技术上发生了什么?
交易无法发送怎么办?
这些常见问题可以在本文中得到解答。
以太坊交易的本质
首先大家要知道以太坊交易的本质:我给你10个以太币不是因为我真的给了你东西以太坊每秒交易速度,而是我向以太坊网络提出了改变余额状态的请求,让每个节点记录下你的以太币余额是用我的更新。
以太坊交易状态更新示意图
然而,发送交易在技术上并不困难。 区块链的重点是打包交易和生成区块的过程。 如何验证和确认交易是否有效,让交易顺利进行,让每个节点实时更新拥有相同的账本,所以打包交易出块的机制就是“挖矿”。
从以太坊交易发送到区块生成的过程
发送到区块进程的以太坊交易
从上图我们可以看出
在以太坊上发送交易后经历的过程:
1.发送交易
2.私钥签名
3.交易发送到节点
4. 在节点间广播新收到的交易
5. 矿工打包交易,生成区块
交易发出后,会被扔进一个“交易池”,等待矿工打包。
矿工从“交易池”中捞出未阻塞的交易进行打包和出块。
因为每个区块都有大小限制,比特币一个区块的容量限制为1MB; 一个以太坊区块是按 Gas 计算的,限制为 800 M Gas。 如果按照21,000 Gas的基本交易计算,一个以太坊区块可以容纳380笔交易。 因此,当“交易池”中的交易量很大时,就会有很多交易不能立即打包,留在池中等待。
您如何选择要捞出的交易?
矿工节点可以自行设置参数,但大多数矿工是按照手续费多少排序的。 手续费高的优先打包; 那些收费低的可能要等到时间结束。
以太坊交易手续费计算公式:
以太坊交易手续费公式:TxFee(手续费)= GasUsed(gas使用量)* GasPrice(单位gas价格)
由于Gas Used是由系统决定的以太坊每秒交易速度,所以我们发送交易时决定手续费多少的决定性因素就是Gas Price。 下面我们介绍Metamask接口:
Metamask 发送交易页面流程图
在上图左侧,我们可以看到系统默认有三种速度可以选择,但是如果想进一步设置,可以点击“高级选项”,就会进入右侧的画面上图。
我们可以自行设置Gas Price,调整交易的Gas Limit。 WEI 是以太坊上的最小单位(10^-18 Ether); GWEI 是 1G WEI (10^-9 Ether)。
图中Gas Price设置为10 GWEI; Gas Limit 为 21,000。 所以:
10GWEI(单位燃料价格)* 21,000(燃料消耗)= 0.00021 Ether(手续费)
气体限制
如果想操作智能合约等更复杂的功能,又不确定实际使用的Gas,也可以提高Gas Limit。 打包时,只收取实际使用的Gas作为手续费,多余的Gas退还。
然而,由于以太坊区块有 800M 的大小限制,如果 Gas Limit 设置得太高,它可能无法进入区块并留在“交易池”中。
GWEI
至于要设置多少GWEI,我们可以去ETH加油站查看实时“交易池”状态:
ETH GAS STATION 的气价建议
可以看到,如果希望交易尽快确认,可以将GWEI设置为20以上,2分钟左右即可确认(不过一般设置为FAST,应该是15~ 30秒)。 截图其实是目前拥堵的情况,一般10个GWEI左右就可以达到FAST(
这里显示的Gas Price建议实际上是“交易池”中的情况:池中有多少未决交易,池中这些交易的交易费用是多少。 根据这些信息,将预估出呈现设定的Gas Price所需的区块数(时间)打包上链。
然而,很多人经常对交易有疑问:
为什么我不能发送我的交易? 我应该怎么办?
可能是Gas Price设置过低,或者交易量突然涌入等情况。 这时候其实有一个补救办法:
加速交易
当交易通过 Metamask 发送时,您可以看到底部会有一个“加速”按钮。 点击后可以重新设置Gas Price。 设置并重新发送交易后,您可以在下面的活动记录中看到交易费用被提高了。
取消交易
除了加速交易,它实际上可以取消交易。 方法是点击等待处理的交易。 展开后,可以看到“取消”按钮。 点击确认后,Metamask会向节点发送取消交易请求,确认取消后收取手续费。
如果您发现取消交易的请求等待了很长时间,其实您可以在底部看到“加速取消”的按钮,您可以进行进一步的设置。
那么,上述过程到底发生了什么,技术上又是如何做到的呢?
答案和我们第一节讲的nonce有关。 方法是:
发送具有相同随机数的另一笔交易
由于以太坊 nonce 的设计,每个地址的所有交易的“顺序”都会被跟踪,这意味着每个 nonce 只会有一个交易。
加速交易
因此,加速交易意味着我发送具有相同随机数和相同内容的另一笔交易。 因为增加了交易手续费,所以当两笔具有相同nonce的交易位于“交易池”时,原则上先发送交易手续费高的交易。
因为每个nonce只能有一次交易,第一笔手续费较低的交易永远不会被打包,所以会被系统丢弃,交易失败。
取消交易
其实取消交易的逻辑也是类似的。 方法如下:
然后我用 0 Ether 向自己发送相同的随机数交易。 由于交易手续费高,会先打包成一个区块,这样原来的交易就会被系统丢弃,交易失败,从而达到取消交易的目的。
综上所述
1. 交易发出后,将被抛入交易池,等待矿工打包。 决定订单的主要因素是 Gas Price (GWEI) 的数量。
2. 发送交易时,可以到ETH加油站参考实时交易池状态,再决定设置多少GWEI,以便在预期时间内打包上链。
3. 如果发现交易卡在交易池中等待处理,可以加速或取消交易。
综上所述,大家应该对以太坊交易和打包规则背后的逻辑有了更深入的了解。
区块链技术以太坊