Skip to content

Commit

Permalink
EIP-1109: Remove call costs for precompiled contracts (ethereum#1109)
Browse files Browse the repository at this point in the history
* Remove call costs for precompiled contracts

* EIP number added and file name changed

* Fixed discussion-to field

* Fixed type and category fields

* discussion-to field changed to ethereum-magicians

* Change a bad change

* Changed the discussion link
  • Loading branch information
jbaylina authored and Arachnid committed Jul 19, 2018
1 parent 0047c09 commit 22a260a
Showing 1 changed file with 55 additions and 0 deletions.
55 changes: 55 additions & 0 deletions EIPS/eip-1109.md
Original file line number Diff line number Diff line change
@@ -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/).

0 comments on commit 22a260a

Please sign in to comment.