-
Notifications
You must be signed in to change notification settings - Fork 109
主链资产和平行链资产交换和使用
QM edited this page Dec 21, 2020
·
1 revision
在了解 币的流转和交换 之后, 介绍下主链资产和平行链资产交换和使用
- 主链资产: 在主链合约里发行的。 如 coins合约里的bty, token合约里的CCNY
- 平行链资产: 在某条平行连上合约里发行的。 如 game链上coins 合约的 GBTY
跨链指一条链上的资产转移到另一条链上去
目前在bityuan主链/平行链生态中, 只能由主链资产转移到平行链上使用。
跨链交换和使用举例: 在主币资产token合约里的CCNY,转移到game链上使用
流程
- 将 CCNY 从token合约转移到paracross执行器
- 将 paracross 合约里的CCNY, 跨链转移到 game链的paracross 合约
- 将 game链的paracross 合约里的CCNY,转移到 game链的trade 合约
- 将 CCNY在 game链的trade 合约里和 game链的 coins的GBTY交换
- 将交易到手的GBTY, 转移到 game链的coins合约中
- 再将game链的coins合约的GBTY转移到 game合约
- 进行后续游戏
先介绍几个概念
- 要进行跨链操作, 必须将资产转移到 paracross 合约。 paracross 合约提供了跨链功能
- trade 合约提供的交换功能。 需要交换不同的资产,需要将资产转移到trade 合约
- chain33的合约架构是将功能用合约实现,所有要调用对用功能, 需要先将资产转移到对应合约。 上面看上去是需要非常多的步骤, 但是chain33 提供了交易组的功能, 可以将几个交易放在交易组里。 几个交易只要有一个执行失败, 其他的交易都会同时失败。 跨链操作需要多个区块才能完成, 后续交易需要依赖跨链完成, 所以这里分为两个步骤
- 资产名称: 主链上资产,在平行链上叫 在 user.p.game.paracross合约里 token.CCNY 资产
交易组1
- 将 CCNY 从token合约转移到paracross执行器
- 将 paracross 合约里的CCNY, 跨链转移到 game链的paracross 合约
交易组2
- 将 game链的paracross 合约里的CCNY,转移到 game链的trade 合约
- 将 CCNY在 game链的trade 合约里和 game链的 coins的GBTY交换
- 将交易到手的GBTY, 转移到 game链的coins合约中
- 再将game链的coins合约的GBTY转移到 game合约进行游戏
过程如上篇介绍, 需要生成交易,签名, 发送交易, 等待成功。 由于签名, 发送交易, 等待成功过程是一样的, 不写出来了
- 将 CCNY 从token合约转移到paracross执行器
unsignedTx=$(curl -s --data-binary '{"jsonrpc":"2.0","id":2,"method":"Chain33.CreateTransaction","params":[{"execer": "token","actionName":"TransferToExec","payload": {"cointoken":"CCNY", "amount": "10", "note": "", "to": "12hpJBHybh1mSyCijQ2MQJPk7z7kZ7jnQa", "execName": "paracross"}}]}' -H 'content-type:text/plain;' ${MAIN_HTTP} | jq -r ".result")
- 将 paracross 合约里的CCNY, 跨链转移到 game链的paracross 合约
tx_hash=$(curl -ksd '{"method":"Chain33.CreateTransaction","params":[{"execer":"user.p.game.paracross","actionName":"ParacrossAssetTransfer","payload":{"execName":"user.p.game.paracross","to":"1NZSn6iJmpt84hKGFHZARWSP7iT4ngErwf","amount":100000000}}]}' ${UNIT_HTTP} | jq -r ".result")
- 将 game链的paracross 合约里的CCNY,转移到 game链的trade 合约
unsignedTx=$(curl -s --data-binary '{"jsonrpc":"2.0","id":2,"method":"Chain33.CreateTransaction","params":[{"execer": "user.p.game.paracross","actionName":"TransferToExec","payload": {"cointoken":"token.CCNY", "amount": "100000000", "note": "", "to": "1NZSn6iJmpt84hKGFHZARWSP7iT4ngErwf", "execName": "user.p.game.trade"}}]}' -H 'content-type:text/plain;' ${MAIN_HTTP} | jq -r ".result")
- 将 CCNY在 game链的trade 合约里和 game链的 coins的GBTY交换
# 这里一般game运营一方会一直挂着用GBTY 换 token.CCNY, 用于只需要找到 对应交易的交易单号,指定买几个即可
# 挂着是以 GBTY计价的话,是买token.CCNY. 调用的 trade.CreateRawTradeSellMarketTx
res=$(curl -s --data-binary '{"jsonrpc":"2.0","id":2,"method":"trade.CreateRawTradeSellMarketTx","params":[{"buyID":"'"${buyID}"'","boardlotCnt":10, "fee": 1}]}' -H 'content-type:text/plain;' ${PARA_HTTP} | jq -r ".error | not")
# 挂着是以 token.CCNY计价的话,是卖GBTY . 调用的 trade.CreateRawTradeBuyMarketTx
res=$(curl -s --data-binary '{"jsonrpc":"2.0","id":2,"method":"trade.CreateRawTradeBuyMarketTx","params":[{"sellID":"'"${sellID}"'","boardlotCnt":10, "fee": 1}]}' -H 'content-type:text/plain;' ${PARA_HTTP} | jq -r ".error | not")
- 将交易到手的GBTY, 转移到 game链的coins合约中
unsignedTx=$(curl -s --data-binary '{"jsonrpc":"2.0","id":2,"method":"Chain33.CreateTransaction","params":[{"execer": "user.p.game.coins","actionName":"Withdraw","payload": { "amount": "100000000", "note": "", "to": "1HXdJBGF1p28jCp4jj8AsHpABzywukGoiR", "execName": "user.p.game.trade"}}]}' -H 'content-type:text/plain;' ${MAIN_HTTP} | jq -r ".result")
- 再将game链的coins合约的GBTY转移到 game合约进行游戏
unsignedTx=$(curl -s --data-binary '{"jsonrpc":"2.0","id":2,"method":"Chain33.CreateTransaction","params":[{"execer": "user.p.game.coins","actionName":"TransferToExec","payload": { "amount": "100000000", "note": "", "to": "1HXdJBGF1p28jCp4jj8AsHpABzywukGoiR", "execName": "user.p.game.game"}}]}' -H 'content-type:text/plain;' ${MAIN_HTTP} | jq -r ".result")
单个交易的生成参考上面一节
交易组1
- 交易1: 将 CCNY 从token合约转移到paracross执行器
- 交易2: 将 paracross 合约里的CCNY, 跨链转移到 game链的paracross 合约
- 构造交易组
- 签名、发送、等待成功
{
"jsonrpc":"2.0",
"id":int32,
"method":"Chain33.CreateRawTxGroup",
"params":[{"txs":["交易1", "交易2"]}]
}
交易组2
- 交易1:将 game链的paracross 合约里的CCNY,转移到 game链的trade 合约
- 交易2:将 CCNY在 game链的trade 合约里和 game链的 coins的GBTY交换
- 交易3:将交易到手的GBTY, 转移到 game链的coins合约中
- 交易3:再将game链的coins合约的GBTY转移到 game合约进行游戏
- 构造交易组
- 签名、发送、等待成功
{
"jsonrpc":"2.0",
"id":int32,
"method":"Chain33.CreateRawTxGroup",
"params":[{"txs":["交易1", "交易2", "交易3", "交易4"]}]
}