EIP 5: Gas costs for return values · Issue #8 · ethereum/EIPs (original) (raw)
Proposal
Change memory gas costs for return values of a call to be applied depending on the size of the written memory area, not the reserved memory area.
Current Situation
In a call, the caller has to provide an area where the returned data from a call is written to. Only reserving it already changes gas costs for memory.
Advantage
This makes it possible to read a return value whose size is not known to the caller prior to the call: The caller just reserves a huge amount of memory.
Possible Extension
The CALL
opcode (and its friends) may even return the actual size of memory written to, so that the data can be used (e.g. forwarded) even if nothing is known about its structure.
Implementation
The implementation might be a bit tricky: The CALL
opcode has to be charged some gas upfront, then the call is performed without allocating memory for the return value. At the point, the return value is available, gas costs are computed and if some gas is still available, memory is allocated and written to.