Skip to content

spec: use canonical base/commerce-payments addresses#43

Merged
A1igator merged 14 commits intomainfrom
A1igator/use-canonical-base-commerce-payments-addresses
May 9, 2026
Merged

spec: use canonical base/commerce-payments addresses#43
A1igator merged 14 commits intomainfrom
A1igator/use-canonical-base-commerce-payments-addresses

Conversation

@A1igator
Copy link
Copy Markdown
Contributor

@A1igator A1igator commented May 8, 2026

Summary

  • Replace the CREATE2-redeployed addresses (0xF821…, 0x7561DC…, 0xD8490609…) in specs/schemes/authCapture/scheme_authCapture_evm.md with the canonical, audited live deployment listed in the upstream base/commerce-payments README.
  • Drop the salt-scheme + first-mover-deployer framing. The spec now defers to whatever Base ships as the authoritative deployment, which is the same contract that will be replicated at the same address as Base extends EVM coverage.
Constant Old (CREATE2 redeploy) New (canonical base/commerce-payments)
AUTH_CAPTURE_ESCROW_ADDRESS 0xF8211868187974a7Fb9d99b8fFB171AD70665Dc6 0xBdEA0D1bcC5966192B070Fdf62aB4EF5b4420cff
EIP3009_TOKEN_COLLECTOR_ADDRESS 0x7561DC178D9aD5bc5fb103C01f448A510d2A36D0 0x0E3dF9510de65469C4518D7843919c0b8C7A7757
PERMIT2_TOKEN_COLLECTOR_ADDRESS 0xD8490609d2da0ee626b0e676941b225cbc1A8C08 0x992476B9Ee81d52a5BdA0622C333938D0Af0aB26

Spec-only change. The @x402r/evm package constants are intentionally left on this branch and will be flipped in a follow-up once the broader chain rollout lands and we can re-run the fork tests against the canonical deploy.

Test plan

  • Visual diff review of specs/schemes/authCapture/scheme_authCapture_evm.md
  • Confirm both address tables (Summary block + Canonical Addresses section) reference the new addresses and are byte-identical to the upstream README
  • Confirm no stale references to commerce-payments::v1::* salt labels or 0xF821… / 0x7561DC… / 0xD8490609… remain in the spec

🤖 Generated with Claude Code

A1igator and others added 3 commits May 8, 2026 13:03
…deployment

Replace the CREATE2 redeploy addresses (`0xF821…`, `0x7561DC…`, `0xD8490609…`)
with the canonical, audited live deployment listed in the upstream
`base/commerce-payments` README:

  - AuthCaptureEscrow:           0xBdEA0D1bcC5966192B070Fdf62aB4EF5b4420cff
  - ERC3009PaymentCollector:     0x0E3dF9510de65469C4518D7843919c0b8C7A7757
  - Permit2PaymentCollector:     0x992476B9Ee81d52a5BdA0622C333938D0Af0aB26

Drop the salt-scheme block and "any first-mover deployer can land at the same
address" framing; the spec now defers to whatever Base ships as the
authoritative deployment, which is the contract that will be replicated at the
same address on additional EVM chains.

Spec-only change. The `@x402r/evm` constants will follow in a separate commit
once the broader chain rollout lands.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ot "Base"

"Base" was ambiguous (Base is also a chain). Refer to the contract maintainers
instead so it's clear who owns deployment to additional EVM chains.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Drop the "maintainers deploy to" / "extends coverage" framing in all three
sites; the deployer is implied.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
A1igator and others added 11 commits May 8, 2026 13:48
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The v1.0.0 release notes are where the deployment addresses are explicitly
listed, so it's a more durable pin than the repo root.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Just drop "via deterministic CREATE2"; keep "Universal contract addresses
(same on every supported EVM chain):".

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Restore the > **Requirement**: blockquote framing; drop only the
CREATE2-specific clauses (deterministic-CREATE2, bytecode-identical,
first-mover deployer) and the Salt-scheme paragraph + Salt-label table
column, since the canonical addresses don't follow them.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Drop the address table in the PaymentRequirements section (it duplicated
the one in the Canonical Addresses annex). Drop the table in the annex
itself and link to the upstream sources instead — base/commerce-payments
release notes for AuthCaptureEscrow + collectors, and the Uniswap Permit2
repo. Matches scheme_exact_evm.md's "Canonical Permit2" annex pattern.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Mirrors scheme_exact_evm.md's third-party "Canonical Permit2" annex
(plain one-line pointer to upstream, no Requirement blockquote). The
deterministic-address claim isn't the spec's to make for third-party
contracts; the upstream link carries it implicitly.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Use docs.uniswap.org/contracts/v4/deployments (the deployments page) instead
of the github.com/Uniswap/permit2 repo, matching the link target used by
scheme_exact_evm.md's Canonical Permit2 annex.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Both lines now read "resolve to the canonical [project](URL)" — same shape.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Match the proper-noun style of the Permit2 line ("Uniswap Permit2 contract").

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@A1igator A1igator merged commit 0e0fb5a into main May 9, 2026
6 checks passed
@A1igator A1igator deleted the A1igator/use-canonical-base-commerce-payments-addresses branch May 9, 2026 00:10
A1igator added a commit that referenced this pull request May 9, 2026
## Summary

- Switch the SDK's AuthCaptureEscrow + token-collector constants from
the CREATE2 redeploy to the audited, live
[`base/commerce-payments`](https://github.com/base/commerce-payments)
deployment listed in the upstream README.
- Update the header comment in `constants.ts` to reflect actual
deployment coverage instead of the broader chain list that applied to
the CREATE2 redeploys.
- Companion to the spec-side change in #43.

| Constant | Old (CREATE2 redeploy) | New (canonical
`base/commerce-payments`) |
| :-------------------------------- |
:------------------------------------------- |
:------------------------------------------- |
| `AUTH_CAPTURE_ESCROW_ADDRESS` |
`0xF8211868187974a7Fb9d99b8fFB171AD70665Dc6` |
`0xBdEA0D1bcC5966192B070Fdf62aB4EF5b4420cff` |
| `EIP3009_TOKEN_COLLECTOR_ADDRESS` |
`0x7561DC178D9aD5bc5fb103C01f448A510d2A36D0` |
`0x0E3dF9510de65469C4518D7843919c0b8C7A7757` |
| `PERMIT2_TOKEN_COLLECTOR_ADDRESS` |
`0xD8490609d2da0ee626b0e676941b225cbc1A8C08` |
`0x992476B9Ee81d52a5BdA0622C333938D0Af0aB26` |

## Deployment status

Verified via `eth_getCode` against public RPCs:

| Chain | `0xBdEA0D…` (canonical) | `0xF821…` (old CREATE2) |
| :--------------------- | :---------------------- |
:---------------------- |
| Base mainnet (8453) | ✅ deployed | ✅ deployed |
| Base Sepolia (84532) | ✅ deployed | ✅ deployed |
| Ethereum (1) | ❌ | (n/a) |
| Optimism (10) | ❌ | (n/a) |
| Arbitrum One (42161) | ❌ | (n/a) |
| Polygon (137) | ❌ | (n/a) |
| BSC (56) | ❌ | (n/a) |
| Avalanche (43114) | ❌ | (n/a) |
| Celo (42220) | ❌ | (n/a) |
| Linea (59144) | ❌ | (n/a) |
| Ethereum Sepolia | ❌ | (n/a) |
| Arbitrum Sepolia | ❌ | (n/a) |

So today this PR effectively scopes the SDK to **Base mainnet + Base
Sepolia**. Additional EVMs are expected to land at the same canonical
addresses as the upstream extends coverage; we'll widen the
supported-chain comment as those deployments ship.

## Test plan

- [x] `pnpm test` — 122/122 unit tests pass
- [x] `pnpm build` — clean
- [ ] Fork tests against Base Sepolia have a pre-existing failure mode
unrelated to this swap (`eth_call` defaults `from = 0`, so simulation
hits `onlySender(operator)` on `authorize` / `charge`). Same failure on
`main` with the CREATE2 addresses, so this PR is not the cause. Tracked
as a separate fix.

## Notes

- This is a breaking change for anyone running the SDK against a
non-Base chain — the previous CREATE2 redeploys were live on more chains
than `0xBdEA0D…` is today. That's the intended direction (single audited
deployment as source of truth) and matches the spec change in #43.
- No version bump in this PR; expect to bundle one in once the spec PR
also merges so consumers see a single coordinated cut.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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.

2 participants