在本系列博文的前两部分,我们讨论了关于DLT的基本事实,并介绍了使用现实世界中的信任作为Sybil攻击保护机制的想法。
在这一部分,我们将从技术角度出发,讨论IOTA的关键创新之一–四重记账法(quadruple entry accounting,以前被称为基于平行现实的账本状态)–它构成了IOTA独特账本的基础。
记账的历史
为了理解这种记账形式背后的设计决策,我们将按时间顺序讨论人类历史上使用的不同的记账形式。
单式记账法
记帐的历史始于数万年前的早期美索不达米亚。阅读、书写和数学方面的进步催生了第一个记账系统–单式记帐法。
这是一种非常简单的分类账,大多数人都很熟悉,它通常由3栏的条目清单组成。余额的增加通常以黑色显示,减少则以红色显示(带括号)。
这种账簿非常容易理解,我们今天仍然在使用这种会计形式(例如,用于小企业或记录家庭的开支)。
它最大的问题是很难审计或生成报告。想象一下,试图回答这样的问题。”花了多少钱在租金上?”。
回答这个问题的唯一方法是翻阅账簿中的每一条记录,如果它们符合某个类别,就把相应的数值加起来(这是一个非常低效和令人厌烦的过程–特别是对大型账簿而言)。
复式记账
随着社会变得越来越复杂,人类所从事的经济活动也变得越来越复杂,于是出现了对不同的、更有效的记账系统的需求。
1494年,一位名叫Luca Pacioli的意大利僧侣发布了一份手稿,他在其中描述了一种新的会计形式–复式记账法。
它的工作原理与单项会计非常相似,但它不是只维护一个代表实体现金持有量的单一账户,而是维护几个不同的账户,这些账户根据其主题和/或属于某个身份而分开。
注:与一个经济实体有关的账目集合被称为账本,维护这些账目的行为被称为记账。
每当我们在我们的现金科目中建立一个分录时,我们也会在另一个科目中建立一个相应的但相反的分录。毕竟,我们的现金科目的每一次增加都对应着别人的现金科目的减少(反之亦然)。
看一下不同的科目,就很容易回答关于一个组织的运营状况的各种问题,也更容易审计譬如报告的税号的有效性(因为不同组织的账目需要有匹配的数字)等。
这极大地提高了透明度,减少了欺诈和腐败,使更大的经济行为体得以出现。
三重记账法
虽然复式记账法提高了经济行为人的可审计性,但每个人仍然保持着自己独立的账簿,审计它们是一个手工和令人厌烦的过程,往往容易出现错误和失误。
分布式账本技术现在引入了第三个条目–交易(在之前的图片中显示为虚线),并在公开的和防篡改的账本上一直保留。它包含了如何修改账本状态的指令。参加去中心化账本的节点同意同一个起始状态(创世状态),然后简单地应用相同的交易来得出相同的结果。
在人类历史上,我们第一次能够有一个完全开放和安全的方式来集体维护一个共享的账本,从而产生了电子现金和可编程货币。
虽然三重记账法的想法是受到复式记账法的启发,复式记账法中的每笔交易都修改双方(发送方和接收方)的余额,但它使用了一个略有不同的术语,旨在概括前面讨论的概念。
账本不再追踪与不同科目相关的余额(这只是为了让人类更容易阅读账本而必须的),而是单独追踪余额。每当一个余额被某项交易花掉时,它就被标记为“已花掉”,而新的余额则是相应交易的结果。
余额只能被全部花掉,每笔交易都必须根据某个智能合约创造新的余额(例如,创造与消耗的资金数量完全相同)。因此,交易可以被视为小程序,使用现有余额作为输入,创造新的余额作为输出。
一种方法是将其建模为一个DAG,其中交易是连接所有曾经存在过的输出的边。
花费一个输出的能力通常与某些条件相关联(例如,证明对加密地址的私钥的访问权限),在这个DAG顶端的一组未花费的输出被认为是当前的账本状态。
这个模型被称为UTXO(未花费的交易输出)模型,它代表了中本聪的关键创新之一。
UTXO模型中的全局排序
这种形式的账本状态的一个迷人之处在于,它不依赖于事件的全局排序来验证交易,应用相同的交易将导致完全相同的账本状态,无论交易以何种顺序到达。
即使节点看到依赖的事务是完全乱序,它们也只需耐心等待,直到每个事务的所有输入都被获悉后,它们仍然能够到达相同的账本状态。
我们把输入是已知的交易称为已固化的(solid),把等待缺失信息的过程称为固化(solidification)。
人们可能会问自己,如果区块链的底层账本不依赖全局排序,为什么还要进行全局排序,原因非常简单:
UTXO模型没有任何有效的方法来处理双重消费(双花)。如果双重消费被添加到账簿中,那么总的供应量就会增加,从而产生不想看到的通货膨胀等问题。
唯一已知的处理这个问题的方法是建立一个共享的时间认知,让验证者同意,哪些交易应该被添加到账本状态。
比特币的最长链获胜的共识,本质上是对时间认知的投票机制–一个去中心化的时钟–许多专家经常声称这是DLT的最大成就。
四重记账法
从我们之前在本系列博文第二部分的讨论中得知,建立全局排序的唯一方法是使网络同步化(通过人为地放慢速度),或者将验证者的数量限制在一个小群体中。
考虑到当代DLT中几乎所有的权衡都可以归结为这个非常基本的问题,我们想尝试以一种完全不同的方式来处理双花问题。
一种新形式的账本
我们不是要防止双花进入账本,而是要设计一种新的账本,它能识别双花,并能同时跟踪所有冲突的账本状态版本。
为此,我们将通过另一个维度来扩展UTXO模型(四重记账法),其中每笔交易和每项输出都与一个代表账本状态的特定版本的容器有关。我们称这个容器为分支。
在没有冲突的情况下,所有的交易和输出都是同一个账本状态版本的一部分,我们称之为主分支。每当发现交易有冲突时,它们就会产生一个新的分支,其中包含有冲突的交易本身和它直接或间接创建的所有输出。
使用相同输出的事务形成的分支是冲突集的一部分。由于事务可以花费多个输出,因此它们可以是多个冲突集的一部分。
分支中的输出可能会在另一段时间再次被双花,从而导致分支递归地形成子分支。每个分支都存储一个对父分支的引用,它从父分支分离出来,形成分支DAG,主分支位于根。每个分支递归地继承其祖先的账本状态。
如果分支本身或它们的任何祖先是同一冲突集的一部分,那么它们就是冲突的。
当预订(booking)不冲突的交易时,我们从被用作输入的输出中继承其相关的分支。如果交易花费了多个不冲突的分支的输出,那么它们的输出就会被预订到一个聚合分支中,作为潜在的冲突列表的占位符。
在这个数据结构之上,我们现在定义了一些规则,交易必须满足这些规则才能被视为有效。
- 交易需要创造与消耗完全相同的资金量。
- 交易永远不能花费来自冲突分支的产出。
- 交易可能永远不会花费过去已经被另一个交易花费的输出(参见示例)。
有了这3条规则,我们可以确保所有账本的状态版本将始终保持一致,保持正确的总供应量。
在通过我们的高级别的共识机制对冲突做出判定后,我们可以将获胜的分支合并回主分支,并裁减掉被共识拒绝的冲突分支。
这听起来可能非常复杂,但这是一种有效的方式,它可以存储所有不同的账本状态版本,而不必存储多余的信息。每个输出都只存储一次,存储1000个冲突的交易将花费我们几乎与存储1000个诚实的交易完全相同的资源(除了一些恒定大小的开销用记录于分支DAG中的额外条目)。
用几句话来总结一下新的概念:
- 分支允许我们区分不同版本的账本状态的输出。
- 冲突集对分支之间的冲突关系进行建模。
- 分支DAG允许我们跟踪不同分支之间的因果关系(账本状态的继承并检查冲突)。
启示
通过将账本变成一个数据结构,简单地跟踪其用户提出的所有(甚至是冲突的)状态转换,我们可以将冲突解决转移到一个更高的层次,而不是在每个冲突到来的时候商定其命运。
这使我们能够建立一个DLT,我们不再需要有特殊的实体来保护账本免受恶意的写入(如被区块链中的矿工)。任何人都可以直接免费写入账本,只需与网络的其他成员分享他的交易,每个人都可以完全独立地更新他们的账本状态。
所有看到相同信息的节点都能够构建完全相同的账本状态版本,这使得账本变成了一个无冲突的复制的数据类型,可以完全并行的更新,没有任何形式的协调或人为的减速。
结论
我们设计了一种新的账本形式,使我们能够将交易的处理和对现有冲突达成共识的行为脱钩。
这不仅带来了一个更加开放和民主的账本设计,不再需要保护写入账本行为的中间人,而且还消除了验证节点之间过于严格的协调需求,这将使我们能够使用中本聪的原则,而不必减慢验证者的报告过程,从而使达成共识的行为成为一个合作性的过程,而不是一个竞争性的过程。
过去几年的大部分工作是设计和概念化这种账本的形式。现在的设计听起来非常简单和优雅,但过程并不简单,因为我们并不知道最好的设计应该是什么样的。经过几次迭代之后,我们现在非常自信,再也不可能进一步简化这些原则了。
这种形式的账本所证明的是,没有必要建立一个全局的事件顺序来处理冲突。
当代DLT依赖全局排序的唯一原因是他们使用的数据结构无法辨识冲突。
附录:与我们的物理世界的相似性
如果我们看一下这个账本的行为,那么我们会看到与我们的物理宇宙有很多相似之处,即使它与DLT的主题没有直接联系,但我依然认为这可能是一个有趣的讨论话题。
时间的相对性
时间是一个词,我们用来描述一个系统的一系列可感知的状态变化。当前的状态是现在,以前的状态是过去,即将到来的状态是未来。
同样的定义也适用于在我们的模型中节点如何感知他们的账本状态的发展,与我们的宇宙相似–节点对时间有相对论的感知。
因果性
物理学中最重要的概念之一是因果关系不能被违反,这意味着即使时间是以相对性的方式被感知的,每个人总是会感知到因在果之前。
这相当于我们的固化概念,一个具有依赖性的交易在被处理之前要等待其输入的产生。
薛定谔的猫
薛定谔的猫是一个思想实验,它说明了量子叠加的一个悖论,即一只假想的猫在盒子里可以被认为是同时活着和死亡,直到进行测量并打开盒子。在那一刻,叠加效应瞬间坍缩为一个单一的特定版本。
这与我们的模型非常相似,两个冲突的版本可以共存一段时间,但当我们进行权衡并收集投票的时候,这两个选项就会通过将一个获胜的版本合并到主分支中而瞬间解决。
双缝实验
大多数人都熟悉双缝实验,将一束光照过两个平行的狭缝,会在后面的屏幕上产生一个干涉图案。这通常是最简单的实验之一,表明光的行为像波一样,与障碍物发生干涉。
如果我们进行测量以确定每个光子通过哪条狭缝,我们就不再看到干涉图案,因为光子的波函数崩溃了,它表现得像一个普通的粒子。然而,这个实验真正有趣的地方在于,如果我们在粒子已经通过狭缝之后再进行测量,情况也是如此。
在未来进行测量似乎会以某种方式影响同一粒子在过去的状态。对这一观察有不同的解释,但如果我们假设宇宙跟踪它的状态至少与我们在账本中跟踪事物的方式相似,那么这一行为就很容易解释。
在未来的某个时间点进行测量并确认于账本的一个特定分支,也意味着我们确认该分支的所有父分支,因为每个版本需要始终保持因果一致–所以,是的,决定一个子分支意味着我们也将对其所有的父分支做出决定,这确实影响了过去。
延迟选择的量子擦除器
延迟选择的量子擦除器实验是对之前命名的实验的修改,它修改了设置,首先测量光子,然后在以后的时间点再次删除测量信息。
有趣的是,在这种情况下,光子又开始像波一样运动,它以某种方式恢复了之前崩溃的波函数,回到原来的状态。正如物理学家卡尔·冯·Weizsäcker(他曾与量子先驱维尔纳·海森堡密切合作)在1941年所说的那样,似乎并不是测量的物理行为起了作用,而是注意的行为。
同样,我们的账本工作也非常类似。如果我们删除对某一特定版本的投票,转而对不同的版本投票,那么账本状态将执行我们称之为重新组织的东西,而之前看起来已经决定的版本可以回到它的未决定状态。
删除关于已执行度量的信息的行为可以被认为是类似于拜占庭行为的行为。
结论
看到所有这些相似之处使我相信,也许这种跟踪账本的方式至少与宇宙跟踪其状态的方式相似,而我第一次公开说明这一点是在2020年4月4日接受德国YouTuber采访时。
对Stephan Wolfram的想法感兴趣的人一定要看看他的工作!
原文链接:https://husqy.medium.com/the-trust-machine-part3-quadruple-entry-accounting-6da022f5e832
本文原文非中文版本,由BruceX进行翻译,如若转载,请注明出处:https://www.iota.love/202108/the-trust-machine-part3-quadruple-entry-accounting/