美文网首页
区块链 bitcoin 的 Java 实现

区块链 bitcoin 的 Java 实现

作者: 无名樵夫 | 来源:发表于2021-11-08 14:32 被阅读0次

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

    (完)

    相关文章

      网友评论

          本文标题:区块链 bitcoin 的 Java 实现

          本文链接:https://www.haomeiwen.com/subject/dubuzltx.html