本期速览
XDAG既拥有DAG的高并发,又拥有PoW带来的安全性和去中心化。本期Frozen从底层原理讲述了XDAG,那么它究竟有哪些特性?未来的发展方向又会如何?
主讲嘉宾
项目简介
XDAG是一种基于PoW共识算法和DAG技术的加密货币。XDAG是在2017年9月份前后由俄罗斯匿名数学家Daniel开始独自开发,2018年1月5日主网正式上线,2018年2月2日XDAG代码移交社区,由社区开始进行开发和维护。项目没有ICO,没有预挖,完全由社区驱动。
目前社区由各国各地区的爱好者组成,社区开发者团队共有17人,分别负责核心代码开发、显卡矿机软件、钱包开发、区块浏览器、矿池脚本工具以及各种小工具开发。
讲座内容
1.区块链行业现状
比特币开创了区块链的先河,公认是 区块链1.0时代,Ethereum将全球计算机的概念带入现实,被认为是区块链2.0时代,当前的EOS则将blockchain的技术发扬广大,有人认为是区块链3.0时代的开篇。
虽然行业经过多年发展,但是基于blockchain的区块链技术本身也面临诸多问题,并且随着普及范围扩大这些问题也越来越突出。
尽管业内众多blockchain开发者,都在尝试寻找各种技术手段,来解决当前遇到的这些问题,但是从当前技术发展现状来看,各种尝试并没有取得突破性进展。
目前遇到的问题主要有以下两个方面:
1、 blockchain本身的TPS瓶颈限制了区块链技术的性能
2、 blockchain较长的确认时间也限制了区块链技术的广泛应用
针对以上两个问题,不管是EOS偏中心化的解决方案,还是目前如火如荼的分片技术、侧链技术都存在一些无法解决的问题。
这一现状间接说明基于blockchain本身再去扩展将面临巨大困难和挑战。
那除了blockchain上再进行扩展是否还有其他的方向可以去突破?答案是有的。
那就是DAG技术!
2.Why DAG+PoW?
DAG (Directed Acyclic Graph 有向无环图) 并不是一个刚出现的技术,而是在数学的一个分支——图论中的数学概念,早在1736年被提出,在计算机技术中,则是在计算机科学与技术初期就已经存在的一种数据存储结构。从理论上而言DAG结构比单链结构更复杂,但拥有更好的扩展性。
目前,业内已经有一些基于DAG数据结构的公链存在,但是每个公链都因为对于DAG技术的理解不同实现路线和适用场景不尽相同。
这是NANO的实现方式,主要思路是每个账户拥有自己的一条链,不同账户之间根据交易记录串联起来,从而形成DAG。
这是IOTA的DAG样子,主要思路是根据交易不同的高度和权重让使用者来确定交易有效性。
这是Hashgraph的DAG样子,主要思路在于利用节点间的修改过的gossip算法传播的交易信息构成时间上的序列,从而构成DAG。
这是Byteball的DAG样子,它的思路在于:利用见证人节点向每一个交易后追加见证人单元来增加分支上的权重,从而确定当前DAG中的主链。
而以上的多种DAG实现并没有很好的解决去中心化、高TPS和低确认时间。
与众不同的是XDAG尝试通过从区块链技术底层的数据结构开始重新设计,并采用另外一种DAG构成方式,巧妙的将PoW共识算法和DAG技术相结合,并同时提供了不同节点之间交易并发处理方式,在确保的网络安全性和公平性的前提下提高TPS降低确认时间。
此图是XDAG中一个局部的DAG组成
A 表示钱包地址块,Tx表示交易块,M表示PoW产生的主块,W我将其命名为见证块。
在XDAG中一直有个特点,就是区块 = 交易 = 地址
在XDAG中区块的数据 结构如上图中所示,这个数据结构是用来持久化存储数据使用。
块结构通过16个名为xdag_field的结构组成,每个xdag_field都是一个结构体,其中由结构体和联合体组成。
transport_header在传输时用来表示序列号,在接收后处理时用来保存下一个块的地址。
type是一个64位的字段,用来表示一个块中16个field的类型,其中划分成16部分,每部分4bit,也就是半个字节,4位可以表示16种类型,因此type这个字段每4位表示一个field对应的类型。
time是用来表示块产生的时间,采用的格式是1/1024秒,一秒钟在其中表示为2^10。 同时在节点间数据交换时作为请求时间范围的起始时间点。
hash是一个24字节的截断哈希值,通常是另一个区块的截断哈希值。amount是以cheato为单位的数量值,用来记录XDAG数量,cheato是XDAG中的基本单位,1个XDAG包含有2^32个cheato。
end_time 用来表示节点间数据交换时作为请求时间范围的终止时间点。data 是32字节的哈希值。
在XDAG中以上描述的块是完全由每个节点、每个钱包自己独立生成,不会受其他干扰,从而在基础设计上保证了区块处理的独立性,也为后续提到的高TPS打下基础。
此图则展示了在构建DAG时XDAG采用内部块的方式来简化交易状态以及区块余额的处理逻辑。此内部块只在XDAG逻辑处理过程中才会使用到,并不会持久化存储。
这是一个最简单的XDAG转账处理结构。A表示地址,M表示主块,Tx1 记为A1地址向A2地址进行的一笔转账,W我将其命名为见证块。
一个典型的双花检测
假设A1地址有10个XDAG,A1的钱包被人恶意拷贝了两份,同时发起了两笔转账,一笔Tx1 从A1转了5个XDAG到A2地址,另外一笔Tx2从A1转了7个XDAG到A2地址。两笔转账合计12个XDAG,超出了A1地址原有的10个XDAG,是个典型双花。
在XDAG检测的逻辑是在节点同一时间收到Tx1和Tx2时,节点生成的W块会引用Tx1和Tx2,根据稳定的排序规则Tx2会在被W块引用时填充到了顺序编号更小的field中,从而Tx2优先被处理,而Tx1则后处理,从而检验出Tx1的花费是一次双花,从而在内部块中将这个哈希值指向的交易块标记为拒绝状态,而Tx1这个交易块永远记录在DAG中,不会删除。
一个更加复杂的双花检测
前提条件和上一个一样,假设A1地址有10个XDAG,A1的钱包被人恶意拷贝了两份,同时发起了两笔转账,一笔Tx1 从A1转了5个XDAG到A2地址,另外一笔Tx2从A1转了7个XDAG到A2地址。两笔转账合计12个XDAG,超出了A1地址原有的10个XDAG,是个典型双花。
但是这次情况有变化,那就是此人恶意采用技术手段将钱包连接到不同的节点上,因此就会产生不同节点之间的双花检测。
接收到Tx1交易的节点此时并不知道Tx2交易的存在,而接收到Tx2交易的节点同样不知道Tx1交易的存在,因此这种情况下就需要节点之间的数据交互才能检测。
此时PoW共识就产生作用,在XDAG中每隔64秒即产生一个主块,通过主块M1’ M1’’比较难度,确定出M1’’的难度更高,因此M1’’引用的块Tx2在排序时优先于M1’引用的Tx1,如此检测出Tx1为双花,从而在内部块中将这个哈希值指向的交易块标记为拒绝状态,而Tx1这个交易块永远记录在DAG中,不会删除。
如图是XDAG更全面的DAG结构,其中为了简单起见将前面几张图里的钱包地址块省略展示。
Node表示不同的节点,M 表示PoW挖到的主块,W标示额外的块,我将其命名为见证块。Tx是交易块。
不同节点分别接收各自的交易块,将交易块拼接到DAG中的行为相互之间耦合度较低,通过节点间的数据交互建立之间的联系,从而能够让不同节点很好地吸收较高的并发来达到高TPS。
同时每64秒通过PoW产生一个主块,让去中心化公链的交易确认时间也大大缩短,一般在1到2分钟即可被确认。
3.XDAG未来
XDAG未来的方向不仅仅是做一个高TPS的去中心化公链,同时也计划带来交易的匿名性和智能合约,让XDAG具有支付属性以外具有更广阔的应用场景。
目前社区开发计划中的Android钱包和iOS钱包已经发布测试版本,在收集社区的反馈,并及时提供更新版本。
轻钱包和全节点钱包还在计划之中。Golang版本实现已经着手进行基础开发,C++版本也在进行相关基础开发。Python版本用于教学和入门XDAG开发,目前已经有了Python的矿机实现。
当前XDAG社区需要更多贡献者加入,分享传播XDAG相关知识、和社区一起讨论各种提议、向社区报告问题、帮助社区做本地化翻译、直接参与XDAG项目开发贡献代码!
感谢所有的曾经帮助过和现在正在帮助XDAG的开发者们,他们有Daniel, Evgeniy, Frozen, sgaragaghu, trueserve, amazingMan2017, ssyijiu, Solar, Wendy, czslience, rubencm, kbs1,还有所有的矿工、矿池主和所有其他的贡献者们!
问答&交流
Y:这个见证块能否细说说,它既不是交易也不是地址吧?
Frozen:见证块是由节点生成的,当节点有收到新的块时,这个块并没有连接到DAG中,而是通过节点生成的见证块,将接收到的新块加入到DAG中。
Y:看起来xdag里面的排序规则对于确定双花交易特别重要,里面的排序规则有哪些?
Frozen:排序规则就比较复杂了。。 可能单独得需要一个时间来分享,排序对于所有区块链项目都很重要。如果无法排序,那么就无法确认交易,也无法实现智能合约。
Y:如何确认主块?会不会存在算力更高的矿工作恶的情况?
Frozen:主块由节点生成,而不是由矿工生成,矿工在确保网络安全,而节点根据矿工计算得到的hash来生成主块,不同节点之间的主块分别生成。主块在确认过程根据主块包含的hash难度进行比较,难度高者即获胜。
Y:节点在系统里负责打包交易?有没有作恶的可能?或者说系统里如果有作恶者,会出现在哪个环节?
Frozen:不打包交易, 节点不参与打包交易,交易块由钱包拥有者打包 所以节点无法对交易造假,只能选择拒绝和接受。
R:目前xdag的生态发展怎么样?多少矿工,多少用户?主要应用有哪些?
Frozen:目前统计的钱包地址八万左右,矿工最近没有统计数据。目前XDAG还没有开发出智能合约,还只是一个tps更高的去中心加密货币。
R:目前智能合约的开发进度有时间表吗?目前智能合约的开发进度有时间表吗?
Frozen:2019Q3发布,XDAG是个社区驱动项目,没有项目方 没有ICO 没有预挖 所有开发者都是业余时间开发。
往期精彩
比特币矿业:这是我的黄金时代
又一个FT来袭?f3d横空出世,p3d乘风而起
7天暴涨30%,推动此轮BTC暴涨的ETF,到底是何方神圣?