免责声明:金色财经所有资讯仅代表作者个人观点,不构成任何投资理财建议。请确保访问网址为(jinse.cn) 举报

    用可替代区块链的DAG实现智能合约 区别意义何在

    简介

    DAG(有向无环图)是一种非线性数据结构,可以替代区块链,用户分布式账本的存储。这种结构在并发的场景下有更好的性能表现,但在实际应用中会面临更多的技术挑战。其中,最大的挑战在于,基于DAG结构实现智能合约,要比基于区块链结构困难得多。今天跟大家一起讨论DAG和区块链这两种账本结构,在加密货币和智能合约两个场景下的不同,以及如何基于DAG来实现智能合约。

    加密货币的基本概念

    首先,我们先从最简单的场景出发——加密货币。加密货币是一个分布式数据库,存储了每个账户的余额信息。在加密货币网络上运行着很多台计算机,这些计算机称为节点。每一个节点都会存储一份关于账户余额的数据,这份数据通常被称为“状态”。

     

    与传统的中心化银行系统不同,这种分布式账本要求所有节点对状态达成某种共识。或者说,对任意一个账户来说,要求这个网络上每台计算机所存储的余额都是一致的。由于状态的数据量比较大,在网络上传输全部数据非常困难,因此,在这种系统中,往往只传输那些能够引起状态变化的事件,也就是“交易”(Transaction)。想想看,你的钱不会无缘无故的增加或减少,只有在别人向你付款,或者你向别人付款的时候,账户余额才会发生变化。因此,只要知道一个账户所有历史转账(Transfer)记录,就可以很容易计算出当前的余额。

     

    在加密货币系统中,所有发生过的转账交易,都记录在一个被称为账本(Ledger)的数据结构中。这种账本通过密码学的方式进行了某种加密,使得每一个节点都可以验证自己获取的账本数据是不是被篡改过。

    区块链和DAG

    区块链是一种经典的账本结构,广泛应用于比特币、以太坊等去中心化系统,它将一组交易打包成区块,通过哈希引用将区块组织成一个链式结构。

     

    而DAG是在区块链的基础上扩展出来的另外一种账本结构。在DAG账本中,一个区块通常只包含一个交易,它们彼此之间通过哈希引用,构成一种有向图结构,并且保证图中不存在环路。DAG账本有很多不同的变体。例如,任意一个交易均引用两个其他交易作为其前驱节点,所构成的 DAG 被称为“Tangle”,应用于 IOTA 等项目;在另外一种 DAG 结构中,交易被组织成若干条链,并通过一些成对的交易彼此链接,这种 DAG 被称为“Block Lattice”,应用于 Nano、Vite 等项目。

     

    大部分人没有意识到,事实上,区块链结构也是DAG 的一个特例。

    640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

    基于DAG的加密货币

    我们来看看,在 DAG 账本中,虽然一些交易之间的顺序从账本中已经获取不到了,但这些顺序并不影响节点计算状态。因为加密货币中的状态计算,都是对余额的加减运算,这些运算是满足交换律的,只要保证任何账户的余额不小于 0,交易的先后是无所谓的。因此,无论如何遍历 DAG 账本,最终计算的账户余额数据都一样,也就是说,任何节点都可以通过 DAG 账本来恢复正确的状态。

    640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

    基于DAG的智能合约

    谈完了加密货币,我们再来看看智能合约。在现实世界中,很多应用场景不像加密货币那样只记录一个余额就足够了。例如飞机票预定应用,在状态中需要记录一个航班上每一个座位的归属。这个时候,交易也不再仅仅表示转账了,可能包含任何对智能合约的请求数据,例如一张机票的预订请求。这个时候,改变两个交易的先后顺序,就有可能产生不同的状态。想想看,如果 Alice 和 Bob 都尝试去预订同一班飞机上的同一个座位,那么这个座位将归属于先预订的那个人。在智能合约的场景下,好运气终结了,交易之间不再完全满足交换律了。这就迫使我们不得不去认真对待账本中每个交易之间的顺序。

    640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

    那么,到底哪些交易是必须进行排序的,而哪些交易不用关注顺序呢?最理想的情况是,写一个函数,可以根据系统中部署的智能合约逻辑,判断任何两个交易顺序是否会影响最终状态。假如有这样的函数存在,我们就可以在构造 DAG 账本时,知道哪些交易之间必须建立一个哈希引用。或者通俗的说,在表示 DAG 账本的图中,明确的知道哪些圆圈之间必须加一个箭头连接起来。遗憾的是,这个的函数的计算量非常大,无法用于现实的系统。所以我们只能放弃这种“完美”的方案,采用另一种更为简单粗暴的方法。

     

    基于这样的账本结构,你会发现,无论以什么样的顺序遍历 DAG 账本,只要遵循账本中记录的交易顺序,总可以计算出同样的世界状态。这也是 Vite 项目选择这种结构作为账本的原因。而采用 Tangle 结构实现智能合约,就必须引入另外一套排序规则。这在逻辑上相当于在原来 DAG 结构之外,针对同一组交易,另外建立一个不同的 DAG 结构,专门服务于智能合约,增加了工程实现上的难度。

    jinse.cn 0
    好文章,需要你的鼓励
    jinse.cn 0
    好文章,需要你的鼓励
    参与评论
    0/140
    提交评论
    文章作者: / 责任编辑:

    声明:本文由入驻金色财经的作者撰写,观点仅代表作者本人,绝不代表金色财经赞同其观点或证实其描述。

    提示:投资有风险,入市须谨慎。本资讯不作为投资理财建议。

    金色财经 > 瞎扯 > 用可替代区块链的DAG实现智能合约 区别意义何在
    • 寻求报道
    • 金色财经中国版App下载
      金色财经APP
      iOS & Android
    • 加入社群
      Telegram
    • 意见反馈
    • 返回顶部
    • 返回底部