1. 程式人生 > >使用bitcoinj讀取比特幣資料檔案 blkXXXXX.dat

使用bitcoinj讀取比特幣資料檔案 blkXXXXX.dat

比特幣的交易資料一般有兩種獲取方式,如果獲取的資料不多,可以使用bitcoin的API 或  bitcoin-cli,如果需要完整的資料,則建議將所需資料實時或定時轉儲到資料庫中,直接讀取區塊鏈的資料檔案是比較好的選擇。

比特幣的交易和塊資料預設存放在目錄 ~/.bitcoin/blocks/ 下。

bitcoinj (https://github.com/bitcoinj/bitcoinj) 是java實現的功能齊備的bitcoin開源專案,請下載最新版,包含了bitcoin的最新BIP的實現,否則會遇到異常情況。

//ExplorerTransaction,ExplorerBlock是自己的定義的類,用於存放篩選出來的交易和塊資料
   Set<ExplorerBlock> blocks;                                                             
   Set<ExplorerTransaction> transactions;
    blocks = new HashSet<>();
    transactions = new HashSet<>();
    NetworkParameters np =  MainNetParams.get();                             //準備一些必要的環境引數
    Context ct = Context.getOrCreate(np);
    Context.propagate(ct);
    List<File> blockChainFiles = new ArrayList<>();     
    blockChainFiles.add(new File("~/.bitcoin/blocks/blk000999.dat"));    //新增一個要讀取的檔案
    BlockFileLoader bfl = new BlockFileLoader(np, blockChainFiles);    //關鍵的一步,載入該檔案
    for (Block block : bfl){                                                                         //遍歷檔案中所有塊
            List<Transaction> listTx = block.getTransactions();
            for(Transaction tx : listTx){                                                          //遍歷該塊中的所有交易
//以下是處理包含OP_RETURN的交易
                    ExplorerTransaction optx = new ExplorerTransaction(block, tx);    //ExplorerTransaction,ExplorerBlock是自己的定義的類
                    if(optx.isOpReturn()){                                                          //如果包含OP_RETURN
                            // Adding block
                            ExplorerBlock tempBlock = new ExplorerBlock(block.getHashAsString(), block.getTime());
                            blocks.add(tempBlock);

                            // Adding transaction
                            optx.setTxHash(tx.getHashAsString());                      //讀取原交易中的交易Hash
                            optx.setBlockHash(block.getHashAsString());            //讀取所在區塊的Hash
                            optx.setFee(tx.getFee());                                             //讀取Fee
                            transactions.add(optx);
                    }
            }
    }

單執行緒的處理速度很快,如果採用多執行緒,例如4個執行緒,在主流電腦上,處理到塊檔案blk01317.dat ,估計需要不到兩個小時。

相關推薦

使用bitcoinj讀取資料檔案 blkXXXXX.dat

比特幣的交易資料一般有兩種獲取方式,如果獲取的資料不多,可以使用bitcoin的API 或  bitcoin-cli,如果需要完整的資料,則建議將所需資料實時或定時轉儲到資料庫中,直接讀取區塊鏈的資料檔案是比較好的選擇。 比特幣的交易和塊資料預設存放在目錄 ~/.bitco

資料結構

首先看一個區塊https://webbtc.com/block/000000000003ba27aa200b1cecaad478d2b00432346c3f1f3986da1afd33e506比特幣區塊分為2部分,區塊頭和交易資訊從https://webbtc.com/blo

區塊鏈資料查詢 資料查詢 的網站

提供區塊鏈資料查詢的網站就像是一個比特幣的搜尋引擎,你可以搜尋比特幣的地址、交易和區塊,以及可以看他們之間的關係和資金流動。 常見的區塊鏈資料查詢網站包括: 以上每一個查詢網站都有搜尋功能,可以通過地址,交易雜湊值或區塊號,搜尋到在比特幣網路和區塊鏈中對應的等價資料

如何設定資料包到D盤

比特幣的資料包非常龐大(大於10G),而比特幣錢包會預設把資料包放到C盤,我們的C盤空間往往不夠,這個時候,我們可以將資料包移動到D盤。請看位元時代小編提供的方法。第一步:到C盤找到比特幣資料包以Win 7為例,比特幣資料包一般儲存在C:\Users\Administrat

MyEclipse上運行全節點bitcoinj

出現 existing directory client DC walle 命令 http proto bitcoinj是bitcoin全節點的java實現。與比特幣官方推薦的C++實現不同的是:目前它並沒有內置RPC或命令行交互。 它的功能交互是通過幾個example例子

P2SH交易資料結構解析

1、解析原生交易 decoderawtransaction 01000000000101708256c5896fb3f00ef37601f8e30c5b460dbcd1fca1cd7199f9b56fc4ecd54000000000232200201aaa5a03ce8d33280eb9

從零開始學習(五)--P2P網路建立的流程之套接字的讀取和傳送

寫在前面: 本篇文章接續 從零開始學習比特幣開發(四)–網路初始化,載入區塊鏈和錢包,匯入區塊啟動節點 從零開始學習區塊鏈技術(三)-接入比特幣網路的關鍵步驟解析、建立比特幣錢包,以及重要rpc指令 從零開始學習區塊鏈技術(二)–如何接入比特幣網路以及其原理分析 從零開始學習

順豐3億條客戶資料疑洩露,暗網售價兩個

妙鏈營銷 > 劉浩-順豐客戶資料3億條,售價兩個比特幣,你怎麼看 > worddav1d7b70397f5c936d3f43250820a27c2a.png 近日,在”暗網交易市場”網站上,一個暗網使用者售賣順豐快遞資料,賣家稱掌握了順豐快遞客戶資

如何使用不同語言訪問類庫bitcoinj

對於需要廣泛深入的理解bitcoinj,防止緩衝區溢位和Android手機可很好的應用,Java是一個很好的選擇。但它也有老問題,冗長而且通常也不適合所有人。 本頁詳細介紹了其他程式設計開發語言如何使用bitcoinj。 Javascript Javascrip

區塊鏈的資料結構解析

區塊鏈(資料區塊、資料塊、資料塊鏈)作為比特幣的核心概念,對於理解比特幣結構起著至關重要的作用。在《什麼是資料區塊》中,編者從資料區塊分散式交易記錄的角度簡單的介紹了資料區塊的概念。今天,編者從資料區塊的程式結構上來詳細的分析資料區塊裡面到底記錄了什麼資訊。 資料區塊檔案的位置 如果你用的是Bit

原始碼解析(7) - 資料結構 - 區塊

比特幣原始碼解析(7) - 資料結構 - 區塊    https://blog.csdn.net/u012183589/article/details/77776730 0x00 摘要 區塊是區塊鏈的組成基本結構,也是交易資訊的載體,礦工通過挖礦的形式來產生新的區

第9課 錢包和現實中的錢包有什麼本質差別? -- Transaction資料結構、UTXO、錢包 -- 詳解

有興趣朋友也可以進一步關注公眾號“架構之道與術”, 獲取原文。 或掃描如下二維碼: 經過前面1序列的鋪墊,我們熟悉了各種基本概念,這1課,將進入最核心的原理的講解:Transaction與UTXO。這2個東西,是整個區塊鏈的核心的核心,後續一切,都基

當未來交易資料非常大時,普通使用者節點該怎麼辦

一、可擴充套件的支付驗證網路        現在安裝一個比特幣完整的節點錢包,總共需要大概100G左右的硬碟空間,計算方法為每一個區塊的大小為1M左右,乘以現在的總區塊數目就是完整節點的大小了;區塊鏈的區塊是一直都會增加的,意味著全節點的大小也會無止境的增長。    在未來由

從一個的原生交易資料分析交易指令碼的驗證過程

Alice與Bob’s Cafe的交易 txid:0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a57286c345c2f2 在BitconCore的命令列執行如下命令: bitcoin-cli g

bitcoin原始碼解析之資料結構

1. CTxOutAn output of a transaction. It contains the public key that the next input must be able to sign with to claim it.CTxOut類圖欄位屬性說明nValue交易輸出對應的金額scr

核心資料結構

我們學習計算機時曾經有這麼一個定義:程式=資料結構+演算法,對於一個區塊鏈,我認為從技術方面看與程式的定義類似,核心一個是共識演算法,一個是核心資料結構,這兩點直接決定了這條區塊鏈工作執行原理。比特幣的共識演算法,在這一篇《雜湊函式與比特幣共識演算法PoW》中已經講述了其原理,這一篇主要講述比特幣核心資料結構

應對新型“蠕蟲”式勒索軟件“wannacry”的緊急措施

parameter ren win mod deny arc ear tope blog 1.防火墻屏蔽445端口 命令行操作: 以管理員打開命令行執行以下命令 netsh firewall set opmode enable netsh advfirewall

關於病毒利用445端口加密系統的處理辦法

microsoft windows 修改註冊表 系統有些端口是我們平時用不到但是又存在危險的端口,例如139、135、445等端口,windows默認是開著的,這時我們可以手動關閉這些端口!關閉445端口的方法!方法二1.請在控制面板>程序>啟用或關閉windows功能>取消勾選

(Onion)病毒預防方法

windows services 進入註冊表 比特幣病毒來襲,目前受影響的系統大都為Windows系統,Linux系統、MAC系統還未出現,防禦目前最主要手段是禁止系統高危端口、系統補丁升級及安裝殺毒軟件。Windows系統存在很多被黑客利用的危險端口,例如135、136、137、138、13

病毒事件是否證明中國網絡安全不堪一擊?

比特幣病毒事件是否證明中國網絡安全不堪一擊?先簡單聊聊這兩天比特幣事件:時間:2017-05-12 08:00起風險:電腦只要聯網,有445端口隱患,就有可能中比特幣病毒,然後數據被加密,勒索不少錢財。影響範圍:Windows ALL。(微軟甚至最後連xp 2003都更新了補丁)處理方式:斷網數據備份,防火墻