mirror of
https://github.com/status-im/EIPs.git
synced 2025-02-23 04:08:09 +00:00
EIP 3322: Efficient Gas Storage (#3322)
Allows contract accounts to store gas that can be transferred to the refund counter.
This commit is contained in:
parent
c6bb436dc9
commit
170fd119bd
68
EIPS/eip-3322.md
Normal file
68
EIPS/eip-3322.md
Normal file
@ -0,0 +1,68 @@
|
||||
---
|
||||
eip: 3322
|
||||
title: Account gas storage opcodes
|
||||
author: William Morriss (@wjmelements)
|
||||
discussions-to: https://ethereum-magicians.org/t/eip-3322-efficient-gas-storage/5470
|
||||
status: Draft
|
||||
type: Standards Track
|
||||
category: Core
|
||||
created: 2020-03-04
|
||||
---
|
||||
|
||||
## Simple Summary
|
||||
Allows contract accounts to store gas that can be transferred to the refund counter.
|
||||
|
||||
## Abstract
|
||||
Contracts can persist gas for later transfer to the refund counter.
|
||||
Three opcodes are introduced to read, add to, and use this gas counter.
|
||||
|
||||
## Motivation
|
||||
The refund mechanism is currently being used by gas tokens to arbitrage gas price.
|
||||
This brings gas supply elasticity and price stability by moving gas from blocks with less demand to blocks with more demand.
|
||||
Unfortunately this rewards unnecessary state growth.
|
||||
By introducing a superior gas storage mechanism, the gas market will require less storage and computation.
|
||||
|
||||
## Specification
|
||||
Contract accounts gain an unsigned gas refund counter, initially zero.
|
||||
|
||||
Three new opcodes are introduced to manage this state.
|
||||
|
||||
* `SELFGAS` (`0x48`): Pushes the current account's gas refund counter onto the stack.
|
||||
Shares gas pricing with `SELFBALANCE`.
|
||||
* `USEGAS` (`0x49`): Pops `amount` from the stack.
|
||||
The minimum of `amount` and the current account's gas refund counter is transferred to the execution context's refund counter.
|
||||
Costs `5000` gas.
|
||||
* `STOREGAS` (`0x4a`): Pops `amount` from the stack.
|
||||
Costs `5000 + amount` gas.
|
||||
Increases the current account's gas refund counter by `amount`.
|
||||
|
||||
## Rationale
|
||||
By reusing the execution context's refund counter we can reuse its 50% DoS protection, which limits its block elasticity contribution to 2x.
|
||||
|
||||
The gas costs are based on similar opcodes `SELFBALANCE` and `SSTORE`.
|
||||
|
||||
Most accounts will store no gas, so the per-account storage overhead should be minimal or even zero in the normal case.
|
||||
|
||||
The opcode numbers chosen are in the same `0x4X` range as `SELFBALANCE` and `GASLIMIT`.
|
||||
|
||||
## Backwards Compatibility
|
||||
Because the gas is added to the refund counter, no compatibility issues are anticipated.
|
||||
|
||||
## Test Cases
|
||||
| Code | Used Gas | Refund | Original | Final |
|
||||
|------------------|----------|--------|----------|-------|
|
||||
| 0x60004900 | 5003 | 0 | 0 | 0 |
|
||||
| 0x60034900 | 5003 | 2 | 2 | 0 |
|
||||
| 0x60034900 | 5003 | 3 | 3 | 0 |
|
||||
| 0x60034900 | 5003 | 3 | 4 | 1 |
|
||||
| 0x60034960034900 | 10006 | 4 | 4 | 0 |
|
||||
| 0x60034960034900 | 10006 | 6 | 6 | 0 |
|
||||
| 0x484900 | 5010 | 100000 | 100000 | 0 |
|
||||
| 0x61ffff4a00 | 70538 | 0 | 0 | 65535 |
|
||||
|
||||
|
||||
## Security Considerations
|
||||
DoS is already limited by the 50% refund limit.
|
||||
|
||||
## Copyright
|
||||
Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
|
Loading…
x
Reference in New Issue
Block a user