8

If we take the block validation algorithm described in the white paper (Section Blockchain and Mining), it states at point 6:

Let TX be the block's transaction list, with n transactions. For all i in 0...n-1, set S[i+1] = APPLY(S[i],TX[i]). If any applications returns an error, or if the total gas consumed in the block up until this point exceeds the GASLIMIT, return an error.

Is the bold claim true? I mean if the bold part would be true, would it imply that valid blocks cannot contain transactions with errors? Or is it simply a generic validation algorithm that does not correspond to the real one?

(I know for sure that there are valid blocks with failed transactions, e.g. out of gas exception, callstack overflow, etc., e.g. https://etherscan.io/tx/0x3967f859c56c61f3365f6873ea001985e4e694952a9c22b68be731132c8e3e77)

2
+25

It is important to understand that this is a block validation algorithm. When this section of the whitepaper talks about returning an error, this is at the block layer as opposed to the transaction layer. An error at the block validation level will not allow a block to be propagated to the network, as opposed to an error at the transaction layer, which will be broadcasted to the network, as you have shown in your example link.

if the total gas consumed in the block up until this point exceeds the GASLIMIT, return an error

When thinking about this from a block validation perspective, this makes perfect sense. If a miner attempts to include transactions in their block whose total gas is greater than the GASLIMIT, the block will not be valid and thus will never see the network. If this were not the case, miners would include every transaction in their block as to receive all of the transaction fees.

If any applications returns an error...return an error.

The key to this is to understand that it is talking about an application, and not a specific transaction. In this statement, an application is referring to a mining client, or someone who is validating the blocks. With this understanding, it is more clear that this statement is true—if the block validating application returns an error, return an error.

  • 3
    Thank you. I thought that "application" was referred to the APPLY. So you mean literally an Exception in the running program (and not at the EVM level) or did I get it wrong? (Sorry, but for me is still a little bit confusing) – Briomkez Nov 16 '18 at 9:01
  • 1
    Yes, I interpret it as an application/program level. It is confusing, but my rationale is that this whitepaper is a top level overview while the yellow paper dives into EVM operation. – shane Nov 16 '18 at 9:36
  • 1
    Sorry, but I am still thinking about it :). Can you provide a concrete example? (I can think only to "invalid instructions in the bytecode to execute" or "the sender does not have enough money to send to the recipient"). Are my examples correct or are they still in another plane? – Briomkez Nov 17 '18 at 11:32
  • For the application error, this would be something like the client configuring a block incorrectly so it gets rejected from the network. For example, if you (the miner) are supposed to include a timestamp in the block, and you do not actually include one in the block when you send it to the network, it will be rejected at the application level. For the total gas consumed, that is simply if you (a miner) tries to include transactions whose combined gas is over the gasLimit. – shane Nov 17 '18 at 15:43
  • 1
    Here, you described points 2 and and only the part of point 6 that was clear to me. In point 6 Buterin refers to the single transactions. Application seems to refer to the various apply. It is confusing for New comers. – Briomkez Nov 18 '18 at 8:10
0

error correction:

or if the total gas consumed in the block

=> or if the total gas consumed in the transaction


In the case of block, block header's gasLimit must be bigger than the sum of gasLimit of transactions.

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.