[ARM] Deploy 037 Stables ARM (PYUSD/USDG) on mainnet - #290
Conversation
Record the on-chain execution of 037_DeployPaxosARMScript: the USDC-quoted Stables ARM (MultiAssetARM) with PYUSD and USDG wired through their own PaxosAssetAdapter proxies. Adds the 8 deployed contracts and the 037 execution entry to deployments-1.json, and normalizes the 035 proposalId to a string. Skip 036_DeployMultiAssetARMScript (the WETH-quoted LST ARM), which is not being deployed in this round.
|
I've verified the deployed contract I also verified the live mainnet config against the PR: proxy implementations, owners, operator, fee collector, USDC liquidity asset, caps, base asset configs, zero swap liquidity, and Paxos recipient placeholders all match. |
| "name": "037_DeployPaxosARMScript", | ||
| "proposalId": 1, | ||
| "tsDeployment": 1783421579, | ||
| "tsGovernance": 0 |
There was a problem hiding this comment.
shouldn't tsGovernance be set to 1?
There was a problem hiding this comment.
Good catch — fixed in 098d036.
037_DeployPaxosARMScript has no governance proposal and no pending manual actions (ownership of the ARM, CapManager and both adapter proxies is handed to the 2/8 STRATEGIST multisig inside _execute()), so this should be NO_GOVERNANCE (1) like every other non-governance deployment in the file.
The 0 is just what _recordExecution() emits: when there are no governance actions it sets proposalId = NO_GOVERNANCE (1) but leaves tsGovernance at its default 0, which then has to be bumped to 1 manually (as the docstring / ARCHITECTURE.md note). With tsGovernance: 0 the framework treats the script as pending and re-runs it on every fork/smoke replay instead of skipping it.
037_DeployPaxosARMScript has no governance proposal and no pending manual actions (ownership is handed to the 2/8 STRATEGIST multisig within _execute()). Record tsGovernance as NO_GOVERNANCE (1) instead of 0 so the deploy framework treats it as fully done and skips it on fork/smoke replays, matching every other non-governance deployment in the file.
naddison36
left a comment
There was a problem hiding this comment.
I've verified the deployment
|
Superseded by #292. The smart contract was renamed ( |
Description
Record the mainnet deployment of the Stables ARM: a USDC-quoted
MultiAssetARMwith two Paxos-issued base assets, each wired through its ownPaxosAssetAdapterbehind a proxy:Ownership of the ARM, its
CapManagerand both adapter proxies is handed to the multi-chain 2/8 multisig (STRATEGIST); the operational role (request/claim redemptions, submit Paxos redeems, set prices) is the Talos KMS relayer (ARM_TALOS_RELAYER). No lending market is wired up — idle USDC stays in the ARM until a market is added in a follow-up script.This PR also marks
036_DeployMultiAssetARMScript(the WETH-quoted LST ARM) as skipped — it is not being deployed in this round.The following PRs are included in this deployment
ARM
Deployment
Script
script/deploy/mainnet/037_DeployPaxosARMScript.s.solContracts
MultiAssetARM) proxyMultiAssetARM)CapManagerproxyCapManagerimplementationPaxosAssetAdapter(PYUSD) implementationPaxosAssetAdapter(PYUSD) proxyPaxosAssetAdapter(USDG) implementationPaxosAssetAdapter(USDG) proxyContract diff
Configuration
The ARM implementation is deployed with USDC (6-decimal) parameters — the 6-decimal analogues of the 035/036 18-decimal WETH values:
liquidityAsset0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48claimDelay10 minutesminSharesToRedeem1e6allocateThreshold100e6name/symbolStables ARM/ARM-USDC-Stables20000xBB077E716A5f1F1B63ed5244eBFf5214E50fec8cBUYBACK_OPERATORowner(ARM / CapManager / adapter proxies)0x4FF1b9D9ba8558F5EAfCec096318eA0d8b541971STRATEGIST— multi-chain 2/8 multisigoperator0x739212d5bAfE6AAC8Be49a60B7d003bD41DBf38bARM_TALOS_RELAYERCapManager: total-assets cap
100,000e6(100,000 USDC), account cap enabled, per-LP cap100,000e6forTREASURY_LP(0x6E3fddab68Bf1EBaf9daCF9F7907c7Bc0951D1dc).addBaseAssetparameters (PYUSD)newBaseAsset0x6c3ea9036406852006290770BEdFcAbA0e23A0e8adapter0x720395F299526b1EeD73D15cdFA8a9788084EBcePaxosAssetAdapter(PYUSD) proxybuyPrice9980000000000000000000000000000000000.998e36sellPrice10000000000000000000000000000000000001e36buyAmount0setPrices()sellAmount0setPrices()newCrossPrice9999700000000000000000000000000000000.99997e36— totalAssets() valuationpeggedToLiquidityAssettrueaddBaseAssetparameters (USDG)newBaseAsset0xe343167631d89B6Ffc58B88d6b7fB0228795491Dadapter0xC905Cd9DC6d4032282494ca792b3e93Dac737554PaxosAssetAdapter(USDG) proxybuyPrice9980000000000000000000000000000000000.998e36sellPrice10000000000000000000000000000000000001e36buyAmount0setPrices()sellAmount0setPrices()newCrossPrice9999700000000000000000000000000000000.99997e36— totalAssets() valuationpeggedToLiquidityAssettrueGovernance
Unlike EtherFiARM (Timelock-owned), the Stables ARM is owned by the multi-chain 2/8 multisig (
STRATEGIST,0x4FF1b9D9ba8558F5EAfCec096318eA0d8b541971). Ownership of the ARM, itsCapManagerand both adapter proxies is transferred to that multisig directly inside_execute()— there is noGovernorSixproposal and no_buildGovernanceProposal()for this script.The deployment is therefore recorded in
build/deployments-1.jsonwithproposalId: 1(NO_GOVERNANCE), so the fork/smoke framework replays the deployment without simulating any governance action.Skipped script
036_DeployMultiAssetARMScript(the WETH-quoted LST ARM: stETH / wstETH / eETH / weETH) is markedskip = true. It is not deployed in this round and is left in place for a future deployment.Post-deployment follow-ups (owner / operator)
PAXOS_RECIPIENT = 0x…dEaDas a placeholder; the 2/8 multisig owner must callsetPaxosRecipient()on each adapter with the real Paxos deposit address before enabling redemptions.buyAmount/sellAmountare both0, so no swaps are possible until the operator (Talos) sets the swap limits viasetPrices().