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

Update EIP-7702: Proxy the storage of a delegation to its unique deleterminstic keys #8762

Closed
wants to merge 14 commits into from
3 changes: 2 additions & 1 deletion EIPS/eip-7702.md
Original file line number Diff line number Diff line change
Expand Up @@ -121,12 +121,13 @@

Considering that the delegation from one contract to another contract may cause conflicts and corrupt the storage with a broken contract at the least and a compromised contract at the worst, it is prudent to separate the storage of each delegation in deterministic way.

To this effect, the delegated EOA's storage keys should be proxied (accessed or written) at `keccak256(key||address)`. So essentially we use this key modification for `SLOAD` and `SSTORE` operations for the delegated EOA's orignal key but still writing into EOA storage.
To this effect, the delegated EOA's storage keys should be proxied (accessed or written) at `keccak256(key||address)[0:30] || key[30:32]`. So essentially we use this key modification for `SLOAD` and `SSTORE` operations for the delegated EOA's orignal key but still writing into EOA storage.
g11tech marked this conversation as resolved.
Show resolved Hide resolved

With this method:

* if EOA is delegated to a new address, it (essentially) starts with clean storage
* if the contract is delegated back to a previous `address`, the EVM will be able to _re-attach_ its old storage.
* chunks of `256` consecutive keys are mapped again to consecutive keys which is nice for debuggings as well as state trie optimizations (a la verkle)

#### In-protocol revocation

Expand Down Expand Up @@ -177,14 +178,14 @@

### Secure delegation

The following is a non-exhaustive list of checks/pitfalls/conditions that delegate contracts *should* be wary of and require a signature over from the account's authority:

Check failure on line 181 in EIPS/eip-7702.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Emphasis style should be consistent [Expected: underscore; Actual: asterisk]

EIPS/eip-7702.md:181:94 MD049/emphasis-style Emphasis style should be consistent [Expected: underscore; Actual: asterisk]

* Replay protection -- (ex. a nonce) should be implemented by the delegate and signed over. Without it, a malicious actor can reuse a signature, repeating its effects.
* `value` -- without it, a malicious sponsor could cause unexpected effects in the callee.
* `gas` -- without it, a malicious sponsor could cause the callee to run out of gas and fail, griefing the sponsee.
* `target` / `calldata` -- without them, a malicious actor may call arbitrary functions in arbitrary contracts.

A poorly implemented delegate can *allow a malicious actor to take near complete control over a signer's EOA*.

Check failure on line 188 in EIPS/eip-7702.md

View workflow job for this annotation

GitHub Actions / Markdown Linter

Emphasis style should be consistent [Expected: underscore; Actual: asterisk]

EIPS/eip-7702.md:188:35 MD049/emphasis-style Emphasis style should be consistent [Expected: underscore; Actual: asterisk]

### Setting code as `tx.origin`

Expand Down
Loading