答案是肯定的,下面币火牛来给大家详细做个介绍。
以太 GAS 机制简介
我还是先从以太的 Gas 机制来说吧,如果对这些不感兴趣,也可以直接跳到实际操作步骤图示。但是了解一下这些内容也是非常有好处的,会让你以太坊交易机制有一个深入理解,还可以让你明白怎么设 Gas 价格,设多少合理等等问题,转帐再也不用花冤枉钱。直接让你从吃瓜群众进化到高大上的专业人士。
需要知道的几个概念:
任何以太坊区块链上的操作,不管是向普通地址转账还是调用合约,都是需要 gas 的。
矿工费:转账时需要额外支付给以太坊网络矿工的费用。
Gas 价格: 转账等操作时每一步操作的单价,单位一般为 GWei。
Gas Limit(Gas 限制):转账操作时最大允许消耗的 Gas,如果转帐执行时所消耗的 Gas 大于 Gas 限制,转帐就会失败,并且执行时消耗的 Gas 还是会扣除,所以这一项可以适当填大点,对最后的交易费没有影响,除非智能合约设计不合理,出现死循环等现象。
矿工费 = Gas 价格 * 实际消耗的 Gas
实际消耗的 Gas : 取决于所运行智能合约操作的消耗,不由我们决定。如转账给普通地址一般需要 21000 个 gas。
从矿工费的公式中可以看出,Gas 价格高,所得的矿工费就高,所以矿工都是优先打包 Gas 价格高的交易。这样当交易堵的时候, Gas 价格比较低的会竞争不过 Gas 价格高的交易,后果就是很长时间不到帐,我曾有一笔交易 5 天了还没到帐,虽然随着时间过去,矿工优先打包这个交易的权重也会有所增加,但是在网络拥堵的时候,这个影响还是微乎其微的。
如何设置 Gas 价格
我们可以根据当前以太网络拥堵程度来设置 Gas 价格:
https://www.etherchain.org/tools/gasPriceOracle在这里可以看到当前不同 Gas 价格所需要的交易确认时间估算,我们可以通过这个来确定所使用的 Gas 价格。
https://ethgasstation.info/index.php这个网站有详细的有关 Gas Gas 价格的信息。
取消或加速交易的原理
让我们首先研究下以太坊的交易的详细情况:
下图是 ethscan 显示的一笔交易的详细内容:
大家可能会注意到,其中有一项为 Nonce: 39 ,那么 Nonce 是什么呢,有什么意义?
Nonce 是什么?
以太坊中,每笔交易都有一个 nonce , nonce 是发送地址发送交易的笔数。 每次发次一笔交易,nonce 加 1,以太坊有关 nonce 的规则如下:
按交易顺序, nonce 为 1 的交易只能在 nonce 为 0 交易后面,而不能在 nonce 为 0 的交易前面被矿工确认。
nonce 是连续的,不能跳过。如果 nonce 为 0 或 1 的交易还没有发送过,你就不能发送 nonce 为 2 的交易。
解决方法
根据 nonce 的这个特性,我们可以发送一笔交易来取消或修改原有的交易。当然前提是你要取消或修改的交易必需尚末被矿工确认。并且设置交易的Gas 价格要比原来的高,这个交易得到确认后,原先的交易就会自动取消。因为根据上面 Nonce 的规则,以太网络不会去确认跟已经确认的交易有相同 nonce 值的交易。
取消交易就是使用同样的 nonce 值,重新发送一笔交易,但是使用更高的 Gas 价格,并把转帐金额设为 0,目标地址可以设为自己的发送地址,就是说发送地址和目标地址相同,当然使用原来的地址也没问题。
如果需要加速原有的交易,我们就可以用跟原交易相同的 nonce , 但使用更高的 Gas 价格来加速确认,这样才能让矿工优先打包你后发的交易,从而使得前面发送的末确认的交易得以取消。
很简单是吧,但是很多钱包软件是没有设置 nonce 值的功能的。我目前只知道https://www.myetherwallet.com/有这个功能。如果你使用 myetherwallet 支持的硬件钱包,或者 MetaMask, 可以直接使用 myetherwallet 。
但是如果你使用的是其它类似 imToken 钱包,一种方法是导出 Keystore , 然后在 myetherwallet 中导入。但导出私钥存在有风险,万一你不小心用了不正确的 myetherwallet 网址,很容易被盗,所以推荐用后一种方法。就是在 google 浏览器中安装 MetaMask 插件, 然后导入 imtoken 的 keystore 文件。
将 keystore 导入 MetaMask 的方法示例:
在 MetaMask 中点一下菜单,选 Import Account 。
在 select type 中选择 JSON File , 点击选择文件导入 imtoken 的 keystore。最后输入密码,点击 IMPORT 导入帐户。
实际操作步骤图示
以下以 MetaMask 为例示范操作一下:
首先打开网站https://www.myetherwallet.com/, 注意请确认网址。
可以在这里选择语言为中文
选择离线发送
步骤1:生成信息(联网电脑)输入发自地址,后点击生成信息,系统会根据自动填入 Gas 价格,和下一交易使用的 Nonce 值。
步骤2:生成交易(离线电脑)填好发往地址、发送数额、发送的代币、Gas 限制、Gas 价格、 Nonce 等。
如果要取消交易,可以将发送数额真为 0 ,
如果要加速堵塞的交易,则设较高的 Gas 价格,其它数据跟原来的交易一样。Nonce 设为你要加速、取消或替换的交易对应值。
注意Gas 价格这里 Wei 作单位,如果 Gas 价格为 41 则这里输入 41000000000,注意后面有9个0.
步骤 2.5选择 MetaMask / Mist
点击 Connect to MetaMask。
步骤 2.8点击“生成交易” 会生成末生效交易、签名交易。
步骤3:发送/公开交易(连网电脑)最后点击发送交易,等矿工确认这条交易,原来具有相同 nonce 的末确认交易就会取消。
注意:图示中的交易数据只为示范用,并不是实际数据,如果你有任何疑问欢迎来币火牛问答提问,我们会在第一时间给答疑解难