mirror of
https://github.com/status-im/EIPs.git
synced 2025-02-22 11:48:19 +00:00
EIP: Coinbase Calls (#2474)
Allow contracts to be called directly by block.coinbase (block validator), without a transaction.
This commit is contained in:
parent
c7975135b1
commit
6704cec58c
62
EIPS/eip-2474.md
Normal file
62
EIPS/eip-2474.md
Normal file
@ -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/).
|
Loading…
x
Reference in New Issue
Block a user