WeCross

前言

  • 跨链路由(WeCross Router)
    • 与链对接,对链上的资源进行抽象
    • 向外暴露统一的接口
    • 将调用请求路由至对应的区块链
  • 账户服务(WeCross Account Manager)
    • 管理跨链账户
    • Router 连接所属机构的 Account Manager
    • 用户在 Router 上登录,以跨链账户的身份发交易
  • 控制台(WeCross Console)
    • 命令行式的交互
    • 查询跨链信息,发送调用请求,操作跨链事务
  • 网页管理平台
    • 可视化操作界面
    • 查询跨链信息,发送调用请求,操作跨链事务
  • 跨链 SDK(WeCross Java SDK)
    • WeCross 开发工具包,供开发者调用 WeCross
    • 集成于各种跨链 APP 中,提供统一的调用接口
    • 与跨链路由建立连接,调用跨链路由
  • 跨链资源(Resource)
    • 各种区块链上内容的抽象
    • 包括:合约、资产、信道、数据表
  • 跨链适配器(Stub)
    • 跨链路由中对接入的区块链的抽象
    • 跨链路由通过配置 Stub 与相应的区块链对接
    • FISCO BCOS 需配置 FISCO BCOS Stub、Fabric 需配置 Fabric Stub
  • IPath(Interchain Path)
    • 跨链资源的唯一标识
    • 跨链路由根据 IPath 将请求路由至相应区块链上
    • 在代码和文档中将 IPath 简称为 path
  • 跨链分区
    • 多条链通过跨链路由相连,形成跨链分区
    • 跨链分区有唯一标识,即 IPath 中的第一项(payment.stub3.resource-d 的 payment)
framework
framework

跨链事务

两阶段事务

两阶段事务是分布式数据库和分布式系统中常见的事务模型,两阶段事务的架构中包含事务管理器和资源管理器等多个角色。

两阶段事务
两阶段事务

在 WeCross 事务模型中,代理合约负责管理事务状态以及对资源的读写控制,事务管理器则由跨链路由实现。用户通过使用 WeCross SDK,可以让多个跨链路由和多个链上的资源参与事务,以保障对各个资源操作的原子性。

两阶段事务
两阶段事务

无论何种智能合约或链码,参与基本的两阶段事务流程时不需要提前做修改。但如果要支持两阶段事务的回滚操作,参与事务的资源接口必须实现对应的逆向接口。

哈希时间锁合约

哈希时间锁定合约
哈希时间锁定合约

流程

合约跨链调用(Interchain)

WeCross 支持由合约发起跨链调用,即可在源链的智能合约中发起对其它链资源的调用。

原理解析

WeCross 提供了两个系统合约,分别是 代理合约桥接合约。代理合约是 WeCross 调用链上其它合约的统一入口,桥接合约则负责保存链上的跨链调用请求。跨链路由通过轮询桥接合约的任务队列,获取跨链调用请求,然后完成请求的转发和处理。

合约跨链调用具体流程如下:

源链的业务合约调用源链的桥接合约,注册跨链请求以及回调接口
源链的跨链路由轮询源链的桥接合约,获取跨链请求
源链的跨链路由解析跨链请求,完成对目标链的调用
源链的跨链路由将目标链返回的结果作为参数,调用源链的回调接口
源链的跨链路由将回调接口的调用结果注册到源链的桥接合约
framework
framework

桥接合约

业务合约

  • 调用的目标链的接口定义必须匹配: string[] func(string[] args)
  • 回调函数的接口定义必须匹配: string[] func(bool state, string[] result),state 表示调用目标链是否成功,result 是调用结果
实现跨链调用的业务合约编写规范可参考示例合约
  • init(): 传入本链的桥接合约地址进行初始化;
  • interchain(): 跨链调用的发起接口,其内部调用了桥接合约的 interchainInvoke 接口;
  • get(): 获取 data;
  • set(): 更新 data;
  • callback(): 使用跨链调用的结果更新 data;

两个示例合约联动过程:A 链的示例合约发起一个跨链调用,调用 B 链的示例合约的 set 接口,更新 B 链的 data,然后触发回调,调用 A 链的 callback 接口并更新 A 链的 data。

区块链接入开发(Stub)

开发语言为 Java,需要实现一个区块链的 WeCross Stub插件,通过插件接入 WeCross

Stub 开发

stub 开发分为两个部分:系统合约 和 Java 插件。

系统合约包括代理合约(WeCrossProxy)和桥接合约(WeCrossHub),代理合约是 WeCross 调用该链其它合约的统一入口,桥接合约用于记录跨链调用请求,以配合跨链路由实现合约跨链调用。

Java 插件

开发指南

  • StubFactory
    • 组件实例化工厂类
  • Account
    • 区块链账户,用于交易签名
  • Connection
    • 调用区块链 SDK 接口,与区块链交互
  • Driver
    • 交易、交易回执、区块等与区块链相关数据的编解码
    • 实现 Stub 的基础接口
    • 调用 Connection 对象的发送入口与区块链交互
最后更新于