Skip to content

主链资产和平行链资产交换和使用

QM edited this page Dec 21, 2020 · 1 revision

在了解 币的流转和交换 之后, 介绍下主链资产和平行链资产交换和使用

资产

  1. 主链资产: 在主链合约里发行的。 如 coins合约里的bty, token合约里的CCNY
  2. 平行链资产: 在某条平行连上合约里发行的。 如 game链上coins 合约的 GBTY

跨链

跨链指一条链上的资产转移到另一条链上去

目前在bityuan主链/平行链生态中, 只能由主链资产转移到平行链上使用。

跨链交换和使用

跨链交换和使用举例: 在主币资产token合约里的CCNY,转移到game链上使用

流程

  1. 将 CCNY 从token合约转移到paracross执行器
  2. 将 paracross 合约里的CCNY, 跨链转移到 game链的paracross 合约
  3. 将 game链的paracross 合约里的CCNY,转移到 game链的trade 合约
  4. 将 CCNY在 game链的trade 合约里和 game链的 coins的GBTY交换
  5. 将交易到手的GBTY, 转移到 game链的coins合约中
  6. 再将game链的coins合约的GBTY转移到 game合约
  7. 进行后续游戏

先介绍几个概念

  1. 要进行跨链操作, 必须将资产转移到 paracross 合约。 paracross 合约提供了跨链功能
  2. trade 合约提供的交换功能。 需要交换不同的资产,需要将资产转移到trade 合约
  3. chain33的合约架构是将功能用合约实现,所有要调用对用功能, 需要先将资产转移到对应合约。 上面看上去是需要非常多的步骤, 但是chain33 提供了交易组的功能, 可以将几个交易放在交易组里。 几个交易只要有一个执行失败, 其他的交易都会同时失败。 跨链操作需要多个区块才能完成, 后续交易需要依赖跨链完成, 所以这里分为两个步骤
  4. 资产名称: 主链上资产,在平行链上叫 在 user.p.game.paracross合约里 token.CCNY 资产

交易组1

  1. 将 CCNY 从token合约转移到paracross执行器
  2. 将 paracross 合约里的CCNY, 跨链转移到 game链的paracross 合约

交易组2

  1. 将 game链的paracross 合约里的CCNY,转移到 game链的trade 合约
  2. 将 CCNY在 game链的trade 合约里和 game链的 coins的GBTY交换
  3. 将交易到手的GBTY, 转移到 game链的coins合约中
  4. 再将game链的coins合约的GBTY转移到 game合约进行游戏

使用交易版本

过程如上篇介绍, 需要生成交易,签名, 发送交易, 等待成功。 由于签名, 发送交易, 等待成功过程是一样的, 不写出来了

  1. 将 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")

  1. 将 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")
    
  1. 将 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")
  1. 将 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")
  1. 将交易到手的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")
   
  1. 再将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. 交易1: 将 CCNY 从token合约转移到paracross执行器
  2. 交易2: 将 paracross 合约里的CCNY, 跨链转移到 game链的paracross 合约
  3. 构造交易组
  4. 签名、发送、等待成功
{
    "jsonrpc":"2.0",
    "id":int32,
    "method":"Chain33.CreateRawTxGroup",
    "params":[{"txs":["交易1", "交易2"]}] 
}

交易组2

  1. 交易1:将 game链的paracross 合约里的CCNY,转移到 game链的trade 合约
  2. 交易2:将 CCNY在 game链的trade 合约里和 game链的 coins的GBTY交换
  3. 交易3:将交易到手的GBTY, 转移到 game链的coins合约中
  4. 交易3:再将game链的coins合约的GBTY转移到 game合约进行游戏
  5. 构造交易组
  6. 签名、发送、等待成功
{
    "jsonrpc":"2.0",
    "id":int32,
    "method":"Chain33.CreateRawTxGroup",
    "params":[{"txs":["交易1", "交易2", "交易3", "交易4"]}] 
}