Skip to content

NullPointerException when fast syncing QBFT chain #5856

Closed
@matthew1001

Description

Description

2023-09-06 09:09:07.295+01:00 | BftProcessorExecutor-QBFT-0 | ERROR | EventMultiplexer | State machine threw exception while processing event \{BlockTimerExpiry{Round Identifier=ConsensusRoundIdentifier{Sequence=378, Round=0}}\}
java.lang.IllegalStateException: Block creation failed unexpectedly. Will restart on next block added to chain.
        at org.hyperledger.besu.ethereum.blockcreation.AbstractBlockCreator.createBlock(AbstractBlockCreator.java:292)
        at org.hyperledger.besu.ethereum.blockcreation.AbstractBlockCreator.createBlock(AbstractBlockCreator.java:156)
        at org.hyperledger.besu.ethereum.blockcreation.AbstractBlockCreator.createBlock(AbstractBlockCreator.java:142)
        at org.hyperledger.besu.consensus.qbft.statemachine.QbftRound.createAndSendProposalMessage(QbftRound.java:130)
        at org.hyperledger.besu.consensus.qbft.statemachine.QbftBlockHeightManager.handleBlockTimerExpiry(QbftBlockHeightManager.java:136)
        at org.hyperledger.besu.consensus.common.bft.statemachine.BaseBftController.handleBlockTimerExpiry(BaseBftController.java:167)
        at org.hyperledger.besu.consensus.common.bft.EventMultiplexer.handleBftEvent(EventMultiplexer.java:65)
        at java.base/java.util.Optional.ifPresent(Optional.java:178)
        at org.hyperledger.besu.consensus.common.bft.BftProcessor.run(BftProcessor.java:65)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
        at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.NullPointerException: Cannot invoke "org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions.selectTransactions(org.hyperledger.besu.ethereum.eth.transactions.PendingTransactions$TransactionSelector)" because "this.pendingTransactions" is null
        at org.hyperledger.besu.ethereum.eth.transactions.TransactionPool.selectTransactions(TransactionPool.java:526)
        at org.hyperledger.besu.ethereum.blockcreation.BlockTransactionSelector.buildTransactionListForBlock(BlockTransactionSelector.java:274)
        at org.hyperledger.besu.ethereum.blockcreation.AbstractBlockCreator.selectTransactions(AbstractBlockCreator.java:362)
        at org.hyperledger.besu.ethereum.blockcreation.AbstractBlockCreator.createBlock(AbstractBlockCreator.java:200)
        ... 11 more

Steps to Reproduce (Bug)

  1. Start a 5 node QBFT chain
  2. Stop one of the nodes and delete its database
  3. Restart the node with --sync-mode=FAST --fast-sync-min-peers=4 (the min peers is needed to avoid the min number of 5 before syncing starts)

Expected behavior: The node syncs with the chain and then resumes proposing & validating blocks (since it was before it was stopped and its data deleted)

Actual behavior: NPE ^^

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

Labels

bugSomething isn't workingnon mainnet (private networks)not related to mainnet features - covers privacy, permissioning, IBFT2, QBFT

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions