本文件說明了怎麼使用
qtumd
提供的命令完成基礎的QRC20操作
一、基礎說明
交易所使用一個主地址來儲存所有使用者的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程式碼:
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
欄位即為確認數。