diff --git a/EIPS/eip-1109.md b/EIPS/eip-1109.md new file mode 100644 index 00000000000000..1a06bd05e129b4 --- /dev/null +++ b/EIPS/eip-1109.md @@ -0,0 +1,55 @@ +--- +eip: 1109 +title: Remove CALL costs for precompiled contracts +author: Jordi Baylina (@jbaylina) +discussions-to: https://ethereum-magicians.org/t/eip-1109-remove-call-costs-for-precompiled-contracts/447 +status: Draft +type: Standards Track +category: Core +created: 2018-05-22 +--- + +## Simple Summary + +This EIP removes the gas costs of the CALL-like opcodes when calling precompiled contracts. + +## Abstract + +This EIP tries to resolve the problem of high gas consumption when calling precompiled contracts with a small gas cost. Setting the gas costs to 0 when calling a precompiled contract allows to define precompiled contracts whose effective cost when calling it is less than 700. + +## Motivation + +Each precompiled contract has an already defined a cost for calling it. It does not make sense to add the implicit extra gas cost of the CALL opcode. + +As an example, SHA256 precompiled contract costs 60 and ECADD costs 500 (proposed to costs only 50 in [EIP1108](https://github.com/ethereum/EIPs/pull/1108) . When a precompiled contract is called, 700 gas is consumed just for the CALL opcode besides the costs of the precompiled contract. + +This makes no sense, and right now it's impossible to define a precompiled contract whose effective cost for using it is less than 700. + +## Specification + +If `block.number >= XXXXX`, for each CALL, DELEGATECALL and CALLCODE opcode with a destination address < 256 use a Gcall (basic cost of the call) of 0 instead of 700. + +The cost of the CALL opcode is calculated in exactly the same way that any normal call, including the cost for using a value different than 0 and for creating a new account. The only difference is that Gcall is not added when calculating Cextra. + +## Rationale + +This implementation is the one that needs less modification of the clients. + +## Backwards Compatibility + +This EIP is backwards compatible. Smart contracts that call precompiled contracts will cost less from now on. Smart contracts that relay in a high gas consumption for a specific code are not expected. + +## Test Cases + +- Normal call to a defined smart contract. +- Call to undefined smart contract. +- Call to defined smart contract with a value!=0 on the call. +- Call to undefined smart contract with a value!=0 on the call. +- Normal call with remaining gas<700 but gas>[the cost of the call]. + +## Implementation + +Not implemented yet. + +## Copyright +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).