I know signed transaction got v=37. now I am wondering how 'v=37' is used to check that the transaction is right one. nodes check v of every transaction they received?

1 Answer 1


I think you got it wrong. The signed transaction got v = chained_id * 2 + 35 or chained_id * 2 + 36 that's the valid v from spurious dragon hard fork, the previous v = 27 and v = 28 is also valid. The chain_id indentify which blockchain you are using ( chain_id = 1 for ethereum mainnet chain_id = 2 for ethereum testnet and so on, for full chain_id check this wrbsite: https://chainid.network)

The reason why they add chain_id is to protect again replay attack for more info check the answer to this question: What is a replay attack?. In short a replay attack is taking a transaction on one blockchain, and maliciously or fraudulently repeating it on another blockchain. So they add chain_id so that everybody know which transaction on which chain.

The hard part is how they check a transaction is valid. Here is where mathic happen. To check that a transaction is valid you need v, r, s (r, s is generate when you sign the transaction, v is what you calculate using the fomula above) and the transaction data hash. Then there is a function that take all of the requirement above and then it will return back the address that send the signed transaction , you just need to check that is true then the transaction is valid. For more information read the appendix F from ethereum yellow paper: https://ethereum.github.io/yellowpaper/paper.pdf.

  • Thank you very much. It's very helpful for me.
    – Hak
    Commented Mar 29, 2019 at 3:48

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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