blockj: 基於Java的簡易區塊鏈項目
Downcodes小編今天帶給大家一個基於Java實現的簡易區塊鏈(聯盟鏈)專案-blockj。它包含了加密工具、錢包、P2P傳輸、區塊同步、網路共識等區塊鏈基礎實現,是一個非常適合初學者學習區塊鏈技術的專案。
專案架構
blockj 使用SpringBoot + Tio 網路框架實作。其主要架構如下:
1. 主程式: 使用SpringBoot框架實作。
2. P2P傳輸: 使用t-io網路框架實作。
運作環境
blockj 專案需要JDK 1.8 以上版本才能正常運作。
專案模組
blockj 專案主要包含以下三個模組:
1. blockj-base: 基礎公共工具包,包含加密工具、區塊、訊息等資料模型以及資料儲存等功能。
2. blockj-miner: 區塊鏈主程序,包含礦工、區塊同步、P2P網路、RPC API等功能。
3. blockj-client: 客戶端命令列工具,主要用於呼叫Miner的相關API,實現使用者與區塊鏈的互動。
快速開始
以下步驟教你如何創建一個區塊鏈網路並進行基本操作:
1. 創建創世節點(創建一個網路)
首先,你需要克隆專案並編譯打包:
`bash
git clone https://gitee.com/blackfox/blockj.git
cd blockj
mvn clean package
`
然後,創建創世節點:
`bash
./miner genesis --repo=/data/genesis --enable-mining=true
`
2. 啟動創世節點(Genesis Miner)
`bash
./miner run --repo=/data/genesis
`
3. 啟動新節點(加入網路)
為了讓新節點加入現有的網絡,你需要先使用創世區塊初始化Miner,然後啟動Miner:
`bash
./miner init --repo=/data/miner1 --genesis=genesis.car --api.port=8002 --p2p.port=3456
./miner run --repo=/data/miner1
`
客戶端使用
以下是一些常用的客戶端命令列操作:
1. 查看錢包列表
`bash
./client wallet list
`
輸出:
`
Address Balance Nonce
0x0d181310331612e107b5e0dfdf971cfb9de780adfds 800 10
0x2505bf54f3a63848e44a105e8de599ad08ae8c58 2400 0
0xb6258bc70240ee5daa213f671c08db51e50a4cbe 50800 30
cd3da3ec4195070e13a6d88b75101f6ceb427a8e 0 0
`
2. 創建新錢包
創建普通錢包:
`bash
./client wallet new
`
建立帶有助記詞的錢包(可設定密碼,產生keystore檔案):
`bash
./client wallet new --mnemonic=true 123456
`
3. 查詢錢包餘額
`bash
./client wallet balance 0x2505bf54f3a63848e44a105e8de599ad08ae8c58
`
輸出:
`
Address Balance
0x2505bf54f3a63848e44a105e8de599ad08ae8c58 2400
`
4. 轉賬
`bash
./client chain send --from=0x0d181310331612e107b5e0dfdf971cfb9de780adfds 0x2505bf54f3a63848e44a105e8de599ad083c58
`
輸出:
`
Send message, CID: 05b6074241f1406cd1a68731d74cf612f55981692a3f4e5d9da01b13b4ee3631
`
5. 查看當前鏈高度
`bash
./client chain head
`
6. 查看指定鏈上訊息
`bash
./client chain getMessage 05b6074241f1406cd1a68731d74cf612f55981692a3f4e5d9da01b13b4ee3631
`
輸出:
`
。 pubKey='PZ8Tyr4Nx8MHsRAGMpZmZ6TWY63dXWSCw5EXe33S25zZDT25sNYu1bjtBfaCwEGSgnGhJiE31fCfDsyE3pNFw7cC87VfQZQqifRent 1406cd1a68731d74cf612f55981692a3f4e5d9da01b13b4ee3631', status=APPENDING, nonce=2, params='null ', height=0, sign='30460221009A8B2750A6D986EB926B67163B740BBACDD07FE2D87F8FA9AE2F084249894776022100821CAE2F0842498947760221008213AE2F08424989477602210082135 867E9B65A5C68ED8A4293DB890'}
`
7. 查看指定高度的區塊信息
`bash
./client chain getBlock 1
`
輸出:
`
Block{header=BlockHeader{height=1, difficulty=282695530364541492733327600118866962532397423500099033299456992206819164769202097, 3703992202,030 0004c262f7ead28cc66c9336d7a8335cb8fea5a06b0b1fd7488c3c9b140987cc', previousHash='ed5126ddd65f39a17739b8eviousHash='ed5126ddd65f39a17739b8ed essages=[Message{version=0, from='B099', to='0xb6258bc70240ee5daa213f671c08db51e50a4cbe', value=50, timestamp=1672813674163,GM pubKey='PZ8Tyr4Nx8MHsRAY 1pyLgqDRiguC7JvjeGZJZ1si1qRYCAsVmu1UvYRqvhiCBgYDpmyuWK5VzD5KK4RNY', cid='3e1f8987b0d66b2de155e78]ef6984ab7cb669840b2de155e780,6984 nce=0, params='Miner Reward.', height=1, sign='304402202DF6EABBF5C81C41996C44F8E1230D44CAE8ADA9184B466D9B708ADC8B29025 7C2320DC3E6461A17C94D1820818559CA9 '}], blockSign='3046022100C04714C00642527AF6AA1DB2B537E5FD887F52999F66929AA2A928D4C6A4897A022100AF9888 F3991AF61AB86DEEFEAF15D81'}
`
8. 查看目前網路中P2P節點列表
`bash
./client net peers
`
9. 查看目前節點P2P連接訊息
`bash
./client net listen
`
輸出:
`
P2P 連接訊息,用於被其他節點連接
127.0.0.1:2345
`
10. 手動連接某個節點
`bash
./client net connect 192.22.33.11:3456
`
小結
blockj 專案是一個學習區塊鏈技術的入門級專案。透過它,你可以學習到區塊鏈的基本概念和實現方法。當然,它目前只實現了POW共識演算法,如果你想要用於生產項目,你還需要根據自己的項目需求進行修改和完善。
希望這篇文章對你有幫助。