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
15 changes: 14 additions & 1 deletion EIPS/eip-7702.md
Original file line number Diff line number Diff line change
Expand Up @@ -117,9 +117,22 @@

An alternative to adding chain ID could be to sign over the code the address points to. This seems to have the benefit of both minimizing the on-chain size of auth tuples while retaining specificity of the actual code running in the account. One unfortunate issue of this format though is that it imposes a database lookup to determine the signer of each auth tuple. This imposition itself seems to create enough complexity in transaction propagation that it is decided to avoid and simply sign over address directly.

#### Delegation Storage

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[0:30]||address)[0:30] || key[31:31]`. 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.

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 and more importantly state trie optimizations (à la verkle)
* it will be very expensive for a malicious delegation to find storage conflicts and corrupt them

#### In-protocol revocation

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

View workflow job for this annotation

GitHub Actions / Markdown Linter

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

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

Unlike previous versions of this EIP and EIPs similar, the delegation designation can be revoked at anytime signing and sending a EIP-7702 authorization to a new target with the account's current nonce. Without such action, a delegation will remain valid in perpetuity.
Unlike previous versions of this EIP, the delegation designation can be revoked at anytime by signing and sending an EIP-7702 authorization to a new target with the account's current nonce. Without such action, a delegation will remain valid in perpetuity.

### Self-sponsoring: allowing `tx.origin` to set code

Expand Down
Loading