Layer 1 应该做什么

SRE守夜人
• 阅读 2374

Layer 1 应该做什么

Nervos Approach

Nervos Network 的技术目标是设计一个分层的加密经济网络。这样一个出发点带来的是一个与众不同的设计思路,我们自己把它称为「Nervos Approach」:

如果我们认为分层是未来的发展方向,我们应该从一开始就考虑到上层协议和分层网络的需求,在分层的大框架下设计区块链协议。

换句话说,从分层的角度来看,现有的区块链设计方式都是过时的。现有的区块链在设计时考虑的是特定的功能(例如支付,或者是运行 DApp),并希望在运行一段时间后,让上层协议来适应自己。然而如果我们阅读互联网的历史就知道,今天互联网的协议分层不是这样打补丁打出来的,相反是在吸收过去经验之后基于分层的思路重新设计出来的(是的,互联网协议也是分层的,我们说的 TCP/IP 实际上是两个协议的名字)。Nervos Approach 是向互联网学习的产物。

这是为什么区块链并不天然是 Layer 1,Layer 1 是需要设计的。这也是为什么我们选择设计 CKB 这样一个新的区块链协议的原因。

Layer 1 vs. Layer 2

要弄清 Layer 1 应该做什么,首先要弄清楚它和上层协议的区别。Layer 2 起源于我们发现公有链(这里指 Permissionless Blockchain)的性能不足,很难扩容到满足整个加密经济体需求的水平,同时我们又非常迷恋公有链提供的可用性和极大的服务范围,因此慢慢演化出了一系列可以由区块链来保证安全的 Layer 2 协议,例如支付通道(Payment Channel),Plasma,etc.

这些协议的共同特点是牺牲共识范围来换取性能。公有链最让人惊艳的地方是通过开放网络,提供不间断的覆盖全球的服务,这意味着全球共识,也意味着性能低下。解决这个问题的最好方式是将大部分交易转移到共识范围更小,但是性能更好的上层协议中,并且保证上层协议的参与者总是可以在不满意的时候退回到区块链上来解决问题,代价仅仅是一些时间成本。

因此作为 Layer 1 的区块链,关注点显然不应该是性能,因为 Layer 2 会承担这个职责。Layer 1 是保障上层协议参与者的最后防线,它的关注点应该是安全和去中心化(安全和去中心化是两个东西,有时间再展开)。如果我们观察 Layer 2 协议与 Layer 1 交互的模式,我们还会发现,Layer 1 负责的是状态共识(存储),Layer 2 负责的是状态生成(计算)。

计算与状态

程序员的世界中有一个流传甚广的公式:程序 = 算法 + 数据结构。这个等式指出了程序设计的两个核心关注点,计算(算法,即计算的步骤)与数据(计算的对象)。而数据又可以分为两种,程序输入(外部数据)和状态(内部数据)。

计算机科学中的「状态」一词可以理解为程序在运行时,某个特定时刻可访问的一切数据。程序中有变量,变量通常代表着内存中的一个可以存放数据的位置,这个位置的内容就是程序的状态。一段程序的输出完全取决于它的输入和其开始执行时的状态。计算(CPU)、输入/输出(IO)与状态(内存)构成了完整的冯诺依曼体系,今天最流行的计算架构。

Layer 1 应该做什么

以支付通道为例

在支付通道中,Layer 2 的共识范围缩小到两人之间,这是最小范围的共识。参与通道的两人进行的操作如下:

1.向 Layer 1 发送交易建立通道,锁定特定的状态,锁定的状态只有用 Alice 和 Bob 双方的签名才能更新

a.例如,Alice 锁定 1 BTC,Bob 锁定 1 BTC,我们用(1, 1)表示在 Layer 1 锁定的状态

2.双方通过链外的网络连接(Layer 2),产生并交换新的状态,各自签名

a.Alice → Bob 0.5 BTC,Alice/Bob 在本地保存的新状态为(0.5, 1.5)

b.Bob → Alice 0.1 BTC, Alice/Bob在本地保存的新状态为(0.6, 1.4)

c.…

d.最后一次交换后,Alice/Bob 在本地保存的新状态为(0.2, 1.8),而且双方都对该状态进行了签名

3.向 Layer 1 发送最终的状态,Layer 1 验证最终提交的状态有 Alice/Bob 双方的签名,更新锁定的状态为(0.2, 1.8)并解锁

Layer 1 应该做什么

从这个例子我们很容易看到,在整个过程中,我们通常讨论的计算分成了两个部分进行:新状态的生成,新状态的验证。前者发生在 Layer 2,而后者发生在 Layer 1。如果我们观察其他的 Layer 2 协议,例如 Plasma 或者是 TrueBit,很容易得到类似的结论。正因为 Layer 1 会验证 Layer 2 产生的状态,我们才能够做到通过 Layer 1 保证 Layer 2 的安全,因为 Layer 2 的用户在遇到问题时,总是可以请求 Layer 1 来做某种形式的验证(这是为什么 Layer 1 可以看作是「Crypto Court」,因为它是一个能识别密码学证明的「法院」)。

因此在分层架构下,Layer 1 的关注点应该是状态的验证(和存储),Layer 2 的关注点应该是状态的生成。通过将状态的生成转移到 Layer 2,将生成和验证分离,我们的分层网络兼顾了性能(Layer 2)、安全和去中心化(Layer 1)。

任何程序都有计算和状态,区块链上运行的程序(DApp)自然也不例外,在分层架构上构建应用时,需要考虑在哪里产生状态,在哪里验证状态,在哪里保存状态。由于状态的生成和验证分离,状态生成的方法可以和验证解耦,状态生成不必被 Layer 1 的编程模型绑定,具有更大的自由度。只要能通过 Layer 1 验证,状态的生成甚至可以是中心化的(事实上大部分 Plasma 协议中只有一个 Operator!)。

Layer 1 应该做什么

Layer 1 应该做什么

我们在说「计算」的时候,实际上说的是「状态生成」。在一般的计算模型里面,不存在信任和安全问题(我的 CPU 不会用假的结果骗我),所以生成就好,不考虑验证;但是在区块链网络里面,我们不仅需要生成,还需要验证。Layer 1 的关注点应该是状态的验证和存储,而不是状态生成(希望你没有被绕晕……)。

由此我们终于可以推出 Layer 1 应该做什么:

1.需要一个安全的共识协议,范围越大越好。基于 PoW 的 Nakamoto Consensus 正是这样一个协议,这是唯一一个在现实环境中经过验证的全球共识。
2.需要可编程能力,以支持各种状态验证逻辑,这意味着我们需要一个强大的编程模型(状态模型+虚拟机)。
3.需要能够理解各种密码学证明,因为区块链协议是基于密码学构建的,Layer 1 与 Layer 2 之间传递的证明是密码学证明。
4.需要管理好状态,因为经过验证的状态会留在 Layer 1 上。这意味着我们需要一个关注状态的经济模型。


关于 Nervos

Nervos Network 由 Nervos 基金会推动,通过分层设计,兼顾性能、安全以及去中心化的特性,满足多样化的商业场景需求,为未来加密经济提供基础设施。

关于 CKB

Nervos Common Knowledge Base(CKB)是一个无需许可链,它是 Nervos Network 的基础层,并在设计上提出了一些理念:

CKB 共识协议 NC-MAX 使用两阶段提交节约带宽,并根据网络情况调整自身参数,提升了 Nakamoto Consensus 的可扩展性
CKB 虚拟机采用底层 CPU 指令集架构 RISC-V 开发,提供更高的开发弹性与运行的稳定性
CKB Cell Model 是比特币 UTXO 模型的通用化,能够验证和存储任何类型的数据
CKB 经济模型用货币政策限制状态存储的增长,并实现智能合约平台的价值存储功能

原文链接:https://talk.nervos.org/t/lay...

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
待兔 待兔
1年前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
Python从零实现区块链仿真【含源码】
在区块链或数字货币领域,Python并不是主流的开发语言。但是如果你的目的是研究区块链技术的原理,或者需要在自己的笔记本上仿真一个区块链网络并进行一些研究性的实验,比如完成自己的毕业设计项目或科研课题,那么Python就是合适的。在这个教程里,我们将学习如何使用Python从零开发一个多节点的区块链网络,并基于这个仿真区块链网络,开发一个去中心化的数据分享应
Stella981 Stella981
3年前
Hyperledger Explorer官方安装文档中文版
HyperledgerExplorer是一个简单易用的开源工具,可以用于监视区块链网络中的活动。HyperledgerExplorer支持Fabric、Iroha等多种区块链,可以运行在MocOS和Ubuntu下。HyperledgerFabric区块链开发教程:Fabric区块链Node.js开发详解(https://
Stella981 Stella981
3年前
2021年全球公有云终端用户支出将增长18% ;EMNLP 2020最佳论文:无声语音的数字发声
!(https://static001.geekbang.org/infoq/af/af9f6637b50b09be60b00a42f3812d5e.png)开发者社区技术周刊又和大家见面
可莉 可莉
3年前
2021年全球公有云终端用户支出将增长18% ;EMNLP 2020最佳论文:无声语音的数字发声
!(https://static001.geekbang.org/infoq/af/af9f6637b50b09be60b00a42f3812d5e.png)开发者社区技术周刊又和大家见面
Wesley13 Wesley13
3年前
NEO从源码分析看UTXO交易
_0x00前言_社区大佬:“交易是操作区块链的唯一方式。”_0x01交易类型_在NEO中,几乎除了共识之外的所有的对区块链的操作都是一种“交易”,甚至在“交易”面前,合约都只是一个小弟。交易类型的定义在Core中的TransactionType中:源码位置:neo/Core/TransactionType
Wesley13 Wesley13
3年前
VRF在区块链中的应用
最近区块链领域流行了一种“怪病”,许多区块链项目或者设计方案都加入了一个叫做VRFs的算法。那么,(1)什么是VRFs?(2)VRFs在区块链中解决了什么问题?本文旨在介绍VRFs的原理以及在区块链中的用途,不涉及复杂的VRFs的详细设计实现以及安全性证明。VRFs介绍VRFs全称VerifiableRand
Stella981 Stella981
3年前
Bystack跨链技术源码解读
Bystack是由比原链团队提出的一主多侧链架构的BaaS平台。其将区块链应用分为三层架构:底层账本层,侧链扩展层,业务适配层。底层账本层为Layer1,即为目前比较成熟的采用POW共识的Bytom公链。侧链扩展层为Layer2,为多侧链层,vapor侧链即处于Layer2。!(https://oscimg.oschina.net/oscnet/49
Wesley13 Wesley13
3年前
1区块链底层技术
  每次在讲解区块链时,都会收到很多关于底层技术问题,感觉很有必要对区块链的底层技术进行分享,这也是我写这一系列文章的动力。  2015年接触比特币(可惜当时没有囤币),作为一个在IT行业摸爬滚打多年,并且是技术出身的人,成功的被比特币底层技术区块链所吸引。区块链与其说是新兴技术,不如说是新的理念、新的概念或者说是一种架构应用,是对目前中心化系统存在问