Skip to main content
When Circle releases a newer version of the SCA contract, you can upgrade existing wallets to pick up bug fixes and product improvements. The wallet’s address and assets stay the same across an upgrade. You initiate every upgrade yourself. Circle never upgrades wallets on your behalf. MSCA wallets have a single implementation and can’t be upgraded.

Supported migration paths

Upgrade an SCA wallet

If your wallet is on circle_4337_v1, complete the prerequisites before upgrading.
Call the endpoint that matches your wallet product:
Filter GET /wallets by the scaCore query parameter to list SCA wallets eligible for an upgrade.
The upgrade appears in Circle Console and the transaction APIs as a contract execution transaction. When it reaches COMPLETE, the wallet’s SCA version updates in the responses from GET /wallets/{id} and GET /wallets. Your wallet remains usable during the upgrade transaction.

Prerequisites for circle_4337_v1

circle_4337_v1 wallets require these prerequisites before the upgrade endpoint succeeds.
1

Lazy-deploy the wallet

circle_4337_v1 wallets must be deployed onchain before an upgrade can run. To trigger deployment, initiate any outbound transaction (transfer or contract execution) from the wallet. See account types for background on SCA lazy deployment.
2

Fund the owner address on testnet

On testnet, fund the wallet’s owner address with native token before the upgrade transaction runs. On mainnet, circle_4337_v1 wallets already received an airdrop that covers the upgrade fee, so you can skip this step.Fetch the owner address using POST /contracts/query:
Response:
Response body
The first entry in outputValues is the owner address. Send it enough native token to cover roughly 300,000 gas. Approximate costs:
  • ETH-SEPOLIA: 300,000 gas × 30 Gwei ≈ 0.009 ETH
  • MATIC-AMOY: 300,000 gas × 150 Gwei ≈ 0.045 POL

Contract versions

Use the factory and implementation addresses to verify onchain deployments. Addresses are the same on mainnet and testnet.
Because MSCA wallets are proxy contracts, block explorers display the wallet address’s contract name as ERC1967Proxy rather than UpgradeableMSCA.

How upgrades work

SCA and MSCA wallets use the ERC-1967 proxy pattern. The proxy contract at your wallet address delegates calls to a separate implementation contract that holds the actual logic. An upgrade points the proxy at a new implementation address, which is why the wallet address stays the same. The upgrade endpoint executes one of these functions on the proxy:
  • upgradeTo(address)
  • upgradeToAndCall(address,bytes)