ethereum / yellowpaper

The "Yellow Paper": Ethereum's formal specification
Creative Commons Attribution Share Alike 4.0 International
1.65k stars 512 forks source link

|o|>24576 in eqn. 97 #338

Closed jamesray1 closed 7 years ago

jamesray1 commented 7 years ago

There doesn't seem to be an explanation near eqn. 97 on p. 9 for why the condition in F exists for |o|>24576. CTRL + F 24576 to find it.

jamesray1 commented 7 years ago

Note that intention is Note that the intention

jamesray1 commented 7 years ago

I see that o is defined in section 8, para. 2.

jwasinger commented 7 years ago

@jamesray1 , I believe that is saying that contract initialization will fail (F) if (|o| > 24576) the created contract is above the maximum size.

jamesray1 commented 7 years ago

@jwasinger, I understand that it is saying the the output contract code is over 24576 bytes in length, but I want to know why that limit exists, e.g.: to prevent memory getting too bloated, etc.

jamesray1 commented 7 years ago

A Gitter test room discussion linked to this EIP. Consider adding a link to it for an explanation of the limit. E.g.: "for details on why the 24576 byte limit for output contract code exists, refer to this EIP here". However, because the yellowpaper is a formal specification, it is probably best to explain why, e.g.: "The 24576 byte limit for output contract code data o exists because a contract creation call can trigger O(n) cost in terms of reading the code from disk, preprocessing the code for VM execution, and also adding O(n) data to the Merkle proof for the block's proof-of-validity. With higher gas limits that can be caused by dynamic gas limit rules, this is a greater concern, and is especially inconvenient with light clients verifying proofs of validity or invalidity". This is probably best added as a footnote.

jamesray1 commented 7 years ago

See this commit containing the above suggestions: https://github.com/ethereum/yellowpaper/pull/345/commits/51b0afb3393bce05c7143b60cb80218dc757f56d