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字段即爲確認數。

相關文章
相關標籤/搜索