如何用go module构建模块化跨链平台

  • 什么是区块链
  • 跨链的重难点分析
  • 跨链平台架构设计
  • Go module和plugin 的应用实践
展开查看详情

1.如何用go module构建模块化跨链平台 汪小益 趣链科技

2.什么是区块链 跨链的重难点分析 跨链平台架构设计 Go module和plugin 的应用实践

3.什么是区块链

4. 什么是区块链 块链式数据结构 分布式账本 交易 区块 (狭义区块链) (广义区块链) 交易指的是一次对 将一段时间内发生的 区块以时间顺序前后 多参与方各自部署, 账本的操作,如一 所有交易和状态打包 相连,组成一种块链 互联互通,构成分布 笔转账交易。 成为一个区块。 式数据结构,即“区 式网络。 块链”一词的由来。

5.异构区块链生态 币/模式 比特币 天秤币 摩根币 (由Facebook发行) (由摩根大通发行) 链/技术 公有链 联盟链 (Bitcoin/Ethereum/EOS) (Fabric/趣链区块链…)

6.跨链的重难点分析

7. 什么是跨链 区块链之间实现可信互操作 资产交换 数据交换 业务互补 区块链账本间的资产互操作 区块链上数据的共享与同步 调用他链服务完善己链业务

8. 跨链难点分析 X 10 11 12 13 区块链 A 区块链 B 包含无效交易 支持异构区块链 1 2 跨链交易存在性和有效性 跨链事务难 3 4 隐私保护和权限控制 S 超时时间T0 超时时间T1 H(S) H(S) 跨链网关A 1BTC 20ETH 应用链 生成随机数S A ? T0 > T1 链A T? 链B B节点 A节点 跨链网关B

9. 跨链难点分析 解决方案 难点 实现多中心化可信中继的中继链 支持异构区块链 适用于异构区块链的跨链消息传输协议 跨链交易存在性和有效性 实现无侵入适配不同区块链的跨链网关 BitXHub 支持异构区块链交易验证的验证引擎 跨链技术平台 跨链事务难 适用于不同场景的多种跨链事务方案 多层级的隐私保护与权限控制机制 隐私保护和权限控制

10.跨链平台架构设计

11. 跨链传输协议 IBTP 结构的 Fabric 交易示例 设计考量 加密 1 通用的交易格式 • 消除不同共识算法、加密机制等技 术实现导致的交易合法性证明差异 序列化 2 可扩展性 • 证明信息和调用信息可根据链的特 性进行适配 IBTP :Inter Blockchain Transfer Protocol,是平台提出的一 种通用的跨链交互的消息传输协议。

12. 跨链验证引擎 TX 代表跨链交易 TX1 TX2 TX TX 区块 TX 代表普通交易 执行模块 TX1 TX2 验证者、 跨链交易验证引擎 1. 检查应用链权限 验证规则地址 跨链处理 TX1 WASM虚拟机 2. 检查是否注册验证规则 交易解析 HPC规则 内置合约 Proof, Validators 3. 检查IBTP的序号 …… 4.获取验证 5.返回验证 规则匹配 Fabric规则 规则地址 规则地址 Proof, Validators 规则执行 验证规则 验证通过 管理合约 TX1 TX2 TX TX 区块 存储模块

13.如何跨链互联 首先解决网络互通的问题多对多的网络拓扑结构 B B B B B B B B

14.如何跨链互联 多对多转换成一对多的结构,降低网络拓扑复杂度 如何保障安全? B B B B B B B B 网关 A 网关 B

15.如何可信跨链互联 一对多的情况下如何保障安全性? • 引入中继链协同见证 1 校验跨链消息有效性和存在性 2 保障跨链事务一致性 3 提供跨链路由及身份管理 B B 中继链 B B B B 网关 A B B 网关 B

16. 跨链网关与跨链中继 审核业务链 其他业务合约 跨链业务合约 跨链业务合约 其他业务合约 中继链 Plugin 网关 网关 Plugin Broker Broker 业务链A 业务链B 注册业务链 注册业务链 应用链管理员 应用链管理员

17.跨链网关与流程 中继链 其他跨链网关 代表跨链交易 区块头 跨链交易 跨链交易 代表IBTP包 代表跨链事件 轻 加 节 同步模块 代理模块 网络模块 密 点 模 模 块 块 路由模块 跨链网关 验证模块 应用链管理 规则管理 验证引擎 模块 模块 模块 监听模块 执行模块 应用链插件 TX TX 跨链事件 应用链 Client

18.中继链模块与流程 TX TX 代表跨链交易 GRPC Restful接口 TX 代表普通交易 跨链网关A TX 核心接口 加密模块 TX 共识模块 RAFT 共识插件 交易池 管理模块 RBFT TX1 TX2 TX TX 区块 执行模块 TX1 TX2 跨链交易 获取验证 TX1 TX2 网络模块 验证规则 规则地址 跨链处理 验证通过 跨链交易 管理合约 内置合约 验证引擎 路由模块 TX1 TX2 TX TX 区块 同步 存储模块 其他节点 跨链网关B 跨链网关C

19. 为什么需要模块化 1 中继链和网关有大量公共组件 2 灵活适配不同需求和版本 以太坊 Fabric 趣链区块链 天平链 PBFT RAFT POS POA HOTSTUFF Golang提供了两种模块化工具,一个是go module,一个是go plugin

20.GO module和plugin实践

21. GO modules实践:无处不在的模块 工具库(存储、加密、网络、日志等) https://github.com/meshplus/bitxhub-kit 验证引擎&IBTP协议库 https://github.com/meshplus/bitxhub-core 数据模型库 https://github.com/meshplus/bitxhub-model 中继链主仓 https://github.com/meshplus/bitxhub 跨链网关主仓 https://github.com/meshplus/pier

22.GO modules实践:经验建议 GO module几个好用的命令 go mod tidy 移除无效依赖,新增缺少的依赖 go mod graph 列出所有的依赖 go mod vendor 依赖复制打包到vendor目录下(网络受限) go mod why 分析依赖原因 replace 依赖包信息替换 eg: replace github.com/ultramesh/crypto-gm => git.hyperchain.cn/ultramesh/crypto-gm.git v0.1.0

23.GO modules实践:经验建议 Go的项目模块架构划分尽量以功能为单位垂直拆分 模块不要拆分的太细,过多交叉依赖管理会很头疼 配置好goproxy,方便私有化仓库管理以及依赖加速 go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.cn,direct

24. GO plugin实践:共识算法为例 go build --buildmode=plugin -o build/solo.so order/solo/*.go

25.GO plugin实践:经验建议 使用接口类型作为插件的边界 一个插件提供的服务尽量单一 使用语义版本控制插件版本,如pbft.so.1.2.0 通过代码签名等手段进行安全校验 插件依赖的组件版本需要和主仓库所依赖的组件版本需要一致 so 包编译出来的大小过大 插件加载之后内存占用较高 目前仅支持 Linux, FreeBSD, and macOS

26. 模块化垮链实践结果 链对链直接 基于多模块可组合性形成的积木型跨链体系 中继见证 主侧扩展 趣链区块链 应用链A 中继链B 中继链A 跨链网关A 跨链网关B Fabric 应用链D 以太坊 应用链C

27.