在钻研 Godwoken、Polyjuice 或其余与区块链相干的货色之前,让咱们首先从过来 数据库畛域的故事 开始说起。
几十年前,人们因为须要更好的工具来组织数据,所以 SQL 数据库(https://en.wikipedia.org/wiki/SQL) 应运而生。ACID 属性(https://en.wikipedia.org/wiki/ACID) 的设计是为了让数据能够在原始创立数年后,仍然能够平安地写入和读取。在那个时代,一个数据库只服务于无限数量的人,一台机器(大型机,或前期弱小的微型计算机)就足以撑持一个数据库。
慢慢地,电脑开始遍及,互联网的爆炸式倒退更是放慢了这一过程。很快,单台机器曾经无奈为数据库提供应有的反对,于是分布式数据库开始呈现。然而,CAP 定理 的发现(从一致性、可用性、分区容错性这三个个性中最多只能抉择两个)给软件工程师带来了微小的挑战。最终,他们被迫在 CP 和 AP 数据库之间做出抉择。为了不便参考,咱们用一个简略的(尽管是单方面的)办法来辨别 CP 数据库和 AP 数据库:
- CP 数据库保障了整个分布式系统的全局一致性视图;
- AP 数据库可能为不同的逻辑局部或分区提供不同的视图。
AP 数据库,起源:https://kgrvamsi.wordpress.co… 数据库,起源:https://kgrvamsi.wordpress.com/2013/05/28/riak-in-depth/
从亚马逊的 DynamoDB,再到 MongoDB 的蓬勃发展,其中有一段时间 AP 数据库受到了宽泛的关注。到处都有人在吆喝:「NoSQL 才是将来!SQL 就是一个过期的货色。」 过后的确有很多人都抉择了 NoSQL 解决方案来构建本人的应用程序。在过后看来,数据库的将来解决方案仿佛的确就是分区的。
但故事并没有完结。几年后,AP 数据库的缺点开始浮出水面:当人们在设计零碎架构时,来自不同分区的不同视图的确会影响人们的决策。
举个例子,假如你是一个基于传统 SQL 数据库构建的开发人员,你只须要关怀逻辑表和它们之间的连贯即可。偶然可能会须要更多的性能查问,但你的数据始终是放弃有序的。然而在 AP 数据库中,你只装备了键值(KV)存储或文档存储。咱们必须首先设计模式,但在此之上,你必须解决数据库不同分区产生的不统一写入。这大大增加了利用开发者的工作量,在很多状况下,这也会导致凌乱的数据存储。
即便从 CP 数据库解决方案 DynamoDB 上线并应用至今的 AWS 来看,传统的 SQL 数据库依然在被人们宽泛应用。只有在非凡状况下,比方购物车逻辑中存在非凡的合并性能,DynamoDB 才会失去大量采纳。对于日常开发者正在构建的绝大部分利用来说,AP 数据库很难作为一个很好的抉择。
当初咱们来看看明天探讨的热点话题:NewSQL,它放弃了原来 SQL 模型的 ACID 属性,在大多数用例中作为 NoSQL 的替代品而失去遍及。因为设计上的要求,NewSQL 的解决方案大多甚至全副都建设在 CP 模型上:
- Google Spanner 是 Google 面向未来的、寰球规模的数据库。它遵循 CP 设计,旨在提供比基于 AP 的 BigTable 更好的代替计划;
- CockroachDB 和 TiDB 都是基于 CP 模型构建的古代开源分布式 SQL 数据库;
- CitusDB,一个典型的基于 PostgreSQL 的可扩大数据库,也是基于 CP 模型构建的。
还有很多例子能够举,但趋势曾经很显著了:开发者渴望通过 CP 零碎以进步生产力。历史向 AP 短暂地做了歪斜,但因为 CP 对开发者的敌对性,人们最终又回到了 CP 的路线上。
从这个故事中,咱们能够看到,开发者最终还是会抉择那些让他们更有效率的工具。
当初你可能会想:这是一个很长的故事,但这和区块链有什么关系呢?
在 Nervos 中,咱们深信分层的解决方案。这素来都是咱们三思而行的后果,是基于咱们在软件行业的丰盛教训而得出的论断。分层让咱们具备了一种设定边界、封装复杂性和提供假如的办法。
咱们行业中有很多货色都是建设在分层架构之上的:网络堆栈、编译器基础设施、CPU 架构等等,这样的例子举不胜举。在这个行业,以及人类创立的许多其余行业中,咱们能够看到一些层在构建时暗藏了细节,并同时为下层提供反对。
即便对于那些认为区块链是一项全新技术的人来说,层的应用也呈现出显著的差别:
- 在一个分层网络中,核心区块链确保了其交易的全局一致性;
- 分片区块链的设计提供了不同的分片,每个分片都能够独立工作。
看到这里,你有没有一种相熟的感觉?你认真想想,区块链与分布式数据库是不是十分类似!尽管其中有很大的区别,但在咱们看来,对于分层和分片的探讨,相似于过来 10 年咱们对于 CP 和 AP 数据库之间的探讨:在分层区块链中,你是依据逻辑性能来对下层区块链进行分组,将跨链通信的需要降到最低;而在分片区块链中,跨链通信是扩大需要的根底,无奈防止。
假以时日,咱们置信分层将会为所有 dApp 开发者带来更显著的益处,就像 NewSQL 数据库的崛起一样。
很多人始终都想晓得 CKB 上的 Layer 2 解决方案会是什么样子的,所以明天,咱们就在这里向大家介绍两个互补的我的项目:
- Godwoken 的初始版本:
https://github.com/nervosnetwork/godwoken - Polyjuice 的全面更新:
https://github.com/nervosnetwork/polyjuice
Godwoken:无需许可的 Rollup 框架
当初区块链世界中存在很多扩大计划。有领取通道、Rollup、状态通道、Plasma 等等。
在 Nervos 上,咱们齐全能够反对所有的这些计划,但实际上,咱们必须从一个计划开始。在现有的解决方案中,Rollup 是最优的,也是最没有缺点的。因而,咱们从 Rollup 开始了咱们的旅程。稍后咱们还会看到,因为 CKB 独特的设计,Rollup 比单纯晋升 TPS 这种像类固醇般的计划来的更有意义。基于近一年的钻研、设计和实现,咱们曾经公布了 Godwoken 的初始版本,也就是咱们的无需许可 Rollup 框架。
Godwoken 的工作原理是通过一组 aggregator 节点收集专门设计的 Layer 2 交易,而后将它们打包成 CKB 交易,提交给 Layer 1 CKB 接管。从这个意义上来说,Godwoken 的确是以 Layer 2 的形式工作的:
- 除了 CKB 节点外,还运行着非凡的 Godwoken 聚合器节点
- 采纳专门设计的 Layer 2 交易格局,来代替 CKB 的交易格局
- 由 Godwoken 节点提交一个非凡的 CKB 交易,也能够看作是 Layer 2 区块
只管是 Layer 2 解决方案,但 Godwoken 背地的一个重要设计理念是,咱们正在构建一个 无需许可 的 Layer 2 解决方案。
- 就像 Layer 1 区块链提供的那样,Layer 2 交易用交易费用激励聚合器节点;
- 在 Nervos CKB 上能够进行多个独自的 Godwoken 部署。每个部署都能够自在地做出本人的抉择。如果一个部署不能满足你的要求,你还能够自在地切换到另一种部署,甚至能够启动本人的部署;
尽管一些部署可能会产生额定的限度,但 Godwoken 的外围设计是让每个人都能向 Layer 2 区块链提交区块,使其像真正的无需许可 Layer 1 区块链一样扩大。
(为了展现更多对于 Godwoken 的外部信息,咱们将在近期公布一篇名为《Life of A Godwoken Transaction》的文章,在文章中咱们将介绍更多对于 Godwoken 设计和实现的细节。)
值得一提的是,目前咱们只公布了 Godwoken 的第一个版本,它仅限于以下设计抉择:
- 将应用基于 Optimistic Rollup 的设计;
- 通过 Proof-of-Authority 来管制 Layer 2 区块的发行。
咱们将持续减少 Godwoken 的更多功能,其中包含:
- 一个真正基于 Proof-of-Stake 的区块发行协调机制
- 基于 ZK Rollup 的设置
- 以及更多!
最近,咱们惊喜地发现,Rollup 正在区块链世界里迅速流行起来(https://ethereum-magicians.org/t/a-rollup-centric-ethereum-roadmap/4698)。咱们很荣幸可能站在伟人的肩膀上,并且十分心愿能在这个畛域做出更杰出的工作,也心愿能站在他人的肩膀上有所翻新。
不过,应用 Rollup 框架只能解决问题的一半。一个只能发送原生代币转账的解决方案究竟不能解决所有问题。在竞争强烈且一直增长的区块链畛域,往往须要一个智能合约解决方案来开释更多的后劲。为了解决这另一半的问题,咱们还打造了 Polyjuice,它将与 Godwoken 互补运作。
Polyjuice:CKB 上 100% 兼容 EVM 的 Ethereum 解决方案
Polyjuice 是 CKB 上的以太坊解决方案,这意味着人们能够通过最小的改变,来将他们现有的运行在 Ethereum 上的 dApp 迁徙到 CKB 上。Polyjuice 的设计指标是与 EVM 100%,甚至 120% 兼容,这意味着:
- 任何在 Ethereum 上运行的基于 Solidity 的智能合约都能够在 Polyjuice 上运行;
- Polyjuice 甚至能够提供更多明天在以太坊上无奈实现的性能。比方你当初急需一个 EIP,Polyjuice 能够实现它来辅助你的 dApp;
须要留神的是,兼容性设计只实用于 EVM,Ethereum 也有反对的 RPC,应用程序能够通过 RPC 与链通信。遗憾的是,因为 Polyjuice 和 Ethereum 之间的设计不同,咱们不能保障与 RPC 齐全兼容。这意味着将您现有的 Ethereum dApp 在部署到 Polyjuice 之前须要做一些工作。
不过,咱们将确保
a) 智能合约不须要更改;
b) 两套 RPC 彼此类似。
咱们会将这些差别分明地记录下来。这样一来,移植工作会尽可能地缩小。咱们还将构建与 Portal Wallet 的集成,因而终端用户能够取得无缝的体验。
咱们在 2020 年 7 月份推出了 Polyjuice,之所以再次提到它,是因为咱们对 Polyjuice 进行了全面的审查和检修,并修复了它最大的问题:解决共享状态。
为了演示共享状态,咱们假如开发者曾经将一个 Ethereum 智能合约部署到 Polyjuice 上。在咱们之前的模型中,人们会创立这样一个 Cell:
要调用这个智能合约,必须要创立一个 CKB 交易,耗费该合约 cell 并创立一个新的合约 cell。
这就是问题所在:当多个用户调用同一个智能合约时,他们都须要耗费并从新创立合约 cell。实际上,他们在竞争共享的合约状态 cell。在大多数状况下,用户不会晓得其他人正在创立的交易;他们中的每一个都会应用链上最新的实时合约状态 cell 创立一个交易。
这会导致多个交易耗费同一个合约状态 cell,矿工不得不抉择一个交易,而这会导致所有其余交易有效。这是 CKB 抉择基于 cell 模型造成的后果,但这不肯定是毛病:
- 不须要繁多共享状态的状况还有很多,sUDT 就是这样一个例子。对于这些状况,基于 cell 的模型提供了改良,比方进步了可扩展性和确定性;
- 即便在共享状态不可避免的状况下(如投票利用,或 AMM),也有解决方案:
在许多状况下,能够利用简略的重试逻辑:能够创立这样一条规定「只有交易蕴含输出 1 和输入 1&2,我就不关怀输出 0 是什么,只需签名并发送交易」。也能够给规定附加一个超时工夫,比方 10 分钟的窗口。对于绝对较小的 dApp 来说,比方投票利用,这曾经足够了。
如果有些状况有其余需要,例如更高的 TPS 需要,那么重试逻辑就不可行了。Rollup 在这里提供了一个不同的计划。通过在 Godwoken 之上构建 Polyjuice,每个独自的 Polyjuice 交易就能够只是一个 Layer 2 的 Godwoken 交易。这样就防止了共享状态问题,因为只有打包好的 Godwoken CKB 交易才会耗费合约状态 cell,并从新创立一个更新后的状态 cell。
在这里,Godwoken 和 Polyjuice 是互补的:Polyjuice 提供了一种将自定义逻辑注入到 Godwoken 的 Rollup 解决方案,Godwoken 解决了 Polyjuice 的共享状态问题,同时也提供了更高的 TPS 后劲。 咱们心愿 Godwoken 和 Polyjuice 的联合,能对 Nervos CKB 仙境中的分层 dApp 设计有所启发。
值得指出的是,Polyjuice 并不是 Godwoken 的惟一虚拟机解决方案。咱们还能够将其余虚拟机与 Godwoken 集成,提供不同的 dApp 构建形式。例如,纯正的 JavaScript 虚拟机(https://github.com/xxuejie/ckb-duktape) 是齐全能够实现的,因而咱们只需在区块链中间接用 JavaScript 编写即可。或者作为更远大的指标,在 Godwoken 的帮忙下 CKB 上的 Diem(https://www.diem.com/en-us/) 也齐全能够实现。
(为进一步解释 Polyjuice 的内部结构,咱们也将于近期发表另一篇题为《Life of A Polyjuice Transaction》的文章。)
展望未来
在 Nervos 中,咱们心愿投合两种不同的开发者群体:
- 对于繁忙的利用开发者来说,咱们心愿提供一站式的解决方案,让他们能够间接利用 Layer 2 EVM 驱动的区块链来公布他们想要的任何货色。例如,如果咱们通知你,Uniswap (https://uniswap.org/) 只需进行大量的调整,就能够部署到 CKB 上,那会怎么?
-
对于更有冒险精力的人来说,CKB 提供了完满的乐高格调部件,你能够本人装配和从新组装。
- 不喜爱通过 Solidity 来编写智能合约?为什么不在 Godwoken 上搭建本人的虚拟机来实现不一样的 Rollup 链呢?
- Optimistic Rollup 听起来很无聊?您能够随便将其取出,并将其替换为更具挑战性的局部,比方 ZK Rollup。
- PoA 的机制对你来说像是定时炸弹?那就把它删掉,用你本人的 PoS 甚至 PoW 计划吧。
总而言之,咱们心愿这个全新的 Layer 2 Godwoken/Polyjuice 在 CKB 上的部署,能够相似于你可能习惯的汽车:你能够从经销商处购买后将它开走(原厂),也能够关上它加装涡轮增压器,从而取得更强劲的能源。咱们曾经做好了筹备,你最终会对你全新「汽车」的所有改装感到诧异。
粉丝福利流动
-
流动规定:
- 关注 Nervos 官网号——「NervosNetwork」;
- 在本文评论区留言写下对本文的一些认识;
-
流动处分:
- 咱们将会从评论区中筛选 1~5 条精彩评论,每人将取得一枚能够兑换星巴克咖啡的 COFFEE Token(兑换细节可戳这)。
-
注意事项:
- 同一个地址,只能支付一次处分;
- 若发现流动中有舞弊行为,将勾销其流动参加资格。
- 流动工夫:
2021/1/21 12:30 – 2021/1/23 18:00
// 如果你喜爱 Nervos 并且喜爱开发
// 你能够关注并私信我哦~
if (you like Nervos && you like dev) {println("you can follow me and private letter for me~");
}