http://www.7klian.com

一文读懂验证引擎的设计理念

 

对付WASM法则,我们可以通过rust来编写验证法则,中继链中的WASM虚拟秘密求法则的字节码切合wasi尺度,所以BitXHub提供了rust编写WASM合约法则的模板。验证的进口函数为start_verify,而对付较量贫苦的wasm的输入输出BitXHub已经提供了一套读写方案,用户只需要在contract.rs文件中编写本身所想要验证的内容即可,很是便捷易用。

本文作者:趣链科技数据网格尝试室

 

 

BitXHub验证引擎办理了在跨链场景中一直所被体贴的跨链生意业务如何担保内容的正确性和生意业务的有效性问题,而可定制插拔的验证法则机制也使得差异范例的区块链生意业务内容和有效性的验证成为了大概。

三、编写验证法则

可以看到在一笔跨链生意业务达到中继链之后,验证引擎会先查抄生意业务的顺序是否是正确的,然后通过IBTP的From字段获取来历链的ID,通过这个ID在法则打点模块中得知验证引擎需要哪种范例的验证器来对生意业务举办校验。假如需要的是WASM验证器,那么验证引擎就会将对应的WASM字节码加载到WASM虚拟机中。

 

下面我们以Fabric1.4为例先容一下验证法则的逻辑和如何用rust编写WASM验证法则合约。

验证引擎的另一个部门是验证器模块的执行层,也是验证引擎最主要的部门,下图是验证引擎执行的主要流程图:

验证引擎的设计回收了验证器的插拔式设计,即对付差异的跨链生意业务所回收差异的验证法则计策,验证引擎会按照法则地点来判定回收差异的验证器举办验证。现阶段的验证引擎支持Go内置验证器和WASM虚拟机验证器。下面将对两种验证器别离举办先容:

 

第一种验证器是Go内置验证器。这个验证器是为一些常见的和默认法则提供的利便挪用的验证器。原生的集成在了BitXHub的中继链中,譬喻对付常见的Fabric区块链,BitXHub的中继链提供了一个默认的法则地点,用户只要通过注册这个地点的法则就能直接挪用默认的Fabric验证法则对跨链生意业务举办验证了。

第二种验证器是WASM验证器。这个验证器是利用了wasm虚拟机作为法则的执行器来举办验证。由于wasm的特性,利用这种验证器可以答允用户利用差异范例的语言编写验证法则,好比C,rust可能Go等。同时wasm自己的运行机能也要高于许多区块链的合约虚拟机,譬喻evm。用户只需要用本身喜欢的语言编写好验证法则,编译成wasm的字节码就可以陈设到中继链上了。

BitXHub跨链体系中,验证引擎是跨链生意业务中不行缺少的一个重要构成部门。验证引擎主要提供了对跨链生意业务背书法则合约陈设执行,对跨链生意业务背书验证和内容验证的成果。本文主要从验证引擎的设计、陈设执行流程以及验证法则编写等方面举办先容。

BitXHub的中继链内置了法则打点的合约,跨链网关通过挪用内置合约就可以将本身对应的应用链的验证法则注册到中继链上。假如验证法则挪用的是GO内置的验证法则,用户只需要将对应的内置法则的地点注册到中继链即可。假如用户想要定制本身的验证法则,先将wasm的字节码陈设到中继链上,再将合约地点做一个关联即可让验证引擎在验证阶段对验证法则举办挪用了。

二、 陈设执行流程

当验证器初始化完毕今后,验证引擎就会将对应应用链的验证者信息和需要验证的生意业务的IBTP的proof字段和payload字段传入到验证器中,为了防备恶意者举办犯科的跨链生意业务,验证器会对proof字段的背书信息举办签名校验,假如背书的签名信息与事先注册在中继链的应用链的验证者信息相匹配,那么暗示背书验证通过,验证引擎会继承举办跨链生意业务的内容验证,将IBTP的payload字段和proof字段里的内容举办比对,假如两者一致则暗示验证通过,那么跨链生意业务就会被传入到中继链的执行引擎中继承执行并完成跨链生意业务。假如背书验证可能内容验证有一项不匹配,验证引擎就会返回验证不通过的错误,跨链生意业务就不会继承执行,并将错误返回给来历链的跨链网关。

一、整体设计

验证引擎的整体架构设计如下图所示:

我们知道Fabric对付智能合约的执行是在背书节点长举办的,每一个背书节点城市模仿执行chaincode,在模仿执行完chaincode之后,背书节点会对模仿的功效和抛出的事件举办封装,之后再举办签名背书。最后将背书功效发送给客户端。客户端在比拟模仿执行的功效之后将背书功效发给orderer节点举办排序,最后在提交阶段会抛出chaincode的事件。

从整体设计我们可以看到验证引擎主要分为两部门,一部门是验证器模块,另一部门是法则打点模块。只有通过法则打点模块陈设了验证法则的应用链发送的跨链生意业务才气够通过验证引擎的验证。假如没有陈设验证法则,那么当一笔跨链生意业务传入中继链并进入到验证引擎后,验证引擎会因为无法找到对应的验证法则而返回验证失败。所以整个流程的第一步就是对验证法则的陈设。

 

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。