Skip to content

fix(abstract-eth): erc-7984 pa-rebuild approval verifies content-based - #10097

Closed
yashvanthbl137-crypto wants to merge 1 commit into
masterfrom
yashvanthbl/chalo-2010-erc7984-pa-rebuild-verify-v2
Closed

yashvanthbl137-crypto wants to merge 1 commit into
masterfrom
yashvanthbl/chalo-2010-erc7984-pa-rebuild-verify-v2

Conversation

@yashvanthbl137-crypto

Copy link
Copy Markdown
Contributor

The wrapApprove PA-rebuild (the onchain-multisig server-leg approval) failed verification: verifyMultisigWrapApproveTransaction demanded txParams.wrapParams (tokenName + amount) — but the PA-rebuild path carries no caller wrapParams (the PA's buildParams store only the type; the intent's wrapParams live in the journey). The verify's own doc comment contemplates the skip for the pendingApproval re-sign paths; the rebuild's merged txParams accidentally triggered the full check.

Restructure verifyMultisigWrapApproveTransaction to be self-sufficient on the PA-rebuild path:

  • the wrapParams cross-check demand: skipped when txParams.pendingApprovalId is present (the PA-rebuild)
  • the pair resolved from the tx's own calldata: the approve's spender decoded → the reverse lookup over the registered ERC-7984 pairs on the network (by the wrapper address → the pair's tokenName)
  • the bounded checks preserved: the inner target = the pair's underlying ERC-20, no native value inside sendMultiSig, the spender = the wrapper, the prebuild-recipients mirror
  • the wrapParams cross-check (the amount vs the intent) runs only on the direct-sign path where the caller carries the intent

Validated in staging: the wrapApprove PA approval — the rebuild 200, the verify passed (isPaRebuild: true, hasWrapParams: false), the tx signed, the approval PUT reached WP and the policy resolved.

Ticket: CHALO-2010

The wrapApprove PA-rebuild (the onchain-multisig server-leg approval) failed
verification: verifyMultisigWrapApproveTransaction demanded txParams.wrapParams
(tokenName + amount) — but the PA-rebuild path carries no caller wrapParams (the
PA's buildParams store only the type; the intent's wrapParams live in the
journey). The verify's own doc comment contemplates the skip for the
pendingApproval re-sign paths; the rebuild's merged txParams accidentally
triggered the full check.

Restructure verifyMultisigWrapApproveTransaction to be self-sufficient on the
PA-rebuild path:
- the wrapParams cross-check demand: skipped when txParams.pendingApprovalId is
  present (the PA-rebuild)
- the pair resolved from the tx's own calldata: the approve's spender decoded →
  the reverse lookup over the registered ERC-7984 pairs on the network (by the
  wrapper address → the pair's tokenName)
- the bounded checks preserved: the inner target = the pair's underlying ERC-20,
  no native value inside sendMultiSig, the spender = the wrapper, the
  prebuild-recipients mirror
- the wrapParams cross-check (the amount vs the intent) runs only on the
  direct-sign path where the caller carries the intent

Validated in staging: the wrapApprove PA approval — the rebuild 200, the verify
passed (isPaRebuild: true, hasWrapParams: false), the tx signed, the approval
PUT reached WP and the policy resolved.

Ticket: CHALO-2010
@linear-code

linear-code Bot commented Oct 29, 2026

Copy link
Copy Markdown
Contributor

CHALO-2010

@yashvanthbl137-crypto
yashvanthbl137-crypto marked this pull request as ready for review October 29, 2026 16:10
@yashvanthbl137-crypto
yashvanthbl137-crypto requested a review from a team as a code owner October 29, 2026 16:10

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Claude Code Review

This repository is configured for manual code reviews. Comment @claude review for a one-time review, or @claude review always to subscribe this PR to a review on every future push.

Tip: disable this comment in your organization's Code Review settings.

@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Compatibility checks are failing on Node.js 27-nightly (experimental, non-blocking). This does not block merge, but it signals an incompatibility to fix before this release becomes supported.

View run

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.

1 participant