Skip to content

平行链资产转移管理介绍

linj edited this page Nov 23, 2022 · 1 revision

平行链资产转移管理介绍

[TOC]

平行链支持主链资产和平行链资产之间的互转,也支持平行链资产间接的转移到另一个平行链。

1 chain33和平行链的统一资产表示

1.1 资产的身份

资产的身份有两个因素唯一确定:资产原生执行器和资产符号

  • 资产原生执行器:指资产从哪个合约最初铸造的,比如coins合约,token合约,跨链的paracross合约
  • 资产符号:指资产的名字,如bty,ccny

1.2 主链和平行链的资产合约区分

  • 主链的资产合约没有前缀,比如coins, token
  • 平行链的资产合约需要加上平行链title,如 user.p.game.coins, user.p.game.token

1.3 主链平行链资产统一表示

  • 主链资产: coins.bty, token.ccny
  • 平行链资产: user.p.game.coins.bty, user.p.game.token.ccny

1.4 跨链资产的统一表示

跨链资产转移到目标链的paracross合约,在目标链上可以认为是原生从paracross合约铸造的

  • 主链资产coins.bty转移到平行链表示为: user.p.game.paracross.coins.bty
  • 平行链资产user.p.game.coins.ccny转移到主链表示为: paracross.user.p.game.coins.ccny

1.5 平行链转移到另一个平行链资产表示

两个平行链之间不能直接互转,需要先转到主链然后再转到另一个平行链,两笔交易

  • 平行链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币

2 跨链资产转移的方向

新的跨链资产转移接口通过 交易执行器 + 资产合约 + 资产符号 来唯一确定资产转移的方向: 转移或提回

                 交易执行器                    资产合约名                  资产符号名                            目标资产名
主链转移到平行链:         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合约

3 跨链资产转移步骤

准备跨链资产需要先转到本链的paracross合约下,再进行跨链转移交易

  • 转账到paracross合约,比如coins, token资产转移到paracross合约,特别的主链上从A平行链转移过来的资产虽然在paracross合约下,也需要一次转账到paracross合约
  • 跨链转移交易,同时在主链和平行链执行
  • 注意: 当前每个可铸币的原生合约都提供"各自"的存款到目标执行器的接口,比如token有token自己的, paracross有paracross自己的transfer2Exec接口

4 跨链资产转移接口

4.1 资产转移接口

{
    "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 可选,转移备注

4.2 查询资产转移是否成功接口

只能在主链上查询

{
    "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 跨链转移交易是否成功

4.3 平行链跨资产转到合约接口

跨链转移进来的资产放在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,所以只填符号即可

4.4 查询平行链共识高度

{
    "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
}

4.5 查询平行链某高度共识情况

可以查看平行链某高度超级节点提交共识情况,查看哪些账户提交了共识,共识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

4.6 查询平行链高度和共识高度

可以在主链或平行链上查询平行链当前高度和共识高度,在主链上查的链高度就是平行链的共识高度

{
    "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
}

4.7 查询平行链高度和主链匹配高度

在平行链上查询具体平行链区块高度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
}
Clone this wiki locally