Realtime Price(实时价格):

对于刚发起的比特币转账,后悔了想马上追回怎么操作?巧用“双花”

作者:白话区块链

发布时间:2019年8月16日

网络来源:新浪微博

比特币双花没你想得那么难!

7 月 24 日,比特币核心开发成员 Jonas Schnelli 因为在 adafruit 上购买东西没有成功,怒发推文质问 BitPay 为什么拒绝了自己的订单。


“@BitPay 我刚从@adafruit下了订单,你们这群傻蛋儿为什么要拒绝我的RBF交易。而且在两天之内都没有通知我原因,直到我找上门来问我买的东西在哪。你们真是让人糟心!”

BitPay 是一个老牌比特币支付处理商,成立于2011年。另一个支付处理商 Flowee The Hub 在推特下面进行了回复:


“来让我理一下这个事情的经过,我猜是这样的。你发起了一笔比特币付款交易,这笔交易上写着“我将会在稍后支付更高的手续费进行双花”,于是这笔交易就被服务商认为是个坏主意而拒绝了。你简直就是个 Dramaqueen(指一个人小题大做,吸引大家注意力)······”

由比特币社区成员运营的一个推特大号 Bitcoin 也对 Jonas Schnelli 的做法尽情嘲讽了一番:


“你们这些个核心开发成员,这些年来做的事情就是让比特币的可用性越来越差。当 BitPay 这些公司处理你们造成的混乱局面时又开始抱怨。你到底在指望点啥?”

那到底是比特币核心开发成员 Jonas Schnelli 真的 no zuo no die 还是另有隐情呢?要想说明白这个事情,我们得先来介绍一下什么是 RBF 交易

 01 
什么是RBF交易

我们知道比特币矿工的收入有两个来源:区块奖励和手续费。在打包一个区块时,矿工会优先打包手续费更高的交易,这也就是为什么在利用钱包进行转账时,如果交易转账手续费设的很低,需要等待的交易被确认时间会被拉长。

万一把手续费设的太低了,那很有可能这笔交易得等上一个星期才有矿工帮你打包,期间这笔比特币就相当于卡在矿工的内存池中了(内存池是矿工存放网络中接收的未打包交易的地方),那有没有什么办法抢救一下设的太低的手续费呢?

答案是有的。RBF 就是由另一名比特币核心开发成员 Peter Todd 提出的解决办法之一。RBF 是 Replace-By-Fee 的缩写,可以通过支付更高的手续费来替换之前发出的同一笔还未打包的的交易。第一笔交易由于手续费设的太低,躺在内存池中一直无法激起矿工打包的欲望,通过 RBF 可以发起第二笔交易,这笔交易转移的比特币和第一笔中是一样的,但是通过支付更高的手续费,就可以取代旧的未经打包的第一笔交易

举个例子:

1、大白转给小黑 1 个比特币,支付给矿工 0.001 比特币的手续费。由于大白和小黑都不急于这笔交易被矿工打包,所以大白给的手续费并不高。

2、可是几个小时后,小黑发现自己的花呗还款马上就要到期了,急着要用钱,而大白转给自己的这 1 个比特币还没有被矿工打包,有点心急火燎地开始催大白。

3、大白深刻理解这种“支付宝作为一个成熟的软件,却还学不会自己还花呗”的痛苦!于是再次发起了一笔交易。这笔交易转移的 1 个比特币和之前发起的是同一个,付款地址和收款地址也和第一笔交易设定的一样,只是这次通过 RBF 支付了更加高的手续费:0.003BTC。

4、接着这笔交易由于支付的手续费较高,成功地引起了矿工的注意就把它们打包了。

(P.S. 这里写的手续费只是举个例子,实际情况中一笔交易设定多少手续费才合理可以在白话区块链官网 www.hellobtc.com 的百宝箱中查看。)

根据 the Money Mongers 的一篇文章介绍, 比特币的 RBF 一共有 4 种模式:


▲ 图片源于:the Money Mongers

1、完全(Full)RBF:只要支付足够的手续费,就可以无条件允许新交易取代旧交易。

2、可选式(Opt-in)RBF:当旧交易明确声明自己允许被替换时才能被执行替换操作。声明通过由 BIP 125 定义的“序列”字段完成。可选式 RBF 的一个缺点是用户必须事先知道他们何时可能希望替换交易。因此,即使用户不需要用到这个功能,为了保险起见也会把可选式 RBF 设定为默认模式。

3、首见安全(First-seen-safe)RBF:只有在满足特定的附加标准——新交易必须支付与被替换的旧交易相同的所有交易输出——才允许用新交易替换旧交易。

4、延期的(Delayed)RBF:当旧交易首次被网络中节点接收,如果在给定数量的区块数之后,旧交易仍然未被打包,则允许新交易无条件地替换旧交易。

 02 
RBF交易的弊端

怎么样,是不是觉得 RBF 这个设计很人性化呢?但是,这里需要大家注意的一个点是,RBF 的这种设计其实犯了一个大忌——双花

双花的意思是一份”钱”花了两次甚至多次。在比特币的创始人中本聪的原版设计中,矿工打包交易需要遵循“先到先得”这条规则,也就是说如果你对一枚比特币同时发起两笔交易,那么优先被矿工纳入内存池的这笔交易就会被打包,略慢一些那笔交易会被认为是试图双花的非法交易,被矿工拒绝。

所以,可想而知,Peter 在提出 RBF 之后,这个提议遭到了开发者社区中众多成员的反对。

比特币前首席开发人员 Gavin Andresen 发推文表示:

“RBF是个糟糕的主意,我不知道现在比特币网络上有多少使用RBF的交易。虽然不太清楚它给比特币网络增加了多少复杂度,但是记住,复杂就是安全的敌人。”

Gavin Andresen 的观点其实可以化用乔布斯的一句话:Stay Simple, Stay Secure。

比特币初衷是做一个简简单单的货币支付体系,一旦这个体系添加太多复杂的功能,它的安全性就会降低。这也是为什么比特币开发团队当初提出隔离见证+闪电网络的扩容模式被很多人反对,除了一些比较阴谋的推论之外,也是因为这种扩容方式的设计太过复杂。

今年 3 月,据外媒 CBC 消息,有 4 名加拿大裔男子在 10 天内通过对比特币 ATM机 进行 112 次双花攻击,共获利 20 多万美元。一位加密货币爱好者 Collin Enstad 认为正是因为 RBF 功能,才会导致双花攻击现在变得如此简单,比特币已经不再是一个支付系统。

对此,RBF 的提出者 Peter Todd 回应:

“请不要把这个锅安在 RBF 头上,比特币本来就不确保链上 0 确认交易的安全性,以前没有,未来也不会有。这些声称 0 确认交易安全的要么无知,要么不诚实,而且这些人往往就是那些向你兜售不安全产品的人。“0确认强盗”挺好的。

很不幸这篇报导文章没有提到比特币 ATM 运营商的一个纰漏:他们接受没有丝毫安全性可言的 0 确认交易,这会引导读者认为是比特币的新弊端。”

 03 
交易可被替代是中本聪首创

虽然不清楚正在读这篇文章的你对 RBF 是什么看法,但是我想告诉你,用新交易来替换旧交易并非 Peter Todd 首创,而是比特币的设计者——中本聪提出的。到这里你可能有点晕了,刚才不还说中本聪对矿工打包交易的设定是先到先得么,怎么又说中本聪提出可以用旧交易来替换新交易呢?

中本聪最初设计的比特币系统有一个 Locktime 锁定时间设定,可以实现交易延迟打包的功能,通过 Locktime 就能实现让用户用一笔更新的交易替代旧的交易。

Locktime 的值可以分为三档:

1、如果 Locktime 值是 0,表示可立即打包,通常我们发出的交易 Locktime默认设定为 0;

2、如果 Locktime 值大于 0 且小于 5 亿,这个 Locktime 表示的是区块高度,在这个指定的区块高度之前,该交易不能被打包;

3、如果 Locktime 值大于 5 亿,则它是一个 Unix 纪元时间戳,矿工必须等到指定的一个时间点才可以打包这笔交易。

举个例子(这里暂不考虑手续费问题):

在区块高度 10 上,大白转给小黑一个 1 个比特币,设定 Locktime 为20,由于还没有到区块高度 20,所以矿工并不会打包这笔交易。

接着,小黑开始催大白加快转账速度,那么大白就会再次发起一笔交易,这笔交易转移的 1 个比特币和第一笔交易是一样的,但是这次设定的 Locktime 为 0,此时矿工在接收到交易以后就会直接进行打包。

这样第二笔新的交易就成功得替代了第一笔旧的交易,那第一笔旧交易在区块高度达到 20 时会发生什么呢?它会被矿工当做试图双花的非法交易拒绝,不会进入主链。这个 Locktime 功能后来也被比特币核心开发者进行升级用到了比特币的闪电网络中。

 04 
巧用双花,让黑客空手而归

RBF 并非一无是处。国外一位加密货币爱好者 Igor Korsakov 在网上分享了他如何利用 RBF 化解比特币勒索的危机。一个使用 Igor Korsakov 提供的比特币支付服务的网站遭到了黑客攻击,黑客向其勒索 2 个比特币。他们答应了黑客的要求,但是设定的转账手续费非常低,只有 0.0001BTC。

这笔交易一直未得到矿工的打包确认,但是黑客此时能在区块浏览器上查到这笔交易,以为赎金是囊中之物了。接着 Igor Korsakov 使用 RBF 再次发起了另一笔交易,转移的是同样的这 2 个比特币,但是接受地址是另一个,且给了 0.1 个 BTC 手续费加速这笔交易的确认。最终第二笔交易优先得到了矿工的确认,黑客则什么也没有得到,煮熟的鸭子就这么飞走了。

下次再遇到比特币勒索,或者对已经发起的比特币交易感到后悔想要追回,不妨试试 RBF 交易。不管大家对 RBF 支持还是不支持,RBF 功能早在 2016 年 2 月份就引入了 Bitcoin Core 0.12,生米已经煮成非常熟的饭了。

那我们普通人应该怎么应对这个情况呢?

其实很简单,等待交易被矿工确认,当交易被明确记录在区块链上以后再进行后续的操作。如果涉及的比特币数额较大的话,请至少要等待6个区块以上的确认数。

留言挖矿 第304期:你认为比特币的 RBF 功能利大于弊还是弊大于利?为什么?欢迎在留言区分享你的观点。

相关文章:

比特币布道者

比特币的坚定信仰者!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注