4

Assuming I have two accounts, A and B, with balance 10 and 0 ETH respectively, and I send a transaction to a node transferring all balance from A to B.

If I try to create a new transaction sending balance from B to another account, while the previous transaction is still pending on the node, it seems I'm getting an insufficient balance error.

Going through the code in Parity, it seems that Parity checks for latest_balance of an account when checking if balance is enough, which is the balance on the latest mined block, not pending.

Is this a standard in Ethereum, or something dependent on the node's implementation? Do we know how Geth handles this?

Thank you!

4

I have an educated guess based on the following scenario that Ethereum does permit:

  • A sends 10 eth to B. (Tx01)
  • While Tx01 is pending, A also sends 10 eth to C. (Tx02)
  • Whether Tx01 or Tx02 end up in the chain (if any) is implementation-dependent and based on the node that actually mines the block.

As a result, one cannot rely on anything in the transaction pool for future transactions as there is no consensus about it. Therefore, I would not expect any implementation of Ethereum to permit such a transaction.

Furthermore, since Ethereum's state is dependent on the transactions executed, if the transaction is pending, the state has not been updated to allow the transaction to take place. An implementation of Ethereum could, in theory, tentatively allow such a transaction internally. However, it would have to be capable of resolving conflicts that arise between the implementation's dream-world and the network consensus.

Furthermore, the official whitepaper suggests that such a transaction would also be considered invalid (see "Mining" section) to begin with, so there less need to even speculatively compute the transaction.

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.