Skip to content

Issues with running on the ethereum merge testnets #132

Open
@parithosh

Description

@parithosh

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
  • 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 :)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions