I see that the validateTx function in txpool.go in geth prohibits a transaction from entering the pool if it does not have enough eth to cover gas costs + the value it attempts to send. But is this the same as consensus rules? Is it specified that such a transaction cannot go into a block? Will all validators enforce this? Or can a rogue validator override this requirement, attempt to send the tx, and it result in the transaction failing?

The specific usecase is a publicly posted signed transaction that we only want to trigger if the account has the specified amount of funds, making it impossible to broadcast it unless you deposit enough eth into the address to do so.

Edit: In all the execution clients I have found that they prevent such transactions from entering the mempool. I also see that the spec here: https://github.com/ethereum/execution-specs/blob/master/src/ethereum/paris/spec.py marks blocks with such transactions as invalid. But I can't find where in the execution client or the consensus client that check actually happens. Am I looking in the wrong place? Where do the clients check that none of the blocks they receive include transactions that have "gas fee + eth" > "balance"

1 Answer 1


Honestly I have no answer about your great questions, but I have a great note hope it helps you even one percent that the Ethereum network does not provide a way to cancel or reverse a transaction once it has been broadcast. Therefore, it is important to ensure that a transaction will be able to be included in a block before broadcasting it, by making sure that the account has sufficient Ether to cover the gas costs and value of the transaction.

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.