Repository navigation
fix(abstract-eth): ERC-7984 PA-rebuild approval verifies content-based - #10096
yashvanthbl137-crypto merged 1 commit into
Conversation
|
|
61bf09e to
b9b57c2
Compare
|
@claude review |
|
Claude finished @yashvanthbl137-crypto's task in 23s —— View job Review of PR #10096I read the diff and the surrounding The restructure is sound. Resolving the pair from the approve's spender and then running the bounded checks (inner target, zero native value, spender equals wrapper) is the right approach for the PA-rebuild path. The test coverage is good: a happy path, a tampered spender, and both direct-sign regressions. Findings
Verdict: Looks good overall. I'd resolve item 1 (or document why it's safe) before merging, and items 2 and 4 are cheap cleanups. |
There was a problem hiding this comment.
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.
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
b9b57c2 to
c33828f
Compare
|
@claude review |
|
Claude finished @0xPrabh's task in 32s —— View job Review of PR #10096I read The two 🔴/🟡 inline comments from the earlier review no longer apply to this commit.
Remaining findings, all minor
Verdict: Looks good. The rebuild path is no longer a bypass when |
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:
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