本文档说明了怎么使用
qtumd
提供的命令完成基础的QRC20操做php
交易所使用一个主地址来存储全部用户的token,如下用MAIN_QRC_ADDRESS
来指代。 QRC20代币的合约地址如下使用TOKEN_CONTRACT_ADDRESS
来指代。 gas limit使用DEFAULT_GAS_LIMIT
指代,推荐为250000
。 gas price使用DEFAULT_GAS_PRICE
指代,推荐为0.00000040
。 TOKEN_DECIMALS
定义了token的小数点位置,值为8
。 还须要定义以下操做: addressToHash160
把编码后的地址转义为hash160地址,这是基础概念,不过多解释。 to32bytesArg
把十六进制字符串的参数进行编码,编码后的结果为向参数前补字符0,扩展到64个字符的字符串。 addDecimals
把金额转为十六进制字符串, 具体操做能够参考以下php代码:html
function addDecimals($amount){
$decimalPos=getNumberOfDecimals($amount);
$amount= gmp_init(str_replace(".","",$amount));
return gmp_strval(gmp_mul($amount,gmp_pow(10,(TOKEN_DECIMALS-$decimalPos))),16);
}
function getNumberOfDecimals($amount){
if (($pos = strpos($amount, ".")) !== FALSE) {
return strlen(substr($amount, $pos+1));
}else{
return 0;
}
}
复制代码
请使用-logevents -txindex
参数运行qtumd
。 命令行中出现{}
的地方请带入前面定义的值进行替换。 注意命令行中的空格。json
帐户地址为$userAddress
。数组
qtum-cli callcontract {TOKEN_CONTRACT_ADDRESS} 70a08231{to32bytesArg(addressToHash160($userAddress))}
复制代码
输出结果为json,里面的executionResult.output
即为帐户余额。bash
提现地址为$userAddress
, 提现金额为$amount
(单位为1token)。ui
qtum-cli sendtocontract {TOKEN_CONTRACT_ADDRESS} a9059cbb{to32bytesArg(addressToHash160($userAddress))}{to32bytesArg(addDecimals($amount)) 0 {DEFAULT_GAS_LIMIT} {DEFAULT_GAS_PRICE} {MAIN_QRC_ADDRESS}
复制代码
命令执行结果的txid即本次交易id,能够用来查询。编码
QTUM
的充值地址和QRC20代币的充值地址都是一样的格式,对于交易所来讲,同一个用户下面的QTUM
充值地址和QRC20代币的充值地址能够是同一个。 也可使用以下命令获取新的充值地址:spa
qtum-cli getnewaddress
复制代码
要查询的地址为$depositAddress
。开始查询的区块高度为$startingBlock
(含此区块,能够为0,为了提升效率建议从用户触发操做后区块开始查)命令行
qtum-cli searchlogs {$startingBlock} 999999999 '{"addresses": ["{TOKEN_CONTRACT_ADDRESS}"]}' '{"topics": ["ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]}'
复制代码
注意:参数里面有json,最外层的{}
不须要去替换。code
查询结果是一个json数组,经过解析log
字段能够获得所须要的记录。
交易id为$txid
。
qtum-cli gettransaction {$txid}
复制代码
命令结果的confirmations
字段即为确认数。