0

We're running two versions of geth on Ropsten. One is pre-london (legacy) and the other one includes the london activation block (london). The versions we're running are:

legacy: Geth/v1.10.2-stable-97d11b01/linux-amd64/go1.15.11
london: Geth/v1.10.4-stable-aa637fd3/linux-amd64/go1.15.11

After the London hard fork was activated on Ropsten, we created a new transaction using the eth_sendTransaction RPC call. You can see this transaction here: https://ropsten.etherscan.io/tx/0x4551cee61076ef813876d400ecea64d071f31c665b15f3b5091624c00bc86dc5

Our understanding is that because geth is an EIP-155 signer then the transactions it signs after london activated should not be valid in the legacy (pre-london) Ropsten chain. However, this transaction somehow was propagated to our legacy node as well (and landed on a different block height).

Legacy node (geth v1.10.2):

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "blockHash": "0xef4a5a559cb842df4072b4f5040349a66f8dd81f57ffa5dde3659d0157660c51",
    "blockNumber": "0xa0ea16",
    "from": "0x7e6af75b56b7ecbd090d9b600676a28a836afea1",
    "gas": "0xa410",
    "gasPrice": "0x28fa6ae00",
    "hash": "0x4551cee61076ef813876d400ecea64d071f31c665b15f3b5091624c00bc86dc5",
    "input": "0x",
    "nonce": "0x16e",
    "to": "0x16066311b3f7b8a75a55dbc6dff692018db24239",
    "transactionIndex": "0x0",
    "value": "0x11c37937e08000",
    "type": "0x0",
    "v": "0x29",
    "r": "0xff144d1fc4e76e91549e768a9e45b09f1a8b7c5f908eae60152c7bf7cc6f7000",
    "s": "0x650e90d4920506f5f3dc205321c8d846cc4ec6e332e02443ba881386bd5b3d17"
  }
}

London node (v1.10.4):

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "blockHash": "0x8feda4804fba95cc709b1fe7daf0fdde9edc1a87cb3b0cef6a0dfe918ea7b4d6",
    "blockNumber": "0xa10aa3",
    "from": "0x7e6af75b56b7ecbd090d9b600676a28a836afea1",
    "gas": "0xa410",
    "gasPrice": "0x28fa6ae00",
    "hash": "0x4551cee61076ef813876d400ecea64d071f31c665b15f3b5091624c00bc86dc5",
    "input": "0x",
    "nonce": "0x16e",
    "to": "0x16066311b3f7b8a75a55dbc6dff692018db24239",
    "transactionIndex": "0x5",
    "value": "0x11c37937e08000",
    "type": "0x0",
    "v": "0x29",
    "r": "0xff144d1fc4e76e91549e768a9e45b09f1a8b7c5f908eae60152c7bf7cc6f7000",
    "s": "0x650e90d4920506f5f3dc205321c8d846cc4ec6e332e02443ba881386bd5b3d17"
  }
}

How is this possible? What are we getting wrong here?

Some additional context here: https://discord.com/channels/595666850260713488/745077610685661265/865583423438848020

1

M H Swende (holiman) said:

It's cross-chain replay protection, not cross-block or cross-fork-threshold or whatever.

Reference: https://discord.com/channels/595666850260713488/745077610685661265/865664081767956490

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.