一文读懂「跨链网关的模块化进程」插件机制演化_RPC:PLU

——背景——

当前,区块链跨链平台的接入方式在架构设计上存在着较大差异,如何将应用链快速、便捷地接入跨链系统是一个亟待解决的问题。趣链BitXHub跨链服务平台采用中继链+网关的跨链方案,其中,跨链网关担任着区块链间收集和传播交易的角色。采用插件机制的设计将网关与应用链交互的模块与跨链网关核心功能模块进行解耦,从而实现不同种类应用链高效地接入跨链系统。在Pier运行时,通过动态加载插件的方式完成不同应用链的灵活适配。为了更好的提升Pier与应用链的交互能力,具体应用链插件需要根据不同区块链的特性实现具体的接口,交互接口需要满足以下几个功能:

1)监听应用链上的跨链事件并传给核心模块进行处理;

2)执行来自于网关发出的跨链请求;

阿联酋CBDC战略第一阶段将于2024年年中完成:3月24日消息,阿拉伯联合酋长国央行周四宣布,预计将在2024年年中左右完成其央行数字货币战略的第一阶段。这包括批发和零售CBDC的概念验证工作。

此前消息,阿联酋中央银行 (CBUAE) 透露了与该地区云平台G42 Cloud和总部位于纽约的区块链公司 R3 的合作,分别作为CBDC基础设施和技术提供商。[2023/3/24 13:24:21]

3)能够主动查询应用链上已收到和已执行的跨链请求状态。

在插件实现方案的设计中,我们先后采用了两种不同的插件机制,下面就来介绍一下我们使用原生插件时碰到的问题以及新插件方案的优势。

——原生插件——

go语言从1.13版本开始支持编译为插件,使用方式如下

信用评级机构Moody’s因Coinbase收入和现金流生成能力减弱下调其信用评级和高级无抵押票据:1月21日消息,信用评级机构 Moody’s 下调 Coinbase 的长期信用评级及其有担保的高级无抵押票据,其理由是 Coinbase 的「收入和现金流生成能力大幅减弱」以及「加密资产运营环境的挑战性条件」。目前,Coinbase 的企业家族评级(CFR)已从 Ba3 下调至 B2,高级无抵押票据已从 B1 下调至 Ba2。尽管 Coinbase 于 1 月 10 日宣布裁员 950 名员工,但 Moody’s 预计「其盈收能力仍将受到挑战」。本月初,评级机构标普也出于类似原因下调对 Coinbase 的长期信用评级和高级无抵押债务评级。[2023/1/21 11:24:44]

gobuild--buildmode=plugin-oappchain.so*.gogo项目在编译时可以通过--buildmode指定为插件模式,这种方式将输出为动态链接文件。该文件并非可直接运行的二进制文件,而是提供给其他二进制运行时的动态调用。

北京六部门:加大对科技创新企业全链条金融支持力度:7月3日消息,近日,北京市金融监管局,北京市科委、中关村管委会,中国人民银行营业管理部,北京银保监局,北京证监局,海淀区政府联合印发《关于对科技创新企业给予全链条金融支持的若干措施》(以下简称《若干措施》),加大对科技创新企业的创业投资、银行信贷、上市融资等多方式全链条金融支持力度,打造多层次、专业化、特色化的科技金融体系,有力支撑北京国际科技创新中心建设。(央视新闻)[2022/7/3 1:47:28]

在主二进制文件中的使用方式如下:

总结来说原生插件具有以下特点:

优点:

1)?使用体验和原生代码一致,类似于代码模块的二进制化;

2)?效率较高,插件直接在主程序进程空间中运行。

报告:比特币与美股的相关性减弱:金色财经报道,据加密市场数据提供商 Kaiko 报告显示,比特币上周与美国股市相关性减弱,将其连续跌幅扩大至创纪录的 8 周。比特币、标普 500 指数和纳斯达克 100 指数的 30 天滚动相关性尽管保持在 0.7 左右的高位,但它已跌至一个多月以来的最低水平。

美联储 FOMC 会议 5 月 3 日至 4 日会议纪要的强硬程度低于预期,再加上通胀放缓和消费者支出上升,支撑了风险资产的缓解性反弹。标普 500 指数和纳斯达克 100 指数分别上涨 6.6% 和 7.1%,结束了连续 7 周的跌势,但冒险情绪未能蔓延到加密货币领域。[2022/5/31 3:51:50]

缺点:

1)原生插件中的依赖库与主程序必须保持完全一致,否则启动的时候会报错,而且不论这个依赖是直接引用还是间接引用,都会出现这个问题。

——转战RPC插件——

原生插件中严厉的版本限制,使得在升级插件和或网关主程序功能时,可能因为无意升级了主程序某些依赖,插件也必须作出相同的适配升级。这种方式不利于插件的完全解耦,因此我们转向了另外一个使用RPC方式的GO插件项目。

在GO原生支持的插件机制出现之前,hashicorp的go-plugin就已经存在,不过GO原生插件出来之后,他们也并没有放弃对该项目的支持,因为总的来说原生插件并不是很完善,在某些场景下还是go-plugin更方便。

go-plugin插件的使用方式如下:

简单来说,go-plugin项目实现的插件方式采用了C/S模式,主程序作为RPCClient,具体插件作为RPCServer,Server和Client通信也是基于的interface接口规范来通信。

具体使用流程如下:

1)抽象需要插件化的interface,这里直接复用原生插件中使用的接口定义即可;

2)针对Client端和Server端,都实现上述接口。Server端的实现是具体的插件处理逻辑部分的代码;Client端的实现只需封装一下gRPC处理的结果和异常信息,之后便可以做到主程序在使用插件时对于gRPC的弱感知化。

Server实现部分:

Client实现部分:

▲额外需要注意的是:

插件中需要调用plugin.Serve来授权主程序使用自己的RPC服务。这里需要注意的是,主程序和插件通信前需要进行握手,主要包括确认该插件的版本信息。主程序使用plugin.Client对象启动插件,该插件是运行在另一个进程中的,所以插件崩溃并不会影响到主程序。client与server在使用中实际上是通过进程间Socket来完成通信,这虽然牺牲了一定的性能却换来了原生插件的单进程方案所不具备的依赖解耦?多语言支持等灵活应用。——结语——

go-plugin提供两种通信方式的选择,一种是GRPC,一种是GO语言标准库中自带的net/rpc。GRPC插件的好处是可以采用不同的语言来实现,并且Googleprotobuf也是支持多语言的。网关插件本质上已成为连接应用链并实现对网关提供RPC服务的桥梁,开发者在跨语言编写插件时的阻碍会大大降低,在面对不同应用链特性时也能做到更加可靠与简洁的逻辑呈现。

作者简介

王荻矣?趣链科技数据网格实验室BitXHub团队

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

水星链

[0:15ms0-0:967ms