前几年一直做区块链的项目, 最近一段时间有空闲时间就自己实现了一下 bitcoin 的功能.
代码在 gitee 上, github 因为网络原因更新会延迟.
基于 spring-boot
开发, 使用了 spring-boot-starter-webflux
(因为需要实现 http 的 bitcoin-rpc
接口)
网络使用 netty
框架, 区块链的索引使用 leveldb
的java实现
钱包使用 H2
的数据库
签名使用 bouncycastle
第三方实现 (JDK secp256k1 实现有BUG)
RPC 接口使用作者之前的实现 rpc-bitcoin
com.github.microwww.bitcoin.net
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
com.github.microwww.bitcoin.store.TxPool
com.github.microwww.bitcoin.chain.GenChainBlock
, 性能不好, 只为测试使用com.github.microwww.bitcoin.rpc
com.github.microwww.bitcoin.provider.BitcoinStarter
...provider.ServerStarter
默认监听 8333
/ 18333
/ 18444
, netty 监听 PeerChannelServerHandler
...provider.PeerEventListener
, 配置来源自 BitcoinStarter, netty 网络解析 PeerChannelClientHandler
PeerChannelClientProtocol.tryBlock
方法tryBlock
方法的 chain.getTransactionStore().verifyTransactions(cb);
(完)