From ca727895843a42361939ea7342967b19348302fd Mon Sep 17 00:00:00 2001 From: aalavandhann <6264334+aalavandhan@users.noreply.github.com> Date: Mon, 30 Jun 2025 16:03:22 -0400 Subject: [PATCH 1/4] mainnet deployment --- spot-contracts/.openzeppelin/mainnet.json | 916 +++++++++++++++++++++ spot-contracts/.openzeppelin/sepolia.json | 228 +++++ spot-contracts/README.md | 2 +- spot-contracts/deployments/mainnet.json | 2 +- spot-contracts/hardhat.config.ts | 5 +- spot-contracts/package.json | 2 +- spot-contracts/tasks/scripts/mainnet_v5.sh | 24 + spot-contracts/tasks/upgrade/index.ts | 69 ++ 8 files changed, 1243 insertions(+), 5 deletions(-) create mode 100644 spot-contracts/tasks/scripts/mainnet_v5.sh diff --git a/spot-contracts/.openzeppelin/mainnet.json b/spot-contracts/.openzeppelin/mainnet.json index 420a385c..d9a61a89 100644 --- a/spot-contracts/.openzeppelin/mainnet.json +++ b/spot-contracts/.openzeppelin/mainnet.json @@ -19,6 +19,11 @@ "address": "0xE22977381506bF094CB3ed50CB8834E358F7ef6c", "txHash": "0x4942e46f0c306087f3485aa8c6d74fec37d1fa1f7a59acfb385b2ed8173e745c", "kind": "transparent" + }, + { + "address": "0x8689Fa9991834Bcf0387b31b7986ac311bAb6ab5", + "txHash": "0x8f8fcc763660586128699cf7658bb6672434e98597903b57749da2f56afd5a92", + "kind": "transparent" } ], "impls": { @@ -3324,6 +3329,917 @@ }, "namespaces": {} } + }, + "907dd399d33e68e0a7c77c54e1886a30e59ec356c35a0f9c27e96d39644c64d6": { + "address": "0x03Cb728991DEb43A55D475885Ff07a694bF1cc6B", + "txHash": "0xc9712ffbcc1b697bc28eccc30566ce23a2aa6b6d045f0a578f23dd1d142af72c", + "layout": { + "solcVersion": "0.8.20", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "targetSystemRatio", + "offset": 0, + "slot": "101", + "type": "t_uint256", + "contract": "FeePolicy", + "src": "contracts/FeePolicy.sol:69" + }, + { + "label": "equilibriumDR", + "offset": 0, + "slot": "102", + "type": "t_struct(Range)11656_storage", + "contract": "FeePolicy", + "src": "contracts/FeePolicy.sol:74" + }, + { + "label": "feeFnDRDown", + "offset": 0, + "slot": "104", + "type": "t_struct(Line)11666_storage", + "contract": "FeePolicy", + "src": "contracts/FeePolicy.sol:80" + }, + { + "label": "feeFnDRUp", + "offset": 0, + "slot": "108", + "type": "t_struct(Line)11666_storage", + "contract": "FeePolicy", + "src": "contracts/FeePolicy.sol:83" + }, + { + "label": "perpDebasementLag", + "offset": 0, + "slot": "112", + "type": "t_uint256", + "contract": "FeePolicy", + "src": "contracts/FeePolicy.sol:89" + }, + { + "label": "perpEnrichmentLag", + "offset": 0, + "slot": "113", + "type": "t_uint256", + "contract": "FeePolicy", + "src": "contracts/FeePolicy.sol:92" + }, + { + "label": "perpDebasementPercLimits", + "offset": 0, + "slot": "114", + "type": "t_struct(Range)11656_storage", + "contract": "FeePolicy", + "src": "contracts/FeePolicy.sol:95" + }, + { + "label": "perpEnrichmentPercLimits", + "offset": 0, + "slot": "116", + "type": "t_struct(Range)11656_storage", + "contract": "FeePolicy", + "src": "contracts/FeePolicy.sol:98" + }, + { + "label": "rebalanceFreqSec", + "offset": 0, + "slot": "118", + "type": "t_uint256", + "contract": "FeePolicy", + "src": "contracts/FeePolicy.sol:101" + }, + { + "label": "protocolSharePerc", + "offset": 0, + "slot": "119", + "type": "t_uint256", + "contract": "FeePolicy", + "src": "contracts/FeePolicy.sol:104" + }, + { + "label": "protocolFeeCollector", + "offset": 0, + "slot": "120", + "type": "t_address", + "contract": "FeePolicy", + "src": "contracts/FeePolicy.sol:107" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(Line)11666_storage": { + "label": "struct Line", + "members": [ + { + "label": "x1", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "y1", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "x2", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "y2", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Range)11656_storage": { + "label": "struct Range", + "members": [ + { + "label": "lower", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "upper", + "type": "t_uint256", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "27615ac3f0c04782221a0e771a009ef027f8d4639b613c0b87c5311ebbfd6094": { + "address": "0x62cbE9F24413485f04FA62F9548C7855ec4a5425", + "txHash": "0xe3b11f8c86361ce12e6eb009c0e842407262d952d494b87bd0141f39b36f5d19", + "layout": { + "solcVersion": "0.8.20", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_balances", + "offset": 0, + "slot": "51", + "type": "t_mapping(t_address,t_uint256)", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37" + }, + { + "label": "_allowances", + "offset": 0, + "slot": "52", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39" + }, + { + "label": "_totalSupply", + "offset": 0, + "slot": "53", + "type": "t_uint256", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:41" + }, + { + "label": "_name", + "offset": 0, + "slot": "54", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:43" + }, + { + "label": "_symbol", + "offset": 0, + "slot": "55", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:44" + }, + { + "label": "__gap", + "offset": 0, + "slot": "56", + "type": "t_array(t_uint256)45_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:394" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC20BurnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol:51" + }, + { + "label": "_owner", + "offset": 0, + "slot": "151", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "201", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "251", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "252", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:74" + }, + { + "label": "_decimals", + "offset": 0, + "slot": "301", + "type": "t_uint8", + "contract": "PerpetualTranche", + "src": "contracts/PerpetualTranche.sol:130" + }, + { + "label": "keeper", + "offset": 1, + "slot": "301", + "type": "t_address", + "contract": "PerpetualTranche", + "src": "contracts/PerpetualTranche.sol:136" + }, + { + "label": "feePolicy", + "offset": 0, + "slot": "302", + "type": "t_contract(IFeePolicy)11799", + "contract": "PerpetualTranche", + "src": "contracts/PerpetualTranche.sol:140" + }, + { + "label": "_pricingStrategy_DEPRECATED", + "offset": 0, + "slot": "303", + "type": "t_address", + "contract": "PerpetualTranche", + "src": "contracts/PerpetualTranche.sol:146" + }, + { + "label": "_discountStrategy_DEPRECATED", + "offset": 0, + "slot": "304", + "type": "t_address", + "contract": "PerpetualTranche", + "src": "contracts/PerpetualTranche.sol:154" + }, + { + "label": "bondIssuer", + "offset": 0, + "slot": "305", + "type": "t_contract(IBondIssuer)11728", + "contract": "PerpetualTranche", + "src": "contracts/PerpetualTranche.sol:158" + }, + { + "label": "_depositBond", + "offset": 0, + "slot": "306", + "type": "t_contract(IBondController)12381", + "contract": "PerpetualTranche", + "src": "contracts/PerpetualTranche.sol:161" + }, + { + "label": "minTrancheMaturitySec", + "offset": 0, + "slot": "307", + "type": "t_uint256", + "contract": "PerpetualTranche", + "src": "contracts/PerpetualTranche.sol:165" + }, + { + "label": "maxTrancheMaturitySec", + "offset": 0, + "slot": "308", + "type": "t_uint256", + "contract": "PerpetualTranche", + "src": "contracts/PerpetualTranche.sol:169" + }, + { + "label": "_matureValueTargetPerc_DEPRECATED", + "offset": 0, + "slot": "309", + "type": "t_uint256", + "contract": "PerpetualTranche", + "src": "contracts/PerpetualTranche.sol:177" + }, + { + "label": "maxSupply", + "offset": 0, + "slot": "310", + "type": "t_uint256", + "contract": "PerpetualTranche", + "src": "contracts/PerpetualTranche.sol:180" + }, + { + "label": "maxDepositTrancheValuePerc", + "offset": 0, + "slot": "311", + "type": "t_uint256", + "contract": "PerpetualTranche", + "src": "contracts/PerpetualTranche.sol:184" + }, + { + "label": "_mintedSupplyPerTranche_DEPRECATED", + "offset": 0, + "slot": "312", + "type": "t_mapping(t_contract(ITranche)12408,t_uint256)", + "contract": "PerpetualTranche", + "src": "contracts/PerpetualTranche.sol:190" + }, + { + "label": "_appliedDiscounts_DEPRECATED", + "offset": 0, + "slot": "313", + "type": "t_mapping(t_contract(IERC20Upgradeable)1157,t_uint256)", + "contract": "PerpetualTranche", + "src": "contracts/PerpetualTranche.sol:197" + }, + { + "label": "_reserves", + "offset": 0, + "slot": "314", + "type": "t_struct(AddressSet)4620_storage", + "contract": "PerpetualTranche", + "src": "contracts/PerpetualTranche.sol:203" + }, + { + "label": "_matureTrancheBalance_DEPRECATED", + "offset": 0, + "slot": "316", + "type": "t_uint256", + "contract": "PerpetualTranche", + "src": "contracts/PerpetualTranche.sol:209" + }, + { + "label": "vault", + "offset": 0, + "slot": "317", + "type": "t_contract(IRolloverVault)12133", + "contract": "PerpetualTranche", + "src": "contracts/PerpetualTranche.sol:216" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)45_storage": { + "label": "uint256[45]", + "numberOfBytes": "1440" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IBondController)12381": { + "label": "contract IBondController", + "numberOfBytes": "20" + }, + "t_contract(IBondIssuer)11728": { + "label": "contract IBondIssuer", + "numberOfBytes": "20" + }, + "t_contract(IERC20Upgradeable)1157": { + "label": "contract IERC20Upgradeable", + "numberOfBytes": "20" + }, + "t_contract(IFeePolicy)11799": { + "label": "contract IFeePolicy", + "numberOfBytes": "20" + }, + "t_contract(IRolloverVault)12133": { + "label": "contract IRolloverVault", + "numberOfBytes": "20" + }, + "t_contract(ITranche)12408": { + "label": "contract ITranche", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_contract(IERC20Upgradeable)1157,t_uint256)": { + "label": "mapping(contract IERC20Upgradeable => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_contract(ITranche)12408,t_uint256)": { + "label": "mapping(contract ITranche => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)4620_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)4319_storage", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Set)4319_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "a654f5fc3f523b33f333301fc186ec85f3adf97f68e5c1c99b8f2929861773bc": { + "address": "0x09e8adfa8D829DaC1c305544A86b53Ed0dDD536a", + "txHash": "0x43e5cc57ceda548dba1f946c90b07646ddd59ad09c56a60ffcfbcb7d2616d394", + "layout": { + "solcVersion": "0.8.20", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_balances", + "offset": 0, + "slot": "51", + "type": "t_mapping(t_address,t_uint256)", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:37" + }, + { + "label": "_allowances", + "offset": 0, + "slot": "52", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:39" + }, + { + "label": "_totalSupply", + "offset": 0, + "slot": "53", + "type": "t_uint256", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:41" + }, + { + "label": "_name", + "offset": 0, + "slot": "54", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:43" + }, + { + "label": "_symbol", + "offset": 0, + "slot": "55", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:44" + }, + { + "label": "__gap", + "offset": 0, + "slot": "56", + "type": "t_array(t_uint256)45_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:394" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC20BurnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol:51" + }, + { + "label": "_owner", + "offset": 0, + "slot": "151", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "201", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "251", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "252", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:74" + }, + { + "label": "underlying", + "offset": 0, + "slot": "301", + "type": "t_contract(IERC20Upgradeable)1157", + "contract": "RolloverVault", + "src": "contracts/RolloverVault.sol:128" + }, + { + "label": "_deployed", + "offset": 0, + "slot": "302", + "type": "t_struct(AddressSet)4620_storage", + "contract": "RolloverVault", + "src": "contracts/RolloverVault.sol:132" + }, + { + "label": "minDeploymentAmt", + "offset": 0, + "slot": "304", + "type": "t_uint256", + "contract": "RolloverVault", + "src": "contracts/RolloverVault.sol:140" + }, + { + "label": "perp", + "offset": 0, + "slot": "305", + "type": "t_contract(IPerpetualTranche)12045", + "contract": "RolloverVault", + "src": "contracts/RolloverVault.sol:143" + }, + { + "label": "feePolicy", + "offset": 0, + "slot": "306", + "type": "t_contract(IFeePolicy)11799", + "contract": "RolloverVault", + "src": "contracts/RolloverVault.sol:149" + }, + { + "label": "keeper", + "offset": 0, + "slot": "307", + "type": "t_address", + "contract": "RolloverVault", + "src": "contracts/RolloverVault.sol:154" + }, + { + "label": "reservedUnderlyingBal", + "offset": 0, + "slot": "308", + "type": "t_uint256", + "contract": "RolloverVault", + "src": "contracts/RolloverVault.sol:165" + }, + { + "label": "reservedUnderlyingPerc", + "offset": 0, + "slot": "309", + "type": "t_uint256", + "contract": "RolloverVault", + "src": "contracts/RolloverVault.sol:169" + }, + { + "label": "lastRebalanceTimestampSec", + "offset": 0, + "slot": "310", + "type": "t_uint256", + "contract": "RolloverVault", + "src": "contracts/RolloverVault.sol:175" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)45_storage": { + "label": "uint256[45]", + "numberOfBytes": "1440" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(IERC20Upgradeable)1157": { + "label": "contract IERC20Upgradeable", + "numberOfBytes": "20" + }, + "t_contract(IFeePolicy)11799": { + "label": "contract IFeePolicy", + "numberOfBytes": "20" + }, + "t_contract(IPerpetualTranche)12045": { + "label": "contract IPerpetualTranche", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)4620_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)4319_storage", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Set)4319_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } } } } diff --git a/spot-contracts/.openzeppelin/sepolia.json b/spot-contracts/.openzeppelin/sepolia.json index f2127177..449ddf59 100644 --- a/spot-contracts/.openzeppelin/sepolia.json +++ b/spot-contracts/.openzeppelin/sepolia.json @@ -44,6 +44,21 @@ "address": "0xd90FcB328D90B778D1f6719d781045bbbac8F251", "txHash": "0x8b29769272d41c1032345366209cdcddb8abda7b8c66bfba001162c14671855e", "kind": "transparent" + }, + { + "address": "0x7f75A61c4475d32a50829710AA8d8aCDEbD2c0d4", + "txHash": "0x366889a82d52a5e9496b0c2f7d8becee5ab4d4611c0ddbe11b99124f983be136", + "kind": "transparent" + }, + { + "address": "0xc6b4b85FB97695052CA2e6C6401C20a7Ba30605D", + "txHash": "0xb64e64b39d3296e9d6dc0d2098ddb6a97f8582dbfad0543d8ed364f6d8107abb", + "kind": "transparent" + }, + { + "address": "0x6D6cBba605F4AF825F4997F1db74AF54e4F01c04", + "txHash": "0x6d23bda7a369524a4918846231c2c6646c092f39c23c823bcde50ee9e1a3d66b", + "kind": "transparent" } ], "impls": { @@ -2715,6 +2730,219 @@ }, "namespaces": {} } + }, + "907dd399d33e68e0a7c77c54e1886a30e59ec356c35a0f9c27e96d39644c64d6": { + "address": "0x058C0F40427A5bBb7eF7169FfF0A12d265317B15", + "txHash": "0x8909e28358b1ff3b70564f6e6e8d6708e21b718cb04056638b9ef9f3ec5dda78", + "layout": { + "solcVersion": "0.8.20", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" + }, + { + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "targetSystemRatio", + "offset": 0, + "slot": "101", + "type": "t_uint256", + "contract": "FeePolicy", + "src": "contracts/FeePolicy.sol:69" + }, + { + "label": "equilibriumDR", + "offset": 0, + "slot": "102", + "type": "t_struct(Range)11656_storage", + "contract": "FeePolicy", + "src": "contracts/FeePolicy.sol:74" + }, + { + "label": "feeFnDRDown", + "offset": 0, + "slot": "104", + "type": "t_struct(Line)11666_storage", + "contract": "FeePolicy", + "src": "contracts/FeePolicy.sol:80" + }, + { + "label": "feeFnDRUp", + "offset": 0, + "slot": "108", + "type": "t_struct(Line)11666_storage", + "contract": "FeePolicy", + "src": "contracts/FeePolicy.sol:83" + }, + { + "label": "perpDebasementLag", + "offset": 0, + "slot": "112", + "type": "t_uint256", + "contract": "FeePolicy", + "src": "contracts/FeePolicy.sol:89" + }, + { + "label": "perpEnrichmentLag", + "offset": 0, + "slot": "113", + "type": "t_uint256", + "contract": "FeePolicy", + "src": "contracts/FeePolicy.sol:92" + }, + { + "label": "perpDebasementPercLimits", + "offset": 0, + "slot": "114", + "type": "t_struct(Range)11656_storage", + "contract": "FeePolicy", + "src": "contracts/FeePolicy.sol:95" + }, + { + "label": "perpEnrichmentPercLimits", + "offset": 0, + "slot": "116", + "type": "t_struct(Range)11656_storage", + "contract": "FeePolicy", + "src": "contracts/FeePolicy.sol:98" + }, + { + "label": "rebalanceFreqSec", + "offset": 0, + "slot": "118", + "type": "t_uint256", + "contract": "FeePolicy", + "src": "contracts/FeePolicy.sol:101" + }, + { + "label": "protocolSharePerc", + "offset": 0, + "slot": "119", + "type": "t_uint256", + "contract": "FeePolicy", + "src": "contracts/FeePolicy.sol:104" + }, + { + "label": "protocolFeeCollector", + "offset": 0, + "slot": "120", + "type": "t_address", + "contract": "FeePolicy", + "src": "contracts/FeePolicy.sol:107" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_struct(Line)11666_storage": { + "label": "struct Line", + "members": [ + { + "label": "x1", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "y1", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "x2", + "type": "t_uint256", + "offset": 0, + "slot": "2" + }, + { + "label": "y2", + "type": "t_uint256", + "offset": 0, + "slot": "3" + } + ], + "numberOfBytes": "128" + }, + "t_struct(Range)11656_storage": { + "label": "struct Range", + "members": [ + { + "label": "lower", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "upper", + "type": "t_uint256", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } } } } diff --git a/spot-contracts/README.md b/spot-contracts/README.md index 3ca2370a..8522e308 100644 --- a/spot-contracts/README.md +++ b/spot-contracts/README.md @@ -8,7 +8,7 @@ The official mainnet addresses are: - Bond issuer: [0x5613Fc36A431c9c2746763B80C1DD89e03593871](https://etherscan.io/address/0x5613Fc36A431c9c2746763B80C1DD89e03593871) - Router: [0xCe2878d1f2901EFaF48cd456E586B470C145d1BC](https://etherscan.io/address/0xCe2878d1f2901EFaF48cd456E586B470C145d1BC) - RolloverVault: [0x82A91a0D599A45d8E9Af781D67f695d7C72869Bd](https://etherscan.io//address/0x82A91a0D599A45d8E9Af781D67f695d7C72869Bd) -- FeePolicy: [0xE22977381506bF094CB3ed50CB8834E358F7ef6c](https://etherscan.io//address/0xE22977381506bF094CB3ed50CB8834E358F7ef6c) +- FeePolicy: [0x8689Fa9991834Bcf0387b31b7986ac311bAb6ab5](https://etherscan.io//address/0x8689Fa9991834Bcf0387b31b7986ac311bAb6ab5) ## Install diff --git a/spot-contracts/deployments/mainnet.json b/spot-contracts/deployments/mainnet.json index 03ee64ae..20a775bd 100644 --- a/spot-contracts/deployments/mainnet.json +++ b/spot-contracts/deployments/mainnet.json @@ -8,7 +8,7 @@ "rolloverVault": "0x82A91a0D599A45d8E9Af781D67f695d7C72869Bd", "proxyAdmin": "0x2978B4103985A6668CE345555b0febdE64Fb092F", "router": "0xCe2878d1f2901EFaF48cd456E586B470C145d1BC", - "feePolicy": "0xE22977381506bF094CB3ed50CB8834E358F7ef6c", + "feePolicy": "0x8689Fa9991834Bcf0387b31b7986ac311bAb6ab5", "previousIssuers": [ [0, "0x9443b779d4AedF97d2B93D7CDa5fA0BB6312DfF2"], [1, "0xD64FA63dc5E8fcB743457E47E4d522E11Ff1AD66"], diff --git a/spot-contracts/hardhat.config.ts b/spot-contracts/hardhat.config.ts index 45427cc3..3ccfd425 100644 --- a/spot-contracts/hardhat.config.ts +++ b/spot-contracts/hardhat.config.ts @@ -38,8 +38,9 @@ export default { }, }, mainnet: { - // url: `https://mainnet.infura.io/v3/${process.env.INFURA_SECRET}`, - url: `https://eth-mainnet.g.alchemy.com/v2/${process.env.ALCHEMY_SECRET}`, + url: `https://mainnet.infura.io/v3/${process.env.INFURA_SECRET}`, + // url: `https://eth-mainnet.g.alchemy.com/v2/${process.env.ALCHEMY_SECRET}`, + // url: `https://virtual.mainnet.rpc.tenderly.co/f468fb75-ada0-4833-9f64-f71d51b71190`, accounts: { mnemonic: process.env.PROD_MNEMONIC || Wallet.createRandom().mnemonic.phrase, }, diff --git a/spot-contracts/package.json b/spot-contracts/package.json index 5e4483df..54d85765 100644 --- a/spot-contracts/package.json +++ b/spot-contracts/package.json @@ -51,7 +51,7 @@ "eslint-plugin-promise": "^6.0.0", "eslint-plugin-unused-imports": "^3.0.0", "ethereum-waffle": "latest", - "ethers": "^6.6.0", + "ethers": "^6.14.4", "ethers-v5": "npm:ethers@^5.7.0", "ganache-cli": "latest", "hardhat": "^2.23.0", diff --git a/spot-contracts/tasks/scripts/mainnet_v5.sh b/spot-contracts/tasks/scripts/mainnet_v5.sh new file mode 100644 index 00000000..ba00f041 --- /dev/null +++ b/spot-contracts/tasks/scripts/mainnet_v5.sh @@ -0,0 +1,24 @@ +# deploy new contracts +yarn hardhat --network mainnet deploy:FeePolicy + +# spot v2 check storage layout +yarn hardhat --network mainnet validate_upgrade PerpetualTranche 0xC1f33e0cf7e40a67375007104B929E49a581bafE +yarn hardhat --network mainnet validate_upgrade:RolloverVault 0x82A91a0D599A45d8E9Af781D67f695d7C72869Bd \ + --tranche-manager-address 0xe0028c40C8A09449852ea4D2e9aa4d25895F285f + +# deploy new implementations +yarn hardhat --network mainnet prepare_upgrade PerpetualTranche 0xC1f33e0cf7e40a67375007104B929E49a581bafE +yarn hardhat --network mainnet prepare_upgrade:RolloverVault 0x82A91a0D599A45d8E9Af781D67f695d7C72869Bd +# linked library 0xe0028c40C8A09449852ea4D2e9aa4d25895F285f + +# execute via multisig +# proxyAdmin: 0x2978B4103985A6668CE345555b0febdE64Fb092F +# proxyAdmin.upgrade(0xC1f33e0cf7e40a67375007104B929E49a581bafE, 0x62cbE9F24413485f04FA62F9548C7855ec4a5425) +# proxyAdmin.upgrade(0x82A91a0D599A45d8E9Af781D67f695d7C72869Bd, 0xA85Be82083E032EdF32a19028DF558484b399196) + +yarn hardhat --network mainnet ops:perp:info 0xC1f33e0cf7e40a67375007104B929E49a581bafE +yarn hardhat --network mainnet ops:vault:info 0x82A91a0D599A45d8E9Af781D67f695d7C72869Bd + +# emergency rollback +# proxyAdmin.upgrade(0xC1f33e0cf7e40a67375007104B929E49a581bafE, 0x5dc5488b35c34a43fe19ba9de38b63806fab4b23) +# proxyAdmin.upgrade(0x82A91a0D599A45d8E9Af781D67f695d7C72869Bd, 0xa85be82083e032edf32a19028df558484b399196) diff --git a/spot-contracts/tasks/upgrade/index.ts b/spot-contracts/tasks/upgrade/index.ts index 34b717bd..8389754b 100644 --- a/spot-contracts/tasks/upgrade/index.ts +++ b/spot-contracts/tasks/upgrade/index.ts @@ -22,6 +22,31 @@ task("validate_upgrade") console.log("Success"); }); +task("validate_upgrade:RolloverVault") + .addPositionalParam("address", "the address of the deployed proxy contract", undefined, types.string, false) + .addParam("trancheManagerAddress", "the address of the linked tranche manager", "0x", types.string) + .setAction(async function (args: TaskArguments, hre) { + const { address, trancheManagerAddress } = args; + const Factory = await hre.ethers.getContractFactory("RolloverVault", { + libraries: { + TrancheManager: trancheManagerAddress, + }, + }); + + console.log("Trying strict validation"); + try { + await hre.upgrades.validateUpgrade(address, Factory); + } catch (e) { + console.log("Strict validation failed. ", e); + console.log("Retrying but allowing variable renames."); + await hre.upgrades.validateUpgrade(address, Factory, { + unsafeAllowRenames: true, + unsafeAllowLinkedLibraries: true, + }); + } + console.log("Success"); + }); + task("prepare_upgrade") .addPositionalParam("factory", "the name of the factory", undefined, types.string, false) .addPositionalParam("address", "the address of the deployed proxy contract", undefined, types.string, false) @@ -122,3 +147,47 @@ task("upgrade:testnet:RolloverVault") address: newImpl, }); }); + +task("prepare_upgrade:RolloverVault") + .addPositionalParam("address", "the address of the deployed proxy contract", undefined, types.string, false) + .addParam("trancheManagerAddress", "the address of the linked tranche manager", "0x", types.string) + .addParam("fromIdx", "the index of sender", 0, types.int) + .setAction(async function (args: TaskArguments, hre) { + const signer = (await hre.ethers.getSigners())[args.fromIdx]; + const signerAddress = await signer.getAddress(); + console.log("Signer", signerAddress); + + let trancheManagerAddress = args.trancheManagerAddress; + if (trancheManagerAddress === "0x") { + const TrancheManager = await hre.ethers.getContractFactory("TrancheManager"); + const trancheManager = await TrancheManager.deploy(); + trancheManagerAddress = trancheManager.target; + console.log("Deploying linked library TrancheManager", trancheManagerAddress); + } + const Factory = await hre.ethers.getContractFactory("RolloverVault", { + libraries: { + TrancheManager: trancheManagerAddress, + }, + }); + + const { address } = args; + console.log("Proxy", address); + console.log("Current implementation", await getImplementationAddress(hre.ethers.provider, address)); + + await hre.upgrades.prepareUpgrade(address, Factory, { + unsafeAllowRenames: true, + unsafeAllowLinkedLibraries: true, + }); + await sleep(30); + const newImpl = await getImplementationAddress(hre.ethers.provider, address); + console.log("Updated implementation", newImpl); + + await sleep(30); + await hre.run("verify:contract", { + address: trancheManagerAddress, + }); + await sleep(30); + await hre.run("verify:contract", { + address: newImpl, + }); + }); From e38034f939cb8905a579218c2785311b35e15c92 Mon Sep 17 00:00:00 2001 From: aalavandhann <6264334+aalavandhan@users.noreply.github.com> Date: Mon, 30 Jun 2025 16:10:11 -0400 Subject: [PATCH 2/4] bill broker update --- spot-vaults/.openzeppelin/mainnet.json | 345 ++++++++++++++++++++++++- spot-vaults/hardhat.config.ts | 3 +- 2 files changed, 334 insertions(+), 14 deletions(-) diff --git a/spot-vaults/.openzeppelin/mainnet.json b/spot-vaults/.openzeppelin/mainnet.json index befb1c87..6c707349 100644 --- a/spot-vaults/.openzeppelin/mainnet.json +++ b/spot-vaults/.openzeppelin/mainnet.json @@ -466,7 +466,7 @@ "label": "perp", "offset": 0, "slot": "301", - "type": "t_contract(IPerpetualTranche)389", + "type": "t_contract(IPerpetualTranche)2802", "contract": "BillBroker", "src": "contracts/BillBroker.sol:89" }, @@ -474,7 +474,7 @@ "label": "usd", "offset": 0, "slot": "302", - "type": "t_contract(IERC20Upgradeable)1872", + "type": "t_contract(IERC20Upgradeable)4840", "contract": "BillBroker", "src": "contracts/BillBroker.sol:92" }, @@ -506,7 +506,7 @@ "label": "pricingStrategy", "offset": 0, "slot": "306", - "type": "t_contract(ISpotPricingStrategy)8533", + "type": "t_contract(ISpotPricingStrategy)12114", "contract": "BillBroker", "src": "contracts/BillBroker.sol:106" }, @@ -514,7 +514,7 @@ "label": "fees", "offset": 0, "slot": "307", - "type": "t_struct(BillBrokerFees)8494_storage", + "type": "t_struct(BillBrokerFees)12075_storage", "contract": "BillBroker", "src": "contracts/BillBroker.sol:109" }, @@ -522,7 +522,7 @@ "label": "arHardBound", "offset": 0, "slot": "314", - "type": "t_struct(Range)8475_storage", + "type": "t_struct(Range)12056_storage", "contract": "BillBroker", "src": "contracts/BillBroker.sol:112" }, @@ -530,7 +530,7 @@ "label": "arSoftBound", "offset": 0, "slot": "316", - "type": "t_struct(Range)8475_storage", + "type": "t_struct(Range)12056_storage", "contract": "BillBroker", "src": "contracts/BillBroker.sol:116" } @@ -556,15 +556,15 @@ "label": "bool", "numberOfBytes": "1" }, - "t_contract(IERC20Upgradeable)1872": { + "t_contract(IERC20Upgradeable)4840": { "label": "contract IERC20Upgradeable", "numberOfBytes": "20" }, - "t_contract(IPerpetualTranche)389": { + "t_contract(IPerpetualTranche)2802": { "label": "contract IPerpetualTranche", "numberOfBytes": "20" }, - "t_contract(ISpotPricingStrategy)8533": { + "t_contract(ISpotPricingStrategy)12114": { "label": "contract ISpotPricingStrategy", "numberOfBytes": "20" }, @@ -580,7 +580,7 @@ "label": "string", "numberOfBytes": "32" }, - "t_struct(BillBrokerFees)8494_storage": { + "t_struct(BillBrokerFees)12075_storage": { "label": "struct BillBrokerFees", "members": [ { @@ -597,13 +597,332 @@ }, { "label": "perpToUSDSwapFeePercs", - "type": "t_struct(Range)8475_storage", + "type": "t_struct(Range)12056_storage", "offset": 0, "slot": "2" }, { "label": "usdToPerpSwapFeePercs", - "type": "t_struct(Range)8475_storage", + "type": "t_struct(Range)12056_storage", + "offset": 0, + "slot": "4" + }, + { + "label": "protocolSwapSharePerc", + "type": "t_uint256", + "offset": 0, + "slot": "6" + } + ], + "numberOfBytes": "224" + }, + "t_struct(Range)12056_storage": { + "label": "struct Range", + "members": [ + { + "label": "lower", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "upper", + "type": "t_uint256", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + }, + "namespaces": {} + } + }, + "7f703e4a10347cca6e80b8d427a010abcbb83e0b8f3039d52b3a4a4aae5948ff": { + "address": "0x728d8BD67B4271a6d7f8424d0E41B41dcB762D81", + "txHash": "0x7d99175530528ec44ec18df867033691921fa104a0edc2a0ee3ba7f0f0fd71e8", + "layout": { + "solcVersion": "0.8.24", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:40" + }, + { + "label": "_balances", + "offset": 0, + "slot": "51", + "type": "t_mapping(t_address,t_uint256)", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:40" + }, + { + "label": "_allowances", + "offset": 0, + "slot": "52", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:42" + }, + { + "label": "_totalSupply", + "offset": 0, + "slot": "53", + "type": "t_uint256", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:44" + }, + { + "label": "_name", + "offset": 0, + "slot": "54", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:46" + }, + { + "label": "_symbol", + "offset": 0, + "slot": "55", + "type": "t_string_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:47" + }, + { + "label": "__gap", + "offset": 0, + "slot": "56", + "type": "t_array(t_uint256)45_storage", + "contract": "ERC20Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol:376" + }, + { + "label": "__gap", + "offset": 0, + "slot": "101", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC20BurnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol:51" + }, + { + "label": "_owner", + "offset": 0, + "slot": "151", + "type": "t_address", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "OwnableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" + }, + { + "label": "_paused", + "offset": 0, + "slot": "201", + "type": "t_bool", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:29" + }, + { + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)49_storage", + "contract": "PausableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol:116" + }, + { + "label": "_status", + "offset": 0, + "slot": "251", + "type": "t_uint256", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:38" + }, + { + "label": "__gap", + "offset": 0, + "slot": "252", + "type": "t_array(t_uint256)49_storage", + "contract": "ReentrancyGuardUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol:88" + }, + { + "label": "perp", + "offset": 0, + "slot": "301", + "type": "t_contract(IPerpetualTranche)2824", + "contract": "BillBroker", + "src": "contracts/BillBroker.sol:94" + }, + { + "label": "usd", + "offset": 0, + "slot": "302", + "type": "t_contract(IERC20Upgradeable)4979", + "contract": "BillBroker", + "src": "contracts/BillBroker.sol:97" + }, + { + "label": "usdUnitAmt", + "offset": 0, + "slot": "303", + "type": "t_uint256", + "contract": "BillBroker", + "src": "contracts/BillBroker.sol:100" + }, + { + "label": "perpUnitAmt", + "offset": 0, + "slot": "304", + "type": "t_uint256", + "contract": "BillBroker", + "src": "contracts/BillBroker.sol:103" + }, + { + "label": "keeper", + "offset": 0, + "slot": "305", + "type": "t_address", + "contract": "BillBroker", + "src": "contracts/BillBroker.sol:108" + }, + { + "label": "oracle", + "offset": 0, + "slot": "306", + "type": "t_contract(IPerpPricer)14225", + "contract": "BillBroker", + "src": "contracts/BillBroker.sol:111" + }, + { + "label": "fees", + "offset": 0, + "slot": "307", + "type": "t_struct(BillBrokerFees)14748_storage", + "contract": "BillBroker", + "src": "contracts/BillBroker.sol:114" + }, + { + "label": "arHardBound", + "offset": 0, + "slot": "314", + "type": "t_struct(Range)14780_storage", + "contract": "BillBroker", + "src": "contracts/BillBroker.sol:117" + }, + { + "label": "arSoftBound", + "offset": 0, + "slot": "316", + "type": "t_struct(Range)14780_storage", + "contract": "BillBroker", + "src": "contracts/BillBroker.sol:121" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)45_storage": { + "label": "uint256[45]", + "numberOfBytes": "1440" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_contract(IERC20Upgradeable)4979": { + "label": "contract IERC20Upgradeable", + "numberOfBytes": "20" + }, + "t_contract(IPerpPricer)14225": { + "label": "contract IPerpPricer", + "numberOfBytes": "20" + }, + "t_contract(IPerpetualTranche)2824": { + "label": "contract IPerpetualTranche", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_string_storage": { + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(BillBrokerFees)14748_storage": { + "label": "struct BillBrokerFees", + "members": [ + { + "label": "mintFeePerc", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "burnFeePerc", + "type": "t_uint256", + "offset": 0, + "slot": "1" + }, + { + "label": "perpToUSDSwapFeeFactors", + "type": "t_struct(Range)14780_storage", + "offset": 0, + "slot": "2" + }, + { + "label": "usdToPerpSwapFeeFactors", + "type": "t_struct(Range)14780_storage", "offset": 0, "slot": "4" }, @@ -616,7 +935,7 @@ ], "numberOfBytes": "224" }, - "t_struct(Range)8475_storage": { + "t_struct(Range)14780_storage": { "label": "struct Range", "members": [ { diff --git a/spot-vaults/hardhat.config.ts b/spot-vaults/hardhat.config.ts index d697b3bd..7b922461 100644 --- a/spot-vaults/hardhat.config.ts +++ b/spot-vaults/hardhat.config.ts @@ -39,7 +39,8 @@ export default { gasMultiplier: 1.01, }, mainnet: { - url: `https://eth-mainnet.g.alchemy.com/v2/${process.env.ALCHEMY_SECRET}`, + // url: `https://eth-mainnet.g.alchemy.com/v2/${process.env.ALCHEMY_SECRET}`, + url: `https://mainnet.infura.io/v3/${process.env.INFURA_SECRET}`, accounts: { mnemonic: process.env.PROD_MNEMONIC || Wallet.createRandom().mnemonic.phrase, }, From 8754ee8de9a492796b4f9b828cb6018af04736ff Mon Sep 17 00:00:00 2001 From: aalavandhann <6264334+aalavandhan@users.noreply.github.com> Date: Mon, 30 Jun 2025 16:47:08 -0400 Subject: [PATCH 3/4] ran yarn install --- yarn.lock | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index 45fbef16..90f06744 100644 --- a/yarn.lock +++ b/yarn.lock @@ -56,7 +56,7 @@ __metadata: eslint-plugin-promise: ^6.0.0 eslint-plugin-unused-imports: ^3.0.0 ethereum-waffle: latest - ethers: ^6.6.0 + ethers: ^6.14.4 ethers-v5: "npm:ethers@^5.7.0" ganache-cli: latest hardhat: ^2.23.0 @@ -6482,6 +6482,21 @@ __metadata: languageName: node linkType: hard +"ethers@npm:^6.14.4": + version: 6.14.4 + resolution: "ethers@npm:6.14.4" + dependencies: + "@adraffy/ens-normalize": 1.10.1 + "@noble/curves": 1.2.0 + "@noble/hashes": 1.3.2 + "@types/node": 22.7.5 + aes-js: 4.0.0-beta.5 + tslib: 2.7.0 + ws: 8.17.1 + checksum: 9f7e651ef3ee8c158c5bfd067cb048b3b4367d2d68b575b8777e1cf1eb337a7487cd4e34925cfe421b9a28de12bbd062d08575c1f7b6b0601e32b98edc9c708e + languageName: node + linkType: hard + "ethers@npm:^6.6.0": version: 6.14.0 resolution: "ethers@npm:6.14.0" From 8d8a4823ea778745e045f14fddd810d8c3fc3f1b Mon Sep 17 00:00:00 2001 From: aalavandhann <6264334+aalavandhan@users.noreply.github.com> Date: Mon, 30 Jun 2025 16:48:23 -0400 Subject: [PATCH 4/4] notes --- spot-contracts/tasks/scripts/mainnet_v5.sh | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/spot-contracts/tasks/scripts/mainnet_v5.sh b/spot-contracts/tasks/scripts/mainnet_v5.sh index ba00f041..0b3d2cf9 100644 --- a/spot-contracts/tasks/scripts/mainnet_v5.sh +++ b/spot-contracts/tasks/scripts/mainnet_v5.sh @@ -1,20 +1,23 @@ # deploy new contracts yarn hardhat --network mainnet deploy:FeePolicy - -# spot v2 check storage layout -yarn hardhat --network mainnet validate_upgrade PerpetualTranche 0xC1f33e0cf7e40a67375007104B929E49a581bafE -yarn hardhat --network mainnet validate_upgrade:RolloverVault 0x82A91a0D599A45d8E9Af781D67f695d7C72869Bd \ - --tranche-manager-address 0xe0028c40C8A09449852ea4D2e9aa4d25895F285f +# fee policy 0x8689Fa9991834Bcf0387b31b7986ac311bAb6ab5 +yarn hardhat --network mainnet transferOwnership "0x8689Fa9991834Bcf0387b31b7986ac311bAb6ab5" \ + --new-owner-address "0x57981B1EaFe4b18EC97f8B10859B40207b364662" # deploy new implementations yarn hardhat --network mainnet prepare_upgrade PerpetualTranche 0xC1f33e0cf7e40a67375007104B929E49a581bafE yarn hardhat --network mainnet prepare_upgrade:RolloverVault 0x82A91a0D599A45d8E9Af781D67f695d7C72869Bd # linked library 0xe0028c40C8A09449852ea4D2e9aa4d25895F285f +# spot v2 check storage layout +yarn hardhat --network mainnet validate_upgrade PerpetualTranche 0xC1f33e0cf7e40a67375007104B929E49a581bafE +yarn hardhat --network mainnet validate_upgrade:RolloverVault 0x82A91a0D599A45d8E9Af781D67f695d7C72869Bd \ + --tranche-manager-address 0xe0028c40C8A09449852ea4D2e9aa4d25895F285f + # execute via multisig # proxyAdmin: 0x2978B4103985A6668CE345555b0febdE64Fb092F # proxyAdmin.upgrade(0xC1f33e0cf7e40a67375007104B929E49a581bafE, 0x62cbE9F24413485f04FA62F9548C7855ec4a5425) -# proxyAdmin.upgrade(0x82A91a0D599A45d8E9Af781D67f695d7C72869Bd, 0xA85Be82083E032EdF32a19028DF558484b399196) +# proxyAdmin.upgrade(0x82A91a0D599A45d8E9Af781D67f695d7C72869Bd, 0x09e8adfa8D829DaC1c305544A86b53Ed0dDD536a) yarn hardhat --network mainnet ops:perp:info 0xC1f33e0cf7e40a67375007104B929E49a581bafE yarn hardhat --network mainnet ops:vault:info 0x82A91a0D599A45d8E9Af781D67f695d7C72869Bd @@ -22,3 +25,10 @@ yarn hardhat --network mainnet ops:vault:info 0x82A91a0D599A45d8E9Af781D67f695d7 # emergency rollback # proxyAdmin.upgrade(0xC1f33e0cf7e40a67375007104B929E49a581bafE, 0x5dc5488b35c34a43fe19ba9de38b63806fab4b23) # proxyAdmin.upgrade(0x82A91a0D599A45d8E9Af781D67f695d7C72869Bd, 0xa85be82083e032edf32a19028df558484b399196) + +# Deployment runbook +# 1) Setup new fee policy, with chosen parameters (sanity check return values) +# 2) Pause everything, SPOT, stAMPL and BillBroker +# 3) Execute upgrade (spot and stampl) +# 4) Set fee policy reference and double check all other parameters on SPOT and STAMPL +# 5) Ops, execute first rebalance \ No newline at end of file