You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地regtest比特币网络如何实现指定地址入账通知监听

问题解决方案

1 修复Bitcoin Core节点配置(无需重新编译镜像)

你之前修改配置后编译镜像属于不必要操作,直接使用官方镜像挂载本地配置文件即可:

1.1 准备本地bitcoin.conf配置文件

regtest=1
server=1
# 开启bitcoinj所需的布隆过滤支持
peerbloomfilters=1
rpcallowip=0.0.0.0/0
rpcuser=test
rpcpassword=test123
txindex=1

1.2 调整docker-compose.yml配置

不用设置host网络,直接做端口映射即可避免端口冲突与配置不兼容问题:

version: '3'
services:
  node:
    # 直接用官方维护的稳定镜像,无需自行编译
    image: ruimarinho/bitcoin-core:24.0.1
    volumes:
      # 挂载本地配置文件到容器内,修改配置直接改本地文件重启容器即可
      - ./bitcoin.conf:/home/bitcoin/.bitcoin/bitcoin.conf
      - ./bitcoin-data:/home/bitcoin/.bitcoin
    ports:
      - "18443:18443" # RPC端口
      - "18444:18444" # P2P端口,bitcoinj连接的是该端口而非RPC端口
    command: -regtest

执行docker-compose up -d启动节点即可。

2 修复bitcoinj 0.15.10监听代码

不要手动创建Wallet实例,使用WalletAppKit自动处理区块同步、节点连接、布隆过滤器更新逻辑,避免配置遗漏导致监听不到交易:

2.1 依赖配置(Maven示例)

<dependency>
    <groupId>org.bitcoinj</groupId>
    <artifactId>bitcoinj-core</artifactId>
    <version>0.15.10</version>
</dependency>

2.2 监听代码示例

import org.bitcoinj.core.*;
import org.bitcoinj.kits.WalletAppKit;
import org.bitcoinj.params.RegTestParams;
import org.bitcoinj.wallet.Wallet;
import java.io.File;

public class AddressListener {
    public static void main(String[] args) throws InterruptedException {
        NetworkParameters params = RegTestParams.get();
        // 你要监听的目标地址
        Address watchAddress = Address.fromBase58(params, "2N23tWAFEtBtTgxNjBNmnwzsiPdLcNek181");

        WalletAppKit kit = new WalletAppKit(params, new File("./bitcoinj-cache"), "regtest-watch") {
            @Override
            protected void onSetupCompleted() {
                // 添加监听地址(watch-only模式,无需私钥)
                wallet().addWatchedAddress(watchAddress);
                // 注册到账监听器
                wallet().addCoinsReceivedEventListener((wallet, tx, prevBalance, newBalance) -> {
                    // 你的回调逻辑写在这里
                    System.out.println("收到入账交易,交易哈希:" + tx.getHashAsString());
                    System.out.println("入账金额:" + tx.getValueSentToMe(wallet).toFriendlyString());
                });
            }
        };
        // 连接本地节点的P2P端口18444
        kit.connectToLocalHost();
        // 启动同步
        kit.startAsync();
        kit.awaitRunning();
        System.out.println("监听启动完成,等待地址入账...");
        // 阻塞进程避免退出
        Thread.currentThread().join();
    }
}

3 测试验证

regtest网络中交易需要打包进区块才会触发确认通知,转账后需要手动生成区块:

  1. 先给节点生成初始余额:docker exec -it minimal-crypto-exchange_node_1 bitcoin-cli -regtest generatetoaddress 101 $(docker exec -it minimal-crypto-exchange_node_1 bitcoin-cli -regtest getnewaddress)
  2. 向监听地址转账:docker exec -it minimal-crypto-exchange_node_1 bitcoin-cli -regtest sendtoaddress 2N23tWAFEtBtTgxNjBNmnwzsiPdLcNek181 0.1
  3. 生成1个区块打包交易:docker exec -it minimal-crypto-exchange_node_1 bitcoin-cli -regtest generatetoaddress 1 $(docker exec -it minimal-crypto-exchange_node_1 bitcoin-cli -regtest getnewaddress)
    此时监听器会正常触发回调。

内容的提问来源于stack exchange,提问作者Glory to Russia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 05:15:01