Web3js Transactions – Resolving ValueError: ‘Only Replay-Protected (EIP-155) Transactions Allowed Over RPC’

pythontransactionsweb3.pyweb3js

Good afternoon,
after having been developing a blockchain web app for some months, it's the first time I get this error when making a transaction.

ValueError: {'code': -32000, 'message': 'only replay-protected (EIP-155) transactions allowed over RPC'}

This is my code. It has always worked, and I guess it's not a matter of code, it might be just a matter of Web3, but I'm asking just in case. Thanks in advance.

tx = {
    'nonce': nonce,
    'to': account_2,
    'value': web3.toWei(float_amount, 'ether'),
    'gas': 21000,
    'gasPrice': web3.toWei(50, 'gwei')
}
signed_tx = web3.eth.account.sign_transaction(tx, private_key)
tx_hash = web3.eth.send_raw_transaction(web3.toHex(signed_tx.rawTransaction))

Best Answer

You'll need to add chainId to your transaction object to save your tx from being replayed on other chains.

tx = {
    'chainId': 3, // for ropsten
    'nonce': nonce,
    'to': account_2,
    'value': web3.toWei(float_amount, 'ether'),
    'gas': 21000,
    'gasPrice': web3.toWei(50, 'gwei')
}

Check here for chain IDs of all EVM based chain