本文是《思考去中心化》系列其中的一篇。文中我们探究了为什么开发者不想采用一体化应用程序框架(无论完全基于一个主网进行交易,或者采用一个与主网连接的侧链)。相反,我们发现了通过链间通讯或类似机制连接到公有主网的多弹性侧链是一个更好且更灵活的解决方案。

侧链的定义
侧链是一种连接着某个主网(通常是像以太坊这样的公有网络)的区块链网络。在区块保存交易数据方面,侧链的底层哲学与主网相同,但它可能采用一个不同的共识算法和/或验证模型。侧链可能提供主网没有的功能,例如额外的存储选项、许可访问、零知识证明和/或替代费用机制。

当您对比了其他现代应用开发环境中的架构模式后,可能就不会对采用多弹性侧链来组织和创建区块链解决方案感到惊讶。以下为一些值得关注的模式。

来自数据库的教训

数据库的历史经验表明,某个应用程序共用一个数据库并不是最明智的做法。在应用或服务进行测试时可能会这样做,但如果系统的事务或数据负载是任意的,那么调整数据存储和访问的方法是成功构建和扩展系统的必要步骤。

几乎每个应用程序都有用户数据、事务数据、登录凭证、媒体文件、用户输入、关系关联、分析数据以及其他种类和形式的数据。使用单个数据库保存所有这些形式的数据不仅不切实际,而且以目前的技术几乎无法实现。对单个数据库进行所有应用的查询,无论这个数据库是怎样分片或索引的,它都会很快崩溃,并且给未来的开发带来极大难度。

相反,大多数架构为不同的数据格式以及(对数据进行操作的)事务进行存储调整和优化。为了快速读取,用户数据可能保存在一个横向分片的NoSQL数据库中;为了快速索引,事务数据可能在关系数据中建立大量索引;媒体文件采用块存储;分析数据采用时间序列数据;关系和关联则采用Graph DB等等。每个数据库都根据读写负载、数据大小和格式、数据模式、提交时间和延迟需求、查询类型、安全需求和许多其他参数进行优化。同时还要考虑到数据存储量以及索引的数量和类型在未来的增长问题。

数据科学和CAP定理

CAP定理是数据科学领域的一个术语,它规定分布式数据存储在一致性、可用性和分区容限方面最多只能同时提供两个保证。因此,在选择特定的数据存储类型时,应用开发和数据库工程师常常面临着权衡,优化对特定应用功能或服务最重要的指标。

对于大多数应用程序开发者和架构师来说,使用不同的数据库(每个数据库都有特定的类型和用途)只是一种常规操作。

数据存储类型及特点

来自微服务的教训

在事件和事务处理方面,也面临着上述情况。应用开发者通常将应用程序作为一组服务,而不是开发一个一体化应用,编译或连接到某一个可执行文件并处理所有用户操作和副事件。这些服务在功能上彼此独立,通过API或远程过程调用(RPC)联系在一起,或者使用消息队列、数据库、无服务器函数调用或其他机制来编排应用程序的工作流。

虽然看起来微服务让开发复杂化了,但实际情况正好相反。将应用程序作为一组微服务来开发不仅加快了开发速度,还让扩展应用和添加新功能变得更加容易。

对于一体化应用,它的代码库会不断随着代码和测试冲突的不断变化和更新。在任何一个计划版本上进行更新都非常困难,因为它涉及到的测试数量和意外后果的风险都在增加。使用微服务,变动更加容易隔离,从而实现加速开发进程、降低风险和更频繁地更新。

一体化架构 vs 微服务架构

拥抱区块链

当使用区块链网络开发去中心化应用时,很多关于“隔离”的原则同样适用。与单个区块链网络或侧链(例如以太坊主网)相比,使用连接到公共主网的多侧链更有意义。

尽管市场上有很多声音认为,扩容一层网络(Layer 1)会消除对二层网络(Layer 2)解决方案的需求,但这并不是多数开发可扩容dApp开发者的观点。在2019年10月的Scalar Capital峰会上,Dharma的CEO兼联合创始人Nadav Hollander谈到,尽管可扩展的一层网络会逐渐出现,但二层网络解决方案的需求会一直存在。

“大多数下一代区块链的主要卖点是可扩展性——Layer 1可扩展性——但它们似乎都在使用分片(sharding)的不同变体。分片的棘手之处在于,它并非解决DeFi可扩展性的灵丹妙药。在这里我不会讨论过多的技术细节,但是即使是像ETH2这样的系统,高流量的DeFi协议很可能仍然需要开发非常复杂的可扩展Layer 2系统。这一切都说明L1可扩展性的好处很重要,但它并不能完全解决DeFi协议的问题。”
-- Nadav Hollander,Dharma的CEO兼联合创始人

采用Layer 2解决方案(例如弹性侧链)几乎是开发任何类型可扩展去中心化解决方案的必要条件。去中心化应用本质上就是一个应用程序,因此面临着不同类型的用户事件、处理需求、作为一个中心化应用的数据访问方法。一个去中心化世界开发者依然需要关心存储、功能开发、数据类型、事务和提交延迟等诸多问题。

区块链不仅带来复杂性——包括提交时间、交易费用、存储和处理约束、以及智能合约的持久性——另一方面也引发了额外的关注。其中一个关注点是不采用一体化的思考方式,转而拥抱多侧链的智慧。

采用多侧链的几个原因

提高开发灵活性

采用弹性侧链能够简化去中心化应用和协议的开发,因此部署速度也更快。侧链的使用不仅有助于分离处理和数据问题,还支持团队动态开发。就像在一体化中心化应用中,团队处理同一个代码库或数据库时产生摩擦一样,在某一个主网或侧链中运行所有的交易可能会造成一个操作有力地阻止其他操作的情况。

在开发高度同步的时候,遇到沟通问题或团队调动不仅耗费时间(原来可以更好地开发),还会降低开发速度。而使用多侧链——同时使用一个高效链间通讯解决方案来管理状态和/或同步操作——会减少开发摩擦并让项目更快启动。

新应用vs现有应用

值得注意的是,弹性侧链可以同时为新dApp以及现有的dApp赋能。

对于dApp,一开始就使用侧链很有意义。原因是开发者可以从一开始就构建可扩展的系统,在开发过程中则无需进行重大的调整(如果需要的话)。使用侧链还可以减少gas费用和投入时间,从而取得更好的成果和/或dApp经济。

对于现有的dApp,添加新功能或将现有功能从主网迁移到弹性侧链不仅很容易实现,而且风险更低(除了正确设置侧链和执行智能合约以外)。迁移到侧链的原因可能是提升交易吞吐量、降低gas费用、支持更复杂的智能合约,或者需要更大的侧链存储。开发者为特定的事务和/或数据类型创建一个侧链,能够调整和优化该链的功能。

弹性侧链提升了开发的灵活性

提升性能

在任何应用中,事务提交时间和响应延迟都是一个重要因素,并且去中心化应用情况更为严重。中心化应用的提交时间是毫秒甚至微秒级的。而去中心化应用的提交时间可能是分钟级的(取决于网络负载和gas费用,甚至可能为小时级)。Layer 1扩展解决方案能够缓解这个问题,但除了最简单的dApp之外,它们不太可能支持所有的事务类型和提交时间。

弹性侧链则允许您对交易类型进行优化。某些事件和交易类型对资产的完善可能至关重要。另一些事件和类型对做市商或游戏很关键,而其他一些可能没那么重要。后者的一个例子是一个去中心化媒体流应用中的社会行为——喜欢、关注、分享,或其他可以作为背景事件处理的行为,我们乐观地假设它们都成功提交。

因此,每种类型的事件都有不同的交易提交时间。资产转移可能具有更高的优先级,因此需要优化,减少提交时间(包括优化一个或多个主网的通讯)。内部应用操作可能也有需要非常高的性能,但也可能完全运行在一个或多个侧链中,这些侧链是专门针对数据和事务类型定制的。

但是请注意,并非所有的侧链都是相同的。您应该使用一个包含验证模型的侧链,它不仅支持您的性能需求,而且还具有合理的共识机制和安全措施,以确保交易的有效性和dApp的完整性。

提升网络经济

中心化应用和去中心化应用的另一个显著区别是交易成本。中心化应用程序的交易成本极低。当然,它们需要处理和存储成本,但都基于每个事务,因此成本微乎其微。这个极低的成本与在公有区块链网络交易所需的gas费用形成了鲜明对比。举以太坊的gas费为例,一次交易需要几美分甚至数美元。

这些费用的存在使得应用中的每一笔交易都在主网中执行不切实际。因此,侧链是一个最好的机制,将状态间交易从最终状态交易中分离出来,从而降低操作成本并改善应用或协议的经济性。换句话说,转向弹性侧链的应用可以大大降低甚至无需gas费用。但是重要的状态变化(例如资产创建或转移)还会被提交到主网上,此外几乎所有其他的交易都可以在侧链上执行。

增强存储功能

与中心化应用一样,去中心化应用也有不同的数据类型和格式及其对应的索引和读写负载。这些差异将决定哪些内容写入主网,哪些存储到侧链,哪些又通过去中心化(或中心化)进行存储。主网主要用于记录加密资产、代币或其他数字资产的所有权,以及任何转移、存款或其他状态更改。通过适当的链间通讯和/或资产锁定机制,这些资产的其他用途或状态变化可以很好地反映在侧链中。

一个例子就是去中心化纸牌游戏。赌注可能放在在主网上(每个玩家投入资金),但是牌牌交易和转移则记录在侧链上,每个玩家都签名自己的卡牌,然后发送给其他玩家。只有在游戏结束以及在结算赌注的情况下才会考虑动用主网。

再以一个去中心化媒体流应用为例。如某个去中心化音乐服务或去中心化YouTube平台。这类系统的数据包括媒体文件和与文件相关的元数据(标题、艺术家、描述、长度)、回放指标,社交指标(喜欢、分享、关注),用户数据(评论、播放列表),历史支付记录等等。由于各种原因(gas成本、存储限制、读入延迟等等),这些数据不会完全存储在某一个主网(或IPFS)上。

然而,多侧链会简化数据处理,大大降低操作成本。原因在于应用开发者可以优化数据的读写,将数据写到适当的位置,同时综合考虑存储费用、提交时间、访问和查找机制等等。

存储选项从主网扩展到侧链,再到去中心化(和中心化)存储

提升处理复杂度

弹性侧链一个被忽视但很重要的方面是处理复杂性。某一个主网的处理能力有限。任何一个比资产变更(创建、转移、销毁)更复杂的操作可能都需要更高的gas费用和更长的提交时间。考虑到主网智能合约的公有性,复杂性会导致更高的风险。采用侧链不一定能消除合约逻辑上的风险,但它可以隔离影响和/或减轻错误的严重程度。

编写更复杂智能合约的主要优点是,它为开发者提供了更丰富的功能——在加密领域中,这些功能只会不断增加。处理全状态合约意味着对区块链链的完全访问。也就是说,在已知某区块链完整状态的情况下,可以更精确和及时地执行状态更改。从gas费用中解放出来也意味着有更大的空间去调用其他协议,使用预言机,或者使用可能提供的侧链功能(例如随机数生成器)。在侧链中执行这项工作本质上提供了一个安全网络——让开发者自由地更快地行动和创新,同时严格控制gas成本。

使用SKALE网络

SKALE网络是一种弹性区块链网络协议,同时也是SKALE Labs的创造者。其愿景是让创建运行全状态智能合约的低成本、高性能侧链更简单快捷。SKALE网络旨在不牺牲安全性或去中心化的前提下,为开发者提供快速与功能的高效体验。您可以在电报推特Discord上关注我们,访问SKALE网站和查看开发者文档了解更多信息。

SKALE网络背后的开发理念与使用多个弹性侧链的观点直接一致。快速部署和扩展侧链的能力、使用联合验证模型进行可靠的验证(即使是小侧链)、可扩展节点配置和全状态智能合约执行,这些仅仅是SKALE网络作为弹性侧链的几个优点。

我们希望您花时间研究一下SKALE的这些优点,最好与开发者聊聊。我们非常乐意解答您的疑惑,与您一起参加在线黑客会议,讨论使用SKALE的想法等等。弹性侧链不仅成为现实,如果想快速启动,解决可扩展性性问题,降低运营成本,开发下一个伟大的去中心化应用,它们更是您最好的一个选择。

免责声明——本文件仅供参考之用,并不构成出售N.O.D.E.基金会、SKALE Labs, Inc.或任何相关或关联公司的股份或证券的要约或邀请。任何此类要约或征求仅应通过保密的要约备忘录,并根据适用的证券和其他法律作出。