emeraldpay / emeraldpay/dshackle

Issues with running on the ethereum merge testnets

Open
#132 3 comments 1 reaction 0 assignees View on GitHub
Dominant language
Rust
Stars
350
Forks
57
PR merge metrics
No merged PRs in 30d

Description

## Description
I tried to run dshackle in front of a geth execution client for the etherum testnet `merge-devnet-2` with the following config:
```
version: v1
port: 2449
tls:
enabled: false

proxy:
host: 0.0.0.0
port: 2450
routes:
- id: eth
blockchain: ethereum

cluster:
defaults:
- chains:
- ethereum
upstreams:
- id: geth
chain: ethereum
connection:
ethereum:
rpc:
url: "http://localhost:8550"
```

Dshackle fails to update its `height` as shown by the logs:
```
2021-03-12 20:10:35.650 | INFO | Multistream | State of ETH: height=21611, status=[UNAVAILABLE/1], lag=[0], weak=[geth]
2021-03-12 20:10:50.641 | INFO | Multistream | State of ETH: height=21611, status=[OK/1], lag=[0], weak=[]
2021-03-12 20:11:05.642 | INFO | Multistream | State of ETH: height=21611, status=[OK/1], lag=[0], weak=[]
2021-03-12 20:11:35.642 | INFO | Multistream | State of ETH: height=21611, status=[OK/1], lag=[0], weak=[]
2021-03-12 20:12:05.642 | INFO | Multistream | State of ETH: height=21611, status=[OK/1], lag=[0], weak=[]
```

Dshackle seems to find a `height` during the startup process and never updates it even though the chain progresses.
So when i request for the `eth_getBlockByNumber latest` block, i always get the one shown in the logs as `height`. However, manually requesting for a newer block works fine.

However this behaviour isn't seen on mainnet, i aimed my Dshackle towards a mainnet node and it updates/works fine.

This leads me to believe its an issue with the change in behaviour introduced by the merge testnets.

## How to reproduce:
- Sync a merge devnet Execution client(eth1)+Consensus client(eth2) pair(both are needed for the merge testnet): [instructions](https://hackmd.io/dFzKxB3ISWO8juUqPpJFfw)
- Configure Dshackle to the Execution client RPC port
- Test the call `eth_getBlockByNumber` with `latest`, multiple times with some gap in between

## Potential theories:
- It seems like Dshackle has some logic around Total difficulty to check if a block is to be updated, merge testnets after "the merge" will have the same difficulty throughout - meaning Dshackle might not update its understanding of the latest block
- ??

## Other debug steps I tried:
- I ran a json rpc snooper to capture all req/responses and compared them between the merge and mainnet nodes. The JSON bodies are unchanged. Dshackle does seem to be calling `eth_blockNumber` and receiving a later block than shown by `height`, it is also using this new block in the subsequent `eth_getBlockByNumber` call - however it doesn't seem to be updating its view afterwards.

## Note:
- The merge-devnets are re-launched every week, I'd be happy to point to newer instructions/configs or even keep this one around.
- I'm unsure if the maintainers are aware of the merge changes, I'd be happy to answer questions/forward to more knowledgeable people if needed.
- Thank you so much for looking at my issue :)

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.