——背景——
当前,区块链跨链平台的接入方式在架构设计上存在着较大差异,如何将应用链快速、便捷地接入跨链系统是一个亟待解决的问题。趣链BitXHub跨链服务平台采用中继链+网关的跨链方案,其中,跨链网关担任着区块链间收集和传播交易的角色。采用插件机制的设计将网关与应用链交互的模块与跨链网关核心功能模块进行解耦,从而实现不同种类应用链高效地接入跨链系统。在Pier运行时,通过动态加载插件的方式完成不同应用链的灵活适配。为了更好的提升Pier与应用链的交互能力,具体应用链插件需要根据不同区块链的特性实现具体的接口,交互接口需要满足以下几个功能:
1)监听应用链上的跨链事件并传给核心模块进行处理;
2)执行来自于网关发出的跨链请求;
彭博社:欧盟委员会今日将制定推出数字欧元的计划:6月28日消息,欧盟委员会今日将制定推出数字欧元的计划,并为欧元区建立主权数字货币。彭博社表示,根据相关规则草案,要求欧洲央行对其使用设定限制,但没有提出交易或持有的具体门槛。[2023/6/28 22:05:28]
3)能够主动查询应用链上已收到和已执行的跨链请求状态。
在插件实现方案的设计中,我们先后采用了两种不同的插件机制,下面就来介绍一下我们使用原生插件时碰到的问题以及新插件方案的优势。
——原生插件——
go语言从1.13版本开始支持编译为插件,使用方式如下
gobuild--buildmode=plugin-oappchain.so*.go
Binance.US收购Voyager资产的最终听证会将于3月2日举行,用户回收资金价格的计算日暂未确定:1月16日消息,针对Binance.US收购Voyager资产的进程,Voyager无担保债权人委员会在推特上表示,招标完成后,该交易的利益相关方有28天的时间提出异议,异议截止日期为2月22日,最终确认该笔交易的听证会定于3月2日举行,该听证会提供一周的时间来回应听证会前的任何异议。
此外该委员会表示,尽管Binance.US向UCC保证,转移的加密货币将受到保护,但鉴于FTX的意外崩溃以及加密货币行业的盗窃和欺诈风险,UCC向Binance.US寻求更大的保护。即根据修订后的购买协议,即在交易结束后,加密货币将从Voyager每周转移到Binance.US,而被转移的加密货币是将立即分配给债权人账户的加密货币。
此外,针对推特用户关于“客户资金回收是基于哪一天的价格”以及“是否有基于个人账户计算回收估计的电子表格”,此外该委员会回应称,Binance.US为Voyager加密货币支付的价格将在接近交易截止日期的未来日期确定。加密资产的公平市场价值将决定客户的资产回收率。客户将获得统一的百分比回收,无论他们持有的加密资产(包括USDC)如何。请注意,此回收估计是基于12月18日的现货价格,因此实际回收将根据Voyager加密货币的价值而有所不同。
此前1月11日消息,美国法院初步批准Binance.US以10亿美元收购Voyager资产。[2023/1/16 11:14:12]
go项目在编译时可以通过--buildmode指定为插件模式,这种方式将输出为动态链接文件。该文件并非可直接运行的二进制文件,而是提供给其他二进制运行时的动态调用。
美会议员:FTX的行为就算在100年前也是非法的:金色财经报道,美国众议院金融服务委员会成员、马萨诸塞州民主党众议员Jake Auchincloss表示,无论是什么新技术,FTX的行为可能违反美国已经存在的规则。 “FTX的灾难只是对美国明确一致的可预测立法的需求的又一个警示。FTX犯下的罪行不是一些特定于技术、顶级的、2022年时代的罪行,他们就算在100年前也是非法的。你不能那样做。”(The Block)[2022/11/17 13:14:11]
在主二进制文件中的使用方式如下:
总结来说原生插件具有以下特点:
Talos已将Amber Group添加为新的流动性提供商:金色财经报道,由于亚太地区对加密交易和投资的需求不断增加,机构加密交易平台 Talos 已将 Amber Group 作为其最新的流动性提供者。
该合作伙伴关系将允许 Talos 的用户从 Amber Group 的 WhaleFin 平台为其交易获取流动性。Talos 亚太区负责人 Samar Sen 表示,针对机构投资者的产品对于经验丰富的机构投资者的行业增长至关重要。Amber 加入了 Talos 的合作伙伴网络,该网络由 40 多个流动性场所组成,其中包括 Binance、Coinbase 和 FTX 等加密货币交易所以及其他场外交易公司。[2022/11/2 12:08:48]
优点:
1)使用体验和原生代码一致,类似于代码模块的二进制化;
2)效率较高,插件直接在主程序进程空间中运行。
缺点:
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团队
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。