—— 背景 ——
当前,区块链跨链平台的接入方式在架构设计上存在着较大差异,如何将应用链快速、便捷地接入跨链系统是一个亟待解决的问题。趣链BitXHub跨链服务平台采用中继链+网关的跨链方案,其中,跨链网关担任着区块链间收集和传播交易的角色。采用插件机制的设计将网关(Pier)与应用链交互的模块与跨链网关核心功能模块进行解耦,从而实现不同种类应用链高效地接入跨链系统。在Pier运行时,通过动态加载插件的方式完成不同应用链的灵活适配。为了更好的提升Pier与应用链的交互能力,具体应用链插件需要根据不同区块链的特性实现具体的接口,交互接口需要满足以下几个功能:
1)监听应用链上的跨链事件并传给核心模块进行处理;
2)执行来自于网关发出(来自于其他应用链)的跨链请求;
3)能够主动查询应用链上已收到和已执行的跨链请求状态。
在插件实现方案的设计中,我们先后采用了两种不同的插件机制,下面就来介绍一下我们使用原生插件时碰到的问题以及新插件方案的优势。
—— 原生插件——
go语言从1.13 版本开始支持编译为插件,使用方式如下
go build --buildmode=plugin -o appchain.so *.go
go项目在编译时可以通过 --buildmode 指定为插件模式,这种方式将输出为动态链接文件。该文件并非可直接运行的二进制文件,而是提供给其他二进制运行时的动态调用。
在主二进制文件中的使用方式如下: