Skip to content

[ARM] Deploy 039 USDC ARM on mainnet - #315

Merged
naddison36 merged 2 commits into
mainfrom
clement/deploy-039-usdc-arm
Jul 23, 2026
Merged

[ARM] Deploy 039 USDC ARM on mainnet#315
naddison36 merged 2 commits into
mainfrom
clement/deploy-039-usdc-arm

Conversation

@clement-ux

Copy link
Copy Markdown
Collaborator

Description

Record the mainnet deployment of the USDC ARM: a USDC-quoted MultiAssetARM with two Paxos-issued base assets. The deployment reuses the existing Paxos-whitelisted adapter proxies and deploys a new PaxosAssetAdapter implementation for each proxy:

  • PYUSD — pegged 1:1 to USDC, redeemed off-chain through Paxos Actions that settle USDC back to the adapter.
  • USDG — pegged 1:1 to USDC, using the same off-chain Paxos redemption flow.

Ownership of the ARM, its CapManager, and both reused adapter proxies is held by the mainnet 2/8 multisig (MULTISIG_2_OF_8). The operational role is the Talos KMS relayer (ARM_TALOS_RELAYER). No lending market is wired up; idle USDC remains in the ARM until a market is added in a follow-up deployment.

This deployment supersedes the legacy USD ARM deployed by 037_DeployUSDARMScript. The legacy resolver entries and execution history remain recorded because 039 reuses the existing Paxos adapter proxies, while the old deployment script is explicitly skipped.

The companion WETH-quoted ARM deployed in the same round is recorded in #314.

The following PRs are included in this deployment:

ARM

Deployment

Script script/deploy/mainnet/039_DeployUSDCARMScript.s.sol

Contracts

Contract Address
USDC ARM (MultiAssetARM) proxy 0x9E3A7026E5767F2d7Ff5e83b0ed011005f45a170
USDC ARM implementation (MultiAssetARM) 0xef40f3548ec3277ade0eb88DbB80ebF63Ea59a96
USDC ARM CapManager proxy 0x19B1Edb2caD902F103a20A30011f125DCe44F954
USDC ARM CapManager implementation 0xDdF1954db1Ace4a58E07a4D25C0818aC977cb8bd
New PaxosAssetAdapter (PYUSD) implementation 0x0bD1bE3B983DE582291dc16DFB123C74dcd65ae8
Reused PaxosAssetAdapter (PYUSD) proxy 0x0C9ac6D63B2b2A1b502E29eC47a53d0966Ea9465
New PaxosAssetAdapter (USDG) implementation 0xB4723D7a5724D6Ce35AACf6c3A6E6E2BeE0c2E05
Reused PaxosAssetAdapter (USDG) proxy 0xAb98aC901B8A26636d9cf3Cf38d9aCdcD045788f

Contract diff

make match file=src/contracts/Proxy.sol addr=0x9E3A7026E5767F2d7Ff5e83b0ed011005f45a170
make match file=src/contracts/MultiAssetARM.sol addr=0xef40f3548ec3277ade0eb88DbB80ebF63Ea59a96
make match file=src/contracts/Proxy.sol addr=0x19B1Edb2caD902F103a20A30011f125DCe44F954
make match file=src/contracts/CapManager.sol addr=0xDdF1954db1Ace4a58E07a4D25C0818aC977cb8bd
make match file=src/contracts/adapters/PaxosAssetAdapter.sol addr=0x0bD1bE3B983DE582291dc16DFB123C74dcd65ae8
make match file=src/contracts/Proxy.sol addr=0x0C9ac6D63B2b2A1b502E29eC47a53d0966Ea9465
make match file=src/contracts/adapters/PaxosAssetAdapter.sol addr=0xB4723D7a5724D6Ce35AACf6c3A6E6E2BeE0c2E05
make match file=src/contracts/Proxy.sol addr=0xAb98aC901B8A26636d9cf3Cf38d9aCdcD045788f

Configuration

Param Value Note
liquidityAsset 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 USDC
claimDelay 10 minutes
minSharesToRedeem 1e6 1 USDC
allocateThreshold 100e6 100 USDC
name / symbol USDC ARM / ARM-USDC
performance fee 2000 20%
fee collector 0xBB077E716A5f1F1B63ed5244eBFf5214E50fec8c BUYBACK_OPERATOR
owner 0x4FF1b9D9ba8558F5EAfCec096318eA0d8b541971 Mainnet 2/8 multisig
ARM / CapManager operator 0x739212d5bAfE6AAC8Be49a60B7d003bD41DBf38b ARM_TALOS_RELAYER

CapManager: total-assets cap 100,000e6 (100,000 USDC), account cap enabled, per-LP cap 100,000e6 for TREASURY_LP (0x6E3fddab68Bf1EBaf9daCF9F7907c7Bc0951D1dc).

addBaseAsset parameters

Base asset Adapter proxy Buy price Sell price Cross price Pegged to USDC
PYUSD 0x0C9ac6D63B2b2A1b502E29eC47a53d0966Ea9465 0.998e36 1e36 0.99997e36 true
USDG 0xAb98aC901B8A26636d9cf3Cf38d9aCdcD045788f 0.998e36 1e36 0.99997e36 true

Both assets start with buyAmount = 0 and sellAmount = 0; trading remains disabled until the operator sets swap limits with setPrices().

Governance

There is no GovernorSix proposal. Ownership of the ARM and CapManager was transferred directly to the mainnet 2/8 multisig during deployment. The two reused Paxos adapter proxies were already owned by the same multisig.

039_DeployUSDCARMScript is recorded with proposalId: 1 and tsGovernance: 0 because the adapter proxy upgrades are still pending manual execution by the 2/8 multisig.

Required post-deployment actions (2/8 multisig)

The mainnet 2/8 multisig must manually upgrade both reused adapter proxies:

Proxy Current implementation Required new implementation Action
PYUSD 0x0C9ac6D63B2b2A1b502E29eC47a53d0966Ea9465 0x50223D4f7c027DF74939555E92584C6332c613B2 0x0bD1bE3B983DE582291dc16DFB123C74dcd65ae8 upgradeTo(0x0bD1bE3B983DE582291dc16DFB123C74dcd65ae8)
USDG 0xAb98aC901B8A26636d9cf3Cf38d9aCdcD045788f 0x7c4c0B599E17C3Ad4ae37Ba61Eef50980e13203B 0xB4723D7a5724D6Ce35AACf6c3A6E6E2BeE0c2E05 upgradeTo(0xB4723D7a5724D6Ce35AACf6c3A6E6E2BeE0c2E05)

Until these upgrades are executed, the reused proxies still target the legacy USD ARM adapter implementations, so the new USDC ARM redemption paths are not operational. Once both upgrades are confirmed on-chain, update tsGovernance to 1 in build/deployments-1.json.

Other post-deployment follow-ups (operator)

  • Enable trading. buyAmount and sellAmount are 0 for both assets. Talos must set the intended swap limits through setPrices() before swaps are enabled.

Tests

  • forge build
  • forge test --match-contract Fork_PaxosARM_Smoke_Test --fork-url "$MAINNET_URL" -vv — 7/7 tests passed. Because tsGovernance is pending, the deployment framework simulates both 2/8 proxy upgrades on the fork before running the smoke tests.
  • Confirmed on-chain that the USDC ARM and CapManager proxies point to the implementations recorded above and are administered by the mainnet 2/8 multisig.
  • Confirmed on-chain that the PYUSD and USDG proxies are still administered by the 2/8 multisig and currently point to the legacy implementations listed in the upgrade table.

Record the mainnet deployment of the USDC-quoted MultiAssetARM, its CapManager, and the new PYUSD and USDG PaxosAssetAdapter implementations. Preserve the legacy USD_ARM resolver entries because 039 reuses the existing Paxos-whitelisted adapter proxies, and mark 037 as superseded. The 2/8 multisig must still upgrade both adapter proxies to the newly deployed implementations, so the execution remains pending with tsGovernance 0.
naddison36
naddison36 previously approved these changes Jul 23, 2026

@naddison36 naddison36 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Result: deployment records are correct, but deployment is not fully operational yet.

  • All 8 deployed contracts match the local source recorded by the PR.
    ARM proxy points to 0xef40…a96.
  • CapManager proxy points to 0xDdF1…8bd.
  • Both proxies and both adapter proxies are owned by the expected 2/8 multisig.
  • ARM metadata, operator, fee, collector, USDC asset, claim delay, thresholds, base assets, prices, adapters, and disabled swap limits match the PR.
  • CapManager’s ARM, operator, total cap, account-cap setting, and Treasury LP cap match.
  • The seven Paxos ARM smoke tests are present; the fork command completed successfully.
  • All GitHub CI checks are green.
✅ Success: Local contract Proxy                matches deployment at 0x9E3A7026E5767F2d7Ff5e83b0ed011005f45a170
✅ Success: Local contract MultiAssetARM        matches deployment at 0xef40f3548ec3277ade0eb88DbB80ebF63Ea59a96
✅ Success: Local contract Proxy                matches deployment at 0x19B1Edb2caD902F103a20A30011f125DCe44F954
✅ Success: Local contract CapManager           matches deployment at 0xDdF1954db1Ace4a58E07a4D25C0818aC977cb8bd
✅ Success: Local contract PaxosAssetAdapter    matches deployment at 0x0bD1bE3B983DE582291dc16DFB123C74dcd65ae8
✅ Success: Local contract Proxy                matches deployment at 0x0C9ac6D63B2b2A1b502E29eC47a53d0966Ea9465
✅ Success: Local contract PaxosAssetAdapter    matches deployment at 0xB4723D7a5724D6Ce35AACf6c3A6E6E2BeE0c2E05
✅ Success: Local contract Proxy                matches deployment at 0xAb98aC901B8A26636d9cf3Cf38d9aCdcD045788f

@naddison36 naddison36 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

reapprove after commit

@naddison36
naddison36 merged commit 5376eef into main Jul 23, 2026
7 checks passed
@naddison36
naddison36 deleted the clement/deploy-039-usdc-arm branch July 23, 2026 05:41
@clement-ux clement-ux added the Deployment Deploys smart contracts to the network. label Jul 23, 2026
@clement-ux clement-ux self-assigned this Jul 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Deployment Deploys smart contracts to the network.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants