复合网于2021年3月正式推出独立链网络**(原名复合链),**为独立链,它的目标是成为一个统一的DeFi中心,实现跨链DeFi——你可以质押a链上的资产,借B链上的钱——从而连接所有链上的所有资产,提高整个网络资产的利用率和流动性。
gateway的出现基于以下判断:未来世界必须是一个多链世界,即没有区块链可以解决所有问题。未来会有很多链条和可能性。因此,人们的资产将被分配到各个独立的平台。如何提高这些去中心化资产的利用率是gateway研究和解决的问题。
**系统架构
**架构图A631
如帧组成中所示,**通过为各种链开发特定的starport(对等链上的组合或组件)来连接所有链。
本文不会对gateway的DeFi相关内容做太多描述。本文主要对gateway选择底层进行开发的原因进行了简要的分析。
为什么选择子州
复合官员;声明:
我们选择了底层,这样我们就可以专注于构建应用程序代码,而不是发明一致性算法;这是一个建立在现代语言Rust基础上的现代框架。
我们选择替代,这样我们就可以专注于构建应用程序代码,而不是发明一致性算法;它是建立在现代语言基础上的现代框架。
Rust是一种面向安全性的现代编程语言。至于生锈的好名声,本文不再赘述。感兴趣的朋友可以阅读《2020开发者调查报告》:铁锈再次成为***的语言。Rust几乎已经成为区块链开发的**语言,例如Polkadot,near;Solana;D单位,FileCoin;底层等均采用防锈处理。铁锈语言具有以下特点
内存安全:其独特的所有权和生存期设计理论上保证了不会发生内存错误。它解决了底层系统中70%的缺陷
并发安全性:在并发编程(多线程、多道程序设计)中,可以保证并发安全性
高性能:与C/C++性能相当,是目前主流语言的**
零开销抽象:这个特性使rust能够无缝地连接C的现有生态系统,而不会损失性能
强大的抽象表达能力:rust利用了许多函数式语言的表达能力,使其表达能力更强
现代工程设施:现代化的辅助系统,如货物和工艺品。使生锈容易建立复杂的项目
活跃社区:rust从一开始就以社区模式迭代发展,这非常有趣。它与围棋的中心化开发有很大的不同
在了解了rust的这些特性之后,我们可以理解“rust语言几乎已经成为当今区块链开发的**语言”,这句话似乎很自然。区块链本身以安全为第一要务,这与生锈的设计理念完全一致。区块链需要做大量的计算,也需要高性能。生锈也是原因之一。区块链系统通常很复杂,对工程相关基础设施的要求很高。rust强大的工程设计使得它特别适合团队和开源社区开发中大项目的合作。
以注重安全著称的Paritytech开发了以太坊的;平价;客户。然后继续使用rust开发新项目Polkadot。在开发Polkadot的过程中,逐渐形成了一个重大决策:将区块链的所有功能分解为抽象设计,并实现为一个开源的、通用的区块链框架,并以此框架为工具构建Polkadot产品。而这一区块链框架的主要成果就是本文的主角、基质。
Abstract是rust语言开发的通用区块链开发框架。它的设计元素,如密码算法、存储结构、MPT树、帐户系统等,大多是指以太坊历史上最成功的基础设施(可以理解,paritytech最初是以太坊的客户,而Gavin wood也是以太坊的联合创始人之一。)。框架要具有普遍性,就必须高度抽象。然而,高抽象的代价往往很复杂,而且不易使用。因此,subside还提供了大量的DSL(domain specific language),方便新手学习和使用。综上所述,学科具有以下特点:
面向通用。它的设计是面向一般领域的,而不是专门为某个链开发的SDK。每个团队都可以使用基板来开发完全独立于任何现有网络的区块链(例如,使用基板开发的区块链可以独立于Polkadot,这也是paritytech的设计目标之一)。它几乎可以覆盖区块链的所有场景,可以说是目前市场上最全面的区块链框架。运行时代码被编译到wa中执行。Wa是当今区块链行业的主流VM字节码选择,具有强大的定制能力。抽象本身是一组去中心化的组件,可以在一组规范下自由替换和组合。
工程设计就是要做出权衡。当它强调一个方面时,另一方面就会有某种妥协。基质有其自身的缺点
一些新概念名词(如:外向)的引入需要重新学习和理解,有一定的门槛才能开始
对通用性的强调导致了某些方面的过度抽象和复杂的代码视觉(例如,有许多通用参数)。这些抽象充分展示了rust的**语法特性,而且代码是有噪声的
整个项目代码量大,依赖包多(目前有1000多个包),编译时间长(普通笔记本几十分钟以上),对开发机性能要求高
综上所述,这些不足主要是由于substrategeneral的设计目标带来的目标依赖复杂性造成的。
作为迄今为止最强大的区块链开发框架之一,子平台已经受到越来越多创新团队的欢迎,因此复合团队选择子平台进行**开发是很自然的。
物质的功能成分
底座6031总体框架图
从架构图可以看出,基板具有以下主要组件:
P2P网络
运行时
储存
共识
RPC远程过程调用
遥测客户端监视工具
P2P网络是区块链系统的重要子系统。多个节点通过P2P连接形成同一个网络。当消息在节点之间发送时,消息在网络中的传播可以通过多个中继节点到达。在底层,我们使用信任libp2p(https://github.com/libp2p/rust-libp2p )该项目主要由paritytech维护。
运行时,即运行时,是区块链业务逻辑的实现部分。换句话说,要用区块链做任何实际的事情,都需要在这里写出来。Abstract支持将运行时代码编译成wa字节码或本机代码模式(随着wa-VM运行速度的提高,本机代码模式可能会被放弃,这也可以降低一些内部复杂性)。存储可以在运行时操作来改变状态,所以整个运行时也称为状态转移函数(state transition function,STF)。
存储作为存储子系统,是区块链系统不可或缺的一部分。实质上,存储用于持久化运行时逻辑的状态变化,并且它还支持外部RPC状态读取接口。运行时中的事件将在发出之前在存储器中存储一段短时间。共识系统的目标是对存储状态达成一致。存储子系统在底部使用kV数据库rocksdb或paritydb。
共识,即共识子系统,用于在网络参与者之间就区块链的状态达成一致,即“共识”。因为它是一个分布式系统,所以所谓区块链的状态并没有一个宏观的视角来看待一个统一的宏观状态。这个状态实际上是每个节点的状态。每个节点都有自己的本地状态视图和“本地”全局视图。每个节点通过比较局部视图和全局视图来做出决策。共识系统应该在每个节点上达到共识状态,从而推动系统向前发展。
远程过程调用RPC是一个用于提供对外部节点的访问的接口。替代节点本身可以作为服务存在,外部世界可以通过这些RPC接口访问节点的本地状态信息或向节点提交更改请求。底层提供HTTP和websocketrpc通道。
遥测是一种客户端监控工具,用于采集节点的运行信息并发送到远程PromETHeus服务器。
基板的发展模式
实质是一个总的发展框架。它为不同级别的开发人员提供了三种开发风格。
直接使用基板的节点启动链
对于想要快速启动链条并体验效果的开发者,可以直接使用预设的底层节点实现。只需修改ON配置文件即可运行。您可以自定义以下内容:
创建块的状态信息
帐户
平衡
堆积比等
运行时框架托盘的研制
这种开发模式通过在运行时编写调色板代码将业务逻辑实现到调色板中。然后,将用户定义的palets及其依赖主题的palets编译成wa字节码来运行,这是大多数主题开发人员的选择。
基于替代核心的深度定制
抽象已经被实现为一个分布式组件,它是完全抽象和解耦的。对于一些**开发人员来说,在某些特定场景中,这些组件可以从底层完全重新组合,以实现深度节点定制。例如,我们可以:
使用不同的密码曲线和哈希算法
使用不同的序列化方法
替换不同的一致性算法
完全去掉框架层代码,用另一种语言编写业务,只要能编译成wa并遵循底层规范即可
等待
下图显示了开发难度的三个级别与技术灵活性之间的关系。
直接使用替换节点是最简单但最不灵活的方法。基于衬底核的开发是最灵活的,但也是最困难的。框架托盘的发展处于中间阶段。这也是大多数主题开发人员应该采用的方式。
基质的优越性
基板的设计有许多优点。我们来看看。
可升级无叉运行时
因为底层的运行时代码被编译为wa,然后wa字节码本身作为事务数据直接提交给链,然后通过链本身P2P网络的全网传播来更新业务逻辑。在接收到更新版本的wa字节码后,每个节点将其更新到代码段,并使用新版本的wa在一个块之后执行逻辑。
有了这种代码热更新机制,业务代码的升级将不再引起分岔(软分岔或硬分岔),也就是说,不会因为技术上的客观原因而引起网络分岔(人工主动分岔仍有可能)。
需要注意的是,本次升级仅限于wa字节码可以覆盖的部分,即运行时的代码。如果您更改节点代码本身(即运行时之外的部分),您仍然需要通知所有节点手动或使用Devops替换它。
可替换加密库
摘要同时支持多条加密曲线
ECDSA公司
Ed25519
SR25519
同时支持多种哈希
布莱克2
XX散列
开发者可以根据自己的需要选择使用。如果你没有你想要的,根据它的架构添加新的曲线和散列函数并不困难。
层次丰富的会计制度
基板的账户密钥分为三个层次
藏钥匙
控制器键
会话密钥
保管钥匙是用来存放资金的账户,其私钥应尽可能安全地存放在冷钱包中。控制器密钥用于控制验证器的参数。它也是隐藏密钥的中间**帐户。它在更新验证器集时非常有用。会话密钥用于签署共识相关的消息。可以有多个会话密钥,每个会话密钥都有自己的特殊用途,可以一起使用,例如:
输入不透明的密钥{
pub结构SessionKeys{
爷爷:爷爷,
酒吧宝贝:宝贝,
在线发布:ImOnline,
发布机构发现:发布机构发现,
}
}
上面的代码结合了四个独立的会话密钥:爷爷会话密钥、宝贝会话密钥、imonline会话密钥和authoritydiscovery会话密钥,形成了一个大的会话密钥。
会话密钥可以理解为验证程序运行过程中的唯一标识。**每次会话都更换会话密钥,以**限度地保证安全性。
通过这种分层的账号密钥设计,底层不仅保证了安全性,而且提供了充分的灵活性,基本可以覆盖所有应用场景的需求。
抽象可切换共识引擎
实质设计了一个共识框架,这是非常好的。它将提案和**定稿分开,并包含中本共识和BFT共识。
基板为块输出提供以下算法:
光环:插槽模式。在已知的权限中心化,循环模式用于依次生成块
宝贝:吃角子插槽模式。在已知的授权中心化,可验证的随机函数VRF用于随机选择块节点(每个时隙可以有多个块生成器)
POW:工作负载块
没有finalize gadget的配合,这些算法只能实现概率终结,而不能实现确定性终结。Abstract提供了finalize小工具,用于确定性终结。
分块算法和淘汰算法可以自由使用。所以有灵气/爷爷,宝贝/爷爷,甚至POW/爷爷。当然,在不需要确定的情况下,爷爷可以省略。实体赋予开发者充分的自由。
该框架还提供了一些其他基础设施:
Fork选择规则:长链规则或ghost规则,用于确定当链有分支时如何选择**链算法
导入队列:导入队列
块导入轨迹:块导入接口
块导入管道:块导入管道
它还提供了在运行时协调和控制共识过程的功能。例如,调整Pow运行过程中的难度、决定PoA是否转下一轮、动态修改PoS中的桩重等。
基于底层完整的基础设施,如果自己的一致性引擎不能满足开发者的需求,开发者也可以根据其规范开发自己的一致性引擎,将其引入到框架中,并在运行时对其进行适当的控制。
链外特性
链外特性是主题提供的非常强大的基础设施。毕竟对于区块链来说,链上逻辑操作的空间非常有限,有些事情必须通过链来完成。在off-chain worker(OCW)之前,这种事情通常由预言机完成。预言机是一个外部服务,它通过区块链节点的RPC接口向区块链提交事务,从而向区块链传输外部信息。虽然这种方法是可行的,但在安全性、集成性、可扩展性和基础设施效率方面还不够好。
为了使链下数据集成更加安全有效,底层提供了链外相关功能。框架组成如下:
链外工作者
架构图
链外特性由三个组件组成
外链工人
链外存储
链外索引
Off-chain worker用于实现Off-chain逻辑。它的代码与运行时代码一起编写,并被编译成相同的wa字节码字符串,在同一事务中传播到整个网络。然而,在执行时,链外工作者的代码在独立的VM中执行,这与运行时逻辑的执行完全分离。具体来说,链外工作者可以实现以下功能:
计算结果以事务的形式提交给链
包含一个功能齐全的HTTP客户端,可以访问外部服务的数据
您可以访问本地节点的密钥库,以便对事务进行验证和签名
本地kV数据库可以在所有链外工作人员之间访问和共享
局部安全熵源,用于生成随机数
您可以访问此节点的本地时间
它可以工作与睡眠和恢复
链外存储是链下逻辑上独立的存储空间,与链上的存储完全隔离。它具有以下特点:
它可以由非连锁工人读写
它本地存储在节点中,不会被传输到网络中的其他节点,也不会参与网络协商
所有同时运行的链外工作人员共享访问权限(因此需要锁定操作)。因此,它可以用来沟通不同的工人
可以由运行时代码编写,但不能读取。因此,它可以用来实现链上和链下的某些交互功能
它可以由wa环境之外的节点中的代码读取,因此可以由RPC读取
链外索引提供了在运行时环境中将数据写入链外存储的能力。但是,无法读取链外存储中的数据。这为一些新的编程范例提供了可能性。
还有一些,如完善的开放式课程整合测试框架等。
物质的链外特性非常强大,令人印象深刻。
一套完整灵活的燃气收费计算机系统
有以太坊开发经验的朋友都知道,燃气收费机制是一个非常成功的设计,对于链条的安全稳定运行非常重要。几乎所有后来的区块链都直接从这个设计中学到了东西。相比之下,它提供了非常完整和详细的机制和配置参数,帮助开发者设计自己的燃气收费算法。基板中内置以下气体计算和配置参数:
包括费用:包括长度费和重量费
费用乘数
额外费用,包括债券、存款、烧伤和限额
默认权重批注
动态权重
发货后重量修正
海关费用
自定义包含费
我们不会在这里详细解释每一项,请参阅此;网站。
由此可见,按基质计算煤气费的设计非常全面,甚至略显复杂。我们的目标仍然是实现一个通用区块链框架的目标——所有应该可用的东西,都是现成的。
Abstract非常适合启动Web3.0应用程序的独立链或appchains。一般来说,这些链将关注用户体验。例如,应用程序的普通用户在使用服务的过程中可能不知道煤气费的存在。在这种情况下,基板提供的上述富气收费机制可以将气费设置为零或设置为代付。这些特性有机会使substrate成为Web3.0应用程序最合适的开发框架之一。
运行时API与RPC的集成
Substrate提供了一组RPC扩展框架,允许开发人员扩展和开发自己的RPC接口(除了Substrate默认提供的接口之外)。因为RPC实现代码在节点中,在运行时之外,所以从理论上讲,您可以在底层开发全功能(做任何事情)RPC服务。这使得底层成为一个强大的RPC开发框架。
通常我们需要在运行时与状态交互,因此我们需要使用运行时API。运行时API是运行时内部和外部之间,或链上和链下之间的桥梁。
因此,RPC与运行时API的结合可以贯穿从外部请求到获取链上状态的所有过程。通过用户自定义的运行时API函数和RPC扩展接口函数,为开发人员提供了极大的灵活性和可能性。这也为衬底成为集成Web3.0开发框架奠定了基础。
gateway如何使用主题
为了了解gateway如何使用substitute,我们直接将其;源代码;让我们做一个简要的分析。
如您所见,主要内容如下(我们添加了简短的评论)。
以太坊/以太坊上的Starport合同代码
以太坊客户端/以太坊相关类定义和基本工具功能
与密码相关的**加密/**基本工具功能
集成/集成测试代码
节点/基板的自定义节点代码
我们的STD/gateway的STD代码是ustd的简单封装,添加了一些额外的代码
托盘/**独立链主要业务逻辑码
运行时/主题的运行时生成代码
派生/**类使用的依赖于类的过程宏
如您所见,目前gateway只实现startport到以太坊的连接,其他链的对接还在开发中,将逐步增加。
主要业务代码位于pallets/目录中,该目录有三个子目录。
现金/本金业务逻辑
预言机/从价格馈送器获取价格代码
运行时接口/一些运行时接口
让我们从pallets/cash/SRC/lib.rs开始。这是一个标准托盘文件,其结构为
特质配置的定义
去储藏室!定义链上的存储部件
死亡事件!定义事件输出部分
declu模块!定义模块实现部分
在模块实现部分,有FN offchainuuworker(blockunumber:T::blocknumber){}这个函数。其实现主要包括以下两个函数调用:
内部::事件::跟踪链事件::()
内部::通知::处理通知::(块号)
我们知道,在将每个块导入本地状态数据库时,将调用subjectworker条目的链外。也就是说,FN offchainuuworker(blockunumber:T::blocknumber)此函数由每个块驱动程序执行,每个块执行一次此函数。因此,对于每个附加的块,上面的代码将分别处理事件和注释,这两个块的代码在内部模块中定义。
在跟踪文件pallets/cash/SRC/internal/events.rs和pallets/cash/SRC/internal/notes.rs之后,我们可以整理出一般的逻辑点
每个块调用一次Offchainuuworker
在worker代码的offchain中,调用以太坊客户端/提供的以太坊基本类和辅助工具,向以太坊事件服务器发送HTTP请求,批量获取以太坊事件,并分类处理
处理完成后,结果将以事务提交给链内工作者的形式从链外发送
输入要处理的运行时业务逻辑
pallets/预言机/中的逻辑流程类似:在offchainin worker中,使用HTTP请求从price feeder的地址获取数据,然后提交给链以供使用。
在理解了上述过程之后,我们可以很容易地理解以太坊上的复合治理方案是如何影响**链上验证节点集的更新的。它仍然通过以太坊的事件抛出信息。事件服务器收集事件后,会缓存它们。每次向**的链外工作进程添加新块时,它都会转到事件服务器以批量检索**事件。获取**事件后,根据相应的逻辑进行迭代。要更新主题中的验证器集,需要使用主题提供的控制器帐户、设置密钥和其他相关功能。
受限于篇幅,我们的分析点到此为止,这里只简要分析了gateway palet-bold行的逻辑流程,然后重点分析了offchain worker部分。
由此可见,gateway充分利用了底层提供的基础设施,实现了业务逻辑、链上代码与链下代码的集成以及与其他链的交互。整个代码非常清晰,值得学习。
总结
本文介绍了gateway的总体架构、主题的功能模块、主题框架的特点,以及gateway如何充分利用主题提供的基础设施开发独立的链。
文章标题:复合材料为什么选择学科发展独立链
文章链接:https://www.btchangqing.cn/273615.html
更新时间:2021年06月05日
本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。