所以我们可以得出,所消耗的 ETH 数量 (Ether Cost)= 交易费用 (Gas Fee/Transaction Fee) = 每笔交易所消耗的 Gas 数量 (Gas Used By Transaction) * Gas 价格 (Gas Price)。 了解了以太坊的手续费机制以及账户类型,我们来看看用户在交易时时常会碰到的问题。 待确认交易 (Pending)/加速交易? 每当用户发起一笔交易时,交易会被放入一个交易池 (Mempool) 中。如上文提到,矿工会优先打包池子中 Gas Price 最高的交易(矿工的趋利性)。所以用户设定的 Gas Price 决定了交易被打包执行的速度。在网络拥挤的时候,由于 Gas Price 飙升,用户的交易可能长时间处于待确认状态。为了尽快将待定交易发出,用户可以选择支付更多的 Gas Price 来加速交易(律动注:理解为给矿工更多的酬劳以达到一个插队的目的)。 加速交易又是怎么操作的呢?为了更加详细地理解加速交易的逻辑,我们需要明白另一个参数:Nonce。每一个账户发出的交易都会有一个按顺序排列的交易编号--Nonce,从 0 开始,每次发起一笔转账,该账户的 Nonce 值会增加 1。 当用户想要加速交易时,在以太坊钱包中,用户可以选择加速交易选项,这时会被要求支付更高的 Gas 费用,用户同意之后相当于发起了一笔新的交易,而新的交易与待确认交易的 Nonce 值相同。 由于以太坊网络规定,Nonce 值是连续不可跳跃的,且同一个地址每笔交易的 Nonce 值不可重复,所以矿工会打包新生成的交易,在新交易被打包确认之后,之前较低 Gas Price 的交易会废弃掉。 若用户不想加速交易,只要此交易还在交易池中未被打包,用户可以随时选择取消交易。取消交易的逻辑与加速交易相同,用户发起一笔 Gas Price 更高,但与待确认交易 Nonce 相同的交易,但交易金额变为 0,所以本质上,取消交易的成本与加速交易的成本一样需要成本。 需要注意的是,在待定交易确认完成之前,后面的交易都需要排队等候,所以用户不要由于等候时间过长重复发起多笔交易。 交易失败 (Fail) 律动 BlockBeats 发现,目前最常见的交易失败原因是交易 Gas 已用尽 (Out of Gas)。也就是说,这笔交易的计算量超过了用户所设定的 Gas Limit。一般在这种情况下,交易状态将会显示为失败,并提示 Gas 已用尽,并且所支付的 Gas 不会被退还。 有些用户可能会认为这并不公平,但本质上矿工已经在做功计算,只是算到一半 Gas 不够了,所以矿工只能放弃继续作业,但之前的工作需要被支付「工资」,因此之前交的 Gas 费不退大概也可以理解了。遇到这种情况,用户只能重新再发起一次交易,并将此交易的 Gas Limit 上调。 另一种交易失败的情况是,当用户向智能合约发起交易转账,但某些错误导致无法执行合约时,交易会返回 Bad Instruction。 (责任编辑:admin) |