当前位置: 首页 > 工具软件 > Bitcoin > 使用案例 >

区块链 bitcoin 的 Java 实现

耿玄裳
2023-12-01

前几年一直做区块链的项目, 最近一段时间有空闲时间就自己实现了一下 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);

(完)

 类似资料: