-
Notifications
You must be signed in to change notification settings - Fork 5.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Allow contracts to be called directly by block.coinbase (block validator), without a transaction.
- Loading branch information
Showing
1 changed file
with
62 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
--- | ||
eip: 2474 | ||
title: Coinbase calls | ||
author: Ricardo Guilherme Schmidt (@3esmit) | ||
discussions-to: https://ethresear.ch/t/gas-abstraction-non-signed-block-validator-only-procedures/4388/2 | ||
status: Draft | ||
type: Standards Track | ||
category: Core | ||
created: 2020-01-19 | ||
--- | ||
|
||
## Simple Summary | ||
|
||
Allow contracts to be called directly by `block.coinbase` (block validator), without a transaction. | ||
|
||
## Abstract | ||
|
||
_In proof-of-work blockchains, validators are known as miners._ | ||
|
||
The validator might want to execute functions directly, without having to sign a transaction. Some examples might be presenting a proof in a contract for an change which also benefits the validator. | ||
|
||
A notable example would be when a validator want to act as an [EIP-1077](./eip-1077.md) Gas Relayer, incentivized to pick up fees from meta transactions. | ||
Without this change, they can do so by signing from any address a `gasPrice = 0` transaction with the gas relayed call. | ||
However this brings an overhead of a signed transaction by validator that does nothing, as `msg.sender` is never used, and there is no gas cost to EVM charge. | ||
|
||
This proposal makes possible to remove this unused ecrecover. | ||
|
||
## Motivation | ||
|
||
In order to reduce the overhead of calls that don't use `msg.sender` and are being called by validator with `tx.gasPrice = 0`. | ||
|
||
## Specification | ||
|
||
The calls to be executed by `block.coinbase` would be included first at block, and would consume normally the gas of block, however they won't pay/cost gas, instead the call logic would pay the validator in other form. | ||
|
||
Would be valid to execute any calls without a transaction by the block coinbase, except when the validator call tries to read `msg.sender`, which would throw an invalid jump. | ||
|
||
Calls included by the validator would have `tx.origin = block.coinbase` and `gas.price = 0` for the rest of call stack, the rest follows as normal calls. | ||
|
||
## Rationale | ||
|
||
TBD | ||
|
||
## Backwards Compatibility | ||
|
||
`tx.origin = block.coinbase` could cause some issues on bad designed contracts, such as using `tx.origin` to validate a signature, an analysis on how contracts use tx.origin might be useful to decide if this is a good choice. | ||
|
||
## Test Cases | ||
|
||
TBD | ||
|
||
## Implementation | ||
|
||
TBD | ||
|
||
## Security Considerations | ||
|
||
TBD | ||
|
||
## Copyright | ||
|
||
Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). |