-
Notifications
You must be signed in to change notification settings - Fork 4
feat: EIP-7702 Set Code Transaction support #42
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
Conversation
Add support for EIP-7702 (SetCodeTx) which allows EOAs to temporarily delegate their code execution to another account. Changes include: - Add SetCodeTx (type 0x04) transaction type and Authorization struct - Add anzeonSigner for EIP-7702 transaction signing - Implement delegation designator resolution in EVM - Add EIP-7702 specific gas calculation for CALL variants - Update EXTCODE* opcodes to handle delegation designators - Add prestate tracer support for authorization list - Update t8n tool and tests for SetCodeTx Based on ethereum/go-ethereum#30078
- Rename Authorization to SetCodeAuthorization - Rename SignAuth to SignSetCode with key-first parameter order Based on ethereum/go-ethereum#30933
The API spec requires the name yParity. Based on: - ethereum/go-ethereum@73a4ecf - ethereum/go-ethereum#30936
Use SetCode prefix consistently in internal APIs for the authorization list, as a follow-up to SetCodeAuthorization type renaming. Based on ethereum/go-ethereum#30935
Change ChainID field type from uint64 to uint256.Int in SetCodeTx and SetCodeAuthorization for consistency with other chain ID handling. Also removes unused json/gencodec tags from signature value fields in DynamicFeeTx, BlobTx, SetCodeTx, and FeeDelegateDynamicFeeTx. Based on ethereum/go-ethereum#30982
Use zero value check for SetCodeTx chainId validation. This aligns with cancunSigner and londonSigner as well. Based on ethereum/go-ethereum#31032
ChainID should be properly initialized and copied in the copy() method to prevent nil pointer issues during transaction processing. Based on ethereum/go-ethereum#31054
EXTCODE* opcodes no longer need special overrides for EIP-7702 delegation designators. The delegation designator is now returned as-is. Implements EIPs#9248. Based on ethereum/go-ethereum#31089
Add SetCode transaction handling to legacypool: - SetCodeTxType validation with Anzeon fork check - Empty authorization rejection - Authority tracking and conflict prevention - Account slot limit for delegated accounts and pending authorizations Note: tx replacement is not supported in go-stablenet. Tests are adjusted to expect ErrAccountLimitExceeded instead of successful replacement. Based on ethereum/go-ethereum#31073
Move authorization-related validations from common validation to legacyPool since these checks are specific to SetCode transactions. Based on ethereum/go-ethereum#31209
Fix removeAuthorities to only iterate tx's authorities instead of all authorities in the pool. Based on ethereum/go-ethereum#31249
Add sigHash method to TxData interface and move hash computation into each tx type, reducing allocations during signature operations. Based on ethereum/go-ethereum#31258
Add checkDelegationLimit to reject transactions with gapped nonces from delegated accounts. Only one in-flight executable transaction is allowed for senders with delegation or pending delegation. Based on ethereum/go-ethereum#31430
Exclude valid EIP-7702 authorities from access list generation result. Based on ethereum/go-ethereum#31336 (which resolves ethereum/go-ethereum#31335)
Add delegationTxsCount method with proper lock to fix data race when accessing auths map in checkDelegationLimit. Based on ethereum/go-ethereum#31475
Add delegation limit checks to blobpool: - Limit senders with delegation/pending auth to one in-flight tx - Check reserver for authority conflicts - Refactor AddressReserver to Reserver struct with Hold/Release/Has Based on ethereum/go-ethereum#31526
- Skip slot limit validation for tx replacements (same nonce reuses slot) - Clarify cumulative balance validation skip reason: fee delegation compatibility
Check reserver for authority conflicts to make authorization validation independent of admission order. Authorities must not conflict with addresses reserved by other subpools. Based on ethereum/go-ethereum#31373
Reset txlookup fields directly with proper locking instead of assigning a new lookup object to avoid data race. Based on ethereum/go-ethereum#31641
Add AuthorizationList field to CallMsg and toCallArg to support SetCodeTx in eth_call and eth_estimateGas APIs. Based on ethereum/go-ethereum#31198
Use Reheap() instead of assigning a new pricedList to avoid data race when clearing pool state. Based on ethereum/go-ethereum#31758
Before: Authority accounts' prestate showed post-authorization code/storage
and incorrect balance/nonce due to wrong capture timing
After: Authority accounts' prestate correctly reflects state before
SetCodeAuthorization is applied
- Refactor EVMLogger to pass env in CaptureTxStart instead of CaptureStart
- Capture authority accounts before delegation code (0xef0100...) is set
- Preserve original code/storage while restoring only gas from balance
Parse and lookup the delegation account if EIP-7702 is enabled in prestate tracer. Implements ethereum/go-ethereum#32078 Based on ethereum/go-ethereum#32080
Rename the private sigHash() method to public SigHash() method to enable external signing (e.g., MPC signing). Based on ethereum/go-ethereum#32298 (which resolves ethereum/go-ethereum#32297)
- Add tracer lifecycle calls in runtime package - Fix EIP-7702 and blobpool test configs
This reverts commit 71e90d7.
0xmhha
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
|
In SetCodeTx, when resolving delegated authorization, if either the delegating EOA or the delegatee contract address is blacklisted, should the authorization be denied (i.e., treated as “not authorized”)? |
I think it's fine without additional checks:
|
Summary
Implement EIP-7702 (Set Code Transaction) support for go-stablenet.
This enables account abstraction by allowing EOAs to delegate their code
execution to smart contracts through SetCode authorizations.
EIP-7702 Implementation
Transaction Type
SetCodeTx(type 0x04) withSetCodeAuthorizationsupportauthorizationListin RPC calls (eth_call,eth_estimateGas,eth_createAccessList)Execution
0xef0100in EVM executionTransaction Pool
Tracing
Changes based on go-ethereum (24 commits)
9843306cceedb0254d78e83bae33240e331db32978f45c2eaae0e0685ad48b37437c4d3ec89e0f90eb2334d452a95916fa726a945a13f8af462a019aa46827930a1c0c8eebfcb9bba28c9c28db2e0ae5a3b6132328d4c03afd37568b681eced80b8a4f6a74abcda01c9f38d2