gpt4 book ai didi

java - 如何在 Bitcoinj (java) 中查看某个地址的交易?

转载 作者:行者123 更新时间:2023-11-30 08:58:21 32 4
gpt4 key购买 nike

我的目标是监视一个公共(public)比特币地址,并在向该地址发送钱时打印到控制台。就这样。我暂时使用之前在 Bitcoin Core 中生成的地址。

我正在做以下事情:

 NetworkParameters params = MainNetParams.get();
Wallet wallet = Wallet.loadFromFile(file);
BlockStore blockStore = new MemoryBlockStore(params);
BlockChain chain = new BlockChain(params, wallet, blockStore);

PeerGroup peerGroup = new PeerGroup(params, chain);
peerGroup.addPeerDiscovery(new DnsDiscovery(params));
peerGroup.setUseLocalhostPeerWhenPossible(true);
peerGroup.startAsync();

Address add = new Address(params, "1NpxxxxxxxxxxxxxxxaSC4");
wallet.addWatchedAddress(add);

wallet.addEventListener(new AbstractWalletEventListener() {
@Override
public synchronized void onCoinsReceived(Wallet w, Transaction tx, Coin prevBalance, Coin newBalance) {
System.out.println("[main]: COINS RECIEVED!");
System.out.println("\nReceived tx " + tx.getHashAsString());
System.out.println(tx.toString());
}
});

System.out.println("\nDone!\n");
System.out.println(wallet.toString());

我感觉我没有正确处理 AbstractWalletEventListener。当我向地址汇款时,我没有收到我希望在控制台中看到的文本。相反,我只是从 peerGroup.startAsync() 方法中看到来自 [NioClientManager] 的“同行宣布新交易”的连续流。

我做错了什么,我该如何纠正?我花的时间比我应该花的时间多得多,看起来应该是一个如此简单的任务。

附言。我为“loadFromFile”调用的文件只是一个由 bitcoinj 生成的空白默认钱包文件。没什么特别的。

编辑:另外,我不想查看钱包的总余额。我只想知道新交易何时进入。旧交易与我的程序无关。

最佳答案

我终于明白了。花了我足够长的时间。我决定只使用钱包应用程序套件,而不是手动执行此操作。这是我做我想做的事情的最终代码(删除公钥和文件)。

final NetworkParameters params = MainNetParams.get();

try{

//initialize files and stuff here

WalletAppKit kit = new WalletAppKit(params, wakfile, "_wak");
kit.setAutoSave(true);
kit.connectToLocalHost();
kit.startAsync();
kit.awaitRunning();
kit.peerGroup().addPeerDiscovery(new DnsDiscovery(params));
kit.wallet().addWatchedAddress(new Address(params, "1NxxxxxxxxxxxxxxxxC4"));
kit.wallet().addEventListener(new AbstractWalletEventListener() {
@Override
public synchronized void onCoinsReceived(Wallet w, Transaction tx, Coin prevBalance, Coin newBalance) {
System.out.println("[main]: COINS RECIEVED!");
System.out.println("\nReceived tx " + tx.getHashAsString());
System.out.println(tx.toString());
}
});
} catch (IOException e) {
e.printStackTrace();
} catch (AddressFormatException e) {
e.printStackTrace();
}

为什么这行得通而我发布的却行不通,我仍然不完全确定。我肯定错过了什么。如果你看到这篇文章并且知道我在上面做错了什么;请告诉我。对以后的引用还是有用的。

关于java - 如何在 Bitcoinj (java) 中查看某个地址的交易?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27727439/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com