在信息互联网的世界里复制粘贴是可以无限可复制零边际成本,而在区块链充满各种加密货币里若是也存在无限可复制的话,就不会被承认被流通被交易了。

  换一种说法是多重花费,将数据复制就可以重复花费,区块链的技术精髓就在于解决信息的无限可复制性,转变成有价值的信息有价值的数据。

  什么是“双花问题”?

  因加密货币是二进制的代码,是可以复制的数据,存在一笔数字资产被重复使用的情况,这就是所谓的“双花”。一笔资产可以花两次甚至花多次。

  我们知道作为中心化的支付平台第三方是保留交易总账来保证每笔数字现金只会被花掉一次;而作为去中心化的区块链里数字资产,双花问题是如何出现的呢?

  先假设一个场景,一般 用户

  场景1:诈骗者使用加密货币购买数字产品如买一本电子书,价格为1个EOS。他先将EOS发送给店家,假设这笔交易是tx1;然后同时将相同数量EOS发给自己另外一个钱包地址,称这笔交易为tx2。

  店家网站程序检测到交易tx1后,觉得没有问题,程序自动发电子书过去;

  但因交易tx1和交易tx2是相冲突,矿工只会在一个时间点打包一个交易,万一不小心都打包了,其他节点矿工会验证并拒绝这个区块打包成功,所以如果交易tx2打包成功了,交易tx1会作废,这种情况下,诈骗者成功双花了EOS,即买到了电子书,也收回了自己的EOS。

  解决办法:这种场景下的双花比较好解决,店家网站程序自动发电子书前,先让区块确认交易,至少一个区块交易,而只有被至少一个区块确认过的交易,就会盖上时间戳且之前从未存在过,才被认为交易的有效性。

  目前比特币的交易要被6个区块确认才算安全有效可靠,以避免孤立区块的情况;EOS的充值确认在币安里是需要至少32个区块确认数。

  另外一种场景,假设诈骗者是加密货币矿池或矿工。

  场景2:诈骗者矿工先构造交易tx1和tx2,tx1的手续费很低,将tx1发给商家买电子书,但是交易tx2隐藏起来不广播,只保存在自己的区块内。

  因为tx1的手续费太低,所以其他节点矿工们不想打包;而tx2被隐藏起来了,所以区块链浏览器是不可能发现有相冲突的交易,商家也就不可能发现。

  当商家认为是正常的交易一旦发货了,诈骗者矿工就会在自己挖到的区块打包进去,这个时候广播这个区块,全网所有的节点就会发现tx1是非法的了,直接作废掉,商家就收不到加密货币了。

  解决办法:想防御这类双花攻击就要依赖其他矿池矿工的协作。因为诈骗构造的tx2交易是不会被广播的,是以直接打包进诈骗矿池挖到的区块才会被其他矿池发现。

  如果其他矿池如果针对这种包含了延迟出现交易(tx2)的区块进行孤立,那这个诈骗矿池的这个块就白挖了,损失区块奖励,这是非常惨的事。

  具体的设定可以是矿池将超出一定时间,比如10秒内,都没有见到的交易(tx2),却包含在最新的区块里,则直接孤立掉这个块,在这个块的前一个高度上挖矿。

  如果执行这种孤立政策的算力超过51%,那基本上就没有矿池敢发起这一类隐藏交易(tx2)来攻击零确认交易了。

  小结

  避免加密货币的“双花问题”,主要就是交易成功后的区块确认数,比特币的区块确认数达到6就非常安全,双花问题基本上不可能出现,除非矿池的算力超过50%了,就可以为所欲为,双花在这种情况下算蝇头小利,强制分叉获利远远大于双花获利。

  另外判断交易是否合理,不仅仅是矿池节点,任何一个核心节点都会进行。即查询历史区块链,判断交易的输出是否不大于输入。