-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
星火链网RFC-009:星火链网跨链协议规范 #9
Comments
1. 序言编号:RFC-009 类型:RFC 标题:星火链网跨链协议规范 作者:魏星,weixing3@caict.ac.cn 发布时间:2021-12-14 状态: 更新时间: 讨论地址:#9 依赖RFC:无 2. 摘要结合BID标识符,”星火·链网”实现了智能合约跨链互操作、链上数据的跨链传输、资产跨链交易等。本文介绍星火链网跨链协议的流程和规范。 3. 动机为了更清楚地描述星火链网的跨链机制,跨链的类型、流程和相关规范,这篇rfc做了相关的回应。 4. 原理下面将从架构、角色、设计原则、流程等方面进行阐述。 4.1 架构简介跨链协议组件包含:
4.2 核心角色
4.3 跨链设计原则星火链网设计跨链方案时需要满足四个核心原则:
基于以上核心原则,“星火·链网”设计了可靠路由解析机制与可信验证策略机制这两个关键技术来保证跨链消息传递的真实性,跨链交易执行的原子性,以及执行结果的一致性。 4.3.1 可靠路由可靠路由是指跨链消息可以在有限时间内到达目标子链,且路由过程中消息不可被篡改。“星火·链网”的可靠路由策略由骨干节点、主链共识节点、主链跨链消息验证节点以及子链参与,使用三阶段确认策略确保消息可达,使用hash签名、merkle证明等技术保障消息传递过程中不被篡改;利用交易和区块作为跨链交易路由的载体,只要主链、子链正常生产区块,跨链消息就不会被阻塞,保证了消息传递的稳定性。 可靠路由流程: 1、 源链提供跨链消息的SPV证明及hash签名到骨干节点集合 2、 骨干节点是一个多节点集合,节点按权重排序,一次验证源链的spv证明 3、 骨干节点使用队列管理跨链消息,负责验证SPV,使用nonce对跨链消息排序并将跨链消息转换成统一的跨链交易格式,发送到主链。 4、 主链上的跨链验证节点专门负责与特定子链的骨干节点通信、验证和预执行跨链交易,包括验证骨干节点跨链交易队列的merkle proof。 5、 验证通过后跨链验证节点提交跨链交易到共识节点。 6、 主链上的共识节点对跨链交易进行共识,同时启动跨链交易超时的计时。 7、 目标子链的跨链验证节点通过区块同步获知跨链交易。以下相同 8、 跨链验证节点转发跨链交易给骨干节点。 9、 骨干节点验证跨链交易已被主链共识后,转发跨链消息给目标子链。 10、 目标子链验证跨链消息hash签名,确认跨链消息未被篡改。 4.3.2 可信验证“星火·链网”实现可信验证策略,保证跨链交易执行结果的一致性。保证一致性最大的挑战是因子链共识算法不同而可能存在的分叉或回退。对于可能存在分叉的子链,星火·主链需要验证跨链交易被打包在主链而不是分叉链上。因此,针对不同类型的共识算法,”星火·链网”实现了不同的验证策略: 4.3.2.1 确定性共识算法应用确定性共识算法(如实用拜占庭算法)的子链,在产生区块的过程中不会产生分叉,跨链交易一旦被打包进区块,即可认为交易被最终确认。因此,只需要验证跨链交易已被确认的SPV证明即可。 4.3.2.2 概率性一致共识算法应用概率性一致共识算法(如POW)的子链,在产生区块的过程中时刻存在分叉,依赖最长链原则来确认主链。要求这类子链必须有多个骨干节点,这些骨干节点共同管理一个多重签名账户来向星火·主链发起跨链交易,只有经过多个骨干节点签名验证后的跨链交易,主链才认为它已经被子链最终确认。 4.3.3 强原子性原则为了保证该交易的原子性,需满足如下条件。 4.3.3.1 三阶段准备
4.3.3.2 键值锁定从数据库层面锁定跨链交易涉及到的数据,防止误写 4.4 跨链流程SEND和ACK机制是任意一条发送的跨链消息,在发出后经过目标链处理完成后,必须确认给源链,源链收到确认消息后才将此跨链消息进行确认操作(如锁定、解锁、转移资产)。 ACK消息包含三种类型:
以子链向子链发送跨链交易为例,流程描述:
5. 规范本规范基于1+N的主子链群架构,解决链群之间的资产信息互联互通问题。该链群架构由一个国家主链和多个行业从链组成,这种架构可以让各个行业业务更加高效地运行在各自的从链上,这些业务相互独立且不会受到彼此影响。 5.1 跨链类型跨链内容包括:主链积分转移、子链积分兑换、数据传递、合约互操作。 5.1.1 主链积分转移主链的积分由主链共识及其激励机制产生。激励机制是指对参与区块链共同治理节点的奖励机制,一个有效的激励模型能够提高用户参与度的积极性,从而保证了区块链系统的活跃性;因为区块链关系到所有参与者的利益,因此能够促使参与者共同维护区块链系统,防止黑客攻击,使区块链系统运行的稳定性、安全性和高效性,从而建立一个功能更加完善的区块链生态系统。 主链积分可以转移到主从链群中做任意转移,主链可以转移到子链的任一账户地址中,子链的账户仍然可以在子链中转移给子链的其他用户,从而达到主链积分在全网中流通及使用。 5.1.2 子链积分兑换子链积分由子链共识及其激励机制。每个子链的生态中,子链积分对生态的影响有着关键性因素。在实际的生产和商业活动中,子链积分也有着跨域使用的需求。因此需要对子链积分跨链流通和使用进行支持。 子链积分只能兑换主链积分进行转移。在源链中,用户需要先找骨干节点按照汇率先兑换成对应的主链积分,转移到对端链中,由骨干节点按照目标链积分的汇率进行兑换。 5.1.3 合约互操作用户调用合约,可以传递参数。 5.1.4 数据传递源链传递到对端的BID合约,以BID DOC方式存储。 5.2 跨链通讯协议定义协议定义分为基本数据定义、跨链类型定义、跨链基础接口类型定义。 5.2.1 基本数据定义
5.2.2 跨链类型定义类型定义参考跨链类型 5.2.2.1 主链积分转移参数说明:
5.2.2.2 子链积分兑换场景使用:
骨干节点的提案网关需要承担兑换子链积分和转移主链积分的功能。 汇率换算 let masterAmount;
let srcAmount;
let srcTokenRate;
let destAmount;
let destTokenRate;
masterAmount = srcAmount/srcTokenRate;
masterAmount = destAmount/destTokenRate; 参数说明:
5.2.2.3 合约互操作参数说明:
5.2.2.4 数据传递源链用户发起,传递到目标链,最终以BID DOC方式存储。 参数说明:
5.2.3 跨链基础接口类型
用户发起跨链交易CTx-1(主链积分、子链积分、合约资产、数据传递)。该跨链交易由普通用户发起,交易内容为源链M(任意主链或子链)到目的链N(非M的主链或者子链)。
骨干节点监听到主链或者子链上有与自己相关的首次交易,提交跨链交易到对手链(如监控到子链则提交跨链交易到主链;监控到主链则提交跨链交易到子链)。
骨干节点监听到主链或者子链上有与自己相关的非首次交易,提交跨链确认到对手链(如监控到子链则提交跨链交易到主链;监控到主链则提交跨链交易到子链)。 5.3 跨链合约定义跨链合约定义分为主链合约定义、子链合约定义等。 5.3.1 主链合约定义主链合约定义的步骤如下: 5.3.1.1 设置网关节点地址功能: 超级节点设置网关节点 {
"method": "setNotaryBid",
"params":{
"chainCode": "",
"notaryBid": "",
"remark": ""
}
} 请求参数说明:
成功的返回事件:
响应参数说明:
5.3.1.2 设置子链兑换汇率功能: 超级节点设置网关节点 {
"method": "setTokenRate",
"params":{
"chainCode": "",
"rate": "",
"remark": ""
}
} 请求参数说明:
成功的返回事件:
响应参数说明:
5.3.1.3 发起跨链交易功能: 用户发起从主链到子链的交易 {
"method": "startTx",
"params":{
"srcBid": "",
"destBid": "",
"destChainCode": "",
"txType": "",
"payload":{
},
"remark": "",
"extension": {},
"version": ""
}
} 请求参数说明:
成功的返回事件:
响应参数说明:
5.3.1.4 提交跨链交易功能: 骨干节点提交从子链到子链或者主链的交易 {
"method": "sendTx",
"params":{
"srcBid": "",
"destBid": "",
"srcChainCode": "",
"destChainCode": "",
"txType": "",
"payload":{
},
"remark": "",
"extension": {},
"version": ""
}
} 请求参数说明:
成功的返回事件:
响应参数说明:
5.3.1.4 提交跨链确认交易功能: 骨干节点提交从子链到主链的交易确认 {
"method": "sendAcked",
"params":{
"crossTxNo": "",
"result",
"extension": {},
"version": ""
}
} 请求参数说明:
成功的返回事件:
响应参数说明:
5.3.1.5 提取异常的跨链资产功能: 用户在发起跨链交易异常(失败或者超时)后,可以主动取出资产。 {
"method": "takeOut",
"params":{
"crossTxNo": "",
"toBid": "",
"payload": {}
}
} 请求参数说明:
成功的返回事件:
响应参数说明:
5.3.2 子链合约定义子链合约定义的步骤如下: 5.3.2.1 设置网关节点功能: 骨干节点设置网关节点地址 {
"method": "setNotaryBid",
"params":{
"chainCode": "",
"notaryBid": "",
"remark": ""
}
} 请求参数说明:
成功的返回事件:
响应参数说明:
5.3.2.2 发起跨链交易用户发起从子链到子链或者主链的交易 {
"method": "startTx",
"params":{
"srcBid": "",
"destBid": "",
"destChainCode": "",
"txType": "",
"payload":{
},
"remark": "",
"extension": {},
"version": ""
}
} 请求参数说明:
成功的返回事件:
响应参数说明:
5.3.2.3 提交跨链交易功能: 骨干节点提交从主链或者子链到当前链的交易 {
"method": "sendTx",
"params":{
"srcBid": "",
"destBid": "",
"srcChainCode": "",
"destChainCode": "",
"txType": "",
"payload":{},
"remark": "",
"extension": {},
"version": ""
}
} 请求参数说明:
成功的返回事件:
响应参数说明:
5.3.2.4 提交跨链确认交易功能: 骨干节点提交从主链或子链到当前链的交易确认;合约在该状态,实现解锁、转移、增发、销毁资产 {
"method": "sendAcked",
"params":{
"crossTxNo": "",
"result": "",
"extension": {},
"version": ""
}
} 请求参数说明:
成功的返回事件:
响应参数说明:
5.3.2.5 提取异常的跨链资产功能: 用户在发起跨链交易异常(失败或者超时)后,可以主动取出资产。 {
"method": "takeOut",
"params":{
"crossTxNo": "",
"toBid": "",
"payload": {}
}
} 请求参数说明:
成功的返回事件:
响应参数说明:
6. 实现
7. 缺陷暂无 |
星火链网是否支持跨链?跨链的原理和流程具体是什么?跨链的种类有哪些?
生命周期
提出:2021-12-14
演示:2021-12-14
接受:2021-12-14
通过:2021-12-14
The text was updated successfully, but these errors were encountered: