QRC20整合技術文件

QTUM量子鏈開發團隊發表於2018-07-16

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欄位即為確認數。


相關文章