1 Star 4 Fork 3

Luyu Community / Cross Supply Chain

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Apache-2.0

供应链跨链

一、功能场景

在供应链场景下,实现跨区块链的物流流转

  • 需求
    • 基础功能:跨区块链的供应链物流流转
    • 跨链可信:一个物品从一条链跨到另一条链,通过跨链机制保证两条链间相互调用的操作正确可信
    • 事务性:物品的状态流转在两条链上需存在事务性,即货物在一条链上的导出和另一条链上的导入操作是原子操作
  • 限制
    • 区块链相互间仅能进行有限的操作,敏感信息不互通

二、系统架构

  • 数据层
    • 区块链
      • 关口合约(PortContract):货物跨链逻辑
      • 供应链合约(SupplyContract):管理供应链数据,对其它链不可见
  • 互连层
    • Router + 插件
    • Account-Manager
  • 应用层
    • 关口服务(Port Service):跨链物品发送与接收的记录上链

三、方案描述

场景

  • 货物从A链转移至B链

机制

采用HTLC的事务机制实现货物跨链的事务性,即下述操作必同时发生或失败

  • 货物在A链删除
  • 货物在B链创建

模块

  • 供应链合约A:货物的起始位置
  • 关口合约A、B:管理货物跨链时的HTLC状态
  • 关口服务A、B:相互配合对合约进行调用,主导HTLC的流程,推动货物跨链转移
  • 供应链合约B:货物的目的位置

流程

为方面说明,此处仅给出关键流程和简要接口参数

  • 供应链合约A:(发起)发起货物转移请求
  • 关口服务A、B:(锁定)在各自链上发起跨链提案,哈希时间锁锁定,即:承认该跨链转移操作可在本连上发生
  • 关口服务A、B:(解锁)相互配合,去对方链上解锁,即:让对方链上的转移操作生效
  • 供应链合约B:(接收)接收货物
participant 供应链合约A
participant 关口合约A
participant 关口服务A
participant 关口服务B
participant 关口合约B
participant 供应链合约B


供应链合约A->关口合约A: 货物转移请求
关口服务A-->关口服务B: 发送货物(线下)
关口服务A->关口合约A: lockA: transferPropose(cargoId, hashLock)
关口服务B->关口合约B: lockB: transferPropose(cargoId, hashLock)
关口服务A->关口合约B: unlockB: transferConform(cargoId, secret)
关口服务B->关口合约A: unlockA: transferConform(cargoId, secret)
关口合约B->供应链合约B: 生成货物记录
关口合约A->供应链合约A: 删除货物记录

四、模块设计

4.1 供应链合约

SupplyContract 管理当前链的物流数据,仅对有权限的用户开放

interface ISupplyContract {
    //// 事件
    event Transfer(address indexed from, address indexed to, uint256 cargoId); // new: 0 -> sender, remove: sender -> 0
    event Approval(address indexed from, address indexed to, uint256 cargoId);
    event ExportRequest(
        uint256 indexed cargoId,
        string toChainPath,
        string receiver
    );
    event ExportConfirm(uint256 indexed cargoId);
    event ExportCancel(uint256 indexed cargoId);

    //// 供应链常规接口
    function ownerOf(uint256 cargoId) external view returns (address); // 货物拥有者
    function cargoURI(uint256 cargoId) external view returns (string memory); // 货物描述
    function transfer(address to, uint256 cargoId) external; // 货物转移owner,仅owner和approver可转移
    function approve(address to, uint256 cargoId) external; // 货物授权给某人,即设置 approver
    function getApproved(uint256 cargoId) external view returns (address); // 查询approver
    function newCargo(uint256 cargoId, string calldata uri) external; // 新建货物
    function removeCargo(uint256 cargoId) external; // 删除货物

    //// 货物跨链接口
    function exportRequest(uint256 cargoId, string calldata toChainPath, string calldata receiver) external; // 新建跨链请求
    function exportConfirm(uint256 cargoId) external; // 确认跨链完成接口(仅PortContract可调用)
    function exportCancel(uint256 cargoId) external; // 取消跨链请求接口(仅PortContract可调用)
    function getExportRequestCargoIds() external view returns (uint256[] memory); // 获取所有跨链请求的货物id
    function getExportRequestByCargoId(uint256 cargoId) external view returns (string memory toChainPath, string memory receiver); // 查询货物信息
    function getMyAddress() external view returns (address); // 工具接口,查询调用者的地址
}

4.2 关口合约

作用

  • 管理货物跨链时的HTLC状态

**货物状态 **

  • 正在:transfering
  • 完成:transferred
  • 取消:cancelled

事务机制

  • 保证上述状态转换的原子性
  • HTLC
interface IPortContract {
    //// 事件
    event TransferPropose(uint256 indexed cargoId, string fromChainPath, string toChainPath, string receiver, string hashLock, uint256 lockTime);
    event TransferConfirm(uint256 indexed cargoId, string secret);
    event TransferCancel(uint256 indexed cargoId);

    //// 货物跨链接口
    function transferPropose(
        uint256 cargoId,
        string calldata cargoURI,
        string calldata fromChainPath,
        string calldata toChainPath,
        string calldata receiver, // 目的SupplyContract上的接收者地址
        string calldata hashLock,
        uint256 lockTime
    ) external; // 发起货物跨链(锁定)
    function transferConfirm(uint256 cargoId, string calldata secret) external; // 确认货物跨链(解锁),发送方销毁cargoId,接收方生成cargoId并发送给receiver
    function transferCancel(uint256 cargoId) external; // 取消货物跨链(仅lockTime过后才可操作)
    
    //// 信息查询
    function getTransferingCargoIds() external view returns (uint256[] memory); // 获取所有发送中(锁定中)的cargoId
    function getCargoInfo(uint256 cargoId)
        external
        view
        returns (
            string memory cargoURI,
            string memory fromChainPath,
            string memory toChainPath,
            string memory receiver, // 目的SupplyContract上的接收者地址
            string memory cargoStatus,
            string memory hashLock,
            string memory secret,
            uint256 lockTime
        ); // 查询货物信息
}

4.3 关口服务

4.3.1 准备阶段

主导货物的跨链转移,基于luyu-java-sdk开发,基于HTLC机制在两条链上实现转移的原子性。

初始化阶段(双方)

  1. 部署供应链合约 SupplyContract
  2. 部署关口合约 PortContract,参数:当前链的供应链合约地址、关口服务的二级账户地址、当前链的path(如:payment.chain0
  3. 关口服务去对方链注册自身对应的链path:registerChainOwner(payment.chainXXX)

A:发起货物导出请求

  1. 生成货物:A.SupplyContract.newCargo()
  2. 跨链请求:A.SupplyContract.exportRequest()

4.3.2 操作阶段

A:发起跨链提案(锁定)

1.1 遍历导出请求:A.SupplyContract.getExportRequestCargoIds()A.SupplyContract.getExportRequestByCargoId()

1.2 发起跨链提案:A.PortContract.transferPropose()(链下生成secret和hashLock并妥善保存)

participant supply A
participant port A
participant service A
participant service B
participant port B
participant supply B
note over port A, port B: A lock阶段
supply A->service A:1.1 遍历导出请求
service A-> port A:1.2 发起跨链提案

B:响应跨链提案(锁定)

2.1 查询对方跨链提案:A.PortContract.getTransferingCargoIds()A.PortContract.getCargoInfo()

2.2 发起跨链提案:B.PortContract.transferPropose()(hashLock用A上查询来的)

participant supply A
participant port A
participant service A
participant service B
participant port B
participant supply B

note over port A, port B: B lock阶段
port A->service B:2.1 查询对方跨链提案
service B->port B:2.2 发起跨链提案

A:执行对方的提案操作(解锁)

3.1 查询对方链是否已提案:B.PortContract.getCargoInfo()(判断cargoStatus是否为transfering,hashLock是否一致)

3.2 执行对方链的提案操作:B.transferConfirm()(用事先保存的secret解锁)

3.3 生成货物:解锁后合约自动生成货物并转移至B.SupplyContract的receiver(合约自动完成,无需关口服务发交易)

participant supply A
participant port A
participant service A
participant service B
participant port B
participant supply B

note over port A, port B: A unlock阶段
service A->port B:3.1 查询对方链是否已提案
service A->port B:3.2 执行对方链的提案操作
port B -> supply B:3.3 生成货物

B:执行对方的提案操作(解锁)

4.1 遍历是否已解锁:B.PortContract.getCargoInfo()(得到secret)

4.2 用secret执行对方链的提案操作:A.transferConfirm()

4.3 删除货物:解锁后合约自动从A.SupplyContract上删除货物(合约自动完成,无需关口服务发交易)

participant supply A
participant port A
participant service A
participant service B
participant port B
participant supply B

note over port A, port B: B unlock阶段
port B->service B:4.1 遍历是否已解锁
service B->port A:4.2 执行对方链的提案操作
port A->supply A:4.3 删除货物

完整流程如下

participant supply A
participant port A
participant service A
participant service B
participant port B
participant supply B
note over port A, port B: A lock阶段
supply A->service A:1.1 遍历导出请求
service A-> port A:1.2 发起跨链提案

note over port A, port B: B lock阶段
port A->service B:2.1 查询对方跨链提案
service B->port B:2.2 发起跨链提案

note over port A, port B: A unlock阶段
service A->port B:3.1 查询对方链是否已提案
service A->port B:3.2 执行对方链的提案操作
port B -> supply B:3.3 生成货物

note over port A, port B: B unlock阶段
port B->service B:4.1 遍历是否已解锁
service B->port A:4.2 执行对方链的提案操作
port A->supply A:4.3 删除货物

4.4 演示模块

数据与操作的可视化(此模块仅关注具体业务功能,可无需感知关口服务的存在)

  • Server
    • 提供Web服务
    • 此Server基于luyu-java-sdk开发,部署一个Router共其连接,该Router与各链的Router相连
  • Web
    • 新建货物
    • 发起货物跨链
    • 查询货物所属
Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

简介

供应链跨链应用 展开 收起
Java 等 4 种语言
Apache-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/luyu-community/cross-supply-chain.git
git@gitee.com:luyu-community/cross-supply-chain.git
luyu-community
cross-supply-chain
Cross Supply Chain
develop

搜索帮助