Skip to content

Conversation

@khanti42
Copy link
Contributor

@khanti42 khanti42 commented Jan 19, 2026

Explanation

EIP-7702 delegated transactions were incorrectly using the user's EOA nonce, causing nonce conflicts and preventing transactions from appearing in the activity tab. In EIP-7702, the delegation address manages its own nonce sequence, not the user's EOA.

This PR sets isExternalSign for EIP-7702 txs.

References

Checklist

  • I've updated the test suite for new or updated code as appropriate
  • I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate
  • I've communicated my changes to consumers by updating changelogs for packages I've changed
  • I've introduced breaking changes in this PR and have prepared draft pull requests for clients and consumer packages to resolve them

Note

Addresses incorrect nonce handling for EIP-7702 delegated/batch transactions.

  • Set isExternalSign = true when nestedTransactions are present to bypass EOA nonce assignment for EIP-7702 batches
  • Record delegationAddress for metrics without using it to infer isExternalSign
  • Update CHANGELOG.md under Fixed to reflect the behavior change

Written by Cursor Bugbot for commit 99b756f. This will update automatically on new commits. Configure here.

@khanti42 khanti42 changed the title fig: skip nonce assignment for EIP-7702 delegated transactions fix: set isExternalSign to true for delegated transactions Jan 23, 2026
@khanti42 khanti42 marked this pull request as ready for review January 23, 2026 09:37
@khanti42 khanti42 requested review from a team as code owners January 23, 2026 09:37
cursor[bot]

This comment was marked as outdated.

Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

deviceConfirmedOn,
disableGasBuffer,
id: random(),
isExternalSign: isEIP7702Batch,
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

EIP-7702 batch isExternalSign override by gas fee token check

Medium Severity

The new isExternalSign = isEIP7702Batch can be overridden by checkGasFeeTokenBeforePublish when a transaction has both nestedTransactions and a gasFeeToken, and the user has sufficient native balance. The checkGasFeeTokenBeforePublish function unconditionally sets isExternalSign = false in this case, which would cause the original nonce conflicts for EIP-7702 batch transactions that the PR aims to fix.

Fix in Cursor Fix in Web

deviceConfirmedOn,
disableGasBuffer,
id: random(),
isExternalSign: isEIP7702Batch,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, this is the same issue as before.

EIP-7702 batch transactions can still be signed locally by the EOA itself and more typically are.

The only exceptions to that are when the gas station EIP-7702 flow is used as it's signed by our relay.

If we're missing a scenario when a transaction is signed externally, then we need to update isExternalSign externally (as we do for gas station EIP-7702 currently) or trigger it more specifically internally, assuming we have that context internally without unnecessary coupling.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants