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 0x2505bf54f3a63848e44a105e8de599ad08ae8c58 123
`
输出:
`
Send message, CID: 05b6074241f1406cd1a68731d74cf612f55981692a3f4e5d9da01b13b4ee3631
`
5. 查看当前链高度
`bash
./client chain head
`
6. 查看指定链上消息
`bash
./client chain getMessage 05b6074241f1406cd1a68731d74cf612f55981692a3f4e5d9da01b13b4ee3631
`
输出:
`
Message{version=1, from='0x0d181310331612e107b5e0dfdf971cfb9de780adfds', to='0x2505bf54f3a63848e44a105e8de599ad08ae8c58', value=123, timestamp=1672826743640, pubKey='PZ8Tyr4Nx8MHsRAGMpZmZ6TWY63dXWSCw5EXe33S25zZDT25sNYu1bjtBfaCwEGSgnGhJiE31fCfDsyE3pNFw7cC87VfQZQqiEdntMmztfpiDcRe1gv3aJJ4', cid='05b6074241f1406cd1a68731d74cf612f55981692a3f4e5d9da01b13b4ee3631', status=APPENDING, nonce=2, params='null', height=0, sign='30460221009A8B2750A6D986EB926B67163B740BBACDD07FE2D87F8FA9AE2F08424989477602210082C1C36EAEEC6367C023847F995291873F305B867E9B65A5C68ED8A4293DB890'}
`
7. 查看指定高度的区块信息
`bash
./client chain getBlock 1
`
输出:
`
Block{header=BlockHeader{height=1, difficulty=28269553036454149273332760011886696253239742350009903329945699220681916416, nonce=703, createTime=1672813674, hash='0004c262f7ead28cc66c9336d7a8335cb8fea5a06b0b1fd7488c3c9b140987cc', previousHash='ed5126ddd65f39a17739b8e26ea3edecfff6bf196148dc259d9a3eddeefc23d5'}, messages=[Message{version=0, from='B099', to='0xb6258bc70240ee5daa213f671c08db51e50a4cbe', value=50, timestamp=1672813674163, pubKey='PZ8Tyr4Nx8MHsRAGMpZmZ6TWY63dXWSD1ErKp8AqSj4Ph9Jsj2Gvk7w1pyLgqDRiguC7JvjeGZJZ1si1qRYCAsVmu1UvYRqvhiCBgYDpmyuWK5VzD5KK4RNY', cid='3e1f8987b0d66b2de155e78aeef6984ab7cb6c3acdf03c835c01f4b4088fb90d', status=SUCCESS, nonce=0, params='Miner Reward.', height=1, sign='304402202DF6EABBF5C81C41996C44F8E1230D44CAE8ADA9184B466D9B708ADC8B050225022049D74E4E99E0EA8E56208AD2E4B7B17C2320DC3E6461A17C94D1820818559CA9'}], blockSign='3046022100C04714C00642527AF6AA1DB2B537E5FD887F52999F66929AA2A928D4C6A4897A022100AF98888FDC825FFB0683E8D65494363790E5173F3991AF61AB86DEEFEAF15D81'}
`
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共识算法,如果你想要用于生产项目,还需要根据自己的项目需求进行修改和完善。
希望这篇文章对你有所帮助。