在比特幣應(yīng)用開發(fā)中,一個(gè)常見的問題就是,在知道比特幣地址的情況下,如何查詢這個(gè)地址上發(fā)生的所有交易?或者類似的說法,如何查詢一個(gè)指定的比特幣地址發(fā)生的所有交易? 本文將給出這一問題的三種解決方案。
如果要快速掌握比特幣的對接與應(yīng)用開發(fā),推薦匯智網(wǎng)的在線互動(dòng)課程: Java比特幣開發(fā)詳解 ----- Php比特幣開發(fā)詳解 ----- C#比特幣開發(fā)詳解
1、將比特幣交易數(shù)據(jù)存入數(shù)據(jù)庫由于比特幣的數(shù)據(jù)存儲結(jié)構(gòu),不可能直接利用比特幣的原始API來查詢指定地址的歷史交易數(shù)據(jù)。因此最樸素(Naive)的第一種解決方案,就是將比特幣區(qū)塊鏈上的每一筆交易數(shù)據(jù)存到自己的數(shù)據(jù)庫里,然后針對交易地址信息(例如Scriptpubkey、pubkey或者地址本身)建立索引,這樣就可以在數(shù)據(jù)庫上自由、高效地查詢了。
2、利用第三方的服務(wù)樸素的第一種方案需要自己解析比特幣區(qū)塊鏈數(shù)據(jù),自己搭建數(shù)據(jù)庫環(huán)境,可能你覺得有點(diǎn)麻煩。好在有很多第三方機(jī)構(gòu)已經(jīng)做了這件繁瑣的事情,并且通過開放API的形式提供出來,你可以直接使。
例如,你可以使用blockchain.info的api來實(shí)現(xiàn)這個(gè)功能:
$ curl https://blockchain.info/rawaddr/$bitcoin_address
3、換一種比特幣節(jié)點(diǎn)實(shí)現(xiàn)軟件如果你不愿意自己搞數(shù)據(jù)庫,也不愿意使用第三方的開放API,還有第三種解決方案,就是換一種支持按比特幣地址查詢交易的節(jié)點(diǎn)實(shí)現(xiàn)軟件,例如btcd,這是一個(gè)go語言實(shí)現(xiàn)的比特幣節(jié)點(diǎn)軟件,當(dāng)你啟動(dòng)btcd時(shí),只要使用--addrindex標(biāo)志就可以自動(dòng)建立比特幣地址索引了:
$ btcd --addrindex