-
Notifications
You must be signed in to change notification settings - Fork 109
币的流转和交换
QM edited this page Dec 21, 2020
·
1 revision
- 合约可能产生币
- 合约可以使用币
比如
- 在bityaun 链上, coins 合约产生 bty 主币
- 在bityaun 链上, token 合约产生 CCNY (一种稳定币), ITVB(主播币,一种用于主播应用的几分)
一个地址有多少币, 可以通过 Chain33.GetBalance 接口查询
# 在产生币的合约中查询
# 查询14KEKbYtKKQm4wMthSK9J4La4nAiidGozt 在 coins 中 有多少bty
# 说明:asset_exec asset_symbol 默认为 coins, bty
req='{"method":"Chain33.GetBalance", "params":[{"addresses" : ["14KEKbYtKKQm4wMthSK9J4La4nAiidGozt"], "execer" : "coins"}]}'
resp=$(curl -ksd "$req" "${MAIN_HTTP}")
# 在使用币的合约中查询
# 说明:execer 和 asset_exec 一致,表示查询产生币的合约有多少币
# 查询14KEKbYtKKQm4wMthSK9J4La4nAiidGozt 在 trade 合约有多少 token中发现的CCNY
req='{"method":"Chain33.GetBalance", "params":[{"addresses" : ["14KEKbYtKKQm4wMthSK9J4La4nAiidGozt"], "execer" : "trade", "asset_exec": "token", "asset_symbol" : "CCNY"}]}'
resp=$(curl -ksd "$req" "${MAIN_HTTP}")
一个地址对应的私钥的拥有者是币的所有者, (保管好自己的私钥). 币的所有者可以对币进行转移和使用。 对币的操作和查询步骤有区别, 查询只需要发送查询请求就可以了, 操作需要发送交易,区块链打包,才能生效。 一般转化为rpc请求分为三个步骤
- 构造交易
- 签名
- 发送
# 构造交易
req='具体的交易'
txHex=$(curl -sd "$req" ${MAIN_HTTP} | | jq .result)
# 共同的步骤,下面不再列出
# 签名交易
signHex=$(curl -sd '{"method":"Chain33.SignRawTx","params":[{"expire":"300s", "privkey":"'$owner_key'","txHex":'$txHex'}]}' ${MAIN_HTTP} |jq .result)
# 发送交易
curl -sd '{"method":"Chain33.SendTransaction","params":[{"data":'$signHex'}]}' ${MAIN_HTTP}
转账
- 可以用于付账,输入对方的地址, 在应用上可能上扫对方的二维码地址, (类似扫码支付)
- 可以用来打赏主播,主播可以用来发红包
tx=$(curl -ksd '{"method":"Chain33.CreateTransaction","params":[{"execer":"'$exec'","actionName":"Transfer","payload":{"to":"'$to'", "amount":'$amount'}}]}' ${MAIN_HTTP} | jq -r ".result")
转账到合约
- 把币从产生币的合约中,转移到使用币的合约中
- 一般是你需要在特定的合约中使用, 才将币转移到对应合约
unsignedTx=$(curl -s --data-binary '{"jsonrpc":"2.0","id":2,"method":"Chain33.CreateTransaction","params":[{"execer": "'"${execName}"'","actionName":"TransferToExec","payload": {"cointoken":"'"${tokenSymbol}"'", "amount": "10", "note": "", "to": "'"${token_addr}"'", "execName": "'"${execName}"'"}}]}' -H 'content-type:text/plain;' ${MAIN_HTTP} | jq -r ".result")
从合约提币
- 在合约中暂时不使用币, 将币从对应合约转移到产生币的合约
unsignedTx=$(curl -s --data-binary '{"jsonrpc":"2.0","id":2,"method":"Chain33.CreateTransaction","params":[{"execer": "'"${execName}"'","actionName":"Withdraw","payload": {"cointoken":"'"${tokenSymbol}"'", "amount": "10", "note": "", "to": "'"${token_addr}"'", "execName": "'"${execName}"'"}}]}' -H 'content-type:text/plain;' ${MAIN_HTTP} | jq -r ".result")
币的转移过程是
- 从产生币的合约转出,到使用币的合约
- 从使用币的合约, 向产生币的合约转入
不存在从使用币的合约转移到另一个使用币的合约的操作
在合约中使用:
- 不存在我要在这个合约里干什么的疑惑, 因为你是先有使用币的想法,才将币转移到对应的使用币的合约
使用币的合约,举例
- 在trade合约中和其他币进行交换
- 在token合约里用bty申请发行某token
# 在token合约里用bty申请发行某token
# price 10000*1e8 表示发行token的费用为 10000 bty
# 具体信息看下面链接
https://chain.33.cn/document/102#1.1%20%E7%94%9F%E6%88%90%E9%A2%84%E5%88%9B%E5%BB%BAtoken%20%E7%9A%84%E4%BA%A4%E6%98%93%EF%BC%88%E6%9C%AA%E7%AD%BE%E5%90%8D%EF%BC%89
unsignedTx=$(curl -s --data-binary '{"jsonrpc":"2.0","id":2,"method":"token.CreateRawTokenPreCreateTx","params":[{"name": "yinhebib", "symbol": "'"${tokenSymbol}"'", "total": 100000000000, "price": 10000*1e8, "category": 1,"owner":"'${tokenAddr}'"}]}' -H 'content-type:text/plain;' ${MAIN_HTTP} | jq -r ".result")
# 在trade合约中和其他币进行交换
# 发起买入CCNY
# https://chain.33.cn/document/105#1.12%20%E7%94%9F%E6%88%90%20%E4%B9%B0%E5%85%A5token%E7%9A%84%E4%BA%A4%E6%98%93%EF%BC%88%E6%9C%AA%E7%AD%BE%E5%90%8D%EF%BC%89
res=$(curl -s --data-binary '{"jsonrpc":"2.0","id":2,"method":"trade.CreateRawTradeBuyLimitTx","params":[{"tokenSymbol":"CCNY","amountPerBoardlot":1000000,"minBoardlot":1, "pricePerBoardlot":100000, "totalBoardlot":200, "fee": 1, "assetExec":"token"}]}' -H 'content-type:text/plain;' ${MAIN_HTTP} | jq -r ".error | not")
以上交易生效都需要签名和发送交易上链