区块链技术起源于比特币,后来又衍生出了DAG技术流派,比如ByteBall项目。但若仔细审视比特币的链式账本,其实可以发现,比特币的链式账本结构本质上也是DAG(有向无环图)结构。
Bitcoin账本的链式结构
区块与区块之间通过哈希值链接起来,区块内部的交易通过梅克尔树的形式组织起来,并反应到区块头部的Root Hash,如下图所示(注意链接箭头的指向为「原像数据-->哈希值」):

链式结构简化变形
若将区块头部抽象为一个顶点,交易也抽象为一个顶点,那么图1可简化为下面的样子,这时候就能更明显地看出,多个倒挂树结构串接在一起,而树结构就是一种特殊的DAG。

UTXO型交易结构
Bitcoin的交易属于UTXO型,每个交易可以有多个输入与多个输出:

不同的交易之间通过输入输出链接在一起(Transaction简写为Tx),如图4,TxC的两个资金输入来源于TxA和TxB的输出,TxD的三个资金输入源也来自于TxA和TxB的输出,TxA还剩余一个输出没有被其他交易花掉,也就是所谓的UTXO,而TxB的输出全部被花掉了:

交易引用关系
既然TxC和TxD花费了TxA和TxB的UTXO输出,那么可以认为,TxC和TxD 引用了(同时也确认了) TxA和TxB,所以可以得出交易引用关系图:

Bitcoin账本的DAG结构
若将图2中的「原像数据-->哈希值」的箭头方向反转为「哈希值-->原像数据」,将哈希值看成是对原像数据的指针或引用,并结合交易与交易之间的引用关系,就可以得到图6。

从表示区块头与交易之间的引用关系角度看,Merkle Tree的中间层哈希值不重要,可以忽略掉,进一步简化为图7。这时可以明显看出,后续的区块引用了前面的区块,后续的交易也引用了前面的交易。而在典型的DAG技术项目(比如ByteBall)中,引用了某个数据对象,也就意味着确认了这个数据对象:


若将图7中的「Block#7<--Block#8<--Block#9」视为账本的「主干链(MainChain)」,和ByteBall的账本结构图及其主干链做一下对比,两者的拓扑结构还有什么区别呢? Bitcoin在设计上的先见与精巧,可见一斑。
所以说在比特币之后出现的大量项目,包括以太坊,EOS,DAG技术流派,虽然取得了不少新发现和新成果,但都是继承和发扬了Bitcoin的设计思想,严格来说它们都属于局部创新或单点突破。这也从侧面反应了中本聪作为区块链技术开创者的伟大。
网友评论