标签归档:区块链

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

Published / by sickworm / Leave a Comment

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

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 的交易,旧交易就会被替换掉。当然手续费要比以前高,矿工可不干无用功。

版权所有,转载请注明出处:
http://sickworm.com/?p=409

比特币要解决什么问题?

Published / by sickworm / Leave a Comment

本系列文章标题为码农翻身的小密圈中圈主提出的问题,下面是我跟帖的回答

比特币解决了第三方发放信用货币时可能产生的问题。

首先,人民币是有价值的。为什么这些人民币纸币有价值呢?因为这是国家发行的,而国家说他是有价值,我们人民群众也认可国家。所以,人民币可以在我们之间交易,2元人民币可以买包方便面,10元可以买包巧克力。

然后我们思考一下,人民币会永远有这样的价值吗?不一定。什么情况下人民币会失去价值?亡国了!中央银行为了解决国库空虚,无限制地增发货币!这并不是不可能,世界上某些国家曾经,甚至正在上演这样的事情。人民币有价值,是国家向我们保证人民币是没问题的,你们可以放心使用。当发行方的信任出现问题时,货币的价值也就没办法得到保证了。

往小里说,货币发行方不一定是国家。如果你信任我,你给我100块,我给你在纸上画只鸡,作为我发行的货币。我还有其他朋友也认可我画的鸡,你可以不通过我,直接拿这张纸和他交易。以后等我建立自己的国家,我的国民都会用我画的鸡做交易。
不严格地说,这张有我画的鸡的纸就是我发行的货币。如果哪一天我跑路了,或者有人发现我暗戳戳的画鸡给我的小老婆,让她拿鸡去和别人交易,我这鸡纸恐怕就没人相信了,没人愿意相信这鸡纸的价值。
因为我不再被信任,我的信用货币也不再具有价值。

而比特币是数字货币,它不靠第三方发行,也不需要信任哪个第三方。它的价值由他自身产生运行的机制作保证,任何人可对其原理进行验证。且没有人为的干扰(理论上,现实中还是有硬分叉这种充满争议的情况发生)。我们不再需要依赖那些不靠谱的人(画鸡纸的我)和国家(津巴布韦这样的)的信用,只需要证明比特币背后的机制是符合货币需求的,它就可以得到我们的信任。

版权所有,转载请注明出处:
http://sickworm.com/?p=390