前几年一直做区块链的项目, 最近一段时间有空闲时间就自己实现了一下 bitcoin 的功能.
代码在 gitee 上, github 因为网络原因更新会延迟.
架构
- 基于
spring-boot开发, 使用了spring-boot-starter-webflux(因为需要实现 http 的bitcoin-rpc接口) - 网络使用
netty框架, 区块链的索引使用leveldb的java实现 - 钱包使用
H2的数据库 - 签名使用
bouncycastle第三方实现 (JDK secp256k1 实现有BUG) - RPC 接口使用作者之前的实现
rpc-bitcoin
功能列表
- 基于 netty 实现了 bitcoin 的网络协议
com.github.microwww.bitcoin.net - 区块的下载和存储
com.github.microwww.bitcoin.store.PeerChannelClientHandler/DiskBlock, 区块文件格式跟bitcoin-core的完全相同/blocks/blk?????.dat - 脚本
com.github.microwww.bitcoin.script实现了少部分常用功能函数, 主要为交易校验使用 - 钱包
com.github.microwww.bitcoin.wallet使用 H2 的数据库, 钱包地址每次生成是随机的, 跟bitcoin-core 不同 - 交易模版
com.github.microwww.bitcoin.script.PubKeyScript, - 交易签名的校验
com.github.microwww.bitcoin.chain.sign - UTXO 交易查询(暂未实现)
- 本地交易的创建(暂未实现)
- 缓存交易
com.github.microwww.bitcoin.store.TxPool - 挖矿
com.github.microwww.bitcoin.chain.GenChainBlock, 性能不好, 只为测试使用 - RPC 接口基本没有实现
com.github.microwww.bitcoin.rpc
代码说明
- Bitcoin 启动入口
com.github.microwww.bitcoin.provider.BitcoinStarter - Server 监听
...provider.ServerStarter默认监听8333/18333/18444, netty 监听PeerChannelServerHandler - Peer 的入口
...provider.PeerEventListener, 配置来源自 BitcoinStarter, netty 网络解析PeerChannelClientHandler - 区块链的校验:
PeerChannelClientProtocol.tryBlock方法 - 交易的校验 : 在
tryBlock方法的chain.getTransactionStore().verifyTransactions(cb);
(完)








网友评论