APP内打开
风险提示:防范以虚拟货币/区块链名义进行的非法集资风险。 ——银保监会等五部门

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

白话区块链 2019-07-29 17:07:08
微信分享

扫码分享

通过RBF可以发起第二笔交易,这笔交易转移的比特币和第一笔中是一样的,但是通过支付更高的手续费,就可以取代旧的未经打包的第一笔交易。

作者:江南大户戴老板 / 来源:白话区块链学堂

image.png

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

image.png

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

BitPay是一个老牌比特币支付处理商,成立于2011年。截至发文,还没有对此做出回复,反而是另一个支付处理商Flowee The Hub在推特下面进行了回复:

image.png

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

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

image.png

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

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

 

1. 什么是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种模式

image.png

图片源于the Money Mongers

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

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

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

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

2.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功能,才会导致双花攻击现在变得如此简单,比特币已经不再是一个支付系统。

image.png

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

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

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

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

虽然不清楚正在读这篇文章的你对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功能后来也被比特币核心开发者进行升级用到了比特币的闪电网络中。

 

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

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

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

下次再有人遇到比特币勒索,也许不妨试试RBF交易?Anyway, 不管大家对RBF支持还是不支持,RBF功能早在2015年就被部署在比特币网络上,生米已经煮成非常熟的饭了。那我们普通人应该怎么应对这个情况呢?其实很简单,等待交易被矿工确认,当交易被明确记录在区块链上以后再进行后续的操作。如果涉及的比特币数额较大的话,请至少要等待6个区块以上的确认数。

下载白话区块链APP

区块链世界入口第一站,人人都能看懂的区块链;24 小时热点实时追踪。