QRC20集成技术文档


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

1、基础说明

交易所使用一个主地址来存储全部用户的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代码: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

2、获取帐户金额

帐户地址为$userAddress数组

qtum-cli callcontract {TOKEN_CONTRACT_ADDRESS} 70a08231{to32bytesArg(addressToHash160($userAddress))}
复制代码

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

3、提现

提现地址为$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,能够用来查询。编码

4、获取新充值地址

QTUM的充值地址和QRC20代币的充值地址都是一样的格式,对于交易所来讲,同一个用户下面的QTUM充值地址和QRC20代币的充值地址能够是同一个。 也可使用以下命令获取新的充值地址:spa

qtum-cli getnewaddress
复制代码

5、获取充值\提现记录

要查询的地址为$depositAddress。开始查询的区块高度为$startingBlock(含此区块,能够为0,为了提升效率建议从用户触发操做后区块开始查)命令行

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

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

查询结果是一个json数组,经过解析log字段能够获得所须要的记录。

6、查询交易确认数

交易id为$txid

qtum-cli gettransaction {$txid}
复制代码

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

相关文章
相关标签/搜索