# Besu Hive Test `UncleFromSideChain` Analysis
Analysis of failure of `UncleFromSideChain_Merge` and `UncleFromSideChain_Shanghai`. They have the same cause but will take an in-depth dive of `UncleFromSideChain_Shanghai` as an illustration.
## Test Description
* Import block 1 through 8 in order.
* Block 1 - 3 corresponds to blocknumber 1 through 3 on chainname='A'
* Block 4 - 8 are on chainname='B'. blocknumber for these blocks is 1, 2, 3, 4, 4 in the respective order
* Block 7 is intentially be a bad block
* Timestamp of block 8 is greater than block 3
* Expected outcome upon calling eth_getBlockByNumber for the latest block should be block 8 but Besu returns block 3
## Observation
[Link to the Hive test containing the blocks used](https://github.com/ethereum/tests/blob/7e5aa011f63a9119baec27ddcc18ea18235a6047/BlockchainTests/InvalidBlocks/bcMultiChainTest/UncleFromSideChain.json#L1454)
### Relevant Log:
```
last block hash mismatch:
want 0x020a8cc6958317b1abc36780cd99e108c39955224714e48fcbd0df9f43e77a0c
got 0x79fdf23dcf96d045cd41127ee3f0d061e70d9558212682c29142f9fc49a83842
block response: {
"baseFeePerGas": "0xc",
"difficulty": "0x0",
"extraData": "0x42",
"gasLimit": "0x2fefd8",
"gasUsed": "0x5208",
"hash": "0x79fdf23dcf96d045cd41127ee3f0d061e70d9558212682c29142f9fc49a83842",
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"miner": "0x8888f1f195afa192cfee860698584c030f4c9db1",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000020000",
"nonce": "0x0000000000000000",
"number": "0x3",
"parentHash": "0x928172cd14600429d6057b2ff2366ecd32e694311f0d81b1cddbd8529b82ebed",
"receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
"sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
"size": "0x286",
"stateRoot": "0x6f448c8c35eaff8ed4f1e1df9f0f39577c5bd60fbea662d7bbcb9d87b461888a",
"timestamp": "0x54c99839",
"totalDifficulty": "0x0",
"transactions": [
"0x3fdff461f477669637750436e50082c5c7d3a71765521045eef506363a0f31ab"
],
"transactionsRoot": "0x8c8775e959d553f9f991a21a8502dbe6819c53c518711f2cbbbd7ed998f65647",
"uncles": [],
"withdrawals": [],
"withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421"
}
```
## Code Analysis
Latest `eth_getBlockByNumber` looks up the head block of the `DefaultBlockChain` [here](https://github.com/hyperledger/besu/blob/ad7bd960e27921f5cf5ad20cd9f92eb7202b701f/ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/methods/EthGetBlockByNumber.java#L106C12-L106C32), which has block 3 as the head block, and hence returning the undesired result.
When importing block 4-8, the `DefaultBlockChain`'s head block (`chainHeader`) was never switched, because `handleChainReorg()` was never triggered due to condition `blockChoiceRule.compare(newBlock.getHeader(), chainHeader) > 0` was never met [here](https://github.com/hyperledger/besu/blob/ad7bd960e27921f5cf5ad20cd9f92eb7202b701f/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/chain/DefaultBlockchain.java#L383).
The above condition was failed, not because of the total difficulty (They both have same total difficult ie. 0), but because the `blockChoiceRule` was overwritten [here](https://github.com/hyperledger/besu/blob/ad7bd960e27921f5cf5ad20cd9f92eb7202b701f/besu/src/main/java/org/hyperledger/besu/controller/TransitionBesuControllerBuilder.java#L271). This is triggered by [`PostMergeContext.setIsPostMerge`](https://github.com/hyperledger/besu/blob/ad7bd960e27921f5cf5ad20cd9f92eb7202b701f/consensus/merge/src/main/java/org/hyperledger/besu/consensus/merge/PostMergeContext.java#L140) during [`createController()`](https://github.com/hyperledger/besu/blob/ad7bd960e27921f5cf5ad20cd9f92eb7202b701f/besu/src/main/java/org/hyperledger/besu/cli/subcommands/blocks/BlocksSubCommand.java#L212) in `BlocksSubCommand()`