QRC20集成技术文档


本文档说明了怎么使用qtumd提供的命令完成基础的QRC20操作

一、基础说明

交易所使用一个主地址来存储所有用户的token,以下用MAIN_QRC_ADDRESS来指代。 QRC20代币的合约地址以下使用TOKEN_CONTRACT_ADDRESS来指代。 gas limit使用DEFAULT_GAS_LIMIT指代,推荐为250000。 gas price使用DEFAULT_GAS_PRICE指代,推荐为0.00000040TOKEN_DECIMALS定义了token的小数点位置,值为8。 还需要定义如下操作: addressToHash160把编码后的地址转义为hash160地址,这是基础概念,不过多解释。 to32bytesArg把十六进制字符串的参数进行编码,编码后的结果为向参数前补字符0,扩展到64个字符的字符串。 addDecimals把金额转为十六进制字符串, 具体操作可以参考如下php代码:

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。 命令行中出现{}的地方请带入前面定义的值进行替换。 注意命令行中的空格。

二、获取账户金额

账户地址为$userAddress

qtum-cli callcontract {TOKEN_CONTRACT_ADDRESS} 70a08231{to32bytesArg(addressToHash160($userAddress))}

输出结果为json,里面的executionResult.output即为账户余额。

三、提现

提现地址为$userAddress, 提现金额为$amount(单位为1token)。

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代币的充值地址可以是同一个。 也可以使用如下命令获取新的充值地址:

qtum-cli getnewaddress

五、获取充值\提现记录

要查询的地址为$depositAddress。开始查询的区块高度为$startingBlock(含此区块,可以为0,为了提高效率建议从用户触发操作后区块开始查)

qtum-cli searchlogs {$startingBlock} 999999999 '{"addresses": ["{TOKEN_CONTRACT_ADDRESS}"]}' '{"topics": ["ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]}'

注意:参数里面有json,最外层的{}不需要去替换。

查询结果是一个json数组,通过解析log字段可以得到所需要的记录。

六、查询交易确认数

交易id为$txid

qtum-cli gettransaction {$txid}

命令结果的confirmations字段即为确认数。

results matching ""

    No results matching ""