Tech Blog

SmartX另辟蹊径排除双花问题

By 2019年12月26日 No Comments

先来了解什么是双花?

简单的来说,双花就是一笔钱被花费了两次。例如:小明的支付宝里面只有20块钱,他去星巴克买了一杯咖啡,这个20块钱就不可能再去肯德基买一杯咖啡了。原因是因为支付宝的后端,扣减钱的操作是原子操作,小明在支付宝里面钱必须被完全打到星巴克的账户里面,这个操作才能完成,等他再去肯德基买咖啡的时候,账户里面的20块钱已经被扣掉,不可能再支付20 块。

区块链中的双花又是怎么样的?

在区块链系统里面,上述情况会存在,主要是因为区块系统想做到中心化系统的原子性比较难,中心化系统通过数据库的锁就能轻松的做到操作原子性,而区块链是去中心化的,使用同一个output的多笔交易,可以分别发送给多个不同的节点,而多个节点之间的数据不是同步实现的。

各家区块链技术中双花是怎么被解决的?

双花的解决根据不同的币种会有不同的解决方式

  • 比特币

① 首先,要检查这笔钱是不是没有被花费过。方法是查看你的这笔交易的来源是否在UTXO(未花费交易列表)中。不需要追溯到挖矿挖出的coinbase交易

② 然后要看你提交的交易里有没有包含有效鉴权。如果这笔钱之前是通过P2PKH交易付给你的,那就是看交易里有没有这笔钱所在地址的对应私钥的签名。P2SH、P2MS类型的交易的鉴权规则类似

③ 如果你用同一笔UTXO构造了两笔分别付给A和B的交易。那么bitcoin-core客户端的规则是只转发先侦听到的那个。但至于哪笔交易会被包含进未来区块,则取决于矿工

④ 矿工的挖矿程序一般是定制开发的,矿工可以自主任意选择这两笔交易里的一笔。比如有的矿工会选择先看到的交易,有的矿工会选择交易手续费更高的那个

⑤ 当这两笔相矛盾的交易中的一笔被写入区块链,并且深度达到6后(6个确认后),可以认为这笔交易获得了最终的确认。等待6个确认的情况下,比特币是几乎绝对不可能被双花的。一个确认都不等待,则有相当的可能被双花攻击。通常,3个确认已经相当安全

  • 以太坊

① 以太坊协议支持分叉,则万一两个区块同时出块上链得到认可,且这两个区块中存在双花现象

② 在以太坊里面,每个帐户下面也都管理着一个nonce值,这也是一个非常重要的数字。nonce解决了“双花”问题。以太坊一个地址,就理解为一个帐号,在刚生成地址时,nonce为0,该地址每发送一笔交易,nonce值加1。这也就是说,查看某地址的nonce值,可以知道该地址已经产生了多少笔链上交易。

③ 例如:A用户当前nonce值为10,然后A在短时间内分别向B, C 发起了2笔转帐交易,那nonce对应的是11,12。矿工在打包交易的时候,会检查A的nonce值,不管矿工是先接收到12的交易,还是11的交易(网络传输),都一定是先打包nonce值为11的交易,再打包12的交易。如果矿工先接收到12的交易,但是发现没有11的交易,这时交易会被挂起,一直等11的交易出现。交易的执行顺序是依据nonce值。

  • 门罗币

门罗币排除双花的方式也很特别,首先门罗币是utxo的匿名币,对于使用同一个output对同一个地址转账,同一个账户打包出来的交易是完全不一样的,因此对于每一笔交易

① 门罗都需要生成一个tx public key和tx private key。其中tx public key会保存并且记录在区块链上,方便交易的双方找回属于自己的output。

② 而tx private key由发送方保存,并且tx private key还用来生成交易双方的stealth address。以及作为生成pederson commit和bulletproofs的私钥。

③ 对于同一个output,发送方必须使用output所在交易的tx public key和自己私钥生成key image,也就是说,同一个私钥花费同一个output产生的key image一定是相同的,同一个output如果被重复花费,则一定会产生相同的key image,矿工根据key image就可以排除output被重复花费的情况。具体如图3所示:

  • XDAG

XDAG跟BTC不同,XDAG不排除重复交易,但是缺可以根据一定的规则选择真正生效的交易。

① 如上图所示

A1、A2是地址块

M0是主块

W是链接块

Tx1、T2是A1向A2发起的交易

* 假设W链接块出度顺序假设从上往下依次增加

对于交易Tx1和Tx2而言,W连接Tx2的次序小而Tx1的次序大,因 此Tx2会优先被处理,从而排除双花情况Tx1

② 如上图所示

A1、A2是地址块

M0是主块

W是链接块

Tx1、Tx2是A1向A2发起的交易 上下两个方框表示不同节点

* 假设图中M1“ 的Hash难度最高

双 花 处 理 :  Tx1间接被M1`引用,Tx2间接被M1“ 引用,在针对A1而言Tx1和Tx2排序时,Tx2因为M1“的Hash难度是最高 的,所以Tx2排在Tx1前,从而排除双花交易Tx1。

SmartX怎么解决双花?

SmartX的双花检测标准如下:

① 能被 MC 块直接可达块,可通过块跟主 MC 拓扑序来排序

② 如果跟 MC 块没有通路,则通过最短路径排序即达到创世区块最近之路径

③ 如上无法判断,通过块 hash 和时间来排序

在下图中,Epoch3 出现 了两笔 双花 交易 TX2-1 和 TX2-2 ,由 于 SAT 主链 已确定MC1<-MC2<-MC3,因此通过 MC3 通过拓扑排序可以判断 M1 序号优于 M2,从而 TX2-1序号优于 TX2-2,到此 TX2-2 交易被排除,双花检测成功。

双花问题在区块链中一直是亟待解决的问题,SmartX通过自己独特的方法解决了这一问题,让团队走得更远,真正做技术也能解决实际问题。