【翻译】永生链白皮书
标签: 区块链
一种无中心、去信任、纯函数式神谕机。
- Zackary Hess
zack@aeternity.com - Yanislav Malahov
yani@aeternity.com - jack Pettersson
jack@aeternity.com
- 删除线的部分是原文中被删掉的部分;
- 方括号中我翻译的时候加上去的;
- 写“译者注”的引用模块也是我加上去的……
- 应用部分只保留标题,略去正文。
概述
自从2014年以太坊问世以来,人们已经把极大的兴趣投入到基于其上的去中心与去信任应用(即智能合约)上了。结果,很多人尝试在区块链上建立基于真实世界数据的应用。我们有理由相信,在链上储存应用的状态和代码是相当错误的。
区块链的架构是可拓展的、可控的和可编程的。状态通道允许高拓展、去信任的价值交易,以及纯函数式的、易验证且图灵完备的智能合约。资源利用率共识机制与价值持有者的利益正相关,而内建的“神谕机制”则允许从区块链访问到真实世界数据,从而能拓展智能合约。因此,有效建立全球范围的预言市场(对应神谕机制)和综合资产市场这类应用是理论上可行的。因此,这种基于“未来独裁(futarchy)”的管控体系将带来一场革命。
我们提供一个高可拓展的区块链架构,使用一种验证“神谕”的共识机制。这让神谕机变得极高效,因为它避免了两个共识交叉在一起【注:即建立有效可靠的共识,避免矛盾分岔】。状态通道被集成在一起以增强隐私性与可拓展性【注:因此这种集成在一起的状态通道应该构成一种多链甚至哈希图,或者是基于区块链的多侧链网,而不是传统的单一区块链,类似雷电网络】。代币(token。在币界token为代币,在链界则为通证)通过可以访问神谕机结果的纯函数式智能合约在各通道中进行交易与转让。但只有在发生冲突的时候,交易才会被提交到链上。链上并不直接保存合约代码或者合约的在链状态【注:应该就是合约代码与状态并不分布式地保存在区块链上】,这使得智能合约更便于解析,执行起来也能更快,因此从实用上说性能不会有过大的损失。
类似综合资产与预言市场这样的应用很容易就可以在全球范围内实现。我们用Erlang编写了PoC共识机制(proof of concept,概念证明)的许多部分。开发工具和应用核心比如钱包、域名、身份验证系统也会给出。
I. 简介
本文旨在给出永生链的整体架构,以及基于它的应用的可能性。更多的细节论文会在未来给出,尤其是共识机制与管控系统的细节。然而,必须指出我们的架构是完备的、全面的,每个组成部分都被模块化地整合在一起。
下面我们将分为四大部分。第一部分,我们将介绍并讨论我们这套结构的基础理论体系。第二部分,我们会讨论一些核心应用,以及一些可能的拓展,并给开发者一些灵感。第三部分,我们将提供现在已有的一些用Erlang实现的PoC。最后,我们会总结一下相关的讨论,包括未来可能的发展方向,以及与其它同类型技术的对比。
A. 前导工作
首先,区块链和比特币为我们呈现了一种全新的在互联网上构建价值体系的方式[1]。随之而来的,是一系列激动人心的进站:以太坊展示了一种编写以区块链为安全保障的、图灵完备的智能合约的方法[2];真理币(TruthCoin)创造了一种在区块链上构造神谕机(Oracle)的工具[3],群体灵知(GroupGnosis)和预兆(Augur)则将这一工作变得更高效[4];Casey Detrio给出了在区块链上建立市场的方法[5];域名币(NameCoin)则提供了一种建立域名解析服务等价分布式服务的方案[6];公证通(Factom)则提供了一种在区块链上存储能证明任意电子数据存在性的通证(token)的服务[7]。
这些技术进步为优质金融与合法业务的开展提供了强有力的技术承诺,但至今为止,这些功能没能被统合起来,以提供许诺的服务。尤其,所有这些技术方案都缺少以下关键功能的至少一项:统筹、可拓展、编程安全,以及链接真实世界数据的便捷通道。永生链旨在在各方面都优化现有技术。
II. 永生链
我们相信如果没有可拓展性、编程安全与连接真实数据的便捷通道,是现在“智能合约平台”难以落地的三个核心瓶颈。首先,目前主流的带状态设计使得为平台所写的智能合约难以被解析[8],同时与序列化的交易绑定在一起的合约状态又让拓展变得及其复杂。其次,将现实世界的数据通过一个无中心、去信任且可靠的渠道引入到区块链系统中的代价是高昂的,也让一些看起来有前景的项目的落地变得复杂多变困难重重甚至根本不可能。最后,平台本身的能力也限制了它们根据新的结束或者经济知识而进行自我更新。我们相信,上述三个问题都可以有清晰的解决方案。
首先,最近关于状态通道技术的研究,对很多实际用例来说,链上保存状态是非必须的。在绝大多数情况下,我们只需要在状态通道中保存所有信息,而在区块链上保存交易结果,并在发生冲突的时候做为回滚依据。因此,我们需要需改区块链的架构,将智能合约运行在状态通道而非区块链上。这样,所有的交易都独立于链发生,从而可以并行处理,从而增加网络的可拓展性【注:这不就是雷电网络的想法么?作为类比,雷电网络将通证交易限制在雷电网络上,而在区块链上只保留雷电网络的最终交易结果】。同时,这也意味着所有智能合约都不用写到共享状态中,极大地简化了测试与验证流程。我们相信这个设计可以让区块链更专注于金融逻辑而不是数据储存,我们可以用其它分布式数据储存方案来补完区块链的不足【注:比区块链更优的分布式数据储存方案其实有很多】。
其次,诸如预兆(Augur)这类应用试图将现实世界的数据通过一种去中心的方式转移到链上,具体而言是建立一种内置了特定共识机制的智能合约,而不是使用底层区块链上的共识机制[9]。这导致了效率的降低,却并没有提高安全性。更自然的做法是拓展区块链的共识机制,从而不单单能为下一个内部状态提供信息,更能为外部世界的状态提供信息。如此一来,区块链的共识机制完全决定了神谕机上复杂理论的运行结果【注:即为神谕机充当了神谕黑盒】,这里神谕机是一类理论上比图灵机更强大的抽象机器,可以解决一些无法计算的问题,比如“那场足球赛到底谁赢了”。【注:感觉这段很扯淡。计算理论中的神谕机是加装了名为“神谕”的黑盒的图灵机,其算力有黑盒的算力决定。因此是否能回答某类问题,完全看“神谕”黑盒的算力而定,并不是一提神谕机就仿佛万能的。且从上文来看,这里神谕黑盒就是共识机制,这货本身依然是图灵机的,所以这里说超越图灵机感觉非常扯淡啊。】
最后,共识机制现在可以很自然地为全系统提供确定参数的机制。这为接受可变的外部条件和引入新研究成果与最近技术发展提供了渠道。
译者注:上述三个改进方案,除了第一个看上去比较靠谱(而且基本就是雷电网络的智能合约版本),后面两个很有喊口号的意思。因为有了神谕机,所以就可以很牛逼;因为共识机制可以为状态通道提供共识,所以就有了可拓展性,这样的话除了口号,什么都不是。还是要看具体怎么落地实现。
本章剩余部分将介绍永生链的一些伟大的细节,从简述账号、通证、域名以及区块的结构开始。以我们最近所实现的状态通道和智能合约为例,讨论如何用区块链的共识机制来构建高效的神谕机与统筹系统。最后,我们会从一些不同的角度来讨论可拓展性。
A. 通证、账号和区块
虽然从智能合约开发者的角度来看是“无状态”的,但永生链确实记录了一些预定义的状态组件。作为区块的一部分,我们下面会对此作出解释。为了简化论述,这一节我们假定每个节点都记录了完整的区块链【注:但这在比特币甚至以太坊里都是不现实的假定。全数据节点要150G甚至更大的比特币要求每个节点都是全数据节点,这和现实情况相差太大】。可能的优化方案在可拓展性一节中会进一步介绍。
A.1) 永生通证
译者注:这个取名有点中二啊……
使用区块链不是免费的,这需要消耗使用者手上的被称为“永世(Aeon)”的通证(也即代币)。永世通证被用于支付在平台上使用者的任何一种资源消耗,从而称为平台上金融应用搞得基础。【注:作者是不是无法区分经济和金融?】
创世区块中的永世通证的数量由以太坊上运行的智能合约确定【注:所以是基于以太坊的二次代币系统】,此后的永世通证则通过挖矿获得。更多的永世通证以共识机制为基础获得,通证持有者通过一定量的工作量证明(POW)来投票决定一次发行【注:挖矿】/交易是否有效,而这POW的工作量成本可由共识机制来动态更新。我们也可以讨论是否使用已被销毁的通证来支付旷工的奖励,这个方法可以保护通货稳定。
所有系统中的花销用永世通证支付,所有的智能合约也用永世通证进行结算。
译者注:总结来说,这块和比特币是几乎相同的,没看到什么创新啊……
另,从下面来看,应该最后采用的是POS或者POC这类共识算法,但这里看来却还是POW算法,不知道是不是技术更替后白皮书没有更新……
A.2) 账号系统
每个账号都有一个地址,一个永生通证的收支账簿,一个随着每一笔交易而改变的随机数【注:由所有交易记录决定的数字指纹】,以及每个区块的高度【注:高度即到创世区块的距离】。同时,每个账号都会缴纳一小笔费用,与该账号存在的时间相关,这是为了能避免垃圾账号、账号滥用以及状态臃肿。删除无效账号【注:账号中通证用光则被删除】将激励空间的回收【注:这种空间回收相比高频交易所占据的区块空间来说当真是九牛一毛啊……】。
这里的设计有两个特点:账号会一直被扣钱,以及账号一旦没有钱就被销毁。这个是相对比特币等的特色,从经济学角度来看是鼓励用户挖矿的,但对消费可能会有一定的抑制,会导致储蓄型账号的增加。
A.3) 域名系统
许多区块链系统都饱受其上用户的不可读地址之苦。永生链继承了Aaron Swartz的工作和域名币的思路,提供了一种去中心且安全的,同时也支持人性化方式的域名系统[10]。区块链上的状态中包含了一组映射,给出了唯一的人性化的指向到固定长度数组【注:应该就是哈希了】的Merkle树根节点的字符串。这些域名可以用来指向到任何东西,比如永生链上的地址,或者某棵Merkle树的哈希。
译者注:给人的感觉就是在传统区块链上增加了一个短地址系统,然后它还是跑在区块链上不担心区块链膨胀过快么?
A.4) 区块内容
每个区块的内容都由以下这些部分组成:
- 前一个区块的哈希
- 交易Merkle树【注:即UTXO账簿构成的Merkle树】
- 账号Merkle树
- 域名Merkle树
- 公共通道Merkle树
- 尚未给出回答的神谕机的Merkle树
- 神谕机回答的Merkle树
- 上述Merkle树校验的Merkle树
共识投票的Merkle树- 当前随机数生成器的熵【注:就是挖矿难度,随机数加上各种哈希后的哈希要小于的临界值】
上一个区块的哈希可以验证当前区块的有效性从而构成一根链。交易树包含了当前区块上的所有交易。除了共识投票树,别的所有树都要进行共识校验:如果某一棵树在从一个区块传递到另一个区块的时候发生改变,那么这个改变就必须以交易的形式写入交易树,从而验证树也要跟着一起改变。别的树的作用下文会说。
我们可能会去掉共识投票树,如果我们采用预言市场作为共识而非POW的话。
将所有投票都记录链上是相当低效的。相反,获得记账权的节点可以将投票树的根节点和任意一批采样投票作为交易记录下来。虽然这样导致根节点看上去是任意的,但要通过验证依然只能使用正确的值。事实上,大部分节点可能会更倾向于只保留投票树根节点的哈希,因为这样在统计上已经足够相信大多数节点的最近交易了。
译者注:多Merkle树构成一根链,勉强能算是一个相对比特币的改进吧。
B. 状态通道
区块链空间的一个最有趣的发展就是状态通道。它的运行基于一个原则:绝大多数情况下,只有交易的参与方才需要了解交易的详情。交易方会再区块链上记录下一些状态,比如以太坊的合约状态【注:智能合约需要使用一个签名通证来进行合约状态变更】,或者比特币的多重签名(Multisig)。随后,他们相互之间传递这个签名了的更新记录。关键点是,这个过程中任何一方都可以使用这个签名来更新区块链上的状态,但大多数情况下并没有人会这么做。这允许交易参与者在链上快速传递信息并多方拥有合约,而不需要等交易入块。【注:这个设计是雷电网络底层的快速哈希交易协议。】
永生链中,唯一需要入链的状态更新就是永生通证的交易,且这个永生通证被所有参与交易的节点在状态通道中确认完成交易。由于交易本身在链外平行运行,从而速度可以非常快。
区块链只用于记录最终交易结果以避免出现冲突,可以被粗略地视为一套仲裁系统。然而,因为区块链的行为是可预计的,因此对状态通道中结果的争议是没有任何好处的,恶意节点也会被正确节点所阻止【注:这是区块链的特性,除非51%攻击】。这些特性结合在一起,我们就可以提升系统的交易速度和交易量好几个数量级,同时保证隐私性。
译者注:使用雷电网络的底层协议,这个也算不上什么突破。估计最后还是会走上雷电网络中心化的老路。
B.1) 智能合约
虽然唯一能被在链保存的状态只有永生通证的交易,永生链上依然具有可以运行智能合约的虚拟机。永生链上的合同是一种严格根据某种规则自动分配资产的协议,与实体合同形成鲜明对比。另外两个更显著的区别,其中一个就是默认情况下只有合约参与方才会知道给定的合约,另一个是只有开放状态通道里的参与方才能创建合法的合约。如果合约参与方都同意合约,他们便会在其上签名并保存副本以备未来的验证。只有当合约存在争议的时候,才会将合约提交到区块链进行裁决。合约的代码作为交易的一部分被储存,而不会被保存在其它状态中。如果这种情况真的发生,区块链便会自动根据合约分配通证并关闭通道。
通道内的合约参与方签署合约时候,他们处于对立的立场。
<center>
图例1:一个简单的智能合约,标记了关于黄金的赌约。使用了类似Forth的语言Chalang。</center>
上图是一个简单的例子,一个非常简单的合约,编码了一条关于某时黄金价格的赌约。第一行标记了“黄金”这个宏的神谕机识别码,如果在2016年12月1日之前金价降到38美元每克以下,则神谕机返回true。第二到四行是合约的正文:我们先将神谕“黄金”加到堆上,并声明使用神谕机oracle,它会将神谕的结果放在堆的最上面。我们使用该结果进行条件分支:如果神谕机返回true,则将0和1000放到堆上,代表没有销毁永生通证,将1000永生通证提交给合约的甲方;如果返回false,则将0和0放到堆上,代表没有销毁永生通证,合约甲方不获得任何永生通证。无论哪种情况,合约中除了给甲方的通证,别的通证被其余缔约方获得【注:吐个槽,从语义角度来说,这个合约所使用的语言的语义真是糟糕……】。最后一行的0,是这份合约所处通道状态的数据指纹。在实际情况中,这个数据指纹会有系统生成。
有一点很重要,就是永生链上的智能合约并不保持任何状态,状态由交易参与方保存,并在执行时作为输入条件提交。【注:由于上链只有在合约结果有歧义的时候才会发生,对于进入合约之前的这些状态,是否也会上链?从这里来看是不会上链的。那么如何保证这些状态量的合理有效安全?靠每个节点自身么?】每一份合约都必须是一个由输入到输出的纯函数[11]。在软件开发中,使用纯函数的好处是足够通用,在金融应用中就更突出了,已经被大量使用在学术和工业的形式合约中。
译者注:将赌注压在合约上是不切实际的。不存在一种可以将一切行为都规范下来的合约,这也就意味着任何合约都必然存在漏洞和未覆盖到的情况。而形式合约所要求的纯函数特性则更加理想化,严重依赖于对输入条件和输出结果的形式化表达(倒未必是数值化表达)。换言之,作为连接现实世界与区块链的桥梁,完美的神谕机在理想国度是可以存在的,但在真实世界是必然不存在的。
因此,永生链及各种将现实世界引入到区块链(或者基于区块链的状态通道)的方案,都不可能真正保证现实世界被无偏差地映射到区块链上。这种保证只存在于理论中,和中国足球理论上能获得世界杯是一个意思。
a) 合约交互和多步骤合约
<center>
图例2:一个简单的哈希锁</center>
即便所有智能合约都是无状态的、独立运行的,合约交互与带状态过程依然可以在哈希锁中出现。一个简单的哈希锁就如上图所示,第一行标记了一个函数名为hashlock,要求堆上要包含一个哈希h和一个秘钥s。在第二行进行交换,在第三行将秘钥进行哈希,第四行判断哈希结果是否等于h并返回。这个函数可以用作各种合约中的预言判断。
<center>
图例3:使用哈希锁在不受信中间节点之间传递通证</center>
一个简单的应用就是利用哈希锁在没有共享通道的节点之间进行永生通证的交易,只要有节点构成一条通道序列,就可以通过交易哈希锁做到这点。【注:这就是闪电链和雷电网络的基础协议之一。】比如,如果A和B有一个通道,B和C有一个通道,而A和C没有通道,但可以通过B实现交易。他们可以创建两份如图三的合约的副本,每个通道中使用一份副本。Commitment是A所选的秘钥的哈希,第三行我们调用哈希锁函数hashlock,一旦哈希锁判断通过就会执行合约,合约自动完成转账。当B和C都有了智能合约后,A公布自己的秘钥,B和C便可以通过秘钥来成功运行哈希锁,从而让实现通过B的跨通道转账。
译者注:这就是一个弱化版的闪电链HTLC协议,状态通道的作用就类似闪电链上的“微支付通道”,通过多个微支付通道构建两个没有通道节点之间的微支付通路。
哈希锁也可以用于通道中的多方合约。缔约方分为一个合约执行者与多个合约参与者,每个参与者都与执行者建立一个通道,并使用一份相同的合约。一旦所有参与者都同意,执行者便将秘钥同时提交给所有合约,合约哈希锁验证通过后,便会同时将所有参与者和执行者根据合约进行资产分配或者别的操作(视合约具体内容而定)。
译者注:这样等于是引入了一个局域的中心节点,中心节点可以决定是否将搜于参与者的状态更新。当这个局域上存在不止一份多方智能合约,通过合约的履行情况或者神谕机的多种返回结果来决定一个多分岔逻辑的选择的时候,一旦这个中心节点做出异常选择,那么所有参与节点都只能听他的选择。更关键的是,此时智能合约的结果在这个局域是不存在歧义的,所以区块链本身不能对中心节点做出错误或者恶意选择的行为做出区分——区块链只有在存在歧义的时候使用少数服从多数原则来进行仲裁(这是区块链本身的特性,51%正义)。
事实上,由于智能合约的哈希锁是单方的,也即需要一个提交者来发动该合约,所以总是需要一个具有控制权的节点,而此时其它节点没有控制权。
比如我们即便不采用中心节点来控制多方智能合约,在一个有N个参与节点的局域,共有M个通道连接这N个节点(全连接网络中M=N(N-1)),那么我们就需要在这M个通道中建立N*M份智能合约,每个节点都可以发起全网对合约的履行,但此时因为是每个节点都可以发起,所以如果此时有不止一个逻辑分支,那么每个节点都可以选择恶意执行某个不应该执行的合约,这样就会出问题。
更好的设计,是一个多重哈希锁,只有当输入的秘钥的哈希值并联后的哈希值等于合约约定的哈希值时,合约才被执行。这样的设计可以避免中心化节点的恶意行为,而且每个节点都具有相等的参与权——缺点是必须所有节点都同意才能执行。更加复杂的设计,是一个多数人哈希锁,即对于N个节点输入的秘钥的哈希都做验证,当通过验证的节点数超过一个阈值时才执行合约。
另有一点,就是这里智能合约大量使用哈希而非加密技术,如果某一天所用的哈希算法爆出哈希碰撞漏洞,或者可以被暴力反破解,那么相关智能合约立刻就变成废纸。
b) 履约度量
合约的执行情况可以用类似以太坊中的“气”的方式来度量,永生链使用两种不同的资源来实现这种度量,一个是时间,一个是空间。这两者都需要通过永生通证来进行执行请求的支付。
初看起来这个设计似乎有问题,因为此时可能有另一方需要区块链对争议做出仲裁。然而,只要通道中的所有币并不都用在赌注上【注:应该就是所有资金都放在合约中】,那在合约代码中就是支持可以被撤销的,将资金进行重分配。事实上,好的做法是避免通道中的所有资金都被用于交易,这样可以有效防止因为一方丢失而导致的通道关闭。
译者注:如果上面和闪电链的HTLC协议很像(事实上就是弱化了),那么这边说的就是闪电链的RSMC协议——可撤销的微支付通道。
B.2) 例子
略
C. 共识机制
永生链使用了一种混合了PoW和PoS的共识机制。区块序由PoW决定。【注:也即,挖矿是PoW方式的,通过PoW来决定哪个节点有记账权可以入链。】链上环境参数等变量则通过链上的预言市场来决定,这样允许用户参与到整个链的更新中来,并能将新的知识引入到链上。【注:即通过带神谕机的智能合约来全网改变相关参数和规则。】具体的PoW算法,我们采用Tromp提出的“杜鹃环(Cuckoo Cycle)”方案的一种变种,它是内存约束的,也是一种“间接的PoW方案实现”,只需要更少的电力消耗,但使用内存进行工作力证明【注:PoW框架中的一种分支,不考验机器的CPU或者GPU,而是考验机器的内存使用力】。这也使得用户使用移动设备进行挖矿成为可能。最好的挖矿方案,就是难以解决,但容易校验。
Tromp是这样描述他的方案的:
“杜鹃环”是一种可即时验证内存延迟的PoW方案,通过检测设备的内存读写延迟而非计算力来实现。杜鹃环挖矿事实上是ASIC挖矿的一种形式,使用矿机DRAM芯片随机读写十亿位的数据实现。
即便让手机在晚上充电的时候进行挖矿,也不会有效率上的数量级级别的损失。这不是一种竞争盈利的方式,而是一种买彩票的方式,矿机的形式也将有极大的拓展,同时也有利于去中心化。
这个方案更经济实惠,只使用较少的PoW,从而可以减少分岔,少量的分岔也是为了配合用户的内存情况,而预言市场的结果也将极大地决定最终哪个分岔成为主流。更多分析与讨论会在以后补充的文章中给出。
永生链上的共识机制有一些非标准的应用。除了新块入链,它也被用于神谕机答案的确认以及系统参数的确认。尤其,共识机制允许自我更新。然而,这一切都不是无懈可击的。比如,如果使用了一个过于简单的PoW,那就将导致通过污染旷工来破坏神谕机的成本就会变得非常低。因此,永生链在PoW的基础上,还引入了PoS,从而构成一种混合算法,兼顾了两者的优点。同时,PoW将被独立用于新永生通证的生成。
永生链最开始是一个纯PoS区块链,但我们后来不认为一个去中心化的纯PoS区块链是实际可行的。
我们准备使用一种新型的共识机制,称为“普查PoS”,从而允许所有节点参与到共识中来。这种方案比我们所知的所有其它共识机制都更不浪费,但缺点是区块确认时间会非常漫长。好在所有高频交易都发生在状态通道中,所以区块入链时间并不是什么瓶颈。在后续文章中我们会进一步讨论这个问题。
C.1) 神谕机
大多数合约的一个关键特性,就是无论合同是文本的还是代码的,都要能有效反映环境中的价值,比如不同商品的价格,或者某件事是否发生了。一个不具备这种能力的智能合约系统本质上不过是一个封闭的系统,从而实用性很有限。已经有大量项目试图将外部数据通过一种去中心化的方式引入到区块链上。,比如预兆(Augur)。然而,要判断一个被引入的数据究竟是否真实有效,这就需要一种全新的建立在共识机制之上的共识机制【注:用链上的共识机制校验链下的数据?最多只能验证引入进来的数据在链上是否有效,离开链后,共识机制是无能为力的。这就好比要通过PC上的杀毒软件来防止有人把打印机和扫描仪给砸坏一样无厘头】。
要在一套共识机制之上再跑一套共识机制,就和分别跑两套共识机制一样消耗巨大,而且也不增加安全性,因为只要有一个除了问题,那么整套共识机制就失效了。因此,我们将两套共识机制合二为一,使用一套为系统状态进行确权的机制,来为从外部世界引入的数据确权。
任何永生通证持有者可以发起一次神谕机询问,只要承诺能回到一个答案为是或否的问题。他们需要给出一个确定的时间表,比如要在多少时间内回答,什么时候开始运行。此外用户还需要提供一套评判神谕机的回答是否正确的标准,关于这点未来会有讨论。根据这份时间表中的时间长短,用户需要支付相应的永生通证来启动神谕机。这笔费用会在此后回答那个是非问题并被接纳为真时返退,否则就被销毁。区块链为神谕机产生一个唯一标识,用于在未来神谕机有答案后进行查询【注:类似比特币中的地址】。
一旦神谕机给出了回答,询问神谕机的用户就可以免费获得答案并提供一个答案。如果一台神谕机已经回答了问题,或者一段时间已经过去,那么任意其它用户都可以支付一笔相同的永生通证来申诉。如果直到规定的时间过去都没有申诉,那么启动神谕机的用户所提供的答案就会被记录为真相,之前的抵押款被返退。如果有申诉,那么共识机制就会决定到底采用哪个答案。这样做开销很大,但因为我们至少可以获得一笔抵押款,所以可以这么做【注:也就是,使用抵押款来避免大规模恶意申诉。这个模式很类似雨果奖等奖项的投票机制:有价投标。这也是PoS的一种变体】。
具体来说,当出现申诉时,所有节点对其进行投票,投票中包含了神谕机、答案和个人签名等信息的哈希,提交给当前维护投票树的节点【注:也即链上获得入链权的节点】。
在区块中,我们只抽样保存投票结果而非将所有节点的投票都保存下来。这样肯定存在一定的错误概率,但使用区块链的多次确认机制可以最终确认下来。
a) 惰性
惰性参数决定了节点参与投票的概率,从而避免所有节点过于频繁地参与投票。可以根据全网节点与投票的情况调节该参数。
b) 异议
假定现在神谕机出现了申诉,有两个节点参与其中,都交了抵押款。
神谕机可能出现五种输出:
没有参与者输出“是”输出“否”无效问题继续等着
我们用$u_i$代表选了i的节点数,第一种情况的i为0。从而共识算法为:
如果$u_3>A$,拒绝所有答案并关闭神谕机;如果$\frac{u_4}{u+1+u+2}>B$,继续等待;如果$u_1+u_2+u_3<C$,继续等待;如果$u_1-u_2>D$,选择“是”并关闭神谕机;如果$u_1-u_2<-D$,选择“否”并关闭神谕机;如果$-D<u_1-u_2<D$,继续等待。
其中ABCD都是系统参数,用来避免过少用户投票而产生的误差。而投票的节点都可以从存在异议的节点提交的抵押款中获得一定过得收益。
c) 使用博弈论
略
译者注:简而言之,作者认为在这样的系统上的欺诈行为会导致系统上所有通证的价值下降,所有握有资源的人不会欺诈,而没有资源的人又无力欺诈。所以可以达到一种纳什均衡,只有可接受的欺诈行为发生。
不得不说这个想法过于理想化了,这等于将信用直接等价于收益,但这在现实世界中是不适用的,至少也是不普适的。
基本可以认为这就是喊口号、喊愿景、喊情怀。
译者注:简而言之,神谕机从现实世界获得数据,然后区块链通过共识机制来确认数据。但神谕机从现实世界获得的数据的真实有效如何保证?这套机制只能保证获得数据后众人可以对数据达成共识,但无法解决来源问题。
这里投票过程应该是通过PoS实现的,如果只是普通的点对点投票,那依然会遭遇拜占庭将军问题,所以就会有被篡改的风险。
D. 统筹
基于区块链的系统上的统筹在过去是一个大问题。当系统升级时会发生硬分岔,这将导致节点之间爆发一场大争论虽然大部分情况下只有旷工才能决定到底采用哪套协议或技术方案。即便是最简单的如修正代码中的一个变量值,也会导致大争论,例如比特币上的区块大小,因为普通用户和决策者之间的利益动机很有可能是不一致的,所以并没有一条清晰的升级路线。我们系统上也会存在复杂的决策问题,比如修复“分布式自治组织”中某个智能合约的bug,这就需要系统开发者进行快速迭代更新。
这类系统的一个主要问题是很好辨认的:协议升级或者改变的决策过程没有一个好的定义,或者缺乏透明度。永生链的统筹系统是其共识机制的一部分。它使用权重投票、神谕机和预言市场来确保尽可能的高效和透明。
进一步,共识机制由一系列决定系统如何运作的变量决定,在每一个新区块中都会适量调整,包括交易提成、神谕机抵押款以及区块生成时间间隔等。所有参数的调整都通过投票的方式来决定。节点也可以主动发起投票来提议是否修改参数。
通过预言市场提供协议的参数,节点可以知道如何有效地更新协议。而预言市场提供的关于硬分岔的信息,社区可以知道最后应该采用哪个版本的共识机制被采纳。每个节点都会选择自己的优化方案,其目标都是以自身利益最大化为标准【注:所以也还是要达到纳什均衡,说到底还是一个博弈过程,最后交由共识机制仲裁,否则还是会分岔。】
E. 可拓展性
E.1) 分区
本系统的架构本身是高度可拓展的。它允许每个节点只关注区块链上和自身相关的部分而不用关注其它节点的数据【注:看来是打算采用类似BT或者电炉的那种分块分布式储存方案了】。每个节点只保存一部分区块,完整的区块链分散在全网所有节点中,以减少每个节点的负荷。使用Merkle树对节点所有区块数据的有效性。可以想象,有些节点会保存完整的树,当有人要插入或者查询时需要向他们支付费用。
译者注:这个方案我也考虑过和模拟过,只有当节点数足够多,或者虽然不多但稳定在线的节点足够多的时候,这个方案是可以达成的。但这其实就等于将安全性和稳定性都打了一定的折扣,即便最新的区块入链时被篡改的难度有所减低。一个折中的方案,便是区块被各节点保存的概率与区块链的高度相关,从而最新的区块几乎必须被保存,此后随着时间的推移而选择性遗忘。遗忘的过程会非常复杂,每个节点宣布自己遗忘某指定区块,然后其n层邻域内的节点告知自己是否有该区块,如果大于阈值则可遗忘,否则则不可遗忘。该阈值正比于该邻域内节点总数乘上遗忘概率。但这又是一个非常耗时的过程。所以在这个方案中,安全性、稳定性与效率,不可兼顾。
E.2) 轻客户端
轻客户端不会下载所有区块。用户会提供给客户端一个他们所偏好的分岔的哈希,这被称为弱主观性,此后客户端便会下载包含该哈希对应区块的区块链,且只下载每个区块的头数据,头数据比完整的区块数据当然要小很多。区块的头包含如下信息:
- 前一个区块的哈希
- 所有状态树的根哈希
投票树的投票采样区块的增熵交易,如果有的话
译者注:比特币的SPV节点方案。
E.3) 状态通道及并行交易
状态通道具有极大的吞吐量,其中绝大部分数据不会比保存在区块链上,通道也不会向链上的共享状态写入任何数据,因此所有通道内的交易都可以并行执行。
由于分区依然很有实验性,所以在最早的永生链设计中并没有采用分片技术。但未来如果需要的话,永生链会使其中最简单的一个。
E.4) 给定内存要求下的每秒交易量
确定协议的变量由共识机制持续更新。我们可以通过初始值来计算出每秒交易的默认速率。
为了操作节点,我们需要在内存中为最终区块前的所有区块都做一个备份,并需要记录100次以上的交易,以防有攻击。如果保存两天,那么在最终入链之前会有5760个区块,总计需要576GB的数据,而如果不考虑攻击,则只需要保存5.76GB的数据。
III. 应用
区块链的必需品是链上的基本元素,如永生通证、钱包、域名以及相关概念。我们模块化所有可重用的组件,这些组件可被用作应用的基础,并被改进。
A.区块链的必需品
略
A.1) 账号
略
A.2) 钱包
略
A.3) 存在性证明
略
B. 状态通道的应用
状态通道的智能合约非常适合网上有高吞吐量需求的微服务。
B.1) 收费API
略
B.2) 投保集资
略
B.3) 跨链原子交换
略
B.4) 稳定的有价资产与投资组合
略
B.5) 事件合约
略
a) 保险
略
b) 高密
略
B.6) 预言市场
略
B.7) 单价批量交易市场
略
IV 讨论
我们已经提供了一种关于如何构架一个基础且更有效的价值交易体系的方案。事实上,系统是一个全局神谕机,可以用于提供全球尺度服务的决策。尤其,所有第三章的应用都可以在永生链上方便高效地建成。
然而,我们的方案有其自身的根本局限性,同时也有改进空间。下面就是相关讨论。
A. 限制与折衷
虽然我们相信我们的架构中的折衷方案是合理的,并能给出其它领域的性能提升,但永生链并不是去中心化应用的万灵丹。它应被视为是现有技术的一种补完。下面是一些必要的警告。
A.1) 链上状态:
虽然有很多优点,但永生链缺乏可编程的状态,因此并不适合需要共识机制下特定状态的应用,比如特定的DAO,特定的域名系统,以及不与标的资产挂钩的子货币。
A.2) 免费选择问题
如果A和B之间有支付通道,A签名了一份合约,此时等于他给了B一个免费的选择权:B可以在未来的任何时刻选择签署并返回这份合约。但这并不是所预期的。为了避免这个问题,通道中的合约不能全额立即生效。A和B时空相隔,两个都会在一个小延迟后再签署合同,以便没有较大的免费选择空间。【注:这就是RSMC协议的一部分。】
A.3) 流通性缺失及状态通道拓扑
正如II-B.1中所述,如果在状态通道中使用中间节点进行交易中介,那么在通道中等于需要储存两倍的通证。比如A要将一笔钱转给C,中间通过B做中介,那么A需要通过智能合约给B一笔钱,同时B需要通过智能合约给C一笔钱,两笔钱被锁在了智能合约中,反之亦然。
这个过程对B来说耗资巨大,所以会因此而获得报酬。如果A和C希望彼此之间能有更快更有效的交易,那么他们必须建立一条直接连接彼此的通道,并使用哈希锁进行交易。
由于这样的额外通道从实际上来说是降低了全网流通性,所以预期很多情况下都会出现中间商,尤其是双方预期未来不会有更多交易的情况下【注:总算有人直面中心化问题了】。因此,预期会出现大量非平庸的交易通道拓扑结构,会出现一些富节点会通过充当中间节点来抽取提成。
应该指出的是,这并不会构成单点故障,因为众人并不相信中间节点。如果中间节点在完成秘钥传递前就离线,那交易便不会通过该节点进行,这样导致的负面影响不过就是这个节点无法获取提成。
译者注:这里的问题并不是这么简单。假定说A和B之间通过C进行交易,但智能合约并不只有一个,而是一个较复杂的条件选择,A又因为某些原因发送了多次不同的选择,那么最终达成的合约是哪个就可以被C控制。
而且,现在局域中心节点的出现几乎是必然,这点本就与区块链的思想相悖。
B. 未来工作
有一些可能的方案可以优化当前架构。
B.1) 函数式智能合约预言
未来一个合理的发展方向,便是尝试更接近函数式的高级语言。跟踪隐式堆栈通常很容易出错,且也不适合作为一种高级、面向开发的语言。考虑到程序已经是纯函数的(除了部分环境变量),这点很容易做到,从而可以大大化简智能合约的开发与形式验证。虚拟机的调整与新语言也将紧密联系在一起,以减少编译错误,并减少对开发者的依赖。理想情况下,从语言到虚拟机中间代码的转义会直接变成简单的转录,尽管可能会有一些折衷。
B.2) 多方交易通道
目前,永生链上的智能合约都限制为只有两名参与者。如果多方通道理论上可以通过哈希锁实现,但这个代价是高昂的。我们正在研究一个支持n方的通道方案,以及n方中m方通过的方案。
-
中本聪,《比特币:一种点对点电子现金系统》,2008。 ↩
-
Vitalik Buterin,《以太坊:下一代智能合约及无中心应用平台》,2014。 ↩
-
Casey Detrio,《基于智能合约的智能市场》,2015 ↩
-
Paul Snow、Brian Deery、Jack Lu、David Johnston、Peter Kirby,《公证通:基于区块链上不可变审计追踪系统的商业流程安全性保障体系》,2014 ↩
-
解析带状态智能合约的难度早已被人清晰地证明,就在于分布式自治组织(DAO)的重入缺陷。尽管代码被以太坊创建者以及各社区反复检验,但这种情况依然发生了。 ↩
-
Jack Peterson、Joseph Krug,《预兆:一个去中心化、开源预言市场平台》,2014。 ↩
-
Aaron Swartz,《平方三角:安全性、去中心化、人类可读的域名体系》,2011 ↩
-
应该指出的是,由于合约需要从外部获取神谕结果以及一些环境变量,所以并不是纯函数。但由于神谕机的结果是不会变得,所以这点可以被看做是神谕机提供了丰富的多样性,而不是提供了某种杂质。至于环境参数,这是无法避免的,在一些高级语言中可以和代码相互隔离。 ↩