來源於項目 https://learnmeabitcoin.com/中的https://github.com/in3rsha/bitcoin-to-neo4j
bitcoin-to-beo4j
思路:整個過程就是從一種格式(區塊鏈數據)中獲取數據,然後將其轉換爲另一種格式(圖形數據庫)。使得此轉換比典型的數據轉換稍微棘手的唯一事情是,在開始之前瞭解比特幣數據的結構將很有幫助。
一旦將區塊鏈導入到Neo4j中,就可以在圖形數據庫上執行SQL數據庫無法進行的分析。例如,您可以按照比特幣的路徑查看是否連接了兩個不同的地址:
將比特幣區塊鏈交易數據導入到Neo4j圖形數據庫中,這樣的項目網上有很多,但這個是直接安裝讀取區塊文件後直接導進到neo4j中去,很方便,其他項目例如(1)https://github.com/behas/bitcoingraph (2)https://github.com/BlueMeanie/bitcoingraphdb 導出數據後需要運用neo4j的工具再導入csv文件
作者也放出了在線數據庫,賬號密碼估計需要支付比特幣才行,不如自己動手看看:
開始安裝:參考教程
git clone https://github.com/in3rsha/bitcoin-to-neo4j.git
測試環境:centos 7
Neo4j 3.0+:網上一大堆教程,推薦源碼安裝
首先需要安裝 java sdk:
yum install java-1.8.0-openjdk
wget https://neo4j.com/artifact.php?name=neo4j-community-2.3.9-unix.tar.gz
#注意對應neo4j的版本,修改版本名即可
tar -zvxf artifact.php\?name\=neo4j-community-2.3.9-unix.tar.gz
然後可以移動文件到 你需要的目錄
還需要修改下配置文件後臺啓動:
PHP 7.2+ -主腳本及其庫函數是用PHP編寫的。php版本需要大於5.4否則安裝失敗,教程 教程2
Redis 5.0.3+ -用於存儲導入狀態,以便可以隨時停止和啓動腳本。教程
另外需要安裝php的redis擴展:yum -y install php72w-pecl-redis 或者查看 教程
compose:centos下安裝教程
一切安裝完畢之後,進入目錄文件開始安裝,config.php配置文件如下:
The location of your ~/.bitcoin/blocks folder
Your Neo4j username and password.
define("BLOCKS", '/home/user/.bitcoin/blocks'); // the location of the blk.dat files you want to read
define("TESTNET", false); // are you reading blk.dat files from Bitcoin's testnet?
define("NEO4J_USER", 'neo4j');
define("NEO4J_PASS", 'neo4j');
define("NEO4J_IP", 'localhost');
define("NEO4J_PORT", '7687'); // this is the port used for the bolt protocol
define("REDIS_IP", 'localhost');
define("REDIS_PORT", '6379');
輸入一下命令開始跑起來:
php main.php
打印出解析結果:
開啓neo4j可以在瀏覽器中查看導入的數據,怎麼用可以參考作者的教程和視頻:
這裏很清楚看到導入節點是9104
過了一會又增加了好多:
重要:
- 生成的Neo4j數據庫大約是區塊鏈大小的6倍。因此,如果區塊鏈爲100GB,那麼您的Neo4j數據庫將爲600GB。
- 完成整個區塊鏈的導入可能需要60天以上的時間。該腳本不是對整個區塊鏈進行批量導入,而是對每個
blk.dat
1文件運行,並插入其遇到的每個塊和事務。因此,雖然初始導入需要“一會兒”,但完成後,它將在到達時不斷添加新塊。 - 我想對於其他的區塊鏈也能夠用稍微修改源碼就行,比如bch在48萬多區塊開始分叉,我試了下也能夠解析出來到neo4j中
儘管如此,在此腳本運行時,您仍然可以瀏覽數據庫中的任何內容。
有可能的錯誤
(1) 未定義的函數bcmod()安裝一個擴展即可,參考教程
yum install php72w-bcmath
(2)php的Allowed memory size of 134217728 bytes exhausted問題解決辦法
報錯:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 128 bytes) in xxxx/mysqli_result.php on line 183
解析:
134217728/1024/1024 = 128
解決方案1:
通過ini_set函數修改配置選項值
ini_set(‘memory_limit’,’256M’); //升級爲256M內存
解決方案2:
修改php.ini
修改php配置
vi /usr/local/php/etc/php.ini
memory_limit = 128 改成memory_limit = 256
(3) 其他問題:需要依賴的軟件問題,還有對計算機存儲有要求,按照現在的交易數量來看最少需要2T的硬盤
附錄:安裝運行命令集合