Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Call strict gas #1950

Merged
merged 9 commits into from
May 13, 2019
Merged

Call strict gas #1950

merged 9 commits into from
May 13, 2019

Conversation

wighawag
Copy link
Contributor

@wighawag wighawag commented Apr 18, 2019


eip: 1930
title: CALLs with strict gas semantic. Revert if not enough gas available.
author: Ronan Sandford (@wighawag)
type: Standards Track
discussions-to: #1930
category: Core
status: Draft
created: 2019-04-10

Simple Summary

Add the ability for smart contract to execute calls with a specific amount of gas. If this is not possible the execution should revert.

Abstract

The current CALL, DELEGATE_CALL, STATIC_CALL opcode do not enforce the gas being sent, they simply consider the gas value as a maximum. This pose serious problem for applications that require the call to be executed with a precise amount of gas.

This is for example the case for meta-transaction where the contract needs to ensure the call is executed exactly as the signing user intended.

But this is also the case for common use cases, like checking "on-chain" if a smart contract support a specific interface (via EIP-165 for example).

The solution presented here is to add new opcodes that enforce the amount of gas specified : the call either proceed with the exact amount of gas or do not get executed and the current call revert.

Specification

  • add a new variant of the CALL opcode where the gas specified is enforced so that if the gas left at the point of call is not enough to give the specified gas to the destination, the current call revert
  • add a new variant of the DELEGATE_CALL opcode where the gas specified is enforced so that if the gas left at the point of call is not enough to give the specified gas to the destination, the current call revert
  • add a new variant of the STATIC_CALL opcode where the gas specified is enforced so that if the gas left at the point of call is not enough to give the specified gas to the destination, the current call revert

In other words, based on EIP-150, the current call must revert unless G >= I x 64/63 where G is gas left at the point of call (after deducing the cost of the call itself) and I is the gas specified.

So instead of

availableGas = availableGas - base
gas := availableGas - availableGas/64
...
if !callCost.IsUint64() || gas < callCost.Uint64() {
    return gas, nil
}

see https://github.com/ethereum/go-ethereum/blob/7504dbd6eb3f62371f86b06b03ffd665690951f2/core/vm/gas.go#L41-L48

we would have

availableGas = availableGas - base
gas := availableGas - availableGas/64
if !callCost.IsUint64() || gas < callCost.Uint64() {
    return 0, errNotEnoughGas
}

Rationale

Currenlty the gas specified as part of these opcodes is simply a maximum value. And due to the behavior of EIP-150 it is possible for an external call to be given less gas than intended (less than the gas specified as part of the CALL) while the rest of the current call is given enough to continue and succeed. Indeed since with EIP-150, the external call is given at max G - Math.floor(G/64) where G is the gasleft() at the point of the CALL, the rest of the current call is given Math.floor(G/64) which can be plenty enough for the transaction to succeed. For example, when G = 6,400,000 the rest of the transaction will be given 100,000 gas plenty enough in many case to succeed.

This is an issue for contracts that require external call to only fails if they would fails with enough gas. This requirement is present in smart contract wallet and meta transaction in general, where the one executing the transaction is not the signer of the execution data. Because in such case, the contract needs to ensure the call is executed exactly as the signing user intended.

But this is also true for simple use case, like checking if a contract implement an interface via EIP-165. Indeed as specified by such EIP, the supporstInterface method is bounded to use 30,000 gas so that it is theorically possible to ensure that the throw is not a result of a lack of gas. Unfortunately due to how the different CALL opcodes behave contracts can't simply rely on the gas value specified. They have to ensure by other means that there is enough gas for the call.

Indeed, if the caller do not ensure that 30,000 gas or more is provided to the callee, the callee might throw because of a lack of gas (and not because it does not support the interace), and the parent call will be given up to 476 gas to continue. This would result in the caller interepreting wrongly that the callee is not implementing the interface in question.

While such requirement can be enforced by checking the gas left according to EIP-150 and the precise gas required before the call (see solution presented in that bug report or after the call (see the native meta transaction implementation here, it would be much better if the EVM allowed us to strictly specify how much gas is to be given to the CALL so contract implementations do not need to follow EIP-150 behavior and the current gas pricing so closely.

This would also allow the behaviour of EIP-150 to be changed without having to affect contract that require this strict gas behaviour.

As mentioned, such strict gas behaviour is important for smart contract wallet and meta transaction in general.
The issue is actually already a problem in the wild as can be seen in the case of Gnosis safe which did not consider the behavior of EIP-150 and thus fails to check the gas properly, requiring the safe owners to add otherwise unecessary extra gas to their signed message to avoid the possibility of losing funds. See safe-global/safe-smart-account#100

As for EIP-165, the issue already exists in the example implementation presented in the EIP. Please see the details of the issue here

The same issue exists also on OpenZeppelin implementation, a library used by many. It does not for perform any check on gas before calling supportsInterface with 30,000 gas (see here and is thus vulnerable to the issue mentioned.

While such issue can be prevented today by checking the gas with EIP-150 in mind, a solution at the opcode level is more elegant.

Indeed, the two possible ways to currently enforce that the correct amount of gas is sent are as follow :

  1. check done before the call
uint256 gasAvailable = gasleft() - E;
require(gasAvailable - gasAvailable / 64  >= `txGas`, "not enough gas provided")
to.call.gas(txGas)(data); // CALL

where E is the gas required for the operation beteen the call to gasleft() and the actual call PLUS the gas cost of the call itself.
While it is possible to simply over estimate E to prevent call to be executed if not enough gas is provided to the current call it would be better to have the EVM do the precise work itself. As gas pricing continue to evolve, this is important to have a mechanism to ensure a specific amount of gas is passed to the call so such mechanism can be used without having to relies on a specific gas pricing.

  1. check done after the call:
to.call.gas(txGas)(data); // CALL
require(gasleft() > txGas / 63, "not enough gas left");

This solution does not require to compute a E value and thus do not relies on a specific gas pricing (except for the behaviour of EIP-150) since if the call is given not enough gas and fails for that reason, the condition above will always fail, ensuring the current call will revert.
But this check still pass if the gas given was less AND the external call reverted or succeeded EARLY (so that the gas left after the call > txGas / 63).
This can be an issue if the code executed as part of the CALL is reverting as a result of a check against the gas provided. Like a meta transaction in a meta transaction.

Similarly to the the previous solution, an EVM mechanism would be much better.

Backwards Compatibility

Backwards compatible as it introduce new opcodes.

Test Cases

Implementation

None fully implemented yet. But see Specifications for an example in geth.

References

  1. EIP-150, http://eips.ethereum.org/EIPS/eip-150

Copyright

Copyright and related rights waived via CC0.

@wighawag
Copy link
Contributor Author

wighawag commented May 3, 2019

Could this be merged in please @Arachnid @cdetrio @Souptacular @vbuterin @nicksavers @wanderer @gcolvin @axic ?

@wighawag
Copy link
Contributor Author

Any update on merging this ?

@nicksavers
Copy link
Contributor

Please add relevant paragraph headers from https://github.com/ethereum/EIPs/blob/master/eip-X.md
Like Simple Summary, Abstract, Motivation, Specification, Rationale, Backwards Compatibility, Test Cases, Implementation & Copyright.

@Arachnid Arachnid merged commit 7265712 into ethereum:master May 13, 2019
soc1c added a commit to goerli/eips-poa that referenced this pull request Jul 9, 2019
* Automatically merged updates to draft EIP(s) 1898


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1679, 233


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1679


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Minor updates to EIP-1319 (ethereum#1966)

* EIP-1895: Support for an Elliptic Curve Cycle (ethereum#1895)

* Automatically merged updates to draft EIP(s) 1679


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1679


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Scalable Rewards  (ethereum#1973)

* added EIP

* spacing

* reorder

* reorder

* formats

* <> brackets

* edit

* eip number

* renaminng

* Automatically merged updates to draft EIP(s) 1679


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* EIP-1559: Fee market change for ETH 1.0 chain (ethereum#1943)

* Automatically merged updates to draft EIP(s) 1884


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Fix authors and type-fields in eip-1559.md (ethereum#1974)

* Automatically merged updates to draft EIP(s) 1679


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1344


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1679


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 777


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1679


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1679


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Remove obsolete layer field (ethereum#1978)

* Document eip_validator and eip-automerger (ethereum#1977)

* EIP-1803: Rename opcodes for clarity (ethereum#1803)

* Change the citation format in README to point to EIP-1

* Automatically merged updates to draft EIP(s) 1679, 1803


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* EIP-1057 Update progpow test-vectors (ethereum#1855)

* Add editors

* Automatically merged updates to draft EIP(s) 1155 (ethereum#1993)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1155 (ethereum#1995)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* EIP-1775 - App Keys, application specific wallet accounts (ethereum#1775)

* Automatically merged updates to draft EIP(s) 1155 (ethereum#1997)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1155 (ethereum#1998)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 777 (ethereum#1945)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* ERC777: Move to final (ethereum#1999)

* Automatically merged updates to draft EIP(s) 1108 (ethereum#1987)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Fix typos (ethereum#1899)

* Fixed typos and grammar (ethereum#1847)

* Automatically merged updates to draft EIP(s) 1679 (ethereum#1988)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1344 (ethereum#2004)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1108 (ethereum#2005)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1155 (ethereum#2006)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1155 (ethereum#2007)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1155 (ethereum#2008)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* fix github pull request links (ethereum#2000)

* Automatically merged updates to draft EIP(s) 1679 (ethereum#1830)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1155 (ethereum#2011)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1155 (ethereum#2012)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1155 (ethereum#2013)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Re-order EIP categories (ethereum#1989)

* Automatically merged updates to draft EIP(s) 1679 (ethereum#2016)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1155 (ethereum#2017)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1155 (ethereum#2023)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Call strict gas (ethereum#1950)

* CALL with strict gas

* fix date

* 1930

* update with explicit code change

* add link to discussion

* update

* fix link

* EIP-2015: Wallet Update Chain Method (ethereum#2015)

* Create eip-2015.md

* Include JSON RPC method in title

* add requires 155

* update nativeCurrency field for wallet_updateChain

* EIP-2015 format review changes

* Update EIP-2015 discussions-to link

* Automatically merged updates to draft EIP(s) 1679 (ethereum#2034)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 663 (ethereum#2038)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1679 (ethereum#2043)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 615 (ethereum#2044)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Calldata gas cost reduction (ethereum#2028)

* Calldata gas cost reduction

Added a draft of EIP to reduce the gas cost of Calldata

* changed name to 2028

* Added EIP-2028 to meta eip-1679

* Added discussion url

* edited 'motivation' & 'specification'

Edited motivation to increase readability.
Edited specification to clarify terms.

* Automatically merged updates to draft EIP(s) 1155 (ethereum#2049)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* EIP-1965 Method to check if a chainID is valid at a specific block Number (ethereum#1965)

* Run spelling checks on CI (ethereum#2040)

* Automatically merged updates to draft EIP(s) 1679, 1965 (ethereum#2047)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1679 (ethereum#1990)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Add special requirement for mentioning EVM instructions

* EIP-1710: URL Format for Web3 Browsers (ethereum#1710)

* EIP 1523: Standard for storing insurance policies as extension of ERC-721 token (ethereum#1512)

* Automatically merged updates to draft EIP(s) 2028 (ethereum#2052)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* EC arithmetics and pairings with runtime definitions (ethereum#1962)

* Automatically merged updates to draft EIP(s) 663 (ethereum#2056)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Mention that the header is also called "front matter" in EIP1 (ethereum#2037)

* Add EIP-1474 as a requirement to RPC ERCs

* Fix Wrong Input Length - ERC165 Example (ethereum#1640)

* Wrong input size - noThrowCall ERC165

Input should be 36 bytes (4 signature bytes + 32 bytes parameter)

Solidity 5 validates the length of msg.data, reverting on the 32 bytes input, all contracts using the broken 'doesContractImplementInterface' will not be able to read an ERC165 implementation targetting Solidity 5.

A legacy-compatible strategy should be defined to make all the "ERC165 readers" sending a 32 bytes sized data compatible with ERC165 contracts compiled targeting this new version of the compiler.

A possible solution could be to add a keyword on Solidity to disable the validation of the calldata length.

* Add version history section to EIP165

* EIP 1640 -> PR 1640

* Automatically merged updates to draft EIP(s) 1155 (ethereum#2063)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1155 (ethereum#2064)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* State Rent change H placeholder EIP - fixed rent prepayment for all accounts (ethereum#2026)

* Fix author fields (ethereum#2065)

* Sane limits for certain EVM parameters (ethereum#1985)

* sane

* some clarifications

* remove cruft

* some clarifications

* propose spec changes

* limit the scope to EVM only

* more rationale

* group affected opcodes by ranges

* Rename to EIP-1985

* Add discussion URL to EIP-1985

* Include a reference to EIP106

* Add more rationale

* fix typo

* Remove unfounded worry

* mention timestamp being 64-bit value in Aleth

* resolved an TODO item as Rationale entry

* Reduced gas cost for static calls made to precompiles (ethereum#2046)

* Reduced gas cost for static calls made to precompiles

* Rename to EIP-2046

* Add discussion URL

* Add 2046 to Istanbul

* Fix header

* Add draft for ESO (extended state oracle) (ethereum#2014)

* Add draft for ESO (extended state oracle)

* Add mention of revert to ESO

* Add EIP-2014 number and rename file

* Add reference to EIP-1959 and EIP-1965

* Add discussions-to URL

* Update eip-181.md

* Update eip-162.md

* State Rent Change A EIP placeholder - State counters contract (ethereum#2029)

* Create eip-StateRentACountersContract.md

* Update eip-StateRentACountersContract.md

* Rename eip-StateRentACountersContract.md to eip-2029.md

* Update eip-2029.md

* Update eip-2029.md

* Fix typos

* Make EIP-2014 into a proper link

* New Opcode to check if a chainID is part of the history of chainIDs (ethereum#1959)

* Automatically merged updates to draft EIP(s) 1679 (ethereum#2055)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Copyright 107 (ethereum#2068)

* add copyrights for 107

* use github username

* Automatically merged updates to draft EIP(s) 1155 (ethereum#2074)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* State Rent change C draft EIP - Net contract storage size accounting (ethereum#2027)

* State Rent change C draft EIP

* Update eip-draft_StateRentCnetContractSizes.md

* Update eip-draft_StateRentCnetContractSizes.md

* Rename eip-draft_StateRentCnetContractSizes.md to eip-2027.md

* Update eip-2027.md

* Update eip-2027.md

* Update eip-2027.md

* Quote "block C" properly

* Update eip-2027.md

* State Rent change B placeholder EIP - net transaction counter (ethereum#2031)

* Create eip-draft_StateRentBNetTransactionCounter.md

* Update and rename eip-draft_StateRentBNetTransactionCounter.md to eip-2031.md

* Update eip-2031.md

* Update eip-2031.md

* Update eip-2031.md

* Fix some typos

* Use canonical link to EIP-2029

* Update eip-2031.md

* Update eip-2031.md

* Stateless Clients: Repricing SLOAD and SSTORE to pay for block proofs (ethereum#2035)

* Create eip-draft_StatelessClientGasRepricing.md

* Update and rename eip-draft_StatelessClientGasRepricing.md to eip-2035.md

* Update eip-2035.md

* Update eip-2035.md

* Update eip-2035.md

* Update eip-2035.md

* Update eip-2035.md

* Update eip-2035.md

* Fix typos

* Use canonical links to other EIPs

* Update eip-2035.md

* Fix link to EIP-2028

* Automatically merged updates to draft EIP(s) 1679 (ethereum#2036)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1930 (ethereum#2076)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1679 (ethereum#2042)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1418 (ethereum#2078)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1108 (ethereum#2067)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1155 (ethereum#2083)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1155 (ethereum#2084)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1155 (ethereum#2085)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1930 (ethereum#2086)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 778 (ethereum#2087)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1155 (ethereum#2088)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1155 (ethereum#2089)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Last call for ERC-1155 (ethereum#2091)

* add EIP for particle gas costs (ethereum#2045)

* add EIP for fractional gas costs

* use EIP number 2045, add references, discussion-to

* add EIP-2045 to Istanbul

* Formatting

* Add ewasm to rationale

* Clarify cost reduction examples

* Clarify the increase of particles

* link to eip-2035, edit for clarity

* add reference to eip-2035

* add axic as author

* rename title to "particle gas costs", edit ewasm section

* fix header

* Automatically merged updates to draft EIP(s) 1803 (ethereum#2093)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1803, 663 (ethereum#2094)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1193 (ethereum#2092)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1155 (ethereum#2096)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 778 (ethereum#2097)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1155 (ethereum#2101)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1261 (ethereum#2102)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* fix typo: "as follows" (ethereum#2099)

see: https://ell.stackexchange.com/a/31673

* EIP-2003 - EVMC modules for implementations of precompiled contracts (ethereum#2003)

* Automatically merged updates to draft EIP(s) 1261 (ethereum#2107)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1155 (ethereum#2108)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1155 (ethereum#2109)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1155 (ethereum#2110)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 2003 (ethereum#2112)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1155 (ethereum#2113)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1155 (ethereum#2114)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1155 (ethereum#2116)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1155 (ethereum#2117)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1155 (ethereum#2118)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1155 (ethereum#2120)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* ERC-1155 Final Status (ethereum#2122)

* Automatically merged updates to draft EIP(s) 1344 (ethereum#2079)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Propose to move EIP-695 to last call status (ethereum#1566)

* Propose to move EIP-695 to last call status

* Add a discussion link

* Formatting fix

* Fix @sorpaas handle in author field

* Use EIP155 formatting for `CHAIN_ID`

* Formatting fix for "chain ID"

The document had places where we use lowercase "id" and uppercase "ID". This unify them to use uppercase "ID".

* Update eip-695.md

* Move EIP-695 to Last Call status and add 155 requirement (ethereum#2128)

* Update eip-1577.md (ethereum#1670)

* Automatically merged updates to draft EIP(s) 1702 (ethereum#2130)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1702 (ethereum#2131)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 695 (ethereum#2133)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1202 (ethereum#2134)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1702 (ethereum#2140)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1702 (ethereum#2141)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Funding ETH1.X through a Developer Block Reward for 18 Months (ethereum#2025)

* Automatically merged updates to draft EIP(s) 1702 (ethereum#2149)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* EIP 747: wallet_watchAsset (ethereum#1426)

* Initial draft

* Add eip-747: watchToken

* Update discussion link

* Update eip-747 to watchAsset

* Add image specification and examples EIP747

* Add asset type error

* Respond to feedback

* Depends on 1474

* Correct type to standards track

* Correct spelling

* Add eip images locally (ethereum#2150)

* Automatically merged updates to draft EIP(s) 823 (ethereum#2151)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1193 (ethereum#2057)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* ERC-1948: Non-fungible Data Token (ethereum#1948)

* first draft

* remove boilerplate

* fix indentations

* typos

* ethereum code highlights

* moved file to id

* syntax

* naming

* link to erc721

* make interface an interface

* typo

* better comments

* Automatically merged updates to draft EIP(s) 1679, 233 (ethereum#2081)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1702 (ethereum#2152)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Introduced Abandoned status in EIP-1 (ethereum#2051)

* Introduced Abandoned status in EIP-1

* Fix typo

* EIP-1967: Standard Proxy Storage Slots (ethereum#1967)

* Proxy storage slots EIP

* Apply suggestions from code review

Co-Authored-By: spalladino <spalladino@gmail.com>

* Add reference to vyper storage slots

* Fix links to EIPs

Co-Authored-By: spalladino <spalladino@gmail.com>

* Apply suggestions from code review

Co-Authored-By: spalladino <spalladino@gmail.com>

* Applied suggestions by elopio and nventuro

* Add discussions-to

* Add EIP number

* Rename eip file

* Fix type attribute

* Use zOS independent hash preimage

* Implement suggestion by axic

* Automatically merged updates to draft EIP(s) 1474 (ethereum#2155)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1613 (ethereum#2163)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1066 (ethereum#2164)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Mark EIP-158 proper superseded and not replaced (ethereum#2160)

* Update eip_validator to 0.8.2 (ethereum#2161)

* Fix Markdown formatting in EIP-1186

* Update eip_validator to 0.8.2

* Abandone EIP-1355 "Ethash 1a" (ethereum#1785)

* Add information EIP:  Common Prometheus metrics (ethereum#2159)

* Add common metrics EIP.

* Fix spelling error.

* Assign EIP number, added more information on what Prometheus does.

* Add link to prometheus website for further info.

* Fix link.

* Fix discussion link.

* Switch to standards track - interface instead of informational.

* Add motivation.

* superseded-by EIP 1 (ethereum#2165)

* Automatically merged updates to draft EIP(s) 1702 (ethereum#2167)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* EIP-1753 - Define a smart contract interface for permits and licences (ethereum#1753)

* First draft

* Update eip-x.md

* Update eip-x.md

* Update eip-x.md

* Update eip-x.md

* Update eip-x.md

* Update eip-x.md

* Update eip-x.md

* Update eip-x.md

* Update authors

* Update eip-x.md

* Rename eip md

* Rollback

* Rename md

* Add copyright

* WIP: Re adding specificaiton

* Update example solidity

* Update eip-1753.md

* Update eip-1753.md

* Update eip-1753.md

* Update eip-1753.md

* Update eip-1753.md

* Update eip-1753.md

* Do not touch eip-X

* Fix typo

* EIP-1895: Improvements (ethereum#2153)

* EIP-1895: Better constants and address range description

Address @Arachnid's comments about presenting constants and how an address value is limited.

* EIP-1985: Fix a typo

* EIP-1985: Use "instructions" instead of "opcodes"

* eip-225: mark as final (ethereum#1954)

* set EIP875 to last call and correct errors (ethereum#1549)

* Automatically merged updates to draft EIP(s) 1571 (ethereum#2168)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 999 (ethereum#2170)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 2159 (ethereum#2174)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1884 (ethereum#2175)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 2028 (ethereum#2176)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* EIP-1901: Add OpenRPC Service Discovery To JSON-RPC Services (ethereum#1901)

* EIP-????: Add OpenRPC Service Discovery To JSON-RPC Services

* fix:

* fix(openrpc): add openrpc.json to eip assets

* fix(openrpc): reference eip asset

* Update EIPS/eip-1901.md - document link

* Delete openrpc.json

* Update eip-1901: move link to spec to top

* fix(1901):  preamble + author github usernames

* fix(1901): add copyright info

* fix(1901): add link to eth json rpc spec

* fix(1901): type and category in preamble + spelling

* fix(1901): motivation section and use vendored assets

* fix(1901): add link to multi-geth OpenRPC discovery

* fix(1901): change ordering + small fixes

* fix(1901): typo

* Automatically merged updates to draft EIP(s) 1108 (ethereum#2177)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* Automatically merged updates to draft EIP(s) 1102 (ethereum#2178)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing

* EIP-1900 Decentralized Type System for EVM (ethereum#1900)

* Automatically merged updates to draft EIP(s) 1884 (ethereum#2180)


Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing
ilanolkies pushed a commit to ilanolkies/EIPs that referenced this pull request Nov 12, 2019
* CALL with strict gas

* fix date

* 1930

* update with explicit code change

* add link to discussion

* update

* fix link
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants