詳情請參考以下兩個網址
基礎 URL: 依您的服務器配置而定
共通響應結構:
成功時返回:
{
"result": "success",
"data": {}
}
失敗時返回:
{
"result": "fail",
"error": "錯誤訊息"
}
- URL:
/get/balance
- 方法:
GET
- 參數:
address
: string (必須)
- 響應: 餘額資訊
- URL:
/get/privatekey
- 方法:
GET
- 參數:
address
: string (必須)
- 響應: 私鑰資訊
- URL:
/get/transaction
- 方法:
GET
- 參數:
txid
: string (必須)
- 響應: 交易資訊
- URL:
/get/utxo
- 方法:
GET
- 參數:
address
: string (非必須)
- 響應: UTXO 列表
- URL:
/get/contract
- 方法:
GET
- 參數:
protocol
: string (非必須)
- 響應: 合約列表
- URL:
/get/newaddress
- 方法:
GET
- 參數: 無
- 響應: 新地址
note: 以下參數小寫開頭為 query string 參數,大寫開頭為 body 參數,實際傳輸依舊用小寫開頭
- URL:
/block/generate
- 方法:
POST
- 參數:
address
: string (非必須)
- 響應: 生成的區塊 ID 列表
- URL:
/get/contractmessage
- 方法:
POST
- 參數:
Address
: string (必須)Arguments
: string (必須)
- 響應: 合約訊息
const result = await fetch(`${BASE_URL}get/contractmessage`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
address: targetAddress,
arguments: args,
}),
});
- URL:
/rawtransaction/create
- 方法:
POST
- 參數:
Inputs
: array (必須)Outputs
: object (必須)Contract
: string (非必須)
- 響應: 原始交易資訊
const result = await fetch(`${BASE_URL}rawtransaction/create`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
inputs: [utxo.input],
outputs: [utxo.output],
contract: {
action: contract.action,
code: contract.code,
address: contract.address,
args: contract.args,
},
}),
});
- URL:
/rawtransaction/send
- 方法:
POST
- 參數:
RawTransaction
: string (必須)
- 響應: 發送結果
const result = await fetch(`${BASE_URL}rawtransaction/send`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
rawTransaction: signedTx,
}),
});
- URL:
/rawtransaction/sign
- 方法:
POST
- 參數:
RawTransaction
: string (必須)PrivateKey
: string (必須)
- 響應: 簽名結果
const result = await fetch(`${BASE_URL}rawtransaction/sign`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
rawTransaction: rawTx,
privateKey: privateKey,
}),
});
概念解釋:
所有交易的創建都有三個流程:
- 創建原始交易
- 簽名原始交易
- 發送原始交易
所以需要按照順序調用這三個 post 方法, 並且將上一個方法的結果作為下一個方法的參數, 另外為了創建交易所需要的資金(utxo) 需要先獲取 utxo 作為創建交易的 input
以上流程可以創建一個交易, 基於交易有以下兩種合約操作
- 部署合約: 在區塊鏈上部署智能合約, 並且返回合約地址和交易編號
- 執行合約: 在區塊鏈上執行智能合約, 返回交易編號
最後, 若要讀取數據可以直接調用以下方法, 此方法無需基於交易
- 傾印合約訊息: 獲取合約執行結果
結論, 智能合約的使用可以被視為是非同步後端調用, 概念上就是利用 deployContract 非同步定義要做的行為, 利用 callContract 非同步執行合約。 最後用 getContractMessage 同步獲取合約執行結果。
以下 API 皆為 GET 請求, 作為 scanner 被呼叫
/get/utxo
獲取未花費輸出 (UTXO)/get/contract
獲取合約資訊
基於 bitcoin 的 utxo 集沒有使用 address 作為 index, 所以需要掃描所有區塊, 並且過濾出符合條件的 utxo , 這個過程是非常耗時的, 所以需要一個 scanner 來完成這個任務, 並且將結果存入資料庫, 以供後續使用。常見的使用情境是創建交易時需要解鎖 utxo。
合約資訊的獲取是基於區塊鏈上的合約"一般化介面", 這個資訊是不會變動的, 所以只需要掃描一次即可, 並且將結果存入資料庫, 以供後續使用。常見的使用情境是針對特定協議的合約產生列表。