作者:stwith / 来源:Nervos Talk
公链是一个面向未来的设计
制度为欲望提供发展空间,同时不断孕育着制度的自我否定,最终旧的制度将无法满足新的欲望而逐渐走向瓦解,未来在新的理想与欲望的共同推动下新的制度将会形成。中心化与去中心化并不是今日才有的主题:中心化是秩序,服务于欲望,而当原有的秩序难以承载新的欲望和思潮,就会受到去中心化的挑战,在两者不断交互和博弈的过程中新的秩序将会诞生。
我们所看到的中心化机构之恶,无非是如上规律的外化,而我们身处在这个时代,恰好能见证去中心化对中心化的挑战:在中心化的信任程度不断受到质疑的时刻,去中心化带来的无条件信任(Trustless)又给出了新的演变方向。
为什么需要公链,此为其一。
互联网轻于协议,重于应用。信任机制依托强权或商业信誉加于应用本身,在不同应用之间又存在利益纠葛和标准差异,形成不同的体系,从而必须依托第三方达成体系间的沟通,增大价值流动的阻力;而在协议层面,还尚未有能够被人类全体所接受的共同知识库,在协议层面定义标准,利用密码学保有所有权,建立无摩擦市场。
为什么需要公链,此为其二。
近两年诞生了太多自我定义为公链的项目,他们从不同角度做取舍和创新,探索不同的方向,但似乎区块链最底层的问题依然没有得到很好的解决,而区块链底层基础设施的不完善,将始终制约着区块链行业的发展。
公链又叫无需许可链(Permissionless Blockchain),是全世界任何人都可以读取、发送交易且能够抵抗审查;同时,任何人也可以在无需许可的情况下参与其共识过程的区块链。所以公链作为区块链最底层的协议,应该是一个面向任何人、任何场景的区块链项目,而不只是局限于任何特定的产业或者场景。
现在公链项目最常提到的一个问题就是可扩展性问题,如果用单一维度进行评估,那么就是 TPS (每秒事物处理量Transaction Per Second)。我们经常能在公链项目的路演上能听到这样的论断,众所周知的一组数据:比特币的TPS只有7笔/秒,以太坊也只有20笔/秒,而我们常见的visa 能够达到三千笔/秒,淘宝在双十一时TPS高达好几十万笔/秒,所以我们改进了某某共识,实现了某千、某万笔/秒的TPS,来满足市场需求。
我们都说区块链是一项面对未来的技术,但是在未来面前,任何只注重提升单链性能而不从架构上进行改革设计的公链都没有任何可能。因为作为底层公链需要支持的不是一个visa、一个淘宝,而且数量众多的、功能各异的visa和淘宝,所以如果不是从整体架构去对整个网络进行重新设计和改进,而只是通过共识协议的优化,或者不断削减去中心化程度来换取微薄的TPS提升,那么这些公链在未来只能走向没落,或者成为整个网络的一个部分。
如果我们需要的是一个加密经济生态,那么我们需要的是一个可能的无限扩展方案。我们必须认识到单链的系统无法实现这一目标,因为在单链系统里面,要求每一个节点都要维护整个区块链世界里面涉及的所有数据,这就意味着每一个节点都要广播和接受数据,这会受到网络带宽的限制;每个新的块和新的交易都需要验证,这对CPU有要求;区块链中的交易和数据需要保存,这对硬盘的I/O有要求;而当前世界状态需要节点进行存储,这对内存也有要求。这些要求和限制都意味着单链的去中心化的区块链系统不可能会有很高的TPS。因此我们需要寻找新的解决方案,从目前来看,我们主要有三种可能的无限扩展方案:分片,跨链,分层。
分片技术通常是一个自体系,也就是说每个分片的需要采用的共识和可能达到的性能都是类似的,这样的方案如何保证在分片状态下实现每一个分片的去中心化、安全性都和原本单链情况下一致,是一件非常困难的事情,并且因为每个分片都是类似的,整个系统难以形成较好的专业分工。
跨链通常是借助桥梁或者枢纽实现各个链之间的通信,所有平行链(对应于Zone)和中继链(对应于Hub)作为一个整体协调运作。各个平行链可以包含自定义逻辑,负责处理本链的交易出块和状态转换,同时也可以通过桥梁、枢纽和其他链进行信息的沟通和传递。
分层这个概念早已有之,在计算机的各种设备中,包括寄存器、多级缓存、内存等等都存在分层设计,为了解决主链交易吞吐量较低造成的交易确认缓慢、交易费用昂贵、用户体验不佳等问题,区块链上的分层扩容方案也被不断提出,针对不同场景设计出不同的解决方案,已经出现了状态通道、Plasma、链下消息签名(元交易)、Turebit等各类Layer2方案,为主链的无限扩展提供可能。
至此我们已经从所有的公链方案里面做出了第一次选择,我们必须选择一个面向未来的区块链,而跨链、分层这两种方案是未来可能可以实现公链无限可扩展性的技术。
价值过滤和价值存储是必由之路
我们现在已经有了两种可以实现底层公链无限扩展的强大技术:跨链和分层,那么我们要问一个问题,当我们实现了无限扩展会发生什么?
区块链中节点处理交易需要花费的资源主要有三种:CPU,网络带宽和存储。CPU和网络带宽都是实时刷新的资源,上一个区块消耗掉的CPU和网络带宽通常不会影响下一个区块可用的CPU和网络带宽,我们可以认为在每个区块间隔内都有同样多的CPU和网络带宽可以使用。对于这种可刷新的资源,我们可以通过一次性支付交易手续费的方式来补偿节点。
存储分为两种,一种是对历史交易、历史状态的存储,这一部分数据可以存储在硬盘中;另一种是状态存储,也就是对当前世界状态的存储,这一部分数据需要存储在内存中。举个例子,当前用户账户里面的余额就是一种典型的当前世界状态,整个系统需要随时随地地访问这个数据,每当节点收到一笔新的交易,就需要去访问对应账户的余额来验证这笔交易的有效性,因此这个信息必须存放在内存中,而不能存储在硬盘里面。
与CPU和带宽不同,状态存储是一种占用资源,在区块链系统中一旦这部分内存空间被使用者占用了,除非使用者主动释放,否则将无法被后面的使用者使用。在现有的经济模型设计中,节点需要为状态存储持续地付出成本,而使用者却不需要持续地支付手续费(交易手续费只需要支付一次)。使用者只需要在往区块链写数据的时候支付一点点手续费,就可以永久使用这一部分的状态存储空间,这种不断增长的状态存储成本需要网络中的所有全节点来承担。
假设我们通过跨链或分层等技术实现了区块链性能的无限扩展,那么我们势必也需要实现CPU、网络带宽和存储的无限扩展,对于CPU和网络带宽这种可刷新资源而言,只需要通过不断提升其硬件性能就可以基本实现无限扩展。硬盘存储因为价格相对较低,而且历史数据的累积相对容易处理,未来可以通过去中心化的 Checkpoint 或是零知识证明等技术来压缩,但是存储在内存中的世界状态作为一种不可删除、难以压缩的占用资源,真的可以实现无限扩展么?
当底层公链的可扩展性问题真的解决之后,大量用户和交易数据的涌入,势必会造成存储需求几何基数级的增长,随之而来的状态爆炸可能是所有公链都需要面对的问题 — 这也是我们所说的 post scalibility 问题。
关于状态爆炸的更多内容,可以参考Jan的区块链与状态爆炸。
如果说状态爆炸是一个在区块链性能问题解决后必定会出现的问题,那么我们需要怎么做呢?
我们需要一个可以实现价值过滤、价值沉淀的底层区块链,而这一过程可以通过状态存储这个稀缺资源去实现。对此,我们必须承认,在最广泛、最底层的区块链达成一个全球共识,本身就是昂贵的。这就好比假设我们把底层公链作为一个全球公共聊天室,如果我们不加一个每日消息数量上限和发消息的门槛,那么势必这个聊天室会马上出现消息爆炸,而你所说的话也不会被大多数人看到,发送一条让全世界人们都看到的消息是需要付出成本的,而这样的稀缺性也保证了你发送内容的价值。
所以如何在跨链和分层的方案上实现价值过滤、价值沉淀就成为了我们第二个判断准则:
跨链因为是将众多已经存在的公链进行连接,所以在这种各条公链各自为战的状态下,想要实现将各条链的价值存储到中继链(对应于Hub)上,不断提升中继链(对应于Hub)本身的安全性,难上加难。
分层因为是一个从底层源头开始的方案,所以成了目前唯一能够较好实现价值过滤、价值沉淀的方案,而 Nervos 在这条路上已经走了很久了。
在安全性和去中心化上我们不应有任何妥协
这是第零条判断准则,也是底层公链最应该坚持的两个方面,在这两点上,底层公链不应该有任何妥协。在这一点上 Nervos 也会一以贯之的坚持。
That’s why Nervos!
一切从Nervos Community开始www.nervoscommunity.com
Nervos Community 成立的想法由来已久,但是只有在回答了Why Nervos?这个最基本的问题之后,之后的一切才变得有意义。关于 Nervos Community 之后的一切可能,我们用行动去证明。