区块链 bitcoin 的 Java 实现

前几年一直做区块链的项目, 最近一段时间有空闲时间就自己实现了一下 bitcoin 的功能.
代码在 gitee 上, github 因为网络原因更新会延迟.

架构

  • 基于 spring-boot 开发, 使用了 spring-boot-starter-webflux (因为需要实现 http 的 bitcoin-rpc 接口)
  • 网络使用 netty 框架, 区块链的索引使用 leveldb 的java实现
  • 钱包使用 H2 的数据库
  • 签名使用 bouncycastle 第三方实现 (JDK secp256k1 实现有BUG)
  • RPC 接口使用作者之前的实现 rpc-bitcoin

功能列表

  1. 基于 netty 实现了 bitcoin 的网络协议 com.github.microwww.bitcoin.net
  2. 区块的下载和存储 com.github.microwww.bitcoin.store.PeerChannelClientHandler / DiskBlock, 区块文件格式跟bitcoin-core的完全相同 /blocks/blk?????.dat
  3. 脚本 com.github.microwww.bitcoin.script 实现了少部分常用功能函数, 主要为交易校验使用
  4. 钱包 com.github.microwww.bitcoin.wallet 使用 H2 的数据库, 钱包地址每次生成是随机的, 跟bitcoin-core 不同
  5. 交易模版 com.github.microwww.bitcoin.script.PubKeyScript,
  6. 交易签名的校验 com.github.microwww.bitcoin.chain.sign
  7. UTXO 交易查询(暂未实现)
  8. 本地交易的创建(暂未实现)
  9. 缓存交易 com.github.microwww.bitcoin.store.TxPool
  10. 挖矿 com.github.microwww.bitcoin.chain.GenChainBlock, 性能不好, 只为测试使用
  11. RPC 接口基本没有实现 com.github.microwww.bitcoin.rpc

代码说明

  1. Bitcoin 启动入口 com.github.microwww.bitcoin.provider.BitcoinStarter
  2. Server 监听 ...provider.ServerStarter 默认监听 8333 / 18333 / 18444, netty 监听 PeerChannelServerHandler
  3. Peer 的入口 ...provider.PeerEventListener, 配置来源自 BitcoinStarter, netty 网络解析 PeerChannelClientHandler
  4. 区块链的校验: PeerChannelClientProtocol.tryBlock 方法
  5. 交易的校验 : 在 tryBlock 方法的 chain.getTransactionStore().verifyTransactions(cb);

(完)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容