pokkst / bitcoincashj

A library for working with Bitcoin Cash
Apache License 2.0
44 stars 18 forks source link

Blockchain download from peer stuck #14

Open abhaygupta1999 opened 1 year ago

abhaygupta1999 commented 1 year ago

I have setup my own node in AWS, and use that only in peer group. Like below: peerGroup.addAddress(InetAddress.getByName(host)); peerGroup.setMaxConnections(1);

But it got stuck, and not downloading new blocks of data. Can anyone please help me here? I was debugging from this morning, but can't able to find the issue.

Here are the logs: org.bitcoinj.core.Peer : Peer{[10.17.10.55]:8333, version=70015, subVer=/Bitcoin Cash Node:24.0.0(EB32.0)/, services=1061 (NETWORK, BLOOM, NETWORK_LIMITED, remaining: 100000), time=2023-03-14 11:21:53, height=783873}: Too many pending pings, disconnecting org.bitcoinj.core.PeerGroup : [10.17.10.55]:8333: Peer died (2 connected, 0 pending, 1 max) org.bitcoinj.core.PeerGroup : Download peer died. Picking a new one. org.bitcoinj.core.PeerGroup : Unsetting download peer: Peer{[10.17.10.55]:8333, version=70015, subVer=/Bitcoin Cash Node:24.0.0(EB32.0)/, services=1061 (NETWORK, BLOOM, NETWORK_LIMITED, remaining: 100000), time=2023-03-14 11:21:53, height=783873} org.bitcoinj.core.PeerGroup : Setting download peer: Peer{[10.17.10.55]:8333, version=70015, subVer=/Bitcoin Cash Node:24.0.0(EB32.0)/, services=1061 (NETWORK, BLOOM, NETWORK_LIMITED, remaining: 100000), time=2023-03-14 11:21:53, height=783873} o.b.c.listeners.DownloadProgressTracker : Chain download switched to Peer{[10.17.10.55]:8333, version=70015, subVer=/Bitcoin Cash Node:24.0.0(EB32.0)/, services=1061 (NETWORK, BLOOM, NETWORK_LIMITED, remaining: 100000), time=2023-03-14 11:21:53, height=783873} org.bitcoinj.core.PeerSocketHandler : [10.17.10.55]:8333 - java.nio.channels.CancelledKeyException c.PeerGroup$ChainDownloadSpeedCalculator : 0 blocks/sec, 0 tx/sec, 0 pre-filtered tx/sec, avg/last 0.00/0.00 kilobytes per sec, chain/common height 769180/783874, stall disabled (threshold <0.78 KB/sec for 10 seconds)

And then below log groups keeps on coming with waiting time increasing.

org.bitcoinj.core.PeerGroup : [10.17.10.55]:8333: Peer died (0 connected, 0 pending, 1 max) org.bitcoinj.core.PeerGroup : Peer discovery took 3.630 ?s and returned 0 items from 0 discoverers org.bitcoinj.core.PeerGroup : Waiting 600066 ms before next connect attempt to [10.17.10.55]:8333

I am using bitcoincashj version 0.26.2.1 I found out some thing that it stucked at block number 783808 (https://www.blockchain.com/explorer/blocks/bch/783808) for which the block size is around 8 Mb. It is not able to sync that huge block. Node connection is working fine. As, I have resynced the wallet from start. But it gets stuck at chain height 783807. Now my question is how to sync big size blocks in bitcoinj? @pokkst Please help here

pokkst commented 1 year ago

It is not the block size that is the issue if I had to guess at first glance. There exist several 8+, especially 32MB, blocks that bitcoincashj can process just fine. These new blocks seem to be full of OP_RETURN outputs, but I don't know for sure what the cause is right now, and I don't really have the time/interest to figure it out.

abhaygupta1999 commented 1 year ago

Hi @pokkst Your small help will be much appreciated. Its a PROD issue for me. And the library is huge to get through the whole flow. If you can provide me some direction, on which files or methods to check for the issue, it will help me a lot to debug.

abhaygupta1999 commented 1 year ago

Yes, you were right @pokkst It is somehow related to OP_RETURN. I have added logs to check, for example, for block number 783808, it was able to get transactions data for it, in processTransaction, then it says, Received broadcast filtered block "blockHash" But, it does start processing next blocks. It takes time to process the above transactions. And it takes more time when the transaction has OP_RETURN.

Can you please answer two questions?

  1. What exactly happens after we receive broadcast filtered block?
  2. How can we ignore transactions with OP_RETURN it it?