导读
XDAG是第一个真正意义上可以挖矿的DAG项目,在2018年1月主网上线。XDAG虽然是一个DAG项目,但它的交易模型用的是和比特币类似的UTXO,而项目的发展也和比特币的发展有几分相似之处。
文章内容整理自XDAG的中国Maintainer Frozen(谢锐)在RebaseTalk《新一代公链技术前瞻DAG专题》的分享。
XDAG的传奇故事
XDAG是俄罗斯一个大学的数学教授在2017年9月开始实施的,他的网名叫Daniel。因为觉得当前的加密货币项目自己不是非常满意,而且他自己在工程和数学方面也有一些积累,所以就想自己做一个加密货币的项目,他选择了DAG,用POW是因为它认为POW代表了区块链的精神,开放并且任何人都可以加入做贡献,Daniel花了3个月的时间做完了这个项目,2017年12月份尝试上线,然后失败了,又花了几天时间,解决问题后在2018年1月再次上线了,这次使得XDAG成功上线。
对于Daniel这个网名,是因为作者当年老来得子,给自己的儿子起了个名字,叫Daniel,然后自己的网名就叫Daniel。
当时大家都在bitcointalk上交流,2018年2月,Daniel把项目开源出来让社区参与贡献,之后大家把项目迁移到了github上,再之后Daniel就完全消失了,完全把项目交给社区去管理。这个经历和当年的中本聪很像。
当前的问题和尝试
各个公链在经过了几年的发展之后,取得了一定的进展,但同时也面临着一些问题,比如POW对于资源的消耗问题,还有tps慢的问题,目前行业也在从各个方面来解决这个问题。

目前尝试的方式包括:
- Layer 1
- PoS/DPoS等共识方面的探索
- Sharding(分片计算)
- Layer 2
- Side Chain
- State Channels
- Multi Chains
- DAG
DAG项目介绍
DAG项目中有几个比较有代表性的项目:Nano,IOTA,Byteball,XDAG。
Nano把每一个账户作为一个链,然后通过转账的记录把不同账户的链拼接在一起,然后形成一个DAG的结构,Nano是最早期的一个项目。
IOTA主打的是物联网的概念,在物联网的设备上进行一个简单的POW来确认交易,同时在交易的时候要选择它的父亲节点是谁,形成一个tangle结构,IOTA的主要特点是在选父亲节点上面有自己的规则和算法。
Byteball中有12个节点,每个节点在收到交易的时候在后面加一个ball作为见证,当每一个分支上有7个见证的ball的话,这个分支就会被认为是一个Main Chain,这样就确定了交易的排序。
XDAG是有些不一样的地方,是第一个支持挖矿的DAG(IOTA不算真正的挖矿),同时没有预挖,没有1c0,并且完全是由社区驱动的,没有公司去推动,开发者都是全球各地大家找业余的时间来做,和bitcoin类似。
XDAG详解
XDAG的特点:
- 支持POW挖矿
- 去中心化
- tps高。之前遇到交易风暴的时候,交易量可以达到几千
- Block = Transaction = Address。在XDAG中提到的块也是一笔交易,后面提到的块也可以作为交易来理解,钱包所生成的地址(Address)也会在网络中生成一笔交易
- 对区块链技术友好。目前在比特币和以太坊做的一些实验都可以在XDAG上去做,因为创始人自己做过操作系统,所以在设计上也考虑到了这些。

我们知道DAG中都是有主链的一个概念的,因为DAG中的交易需要一个排序,要不然解决不了双花的问题。XDAG里面的主链,是有一个按照时间的分片,每一个分片中都会对交易进行打包,绿色是主链上的主块,黄色是见证块,蓝色是转账交易,黑色是地址块。

XDAG和Bitcoin类似,也是UTXO的模型,图形可能不太一样,其实本质上是一样的,图中的Block是前面提到的连接块,Tx0,Tx1,Tx2是真正的交易,Block A - D是地址。

从图中可以看到,区块链中有默克尔树,XDAG中也有类似的结构。

上图中绿色的Main Block存的是交易的hash,和默克尔树类似。
XDAG 中POW的计算任务是变化的,矿工把收到的交易加入到自己的hash计算当中,每个节点都会做计算,最终比拼谁的算力最强,然后生成Main Chain的块。

如何做hash呢,就是把局部的区块/交易都进行hash计算,一层一层的做hash计算,最后填入到新的区块当中(Main Block 2),然后进行sha256的计算,sha256做的事情就是做迭代的计算和混淆。对于结果的发送,只需要发送计算出来的sha256的值,而不需要发送所有的交易,大小只有32byte,这样会非常节省带宽资源,这样的话矿工只需要继续计算sha256,最终发现一个最小的hash,从而得到nonce值,确定主链(Main Chain)上新的主块(Main Block),通过这样的方式形成了主链的结构。
如何解决双花

如果A1和A2之间产生交易的话,会有一个新的连接块产生去确认他们之间的交易,连接块的产生来自于矿工。

因为用户可以选择自己的交易发送给哪个节点做验证,这里假设如果这两个交易都发送给了同一个节点,第一个被连接块引用的交易就是有效交易,第二个就是无效交易了,通过这样的一种方式来解决简单的双花问题。

如果遇到有个用户要作弊,发送了这两个交易给不同的节点的话,这个时候就需要通过POW生成的主块(M1'')来解决这个问题了,从上图中可以看到M1''是通过矿工POW算力竞争而生成的主块,而M1'不是,因为主块优先,这样的话,被M1''间接引用的Tx2就是有效交易了,从而解决了双花问题。
XDAG的高tps
XDAG当中为什么可以做到很高的tps呢?是因为它把DAG拆成了多个局部的小块,所以可以达到类似于分片计算的效果,从而达到一个高的tps。
XDAG目前的状态
钱包
- 主网2018.1.5上线,目前版本0.3.0
- 钱包发布了window,linux,mac,android和ios版本
- rpc在测试中,近期计划发布
- 有超过10个交易所上线了XDAG的交易
XDAG下一步
Frozen还谈到了具体的XDAG的下一步计划。
XDAG下一步会支持智能合约,对于DAG的话,支持智能合约是一个挑战。不过Frozen目前的团队在智能合约方面已经有了一定的积累,所以谈到对于合约的开发方面,Frozen也是蛮有信心的。
另外,XDAG希望未来支持匿名交易,同时也通过匿名交易来解决DAG中数据过于庞大的问题。
最后,XDAG在未来会做一些hash算法的调整。
如何加入社区做贡献
对于完全由社区驱动的一个项目,目前的贡献者都是自发的利用自己的业余时间去做贡献,所以各个方面的贡献都是欢迎的。你可以传播XDAG,可以去社区讨论提案,也可以给github提issue,还可以做一些多国语言的翻译,如果你是开发者还可以贡献代码。
Frozen分享的视频地址:https://v.qq.com/x/page/o086370xxx4.html
网友评论