前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实现比特币BTC交易重发(Opt-In Replace-by-Fee,Opt-In RBF)

实现比特币BTC交易重发(Opt-In Replace-by-Fee,Opt-In RBF)

作者头像
sickworm
发布2019-02-27 16:59:10
2.8K1
发布2019-02-27 16:59:10
举报
文章被收录于专栏:sickworm

当你的交易因为交易费用过低而迟迟不能被节点确认,而又没有被节点抛弃的时候,你可能需要交易重发这个功能。而交易重发实际上就是,将保存在节点交易内存池中的你的交易(因为还没被确认)替换成新的交易。

BTC交易重发的三种方法:

  1. Opt-In Replace-by-Fee,简称 Opt-In RBF 或 RBF。将更高手续费用的交易提交到节点,也是本文着重介绍的方法。具体规范:BIP125
  2. CPFP,Child Pays for Parent。使用未确认交易的输出,并给予较高手续费。此时节点如果要打包这个子交易,则必须将其低手续费的父交易也一并打包。具体策略应该是一系列交易的平均手续费(未确认)
  3. double pay,制造双花。连接上没有收录你的交易的节点,使用原来交易的输入构建新的交易,并广播出去。由于两笔交易是冲突的,所以节点只会收录其中一笔交易。最后然后祈祷该交易被收录。

各方案比较

Opt-In Replace-by-Fee 比 CPFP 费用消费低,CPFP 需要多消耗一笔交易费用的钱;

CPFP 不需要节点支持 BIP125 也可以使用,Opt-In Replace-by-Fee 需要足够多的节点支持,交易才容易被成功收录(BIP 125 已发布2年多,其实不用担心此问题);

double pay 又麻烦成功率又低,不到万不得已不使用。

Opt-In Replace-by-Fee 实现指南(参考 BIP125

交易需声明为可替换交易,声明方式分两种

  1. 显式声明:至少一个input的nSequence小于0xffffffff-1(不是小于等于)
  2. 继承声明:没有显式声明可替换的交易,但如果他们的前置交易可替换且没有被确认,那该交易也是可替换的

实现细节:(Bitcoin Core 0.12.0)

  1. 交易需要声明为可替换交易
  2. 可替换交易没有包含新的,未曾出现过在内存池中的,未确认inputs(未确认input的意思是其前置output所在的交易未确认)
  3. 新替换交易的交易费用比待替换交易费用高
  4. 新替换交易费用必须比节点的min relay fee高
  5. 待替换交易的子交易(即使用了该交易的任意outputs,该交易替换后它们将被从内存池中移出)数量不可超过100条

测试站点

使用 https://www.blockchain.com/btc/pushtx 测试通过。

测试点:

  1. 降低手续费,不提高手续费(应失败)
  2. 提高一点点手续费(应成功)
  3. 提高手续费到比找零utxo还大的值(此时会引入新utxo)(应成功)

ETH交易重发

相比 BTC,ETH 的交易重发就简单多了。只需要发布同一个 nonce 的交易,旧交易就会被替换掉。当然手续费要比以前高,矿工可不干无用功。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年9月9日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档