mafyak
mafyak

Reputation: 61

BitcoinJ issue - Peers are constantly dying. Chaos in logs

I have a basic Java app using the BitcoinJ library. On startup, I launch WalletAppKit and later attempt to send funds (using bitcoinj-core version 0.17-beta1). Currently, I don’t run my own node, so I connect to available nodes in the network. Here’s how I initialize WalletAppKit (I use an existing wallet or recover it from a seed if needed):

WalletAppKit kit;
MAX_CONNECTIONS = 4;
try {
    kit = WalletAppKit.launch(network, new File("."), "test-102", MAX_CONNECTIONS);
} catch (Exception e) {
    if (e instanceof IllegalStateException) {
        kitFileName = UUID.randomUUID().toString();
        WalletAppKit tempKit = WalletAppKit.launch(network, new File("."), kitFileName, MAX_CONNECTIONS);
        tempKit.restoreWalletFromSeed(DeterministicSeed.ofMnemonic("my_16_words_code_here", ""));
        tempKit.stopAsync();
        tempKit.close();
        kit = WalletAppKit.launch(network, new File("."), "test-102", MAX_CONNECTIONS);
    }
}

The issue I’m experiencing is that, after startup, my logs repeatedly produce:

2024-10-23 21:36:50,474 512462146  INFO  org.bitcoinj.core.PeerGroup - [3.21.200.4]:18333: Peer died      (5 connected, 0 pending, 5 max)
2024-10-23 21:36:50,474 512462146  WARN  org.bitcoinj.net.NioClientManager - Failed to connect with exception: java.nio.channels.ClosedChannelException: null
java.nio.channels.ClosedChannelException: null
    at java.base/sun.nio.ch.SocketChannelImpl.ensureOpen(SocketChannelImpl.java:160)
    at java.base/sun.nio.ch.SocketChannelImpl.beginFinishConnect(SocketChannelImpl.java:724)
    at java.base/sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:770)
    at org.bitcoinj.net.NioClientManager.handleKey(NioClientManager.java:75)
    at org.bitcoinj.net.NioClientManager.run(NioClientManager.java:133)
    at com.google.common.util.concurrent.AbstractExecutionThreadService$1.lambda$doStart$1(AbstractExecutionThreadService.java:56)
    at com.google.common.util.concurrent.Callables.lambda$threadRenaming$3(Callables.java:105)
    at org.bitcoinj.utils.ContextPropagatingThreadFactory.lambda$newThread$0(ContextPropagatingThreadFactory.java:49)
    at java.base/java.lang.Thread.run(Thread.java:829)
2024-10-23 21:37:04,299 512475971  INFO  org.bitcoinj.core.PeerGroup - [34.76.93.187]:18333: Peer died      (5 connected, 0 pending, 5 max)
2024-10-23 21:37:04,301 512475973  WARN  org.bitcoinj.net.NioClientManager - Failed to connect with exception: java.nio.channels.ClosedChannelException: null
java.nio.channels.ClosedChannelException: null
    at java.base/sun.nio.ch.SocketChannelImpl.ensureOpen(SocketChannelImpl.java:160)
    at java.base/sun.nio.ch.SocketChannelImpl.beginFinishConnect(SocketChannelImpl.java:724)
    at java.base/sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:770)
    at org.bitcoinj.net.NioClientManager.handleKey(NioClientManager.java:75)
    at org.bitcoinj.net.NioClientManager.run(NioClientManager.java:133)
    at com.google.common.util.concurrent.AbstractExecutionThreadService$1.lambda$doStart$1(AbstractExecutionThreadService.java:56)
    at com.google.common.util.concurrent.Callables.lambda$threadRenaming$3(Callables.java:105)
    at org.bitcoinj.utils.ContextPropagatingThreadFactory.lambda$newThread$0(ContextPropagatingThreadFactory.java:49)
    at java.base/java.lang.Thread.run(Thread.java:829)
2024-10-23 21:37:16,839 512488511  INFO  org.bitcoinj.core.PeerGroup - [142.251.208.99]:65227: Peer died      (5 connected, 0 pending, 5 max)
2024-10-23 21:37:16,839 512488511  WARN  org.bitcoinj.net.NioClientManager - Failed to connect with exception: java.nio.channels.ClosedChannelException: null
java.nio.channels.ClosedChannelException: null
    at java.base/sun.nio.ch.SocketChannelImpl.ensureOpen(SocketChannelImpl.java:160)
    at java.base/sun.nio.ch.SocketChannelImpl.beginFinishConnect(SocketChannelImpl.java:724)
    at java.base/sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:770)
    at org.bitcoinj.net.NioClientManager.handleKey(NioClientManager.java:75)
    at org.bitcoinj.net.NioClientManager.run(NioClientManager.java:133)
    at com.google.common.util.concurrent.AbstractExecutionThreadService$1.lambda$doStart$1(AbstractExecutionThreadService.java:56)
    at com.google.common.util.concurrent.Callables.lambda$threadRenaming$3(Callables.java:105)
    at org.bitcoinj.utils.ContextPropagatingThreadFactory.lambda$newThread$0(ContextPropagatingThreadFactory.java:49)
    at java.base/java.lang.Thread.run(Thread.java:829)

Sometimes the connection remains stable for a while, while other times it drops almost immediately:

2024-10-23 21:34:43,154 512334826  INFO  org.bitcoinj.core.PeerGroup - Attempting connection to [52.74.194.175]:12112     (4 connected, 3 pending, 5 max)
2024-10-23 21:34:43,155 512334827  INFO  org.bitcoinj.core.PeerGroup - Attempting connection to [138.199.6.199]:8333     (4 connected, 4 pending, 5 max)
2024-10-23 21:34:43,226 512334898  INFO  org.bitcoinj.net.NioClientManager - Connected to seed.testnet.bitcoin.sprovoost.nl/44.226.91.66:18333
2024-10-23 21:34:43,226 512334898  INFO  org.bitcoinj.core.Peer - Announcing to seed.testnet.bitcoin.sprovoost.nl/44.226.91.66:18333 as: /bitcoinj:0.17-beta1/
2024-10-23 21:34:43,298 512334970  INFO  org.bitcoinj.core.Peer - Peer{[44.226.91.66]:18333, version=70016, subVer=/Satoshi:25.0.0/, services=NETWORK, WITNESS, NETWORK_LIMITED, time=2024-10-24T01:34:43Z, height=3194890}
2024-10-23 21:34:43,300 512334972  INFO  org.bitcoinj.core.PeerGroup - Peer{[44.226.91.66]:18333, version=70016, subVer=/Satoshi:25.0.0/, services=NETWORK, WITNESS, NETWORK_LIMITED, time=2024-10-24T01:34:43Z, height=3194890}: New peer      (5 connected, 3 pending, 5 max)
2024-10-23 21:34:43,300 512334972  INFO  org.bitcoinj.core.Peer - Peer{[44.226.91.66]:18333, version=70016, subVer=/Satoshi:25.0.0/, services=NETWORK, WITNESS, NETWORK_LIMITED, time=2024-10-24T01:34:43Z, height=3194890}: Peer does not support bloom filtering.
2024-10-23 21:34:43,301 512334973  INFO  org.bitcoinj.core.PeerGroup - [44.226.91.66]:18333: Peer died      (4 connected, 3 pending, 5 max)
2024-10-23 21:34:43,301 512334973  INFO  org.bitcoinj.core.PeerGroup - Not yet setting download peer because there is no clear candidate.
2024-10-23 21:34:43,301 512334973  WARN  org.bitcoinj.net.ConnectionHandler - Error writing message to connection, closing connection
java.nio.channels.CancelledKeyException: null
    at java.base/sun.nio.ch.SelectionKeyImpl.ensureValid(SelectionKeyImpl.java:71)
    at java.base/sun.nio.ch.SelectionKeyImpl.interestOps(SelectionKeyImpl.java:90)
    at org.bitcoinj.net.ConnectionHandler.setWriteOps(ConnectionHandler.java:119)
    at org.bitcoinj.net.ConnectionHandler.writeBytes(ConnectionHandler.java:167)
    at org.bitcoinj.core.PeerSocketHandler.sendMessage(PeerSocketHandler.java:107)
    at org.bitcoinj.core.PeerGroup.handleNewPeer(PeerGroup.java:1696)
    at org.bitcoinj.core.PeerGroup$PeerStartupListener.onPeerConnected(PeerGroup.java:341)
    at org.bitcoinj.core.Peer.lambda$versionHandshakeComplete$3(Peer.java:576)
    at org.bitcoinj.core.Peer.versionHandshakeComplete(Peer.java:576)
    at java.base/java.util.concurrent.CompletableFuture$UniRun.tryFire(CompletableFuture.java:783)
    at java.base/java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:478)
    at java.base/java.util.concurrent.CompletableFuture$UniCompletion.claim(CompletableFuture.java:568)
    at java.base/java.util.concurrent.CompletableFuture$UniRun.tryFire(CompletableFuture.java:780)
    at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
    at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2079)
    at org.bitcoinj.core.Peer.processVersionAck(Peer.java:568)
    at org.bitcoinj.core.Peer.processMessage(Peer.java:490)
    at org.bitcoinj.core.PeerSocketHandler.receiveBytes(PeerSocketHandler.java:199)
    at org.bitcoinj.net.ConnectionHandler.handleKey(ConnectionHandler.java:239)
    at org.bitcoinj.net.NioClientManager.handleKey(NioClientManager.java:97)
    at org.bitcoinj.net.NioClientManager.run(NioClientManager.java:133)
    at com.google.common.util.concurrent.AbstractExecutionThreadService$1.lambda$doStart$1(AbstractExecutionThreadService.java:56)
    at com.google.common.util.concurrent.Callables.lambda$threadRenaming$3(Callables.java:105)
    at org.bitcoinj.utils.ContextPropagatingThreadFactory.lambda$newThread$0(ContextPropagatingThreadFactory.java:49)
    at java.base/java.lang.Thread.run(Thread.java:829)
2024-10-23 21:34:43,302 512334974  INFO  org.bitcoinj.core.PeerSocketHandler - [44.226.91.66]:18333 - java.nio.channels.CancelledKeyException
2024-10-23 21:34:43,302 512334974  WARN  org.bitcoinj.net.ConnectionHandler - Error handling SelectionKey: java.nio.channels.CancelledKeyException 
java.nio.channels.CancelledKeyException: null
    at java.base/sun.nio.ch.SelectionKeyImpl.ensureValid(SelectionKeyImpl.java:71)
    at java.base/sun.nio.ch.SelectionKeyImpl.readyOps(SelectionKeyImpl.java:130)
    at java.base/java.nio.channels.SelectionKey.isWritable(SelectionKey.java:377)
    at org.bitcoinj.net.ConnectionHandler.handleKey(ConnectionHandler.java:245)
    at org.bitcoinj.net.NioClientManager.handleKey(NioClientManager.java:97)
    at org.bitcoinj.net.NioClientManager.run(NioClientManager.java:133)
    at com.google.common.util.concurrent.AbstractExecutionThreadService$1.lambda$doStart$1(AbstractExecutionThreadService.java:56)
    at com.google.common.util.concurrent.Callables.lambda$threadRenaming$3(Callables.java:105)
    at org.bitcoinj.utils.ContextPropagatingThreadFactory.lambda$newThread$0(ContextPropagatingThreadFactory.java:49)
    at java.base/java.lang.Thread.run(Thread.java:829)
2024-10-23 21:34:48,155 512339827  INFO  org.bitcoinj.core.PeerSocketHandler - [3.21.200.4]:18333: Timed out
2024-10-23 21:34:48,155 512339827  INFO  org.bitcoinj.core.PeerGroup - [3.21.200.4]:18333: Peer died      (4 connected, 2 pending, 5 max)
2024-10-23 21:34:48,155 512339827  INFO  org.bitcoinj.core.PeerSocketHandler - [52.74.194.175]:12112: Timed out
2024-10-23 21:34:48,156 512339828  INFO  org.bitcoinj.core.PeerGroup - [52.74.194.175]:12112: Peer died      (4 connected, 1 pending, 5 max)
2024-10-23 21:34:48,156 512339828  INFO  org.bitcoinj.core.PeerSocketHandler - [138.199.6.199]:8333: Timed out
2024-10-23 21:34:48,156 512339828  INFO  org.bitcoinj.core.PeerGroup - [138.199.6.199]:8333: Peer died      (4 connected, 0 pending, 5 max)
2024-10-23 21:34:48,156 512339828  INFO  org.bitcoinj.core.PeerGroup - Waiting 3374 ms before next connect attempt to [144.24.243.138]:18333
2024-10-23 21:34:51,530 512343202  INFO  org.bitcoinj.core.PeerGroup - Waiting 0 ms before next connect attempt to [144.24.243.138]:18333
2024-10-23 21:34:51,531 512343203  INFO  org.bitcoinj.core.PeerGroup - Waiting 0 ms before next connect attempt to [144.24.243.138]:18333
2024-10-23 21:34:51,531 512343203  INFO  org.bitcoinj.core.PeerGroup - Attempting connection to [144.24.243.138]:18333     (4 connected, 1 pending, 5 max)
2024-10-23 21:34:51,636 512343308  INFO  org.bitcoinj.net.NioClientManager - Connected to testnet-seed.bitcoin.jonasschnelli.ch/144.24.243.138:18333
2024-10-23 21:34:51,636 512343308  INFO  org.bitcoinj.core.Peer - Announcing to testnet-seed.bitcoin.jonasschnelli.ch/144.24.243.138:18333 as: /bitcoinj:0.17-beta1/
2024-10-23 21:34:51,744 512343416  INFO  org.bitcoinj.core.Peer - Peer{[144.24.243.138]:18333, version=70016, subVer=/Satoshi:28.0.0/, services=NETWORK, WITNESS, NETWORK_LIMITED, P2P_V2, time=2024-10-24T01:34:51Z, height=3194890}
2024-10-23 21:34:51,745 512343417  INFO  org.bitcoinj.core.PeerGroup - Peer{[144.24.243.138]:18333, version=70016, subVer=/Satoshi:28.0.0/, services=NETWORK, WITNESS, NETWORK_LIMITED, P2P_V2, time=2024-10-24T01:34:51Z, height=3194890}: New peer      (5 connected, 0 pending, 5 max)
2024-10-23 21:34:51,745 512343417  INFO  org.bitcoinj.core.Peer - Peer{[144.24.243.138]:18333, version=70016, subVer=/Satoshi:28.0.0/, services=NETWORK, WITNESS, NETWORK_LIMITED, P2P_V2, time=2024-10-24T01:34:51Z, height=3194890}: Peer does not support bloom filtering.
2024-10-23 21:34:51,746 512343418  INFO  org.bitcoinj.core.PeerGroup - [144.24.243.138]:18333: Peer died      (4 connected, 0 pending, 5 max)
2024-10-23 21:34:51,746 512343418  INFO  org.bitcoinj.core.PeerGroup - Not yet setting download peer because there is no clear candidate.

On one occasion, I used a friend’s node, but he informed me that my IP was banned for misbehavior, with this log entry from his node:

tbtcd-1  | 2024-10-18 03:02:54.003 [INF] SYNC: New valid peer my_ip_here:56154 (inbound) (/bitcoinj:0.17-beta1/)
tbtcd-1  | 2024-10-18 03:03:02.547 [WRN] PEER: Misbehaving peer my_ip_here:56154 (inbound): mempool -- ban score increased to 63
tbtcd-1  | 2024-10-18 03:03:03.809 [WRN] PEER: Misbehaving peer my_ip_here:56154 (inbound): mempool -- ban score increased to 95
tbtcd-1  | 2024-10-18 03:03:12.376 [WRN] PEER: Misbehaving peer my_ip_here:56154 (inbound): mempool -- ban score increased to 118
tbtcd-1  | 2024-10-18 03:03:12.376 [WRN] PEER: Misbehaving peer my_ip_here:56154 (inbound) -- banning and disconnecting

Can someone help me with:

  1. Why is my wallet behaving this way, and how can I resolve it?
  2. How can I avoid being banned?
  3. How can I determine why my ban score is increasing?

Any additional advice or guidance would be greatly appreciated.

I’ve tried different BitcoinJ versions (from 0.13 to the latest), but the issue persists.

Upvotes: 1

Views: 35

Answers (0)

Related Questions