老外在看什么如何在BSV网络上双花零确认交易

930

2018/12/11 10:00

前两天国外有个网友reizu发帖,说自己成功在BSV网络上双花了零确认交易。让我们一起看看他是如何实现的。

在说明reizu如何双花之前,我们先来定义一下零确认交易和双花。

什么是零确认交易?就是所有已经开始广播,但仍未被挖矿节点打包到区块里的交易。

什么是双花呢?就是同一笔加密货币,重复使用。更具体一点来说,即使用相同的UTXO构造两笔交易,发送给两个不同的节点,同一笔币,成功花出去两次。

这里要说一下的是,节点验证交易的时候有一个原则,叫做“先到先得”。即按照时间验证交易,相同两笔交易,节点会认为第二笔是不合法的。

reizu自己编写了一个工具izubitcoin,用于连接网络里的所有节点,以便同时向这些节点发送交易。拿BSV网络为例,网络里现在大约有450个节点。

1-同时构造两笔交易,一笔交易T1发送到其中300个节点,另外一笔交易T2(双花)发送到另外150个节点。节点肯定会相互广播,但是会相互排斥。已经接收T1的节点,会排斥T2,反过来亦是如此。

2-如果T1发给了大部分非挖矿节点,而T2(双花交易)发给了小部分挖矿节点,那么网络大部分节点只看到T1,但实际上被打包到区块里的是T2。这就可以实施一次双花。

那么如何确定哪些是挖矿节点呢?

3-作者reizu修改了他的工具izubitcoin,向所有的BSV节点发送一笔带有随机数据的交易,用于记录所有交易被发送到哪个节点,以查看哪笔交易被打包到了下个区块里。Reizu用这个方法定位到了BSV的挖矿节点:

34%的算力集中在一个节点上。

59%的算力集中在两个节点上。

68%的算力集中在三个节点上。

75%的算力集中在四个节点上。

4-   因此,如果BSV网络有450个节点,可以把交易T1发送给446个节点,T2发送给4个挖矿节点。T2被打包的概率就是75%。

Reizu说在BSV网络上利用这个方法成功进行了多次双花,并给了他的结论:

Ÿ 可以通过节点的数量,控制成功的概率。如果你想要保证100%成功,那么就发送交易到20个节点。

Ÿ 把T2发送到6个节点,被检测到双花的概率很小。作者使用APP POP!进行测试,这款应用连接了10个节点检测双花交易,但是并没有成功。这是符合逻辑的,如果BSV网络有450个节点,检测到双花交易的概率大约是14%。

Ÿ 检测双花交易的难度与网络节点的数量成正比。

Ÿ 所有交易的手续费都要大于1聪/字节。

Ÿ 执行双花交易的时间不能超过20秒

Ÿ 发起双花交易的成本几乎为零,只需要连接网络,和一个中高等的路由器。

Ÿ 即使所有的矿工都是诚实的,这个方法也奏效。

在这里补充一点,作者这里说的双花攻击属于非算力用户双花,实际上还有一种双花,叫做算力用户双花。即针对零确认交易的双花攻击是由矿池发起的。攻击者可以直接把T2隐藏起来,不广播,只存在内存池里,等挖出区块再打包到区块里。

最后作者认为,解决双花问题很简单。当节点收到双花交易的时候,需要相互沟通(发送proof)。BU在Github提出过这样的方案BUIP088。

另外一个方法是连接到更多的节点,或者公开挖矿节点。不过作者认为这两个方法都并不高效,这样会让钱包和支付处理器变得更加复杂。更好的方法是改进协议,简化检测双花的过程,让SPV钱包也能在智能手机上完成检测。

本文来源:瓦蜂财经

责任编辑:2018拥抱未来

稿件来源:瓦蜂财经

收藏

分享到:

猜你喜欢

热门新闻

下载瓦蜂财经APP

关注瓦蜂财经公众号

关注瓦蜂财经服务号

梅州微康网络科技有限公司

版权所有未经许可不得转载

批次号:粤ICP备13042501号