本文檔說明了怎麼使用
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
字段即爲確認數。