-
Notifications
You must be signed in to change notification settings - Fork 259
平行链资产转移管理介绍
linj edited this page Nov 23, 2022
·
1 revision
[TOC]
平行链支持主链资产和平行链资产之间的互转,也支持平行链资产间接的转移到另一个平行链。
资产的身份有两个因素唯一确定:资产原生执行器和资产符号
- 资产原生执行器:指资产从哪个合约最初铸造的,比如coins合约,token合约,跨链的paracross合约
- 资产符号:指资产的名字,如bty,ccny
- 主链的资产合约没有前缀,比如coins, token
- 平行链的资产合约需要加上平行链title,如 user.p.game.coins, user.p.game.token
- 主链资产: coins.bty, token.ccny
- 平行链资产: user.p.game.coins.bty, user.p.game.token.ccny
跨链资产转移到目标链的paracross合约,在目标链上可以认为是原生从paracross合约铸造的
- 主链资产coins.bty转移到平行链表示为: user.p.game.paracross.coins.bty
- 平行链资产user.p.game.coins.ccny转移到主链表示为: paracross.user.p.game.coins.ccny
两个平行链之间不能直接互转,需要先转到主链然后再转到另一个平行链,两笔交易
- 平行链game的user.p.game.coins.ccny资产转到主链表示为:paracross.user.p.game.coins.ccny
- 主链转移到test平行链表示为: user.p.test.paracross.paracross.user.p.game.coins.ccny,其中资产合约名为user.p.test.paracross, 资产符号名为paracross.user.p.game.coins.ccny,意思是从主链转过来的user.p.game.链的coins.ccny币
新的跨链资产转移接口通过 交易执行器 + 资产合约 + 资产符号 来唯一确定资产转移的方向: 转移或提回
交易执行器 资产合约名 资产符号名 目标资产名
主链转移到平行链: user.p.game.paracross token ccny user.p.game.paracross.token.ccny
主链从平行链提回: user.p.game.paracross user.p.game.paracross token.ccny 主链资产恢复
平行链转移到主链: user.p.game.paracross user.p.game.token ccny paracross.user.p.game.token.ccny
平行链从主链提回: user.p.game.paracross paracross user.p.game.token.ccny 平行链资产恢复
主链跨链资产转移到另一个平行链: user.p.test.paracross paracross user.p.game.token.ccny user.p.test.paracross.paracross.user.p.game.token.ccny
主链跨链资产从另一个平行链提回: user.p.test.paracross user.p.test.paracross paracross.user.p.game.token.ccny 主链恢复到paracross合约
准备跨链资产需要先转到本链的paracross合约下,再进行跨链转移交易
- 转账到paracross合约,比如coins, token资产转移到paracross合约,特别的主链上从A平行链转移过来的资产虽然在paracross合约下,也需要一次转账到paracross合约
- 跨链转移交易,同时在主链和平行链执行
- 注意: 当前每个可铸币的原生合约都提供"各自"的存款到目标执行器的接口,比如token有token自己的, paracross有paracross自己的transfer2Exec接口
{
"method":"Chain33.CreateTransaction",
"params":[
{
"execer":"user.p.dog.paracross",
"actionName":"CrossAssetTransfer",
"payload":{
"assetExec":"coins",
"assetSymbol":"bty",
"amount":100000000,
"toAddr":"",
"note":"",
}
}
]
}
参数说明:
参数 | 类型 | 说明 |
---|---|---|
method | string | Chain33.CreateTransaction |
execer | string | 交易执行器,需填具体平行链title+paracross |
assetExec | string | 资产原生合约,比如coins,token |
assetSymbol | string | 资产符号,比如bty, ccny |
amount | int64 | 转移资产数量,精确到10^8 |
toAddr | string | 可选,目标地址,缺省为交易签名地址 |
note | string | 可选,转移备注 |
只能在主链上查询
{
"method":"Chain33.Query",
"params":[
{
"execer":"paracross",
"funcName":"GetAssetTxResult",
"payload":{
"data":"0x6162a730ab57d70b4bd32fd7ab0b57e0ba67aaca6d4a391579b772d4fe6024cb"
}
}
]
}
参数说明:
参数 | 类型 | 说明 |
---|---|---|
data | string | 跨链交易hash |
响应数据:
{
"id":null,
"result":{
"from":"12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv",
"to":"1L6g6QcVgf2JjFWjFzdVUb9sFaanWYgpkL",
"isWithdraw":false,
"txHash":"0x6162a730ab57d70b4bd32fd7ab0b57e0ba67aaca6d4a391579b772d4fe6024cb",
"amount":"100000000",
"exec":"coins",
"symbol":"bty",
"crossType":0,
"height":"4631836",
"commitDoneHeight":"4631837",
"paraHeight":"1258",
"success":true
},
"error":null
}
参数说明:
参数 | 类型 | 说明 |
---|---|---|
method | string | Chain33.CreateTransaction |
from | string | 跨链转移交易签名地址 |
to | string | 跨链转移内部合约地址 |
isWithdraw | bool | 旧接口,弃用 |
crossType | int | 旧接口,弃用 |
height | string | 交易主链执行高度 |
commitDoneHeight | string | 交易在主链共识成功高度 |
paraHeight | string | 交易在平行链执行高度 |
success | string | 跨链转移交易是否成功 |
跨链转移进来的资产放在paracross合约下,默认为原生合约
{
"method":"Chain33.CreateTransaction",
"params":[
{
"execer":"{user.p.dog.}paracross",
"actionName":"TransferToExec",
"payload":{
"execName":"{user.p.dog.}trade",
"to":"1NJLuYtYjcrcSS5jcWZD3DLNRnUZ7Z1SRa",
"amount":100000000,
"cointoken":"coins.bty"
}
}
]
}
参数说明:
参数 | 类型 | 说明 |
---|---|---|
execer | string | 主链填paracross,平行链需要把title加上 |
execName | string | 目标合约名称,如果平行链上转需要填平行链的执行器名字 |
to | string | 目标合约地址,示例是user.p.dog.trade的地址 |
amount | int | 转移数量 |
cointoken | string | 转移资产符号,默认原生合约就是paracross,所以只填符号即可 |
{
"method":"Chain33.Query",
"params":[
{
"execer":"paracross",
"funcName":"GetTitle",
"payload":{
"data":"user.p.dog."
}
}
]
}
响应数据:
{
"id":null,
"result":{
"title":"user.p.dog.",
"height":"1265",
"blockHash":"0x7409750e1aa739a02a65ca6e807236e16efec380c70e2f26b6778369866c216a",
"mainHeight":"4632216",
"mainHash":"0xd0048c8a298d196c90f19a653725cc01207c97aaacc0cdf31c5dccaf2bb3624e"
},
"error":null
}
可以查看平行链某高度超级节点提交共识情况,查看哪些账户提交了共识,共识hash是否相同,若某高度未达成共识,可以用此接口查询提交情况
{
"method":"Chain33.Query",
"params":[
{
"execer":"paracross",
"funcName":"GetTitleHeight",
"payload":{
"title":"user.p.dog.",
"height":1000
}
}
]
}
响应数据:
{
"id":null,
"result":{
"status":1,
"title":"user.p.gamenew.",
"height":"1000",
"mainHeight":"4599999",
"mainHash":"0xbafff1d0ba08462bbf08c3a507f243d14e55c7efc1e07023e2523e4efa0e8f53",
"commitAddrs":[
"1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4",
"1MCftFynyvG2F4ED5mdHYgziDxx6vDrScs",
"1JRNjdEqp4LJ5fqycUBm9ayCKSeeskgMKR"
],
"commitBlockHash":[
"0x8dc126e0f7ae4ea4d47368016f71a575817f89ad98e7b646048dd2364038d387",
"0x8dc126e0f7ae4ea4d47368016f71a575817f89ad98e7b646048dd2364038d387",
"0x8dc126e0f7ae4ea4d47368016f71a575817f89ad98e7b646048dd2364038d387"
]
},
"error":null
}
参数说明:
参数 | 类型 | 说明 |
---|---|---|
status | int | 1:成功,0:未共识成功 |
commitAddrs | string | 超级节点投票账户 |
commitBlockHash | string | 超级节点提交块hash |
可以在主链或平行链上查询平行链当前高度和共识高度,在主链上查的链高度就是平行链的共识高度
{
"method":"Chain33.Query",
"params":[
{
"execer":"paracross",
"funcName":"GetHeight",
"payload":{
"data":"user.p.dog."
}
}
]
}
参数 | 类型 | 说明 |
---|---|---|
data | string | 主链上查询需要填,平行链上可以不填 |
响应数据
{
"id":null,
"result":{
"title":"user.p.gamenew.",
"chainHeight":"1427",
"consensHeight":"1425",
"consensBlockHash":"0x1f7a9d51f7805cdba2952ea55a747e18f8113482a43ba5db0489c86c46019749"
},
"error":null
}
在平行链上查询具体平行链区块高度hash和对应主链区块的高度和hash
{
"method":"Chain33.Query",
"params":[
{
"execer":"paracross",
"funcName":"GetBlock2MainInfo",
"payload":{
"start":"100",
"end":"101",
"isDetail":false
}
}
]
}
响应数据
{
"id":null,
"result":{
"items":[
{
"height":"100",
"blockHash":"0x2f1f78af6b10c0eb2447ee93b43365c99ef3ee6a929826a9385872572704e6de",
"mainHeight":"4419999",
"mainHash":"0xa41d2df00a6bcd64bb0d3fee5f60a78f1c7ef6f6118647f6b629abeaa5abee69"
},
{
"height":"101",
"blockHash":"0x25ce5b5f939690fddfd4e6929c6d76dea074013630d2704e9c14f6627e364815",
"mainHeight":"4420199",
"mainHash":"0x773c0d65c2c9a1281cab69f959650407c1ec6282098cbcd853fe9f52dde3527a"
}
]
},
"error":null
}
hello world