Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
df77ddc
feat: Add ERC7540 support (SC-901) (#3)
hieronx Jan 14, 2025
a3e4132
feat: Use approve helper (#6)
lucas-manuel Jan 16, 2025
bc74dcb
feat: Add USTB support (SC-899) (#4)
lucas-manuel Jan 20, 2025
8c3b25d
ci: Fix private submodule issue (SC-925) (#7)
lucas-manuel Jan 20, 2025
72513eb
feat: Add BUIDL support (SC-670) (#2)
lucas-manuel Jan 21, 2025
3a9fe6d
fix: ERC7540 feedback (#8)
hieronx Jan 21, 2025
59b41c1
feat: Add Morpho allocator role support (SC-923) (#9)
lucas-manuel Jan 23, 2025
33e6748
feat: Add Maple support (SC-900) (#5)
lucas-manuel Jan 23, 2025
de4a367
chore: Update to rateLimitedAsset modifier (SC-929) (#13)
lucas-manuel Jan 28, 2025
1534716
feat: Add lower bound decimal check, use custom errors (SC-898) (#12)
lucas-manuel Jan 28, 2025
244714f
feat: Update `freeze` to selectively remove a relayer (SC-927) (#11)
lucas-manuel Jan 28, 2025
697c551
feat: Add USCC support (SC-926) (#14)
lucas-manuel Jan 29, 2025
6a35ada
test: Add missing test coverage (SC-902) (#15)
lucas-manuel Jan 31, 2025
b47d021
feat: Add Centrifuge cancelation flow support (#16)
hieronx Feb 21, 2025
36bb522
feat: Update README (SC-931) (#18)
lucas-manuel Feb 21, 2025
1f64e0e
feat: Add DoS tests (SC-930) (#19)
lucas-manuel Feb 21, 2025
f59ce7f
feat: Update CI and fix testing
lucas-manuel Jan 14, 2025
2e9912d
Merge branch 'dev' into add-v1.3.0
lucas-manuel Mar 25, 2025
3de54c3
feat: Add v1.3.0 production release from private repo
lucas-manuel Mar 25, 2025
653d855
feat: Add and rename audits (#96)
lucas-manuel Apr 2, 2025
29de8a4
feat: Refactor staging deployments scripting to work for full deploym…
lucas-manuel Apr 2, 2025
351097f
feat: Add audits (#26)
lucas-manuel Mar 7, 2025
3b171c2
fix: Update Centrifuge tests (#25)
hieronx Mar 7, 2025
8792bb0
feat: Refactor to use internal functions and modifiers (#24)
lucas-manuel Feb 26, 2025
67898c2
feat: Add DaiUsds swaps (SC-940) (#22)
lucas-manuel Feb 26, 2025
3dd606c
feat: Add Curve support, remove Morpho allocator logic (SC-938) (#23)
lucas-manuel Mar 10, 2025
07f4b85
feat: Update to round up for rate limits and minimums (SC-955) (#31)
lucas-manuel Mar 20, 2025
4d63f59
feat: Use `get_virtual_price` (SC-959) (#29)
lucas-manuel Mar 20, 2025
3c2bf8c
fix: Add line about transferAsset (#33)
lucas-manuel Mar 22, 2025
a8e1ecd
feat: Add swap rate limiting in `addLiquidityCurve` (SC-952) (#30)
lucas-manuel Mar 24, 2025
be430d3
feat: Add index input validation (SC-960) (#34)
lucas-manuel Mar 25, 2025
7762501
fix: Update swap rate limit calculation (#94)
lucas-manuel Mar 28, 2025
b618c3f
feat: Add v1.4.0 code
lucas-manuel Apr 3, 2025
eec4b29
feat: Update staging PSM addresses, fix morpho usdc staging address (…
lucas-manuel Apr 7, 2025
f87126e
feat: Add v1.4.0 audits (#99)
lucas-manuel Apr 8, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,6 @@
[submodule "lib/sdai"]
path = lib/sdai
url = https://github.com/makerdao/sdai
[submodule "lib/spark-address-registry"]
path = lib/spark-address-registry
url = https://github.com/marsfoundation/spark-address-registry
[submodule "lib/erc20-helpers"]
path = lib/erc20-helpers
url = https://github.com/marsfoundation/erc20-helpers
Expand All @@ -34,3 +31,6 @@
[submodule "lib/aave-v3-origin"]
path = lib/aave-v3-origin
url = https://github.com/aave-dao/aave-v3-origin
[submodule "lib/spark-address-registry"]
path = lib/spark-address-registry
url = https://github.com/sparkdotfi/spark-address-registry
33 changes: 12 additions & 21 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,25 +35,12 @@ The diagram below provides and example of calling to mint USDS using the Sky all
All contracts in this repo inherit and implement the AccessControl contract from OpenZeppelin to manage permissions. The following roles are defined:
- `DEFAULT_ADMIN_ROLE`: The admin role is the role that can grant and revoke roles. Also used for general admin functions in all contracts.
- `RELAYER`: Used for the ALM Planner offchain system. This address can call functions on `controller` contracts to perform actions on behalf of the `ALMProxy` contract.
- `FREEZER`: Allows an address with this role to freeze all actions on the `controller` contracts. This role is intended to be used in emergency situations.
- `FREEZER`: Allows an address with this role to remove a `RELAYER` that has been compromised. The intention of this is to have a backup `RELAYER` that the system can fall back to when the main one is removed.
- `CONTROLLER`: Used for the `ALMProxy` contract. Only contracts with this role can call the `call` functions on the `ALMProxy` contract. Also used in the RateLimits contract, only this role can update rate limits.

## Controller Functionality
All functions below change the balance of funds in the ALMProxy contract and are only callable by the `RELAYER` role.

- `ForeignController`: This contract currently implements logic to:
- Deposit and withdraw on EVM compliant L2 PSM3 contracts (see [spark-psm](https://github.com/marsfoundation/spark-psm) for implementation).
- Initiate a transfer of USDC to other domains using CCTP.
- Deposit, withdraw, and redeem from ERC4626 contracts.
- Deposit and withdraw from AAVE.
- `MainnetController`: This contract currently implements logic to:
- Mint and burn USDS.
- Deposit, withdraw, redeem from ERC4626 contracts.
- Deposit and withdraw from AAVE.
- Mint and burn USDe.
- Cooldown and unstake from sUSDe.
- Swap USDS to USDC and vice versa using the mainnet PSM.
- Transfer USDC to other domains using CCTP.
The `MainnetController` contains all logic necessary to interact with the Sky allocation system to mint and burn USDS, swap USDS to USDC in the PSM, as well as interact with mainnet external protocols and CCTP for bridging USDC.
The `ForeignController` contains all logic necessary to deposit, withdraw, and swap assets in L2 PSMs as well as interact with external protocols on L2s and CCTP for bridging USDC.

## Rate Limits

Expand All @@ -77,10 +64,10 @@ This is a linear rate limit that increases over time with a maximum limit. This
Below are all stated trust assumptions for using this contract in production:
- The `DEFAULT_ADMIN_ROLE` is fully trusted, to be run by governance.
- The `RELAYER` role is assumed to be able to be fully compromised by a malicious actor. **This should be a major consideration during auditing engagements.**
- The logic in the smart contracts must prevent the movement of value anywhere outside of the ALM system of contracts.
- The logic in the smart contracts must prevent the movement of value anywhere outside of the ALM system of contracts. The exception for this is in asynchronous style integrations such as BUIDL, where `transferAsset` can be used to send funds to a whitelisted address. LP tokens are then asynchronously minted into the ALMProxy in a separate transaction.
- Any action must be limited to "reasonable" slippage/losses/opportunity cost by rate limits.
- The `FREEZER` must be able to stop the compromised `RELAYER` from performing more harmful actions within the max rate limits by using the `freeze()` function.
- A compromised `RELAYER` can DOS Ethena unstaking, but this can be mitigated by freezing the Controller and reassigning the `RELAYER`. This is outlined in a test `test_compromisedRelayer_lockingFundsInEthenaSilo`.
- The `FREEZER` must be able to stop the compromised `RELAYER` from performing more harmful actions within the max rate limits by using the `removeRelayer` function.
- A compromised `RELAYER` can perform DOS attacks. These attacks along with their respective recovery procedures are outlined in the `Attacks.t.sol` test files.
- Ethena USDe Mint/Burn is trusted to not honor requests with over 50bps slippage from a delegated signer.

## Operational Requirements
Expand All @@ -100,9 +87,9 @@ forge test
```

## Deployments
All commands to deploy:
All commands to deploy:
- Either the full system or just the controller
- To mainnet or base
- To mainnet or base
- For staging or production

Can be found in the Makefile, with the nomenclature `make deploy-<domain>-<env>-<type>`.
Expand All @@ -123,12 +110,16 @@ anvil --fork-url $MAINNET_RPC_URL
```
anvil --fork-url $BASE_RPC_URL -p 8546
```
```
anvil --fork-url $ARBITRUM_ONE_RPC_URL -p 8547
```

2. Point to local RPCs.

```
export MAINNET_RPC_URL=http://127.0.0.1:8545
export BASE_RPC_URL=http://127.0.0.1:8546
export ARBITRUM_ONE_RPC_URL=http://127.0.0.1:8547
```

3. Upgrade mainnet contracts impersonating as the `SPARK_PROXY`.
Expand Down
File renamed without changes.
File renamed without changes.
Binary file added audits/v110-cantina-audit.pdf
Binary file not shown.
Binary file added audits/v110-chainsecurity-audit.pdf
Binary file not shown.
Binary file added audits/v130-cantina-audit.pdf
Binary file not shown.
Binary file added audits/v130-chainsecurity-audit.pdf
Binary file not shown.
Binary file added audits/v140-cantina-audit.pdf
Binary file not shown.
Binary file added audits/v140-chainsecurity-audit.pdf
Binary file not shown.
10 changes: 4 additions & 6 deletions deploy/ForeignControllerInit.sol
Original file line number Diff line number Diff line change
Expand Up @@ -74,12 +74,12 @@ library ForeignControllerInit {
)
internal
{
_initController(controllerInst, configAddresses, checkAddresses, mintRecipients);
_initController(controllerInst, configAddresses, checkAddresses, mintRecipients);

IALMProxy almProxy = IALMProxy(controllerInst.almProxy);
IRateLimits rateLimits = IRateLimits(controllerInst.rateLimits);

require(configAddresses.oldController != address(0), "ForeignControllerInit/old-controller-zero-address");
require(configAddresses.oldController != address(0), "ForeignControllerInit/old-controller-zero-address");

require(almProxy.hasRole(almProxy.CONTROLLER(), configAddresses.oldController), "ForeignControllerInit/old-controller-not-almProxy-controller");
require(rateLimits.hasRole(rateLimits.CONTROLLER(), configAddresses.oldController), "ForeignControllerInit/old-controller-not-rateLimits-controller");
Expand All @@ -98,7 +98,7 @@ library ForeignControllerInit {
CheckAddressParams memory checkAddresses,
MintRecipient[] memory mintRecipients
)
private
private
{
// Step 1: Perform controller sanity checks

Expand All @@ -113,8 +113,6 @@ library ForeignControllerInit {
require(address(newController.usdc()) == checkAddresses.usdc, "ForeignControllerInit/incorrect-usdc");
require(address(newController.cctp()) == checkAddresses.cctp, "ForeignControllerInit/incorrect-cctp");

require(newController.active(), "ForeignControllerInit/controller-not-active");

require(configAddresses.oldController != address(newController), "ForeignControllerInit/old-controller-is-new-controller");

// Step 2: Perform PSM sanity checks
Expand Down
11 changes: 5 additions & 6 deletions deploy/MainnetControllerInit.sol
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ library MainnetControllerInit {
/**********************************************************************************************/

function initAlmSystem(
address vault,
address vault,
address usds,
ControllerInstance memory controllerInst,
ConfigAddressParams memory configAddresses,
Expand Down Expand Up @@ -89,12 +89,12 @@ library MainnetControllerInit {
)
internal
{
_initController(controllerInst, configAddresses, checkAddresses, mintRecipients);
_initController(controllerInst, configAddresses, checkAddresses, mintRecipients);

IALMProxy almProxy = IALMProxy(controllerInst.almProxy);
IRateLimits rateLimits = IRateLimits(controllerInst.rateLimits);

require(configAddresses.oldController != address(0), "MainnetControllerInit/old-controller-zero-address");
require(configAddresses.oldController != address(0), "MainnetControllerInit/old-controller-zero-address");

require(almProxy.hasRole(almProxy.CONTROLLER(), configAddresses.oldController), "MainnetControllerInit/old-controller-not-almProxy-controller");
require(rateLimits.hasRole(rateLimits.CONTROLLER(), configAddresses.oldController), "MainnetControllerInit/old-controller-not-rateLimits-controller");
Expand All @@ -117,7 +117,7 @@ library MainnetControllerInit {
CheckAddressParams memory checkAddresses,
MintRecipient[] memory mintRecipients
)
private
private
{
// Step 1: Perform controller sanity checks

Expand All @@ -134,7 +134,6 @@ library MainnetControllerInit {
require(address(newController.cctp()) == checkAddresses.cctp, "MainnetControllerInit/incorrect-cctp");

require(newController.psmTo18ConversionFactor() == 1e12, "MainnetControllerInit/incorrect-psmTo18ConversionFactor");
require(newController.active(), "MainnetControllerInit/controller-not-active");

require(configAddresses.oldController != address(newController), "MainnetControllerInit/old-controller-is-new-controller");

Expand Down
8 changes: 6 additions & 2 deletions foundry.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,20 @@ out = "out"
libs = ["lib"]
solc_version = '0.8.25'
optimizer = true
optimizer_runs = 200
optimizer_runs = 1
fs_permissions = [
{ access = "read", path = "./script/input/"},
{ access = "read-write", path = "./script/output/"}
]
evm_version = 'shanghai'
evm_version = 'cancun'

[fuzz]
runs = 1000

[invariant]
runs = 1
depth = 100

[etherscan]
mainnet = { key = "${ETHERSCAN_API_KEY}" }
optimism = { key = "${OPTIMISMSCAN_API_KEY}" }
Expand Down
13 changes: 13 additions & 0 deletions script/input/1/arbitrum_one-staging.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"admin": "0x62B5262D3639eA5A8ec0D8Aa442f1135ecF77205",
"almProxy": "0xe25DD602aA54B1346B8D004D10D51851C451fbF3",
"cctpTokenMessenger": "0x19330d10D9Cc8751218eaf51E8885D058642E08A",
"controller": "0x149aCa3bC479EfB254aea74EB8c71625AEC55465",
"freezer": "0x19C6728873c6d247582A8b39fF410B42C4AE5a3F",
"psm": "0x2B05F8e1cACC6974fD79A673a341Fe1f58d27266",
"rateLimits": "0x7B843f95AA7a6A72836F1fFE2B10ca226236BB14",
"relayer": "0x19C6728873c6d247582A8b39fF410B42C4AE5a3F",
"susds": "0xdDb46999F8891663a8F2828d25298f70416d7610",
"usdc": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"usds": "0x6491c05A82219b8D1479057361ff1654749b876b"
}
7 changes: 4 additions & 3 deletions script/input/1/base-production.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,12 @@
"admin": "0xF93B7122450A50AF3e5A76E1d546e95Ac1d0F579",
"almProxy": "0x2917956eFF0B5eaF030abDB4EF4296DF775009cA",
"cctpTokenMessenger": "0x1682Ae6375C4E4A97e4B583BC394c861A46D8962",
"controller": "0x5F032555353f3A1D16aA6A4ADE0B35b369da0440",
"freezer": "0x90D8c80C028B4C09C0d8dcAab9bbB057F0513431",
"psm": "0x1601843c5E9bC251A3272907010AFa41Fa18347E",
"rateLimits": "0x983eC82E45C61a42FDDA7B3c43B8C767004c8A74",
"relayer": "0x8a25A24EDE9482C4Fc0738F99611BE58F1c839AB",
"freezer": "0x90D8c80C028B4C09C0d8dcAab9bbB057F0513431",
"susds": "0x5875eEE11Cf8398102FdAd704C9E96607675467a",
"usdc": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"usds": "0x820C137fa70C8691f0e44Dc420a5e53c168921Dc",
"susds": "0x5875eEE11Cf8398102FdAd704C9E96607675467a"
"usds": "0x820C137fa70C8691f0e44Dc420a5e53c168921Dc"
}
12 changes: 8 additions & 4 deletions script/input/1/base-staging.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
{
"admin": "0x62B5262D3639eA5A8ec0D8Aa442f1135ecF77205",
"almProxy": "0x5c077cC797B2b0C2ea99c0583e096c243cEa9Db0",
"cctpTokenMessenger": "0x1682Ae6375C4E4A97e4B583BC394c861A46D8962",
"relayer": "0xaB959A6F88b8D966c44a7cDC2049Ba9669EBf047",
"controller": "0x2eD26eF498B2e9A623Cdb6af9b48afF1a1cF920A",
"freezer": "0xaB959A6F88b8D966c44a7cDC2049Ba9669EBf047",
"usdc": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"psm": "0x1601843c5E9bC251A3272907010AFa41Fa18347E",
"usds": "0x820C137fa70C8691f0e44Dc420a5e53c168921Dc",
"susds": "0x5875eEE11Cf8398102FdAd704C9E96607675467a"
"rateLimits": "0xf13600B1fC2ec6BF98e1d8B924E5e478De85B123",
"relayer": "0xaB959A6F88b8D966c44a7cDC2049Ba9669EBf047",
"susds": "0x5875eEE11Cf8398102FdAd704C9E96607675467a",
"usdc": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"usds": "0x820C137fa70C8691f0e44Dc420a5e53c168921Dc"
}
3 changes: 2 additions & 1 deletion script/input/1/mainnet-production.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@
"allocatorVault": "0x691a6c29e9e96dd897718305427Ad5D534db16BA",
"almProxy": "0x1601843c5E9bC251A3272907010AFa41Fa18347E",
"cctpTokenMessenger": "0xBd3fa81B58Ba92a82136038B25aDec7066af3155",
"controller": "0x5cf73FDb7057E436A6eEaDFAd27E45E7ab6E431e",
"dai": "0x6B175474E89094C44Da98b954EedeAC495271d0F",
"daiUsds": "0x3225737a9Bbb6473CB4a45b7244ACa2BeFdB276A",
"freezer": "0x90D8c80C028B4C09C0d8dcAab9bbB057F0513431",
"psm": "0xf6e72Db5454dd049d0788e411b06CfAF16853042",
"rateLimits": "0x7A5FD5cf045e010e62147F065cEAe59e5344b188",
"relayer": "0x8a25A24EDE9482C4Fc0738F99611BE58F1c839AB",
"freezer": "0x90D8c80C028B4C09C0d8dcAab9bbB057F0513431",
"susds": "0xa3931d71877C0E7a3148CB7Eb4463524FEc27fbD",
"usdc": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"usds": "0xdC035D45d973E3EC169d2276DDab16f1e407384F"
Expand Down
23 changes: 18 additions & 5 deletions script/input/1/mainnet-staging.json
Original file line number Diff line number Diff line change
@@ -1,14 +1,27 @@
{
"ilk": "ALLOCATOR-SPARK-A",
"usdcUnitSize": 10,
"usdsUnitSize": 10,
"admin": "0x62B5262D3639eA5A8ec0D8Aa442f1135ecF77205",
"allocatorBuffer": "0x511ecc909b49d5F6Db5ff0DD8DcDB272c8Bc6569",
"allocatorOracle": "0x011533ddfcd6566cF1ab1c03375a4Cdbdd289607",
"allocatorRegistry": "0x94a01e71Abe2f441aa976F89f85Ba6438DCdC3e2",
"allocatorRoles": "0x56E492C966E9704F865df436ceb6306FFf4A6fd9",
"allocatorVault": "0x1fFd8A8382bCdB872ac62e36933c4e8Fc462728A",
"almProxy": "0x07EF00D45C85a2046c714D0E944EB6dc28618C08",
"cctpTokenMessenger": "0xBd3fa81B58Ba92a82136038B25aDec7066af3155",
"controller": "0x3ba940F029a93Ba2FBBD10cE7507e9126f9dff6c",
"dai": "0x6B175474E89094C44Da98b954EedeAC495271d0F",
"daiUsds": "0x3225737a9Bbb6473CB4a45b7244ACa2BeFdB276A",
"freezer": "0x611C7c37F296240c2fF5a92f0B4a398B01B237c4",
"ilk": "ALLOCATOR-SPARK-A",
"jug": "0xa42473893FfEAf666e9632c1d4200E2d1046E1Ec",
"psm": "0xf6e72Db5454dd049d0788e411b06CfAF16853042",
"psmWrapper": "0x96B0da3F44a5E1d545530F1C33b1485afa8Ee6E8",
"rateLimits": "0xc0117e8600FE666AE0CCA1b4fC1890ABF8E1ec49",
"relayer": "0x611C7c37F296240c2fF5a92f0B4a398B01B237c4",
"freezer": "0x611C7c37F296240c2fF5a92f0B4a398B01B237c4",
"susds": "0xa3931d71877C0E7a3148CB7Eb4463524FEc27fbD",
"usdc": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"usds": "0xdC035D45d973E3EC169d2276DDab16f1e407384F"
"usdcUnitSize": 10,
"usds": "0xdC035D45d973E3EC169d2276DDab16f1e407384F",
"usdsJoin": "0xc1Ca37dfDf716bf863e055820454E9a8581E03f4",
"usdsUnitSize": 10,
"vat": "0x1a698C8E8f32a2ec193589c98Bb5a4CbBDD65dE4"
}
5 changes: 5 additions & 0 deletions script/output/1/arbitrum_one-staging-release-20250226.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"almProxy": "0xBC1B4aF7E41fcBD26472fa72490d777f95014E3F",
"controller": "0xfd6B8A9CEbd4f2204245B6c403704BF929DCAFEF",
"rateLimits": "0x52CC503225Bf7CE0D2267165f6860C7F701e71bE"
}
8 changes: 8 additions & 0 deletions script/output/1/arbitrum_one-staging-release-20250402.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"admin": "0x62B5262D3639eA5A8ec0D8Aa442f1135ecF77205",
"almProxy": "0xe25DD602aA54B1346B8D004D10D51851C451fbF3",
"controller": "0x149aCa3bC479EfB254aea74EB8c71625AEC55465",
"freezer": "0x19C6728873c6d247582A8b39fF410B42C4AE5a3F",
"rateLimits": "0x7B843f95AA7a6A72836F1fFE2B10ca226236BB14",
"relayer": "0x19C6728873c6d247582A8b39fF410B42C4AE5a3F"
}
8 changes: 8 additions & 0 deletions script/output/1/base-staging-release-20250402.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"admin": "0x62B5262D3639eA5A8ec0D8Aa442f1135ecF77205",
"almProxy": "0x5c077cC797B2b0C2ea99c0583e096c243cEa9Db0",
"controller": "0x2eD26eF498B2e9A623Cdb6af9b48afF1a1cF920A",
"freezer": "0xaB959A6F88b8D966c44a7cDC2049Ba9669EBf047",
"rateLimits": "0xf13600B1fC2ec6BF98e1d8B924E5e478De85B123",
"relayer": "0xaB959A6F88b8D966c44a7cDC2049Ba9669EBf047"
}
17 changes: 17 additions & 0 deletions script/output/1/mainnet-staging-release-20250402.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"admin": "0x62B5262D3639eA5A8ec0D8Aa442f1135ecF77205",
"allocatorBuffer": "0x511ecc909b49d5F6Db5ff0DD8DcDB272c8Bc6569",
"allocatorOracle": "0x011533ddfcd6566cF1ab1c03375a4Cdbdd289607",
"allocatorRegistry": "0x94a01e71Abe2f441aa976F89f85Ba6438DCdC3e2",
"allocatorRoles": "0x56E492C966E9704F865df436ceb6306FFf4A6fd9",
"allocatorVault": "0x1fFd8A8382bCdB872ac62e36933c4e8Fc462728A",
"almProxy": "0x07EF00D45C85a2046c714D0E944EB6dc28618C08",
"controller": "0x3ba940F029a93Ba2FBBD10cE7507e9126f9dff6c",
"freezer": "0x611C7c37F296240c2fF5a92f0B4a398B01B237c4",
"jug": "0xa42473893FfEAf666e9632c1d4200E2d1046E1Ec",
"psmWrapper": "0x96B0da3F44a5E1d545530F1C33b1485afa8Ee6E8",
"rateLimits": "0xc0117e8600FE666AE0CCA1b4fC1890ABF8E1ec49",
"relayer": "0x611C7c37F296240c2fF5a92f0B4a398B01B237c4",
"usdsJoin": "0xc1Ca37dfDf716bf863e055820454E9a8581E03f4",
"vat": "0x1a698C8E8f32a2ec193589c98Bb5a4CbBDD65dE4"
}
Loading
Loading