From 06dee76a5d18a5350723e0b3e32109c616982301 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Sun, 10 Apr 2022 22:36:17 +0100 Subject: [PATCH 001/121] feat: migrate all non-major TribeRoles --- RoleMigration.md | 24 ++++++++++ proposals/dao/fip_82.ts | 19 +++++++- proposals/description/fip_82.ts | 81 +++++++++++++++++++++++++++++++++ 3 files changed, 122 insertions(+), 2 deletions(-) create mode 100644 RoleMigration.md diff --git a/RoleMigration.md b/RoleMigration.md new file mode 100644 index 000000000..f84b7a997 --- /dev/null +++ b/RoleMigration.md @@ -0,0 +1,24 @@ +## Role migration +Aim: Allow the TribalCouncil to operate autonomously, by being able to grant any non-major role. + +To do this, it needs to be the admin of all roles it seeks to grant. + +## TribeRoles to grant +The following non-major roles have been created and the current admin is the GOVERNOR. Their admin is being transferred to ROLE_ADMIN: +- ORACLE_ADMIN: 0xc307c44629779eb8fc0b85f224c3d22f5876a6c84de0ee42d481eb7814f0d3a8 +- TRIBAL_CHIEF_ADMIN: 0x23970cab3799b6876df4319661e6c03cc45bd59628799d92e988dd8cbdc90e31 +- PCV_GUARDIAN_ADMIN: 0xdf6ce05acd28d71e96472375ef55c4a692f167af3ccda9500570f7373c1ba22c +- METAGOVERNANCE_VOTE_ADMIN: 0xb02f76effb323167cad756bb4f3edbfb9d9291f9bfcdc72c9ceea005562f32eb +- METAGOVERNANCE_TOKEN_STAKING: 0xa100760f521bbb2848bef0b72ea29301f6a6b0605d004243f0eea2b1c359f7c7 +- METAGOVERNANCE_GAUGE_ADMIN: 0x3bee38c33241595abfefa470fd75bfa1cc9cb01eff02cf6732fd2baea4ea4241 +- LBP_SWAP_ROLE: 0x471cfe1a44bf1b786db7d7104d51e6728ed7b90a35394ad7cc424adf8ed16816 +- VOTIUM_ROLE: 0x2d46c62aa6fbc9b550f22e00476aebb90f4ea69cd492a68db4d444217763330d + + +## TODOs: +1. Make all existing non-major roles have the ROLE_ADMIN as their admin +2. Change the relevant contract admins from existing to ROLE_ADMIN +3. Verify all this. Aim to be in same DAO vote + +Roles to transfer +- All TribeRoles which have the GOVERNOR as the admin \ No newline at end of file diff --git a/proposals/dao/fip_82.ts b/proposals/dao/fip_82.ts index adf1f296a..7dfbeecbe 100644 --- a/proposals/dao/fip_82.ts +++ b/proposals/dao/fip_82.ts @@ -178,7 +178,7 @@ const validate: ValidateUpgradeFunc = async (addresses, oldContracts, contracts, const isProposalRegistered = await governanceMetadataRegistry.isProposalRegistered(0, 0, 'test'); expect(isProposalRegistered).to.be.false; - await validateTribeRoles( + await validateContractRoles( contracts.core, addresses.feiDAOTimelock, addresses.tribalCouncilTimelock, @@ -187,10 +187,12 @@ const validate: ValidateUpgradeFunc = async (addresses, oldContracts, contracts, addresses.nopeDAO, addresses.podFactory ); + + await validateTransferredRoleAdmins(contracts.core); }; // Validate that the relevant timelocks and Safes have the relevant TribeRoles -const validateTribeRoles = async ( +const validateContractRoles = async ( core: Contract, feiDAOTimelockAddress: string, tribalCouncilTimelockAddress: string, @@ -230,4 +232,17 @@ const validateTribeRoles = async ( expect(podFactoryAdminRole).to.be.true; }; +const validateTransferredRoleAdmins = async (core: Contract) => { + const ROLE_ADMIN = ethers.utils.id('ROLE_ADMIN'); + + await expect(core.getRoleAdmin(ethers.utils.id('ORACLE_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); + await expect(core.getRoleAdmin(ethers.utils.id('TRIBAL_CHIEF_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); + await expect(core.getRoleAdmin(ethers.utils.id('PCV_GUARDIAN_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); + await expect(core.getRoleAdmin(ethers.utils.id('METAGOVERNANCE_VOTE_ADMIN'))).to.be.equal(ROLE_ADMIN); + await expect(core.getRoleAdmin(ethers.utils.id('METAGOVERNANCE_TOKEN_STAKING'))).to.be.equal(ROLE_ADMIN); + await expect(core.getRoleAdmin(ethers.utils.id('METAGOVERNANCE_GAUGE_ADMIN'))).to.be.equal(ROLE_ADMIN); + await expect(core.getRoleAdmin(ethers.utils.id('SWAP_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); + await expect(core.getRoleAdmin(ethers.utils.id('VOTIUM_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); +}; + export { deploy, setup, teardown, validate }; diff --git a/proposals/description/fip_82.ts b/proposals/description/fip_82.ts index 39387a621..bc9b160f5 100644 --- a/proposals/description/fip_82.ts +++ b/proposals/description/fip_82.ts @@ -172,6 +172,87 @@ const fip_82: ProposalDescription = { method: 'lockMembershipTransfers(uint256 _podId)', arguments: ['24'], description: 'Lock TribalCouncil pod membership transfers' + }, + ///////// Transfer all non-major role admins to the ROLE_ADMIN, to allow TribalCouncil to manage //////// + { + target: 'core', + values: '0', + method: 'createRole(bytes32,bytes32)', + arguments: [ + '0xc307c44629779eb8fc0b85f224c3d22f5876a6c84de0ee42d481eb7814f0d3a8', // ORACLE_ADMIN + '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN + ], + description: 'Transfer ORACLE_ADMIN role admin from GOVERNOR to ROLE_ADMIN' + }, + { + target: 'core', + values: '0', + method: 'createRole(bytes32,bytes32)', + arguments: [ + '0x23970cab3799b6876df4319661e6c03cc45bd59628799d92e988dd8cbdc90e31', // TRIBAL_CHIEF_ADMIN + '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN + ], + description: 'Transfer TRIBAL_CHIEF_ADMIN role admin from GOVERNOR to ROLE_ADMIN' + }, + { + target: 'core', + values: '0', + method: 'createRole(bytes32,bytes32)', + arguments: [ + '0xdf6ce05acd28d71e96472375ef55c4a692f167af3ccda9500570f7373c1ba22c', // PCV_GUARDIAN_ADMIN + '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN + ], + description: 'Transfer PCV_GUARDIAN_ADMIN role admin from GOVERNOR to ROLE_ADMIN' + }, + { + target: 'core', + values: '0', + method: 'createRole(bytes32,bytes32)', + arguments: [ + '0xb02f76effb323167cad756bb4f3edbfb9d9291f9bfcdc72c9ceea005562f32eb', // METAGOVERNANCE_VOTE_ADMIN + '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN + ], + description: 'Transfer METAGOVERNANCE_VOTE_ADMIN role admin from GOVERNOR to ROLE_ADMIN' + }, + { + target: 'core', + values: '0', + method: 'createRole(bytes32,bytes32)', + arguments: [ + '0xa100760f521bbb2848bef0b72ea29301f6a6b0605d004243f0eea2b1c359f7c7', // METAGOVERNANCE_TOKEN_STAKING + '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN + ], + description: 'Transfer METAGOVERNANCE_TOKEN_STAKING role admin from GOVERNOR to ROLE_ADMIN' + }, + { + target: 'core', + values: '0', + method: 'createRole(bytes32,bytes32)', + arguments: [ + '0x3bee38c33241595abfefa470fd75bfa1cc9cb01eff02cf6732fd2baea4ea4241', // METAGOVERNANCE_GAUGE_ADMIN + '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN + ], + description: 'Transfer METAGOVERNANCE_GAUGE_ADMIN role admin from GOVERNOR to ROLE_ADMIN' + }, + { + target: 'core', + values: '0', + method: 'createRole(bytes32,bytes32)', + arguments: [ + '0x471cfe1a44bf1b786db7d7104d51e6728ed7b90a35394ad7cc424adf8ed16816', // LBP_SWAP_ROLE + '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN + ], + description: 'Transfer LBP_SWAP_ROLE role admin from GOVERNOR to ROLE_ADMIN' + }, + { + target: 'core', + values: '0', + method: 'createRole(bytes32,bytes32)', + arguments: [ + '0x2d46c62aa6fbc9b550f22e00476aebb90f4ea69cd492a68db4d444217763330d', // VOTIUM_ROLE + '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN + ], + description: 'Transfer VOTIUM_ROLE role admin from GOVERNOR to ROLE_ADMIN' } ], description: ` From 9026265b237dc7a98c2ad8dc6a41d0ced04aa846 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Sun, 10 Apr 2022 23:55:10 +0100 Subject: [PATCH 002/121] feat: create new TribeRoles --- contracts/core/TribeRoles.sol | 8 +++++++ proposals/dao/fip_82.ts | 19 ++++++++++++++- proposals/description/fip_82.ts | 42 +++++++++++++++++++++++++++++++++ 3 files changed, 68 insertions(+), 1 deletion(-) diff --git a/contracts/core/TribeRoles.sol b/contracts/core/TribeRoles.sol index a4351c5bf..f9cc9dfb4 100644 --- a/contracts/core/TribeRoles.sol +++ b/contracts/core/TribeRoles.sol @@ -52,12 +52,20 @@ library TribeRoles { /// @notice admin of PCVGuardian bytes32 internal constant PCV_GUARDIAN_ADMIN = keccak256("PCV_GUARDIAN_ADMIN_ROLE"); + /// @notice admin of the peg stability modules + bytes32 internal constant PSM_ADMIN_ROLE = + keccak256("PSM_ADMIN_ROLE"); /// @notice admin of all Minor Roles bytes32 internal constant MINOR_ROLE_ADMIN = keccak256("MINOR_ROLE_ADMIN"); /// @notice admin of the Fuse protocol bytes32 internal constant FUSE_ADMIN = keccak256("FUSE_ADMIN"); + /// @notice admin of minting Fei for specific scoped contracts + bytes32 internal constant FEI_MINT_ADMIN = keccak256("FUSE_MINT_ADMIN"); + + /// @notice admin of minting Fei for specific scoped contracts + bytes32 internal constant PCV_ADMIN = keccak256("PCV_ADMIN"); /// @notice capable of vetoing DAO votes or optimistic timelocks bytes32 internal constant VETO_ADMIN = keccak256("VETO_ADMIN"); diff --git a/proposals/dao/fip_82.ts b/proposals/dao/fip_82.ts index 7dfbeecbe..09b7bf7cb 100644 --- a/proposals/dao/fip_82.ts +++ b/proposals/dao/fip_82.ts @@ -187,8 +187,9 @@ const validate: ValidateUpgradeFunc = async (addresses, oldContracts, contracts, addresses.nopeDAO, addresses.podFactory ); - await validateTransferredRoleAdmins(contracts.core); + await validateNewCouncilRoles(contracts.core); + await validateContractAdmins(contracts.core); }; // Validate that the relevant timelocks and Safes have the relevant TribeRoles @@ -232,6 +233,7 @@ const validateContractRoles = async ( expect(podFactoryAdminRole).to.be.true; }; +/// Validate that all non-major TribeRoles have had their admins transferred to the ROLE_ADMIN const validateTransferredRoleAdmins = async (core: Contract) => { const ROLE_ADMIN = ethers.utils.id('ROLE_ADMIN'); @@ -245,4 +247,19 @@ const validateTransferredRoleAdmins = async (core: Contract) => { await expect(core.getRoleAdmin(ethers.utils.id('VOTIUM_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); }; +/// Validate that the expected new TribeRoles have been created +const validateNewCouncilRoles = async (core: Contract) => { + const ROLE_ADMIN = ethers.utils.id('ROLE_ADMIN'); + + await expect(core.getRoleAdmin(ethers.utils.id('FUSE_ADMIN'))).to.be.equal(ROLE_ADMIN); + await expect(core.getRoleAdmin(ethers.utils.id('FEI_MINT_ADMIN'))).to.be.equal(ROLE_ADMIN); + await expect(core.getRoleAdmin(ethers.utils.id('PCV_ADMIN'))).to.be.equal(ROLE_ADMIN); + await expect(core.getRoleAdmin(ethers.utils.id('PSD_ADMIN'))).to.be.equal(ROLE_ADMIN); +}; + +/// Validate that the relevant contract admins have been set to their expected values +const validateContractAdmins = async (core: Contract) => { + +} + export { deploy, setup, teardown, validate }; diff --git a/proposals/description/fip_82.ts b/proposals/description/fip_82.ts index bc9b160f5..3cb780b2c 100644 --- a/proposals/description/fip_82.ts +++ b/proposals/description/fip_82.ts @@ -253,6 +253,48 @@ const fip_82: ProposalDescription = { '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN ], description: 'Transfer VOTIUM_ROLE role admin from GOVERNOR to ROLE_ADMIN' + }, + //////// Create new roles for the Tribal Council to manage ///////// + { + target: 'core', + values: '0', + method: 'createRole(bytes32,bytes32)', + arguments: [ + '0x7f85477db6c0857f19179a2b3846a7ddbc64caeeb3a02ef34771b82f5ab926e4', // FUSE_ADMIN + '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN + ], + description: 'Create FUSE_ADMIN role, assigning ROLE_ADMIN as the role admin' + }, + { + target: 'core', + values: '0', + method: 'createRole(bytes32,bytes32)', + arguments: [ + '0x0ff6b7c6babd735fee69a0a83901c004544f96c586fe8cf330aa1f80693916e9', // FEI_MINT_ADMIN + '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN + ], + description: 'Create FEI_MINT_ADMIN role, assigning ROLE_ADMIN as the role admin' + }, + { + target: 'core', + values: '0', + method: 'createRole(bytes32,bytes32)', + arguments: [ + '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77', // PCV_ADMIN + '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN + ], + description: 'Create PCV_ADMIN role, assigning ROLE_ADMIN as the role admin' + }, + { + target: 'core', + values: '0', + method: 'createRole(bytes32,bytes32)', + arguments: [ + '0x1749ca1ca3564d20da6efea465c2a5ae869a9e4b006da7035e688beb14d704e0', // PSM_ADMIN_ROLE + '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN + ], + description: 'Create PSM_ADMIN_ROLE role, assigning ROLE_ADMIN as the role admin' + }, } ], description: ` From 739183b8efe3ecc481aa4008e59514fb077c419e Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Mon, 11 Apr 2022 00:01:25 +0100 Subject: [PATCH 003/121] feat: migrate contract admin roles --- proposals/dao/fip_82.ts | 21 ++++- proposals/description/fip_82.ts | 131 ++++++++++++++++++++++++++++++++ 2 files changed, 151 insertions(+), 1 deletion(-) diff --git a/proposals/dao/fip_82.ts b/proposals/dao/fip_82.ts index 09b7bf7cb..cd7c48081 100644 --- a/proposals/dao/fip_82.ts +++ b/proposals/dao/fip_82.ts @@ -3,6 +3,7 @@ import { expect } from 'chai'; import { DeployUpgradeFunc, NamedAddresses, + NamedContracts, SetupUpgradeFunc, TeardownUpgradeFunc, ValidateUpgradeFunc @@ -258,8 +259,26 @@ const validateNewCouncilRoles = async (core: Contract) => { }; /// Validate that the relevant contract admins have been set to their expected values -const validateContractAdmins = async (core: Contract) => { +const validateContractAdmins = async (contracts: NamedContracts) => { + await expect(contracts.fuseGuardian.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('FUSE_ADMIN')); + + await expect(contracts.optimisticMinter.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('FEI_MINT_ADMIN')); + await expect(contracts.pcvEquityMinter.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('FEI_MINT_ADMIN')); + + await expect(contracts.ethLidoPCVDeposit.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); + await expect(contracts.indexDelegator.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); + await expect(contracts.ethTokemakPCVDeposit.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); + await expect(contracts.uniswapPCVDeposit.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); + + await expect(contracts.daiPSMFeiSkimmer.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); + await expect(contracts.lusdPSMFeiSkimmer.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); + await expect(contracts.ethPSMFeiSkimmer.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); + + await expect(contracts.aaveEthPCVDripController.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); + await expect(contracts.daiPCVDripController.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); + await expect(contracts.lusdPCVDripController.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); + await expect(contracts.compoundEthPCVDripController.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); } export { deploy, setup, teardown, validate }; diff --git a/proposals/description/fip_82.ts b/proposals/description/fip_82.ts index 3cb780b2c..b7064b38b 100644 --- a/proposals/description/fip_82.ts +++ b/proposals/description/fip_82.ts @@ -295,6 +295,137 @@ const fip_82: ProposalDescription = { ], description: 'Create PSM_ADMIN_ROLE role, assigning ROLE_ADMIN as the role admin' }, + ///////// Set the relevant contract admins to the newly created roles ////////// + // FUSE_ADMIN + { + target: 'fuseGuardian', + values: '0', + method: 'setContractAdmin(bytes32)', + arguments: [ + '0x7f85477db6c0857f19179a2b3846a7ddbc64caeeb3a02ef34771b82f5ab926e4' // FUSE_ADMIN + ], + description: 'Set the contract admin of the FuseGuardian to be the FUSE_ADMIN' + }, + // FEI_MINT_ADMIN + // TODO: Verify that by FeiTimedMinter we mean OptimisticMinter. Source code suggests yes + { + target: 'optimisticMinter', + values: '0', + method: 'setContractAdminRole(bytes32)', + arguments: [ + '0x0ff6b7c6babd735fee69a0a83901c004544f96c586fe8cf330aa1f80693916e9' // FEI_MINT_ADMIN + ], + description: 'Set the contract admin of the FeiTimedMinter to be the FEI_MINT_ADMIN' + }, + { + target: 'pcvEquityMinter', + values: '0', + method: 'setContractAdminRole(bytes32)', + arguments: [ + '0x0ff6b7c6babd735fee69a0a83901c004544f96c586fe8cf330aa1f80693916e9' // FEI_MINT_ADMIN + ], + description: 'Set the contract admin of the PCV Equity Minter to be the FEI_MINT_ADMIN' + }, + /// PCV_ADMIN + { + target: 'ethLidoPCVDeposit', + values: '0', + method: 'setContractAdminRole(bytes32)', + arguments: [ + '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN + ], + description: 'Set the contract admin of the EthLidoPCVDeposit to be the PCV_ADMIN' + }, + { + target: 'indexDelegator', // this is SnapshotDelegatorPCVDeposit + values: '0', + method: 'setContractAdminRole(bytes32)', + arguments: [ + '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN + ], + description: 'Set the contract admin of the indexDelegator to be the PCV_ADMIN' + }, + { + target: 'ethTokemakPCVDeposit', // TokemakPCVDepositBase + values: '0', + method: 'setContractAdminRole(bytes32)', + arguments: [ + '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN + ], + description: 'Set the contract admin of the ethTokemarkPCVdeposit to be the PCV_ADMIN' + }, + { + target: 'uniswapPCVDeposit', + values: '0', + method: 'setContractAdminRole(bytes32)', + arguments: [ + '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN + ], + description: 'Set the contract admin of the uniswapPCVDeposit to be the PCV_ADMIN' + }, + { + target: 'daiPSMFeiSkimmer', + values: '0', + method: 'setContractAdminRole(bytes32)', + arguments: [ + '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN + ], + description: 'Set the contract admin of the DAI PSM Fei Skimmer to be the PCV_ADMIN' + }, + { + target: 'lusdPSMFeiSkimmer', + values: '0', + method: 'setContractAdminRole(bytes32)', + arguments: [ + '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN + ], + description: 'Set the contract admin of the LUSD PSM Fei Skimmer to be the PCV_ADMIN' + }, + { + target: 'ethPSMFeiSkimmer', + values: '0', + method: 'setContractAdminRole(bytes32)', + arguments: [ + '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN + ], + description: 'Set the contract admin of the ETH PSM Fei Skimmer to be the PCV_ADMIN' + }, + { + target: 'aaveEthPCVDripController', + values: '0', + method: 'setContractAdminRole(bytes32)', + arguments: [ + '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN + ], + description: 'Set the contract admin of the Aave Eth PCV Drip Controller to be the PCV_ADMIN' + }, + { + target: 'daiPCVDripController', + values: '0', + method: 'setContractAdminRole(bytes32)', + arguments: [ + '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN + ], + description: 'Set the contract admin of the DAI PCV Drip Controller to be the PCV_ADMIN' + }, + { + target: 'lusdPCVDripController', + values: '0', + method: 'setContractAdminRole(bytes32)', + arguments: [ + '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN + ], + description: 'Set the contract admin of the LUSDC PCV Drip Controller to be the PCV_ADMIN' + }, + { + target: 'compoundEthPCVDripController', + values: '0', + method: 'setContractAdminRole(bytes32)', + arguments: [ + '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN + ], + description: 'Set the contract admin of the Compound ETH PCV Drip Controller to be the PCV_ADMIN' + }, } ], description: ` From 53032c38784ba44ae5889f8f3e8c0aaccd40210d Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Mon, 11 Apr 2022 00:05:01 +0100 Subject: [PATCH 004/121] feat: validate TribalCouncil granted roles --- RoleMigration.md | 24 ------------- proposals/dao/fip_82.ts | 15 ++++++-- proposals/description/fip_82.ts | 62 ++++++++++++++++++++++++++++++++- 3 files changed, 73 insertions(+), 28 deletions(-) delete mode 100644 RoleMigration.md diff --git a/RoleMigration.md b/RoleMigration.md deleted file mode 100644 index f84b7a997..000000000 --- a/RoleMigration.md +++ /dev/null @@ -1,24 +0,0 @@ -## Role migration -Aim: Allow the TribalCouncil to operate autonomously, by being able to grant any non-major role. - -To do this, it needs to be the admin of all roles it seeks to grant. - -## TribeRoles to grant -The following non-major roles have been created and the current admin is the GOVERNOR. Their admin is being transferred to ROLE_ADMIN: -- ORACLE_ADMIN: 0xc307c44629779eb8fc0b85f224c3d22f5876a6c84de0ee42d481eb7814f0d3a8 -- TRIBAL_CHIEF_ADMIN: 0x23970cab3799b6876df4319661e6c03cc45bd59628799d92e988dd8cbdc90e31 -- PCV_GUARDIAN_ADMIN: 0xdf6ce05acd28d71e96472375ef55c4a692f167af3ccda9500570f7373c1ba22c -- METAGOVERNANCE_VOTE_ADMIN: 0xb02f76effb323167cad756bb4f3edbfb9d9291f9bfcdc72c9ceea005562f32eb -- METAGOVERNANCE_TOKEN_STAKING: 0xa100760f521bbb2848bef0b72ea29301f6a6b0605d004243f0eea2b1c359f7c7 -- METAGOVERNANCE_GAUGE_ADMIN: 0x3bee38c33241595abfefa470fd75bfa1cc9cb01eff02cf6732fd2baea4ea4241 -- LBP_SWAP_ROLE: 0x471cfe1a44bf1b786db7d7104d51e6728ed7b90a35394ad7cc424adf8ed16816 -- VOTIUM_ROLE: 0x2d46c62aa6fbc9b550f22e00476aebb90f4ea69cd492a68db4d444217763330d - - -## TODOs: -1. Make all existing non-major roles have the ROLE_ADMIN as their admin -2. Change the relevant contract admins from existing to ROLE_ADMIN -3. Verify all this. Aim to be in same DAO vote - -Roles to transfer -- All TribeRoles which have the GOVERNOR as the admin \ No newline at end of file diff --git a/proposals/dao/fip_82.ts b/proposals/dao/fip_82.ts index cd7c48081..560f70e20 100644 --- a/proposals/dao/fip_82.ts +++ b/proposals/dao/fip_82.ts @@ -190,7 +190,8 @@ const validate: ValidateUpgradeFunc = async (addresses, oldContracts, contracts, ); await validateTransferredRoleAdmins(contracts.core); await validateNewCouncilRoles(contracts.core); - await validateContractAdmins(contracts.core); + await validateContractAdmins(contracts); + await validateTribalCouncilRoles(contracts.core, addresses.tribalCouncilTimelock); }; // Validate that the relevant timelocks and Safes have the relevant TribeRoles @@ -260,7 +261,6 @@ const validateNewCouncilRoles = async (core: Contract) => { /// Validate that the relevant contract admins have been set to their expected values const validateContractAdmins = async (contracts: NamedContracts) => { - await expect(contracts.fuseGuardian.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('FUSE_ADMIN')); await expect(contracts.optimisticMinter.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('FEI_MINT_ADMIN')); @@ -279,6 +279,15 @@ const validateContractAdmins = async (contracts: NamedContracts) => { await expect(contracts.daiPCVDripController.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); await expect(contracts.lusdPCVDripController.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); await expect(contracts.compoundEthPCVDripController.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); -} +}; + +const validateTribalCouncilRoles = async (core: Contract, tribalCouncilTimelockAddress: string) => { + await expect(core.hasRole(ethers.utils.id('FUSE_ADMIN'), tribalCouncilTimelockAddress)).to.be.true; + await expect(core.hasRole(ethers.utils.id('FEI_MINT_ADMIN'), tribalCouncilTimelockAddress)).to.be.true; + await expect(core.hasRole(ethers.utils.id('PCV_ADMIN'), tribalCouncilTimelockAddress)).to.be.true; + await expect(core.hasRole(ethers.utils.id('PCV_GUARDIAN_ADMIN_ROLE'), tribalCouncilTimelockAddress)).to.be.true; + await expect(core.hasRole(ethers.utils.id('ORACLE_ADMIN_ROLE'), tribalCouncilTimelockAddress)).to.be.true; + await expect(core.hasRole(ethers.utils.id('PSM_ADMIN_ROLE'), tribalCouncilTimelockAddress)).to.be.true; +}; export { deploy, setup, teardown, validate }; diff --git a/proposals/description/fip_82.ts b/proposals/description/fip_82.ts index b7064b38b..2f74c6ad5 100644 --- a/proposals/description/fip_82.ts +++ b/proposals/description/fip_82.ts @@ -300,7 +300,7 @@ const fip_82: ProposalDescription = { { target: 'fuseGuardian', values: '0', - method: 'setContractAdmin(bytes32)', + method: 'setContractAdminRole(bytes32)', arguments: [ '0x7f85477db6c0857f19179a2b3846a7ddbc64caeeb3a02ef34771b82f5ab926e4' // FUSE_ADMIN ], @@ -426,6 +426,66 @@ const fip_82: ProposalDescription = { ], description: 'Set the contract admin of the Compound ETH PCV Drip Controller to be the PCV_ADMIN' }, + ////////// Grant the Tribal Council timelock the relevant roles ////////// + { + target: 'core', + values: '0', + method: 'grantRole(bytes32,address)', + arguments: [ + '0x7f85477db6c0857f19179a2b3846a7ddbc64caeeb3a02ef34771b82f5ab926e4', // FUSE_ADMIN + '{tribalCouncilTimelock}' + ], + description: 'Grant TribalCouncil timelock the FUSE_ADMIN role' + }, + { + target: 'core', + values: '0', + method: 'grantRole(bytes32,address)', + arguments: [ + '0x0ff6b7c6babd735fee69a0a83901c004544f96c586fe8cf330aa1f80693916e9', // FEI_MINT_ADMIN + '{tribalCouncilTimelock}' + ], + description: 'Grant TribalCouncil timelock the FEI_MINT_ADMIN role' + }, + { + target: 'core', + values: '0', + method: 'grantRole(bytes32,address)', + arguments: [ + '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77', // PCV_ADMIN + '{tribalCouncilTimelock}' + ], + description: 'Grant TribalCouncil timelock the PCV_ADMIN role' + }, + { + target: 'core', + values: '0', + method: 'grantRole(bytes32,address)', + arguments: [ + '0xdf6ce05acd28d71e96472375ef55c4a692f167af3ccda9500570f7373c1ba22c', // PCV_GUARDIAN_ADMIN_ROLE + '{tribalCouncilTimelock}' + ], + description: 'Grant TribalCouncil timelock the PCV_GUARDIAN_ADMIN_ROLE role' + }, + { + target: 'core', + values: '0', + method: 'grantRole(bytes32,address)', + arguments: [ + '0xc307c44629779eb8fc0b85f224c3d22f5876a6c84de0ee42d481eb7814f0d3a8', // ORACLE_ADMIN_ROLE + '{tribalCouncilTimelock}' + ], + description: 'Grant TribalCouncil timelock the ORACLE_ADMIN_ROLE' + }, + { + target: 'core', + values: '0', + method: 'grantRole(bytes32,address)', + arguments: [ + '0x1749ca1ca3564d20da6efea465c2a5ae869a9e4b006da7035e688beb14d704e0', // PSM_ADMIN_ROLE + '{tribalCouncilTimelock}' + ], + description: 'Grant TribalCouncil timelock the PSM_ADMIN_ROLE' } ], description: ` From 0ca7810b549e7a5707261aabe97e6909b12f3e5d Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Mon, 11 Apr 2022 00:27:07 +0100 Subject: [PATCH 005/121] test: increase max proposals --- scripts/utils/constructProposal.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/utils/constructProposal.ts b/scripts/utils/constructProposal.ts index b7dc8c116..38b133a94 100644 --- a/scripts/utils/constructProposal.ts +++ b/scripts/utils/constructProposal.ts @@ -19,7 +19,7 @@ export default async function constructProposal( const proposalDescription = proposalInfo.description; const proposalBuilder = proposals.builders.alpha(); - proposalBuilder.maxActions = 40; + proposalBuilder.maxActions = 80; for (let i = 0; i < proposalInfo.commands.length; i += 1) { const command = proposalInfo.commands[i]; From 5cd91a179d1f845cc8c126665d37b30c10a5c840 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Mon, 11 Apr 2022 17:44:33 +0100 Subject: [PATCH 006/121] fix: PR feedback --- contracts/pods/PodAdminGateway.sol | 11 ++--------- contracts/pods/PodFactory.sol | 6 +++--- contracts/pods/interfaces/IPodAdminGateway.sol | 6 +----- contracts/test/integration/governance/NopeDAO.t.sol | 3 +-- .../integration/governance/PodAdminGateway.t.sol | 12 ++---------- test/integration/tests/podOperation.ts | 4 +--- 6 files changed, 10 insertions(+), 32 deletions(-) diff --git a/contracts/pods/PodAdminGateway.sol b/contracts/pods/PodAdminGateway.sol index 0027e9cd2..68f135311 100644 --- a/contracts/pods/PodAdminGateway.sol +++ b/contracts/pods/PodAdminGateway.sol @@ -200,11 +200,7 @@ contract PodAdminGateway is CoreRef, IPodAdminGateway { /// @notice Allow a proposal to be vetoed in a pod timelock /// @dev Permissioned to GOVERNOR, POD_VETO_ADMIN, GUARDIAN, POD_ADMIN and the specific /// pod admin and guardian roles - function veto( - uint256 _podId, - address _podTimelock, - bytes32 _proposalId - ) + function veto(uint256 _podId, bytes32 _proposalId) external override hasAnyOfSixRoles( @@ -216,10 +212,7 @@ contract PodAdminGateway is CoreRef, IPodAdminGateway { getSpecificPodAdminRole(_podId) ) { - require( - _podTimelock == podFactory.getPodTimelock(_podId), - "PodId and timelock mismatch" - ); + address _podTimelock = podFactory.getPodTimelock(_podId); emit VetoTimelock(_podId, _podTimelock, _proposalId); TimelockController(payable(_podTimelock)).cancel(_proposalId); } diff --git a/contracts/pods/PodFactory.sol b/contracts/pods/PodFactory.sol index dab31f482..cb9e212fe 100644 --- a/contracts/pods/PodFactory.sol +++ b/contracts/pods/PodFactory.sol @@ -39,7 +39,7 @@ contract PodFactory is CoreRef, IPodFactory { address[] private podSafeAddresses; /// @notice Track whether the one time use initial pod deploy has been used - bool public genesisDeployed; + bool public tribalCouncilDeployed; /// @notice Minimum delay of a pod timelock, if one is to be created with one uint256 public constant MIN_TIMELOCK_DELAY = 1 days; @@ -164,8 +164,8 @@ contract PodFactory is CoreRef, IPodFactory { address ) { - require(!genesisDeployed, "Genesis pod already deployed"); - genesisDeployed = true; + require(!tribalCouncilDeployed, "Genesis pod already deployed"); + tribalCouncilDeployed = true; return _createOptimisticPod(_config); } diff --git a/contracts/pods/interfaces/IPodAdminGateway.sol b/contracts/pods/interfaces/IPodAdminGateway.sol index eb411a203..547fa356b 100644 --- a/contracts/pods/interfaces/IPodAdminGateway.sol +++ b/contracts/pods/interfaces/IPodAdminGateway.sol @@ -42,9 +42,5 @@ interface IPodAdminGateway { function unlockMembershipTransfers(uint256 _podId) external; - function veto( - uint256 _podId, - address _podTimelock, - bytes32 proposalId - ) external; + function veto(uint256 _podId, bytes32 proposalId) external; } diff --git a/contracts/test/integration/governance/NopeDAO.t.sol b/contracts/test/integration/governance/NopeDAO.t.sol index 8753b79ad..a01bdbb55 100644 --- a/contracts/test/integration/governance/NopeDAO.t.sol +++ b/contracts/test/integration/governance/NopeDAO.t.sol @@ -206,9 +206,8 @@ contract NopeDAOIntegrationTest is DSTest { bytes[] memory calldatas = new bytes[](1); bytes memory data = abi.encodeWithSignature( - "veto(uint256,address,bytes32)", + "veto(uint256,bytes32)", podId, - address(timelockContract), timelockProposalId ); calldatas[0] = data; diff --git a/contracts/test/integration/governance/PodAdminGateway.t.sol b/contracts/test/integration/governance/PodAdminGateway.t.sol index 4e5fa8f1e..bc6d95b6a 100644 --- a/contracts/test/integration/governance/PodAdminGateway.t.sol +++ b/contracts/test/integration/governance/PodAdminGateway.t.sol @@ -280,7 +280,7 @@ contract PodAdminGatewayIntegrationTest is DSTest { vm.expectRevert( bytes("TimelockController: operation cannot be cancelled") ); - podAdminGateway.veto(podId, timelock, bytes32("5")); + podAdminGateway.veto(podId, bytes32("5")); } /// @notice Validate that the specific pod amdin can veto @@ -301,14 +301,6 @@ contract PodAdminGatewayIntegrationTest is DSTest { vm.expectRevert( bytes("TimelockController: operation cannot be cancelled") ); - podAdminGateway.veto(podId, timelock, bytes32("5")); - } - - /// @notice Validate that can not veto for a mismatched podId and timelock - function testCanNotVetoForMismatchPodIdTimelock() public { - address fakeTimelock = address(0x3); - vm.prank(feiDAOTimelock); - vm.expectRevert(bytes("PodId and timelock mismatch")); - podAdminGateway.veto(podId, fakeTimelock, bytes32("5")); + podAdminGateway.veto(podId, bytes32("5")); } } diff --git a/test/integration/tests/podOperation.ts b/test/integration/tests/podOperation.ts index b417c8b43..e086ae89d 100644 --- a/test/integration/tests/podOperation.ts +++ b/test/integration/tests/podOperation.ts @@ -183,9 +183,7 @@ describe('Pod operation and veto', function () { // User proposes on NopeDAO const nopeDAO = contracts.nopeDAO; const description = 'Veto proposal'; - const calldatas = [ - contracts.podAdminGateway.interface.encodeFunctionData('veto', [podId, podTimelock.address, timelockProposalId]) - ]; + const calldatas = [contracts.podAdminGateway.interface.encodeFunctionData('veto', [podId, timelockProposalId])]; const targets = [contractAddresses.podAdminGateway]; const values = [0]; From 2c0cc5394ef27859a0947f435a68732e5704ac27 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Mon, 11 Apr 2022 18:24:12 +0100 Subject: [PATCH 007/121] refactor: break out into seperate DAO vote --- contracts/core/TribeRoles.sol | 2 +- proposals/dao/fip_82.ts | 60 ----- proposals/dao/fip_82b.ts | 113 +++++++++ proposals/description/fip_82.ts | 314 ------------------------- proposals/description/fip_82b.ts | 330 +++++++++++++++++++++++++++ scripts/utils/constructProposal.ts | 2 +- test/integration/proposals_config.ts | 12 +- 7 files changed, 456 insertions(+), 377 deletions(-) create mode 100644 proposals/dao/fip_82b.ts create mode 100644 proposals/description/fip_82b.ts diff --git a/contracts/core/TribeRoles.sol b/contracts/core/TribeRoles.sol index f9cc9dfb4..25ca13db2 100644 --- a/contracts/core/TribeRoles.sol +++ b/contracts/core/TribeRoles.sol @@ -62,7 +62,7 @@ library TribeRoles { /// @notice admin of the Fuse protocol bytes32 internal constant FUSE_ADMIN = keccak256("FUSE_ADMIN"); /// @notice admin of minting Fei for specific scoped contracts - bytes32 internal constant FEI_MINT_ADMIN = keccak256("FUSE_MINT_ADMIN"); + bytes32 internal constant FEI_MINT_ADMIN = keccak256("FEI_MINT_ADMIN"); /// @notice admin of minting Fei for specific scoped contracts bytes32 internal constant PCV_ADMIN = keccak256("PCV_ADMIN"); diff --git a/proposals/dao/fip_82.ts b/proposals/dao/fip_82.ts index 222f9334e..db33b63c9 100644 --- a/proposals/dao/fip_82.ts +++ b/proposals/dao/fip_82.ts @@ -3,7 +3,6 @@ import { expect } from 'chai'; import { DeployUpgradeFunc, NamedAddresses, - NamedContracts, SetupUpgradeFunc, TeardownUpgradeFunc, ValidateUpgradeFunc @@ -187,10 +186,6 @@ const validate: ValidateUpgradeFunc = async (addresses, oldContracts, contracts, addresses.nopeDAO, addresses.podFactory ); - await validateTransferredRoleAdmins(contracts.core); - await validateNewCouncilRoles(contracts.core); - await validateContractAdmins(contracts); - await validateTribalCouncilRoles(contracts.core, addresses.tribalCouncilTimelock); }; // Validate that the relevant timelocks and Safes have the relevant TribeRoles @@ -234,59 +229,4 @@ const validateContractRoles = async ( expect(podFactoryAdminRole).to.be.true; }; -/// Validate that all non-major TribeRoles have had their admins transferred to the ROLE_ADMIN -const validateTransferredRoleAdmins = async (core: Contract) => { - const ROLE_ADMIN = ethers.utils.id('ROLE_ADMIN'); - - await expect(core.getRoleAdmin(ethers.utils.id('ORACLE_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); - await expect(core.getRoleAdmin(ethers.utils.id('TRIBAL_CHIEF_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); - await expect(core.getRoleAdmin(ethers.utils.id('PCV_GUARDIAN_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); - await expect(core.getRoleAdmin(ethers.utils.id('METAGOVERNANCE_VOTE_ADMIN'))).to.be.equal(ROLE_ADMIN); - await expect(core.getRoleAdmin(ethers.utils.id('METAGOVERNANCE_TOKEN_STAKING'))).to.be.equal(ROLE_ADMIN); - await expect(core.getRoleAdmin(ethers.utils.id('METAGOVERNANCE_GAUGE_ADMIN'))).to.be.equal(ROLE_ADMIN); - await expect(core.getRoleAdmin(ethers.utils.id('SWAP_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); - await expect(core.getRoleAdmin(ethers.utils.id('VOTIUM_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); -}; - -/// Validate that the expected new TribeRoles have been created -const validateNewCouncilRoles = async (core: Contract) => { - const ROLE_ADMIN = ethers.utils.id('ROLE_ADMIN'); - - await expect(core.getRoleAdmin(ethers.utils.id('FUSE_ADMIN'))).to.be.equal(ROLE_ADMIN); - await expect(core.getRoleAdmin(ethers.utils.id('FEI_MINT_ADMIN'))).to.be.equal(ROLE_ADMIN); - await expect(core.getRoleAdmin(ethers.utils.id('PCV_ADMIN'))).to.be.equal(ROLE_ADMIN); - await expect(core.getRoleAdmin(ethers.utils.id('PSD_ADMIN'))).to.be.equal(ROLE_ADMIN); -}; - -/// Validate that the relevant contract admins have been set to their expected values -const validateContractAdmins = async (contracts: NamedContracts) => { - await expect(contracts.fuseGuardian.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('FUSE_ADMIN')); - - await expect(contracts.optimisticMinter.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('FEI_MINT_ADMIN')); - await expect(contracts.pcvEquityMinter.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('FEI_MINT_ADMIN')); - - await expect(contracts.ethLidoPCVDeposit.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); - await expect(contracts.indexDelegator.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); - await expect(contracts.ethTokemakPCVDeposit.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); - await expect(contracts.uniswapPCVDeposit.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); - - await expect(contracts.daiPSMFeiSkimmer.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); - await expect(contracts.lusdPSMFeiSkimmer.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); - await expect(contracts.ethPSMFeiSkimmer.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); - - await expect(contracts.aaveEthPCVDripController.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); - await expect(contracts.daiPCVDripController.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); - await expect(contracts.lusdPCVDripController.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); - await expect(contracts.compoundEthPCVDripController.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); -}; - -const validateTribalCouncilRoles = async (core: Contract, tribalCouncilTimelockAddress: string) => { - await expect(core.hasRole(ethers.utils.id('FUSE_ADMIN'), tribalCouncilTimelockAddress)).to.be.true; - await expect(core.hasRole(ethers.utils.id('FEI_MINT_ADMIN'), tribalCouncilTimelockAddress)).to.be.true; - await expect(core.hasRole(ethers.utils.id('PCV_ADMIN'), tribalCouncilTimelockAddress)).to.be.true; - await expect(core.hasRole(ethers.utils.id('PCV_GUARDIAN_ADMIN_ROLE'), tribalCouncilTimelockAddress)).to.be.true; - await expect(core.hasRole(ethers.utils.id('ORACLE_ADMIN_ROLE'), tribalCouncilTimelockAddress)).to.be.true; - await expect(core.hasRole(ethers.utils.id('PSM_ADMIN_ROLE'), tribalCouncilTimelockAddress)).to.be.true; -}; - export { deploy, setup, teardown, validate }; diff --git a/proposals/dao/fip_82b.ts b/proposals/dao/fip_82b.ts new file mode 100644 index 000000000..b3af72f90 --- /dev/null +++ b/proposals/dao/fip_82b.ts @@ -0,0 +1,113 @@ +import { ethers } from 'hardhat'; +import { expect } from 'chai'; +import { + DeployUpgradeFunc, + NamedAddresses, + NamedContracts, + SetupUpgradeFunc, + TeardownUpgradeFunc, + ValidateUpgradeFunc +} from '@custom-types/types'; +import { Contract } from 'ethers'; + +/* + +DAO Proposal fip_82b + +Description: +1. Transfer admin of non-major TribeRoles to ROLE_ADMIN, to allow the TribalCouncil to grant out +2. Create several new TribeRoles for management of the protocol, with the ROLE_ADMIN as their admin +3. Transfer contract admins of various contracts to these new roles +4. Grant the TribalCouncil the various roles it needs to run the protocol +*/ + +const fipNumber = 'fip_82b'; + +// Do any deployments +// This should exclusively include new contract deployments +const deploy: DeployUpgradeFunc = async (deployAddress: string, addresses: NamedAddresses, logging: boolean) => { + console.log(`No deploy actions for fip${fipNumber}`); + return { + // put returned contract objects here + }; +}; + +// Do any setup necessary for running the test. +// This could include setting up Hardhat to impersonate accounts, +// ensuring contracts have a specific state, etc. +const setup: SetupUpgradeFunc = async (addresses, oldContracts, contracts, logging) => { + console.log(`No actions to complete in setup for fip${fipNumber}`); +}; + +// Tears down any changes made in setup() that need to be +// cleaned up before doing any validation checks. +const teardown: TeardownUpgradeFunc = async (addresses, oldContracts, contracts, logging) => { + console.log(`No actions to complete in teardown for fip${fipNumber}`); +}; + +// Run any validations required on the fip using mocha or console logging +// IE check balances, check state of contracts, etc. +const validate: ValidateUpgradeFunc = async (addresses, oldContracts, contracts, logging) => { + console.log(`No actions to complete in validate for fip${fipNumber}`); + await validateTransferredRoleAdmins(contracts.core); + await validateNewCouncilRoles(contracts.core); + await validateContractAdmins(contracts); + await validateTribalCouncilRoles(contracts.core, addresses.tribalCouncilTimelock); +}; + +/// Validate that all non-major TribeRoles have had their admins transferred to the ROLE_ADMIN +const validateTransferredRoleAdmins = async (core: Contract) => { + const ROLE_ADMIN = ethers.utils.id('ROLE_ADMIN'); + + expect(await core.getRoleAdmin(ethers.utils.id('ORACLE_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); + expect(await core.getRoleAdmin(ethers.utils.id('TRIBAL_CHIEF_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); + expect(await core.getRoleAdmin(ethers.utils.id('PCV_GUARDIAN_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); + expect(await core.getRoleAdmin(ethers.utils.id('METAGOVERNANCE_VOTE_ADMIN'))).to.be.equal(ROLE_ADMIN); + expect(await core.getRoleAdmin(ethers.utils.id('METAGOVERNANCE_TOKEN_STAKING'))).to.be.equal(ROLE_ADMIN); + expect(await core.getRoleAdmin(ethers.utils.id('METAGOVERNANCE_GAUGE_ADMIN'))).to.be.equal(ROLE_ADMIN); + expect(await core.getRoleAdmin(ethers.utils.id('SWAP_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); + expect(await core.getRoleAdmin(ethers.utils.id('VOTIUM_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); +}; + +/// Validate that the expected new TribeRoles have been created +const validateNewCouncilRoles = async (core: Contract) => { + const ROLE_ADMIN = ethers.utils.id('ROLE_ADMIN'); + + expect(await core.getRoleAdmin(ethers.utils.id('FUSE_ADMIN'))).to.be.equal(ROLE_ADMIN); + expect(await core.getRoleAdmin(ethers.utils.id('FEI_MINT_ADMIN'))).to.be.equal(ROLE_ADMIN); + expect(await core.getRoleAdmin(ethers.utils.id('PCV_ADMIN'))).to.be.equal(ROLE_ADMIN); + expect(await core.getRoleAdmin(ethers.utils.id('PSM_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); +}; + +/// Validate that the relevant contract admins have been set to their expected values +const validateContractAdmins = async (contracts: NamedContracts) => { + expect(await contracts.fuseGuardian.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('FUSE_ADMIN')); + + expect(await contracts.optimisticMinter.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('FEI_MINT_ADMIN')); + expect(await contracts.pcvEquityMinter.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('FEI_MINT_ADMIN')); + + expect(await contracts.ethLidoPCVDeposit.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); + expect(await contracts.indexDelegator.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); + expect(await contracts.ethTokemakPCVDeposit.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); + expect(await contracts.uniswapPCVDeposit.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); + + expect(await contracts.daiPSMFeiSkimmer.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); + expect(await contracts.lusdPSMFeiSkimmer.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); + expect(await contracts.ethPSMFeiSkimmer.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); + + expect(await contracts.aaveEthPCVDripController.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); + expect(await contracts.daiPCVDripController.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); + expect(await contracts.lusdPCVDripController.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); + expect(await contracts.compoundEthPCVDripController.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); +}; + +const validateTribalCouncilRoles = async (core: Contract, tribalCouncilTimelockAddress: string) => { + expect(await core.hasRole(ethers.utils.id('FUSE_ADMIN'), tribalCouncilTimelockAddress)).to.be.true; + expect(await core.hasRole(ethers.utils.id('FEI_MINT_ADMIN'), tribalCouncilTimelockAddress)).to.be.true; + expect(await core.hasRole(ethers.utils.id('PCV_ADMIN'), tribalCouncilTimelockAddress)).to.be.true; + expect(await core.hasRole(ethers.utils.id('PCV_GUARDIAN_ADMIN_ROLE'), tribalCouncilTimelockAddress)).to.be.true; + expect(await core.hasRole(ethers.utils.id('ORACLE_ADMIN_ROLE'), tribalCouncilTimelockAddress)).to.be.true; + expect(await core.hasRole(ethers.utils.id('PSM_ADMIN_ROLE'), tribalCouncilTimelockAddress)).to.be.true; +}; + +export { deploy, setup, teardown, validate }; diff --git a/proposals/description/fip_82.ts b/proposals/description/fip_82.ts index 10e4411ab..aefba0e9f 100644 --- a/proposals/description/fip_82.ts +++ b/proposals/description/fip_82.ts @@ -172,320 +172,6 @@ const fip_82: ProposalDescription = { method: 'lockMembershipTransfers(uint256 _podId)', arguments: ['24'], description: 'Lock TribalCouncil pod membership transfers' - }, - ///////// Transfer all non-major role admins to the ROLE_ADMIN, to allow TribalCouncil to manage //////// - { - target: 'core', - values: '0', - method: 'createRole(bytes32,bytes32)', - arguments: [ - '0xc307c44629779eb8fc0b85f224c3d22f5876a6c84de0ee42d481eb7814f0d3a8', // ORACLE_ADMIN - '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN - ], - description: 'Transfer ORACLE_ADMIN role admin from GOVERNOR to ROLE_ADMIN' - }, - { - target: 'core', - values: '0', - method: 'createRole(bytes32,bytes32)', - arguments: [ - '0x23970cab3799b6876df4319661e6c03cc45bd59628799d92e988dd8cbdc90e31', // TRIBAL_CHIEF_ADMIN - '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN - ], - description: 'Transfer TRIBAL_CHIEF_ADMIN role admin from GOVERNOR to ROLE_ADMIN' - }, - { - target: 'core', - values: '0', - method: 'createRole(bytes32,bytes32)', - arguments: [ - '0xdf6ce05acd28d71e96472375ef55c4a692f167af3ccda9500570f7373c1ba22c', // PCV_GUARDIAN_ADMIN - '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN - ], - description: 'Transfer PCV_GUARDIAN_ADMIN role admin from GOVERNOR to ROLE_ADMIN' - }, - { - target: 'core', - values: '0', - method: 'createRole(bytes32,bytes32)', - arguments: [ - '0xb02f76effb323167cad756bb4f3edbfb9d9291f9bfcdc72c9ceea005562f32eb', // METAGOVERNANCE_VOTE_ADMIN - '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN - ], - description: 'Transfer METAGOVERNANCE_VOTE_ADMIN role admin from GOVERNOR to ROLE_ADMIN' - }, - { - target: 'core', - values: '0', - method: 'createRole(bytes32,bytes32)', - arguments: [ - '0xa100760f521bbb2848bef0b72ea29301f6a6b0605d004243f0eea2b1c359f7c7', // METAGOVERNANCE_TOKEN_STAKING - '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN - ], - description: 'Transfer METAGOVERNANCE_TOKEN_STAKING role admin from GOVERNOR to ROLE_ADMIN' - }, - { - target: 'core', - values: '0', - method: 'createRole(bytes32,bytes32)', - arguments: [ - '0x3bee38c33241595abfefa470fd75bfa1cc9cb01eff02cf6732fd2baea4ea4241', // METAGOVERNANCE_GAUGE_ADMIN - '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN - ], - description: 'Transfer METAGOVERNANCE_GAUGE_ADMIN role admin from GOVERNOR to ROLE_ADMIN' - }, - { - target: 'core', - values: '0', - method: 'createRole(bytes32,bytes32)', - arguments: [ - '0x471cfe1a44bf1b786db7d7104d51e6728ed7b90a35394ad7cc424adf8ed16816', // LBP_SWAP_ROLE - '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN - ], - description: 'Transfer LBP_SWAP_ROLE role admin from GOVERNOR to ROLE_ADMIN' - }, - { - target: 'core', - values: '0', - method: 'createRole(bytes32,bytes32)', - arguments: [ - '0x2d46c62aa6fbc9b550f22e00476aebb90f4ea69cd492a68db4d444217763330d', // VOTIUM_ROLE - '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN - ], - description: 'Transfer VOTIUM_ROLE role admin from GOVERNOR to ROLE_ADMIN' - }, - //////// Create new roles for the Tribal Council to manage ///////// - { - target: 'core', - values: '0', - method: 'createRole(bytes32,bytes32)', - arguments: [ - '0x7f85477db6c0857f19179a2b3846a7ddbc64caeeb3a02ef34771b82f5ab926e4', // FUSE_ADMIN - '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN - ], - description: 'Create FUSE_ADMIN role, assigning ROLE_ADMIN as the role admin' - }, - { - target: 'core', - values: '0', - method: 'createRole(bytes32,bytes32)', - arguments: [ - '0x0ff6b7c6babd735fee69a0a83901c004544f96c586fe8cf330aa1f80693916e9', // FEI_MINT_ADMIN - '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN - ], - description: 'Create FEI_MINT_ADMIN role, assigning ROLE_ADMIN as the role admin' - }, - { - target: 'core', - values: '0', - method: 'createRole(bytes32,bytes32)', - arguments: [ - '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77', // PCV_ADMIN - '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN - ], - description: 'Create PCV_ADMIN role, assigning ROLE_ADMIN as the role admin' - }, - { - target: 'core', - values: '0', - method: 'createRole(bytes32,bytes32)', - arguments: [ - '0x1749ca1ca3564d20da6efea465c2a5ae869a9e4b006da7035e688beb14d704e0', // PSM_ADMIN_ROLE - '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN - ], - description: 'Create PSM_ADMIN_ROLE role, assigning ROLE_ADMIN as the role admin' - }, - ///////// Set the relevant contract admins to the newly created roles ////////// - // FUSE_ADMIN - { - target: 'fuseGuardian', - values: '0', - method: 'setContractAdminRole(bytes32)', - arguments: [ - '0x7f85477db6c0857f19179a2b3846a7ddbc64caeeb3a02ef34771b82f5ab926e4' // FUSE_ADMIN - ], - description: 'Set the contract admin of the FuseGuardian to be the FUSE_ADMIN' - }, - // FEI_MINT_ADMIN - // TODO: Verify that by FeiTimedMinter we mean OptimisticMinter. Source code suggests yes - { - target: 'optimisticMinter', - values: '0', - method: 'setContractAdminRole(bytes32)', - arguments: [ - '0x0ff6b7c6babd735fee69a0a83901c004544f96c586fe8cf330aa1f80693916e9' // FEI_MINT_ADMIN - ], - description: 'Set the contract admin of the FeiTimedMinter to be the FEI_MINT_ADMIN' - }, - { - target: 'pcvEquityMinter', - values: '0', - method: 'setContractAdminRole(bytes32)', - arguments: [ - '0x0ff6b7c6babd735fee69a0a83901c004544f96c586fe8cf330aa1f80693916e9' // FEI_MINT_ADMIN - ], - description: 'Set the contract admin of the PCV Equity Minter to be the FEI_MINT_ADMIN' - }, - /// PCV_ADMIN - { - target: 'ethLidoPCVDeposit', - values: '0', - method: 'setContractAdminRole(bytes32)', - arguments: [ - '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN - ], - description: 'Set the contract admin of the EthLidoPCVDeposit to be the PCV_ADMIN' - }, - { - target: 'indexDelegator', // this is SnapshotDelegatorPCVDeposit - values: '0', - method: 'setContractAdminRole(bytes32)', - arguments: [ - '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN - ], - description: 'Set the contract admin of the indexDelegator to be the PCV_ADMIN' - }, - { - target: 'ethTokemakPCVDeposit', // TokemakPCVDepositBase - values: '0', - method: 'setContractAdminRole(bytes32)', - arguments: [ - '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN - ], - description: 'Set the contract admin of the ethTokemarkPCVdeposit to be the PCV_ADMIN' - }, - { - target: 'uniswapPCVDeposit', - values: '0', - method: 'setContractAdminRole(bytes32)', - arguments: [ - '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN - ], - description: 'Set the contract admin of the uniswapPCVDeposit to be the PCV_ADMIN' - }, - { - target: 'daiPSMFeiSkimmer', - values: '0', - method: 'setContractAdminRole(bytes32)', - arguments: [ - '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN - ], - description: 'Set the contract admin of the DAI PSM Fei Skimmer to be the PCV_ADMIN' - }, - { - target: 'lusdPSMFeiSkimmer', - values: '0', - method: 'setContractAdminRole(bytes32)', - arguments: [ - '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN - ], - description: 'Set the contract admin of the LUSD PSM Fei Skimmer to be the PCV_ADMIN' - }, - { - target: 'ethPSMFeiSkimmer', - values: '0', - method: 'setContractAdminRole(bytes32)', - arguments: [ - '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN - ], - description: 'Set the contract admin of the ETH PSM Fei Skimmer to be the PCV_ADMIN' - }, - { - target: 'aaveEthPCVDripController', - values: '0', - method: 'setContractAdminRole(bytes32)', - arguments: [ - '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN - ], - description: 'Set the contract admin of the Aave Eth PCV Drip Controller to be the PCV_ADMIN' - }, - { - target: 'daiPCVDripController', - values: '0', - method: 'setContractAdminRole(bytes32)', - arguments: [ - '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN - ], - description: 'Set the contract admin of the DAI PCV Drip Controller to be the PCV_ADMIN' - }, - { - target: 'lusdPCVDripController', - values: '0', - method: 'setContractAdminRole(bytes32)', - arguments: [ - '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN - ], - description: 'Set the contract admin of the LUSDC PCV Drip Controller to be the PCV_ADMIN' - }, - { - target: 'compoundEthPCVDripController', - values: '0', - method: 'setContractAdminRole(bytes32)', - arguments: [ - '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN - ], - description: 'Set the contract admin of the Compound ETH PCV Drip Controller to be the PCV_ADMIN' - }, - ////////// Grant the Tribal Council timelock the relevant roles ////////// - { - target: 'core', - values: '0', - method: 'grantRole(bytes32,address)', - arguments: [ - '0x7f85477db6c0857f19179a2b3846a7ddbc64caeeb3a02ef34771b82f5ab926e4', // FUSE_ADMIN - '{tribalCouncilTimelock}' - ], - description: 'Grant TribalCouncil timelock the FUSE_ADMIN role' - }, - { - target: 'core', - values: '0', - method: 'grantRole(bytes32,address)', - arguments: [ - '0x0ff6b7c6babd735fee69a0a83901c004544f96c586fe8cf330aa1f80693916e9', // FEI_MINT_ADMIN - '{tribalCouncilTimelock}' - ], - description: 'Grant TribalCouncil timelock the FEI_MINT_ADMIN role' - }, - { - target: 'core', - values: '0', - method: 'grantRole(bytes32,address)', - arguments: [ - '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77', // PCV_ADMIN - '{tribalCouncilTimelock}' - ], - description: 'Grant TribalCouncil timelock the PCV_ADMIN role' - }, - { - target: 'core', - values: '0', - method: 'grantRole(bytes32,address)', - arguments: [ - '0xdf6ce05acd28d71e96472375ef55c4a692f167af3ccda9500570f7373c1ba22c', // PCV_GUARDIAN_ADMIN_ROLE - '{tribalCouncilTimelock}' - ], - description: 'Grant TribalCouncil timelock the PCV_GUARDIAN_ADMIN_ROLE role' - }, - { - target: 'core', - values: '0', - method: 'grantRole(bytes32,address)', - arguments: [ - '0xc307c44629779eb8fc0b85f224c3d22f5876a6c84de0ee42d481eb7814f0d3a8', // ORACLE_ADMIN_ROLE - '{tribalCouncilTimelock}' - ], - description: 'Grant TribalCouncil timelock the ORACLE_ADMIN_ROLE' - }, - { - target: 'core', - values: '0', - method: 'grantRole(bytes32,address)', - arguments: [ - '0x1749ca1ca3564d20da6efea465c2a5ae869a9e4b006da7035e688beb14d704e0', // PSM_ADMIN_ROLE - '{tribalCouncilTimelock}' - ], - description: 'Grant TribalCouncil timelock the PSM_ADMIN_ROLE' } ], description: ` diff --git a/proposals/description/fip_82b.ts b/proposals/description/fip_82b.ts new file mode 100644 index 000000000..1941d574d --- /dev/null +++ b/proposals/description/fip_82b.ts @@ -0,0 +1,330 @@ +import { ProposalDescription } from '@custom-types/types'; + +const fip_82b: ProposalDescription = { + title: 'FIP-82b: Authorise the TribalCouncil with necessary roles', + commands: [ + ///////// Transfer all non-major role admins to the ROLE_ADMIN, to allow TribalCouncil to manage //////// + { + target: 'core', + values: '0', + method: 'createRole(bytes32,bytes32)', + arguments: [ + '0xc307c44629779eb8fc0b85f224c3d22f5876a6c84de0ee42d481eb7814f0d3a8', // ORACLE_ADMIN + '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN + ], + description: 'Transfer ORACLE_ADMIN role admin from GOVERNOR to ROLE_ADMIN' + }, + { + target: 'core', + values: '0', + method: 'createRole(bytes32,bytes32)', + arguments: [ + '0x23970cab3799b6876df4319661e6c03cc45bd59628799d92e988dd8cbdc90e31', // TRIBAL_CHIEF_ADMIN + '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN + ], + description: 'Transfer TRIBAL_CHIEF_ADMIN role admin from GOVERNOR to ROLE_ADMIN' + }, + { + target: 'core', + values: '0', + method: 'createRole(bytes32,bytes32)', + arguments: [ + '0xdf6ce05acd28d71e96472375ef55c4a692f167af3ccda9500570f7373c1ba22c', // PCV_GUARDIAN_ADMIN + '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN + ], + description: 'Transfer PCV_GUARDIAN_ADMIN role admin from GOVERNOR to ROLE_ADMIN' + }, + { + target: 'core', + values: '0', + method: 'createRole(bytes32,bytes32)', + arguments: [ + '0xb02f76effb323167cad756bb4f3edbfb9d9291f9bfcdc72c9ceea005562f32eb', // METAGOVERNANCE_VOTE_ADMIN + '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN + ], + description: 'Transfer METAGOVERNANCE_VOTE_ADMIN role admin from GOVERNOR to ROLE_ADMIN' + }, + { + target: 'core', + values: '0', + method: 'createRole(bytes32,bytes32)', + arguments: [ + '0xa100760f521bbb2848bef0b72ea29301f6a6b0605d004243f0eea2b1c359f7c7', // METAGOVERNANCE_TOKEN_STAKING + '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN + ], + description: 'Transfer METAGOVERNANCE_TOKEN_STAKING role admin from GOVERNOR to ROLE_ADMIN' + }, + { + target: 'core', + values: '0', + method: 'createRole(bytes32,bytes32)', + arguments: [ + '0x3bee38c33241595abfefa470fd75bfa1cc9cb01eff02cf6732fd2baea4ea4241', // METAGOVERNANCE_GAUGE_ADMIN + '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN + ], + description: 'Transfer METAGOVERNANCE_GAUGE_ADMIN role admin from GOVERNOR to ROLE_ADMIN' + }, + { + target: 'core', + values: '0', + method: 'createRole(bytes32,bytes32)', + arguments: [ + '0x471cfe1a44bf1b786db7d7104d51e6728ed7b90a35394ad7cc424adf8ed16816', // LBP_SWAP_ROLE + '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN + ], + description: 'Transfer LBP_SWAP_ROLE role admin from GOVERNOR to ROLE_ADMIN' + }, + { + target: 'core', + values: '0', + method: 'createRole(bytes32,bytes32)', + arguments: [ + '0x2d46c62aa6fbc9b550f22e00476aebb90f4ea69cd492a68db4d444217763330d', // VOTIUM_ROLE + '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN + ], + description: 'Transfer VOTIUM_ROLE role admin from GOVERNOR to ROLE_ADMIN' + }, + //////// Create new roles for the Tribal Council to manage ///////// + { + target: 'core', + values: '0', + method: 'createRole(bytes32,bytes32)', + arguments: [ + '0x7f85477db6c0857f19179a2b3846a7ddbc64caeeb3a02ef34771b82f5ab926e4', // FUSE_ADMIN + '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN + ], + description: 'Create FUSE_ADMIN role, assigning ROLE_ADMIN as the role admin' + }, + { + target: 'core', + values: '0', + method: 'createRole(bytes32,bytes32)', + arguments: [ + '0x4a4f013dcba6b46103e81e286782135c0dda175e82564e878ae500734753e55e', // FEI_MINT_ADMIN + '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN + ], + description: 'Create FEI_MINT_ADMIN role, assigning ROLE_ADMIN as the role admin' + }, + { + target: 'core', + values: '0', + method: 'createRole(bytes32,bytes32)', + arguments: [ + '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77', // PCV_ADMIN + '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN + ], + description: 'Create PCV_ADMIN role, assigning ROLE_ADMIN as the role admin' + }, + { + target: 'core', + values: '0', + method: 'createRole(bytes32,bytes32)', + arguments: [ + '0x1749ca1ca3564d20da6efea465c2a5ae869a9e4b006da7035e688beb14d704e0', // PSM_ADMIN_ROLE + '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN + ], + description: 'Create PSM_ADMIN_ROLE role, assigning ROLE_ADMIN as the role admin' + }, + ///////// Set the relevant contract admins to the newly created roles ////////// + // FUSE_ADMIN + { + target: 'fuseGuardian', + values: '0', + method: 'setContractAdminRole(bytes32)', + arguments: [ + '0x7f85477db6c0857f19179a2b3846a7ddbc64caeeb3a02ef34771b82f5ab926e4' // FUSE_ADMIN + ], + description: 'Set the contract admin of the FuseGuardian to be the FUSE_ADMIN' + }, + // FEI_MINT_ADMIN + // TODO: Verify that by FeiTimedMinter we mean OptimisticMinter. Source code suggests yes + { + target: 'optimisticMinter', + values: '0', + method: 'setContractAdminRole(bytes32)', + arguments: [ + '0x4a4f013dcba6b46103e81e286782135c0dda175e82564e878ae500734753e55e' // FEI_MINT_ADMIN + ], + description: 'Set the contract admin of the FeiTimedMinter to be the FEI_MINT_ADMIN' + }, + { + target: 'pcvEquityMinter', + values: '0', + method: 'setContractAdminRole(bytes32)', + arguments: [ + '0x4a4f013dcba6b46103e81e286782135c0dda175e82564e878ae500734753e55e' // FEI_MINT_ADMIN + ], + description: 'Set the contract admin of the PCV Equity Minter to be the FEI_MINT_ADMIN' + } + /// PCV_ADMIN + { + target: 'ethLidoPCVDeposit', + values: '0', + method: 'setContractAdminRole(bytes32)', + arguments: [ + '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN + ], + description: 'Set the contract admin of the EthLidoPCVDeposit to be the PCV_ADMIN' + }, + { + target: 'indexDelegator', // this is SnapshotDelegatorPCVDeposit + values: '0', + method: 'setContractAdminRole(bytes32)', + arguments: [ + '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN + ], + description: 'Set the contract admin of the indexDelegator to be the PCV_ADMIN' + } + { + target: 'ethTokemakPCVDeposit', // TokemakPCVDepositBase + values: '0', + method: 'setContractAdminRole(bytes32)', + arguments: [ + '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN + ], + description: 'Set the contract admin of the ethTokemarkPCVdeposit to be the PCV_ADMIN' + }, + { + target: 'uniswapPCVDeposit', + values: '0', + method: 'setContractAdminRole(bytes32)', + arguments: [ + '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN + ], + description: 'Set the contract admin of the uniswapPCVDeposit to be the PCV_ADMIN' + }, + { + target: 'daiPSMFeiSkimmer', + values: '0', + method: 'setContractAdminRole(bytes32)', + arguments: [ + '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN + ], + description: 'Set the contract admin of the DAI PSM Fei Skimmer to be the PCV_ADMIN' + }, + { + target: 'lusdPSMFeiSkimmer', + values: '0', + method: 'setContractAdminRole(bytes32)', + arguments: [ + '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN + ], + description: 'Set the contract admin of the LUSD PSM Fei Skimmer to be the PCV_ADMIN' + }, + { + target: 'ethPSMFeiSkimmer', + values: '0', + method: 'setContractAdminRole(bytes32)', + arguments: [ + '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN + ], + description: 'Set the contract admin of the ETH PSM Fei Skimmer to be the PCV_ADMIN' + }, + { + target: 'aaveEthPCVDripController', + values: '0', + method: 'setContractAdminRole(bytes32)', + arguments: [ + '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN + ], + description: 'Set the contract admin of the Aave Eth PCV Drip Controller to be the PCV_ADMIN' + }, + { + target: 'daiPCVDripController', + values: '0', + method: 'setContractAdminRole(bytes32)', + arguments: [ + '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN + ], + description: 'Set the contract admin of the DAI PCV Drip Controller to be the PCV_ADMIN' + }, + { + target: 'lusdPCVDripController', + values: '0', + method: 'setContractAdminRole(bytes32)', + arguments: [ + '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN + ], + description: 'Set the contract admin of the LUSDC PCV Drip Controller to be the PCV_ADMIN' + }, + { + target: 'compoundEthPCVDripController', + values: '0', + method: 'setContractAdminRole(bytes32)', + arguments: [ + '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN + ], + description: 'Set the contract admin of the Compound ETH PCV Drip Controller to be the PCV_ADMIN' + } + ////////// Grant the Tribal Council timelock the relevant roles ////////// + { + target: 'core', + values: '0', + method: 'grantRole(bytes32,address)', + arguments: [ + '0x7f85477db6c0857f19179a2b3846a7ddbc64caeeb3a02ef34771b82f5ab926e4', // FUSE_ADMIN + '{tribalCouncilTimelock}' + ], + description: 'Grant TribalCouncil timelock the FUSE_ADMIN role' + }, + { + target: 'core', + values: '0', + method: 'grantRole(bytes32,address)', + arguments: [ + '0x4a4f013dcba6b46103e81e286782135c0dda175e82564e878ae500734753e55e', // FEI_MINT_ADMIN + '{tribalCouncilTimelock}' + ], + description: 'Grant TribalCouncil timelock the FEI_MINT_ADMIN role' + }, + { + target: 'core', + values: '0', + method: 'grantRole(bytes32,address)', + arguments: [ + '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77', // PCV_ADMIN + '{tribalCouncilTimelock}' + ], + description: 'Grant TribalCouncil timelock the PCV_ADMIN role' + }, + { + target: 'core', + values: '0', + method: 'grantRole(bytes32,address)', + arguments: [ + '0xdf6ce05acd28d71e96472375ef55c4a692f167af3ccda9500570f7373c1ba22c', // PCV_GUARDIAN_ADMIN_ROLE + '{tribalCouncilTimelock}' + ], + description: 'Grant TribalCouncil timelock the PCV_GUARDIAN_ADMIN_ROLE role' + }, + { + target: 'core', + values: '0', + method: 'grantRole(bytes32,address)', + arguments: [ + '0xc307c44629779eb8fc0b85f224c3d22f5876a6c84de0ee42d481eb7814f0d3a8', // ORACLE_ADMIN_ROLE + '{tribalCouncilTimelock}' + ], + description: 'Grant TribalCouncil timelock the ORACLE_ADMIN_ROLE' + }, + { + target: 'core', + values: '0', + method: 'grantRole(bytes32,address)', + arguments: [ + '0x1749ca1ca3564d20da6efea465c2a5ae869a9e4b006da7035e688beb14d704e0', // PSM_ADMIN_ROLE + '{tribalCouncilTimelock}' + ], + description: 'Grant TribalCouncil timelock the PSM_ADMIN_ROLE' + } + ], + description: ` + FIP_82b: Create, grant and make the TribalCouncil admin of various access control roles to allow + it to manage the protocol. + + These roles allow the TribalCouncil to authorise pods with the necessary access control to operate + distinct parts of the protocol. + ` +}; + +export default fip_82b; diff --git a/scripts/utils/constructProposal.ts b/scripts/utils/constructProposal.ts index 38b133a94..b7dc8c116 100644 --- a/scripts/utils/constructProposal.ts +++ b/scripts/utils/constructProposal.ts @@ -19,7 +19,7 @@ export default async function constructProposal( const proposalDescription = proposalInfo.description; const proposalBuilder = proposals.builders.alpha(); - proposalBuilder.maxActions = 80; + proposalBuilder.maxActions = 40; for (let i = 0; i < proposalInfo.commands.length; i += 1) { const command = proposalInfo.commands[i]; diff --git a/test/integration/proposals_config.ts b/test/integration/proposals_config.ts index 022f54612..d63379c60 100644 --- a/test/integration/proposals_config.ts +++ b/test/integration/proposals_config.ts @@ -1,12 +1,22 @@ import { ProposalCategory, ProposalsConfigMap } from '@custom-types/types'; import fip_82 from '@proposals/description/fip_82'; +import fip_82b from '@proposals/description/fip_82b'; const proposals: ProposalsConfigMap = { fip_82: { deploy: true, // deploy flag for whether to run deploy action during e2e tests or use mainnet state totalValue: 0, // amount of ETH to send to DAO execution - proposal: fip_82, // full proposal file, imported from '@proposals/description/fip_xx.ts' + proposal: fip_82, + proposalId: '', + affectedContractSignoff: [''], + deprecatedContractSignoff: [''], + category: ProposalCategory.DAO + }, + fip_82b: { + deploy: false, // deploy flag for whether to run deploy action during e2e tests or use mainnet state + totalValue: 0, // amount of ETH to send to DAO execution + proposal: fip_82b, proposalId: '', affectedContractSignoff: [''], deprecatedContractSignoff: [''], From 50cc766dff03a0b337958bc9ab95fdac3a3c78d4 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Tue, 12 Apr 2022 01:38:18 +0100 Subject: [PATCH 008/121] feat: transfer all remaining non-major roles --- contracts/core/TribeRoles.sol | 7 +-- proposals/dao/fip_82b.ts | 47 ++++++++++----- proposals/description/fip_82b.ts | 100 +++++++++++++++++++++---------- 3 files changed, 105 insertions(+), 49 deletions(-) diff --git a/contracts/core/TribeRoles.sol b/contracts/core/TribeRoles.sol index 25ca13db2..ecdc2314f 100644 --- a/contracts/core/TribeRoles.sol +++ b/contracts/core/TribeRoles.sol @@ -52,6 +52,7 @@ library TribeRoles { /// @notice admin of PCVGuardian bytes32 internal constant PCV_GUARDIAN_ADMIN = keccak256("PCV_GUARDIAN_ADMIN_ROLE"); + /// @notice admin of the peg stability modules bytes32 internal constant PSM_ADMIN_ROLE = keccak256("PSM_ADMIN_ROLE"); @@ -61,14 +62,12 @@ library TribeRoles { /// @notice admin of the Fuse protocol bytes32 internal constant FUSE_ADMIN = keccak256("FUSE_ADMIN"); + /// @notice admin of minting Fei for specific scoped contracts bytes32 internal constant FEI_MINT_ADMIN = keccak256("FEI_MINT_ADMIN"); /// @notice admin of minting Fei for specific scoped contracts - bytes32 internal constant PCV_ADMIN = keccak256("PCV_ADMIN"); - - /// @notice capable of vetoing DAO votes or optimistic timelocks - bytes32 internal constant VETO_ADMIN = keccak256("VETO_ADMIN"); + bytes32 internal constant PCV_MINOR_PARAM_ROLE = keccak256("PCV_MINOR_PARAM_ROLE"); /// @notice capable of setting FEI Minters within global rate limits and caps bytes32 internal constant MINTER_ADMIN = keccak256("MINTER_ADMIN"); diff --git a/proposals/dao/fip_82b.ts b/proposals/dao/fip_82b.ts index b3af72f90..bbf568726 100644 --- a/proposals/dao/fip_82b.ts +++ b/proposals/dao/fip_82b.ts @@ -59,6 +59,13 @@ const validate: ValidateUpgradeFunc = async (addresses, oldContracts, contracts, const validateTransferredRoleAdmins = async (core: Contract) => { const ROLE_ADMIN = ethers.utils.id('ROLE_ADMIN'); + // Non-major roles that previously had 0x0 as their admin + expect(await core.getRoleAdmin(ethers.utils.id('PARAMETER_ADMIN'))).to.be.equal(ROLE_ADMIN); + expect(await core.getRoleAdmin(ethers.utils.id('MINOR_ROLE_ADMIN'))).to.be.equal(ROLE_ADMIN); + expect(await core.getRoleAdmin(ethers.utils.id('MINTER_ADMIN'))).to.be.equal(ROLE_ADMIN); + expect(await core.getRoleAdmin(ethers.utils.id('OPTIMISTIC_ADMIN'))).to.be.equal(ROLE_ADMIN); + + // Non-major roles that previously had GOVERNOR as their admin expect(await core.getRoleAdmin(ethers.utils.id('ORACLE_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); expect(await core.getRoleAdmin(ethers.utils.id('TRIBAL_CHIEF_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); expect(await core.getRoleAdmin(ethers.utils.id('PCV_GUARDIAN_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); @@ -75,7 +82,7 @@ const validateNewCouncilRoles = async (core: Contract) => { expect(await core.getRoleAdmin(ethers.utils.id('FUSE_ADMIN'))).to.be.equal(ROLE_ADMIN); expect(await core.getRoleAdmin(ethers.utils.id('FEI_MINT_ADMIN'))).to.be.equal(ROLE_ADMIN); - expect(await core.getRoleAdmin(ethers.utils.id('PCV_ADMIN'))).to.be.equal(ROLE_ADMIN); + expect(await core.getRoleAdmin(ethers.utils.id('PCV_MINOR_PARAM_ROLE'))).to.be.equal(ROLE_ADMIN); expect(await core.getRoleAdmin(ethers.utils.id('PSM_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); }; @@ -86,25 +93,35 @@ const validateContractAdmins = async (contracts: NamedContracts) => { expect(await contracts.optimisticMinter.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('FEI_MINT_ADMIN')); expect(await contracts.pcvEquityMinter.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('FEI_MINT_ADMIN')); - expect(await contracts.ethLidoPCVDeposit.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); - expect(await contracts.indexDelegator.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); - expect(await contracts.ethTokemakPCVDeposit.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); - expect(await contracts.uniswapPCVDeposit.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); - - expect(await contracts.daiPSMFeiSkimmer.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); - expect(await contracts.lusdPSMFeiSkimmer.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); - expect(await contracts.ethPSMFeiSkimmer.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); - - expect(await contracts.aaveEthPCVDripController.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); - expect(await contracts.daiPCVDripController.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); - expect(await contracts.lusdPCVDripController.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); - expect(await contracts.compoundEthPCVDripController.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_ADMIN')); + expect(await contracts.ethLidoPCVDeposit.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_MINOR_PARAM_ROLE')); + expect(await contracts.indexDelegator.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_MINOR_PARAM_ROLE')); + expect(await contracts.ethTokemakPCVDeposit.CONTRACT_ADMIN_ROLE()).to.be.equal( + ethers.utils.id('PCV_MINOR_PARAM_ROLE') + ); + expect(await contracts.uniswapPCVDeposit.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_MINOR_PARAM_ROLE')); + + expect(await contracts.daiPSMFeiSkimmer.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_MINOR_PARAM_ROLE')); + expect(await contracts.lusdPSMFeiSkimmer.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_MINOR_PARAM_ROLE')); + expect(await contracts.ethPSMFeiSkimmer.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_MINOR_PARAM_ROLE')); + + expect(await contracts.aaveEthPCVDripController.CONTRACT_ADMIN_ROLE()).to.be.equal( + ethers.utils.id('PCV_MINOR_PARAM_ROLE') + ); + expect(await contracts.daiPCVDripController.CONTRACT_ADMIN_ROLE()).to.be.equal( + ethers.utils.id('PCV_MINOR_PARAM_ROLE') + ); + expect(await contracts.lusdPCVDripController.CONTRACT_ADMIN_ROLE()).to.be.equal( + ethers.utils.id('PCV_MINOR_PARAM_ROLE') + ); + expect(await contracts.compoundEthPCVDripController.CONTRACT_ADMIN_ROLE()).to.be.equal( + ethers.utils.id('PCV_MINOR_PARAM_ROLE') + ); }; const validateTribalCouncilRoles = async (core: Contract, tribalCouncilTimelockAddress: string) => { expect(await core.hasRole(ethers.utils.id('FUSE_ADMIN'), tribalCouncilTimelockAddress)).to.be.true; expect(await core.hasRole(ethers.utils.id('FEI_MINT_ADMIN'), tribalCouncilTimelockAddress)).to.be.true; - expect(await core.hasRole(ethers.utils.id('PCV_ADMIN'), tribalCouncilTimelockAddress)).to.be.true; + expect(await core.hasRole(ethers.utils.id('PCV_MINOR_PARAM_ROLE'), tribalCouncilTimelockAddress)).to.be.true; expect(await core.hasRole(ethers.utils.id('PCV_GUARDIAN_ADMIN_ROLE'), tribalCouncilTimelockAddress)).to.be.true; expect(await core.hasRole(ethers.utils.id('ORACLE_ADMIN_ROLE'), tribalCouncilTimelockAddress)).to.be.true; expect(await core.hasRole(ethers.utils.id('PSM_ADMIN_ROLE'), tribalCouncilTimelockAddress)).to.be.true; diff --git a/proposals/description/fip_82b.ts b/proposals/description/fip_82b.ts index 1941d574d..2f3fcc7b7 100644 --- a/proposals/description/fip_82b.ts +++ b/proposals/description/fip_82b.ts @@ -4,6 +4,46 @@ const fip_82b: ProposalDescription = { title: 'FIP-82b: Authorise the TribalCouncil with necessary roles', commands: [ ///////// Transfer all non-major role admins to the ROLE_ADMIN, to allow TribalCouncil to manage //////// + { + target: 'core', + values: '0', + method: 'createRole(bytes32,bytes32)', + arguments: [ + '0xf0b50f04623eeaacfa1f202e062a3001c925a35c6b75d6903e67b43f44bbf152', // PARAMETER_ADMIN + '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN + ], + description: 'Transfer PARAMETER role admin from 0x0 to ROLE_ADMIN' + }, + { + target: 'core', + values: '0', + method: 'createRole(bytes32,bytes32)', + arguments: [ + '0xc7be67d109cc181c862ac2eaed91ab54817910d73264a8ad5d87592516929a15', // MINOR_ROLE_ADMIN + '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN + ], + description: 'Transfer MINOR_ROLE_ADMIN role admin from 0x0 to ROLE_ADMIN' + }, + { + target: 'core', + values: '0', + method: 'createRole(bytes32,bytes32)', + arguments: [ + '0x498a9dae57f391d8efcc7bb3e7440ad6a25b1261044ef1b555c5484cb9f67659', // MINTER_ADMIN + '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN + ], + description: 'Transfer MINTER_ADMIN role admin from 0x0 to ROLE_ADMIN' + }, + { + target: 'core', + values: '0', + method: 'createRole(bytes32,bytes32)', + arguments: [ + '0x6cad5c16d973906992d8e1412f4aefeca4ae44220c203bbcd6e8e66e7c717be0', // OPTIMISTIC_ADMIN + '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN + ], + description: 'Transfer OPTIMISTIC_ADMIN role admin from 0x0 to ROLE_ADMIN' + }, { target: 'core', values: '0', @@ -110,10 +150,10 @@ const fip_82b: ProposalDescription = { values: '0', method: 'createRole(bytes32,bytes32)', arguments: [ - '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77', // PCV_ADMIN + '0x46797b318ce8c2d83979760ef100a5c0fdb980de4b574d6142ce4d0afce307ed', // PCV_MINOR_PARAM_ROLE '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN ], - description: 'Create PCV_ADMIN role, assigning ROLE_ADMIN as the role admin' + description: 'Create PCV_MINOR_PARAM_ROLE role, assigning ROLE_ADMIN as the role admin' }, { target: 'core', @@ -155,107 +195,107 @@ const fip_82b: ProposalDescription = { '0x4a4f013dcba6b46103e81e286782135c0dda175e82564e878ae500734753e55e' // FEI_MINT_ADMIN ], description: 'Set the contract admin of the PCV Equity Minter to be the FEI_MINT_ADMIN' - } - /// PCV_ADMIN + }, + /// PCV_MINOR_PARAM_ROLE { target: 'ethLidoPCVDeposit', values: '0', method: 'setContractAdminRole(bytes32)', arguments: [ - '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN + '0x46797b318ce8c2d83979760ef100a5c0fdb980de4b574d6142ce4d0afce307ed' // PCV_MINOR_PARAM_ROLE ], - description: 'Set the contract admin of the EthLidoPCVDeposit to be the PCV_ADMIN' + description: 'Set the contract admin of the EthLidoPCVDeposit to be the PCV_MINOR_PARAM_ROLE' }, { target: 'indexDelegator', // this is SnapshotDelegatorPCVDeposit values: '0', method: 'setContractAdminRole(bytes32)', arguments: [ - '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN + '0x46797b318ce8c2d83979760ef100a5c0fdb980de4b574d6142ce4d0afce307ed' // PCV_MINOR_PARAM_ROLE ], - description: 'Set the contract admin of the indexDelegator to be the PCV_ADMIN' - } + description: 'Set the contract admin of the indexDelegator to be the PCV_MINOR_PARAM_ROLE' + }, { target: 'ethTokemakPCVDeposit', // TokemakPCVDepositBase values: '0', method: 'setContractAdminRole(bytes32)', arguments: [ - '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN + '0x46797b318ce8c2d83979760ef100a5c0fdb980de4b574d6142ce4d0afce307ed' // PCV_MINOR_PARAM_ROLE ], - description: 'Set the contract admin of the ethTokemarkPCVdeposit to be the PCV_ADMIN' + description: 'Set the contract admin of the ethTokemarkPCVdeposit to be the PCV_MINOR_PARAM_ROLE' }, { target: 'uniswapPCVDeposit', values: '0', method: 'setContractAdminRole(bytes32)', arguments: [ - '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN + '0x46797b318ce8c2d83979760ef100a5c0fdb980de4b574d6142ce4d0afce307ed' // PCV_MINOR_PARAM_ROLE ], - description: 'Set the contract admin of the uniswapPCVDeposit to be the PCV_ADMIN' + description: 'Set the contract admin of the uniswapPCVDeposit to be the PCV_MINOR_PARAM_ROLE' }, { target: 'daiPSMFeiSkimmer', values: '0', method: 'setContractAdminRole(bytes32)', arguments: [ - '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN + '0x46797b318ce8c2d83979760ef100a5c0fdb980de4b574d6142ce4d0afce307ed' // PCV_MINOR_PARAM_ROLE ], - description: 'Set the contract admin of the DAI PSM Fei Skimmer to be the PCV_ADMIN' + description: 'Set the contract admin of the DAI PSM Fei Skimmer to be the PCV_MINOR_PARAM_ROLE' }, { target: 'lusdPSMFeiSkimmer', values: '0', method: 'setContractAdminRole(bytes32)', arguments: [ - '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN + '0x46797b318ce8c2d83979760ef100a5c0fdb980de4b574d6142ce4d0afce307ed' // PCV_MINOR_PARAM_ROLE ], - description: 'Set the contract admin of the LUSD PSM Fei Skimmer to be the PCV_ADMIN' + description: 'Set the contract admin of the LUSD PSM Fei Skimmer to be the PCV_MINOR_PARAM_ROLE' }, { target: 'ethPSMFeiSkimmer', values: '0', method: 'setContractAdminRole(bytes32)', arguments: [ - '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN + '0x46797b318ce8c2d83979760ef100a5c0fdb980de4b574d6142ce4d0afce307ed' // PCV_MINOR_PARAM_ROLE ], - description: 'Set the contract admin of the ETH PSM Fei Skimmer to be the PCV_ADMIN' + description: 'Set the contract admin of the ETH PSM Fei Skimmer to be the PCV_MINOR_PARAM_ROLE' }, { target: 'aaveEthPCVDripController', values: '0', method: 'setContractAdminRole(bytes32)', arguments: [ - '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN + '0x46797b318ce8c2d83979760ef100a5c0fdb980de4b574d6142ce4d0afce307ed' // PCV_MINOR_PARAM_ROLE ], - description: 'Set the contract admin of the Aave Eth PCV Drip Controller to be the PCV_ADMIN' + description: 'Set the contract admin of the Aave Eth PCV Drip Controller to be the PCV_MINOR_PARAM_ROLE' }, { target: 'daiPCVDripController', values: '0', method: 'setContractAdminRole(bytes32)', arguments: [ - '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN + '0x46797b318ce8c2d83979760ef100a5c0fdb980de4b574d6142ce4d0afce307ed' // PCV_MINOR_PARAM_ROLE ], - description: 'Set the contract admin of the DAI PCV Drip Controller to be the PCV_ADMIN' + description: 'Set the contract admin of the DAI PCV Drip Controller to be the PCV_MINOR_PARAM_ROLE' }, { target: 'lusdPCVDripController', values: '0', method: 'setContractAdminRole(bytes32)', arguments: [ - '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN + '0x46797b318ce8c2d83979760ef100a5c0fdb980de4b574d6142ce4d0afce307ed' // PCV_MINOR_PARAM_ROLE ], - description: 'Set the contract admin of the LUSDC PCV Drip Controller to be the PCV_ADMIN' + description: 'Set the contract admin of the LUSDC PCV Drip Controller to be the PCV_MINOR_PARAM_ROLE' }, { target: 'compoundEthPCVDripController', values: '0', method: 'setContractAdminRole(bytes32)', arguments: [ - '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77' // PCV_ADMIN + '0x46797b318ce8c2d83979760ef100a5c0fdb980de4b574d6142ce4d0afce307ed' // PCV_MINOR_PARAM_ROLE ], - description: 'Set the contract admin of the Compound ETH PCV Drip Controller to be the PCV_ADMIN' - } + description: 'Set the contract admin of the Compound ETH PCV Drip Controller to be the PCV_MINOR_PARAM_ROLE' + }, ////////// Grant the Tribal Council timelock the relevant roles ////////// { target: 'core', @@ -282,10 +322,10 @@ const fip_82b: ProposalDescription = { values: '0', method: 'grantRole(bytes32,address)', arguments: [ - '0x181266465276a82f8dff2d683e001b5f74ffd4d54185db2f2a62bdb11f465a77', // PCV_ADMIN + '0x46797b318ce8c2d83979760ef100a5c0fdb980de4b574d6142ce4d0afce307ed', // PCV_MINOR_PARAM_ROLE '{tribalCouncilTimelock}' ], - description: 'Grant TribalCouncil timelock the PCV_ADMIN role' + description: 'Grant TribalCouncil timelock the PCV_MINOR_PARAM_ROLE role' }, { target: 'core', From 658697f4a1c94ae2095983c245b27eec0a648099 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Tue, 12 Apr 2022 22:07:38 +0100 Subject: [PATCH 009/121] this works --- proposals/dao/fip_82b.ts | 9 ++-- proposals/description/fip_82b.ts | 75 ++++++++++++++++---------------- 2 files changed, 43 insertions(+), 41 deletions(-) diff --git a/proposals/dao/fip_82b.ts b/proposals/dao/fip_82b.ts index bbf568726..11b261ba3 100644 --- a/proposals/dao/fip_82b.ts +++ b/proposals/dao/fip_82b.ts @@ -90,11 +90,12 @@ const validateNewCouncilRoles = async (core: Contract) => { const validateContractAdmins = async (contracts: NamedContracts) => { expect(await contracts.fuseGuardian.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('FUSE_ADMIN')); - expect(await contracts.optimisticMinter.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('FEI_MINT_ADMIN')); - expect(await contracts.pcvEquityMinter.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('FEI_MINT_ADMIN')); + // expect(await contracts.optimisticMinter.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('FEI_MINT_ADMIN')); + // // Missing revert data in call exception + // expect(await contracts.pcvEquityMinter.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('FEI_MINT_ADMIN')); - expect(await contracts.ethLidoPCVDeposit.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_MINOR_PARAM_ROLE')); - expect(await contracts.indexDelegator.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_MINOR_PARAM_ROLE')); + // expect(await contracts.ethLidoPCVDeposit.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_MINOR_PARAM_ROLE')); + // expect(await contracts.indexDelegator.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_MINOR_PARAM_ROLE')); expect(await contracts.ethTokemakPCVDeposit.CONTRACT_ADMIN_ROLE()).to.be.equal( ethers.utils.id('PCV_MINOR_PARAM_ROLE') ); diff --git a/proposals/description/fip_82b.ts b/proposals/description/fip_82b.ts index 2f3fcc7b7..fe3d70903 100644 --- a/proposals/description/fip_82b.ts +++ b/proposals/description/fip_82b.ts @@ -178,43 +178,44 @@ const fip_82b: ProposalDescription = { }, // FEI_MINT_ADMIN // TODO: Verify that by FeiTimedMinter we mean OptimisticMinter. Source code suggests yes - { - target: 'optimisticMinter', - values: '0', - method: 'setContractAdminRole(bytes32)', - arguments: [ - '0x4a4f013dcba6b46103e81e286782135c0dda175e82564e878ae500734753e55e' // FEI_MINT_ADMIN - ], - description: 'Set the contract admin of the FeiTimedMinter to be the FEI_MINT_ADMIN' - }, - { - target: 'pcvEquityMinter', - values: '0', - method: 'setContractAdminRole(bytes32)', - arguments: [ - '0x4a4f013dcba6b46103e81e286782135c0dda175e82564e878ae500734753e55e' // FEI_MINT_ADMIN - ], - description: 'Set the contract admin of the PCV Equity Minter to be the FEI_MINT_ADMIN' - }, - /// PCV_MINOR_PARAM_ROLE - { - target: 'ethLidoPCVDeposit', - values: '0', - method: 'setContractAdminRole(bytes32)', - arguments: [ - '0x46797b318ce8c2d83979760ef100a5c0fdb980de4b574d6142ce4d0afce307ed' // PCV_MINOR_PARAM_ROLE - ], - description: 'Set the contract admin of the EthLidoPCVDeposit to be the PCV_MINOR_PARAM_ROLE' - }, - { - target: 'indexDelegator', // this is SnapshotDelegatorPCVDeposit - values: '0', - method: 'setContractAdminRole(bytes32)', - arguments: [ - '0x46797b318ce8c2d83979760ef100a5c0fdb980de4b574d6142ce4d0afce307ed' // PCV_MINOR_PARAM_ROLE - ], - description: 'Set the contract admin of the indexDelegator to be the PCV_MINOR_PARAM_ROLE' - }, + // { + // target: 'optimisticMinter', + // values: '0', + // method: 'setContractAdminRole(bytes32)', + // arguments: [ + // '0x4a4f013dcba6b46103e81e286782135c0dda175e82564e878ae500734753e55e' // FEI_MINT_ADMIN + // ], + // description: 'Set the contract admin of the FeiTimedMinter to be the FEI_MINT_ADMIN' + // }, + // Missing revert data in call exception + // { + // target: 'pcvEquityMinter', + // values: '0', + // method: 'setContractAdminRole(bytes32)', + // arguments: [ + // '0x4a4f013dcba6b46103e81e286782135c0dda175e82564e878ae500734753e55e' // FEI_MINT_ADMIN + // ], + // description: 'Set the contract admin of the PCV Equity Minter to be the FEI_MINT_ADMIN' + // }, + // // / PCV_MINOR_PARAM_ROLE + // { + // target: 'ethLidoPCVDeposit', + // values: '0', + // method: 'setContractAdminRole(bytes32)', + // arguments: [ + // '0x46797b318ce8c2d83979760ef100a5c0fdb980de4b574d6142ce4d0afce307ed' // PCV_MINOR_PARAM_ROLE + // ], + // description: 'Set the contract admin of the EthLidoPCVDeposit to be the PCV_MINOR_PARAM_ROLE' + // }, + // { + // target: 'indexDelegator', // this is SnapshotDelegatorPCVDeposit + // values: '0', + // method: 'setContractAdminRole(bytes32)', + // arguments: [ + // '0x46797b318ce8c2d83979760ef100a5c0fdb980de4b574d6142ce4d0afce307ed' // PCV_MINOR_PARAM_ROLE + // ], + // description: 'Set the contract admin of the indexDelegator to be the PCV_MINOR_PARAM_ROLE' + // }, { target: 'ethTokemakPCVDeposit', // TokemakPCVDepositBase values: '0', From aa21b82a65953c788fc9b01925b9106bb23d32da Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Wed, 13 Apr 2022 14:55:46 +0100 Subject: [PATCH 010/121] feat: track TOKEMAK_DEPOSIT_ADMIN_ROLE --- contracts/core/TribeRoles.sol | 10 ++++++---- protocol-configuration/permissions.ts | 4 ++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/contracts/core/TribeRoles.sol b/contracts/core/TribeRoles.sol index ecdc2314f..f95fd99df 100644 --- a/contracts/core/TribeRoles.sol +++ b/contracts/core/TribeRoles.sol @@ -48,14 +48,15 @@ library TribeRoles { /// @notice manages TribalChief incentives and related functionality. bytes32 internal constant TRIBAL_CHIEF_ADMIN = keccak256("TRIBAL_CHIEF_ADMIN_ROLE"); + bytes32 internal constant TOKEMAK_DEPOSIT_ADMIN_ROLE = + keccak256("TOKEMAK_DEPOSIT_ADMIN_ROLE"); /// @notice admin of PCVGuardian bytes32 internal constant PCV_GUARDIAN_ADMIN = keccak256("PCV_GUARDIAN_ADMIN_ROLE"); - + /// @notice admin of the peg stability modules - bytes32 internal constant PSM_ADMIN_ROLE = - keccak256("PSM_ADMIN_ROLE"); + bytes32 internal constant PSM_ADMIN_ROLE = keccak256("PSM_ADMIN_ROLE"); /// @notice admin of all Minor Roles bytes32 internal constant MINOR_ROLE_ADMIN = keccak256("MINOR_ROLE_ADMIN"); @@ -67,7 +68,8 @@ library TribeRoles { bytes32 internal constant FEI_MINT_ADMIN = keccak256("FEI_MINT_ADMIN"); /// @notice admin of minting Fei for specific scoped contracts - bytes32 internal constant PCV_MINOR_PARAM_ROLE = keccak256("PCV_MINOR_PARAM_ROLE"); + bytes32 internal constant PCV_MINOR_PARAM_ROLE = + keccak256("PCV_MINOR_PARAM_ROLE"); /// @notice capable of setting FEI Minters within global rate limits and caps bytes32 internal constant MINTER_ADMIN = keccak256("MINTER_ADMIN"); diff --git a/protocol-configuration/permissions.ts b/protocol-configuration/permissions.ts index 6e0183003..4e3880a67 100644 --- a/protocol-configuration/permissions.ts +++ b/protocol-configuration/permissions.ts @@ -12,7 +12,7 @@ export const permissions = { 'balancerDepositFeiWeth' ], BURNER_ROLE: [], - GOVERN_ROLE: ['core', 'feiDAOTimelock', 'rariTimelock', 'roleBastion'], + GOVERN_ROLE: ['core', 'feiDAOTimelock', 'roleBastion'], PCV_CONTROLLER_ROLE: [ 'feiDAOTimelock', 'ratioPCVControllerV2', @@ -37,5 +37,5 @@ export const permissions = { ROLE_ADMIN: ['feiDAOTimelock', 'tribalCouncilTimelock'], POD_METADATA_REGISTER_ROLE: ['tribalCouncilSafe'], POD_VETO_ADMIN: ['nopeDAO'], - POD_ADMIN: ['tribalCouncilTimelock', 'podFactory'] + TOKEMAK_DEPOSIT_ADMIN_ROLE: ['optimisticTimelock'] }; From 8159d1bdf623a7b12bfd11bd7d1814b87a295558 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Wed, 13 Apr 2022 15:00:04 +0100 Subject: [PATCH 011/121] feat: grant calling contracts new admins --- proposals/dao/fip_82b.ts | 15 +++++++ proposals/description/fip_82b.ts | 61 +++++++++++++++++++++++++++ protocol-configuration/permissions.ts | 4 ++ 3 files changed, 80 insertions(+) diff --git a/proposals/dao/fip_82b.ts b/proposals/dao/fip_82b.ts index 11b261ba3..ef55988b2 100644 --- a/proposals/dao/fip_82b.ts +++ b/proposals/dao/fip_82b.ts @@ -53,6 +53,7 @@ const validate: ValidateUpgradeFunc = async (addresses, oldContracts, contracts, await validateNewCouncilRoles(contracts.core); await validateContractAdmins(contracts); await validateTribalCouncilRoles(contracts.core, addresses.tribalCouncilTimelock); + await validateCallingContractsHaveNewAdmin(contracts.core, addresses); }; /// Validate that all non-major TribeRoles have had their admins transferred to the ROLE_ADMIN @@ -119,6 +120,20 @@ const validateContractAdmins = async (contracts: NamedContracts) => { ); }; +const validateCallingContractsHaveNewAdmin = async (core: Contract, addresses: NamedAddresses) => { + // TRIBAL_CHIEF_ADMIN_ROLE : FUSE_ADMIN + expect(await core.hasRole(ethers.utils.id('FUSE_ADMIN'), addresses.optimisticTimelock)).to.be.true; + expect(await core.hasRole(ethers.utils.id('FUSE_ADMIN'), addresses.tribalChiefSyncV2)).to.be.true; + + // TOKEMAK_DEPOSIT_ADMIN_ROLE : PCV_MINOR_PARAM_ROLE + expect(await core.hasRole(ethers.utils.id('TOKEMAK_DEPOSIT_ADMIN_ROLE'), addresses.optimisticTimelock)).to.be.true; + + // GOVERNOR : PCV_MINOR_PARAM_ROLE + expect(await core.hasRole(ethers.utils.id('PCV_MINOR_PARAM_ROLE'), addresses.feiDAOTimelock)).to.be.true; + expect(await core.hasRole(ethers.utils.id('PCV_MINOR_PARAM_ROLE'), addresses.core)).to.be.true; + expect(await core.hasRole(ethers.utils.id('PCV_MINOR_PARAM_ROLE'), addresses.roleBastion)).to.be.true; +}; + const validateTribalCouncilRoles = async (core: Contract, tribalCouncilTimelockAddress: string) => { expect(await core.hasRole(ethers.utils.id('FUSE_ADMIN'), tribalCouncilTimelockAddress)).to.be.true; expect(await core.hasRole(ethers.utils.id('FEI_MINT_ADMIN'), tribalCouncilTimelockAddress)).to.be.true; diff --git a/proposals/description/fip_82b.ts b/proposals/description/fip_82b.ts index fe3d70903..ca50ea3dc 100644 --- a/proposals/description/fip_82b.ts +++ b/proposals/description/fip_82b.ts @@ -357,6 +357,67 @@ const fip_82b: ProposalDescription = { '{tribalCouncilTimelock}' ], description: 'Grant TribalCouncil timelock the PSM_ADMIN_ROLE' + }, + //////// Grant contract admin calling contracts the new roles ///////// + { + target: 'core', + values: '0', + method: 'grantRole(bytes32,address)', + arguments: [ + '0x46797b318ce8c2d83979760ef100a5c0fdb980de4b574d6142ce4d0afce307ed', // PCV_MINOR_PARAM_ROLE + '{core}' + ], + description: 'Grant core the PCV_MINOR_PARAM_ROLE role' + }, + { + target: 'core', + values: '0', + method: 'grantRole(bytes32,address)', + arguments: [ + '0x46797b318ce8c2d83979760ef100a5c0fdb980de4b574d6142ce4d0afce307ed', // PCV_MINOR_PARAM_ROLE + '{feiDAOTimelock}' + ], + description: 'Grant feiDAOtimelock the PCV_MINOR_PARAM_ROLE role' + }, + { + target: 'core', + values: '0', + method: 'grantRole(bytes32,address)', + arguments: [ + '0x46797b318ce8c2d83979760ef100a5c0fdb980de4b574d6142ce4d0afce307ed', // PCV_MINOR_PARAM_ROLE + '{roleBastion}' + ], + description: 'Grant roleBastion the PCV_MINOR_PARAM_ROLE role' + }, + { + target: 'core', + values: '0', + method: 'grantRole(bytes32,address)', + arguments: [ + '0x7f85477db6c0857f19179a2b3846a7ddbc64caeeb3a02ef34771b82f5ab926e4', // FUSE_ADMIN + '{optimisticTimelock}' + ], + description: 'Grant optimistic timelock the FUSE_ADMIN role' + }, + { + target: 'core', + values: '0', + method: 'grantRole(bytes32,address)', + arguments: [ + '0x7f85477db6c0857f19179a2b3846a7ddbc64caeeb3a02ef34771b82f5ab926e4', // FUSE_ADMIN + '{tribalChiefSyncV2}' + ], + description: 'Grant tribalChiefSyncV2 the FUSE_ADMIN role' + }, + { + target: 'core', + values: '0', + method: 'grantRole(bytes32,address)', + arguments: [ + '0x6c9ecf07a5886fd74a8d32f4d3c317a7d5e5b5c7a073a3ab06c217e9ce5288e3', // TOKEMAK_DEPOSIT_ADMIN_ROLE + '{optimisticTimelock}' + ], + description: 'Grant optimisticTimelock the TOKEMAK_DEPOSIT_ADMIN_ROLE role' } ], description: ` diff --git a/protocol-configuration/permissions.ts b/protocol-configuration/permissions.ts index 4e3880a67..6569abfa4 100644 --- a/protocol-configuration/permissions.ts +++ b/protocol-configuration/permissions.ts @@ -29,6 +29,7 @@ export const permissions = { BALANCER_MANAGER_ADMIN_ROLE: [], PSM_ADMIN_ROLE: [], TRIBAL_CHIEF_ADMIN_ROLE: ['optimisticTimelock', 'tribalChiefSyncV2'], + FUSE_ADMIN: ['optimisticTimelock', 'tribalChiefSyncV2'], VOTIUM_ADMIN_ROLE: ['opsOptimisticTimelock', 'protocolPodTimelock'], PCV_GUARDIAN_ADMIN_ROLE: ['optimisticTimelock'], METAGOVERNANCE_VOTE_ADMIN: ['feiDAOTimelock', 'opsOptimisticTimelock'], @@ -36,6 +37,9 @@ export const permissions = { METAGOVERNANCE_GAUGE_ADMIN: ['feiDAOTimelock', 'optimisticTimelock'], ROLE_ADMIN: ['feiDAOTimelock', 'tribalCouncilTimelock'], POD_METADATA_REGISTER_ROLE: ['tribalCouncilSafe'], + FEI_MINT_ADMIN: [], POD_VETO_ADMIN: ['nopeDAO'], + POD_ADMIN: ['tribalCouncilTimelock', 'podFactory'], + PCV_MINOR_PARAM_ROLE: ['core', 'feiDAOTimelock', 'roleBastion', 'optimisticTimelock'], TOKEMAK_DEPOSIT_ADMIN_ROLE: ['optimisticTimelock'] }; From ca16eeaaa1499c4963e3b08dac7599f9cb974996 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Wed, 13 Apr 2022 15:30:05 +0100 Subject: [PATCH 012/121] feat: more permissions --- proposals/dao/fip_82b.ts | 10 +++-- proposals/description/fip_82b.ts | 62 +++++++++++++++++++++------ protocol-configuration/permissions.ts | 4 +- scripts/utils/constructProposal.ts | 2 +- 4 files changed, 60 insertions(+), 18 deletions(-) diff --git a/proposals/dao/fip_82b.ts b/proposals/dao/fip_82b.ts index ef55988b2..60b487178 100644 --- a/proposals/dao/fip_82b.ts +++ b/proposals/dao/fip_82b.ts @@ -92,10 +92,7 @@ const validateContractAdmins = async (contracts: NamedContracts) => { expect(await contracts.fuseGuardian.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('FUSE_ADMIN')); // expect(await contracts.optimisticMinter.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('FEI_MINT_ADMIN')); - // // Missing revert data in call exception // expect(await contracts.pcvEquityMinter.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('FEI_MINT_ADMIN')); - - // expect(await contracts.ethLidoPCVDeposit.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_MINOR_PARAM_ROLE')); // expect(await contracts.indexDelegator.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_MINOR_PARAM_ROLE')); expect(await contracts.ethTokemakPCVDeposit.CONTRACT_ADMIN_ROLE()).to.be.equal( ethers.utils.id('PCV_MINOR_PARAM_ROLE') @@ -125,6 +122,11 @@ const validateCallingContractsHaveNewAdmin = async (core: Contract, addresses: N expect(await core.hasRole(ethers.utils.id('FUSE_ADMIN'), addresses.optimisticTimelock)).to.be.true; expect(await core.hasRole(ethers.utils.id('FUSE_ADMIN'), addresses.tribalChiefSyncV2)).to.be.true; + // + expect(await core.hasRole(ethers.utils.id('FEI_MINT_ADMIN'), addresses.core)).to.be.true; + expect(await core.hasRole(ethers.utils.id('FEI_MINT_ADMIN'), addresses.feiDAOTimelock)).to.be.true; + expect(await core.hasRole(ethers.utils.id('FEI_MINT_ADMIN'), addresses.roleBastion)).to.be.true; + // TOKEMAK_DEPOSIT_ADMIN_ROLE : PCV_MINOR_PARAM_ROLE expect(await core.hasRole(ethers.utils.id('TOKEMAK_DEPOSIT_ADMIN_ROLE'), addresses.optimisticTimelock)).to.be.true; @@ -132,6 +134,8 @@ const validateCallingContractsHaveNewAdmin = async (core: Contract, addresses: N expect(await core.hasRole(ethers.utils.id('PCV_MINOR_PARAM_ROLE'), addresses.feiDAOTimelock)).to.be.true; expect(await core.hasRole(ethers.utils.id('PCV_MINOR_PARAM_ROLE'), addresses.core)).to.be.true; expect(await core.hasRole(ethers.utils.id('PCV_MINOR_PARAM_ROLE'), addresses.roleBastion)).to.be.true; + expect(await core.hasRole(ethers.utils.id('PCV_MINOR_PARAM_ROLE'), addresses.optimisticTimelock)).to.be.true; + expect(await core.hasRole(ethers.utils.id('PCV_MINOR_PARAM_ROLE'), addresses.opsOptimisticTimelock)).to.be.true; }; const validateTribalCouncilRoles = async (core: Contract, tribalCouncilTimelockAddress: string) => { diff --git a/proposals/description/fip_82b.ts b/proposals/description/fip_82b.ts index ca50ea3dc..19f320da6 100644 --- a/proposals/description/fip_82b.ts +++ b/proposals/description/fip_82b.ts @@ -177,7 +177,6 @@ const fip_82b: ProposalDescription = { description: 'Set the contract admin of the FuseGuardian to be the FUSE_ADMIN' }, // FEI_MINT_ADMIN - // TODO: Verify that by FeiTimedMinter we mean OptimisticMinter. Source code suggests yes // { // target: 'optimisticMinter', // values: '0', @@ -187,7 +186,6 @@ const fip_82b: ProposalDescription = { // ], // description: 'Set the contract admin of the FeiTimedMinter to be the FEI_MINT_ADMIN' // }, - // Missing revert data in call exception // { // target: 'pcvEquityMinter', // values: '0', @@ -197,16 +195,6 @@ const fip_82b: ProposalDescription = { // ], // description: 'Set the contract admin of the PCV Equity Minter to be the FEI_MINT_ADMIN' // }, - // // / PCV_MINOR_PARAM_ROLE - // { - // target: 'ethLidoPCVDeposit', - // values: '0', - // method: 'setContractAdminRole(bytes32)', - // arguments: [ - // '0x46797b318ce8c2d83979760ef100a5c0fdb980de4b574d6142ce4d0afce307ed' // PCV_MINOR_PARAM_ROLE - // ], - // description: 'Set the contract admin of the EthLidoPCVDeposit to be the PCV_MINOR_PARAM_ROLE' - // }, // { // target: 'indexDelegator', // this is SnapshotDelegatorPCVDeposit // values: '0', @@ -389,6 +377,26 @@ const fip_82b: ProposalDescription = { ], description: 'Grant roleBastion the PCV_MINOR_PARAM_ROLE role' }, + { + target: 'core', + values: '0', + method: 'grantRole(bytes32,address)', + arguments: [ + '0x46797b318ce8c2d83979760ef100a5c0fdb980de4b574d6142ce4d0afce307ed', // PCV_MINOR_PARAM_ROLE + '{opsOptimisticTimelock}' + ], + description: 'Grant opsOptimisticTimelock the PCV_MINOR_PARAM_ROLE role' + }, + { + target: 'core', + values: '0', + method: 'grantRole(bytes32,address)', + arguments: [ + '0x46797b318ce8c2d83979760ef100a5c0fdb980de4b574d6142ce4d0afce307ed', // PCV_MINOR_PARAM_ROLE + '{optimisticTimelock}' + ], + description: 'Grant optimisticTimelock the PCV_MINOR_PARAM_ROLE role' + }, { target: 'core', values: '0', @@ -409,6 +417,36 @@ const fip_82b: ProposalDescription = { ], description: 'Grant tribalChiefSyncV2 the FUSE_ADMIN role' }, + { + target: 'core', + values: '0', + method: 'grantRole(bytes32,address)', + arguments: [ + '0x4a4f013dcba6b46103e81e286782135c0dda175e82564e878ae500734753e55e', // FEI_MINT_ADMIN + '{core}' + ], + description: 'Grant core the FEI_MINT_ADMIN role' + }, + { + target: 'core', + values: '0', + method: 'grantRole(bytes32,address)', + arguments: [ + '0x4a4f013dcba6b46103e81e286782135c0dda175e82564e878ae500734753e55e', // FEI_MINT_ADMIN + '{feiDAOTimelock}' + ], + description: 'Grant feiDAOTimelock the FEI_MINT_ADMIN role' + }, + { + target: 'core', + values: '0', + method: 'grantRole(bytes32,address)', + arguments: [ + '0x4a4f013dcba6b46103e81e286782135c0dda175e82564e878ae500734753e55e', // FEI_MINT_ADMIN + '{roleBastion}' + ], + description: 'Grant roleBastion the FEI_MINT_ADMIN role' + }, { target: 'core', values: '0', diff --git a/protocol-configuration/permissions.ts b/protocol-configuration/permissions.ts index 6569abfa4..0eb4b3296 100644 --- a/protocol-configuration/permissions.ts +++ b/protocol-configuration/permissions.ts @@ -37,9 +37,9 @@ export const permissions = { METAGOVERNANCE_GAUGE_ADMIN: ['feiDAOTimelock', 'optimisticTimelock'], ROLE_ADMIN: ['feiDAOTimelock', 'tribalCouncilTimelock'], POD_METADATA_REGISTER_ROLE: ['tribalCouncilSafe'], - FEI_MINT_ADMIN: [], + FEI_MINT_ADMIN: ['core', 'feiDAOTimelock', 'roleBastion'], POD_VETO_ADMIN: ['nopeDAO'], POD_ADMIN: ['tribalCouncilTimelock', 'podFactory'], - PCV_MINOR_PARAM_ROLE: ['core', 'feiDAOTimelock', 'roleBastion', 'optimisticTimelock'], + PCV_MINOR_PARAM_ROLE: ['core', 'feiDAOTimelock', 'roleBastion', 'optimisticTimelock', 'opsOptimisticTimelock'], TOKEMAK_DEPOSIT_ADMIN_ROLE: ['optimisticTimelock'] }; diff --git a/scripts/utils/constructProposal.ts b/scripts/utils/constructProposal.ts index b7dc8c116..cf95840f9 100644 --- a/scripts/utils/constructProposal.ts +++ b/scripts/utils/constructProposal.ts @@ -19,7 +19,7 @@ export default async function constructProposal( const proposalDescription = proposalInfo.description; const proposalBuilder = proposals.builders.alpha(); - proposalBuilder.maxActions = 40; + proposalBuilder.maxActions = 50; for (let i = 0; i < proposalInfo.commands.length; i += 1) { const command = proposalInfo.commands[i]; From 85197208d7cd26e4d3fb75a47e4185f0fb525afa Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Thu, 14 Apr 2022 00:28:23 +0100 Subject: [PATCH 013/121] fix: uncomment last actions --- proposals/description/fip_82b.ts | 58 ++++++++++++++++---------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/proposals/description/fip_82b.ts b/proposals/description/fip_82b.ts index 19f320da6..10876264d 100644 --- a/proposals/description/fip_82b.ts +++ b/proposals/description/fip_82b.ts @@ -3,7 +3,7 @@ import { ProposalDescription } from '@custom-types/types'; const fip_82b: ProposalDescription = { title: 'FIP-82b: Authorise the TribalCouncil with necessary roles', commands: [ - ///////// Transfer all non-major role admins to the ROLE_ADMIN, to allow TribalCouncil to manage //////// + /////// Transfer all non-major role admins to the ROLE_ADMIN, to allow TribalCouncil to manage //////// { target: 'core', values: '0', @@ -165,7 +165,7 @@ const fip_82b: ProposalDescription = { ], description: 'Create PSM_ADMIN_ROLE role, assigning ROLE_ADMIN as the role admin' }, - ///////// Set the relevant contract admins to the newly created roles ////////// + /////// Set the relevant contract admins to the newly created roles ////////// // FUSE_ADMIN { target: 'fuseGuardian', @@ -177,33 +177,33 @@ const fip_82b: ProposalDescription = { description: 'Set the contract admin of the FuseGuardian to be the FUSE_ADMIN' }, // FEI_MINT_ADMIN - // { - // target: 'optimisticMinter', - // values: '0', - // method: 'setContractAdminRole(bytes32)', - // arguments: [ - // '0x4a4f013dcba6b46103e81e286782135c0dda175e82564e878ae500734753e55e' // FEI_MINT_ADMIN - // ], - // description: 'Set the contract admin of the FeiTimedMinter to be the FEI_MINT_ADMIN' - // }, - // { - // target: 'pcvEquityMinter', - // values: '0', - // method: 'setContractAdminRole(bytes32)', - // arguments: [ - // '0x4a4f013dcba6b46103e81e286782135c0dda175e82564e878ae500734753e55e' // FEI_MINT_ADMIN - // ], - // description: 'Set the contract admin of the PCV Equity Minter to be the FEI_MINT_ADMIN' - // }, - // { - // target: 'indexDelegator', // this is SnapshotDelegatorPCVDeposit - // values: '0', - // method: 'setContractAdminRole(bytes32)', - // arguments: [ - // '0x46797b318ce8c2d83979760ef100a5c0fdb980de4b574d6142ce4d0afce307ed' // PCV_MINOR_PARAM_ROLE - // ], - // description: 'Set the contract admin of the indexDelegator to be the PCV_MINOR_PARAM_ROLE' - // }, + { + target: 'optimisticMinter', + values: '0', + method: 'setContractAdminRole(bytes32)', + arguments: [ + '0x4a4f013dcba6b46103e81e286782135c0dda175e82564e878ae500734753e55e' // FEI_MINT_ADMIN + ], + description: 'Set the contract admin of the FeiTimedMinter to be the FEI_MINT_ADMIN' + }, + { + target: 'pcvEquityMinter', + values: '0', + method: 'setContractAdminRole(bytes32)', + arguments: [ + '0x4a4f013dcba6b46103e81e286782135c0dda175e82564e878ae500734753e55e' // FEI_MINT_ADMIN + ], + description: 'Set the contract admin of the PCV Equity Minter to be the FEI_MINT_ADMIN' + }, + { + target: 'indexDelegator', // this is SnapshotDelegatorPCVDeposit + values: '0', + method: 'setContractAdminRole(bytes32)', + arguments: [ + '0x46797b318ce8c2d83979760ef100a5c0fdb980de4b574d6142ce4d0afce307ed' // PCV_MINOR_PARAM_ROLE + ], + description: 'Set the contract admin of the indexDelegator to be the PCV_MINOR_PARAM_ROLE' + }, { target: 'ethTokemakPCVDeposit', // TokemakPCVDepositBase values: '0', From 707ddd7059822206c5839b8420f98c76c333d5f1 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Thu, 14 Apr 2022 00:48:56 +0100 Subject: [PATCH 014/121] style: add natspec comments, uncomment tests --- contracts/core/TribeRoles.sol | 2 ++ proposals/dao/fip_82b.ts | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/contracts/core/TribeRoles.sol b/contracts/core/TribeRoles.sol index f95fd99df..ea0e6a918 100644 --- a/contracts/core/TribeRoles.sol +++ b/contracts/core/TribeRoles.sol @@ -48,6 +48,8 @@ library TribeRoles { /// @notice manages TribalChief incentives and related functionality. bytes32 internal constant TRIBAL_CHIEF_ADMIN = keccak256("TRIBAL_CHIEF_ADMIN_ROLE"); + + /// @notice admin of the Tokemak PCV deposits bytes32 internal constant TOKEMAK_DEPOSIT_ADMIN_ROLE = keccak256("TOKEMAK_DEPOSIT_ADMIN_ROLE"); diff --git a/proposals/dao/fip_82b.ts b/proposals/dao/fip_82b.ts index 60b487178..fc8e137cf 100644 --- a/proposals/dao/fip_82b.ts +++ b/proposals/dao/fip_82b.ts @@ -91,9 +91,9 @@ const validateNewCouncilRoles = async (core: Contract) => { const validateContractAdmins = async (contracts: NamedContracts) => { expect(await contracts.fuseGuardian.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('FUSE_ADMIN')); - // expect(await contracts.optimisticMinter.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('FEI_MINT_ADMIN')); - // expect(await contracts.pcvEquityMinter.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('FEI_MINT_ADMIN')); - // expect(await contracts.indexDelegator.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_MINOR_PARAM_ROLE')); + expect(await contracts.optimisticMinter.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('FEI_MINT_ADMIN')); + expect(await contracts.pcvEquityMinter.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('FEI_MINT_ADMIN')); + expect(await contracts.indexDelegator.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_MINOR_PARAM_ROLE')); expect(await contracts.ethTokemakPCVDeposit.CONTRACT_ADMIN_ROLE()).to.be.equal( ethers.utils.id('PCV_MINOR_PARAM_ROLE') ); From 368a7922582fa52d9f3fd82a52fb1d4d921abe01 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Thu, 14 Apr 2022 00:57:58 +0100 Subject: [PATCH 015/121] refactor: transfer MINOR_PARAM role admin --- proposals/dao/fip_82b.ts | 7 +++---- proposals/description/fip_82b.ts | 18 ++++++++++++++---- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/proposals/dao/fip_82b.ts b/proposals/dao/fip_82b.ts index fc8e137cf..5cbd0d53e 100644 --- a/proposals/dao/fip_82b.ts +++ b/proposals/dao/fip_82b.ts @@ -66,6 +66,8 @@ const validateTransferredRoleAdmins = async (core: Contract) => { expect(await core.getRoleAdmin(ethers.utils.id('MINTER_ADMIN'))).to.be.equal(ROLE_ADMIN); expect(await core.getRoleAdmin(ethers.utils.id('OPTIMISTIC_ADMIN'))).to.be.equal(ROLE_ADMIN); + expect(await core.getRoleAdmin(ethers.utils.id('MINOR_PARAM_ROLE'))).to.be.equal(ROLE_ADMIN); + // Non-major roles that previously had GOVERNOR as their admin expect(await core.getRoleAdmin(ethers.utils.id('ORACLE_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); expect(await core.getRoleAdmin(ethers.utils.id('TRIBAL_CHIEF_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); @@ -122,14 +124,11 @@ const validateCallingContractsHaveNewAdmin = async (core: Contract, addresses: N expect(await core.hasRole(ethers.utils.id('FUSE_ADMIN'), addresses.optimisticTimelock)).to.be.true; expect(await core.hasRole(ethers.utils.id('FUSE_ADMIN'), addresses.tribalChiefSyncV2)).to.be.true; - // + // GOVERNOR : FEI_MINT_ADMIN expect(await core.hasRole(ethers.utils.id('FEI_MINT_ADMIN'), addresses.core)).to.be.true; expect(await core.hasRole(ethers.utils.id('FEI_MINT_ADMIN'), addresses.feiDAOTimelock)).to.be.true; expect(await core.hasRole(ethers.utils.id('FEI_MINT_ADMIN'), addresses.roleBastion)).to.be.true; - // TOKEMAK_DEPOSIT_ADMIN_ROLE : PCV_MINOR_PARAM_ROLE - expect(await core.hasRole(ethers.utils.id('TOKEMAK_DEPOSIT_ADMIN_ROLE'), addresses.optimisticTimelock)).to.be.true; - // GOVERNOR : PCV_MINOR_PARAM_ROLE expect(await core.hasRole(ethers.utils.id('PCV_MINOR_PARAM_ROLE'), addresses.feiDAOTimelock)).to.be.true; expect(await core.hasRole(ethers.utils.id('PCV_MINOR_PARAM_ROLE'), addresses.core)).to.be.true; diff --git a/proposals/description/fip_82b.ts b/proposals/description/fip_82b.ts index 10876264d..795059573 100644 --- a/proposals/description/fip_82b.ts +++ b/proposals/description/fip_82b.ts @@ -12,7 +12,7 @@ const fip_82b: ProposalDescription = { '0xf0b50f04623eeaacfa1f202e062a3001c925a35c6b75d6903e67b43f44bbf152', // PARAMETER_ADMIN '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN ], - description: 'Transfer PARAMETER role admin from 0x0 to ROLE_ADMIN' + description: 'Transfer PARAMETER_ADMIN role admin to ROLE_ADMIN' }, { target: 'core', @@ -22,7 +22,7 @@ const fip_82b: ProposalDescription = { '0xc7be67d109cc181c862ac2eaed91ab54817910d73264a8ad5d87592516929a15', // MINOR_ROLE_ADMIN '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN ], - description: 'Transfer MINOR_ROLE_ADMIN role admin from 0x0 to ROLE_ADMIN' + description: 'Transfer MINOR_ROLE_ADMIN role admin to ROLE_ADMIN' }, { target: 'core', @@ -32,7 +32,7 @@ const fip_82b: ProposalDescription = { '0x498a9dae57f391d8efcc7bb3e7440ad6a25b1261044ef1b555c5484cb9f67659', // MINTER_ADMIN '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN ], - description: 'Transfer MINTER_ADMIN role admin from 0x0 to ROLE_ADMIN' + description: 'Transfer MINTER_ADMIN role admin to ROLE_ADMIN' }, { target: 'core', @@ -42,7 +42,7 @@ const fip_82b: ProposalDescription = { '0x6cad5c16d973906992d8e1412f4aefeca4ae44220c203bbcd6e8e66e7c717be0', // OPTIMISTIC_ADMIN '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN ], - description: 'Transfer OPTIMISTIC_ADMIN role admin from 0x0 to ROLE_ADMIN' + description: 'Transfer OPTIMISTIC_ADMIN role admin to ROLE_ADMIN' }, { target: 'core', @@ -165,6 +165,16 @@ const fip_82b: ProposalDescription = { ], description: 'Create PSM_ADMIN_ROLE role, assigning ROLE_ADMIN as the role admin' }, + { + target: 'core', + values: '0', + method: 'createRole(bytes32,bytes32)', + arguments: [ + '0x64bdfa4de883e5fe4519e80a554fbf0d63c0f6271ac8b89b18edcc9ef151ad60', // MINOR_PARAM_ROLE + '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN + ], + description: 'Create MINOR_PARAM_ROLE role, assigning ROLE_ADMIN as the role admin' + }, /////// Set the relevant contract admins to the newly created roles ////////// // FUSE_ADMIN { From b1fed2f28d91b763368121a8396d466663f340cb Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Thu, 14 Apr 2022 15:25:13 +0100 Subject: [PATCH 016/121] fix: mint orca tokens in fip if testing --- proposals/dao/fip_82.ts | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/proposals/dao/fip_82.ts b/proposals/dao/fip_82.ts index db33b63c9..647ba3da2 100644 --- a/proposals/dao/fip_82.ts +++ b/proposals/dao/fip_82.ts @@ -9,7 +9,7 @@ import { } from '@custom-types/types'; import { getImpersonatedSigner } from '@test/helpers'; import { tribeCouncilPodConfig, PodCreationConfig } from '@protocol/optimisticGovernance'; -import { abi as ERC20ABI } from '../../artifacts/@openzeppelin/contracts/token/ERC20/ERC20.sol/ERC20.json'; +import { abi as inviteTokenABI } from '../../artifacts/@orcaprotocol/contracts/contracts/InviteToken.sol/InviteToken.json'; import { abi as timelockABI } from '../../artifacts/@openzeppelin/contracts/governance/TimelockController.sol/TimelockController.json'; import { abi as gnosisSafeABI } from '../../artifacts/contracts/pods/interfaces/IGnosisSafe.sol/IGnosisSafe.json'; import { Contract } from 'ethers'; @@ -22,13 +22,20 @@ const validateArraysEqual = (arrayA: string[], arrayB: string[]) => { // Requirement of holding Orca tokens to deploy is a slow rollout mechanism used by Orca const transferOrcaTokens = async ( orcaERC20Address: string, - deployAddressWithOrca: string, + deployAddress: string, receiver: string, amount: number ) => { - // Mint Orca Ship tokens to deploy address, to allow to deploy contracts - const deployAddressSigner = await getImpersonatedSigner(deployAddressWithOrca); - const inviteToken = new ethers.Contract(orcaERC20Address, ERC20ABI, deployAddressSigner); + const deployAddressSigner = await getImpersonatedSigner(deployAddress); + const inviteToken = new ethers.Contract(orcaERC20Address, inviteTokenABI, deployAddressSigner); + const deployerBalance = await inviteToken.balanceOf(deployAddress); + + if (deployerBalance.lt(amount)) { + // In test environment, mint tokens to deployer + const priviledgedOrcaMinter = '0x2149A222feD42fefc3A120B3DdA34482190fC666'; + const priviledgedSigner = await getImpersonatedSigner(priviledgedOrcaMinter); + await inviteToken.connect(priviledgedSigner).mint(deployAddress, amount); + } await inviteToken.transfer(receiver, amount); }; From e0c5fd463a7b0afaa861e7fd18ac97b9c98de786 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Thu, 14 Apr 2022 15:34:46 +0100 Subject: [PATCH 017/121] refactor: update contract dependencies --- .../integration/governance/RoleBastion.t.sol | 2 +- protocol-configuration/dependencies.ts | 28 +++++++++++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/contracts/test/integration/governance/RoleBastion.t.sol b/contracts/test/integration/governance/RoleBastion.t.sol index 78913ac4a..14348599e 100644 --- a/contracts/test/integration/governance/RoleBastion.t.sol +++ b/contracts/test/integration/governance/RoleBastion.t.sol @@ -9,7 +9,7 @@ import {TribeRoles} from "../../../core/TribeRoles.sol"; import {Core} from "../../../core/Core.sol"; import {MainnetAddresses} from "../fixtures/MainnetAddresses.sol"; -contract RoleBastionTest is DSTest { +contract RoleBastionIntegrationTest is DSTest { address tribalCouncil = address(0x1); RoleBastion roleBastion; diff --git a/protocol-configuration/dependencies.ts b/protocol-configuration/dependencies.ts index 89f1308de..21f0fb687 100644 --- a/protocol-configuration/dependencies.ts +++ b/protocol-configuration/dependencies.ts @@ -125,7 +125,12 @@ const dependencies: DependencyMap = { 'balancerDepositFeiWeth', 'delayedPCVMoverWethUniToBal', 'angleDelegatorPCVDeposit', - 'uniswapLensAgEurUniswapGauge' + 'uniswapLensAgEurUniswapGauge', + 'governanceMetadataRegistry', + 'nopeDAO', + 'podAdminGateway', + 'podFactory', + 'roleBastion' ] }, fei: { @@ -220,7 +225,8 @@ const dependencies: DependencyMap = { 'rariPool8d3', 'rariInfraTribeTimelock', 'pegExchanger', - 'laTribuTribeTimelock' + 'laTribuTribeTimelock', + 'nopeDAO' ] }, tribeMinter: { @@ -984,6 +990,24 @@ const dependencies: DependencyMap = { }, timelock: { contractDependencies: ['feiDAOTimelock'] + }, + roleBastion: { + contractDependencies: ['core'] + }, + podFactory: { + contractDependencies: ['core', 'podExecutor', 'podAdminGateway'] + }, + podAdminGateway: { + contractDependencies: ['core', 'podFactory'] + }, + podExecutor: { + contractDependencies: ['podFactory'] + }, + nopeDAO: { + contractDependencies: ['core', 'tribe'] + }, + governanceMetadataRegistry: { + contractDependencies: ['core'] } }; From 404ac72d24b6a5f7972dfc002e143fd82d31751c Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Thu, 14 Apr 2022 16:06:47 +0100 Subject: [PATCH 018/121] refactor: update both fip scripts deps --- test/integration/proposals_config.ts | 36 +++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/test/integration/proposals_config.ts b/test/integration/proposals_config.ts index d63379c60..6ea49f780 100644 --- a/test/integration/proposals_config.ts +++ b/test/integration/proposals_config.ts @@ -9,7 +9,16 @@ const proposals: ProposalsConfigMap = { totalValue: 0, // amount of ETH to send to DAO execution proposal: fip_82, proposalId: '', - affectedContractSignoff: [''], + affectedContractSignoff: [ + 'podAdminFactory', + 'roleBastion', + 'podFactory', + 'podExecutor', + 'nopeDAO', + 'governanceMetadataRegistry', + 'core', + 'tribe' + ], deprecatedContractSignoff: [''], category: ProposalCategory.DAO }, @@ -18,8 +27,29 @@ const proposals: ProposalsConfigMap = { totalValue: 0, // amount of ETH to send to DAO execution proposal: fip_82b, proposalId: '', - affectedContractSignoff: [''], - deprecatedContractSignoff: [''], + affectedContractSignoff: [ + 'core', + 'fuseGuardian', + 'optimisticMinter', + 'pcvEquityMinter', + 'indexDelegator', + 'ethTokemakPCVDeposit', + 'uniswapPCVDeposit', + 'daiPSMFeiSkimmer', + 'lusdPSMFeiSkimmer', + 'ethPSMFeiSkimmer', + 'aaveEthPCVDripController', + 'daiPCVDripController', + 'lusdPCVDripController', + 'compoundEthPCVDripController', + 'tribalCouncilTimelock', + 'feiDAOTimelock', + 'roleBastion', + 'opsOptimisticTimelock', + 'optimisticTimelock', + 'tribalChiefSyncV2' + ], + deprecatedContractSignoff: ['daiPSMFeiSkimmer', 'compoundEthPCVDripController'], category: ProposalCategory.DAO } }; From 5dad3853455287e2f65ba67ddf0ea9f167f849f8 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Thu, 14 Apr 2022 16:16:14 +0100 Subject: [PATCH 019/121] feat: add additional ORACLE_ADMIN_ROLE to permissions --- protocol-configuration/permissions.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/protocol-configuration/permissions.ts b/protocol-configuration/permissions.ts index 0eb4b3296..cefa290c8 100644 --- a/protocol-configuration/permissions.ts +++ b/protocol-configuration/permissions.ts @@ -24,7 +24,12 @@ export const permissions = { 'lusdPSMFeiSkimmer' ], GUARDIAN_ROLE: ['multisig', 'pcvGuardian', 'pcvSentinel'], - ORACLE_ADMIN_ROLE: ['collateralizationOracleGuardian', 'optimisticTimelock', 'opsOptimisticTimelock'], + ORACLE_ADMIN_ROLE: [ + 'collateralizationOracleGuardian', + 'optimisticTimelock', + 'opsOptimisticTimelock', + 'tribalCouncilTimelock' + ], SWAP_ADMIN_ROLE: ['pcvEquityMinter', 'optimisticTimelock'], BALANCER_MANAGER_ADMIN_ROLE: [], PSM_ADMIN_ROLE: [], From 98fe9ae6389c424478b1fd497c656731eed14550 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Thu, 14 Apr 2022 16:40:07 +0100 Subject: [PATCH 020/121] test: update admin tests with delimiter --- .../test/integration/governance/PodAdminGateway.t.sol | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/contracts/test/integration/governance/PodAdminGateway.t.sol b/contracts/test/integration/governance/PodAdminGateway.t.sol index c479966ab..8b85cc3e7 100644 --- a/contracts/test/integration/governance/PodAdminGateway.t.sol +++ b/contracts/test/integration/governance/PodAdminGateway.t.sol @@ -179,7 +179,7 @@ contract PodAdminGatewayIntegrationTest is DSTest { /// @notice Validate that specific pod admin role is computed is expected function testGetSpecificPodAdminRole() public { bytes32 specificAdminRole = keccak256( - abi.encode(podId, "ORCA_POD", "ADMIN") + abi.encode(podId, "_ORCA_POD", "_ADMIN") ); assertEq( specificAdminRole, @@ -229,7 +229,7 @@ contract PodAdminGatewayIntegrationTest is DSTest { // Create role in core bytes32 specificPodAdmin = keccak256( - abi.encode(podId, "ORCA_POD", "ADMIN") + abi.encode(podId, "_ORCA_POD", "_ADMIN") ); vm.startPrank(feiDAOTimelock); @@ -254,7 +254,7 @@ contract PodAdminGatewayIntegrationTest is DSTest { // Create role in core bytes32 specificPodGuardian = keccak256( - abi.encode(podId, "ORCA_POD", "GUARDIAN") + abi.encode(podId, "_ORCA_POD", "_GUARDIAN") ); vm.startPrank(feiDAOTimelock); @@ -289,7 +289,7 @@ contract PodAdminGatewayIntegrationTest is DSTest { // Create role in core bytes32 specificPodAdmin = keccak256( - abi.encode(podId, "ORCA_POD", "ADMIN") + abi.encode(podId, "_ORCA_POD", "_ADMIN") ); vm.startPrank(feiDAOTimelock); From 495a6f66bc736e594a3abb5bc63af9dcbe274ad3 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Thu, 14 Apr 2022 21:08:52 +0100 Subject: [PATCH 021/121] feat: add PSM_ADMIN_ROLE to permissions.ts --- protocol-configuration/permissions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protocol-configuration/permissions.ts b/protocol-configuration/permissions.ts index cefa290c8..48737f943 100644 --- a/protocol-configuration/permissions.ts +++ b/protocol-configuration/permissions.ts @@ -32,7 +32,7 @@ export const permissions = { ], SWAP_ADMIN_ROLE: ['pcvEquityMinter', 'optimisticTimelock'], BALANCER_MANAGER_ADMIN_ROLE: [], - PSM_ADMIN_ROLE: [], + PSM_ADMIN_ROLE: ['tribalCouncilTimelock'], TRIBAL_CHIEF_ADMIN_ROLE: ['optimisticTimelock', 'tribalChiefSyncV2'], FUSE_ADMIN: ['optimisticTimelock', 'tribalChiefSyncV2'], VOTIUM_ADMIN_ROLE: ['opsOptimisticTimelock', 'protocolPodTimelock'], From 1927e7b2e388b959198bf375a37fde9b2a8c21e9 Mon Sep 17 00:00:00 2001 From: Erwan Beauvois Date: Fri, 29 Apr 2022 18:15:55 +0200 Subject: [PATCH 022/121] Add proposal DEBUG tool --- test/integration/setup/index.ts | 50 +++++++++++++++++++++++++++++++++ types/types.ts | 1 + 2 files changed, 51 insertions(+) diff --git a/test/integration/setup/index.ts b/test/integration/setup/index.ts index bf50250dd..ee1e8bb31 100644 --- a/test/integration/setup/index.ts +++ b/test/integration/setup/index.ts @@ -1,3 +1,4 @@ +import { ethers } from 'hardhat'; import { permissions } from '@protocol/permissions'; import { getAllContractAddresses, getAllContracts } from './loadContracts'; import { @@ -21,6 +22,8 @@ import constructProposal from '@scripts/utils/constructProposal'; import '@nomiclabs/hardhat-ethers'; import { resetFork } from '@test/helpers'; import simulateOAProposal from '@scripts/utils/simulateOAProposal'; +import { forceEth } from '@test/integration/setup/utils'; +import { getImpersonatedSigner } from '@test/helpers'; /** * Coordinate initialising an end-to-end testing environment @@ -156,6 +159,53 @@ export class TestEndtoEndCoordinator implements TestCoordinator { await proposal.simulate(); } + if (config.category === ProposalCategory.DEBUG) { + console.log('Simulating DAO proposal in DEBUG mode (step by step)...'); + console.log(' Title: ', config.proposal.title); + + const signer = await getImpersonatedSigner(contracts.feiDAOTimelock.address); + await forceEth(contracts.feiDAOTimelock.address); + + let totalGasUsed = 0; + for (let i = 0; i < config.proposal.commands.length; i++) { + const cmd = config.proposal.commands[i]; + // build tx & print details + console.log(' Step' + (config.proposal.commands.length >= 10 && i < 10 ? ' ' : ''), i, ':', cmd.description); + let types = []; + if (cmd.method.indexOf('(') !== -1 && cmd.method.indexOf('()') === -1) { + // e.g. ['address', 'bytes32', 'uint256'], or empty array [] + types = cmd.method.split('(')[1].split(')')[0].split(','); + } + const cmdArguments = cmd.arguments.map((arg) => { + if (arg.indexOf('{') == 0) { + arg = contractAddresses[arg.replace('{', '').replace('}', '')] || arg; + } + return arg; + }); + const functionSig = ethers.utils.keccak256(ethers.utils.toUtf8Bytes(cmd.method)); + const calldata = ethers.utils.defaultAbiCoder + .encode(types, cmdArguments) + .replace('0x', functionSig.substring(0, 10)); // prepend function signature + const to = contractAddresses[cmd.target] || cmd.target; + const value = cmd.values; + console.log(' Target:', cmd.target, '[' + to + ']'); + console.log(' Method:', cmd.method); + types.forEach((type, i) => { + console.log(' Argument', i, '[' + type + ']', cmdArguments[i]); + }); + //console.log(' Value:', value); + //console.log(' Calldata:', calldata); + console.log(' Calling... '); + + // send tx + const tx = await signer.sendTransaction({ data: calldata, to, value: Number(value) }); + const d = await tx.wait(); + console.log(' Done. Used ' + d.cumulativeGasUsed.toString() + ' gas.'); + totalGasUsed += Number(d.cumulativeGasUsed.toString()); + } + console.log(' Done. Used', totalGasUsed, 'gas in total.'); + } + if (config.category === ProposalCategory.OA) { this.config.logging && console.log(`Simulating OA proposal...`); await simulateOAProposal( diff --git a/types/types.ts b/types/types.ts index 3e5129014..f0021d668 100644 --- a/types/types.ts +++ b/types/types.ts @@ -62,6 +62,7 @@ export type DependencyMap = { [key: string]: Dependency }; export enum ProposalCategory { DAO, + DEBUG, OA, None } From fce920a6ec3c2f3b894ba642df90dfa2eafc7adf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 May 2022 07:23:33 +0000 Subject: [PATCH 023/121] build(deps-dev): bump mocha from 9.2.2 to 10.0.0 Bumps [mocha](https://github.com/mochajs/mocha) from 9.2.2 to 10.0.0. - [Release notes](https://github.com/mochajs/mocha/releases) - [Changelog](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md) - [Commits](https://github.com/mochajs/mocha/compare/v9.2.2...v10.0.0) --- updated-dependencies: - dependency-name: mocha dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- package-lock.json | 497 +++++++++++++++++++++++++++++++++++++++------- package.json | 2 +- 2 files changed, 421 insertions(+), 78 deletions(-) diff --git a/package-lock.json b/package-lock.json index b2a02539e..47e624164 100644 --- a/package-lock.json +++ b/package-lock.json @@ -52,7 +52,7 @@ "ethers": "^5.6.4", "husky": "^7.0.4", "lint-staged": "^12.4.1", - "mocha": "^9.2.2", + "mocha": "^10.0.0", "mocha-junit-reporter": "^2.0.2", "mocha-multi-reporters": "^1.5.1", "prettier": "^2.6.2", @@ -18644,11 +18644,43 @@ "hardhat": "^2.0.2" } }, + "node_modules/hardhat/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, "node_modules/hardhat/node_modules/commander": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==" }, + "node_modules/hardhat/node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/hardhat/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/hardhat/node_modules/find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", @@ -18673,6 +18705,25 @@ "node": ">=6 <7 || >=8" } }, + "node_modules/hardhat/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/hardhat/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/hardhat/node_modules/jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", @@ -18693,6 +18744,140 @@ "node": ">=4" } }, + "node_modules/hardhat/node_modules/minimatch": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hardhat/node_modules/mocha": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", + "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", + "dependencies": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.3", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "4.2.1", + "ms": "2.1.3", + "nanoid": "3.3.1", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.2.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/hardhat/node_modules/mocha/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hardhat/node_modules/mocha/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hardhat/node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/hardhat/node_modules/mocha/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hardhat/node_modules/mocha/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hardhat/node_modules/mocha/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/hardhat/node_modules/nanoid": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/hardhat/node_modules/p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", @@ -18819,6 +19004,20 @@ "semver": "bin/semver" } }, + "node_modules/hardhat/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/hardhat/node_modules/universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -18835,6 +19034,11 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/hardhat/node_modules/workerpool": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==" + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -21258,41 +21462,40 @@ } }, "node_modules/mocha": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", + "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", + "dev": true, "dependencies": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", "chokidar": "3.5.3", - "debug": "4.3.3", + "debug": "4.3.4", "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", "glob": "7.2.0", - "growl": "1.10.5", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", - "minimatch": "4.2.1", + "minimatch": "5.0.1", "ms": "2.1.3", - "nanoid": "3.3.1", + "nanoid": "3.3.3", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", + "workerpool": "6.2.1", "yargs": "16.2.0", "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" }, "bin": { "_mocha": "bin/_mocha", - "mocha": "bin/mocha" + "mocha": "bin/mocha.js" }, "engines": { - "node": ">= 12.0.0" + "node": ">= 14.0.0" }, "funding": { "type": "opencollective", @@ -21370,33 +21573,23 @@ "node_modules/mocha/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, - "node_modules/mocha/node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "balanced-match": "^1.0.0" } }, - "node_modules/mocha/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, "node_modules/mocha/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, "engines": { "node": ">=10" }, @@ -21408,6 +21601,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -21423,6 +21617,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -21431,6 +21626,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -21442,6 +21638,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, "dependencies": { "p-locate": "^5.0.0" }, @@ -21453,11 +21650,12 @@ } }, "node_modules/mocha/node_modules/minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { "node": ">=10" @@ -21466,12 +21664,14 @@ "node_modules/mocha/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, "node_modules/mocha/node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -21486,6 +21686,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -21500,6 +21701,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -21689,9 +21891,10 @@ "integrity": "sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18=" }, "node_modules/nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -28181,9 +28384,10 @@ "dev": true }, "node_modules/workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==" + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true }, "node_modules/wrap-ansi": { "version": "7.0.0", @@ -42824,11 +43028,29 @@ "ws": "^7.4.6" }, "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, "commander": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==" }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "requires": { + "ms": "2.1.2" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", @@ -42847,6 +43069,19 @@ "universalify": "^0.1.0" } }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + }, "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", @@ -42864,6 +43099,95 @@ "path-exists": "^3.0.0" } }, + "minimatch": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "mocha": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", + "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.3", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "4.2.1", + "ms": "2.1.3", + "nanoid": "3.3.1", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.2.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "requires": { + "p-locate": "^5.0.0" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "requires": { + "p-limit": "^3.0.2" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + } + } + }, + "nanoid": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==" + }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", @@ -42959,6 +43283,14 @@ } } }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -42968,6 +43300,11 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + }, + "workerpool": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==" } } }, @@ -44958,31 +45295,30 @@ } }, "mocha": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", + "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", + "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", "chokidar": "3.5.3", - "debug": "4.3.3", + "debug": "4.3.4", "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", "glob": "7.2.0", - "growl": "1.10.5", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", - "minimatch": "4.2.1", + "minimatch": "5.0.1", "ms": "2.1.3", - "nanoid": "3.3.1", + "nanoid": "3.3.3", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", + "workerpool": "6.2.1", "yargs": "16.2.0", "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" @@ -44991,32 +45327,29 @@ "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } + "balanced-match": "^1.0.0" } }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, "requires": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -45025,12 +45358,14 @@ "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, "requires": { "argparse": "^2.0.1" } @@ -45039,27 +45374,31 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, "requires": { "p-locate": "^5.0.0" } }, "minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" } }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, "requires": { "yocto-queue": "^0.1.0" } @@ -45068,6 +45407,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "requires": { "p-limit": "^3.0.2" } @@ -45076,6 +45416,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -45296,9 +45637,10 @@ "integrity": "sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18=" }, "nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==" + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "dev": true }, "nanomatch": { "version": "1.2.13", @@ -50380,9 +50722,10 @@ "dev": true }, "workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==" + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true }, "wrap-ansi": { "version": "7.0.0", diff --git a/package.json b/package.json index 282584c1c..231c88db0 100644 --- a/package.json +++ b/package.json @@ -92,7 +92,7 @@ "ethers": "^5.6.4", "husky": "^7.0.4", "lint-staged": "^12.4.1", - "mocha": "^9.2.2", + "mocha": "^10.0.0", "mocha-junit-reporter": "^2.0.2", "mocha-multi-reporters": "^1.5.1", "prettier": "^2.6.2", From f3f5ab749735b6f247368bd82816b26429acd982 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 May 2022 07:23:56 +0000 Subject: [PATCH 024/121] build(deps-dev): bump @types/node from 17.0.30 to 17.0.31 Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 17.0.30 to 17.0.31. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index b2a02539e..b19cf0089 100644 --- a/package-lock.json +++ b/package-lock.json @@ -39,7 +39,7 @@ "@typechain/hardhat": "^2.3.0", "@types/chai": "^4.3.1", "@types/mocha": "^9.1.1", - "@types/node": "^17.0.30", + "@types/node": "^17.0.31", "@typescript-eslint/eslint-plugin": "^4.31.2", "@typescript-eslint/parser": "^4.31.2", "chai-bn": "^0.3.1", @@ -4471,9 +4471,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "17.0.30", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.30.tgz", - "integrity": "sha512-oNBIZjIqyHYP8VCNAV9uEytXVeXG2oR0w9lgAXro20eugRQfY002qr3CUl6BAe+Yf/z3CRjPdz27Pu6WWtuSRw==" + "version": "17.0.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.31.tgz", + "integrity": "sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q==" }, "node_modules/@types/node-fetch": { "version": "2.6.1", @@ -32163,9 +32163,9 @@ "dev": true }, "@types/node": { - "version": "17.0.30", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.30.tgz", - "integrity": "sha512-oNBIZjIqyHYP8VCNAV9uEytXVeXG2oR0w9lgAXro20eugRQfY002qr3CUl6BAe+Yf/z3CRjPdz27Pu6WWtuSRw==" + "version": "17.0.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.31.tgz", + "integrity": "sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q==" }, "@types/node-fetch": { "version": "2.6.1", diff --git a/package.json b/package.json index 282584c1c..41a1ac030 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ "@typechain/hardhat": "^2.3.0", "@types/chai": "^4.3.1", "@types/mocha": "^9.1.1", - "@types/node": "^17.0.30", + "@types/node": "^17.0.31", "@typescript-eslint/eslint-plugin": "^4.31.2", "@typescript-eslint/parser": "^4.31.2", "chai-bn": "^0.3.1", From 8afc7baf979220a05f41af6aa85b275ccb2956f3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 May 2022 07:22:19 +0000 Subject: [PATCH 025/121] build(deps-dev): bump tsconfig-paths from 3.14.1 to 4.0.0 Bumps [tsconfig-paths](https://github.com/dividab/tsconfig-paths) from 3.14.1 to 4.0.0. - [Release notes](https://github.com/dividab/tsconfig-paths/releases) - [Changelog](https://github.com/dividab/tsconfig-paths/blob/master/CHANGELOG.md) - [Commits](https://github.com/dividab/tsconfig-paths/compare/v3.14.1...v4.0.0) --- updated-dependencies: - dependency-name: tsconfig-paths dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- package-lock.json | 88 ++++++++++++++++++++++++++++++++++------------- package.json | 2 +- 2 files changed, 65 insertions(+), 25 deletions(-) diff --git a/package-lock.json b/package-lock.json index b2a02539e..f88a5087a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -61,7 +61,7 @@ "solhint-plugin-prettier": "^0.0.5", "solidity-coverage": "^0.7.21", "ts-node": "^10.7.0", - "tsconfig-paths": "^3.14.1", + "tsconfig-paths": "^4.0.0", "typechain": "^5.2.0", "typescript": "^4.6.4" }, @@ -7727,12 +7727,36 @@ "node": ">=0.10.0" } }, + "node_modules/eslint-plugin-import/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, "node_modules/eslint-plugin-import/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, + "node_modules/eslint-plugin-import/node_modules/tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, "node_modules/eslint-plugin-prettier": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", @@ -20118,15 +20142,15 @@ } }, "node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, "bin": { "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" } }, "node_modules/jsonfile": { @@ -27090,13 +27114,12 @@ } }, "node_modules/tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.0.0.tgz", + "integrity": "sha512-SLBg2GBKlR6bVtMgJJlud/o3waplKtL7skmLkExomIiaAtLGtVsoXIqP3SYdjbcH9lq/KVv7pMZeCBpLYOit6Q==", "dev": true, "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", + "json5": "^2.2.1", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } @@ -34831,11 +34854,32 @@ "esutils": "^2.0.2" } }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true + }, + "tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } } } }, @@ -44067,13 +44111,10 @@ } }, "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true }, "jsonfile": { "version": "6.1.0", @@ -49469,13 +49510,12 @@ } }, "tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.0.0.tgz", + "integrity": "sha512-SLBg2GBKlR6bVtMgJJlud/o3waplKtL7skmLkExomIiaAtLGtVsoXIqP3SYdjbcH9lq/KVv7pMZeCBpLYOit6Q==", "dev": true, "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", + "json5": "^2.2.1", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } diff --git a/package.json b/package.json index 282584c1c..7a55e70d7 100644 --- a/package.json +++ b/package.json @@ -101,7 +101,7 @@ "solhint-plugin-prettier": "^0.0.5", "solidity-coverage": "^0.7.21", "ts-node": "^10.7.0", - "tsconfig-paths": "^3.14.1", + "tsconfig-paths": "^4.0.0", "typechain": "^5.2.0", "typescript": "^4.6.4" }, From 6f3bc52ca3ee0aceda850a4ecaa1e3a732fb4010 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 May 2022 07:24:03 +0000 Subject: [PATCH 026/121] build(deps-dev): bump ethers from 5.6.4 to 5.6.5 Bumps [ethers](https://github.com/ethers-io/ethers.js/tree/HEAD/packages/ethers) from 5.6.4 to 5.6.5. - [Release notes](https://github.com/ethers-io/ethers.js/releases) - [Changelog](https://github.com/ethers-io/ethers.js/blob/master/CHANGELOG.md) - [Commits](https://github.com/ethers-io/ethers.js/commits/v5.6.5/packages/ethers) --- updated-dependencies: - dependency-name: ethers dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package-lock.json | 46 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/package-lock.json b/package-lock.json index b2a02539e..ce05af076 100644 --- a/package-lock.json +++ b/package-lock.json @@ -49,7 +49,7 @@ "eslint-plugin-import": "^2.26.0", "eslint-plugin-prettier": "^4.0.0", "ethereum-waffle": "^3.4.4", - "ethers": "^5.6.4", + "ethers": "^5.6.5", "husky": "^7.0.4", "lint-staged": "^12.4.1", "mocha": "^9.2.2", @@ -1266,9 +1266,9 @@ } }, "node_modules/@ethersproject/providers": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.4.tgz", - "integrity": "sha512-WAdknnaZ52hpHV3qPiJmKx401BLpup47h36Axxgre9zT+doa/4GC/Ne48ICPxTm0BqndpToHjpLP1ZnaxyE+vw==", + "version": "5.6.5", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.5.tgz", + "integrity": "sha512-TRS+c2Ud+cMpWodmGAc9xbnYRPWzRNYt2zkCSnj58nJoamBQ6x4cUbBeo0lTC3y+6RDVIBeJv18OqsDbSktLVg==", "funding": [ { "type": "individual", @@ -1360,9 +1360,9 @@ } }, "node_modules/@ethersproject/signing-key": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.0.tgz", - "integrity": "sha512-S+njkhowmLeUu/r7ir8n78OUKx63kBdMCPssePS89So1TH4hZqnWFsThEd/GiXYp9qMxVrydf7KdM9MTGPFukA==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.1.tgz", + "integrity": "sha512-XvqQ20DH0D+bS3qlrrgh+axRMth5kD1xuvqUQUTeezxUTXBOeR6hWz2/C6FBEu39FRytyybIWrYf7YLSAKr1LQ==", "funding": [ { "type": "individual", @@ -8899,9 +8899,9 @@ } }, "node_modules/ethers": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.4.tgz", - "integrity": "sha512-62UIfxAQXdf67TeeOaoOoPctm5hUlYgfd0iW3wxfj7qRYKDcvvy0f+sJ3W2/Pyx77R8dblvejA8jokj+lS+ATQ==", + "version": "5.6.5", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.5.tgz", + "integrity": "sha512-9CTmplO9bv0s/aPw3HB3txGzKz3tUSI2EfO4dJo0W2WvaEq1ArgsEX6obV+bj5X3yY+Zgb1kAux8TDtJKe1FaA==", "funding": [ { "type": "individual", @@ -8931,11 +8931,11 @@ "@ethersproject/networks": "5.6.2", "@ethersproject/pbkdf2": "5.6.0", "@ethersproject/properties": "5.6.0", - "@ethersproject/providers": "5.6.4", + "@ethersproject/providers": "5.6.5", "@ethersproject/random": "5.6.0", "@ethersproject/rlp": "5.6.0", "@ethersproject/sha2": "5.6.0", - "@ethersproject/signing-key": "5.6.0", + "@ethersproject/signing-key": "5.6.1", "@ethersproject/solidity": "5.6.0", "@ethersproject/strings": "5.6.0", "@ethersproject/transactions": "5.6.0", @@ -29401,9 +29401,9 @@ } }, "@ethersproject/providers": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.4.tgz", - "integrity": "sha512-WAdknnaZ52hpHV3qPiJmKx401BLpup47h36Axxgre9zT+doa/4GC/Ne48ICPxTm0BqndpToHjpLP1ZnaxyE+vw==", + "version": "5.6.5", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.5.tgz", + "integrity": "sha512-TRS+c2Ud+cMpWodmGAc9xbnYRPWzRNYt2zkCSnj58nJoamBQ6x4cUbBeo0lTC3y+6RDVIBeJv18OqsDbSktLVg==", "requires": { "@ethersproject/abstract-provider": "^5.6.0", "@ethersproject/abstract-signer": "^5.6.0", @@ -29455,9 +29455,9 @@ } }, "@ethersproject/signing-key": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.0.tgz", - "integrity": "sha512-S+njkhowmLeUu/r7ir8n78OUKx63kBdMCPssePS89So1TH4hZqnWFsThEd/GiXYp9qMxVrydf7KdM9MTGPFukA==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.1.tgz", + "integrity": "sha512-XvqQ20DH0D+bS3qlrrgh+axRMth5kD1xuvqUQUTeezxUTXBOeR6hWz2/C6FBEu39FRytyybIWrYf7YLSAKr1LQ==", "requires": { "@ethersproject/bytes": "^5.6.0", "@ethersproject/logger": "^5.6.0", @@ -35677,9 +35677,9 @@ } }, "ethers": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.4.tgz", - "integrity": "sha512-62UIfxAQXdf67TeeOaoOoPctm5hUlYgfd0iW3wxfj7qRYKDcvvy0f+sJ3W2/Pyx77R8dblvejA8jokj+lS+ATQ==", + "version": "5.6.5", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.5.tgz", + "integrity": "sha512-9CTmplO9bv0s/aPw3HB3txGzKz3tUSI2EfO4dJo0W2WvaEq1ArgsEX6obV+bj5X3yY+Zgb1kAux8TDtJKe1FaA==", "requires": { "@ethersproject/abi": "5.6.1", "@ethersproject/abstract-provider": "5.6.0", @@ -35699,11 +35699,11 @@ "@ethersproject/networks": "5.6.2", "@ethersproject/pbkdf2": "5.6.0", "@ethersproject/properties": "5.6.0", - "@ethersproject/providers": "5.6.4", + "@ethersproject/providers": "5.6.5", "@ethersproject/random": "5.6.0", "@ethersproject/rlp": "5.6.0", "@ethersproject/sha2": "5.6.0", - "@ethersproject/signing-key": "5.6.0", + "@ethersproject/signing-key": "5.6.1", "@ethersproject/solidity": "5.6.0", "@ethersproject/strings": "5.6.0", "@ethersproject/transactions": "5.6.0", diff --git a/package.json b/package.json index 282584c1c..180360149 100644 --- a/package.json +++ b/package.json @@ -89,7 +89,7 @@ "eslint-plugin-import": "^2.26.0", "eslint-plugin-prettier": "^4.0.0", "ethereum-waffle": "^3.4.4", - "ethers": "^5.6.4", + "ethers": "^5.6.5", "husky": "^7.0.4", "lint-staged": "^12.4.1", "mocha": "^9.2.2", From 003ce4ef031ed24a1fcdf8afbbe9694667222e3f Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Tue, 3 May 2022 13:56:36 +0100 Subject: [PATCH 027/121] feat: add PCV_MOVER role --- contracts/core/TribeRoles.sol | 3 +++ 1 file changed, 3 insertions(+) diff --git a/contracts/core/TribeRoles.sol b/contracts/core/TribeRoles.sol index 6c48572e4..88f2c8574 100644 --- a/contracts/core/TribeRoles.sol +++ b/contracts/core/TribeRoles.sol @@ -103,4 +103,7 @@ library TribeRoles { /// @notice capable of changing PCV Deposit and Global Rate Limited Minter in the PSM bytes32 internal constant PSM_ADMIN_ROLE = keccak256("PSM_ADMIN_ROLE"); + + /// @notice capable of moving PCV on the PCVGuardian + bytes32 internal constant PCV_MOVER = keccak256("PCV_MOVER"); } From f0843bc989daf2133af33bd4485e59164a4b80fe Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Tue, 3 May 2022 14:44:18 +0100 Subject: [PATCH 028/121] feat: remove MINOR_ROLE_ADMIN --- contracts/core/TribeRoles.sol | 3 --- proposals/dao/fip_82b.ts | 1 - proposals/description/fip_82b.ts | 10 ---------- protocol-configuration/permissions.ts | 4 ++-- 4 files changed, 2 insertions(+), 16 deletions(-) diff --git a/contracts/core/TribeRoles.sol b/contracts/core/TribeRoles.sol index 88f2c8574..840611740 100644 --- a/contracts/core/TribeRoles.sol +++ b/contracts/core/TribeRoles.sol @@ -54,9 +54,6 @@ library TribeRoles { /// @notice admin of PCVGuardian bytes32 internal constant PCV_GUARDIAN_ADMIN = keccak256("PCV_GUARDIAN_ADMIN_ROLE"); - /// @notice admin of all Minor Roles - bytes32 internal constant MINOR_ROLE_ADMIN = keccak256("MINOR_ROLE_ADMIN"); - /// @notice admin of the Fuse protocol bytes32 internal constant FUSE_ADMIN = keccak256("FUSE_ADMIN"); diff --git a/proposals/dao/fip_82b.ts b/proposals/dao/fip_82b.ts index 5cbd0d53e..6af136ee8 100644 --- a/proposals/dao/fip_82b.ts +++ b/proposals/dao/fip_82b.ts @@ -62,7 +62,6 @@ const validateTransferredRoleAdmins = async (core: Contract) => { // Non-major roles that previously had 0x0 as their admin expect(await core.getRoleAdmin(ethers.utils.id('PARAMETER_ADMIN'))).to.be.equal(ROLE_ADMIN); - expect(await core.getRoleAdmin(ethers.utils.id('MINOR_ROLE_ADMIN'))).to.be.equal(ROLE_ADMIN); expect(await core.getRoleAdmin(ethers.utils.id('MINTER_ADMIN'))).to.be.equal(ROLE_ADMIN); expect(await core.getRoleAdmin(ethers.utils.id('OPTIMISTIC_ADMIN'))).to.be.equal(ROLE_ADMIN); diff --git a/proposals/description/fip_82b.ts b/proposals/description/fip_82b.ts index 795059573..1139f71b9 100644 --- a/proposals/description/fip_82b.ts +++ b/proposals/description/fip_82b.ts @@ -14,16 +14,6 @@ const fip_82b: ProposalDescription = { ], description: 'Transfer PARAMETER_ADMIN role admin to ROLE_ADMIN' }, - { - target: 'core', - values: '0', - method: 'createRole(bytes32,bytes32)', - arguments: [ - '0xc7be67d109cc181c862ac2eaed91ab54817910d73264a8ad5d87592516929a15', // MINOR_ROLE_ADMIN - '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN - ], - description: 'Transfer MINOR_ROLE_ADMIN role admin to ROLE_ADMIN' - }, { target: 'core', values: '0', diff --git a/protocol-configuration/permissions.ts b/protocol-configuration/permissions.ts index 1a9bece1b..6da0fc851 100644 --- a/protocol-configuration/permissions.ts +++ b/protocol-configuration/permissions.ts @@ -43,9 +43,9 @@ export const permissions = { METAGOVERNANCE_GAUGE_ADMIN: ['feiDAOTimelock', 'optimisticTimelock'], ROLE_ADMIN: ['feiDAOTimelock', 'tribalCouncilTimelock'], POD_METADATA_REGISTER_ROLE: ['tribalCouncilSafe'], - FEI_MINT_ADMIN: ['core', 'feiDAOTimelock', 'roleBastion'], + FEI_MINT_ADMIN: ['feiDAOTimelock', 'roleBastion'], POD_VETO_ADMIN: ['nopeDAO'], POD_ADMIN: ['tribalCouncilTimelock', 'podFactory'], - PCV_MINOR_PARAM_ROLE: ['core', 'feiDAOTimelock', 'roleBastion', 'optimisticTimelock', 'opsOptimisticTimelock'], + PCV_MINOR_PARAM_ROLE: ['feiDAOTimelock', 'roleBastion', 'optimisticTimelock', 'opsOptimisticTimelock'], TOKEMAK_DEPOSIT_ADMIN_ROLE: ['optimisticTimelock'] }; From 96cbdd849c68b32983c9d7a7bf6a8defbba82f8b Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Tue, 3 May 2022 14:55:48 +0100 Subject: [PATCH 029/121] refactor: remove unnecessary role granting --- proposals/description/fip_82b.ts | 50 --------------------------- protocol-configuration/permissions.ts | 4 +-- 2 files changed, 2 insertions(+), 52 deletions(-) diff --git a/proposals/description/fip_82b.ts b/proposals/description/fip_82b.ts index 1139f71b9..388a209db 100644 --- a/proposals/description/fip_82b.ts +++ b/proposals/description/fip_82b.ts @@ -347,16 +347,6 @@ const fip_82b: ProposalDescription = { description: 'Grant TribalCouncil timelock the PSM_ADMIN_ROLE' }, //////// Grant contract admin calling contracts the new roles ///////// - { - target: 'core', - values: '0', - method: 'grantRole(bytes32,address)', - arguments: [ - '0x46797b318ce8c2d83979760ef100a5c0fdb980de4b574d6142ce4d0afce307ed', // PCV_MINOR_PARAM_ROLE - '{core}' - ], - description: 'Grant core the PCV_MINOR_PARAM_ROLE role' - }, { target: 'core', values: '0', @@ -367,26 +357,6 @@ const fip_82b: ProposalDescription = { ], description: 'Grant feiDAOtimelock the PCV_MINOR_PARAM_ROLE role' }, - { - target: 'core', - values: '0', - method: 'grantRole(bytes32,address)', - arguments: [ - '0x46797b318ce8c2d83979760ef100a5c0fdb980de4b574d6142ce4d0afce307ed', // PCV_MINOR_PARAM_ROLE - '{roleBastion}' - ], - description: 'Grant roleBastion the PCV_MINOR_PARAM_ROLE role' - }, - { - target: 'core', - values: '0', - method: 'grantRole(bytes32,address)', - arguments: [ - '0x46797b318ce8c2d83979760ef100a5c0fdb980de4b574d6142ce4d0afce307ed', // PCV_MINOR_PARAM_ROLE - '{opsOptimisticTimelock}' - ], - description: 'Grant opsOptimisticTimelock the PCV_MINOR_PARAM_ROLE role' - }, { target: 'core', values: '0', @@ -417,16 +387,6 @@ const fip_82b: ProposalDescription = { ], description: 'Grant tribalChiefSyncV2 the FUSE_ADMIN role' }, - { - target: 'core', - values: '0', - method: 'grantRole(bytes32,address)', - arguments: [ - '0x4a4f013dcba6b46103e81e286782135c0dda175e82564e878ae500734753e55e', // FEI_MINT_ADMIN - '{core}' - ], - description: 'Grant core the FEI_MINT_ADMIN role' - }, { target: 'core', values: '0', @@ -437,16 +397,6 @@ const fip_82b: ProposalDescription = { ], description: 'Grant feiDAOTimelock the FEI_MINT_ADMIN role' }, - { - target: 'core', - values: '0', - method: 'grantRole(bytes32,address)', - arguments: [ - '0x4a4f013dcba6b46103e81e286782135c0dda175e82564e878ae500734753e55e', // FEI_MINT_ADMIN - '{roleBastion}' - ], - description: 'Grant roleBastion the FEI_MINT_ADMIN role' - }, { target: 'core', values: '0', diff --git a/protocol-configuration/permissions.ts b/protocol-configuration/permissions.ts index 6da0fc851..4595fdee6 100644 --- a/protocol-configuration/permissions.ts +++ b/protocol-configuration/permissions.ts @@ -43,9 +43,9 @@ export const permissions = { METAGOVERNANCE_GAUGE_ADMIN: ['feiDAOTimelock', 'optimisticTimelock'], ROLE_ADMIN: ['feiDAOTimelock', 'tribalCouncilTimelock'], POD_METADATA_REGISTER_ROLE: ['tribalCouncilSafe'], - FEI_MINT_ADMIN: ['feiDAOTimelock', 'roleBastion'], + FEI_MINT_ADMIN: ['feiDAOTimelock'], POD_VETO_ADMIN: ['nopeDAO'], POD_ADMIN: ['tribalCouncilTimelock', 'podFactory'], - PCV_MINOR_PARAM_ROLE: ['feiDAOTimelock', 'roleBastion', 'optimisticTimelock', 'opsOptimisticTimelock'], + PCV_MINOR_PARAM_ROLE: ['feiDAOTimelock', 'optimisticTimelock'], TOKEMAK_DEPOSIT_ADMIN_ROLE: ['optimisticTimelock'] }; From d5b09d9921a7aac4d6fa4210762fcbc27978ba81 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Tue, 3 May 2022 16:00:14 +0100 Subject: [PATCH 030/121] test: update e2e test --- proposals/dao/fip_82b.ts | 5 ----- protocol-configuration/permissions.ts | 4 ++-- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/proposals/dao/fip_82b.ts b/proposals/dao/fip_82b.ts index 6af136ee8..4902ba6c5 100644 --- a/proposals/dao/fip_82b.ts +++ b/proposals/dao/fip_82b.ts @@ -124,16 +124,11 @@ const validateCallingContractsHaveNewAdmin = async (core: Contract, addresses: N expect(await core.hasRole(ethers.utils.id('FUSE_ADMIN'), addresses.tribalChiefSyncV2)).to.be.true; // GOVERNOR : FEI_MINT_ADMIN - expect(await core.hasRole(ethers.utils.id('FEI_MINT_ADMIN'), addresses.core)).to.be.true; expect(await core.hasRole(ethers.utils.id('FEI_MINT_ADMIN'), addresses.feiDAOTimelock)).to.be.true; - expect(await core.hasRole(ethers.utils.id('FEI_MINT_ADMIN'), addresses.roleBastion)).to.be.true; // GOVERNOR : PCV_MINOR_PARAM_ROLE expect(await core.hasRole(ethers.utils.id('PCV_MINOR_PARAM_ROLE'), addresses.feiDAOTimelock)).to.be.true; - expect(await core.hasRole(ethers.utils.id('PCV_MINOR_PARAM_ROLE'), addresses.core)).to.be.true; - expect(await core.hasRole(ethers.utils.id('PCV_MINOR_PARAM_ROLE'), addresses.roleBastion)).to.be.true; expect(await core.hasRole(ethers.utils.id('PCV_MINOR_PARAM_ROLE'), addresses.optimisticTimelock)).to.be.true; - expect(await core.hasRole(ethers.utils.id('PCV_MINOR_PARAM_ROLE'), addresses.opsOptimisticTimelock)).to.be.true; }; const validateTribalCouncilRoles = async (core: Contract, tribalCouncilTimelockAddress: string) => { diff --git a/protocol-configuration/permissions.ts b/protocol-configuration/permissions.ts index 4595fdee6..837566540 100644 --- a/protocol-configuration/permissions.ts +++ b/protocol-configuration/permissions.ts @@ -35,7 +35,7 @@ export const permissions = { BALANCER_MANAGER_ADMIN_ROLE: [], PSM_ADMIN_ROLE: ['tribalCouncilTimelock'], TRIBAL_CHIEF_ADMIN_ROLE: ['optimisticTimelock', 'tribalChiefSyncV2'], - FUSE_ADMIN: ['optimisticTimelock', 'tribalChiefSyncV2'], + FUSE_ADMIN: ['optimisticTimelock', 'tribalChiefSyncV2', 'tribalCouncilTimelock'], VOTIUM_ADMIN_ROLE: ['opsOptimisticTimelock'], PCV_GUARDIAN_ADMIN_ROLE: ['optimisticTimelock'], METAGOVERNANCE_VOTE_ADMIN: ['feiDAOTimelock', 'opsOptimisticTimelock'], @@ -43,7 +43,7 @@ export const permissions = { METAGOVERNANCE_GAUGE_ADMIN: ['feiDAOTimelock', 'optimisticTimelock'], ROLE_ADMIN: ['feiDAOTimelock', 'tribalCouncilTimelock'], POD_METADATA_REGISTER_ROLE: ['tribalCouncilSafe'], - FEI_MINT_ADMIN: ['feiDAOTimelock'], + FEI_MINT_ADMIN: ['feiDAOTimelock', 'tribalCouncilTimelock'], POD_VETO_ADMIN: ['nopeDAO'], POD_ADMIN: ['tribalCouncilTimelock', 'podFactory'], PCV_MINOR_PARAM_ROLE: ['feiDAOTimelock', 'optimisticTimelock'], From e0384b6c10595e6e5c3b9e94ed58f08603120eef Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Tue, 3 May 2022 16:03:36 +0100 Subject: [PATCH 031/121] feat: remove fip_82 config --- test/integration/proposals_config.ts | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/test/integration/proposals_config.ts b/test/integration/proposals_config.ts index 2036c7fd4..dc84f74d1 100644 --- a/test/integration/proposals_config.ts +++ b/test/integration/proposals_config.ts @@ -18,27 +18,6 @@ const proposals: ProposalsConfigMap = { category: ProposalCategory.DAO } */ - fip_82: { - deploy: false, // deploy flag for whether to run deploy action during e2e tests or use mainnet state - totalValue: 0, // amount of ETH to send to DAO execution - proposal: fip_82, // full proposal file, imported from '@proposals/description/fip_xx.ts' - proposalId: '', - affectedContractSignoff: [ - 'roleBastion', - 'podFactory', - 'podExecutor', - 'nopeDAO', - 'governanceMetadataRegistry', - 'core', - 'tribe', - 'feiDAOTimelock', - 'tribalCouncilTimelock', - 'tribalCouncilSafe', - 'podAdminGateway' - ], - deprecatedContractSignoff: [], - category: ProposalCategory.DAO - }, fip_98: { deploy: false, proposalId: '47738997083165992958921925097327638388915944734650384828020246684763693471048', From 0416b4674f0bc58ca7c9f5da9960a8440208f685 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Tue, 3 May 2022 18:34:19 +0100 Subject: [PATCH 032/121] fix: update block number --- hardhat.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hardhat.config.ts b/hardhat.config.ts index d473f241f..bfcf69452 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -57,7 +57,7 @@ export default { forking: enableMainnetForking ? { url: `https://eth-mainnet.alchemyapi.io/v2/${mainnetAlchemyApiKey}`, - blockNumber: 14635776 // Thursday, April 21st + blockNumber: 14676055 // Friday, April 29th } : undefined }, From c511b6516d689ba93bc724ef7601ee21073bd88d Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Tue, 3 May 2022 18:36:54 +0100 Subject: [PATCH 033/121] fix: reset fork to pinned block --- test/helpers.ts | 3 ++- test/integration/proposals_config.ts | 22 +++++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/test/helpers.ts b/test/helpers.ts index c691ce21b..8bf0eebcb 100644 --- a/test/helpers.ts +++ b/test/helpers.ts @@ -84,7 +84,8 @@ async function resetFork(): Promise { { forking: hre.config.networks.hardhat.forking ? { - jsonRpcUrl: hre.config.networks.hardhat.forking.url + jsonRpcUrl: hre.config.networks.hardhat.forking.url, + blockNumber: hre.config.networks.hardhat.forking.blockNumber } : undefined } diff --git a/test/integration/proposals_config.ts b/test/integration/proposals_config.ts index dc84f74d1..4f0f1de8e 100644 --- a/test/integration/proposals_config.ts +++ b/test/integration/proposals_config.ts @@ -18,6 +18,27 @@ const proposals: ProposalsConfigMap = { category: ProposalCategory.DAO } */ + fip_82: { + deploy: false, // deploy flag for whether to run deploy action during e2e tests or use mainnet state + totalValue: 0, // amount of ETH to send to DAO execution + proposal: fip_82, // full proposal file, imported from '@proposals/description/fip_xx.ts' + proposalId: '', + affectedContractSignoff: [ + 'roleBastion', + 'podFactory', + 'podExecutor', + 'nopeDAO', + 'governanceMetadataRegistry', + 'core', + 'tribe', + 'feiDAOTimelock', + 'tribalCouncilTimelock', + 'tribalCouncilSafe', + 'podAdminGateway' + ], + deprecatedContractSignoff: [], + category: ProposalCategory.DAO + }, fip_98: { deploy: false, proposalId: '47738997083165992958921925097327638388915944734650384828020246684763693471048', @@ -37,7 +58,6 @@ const proposals: ProposalsConfigMap = { totalValue: 0, proposal: fip_98 }, - fip_99: { deploy: false, proposalId: null, From 0f28634b4535a5dc47a94c9e17d16eb9efa05c62 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Tue, 3 May 2022 19:37:05 +0100 Subject: [PATCH 034/121] refactor: rename MINTER_ADMIN to be clearer --- contracts/core/TribeRoles.sol | 2 +- proposals/dao/fip_82b.ts | 1 + proposals/description/fip_82b.ts | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/contracts/core/TribeRoles.sol b/contracts/core/TribeRoles.sol index 840611740..035131b01 100644 --- a/contracts/core/TribeRoles.sol +++ b/contracts/core/TribeRoles.sol @@ -64,7 +64,7 @@ library TribeRoles { bytes32 internal constant PCV_MINOR_PARAM_ROLE = keccak256("PCV_MINOR_PARAM_ROLE"); /// @notice capable of setting FEI Minters within global rate limits and caps - bytes32 internal constant MINTER_ADMIN = keccak256("MINTER_ADMIN"); + bytes32 internal constant RATE_LIMITED_MINTER_ADMIN = keccak256("RATE_LIMITED_MINTER_ADMIN"); /// @notice manages the constituents of Optimistic Timelocks, including Proposers and Executors bytes32 internal constant OPTIMISTIC_ADMIN = keccak256("OPTIMISTIC_ADMIN"); diff --git a/proposals/dao/fip_82b.ts b/proposals/dao/fip_82b.ts index 4902ba6c5..cea9f9cea 100644 --- a/proposals/dao/fip_82b.ts +++ b/proposals/dao/fip_82b.ts @@ -76,6 +76,7 @@ const validateTransferredRoleAdmins = async (core: Contract) => { expect(await core.getRoleAdmin(ethers.utils.id('METAGOVERNANCE_GAUGE_ADMIN'))).to.be.equal(ROLE_ADMIN); expect(await core.getRoleAdmin(ethers.utils.id('SWAP_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); expect(await core.getRoleAdmin(ethers.utils.id('VOTIUM_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); + expect(await core.getRoleAdmin(ethers.utils.id('RATE_LIMITED_MINTER_ADMIN'))).to.be.equal(ROLE_ADMIN); }; /// Validate that the expected new TribeRoles have been created diff --git a/proposals/description/fip_82b.ts b/proposals/description/fip_82b.ts index 388a209db..1152d6c28 100644 --- a/proposals/description/fip_82b.ts +++ b/proposals/description/fip_82b.ts @@ -19,10 +19,10 @@ const fip_82b: ProposalDescription = { values: '0', method: 'createRole(bytes32,bytes32)', arguments: [ - '0x498a9dae57f391d8efcc7bb3e7440ad6a25b1261044ef1b555c5484cb9f67659', // MINTER_ADMIN + '0xdc81827f5af6c7965785d62c38ca3481ccf540d7f561cac825518e49d6161c95', // RATE_LIMITED_MINTER_ADMIN '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN ], - description: 'Transfer MINTER_ADMIN role admin to ROLE_ADMIN' + description: 'Transfer RATE_LIMITED_MINTER_ADMIN role admin to ROLE_ADMIN' }, { target: 'core', From 9bd41cbf0dcba059241de9a5528c237816172a45 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Tue, 3 May 2022 20:30:42 +0100 Subject: [PATCH 035/121] feat: add PCV_SAFE_MOVER role --- contracts/core/TribeRoles.sol | 3 +++ contracts/pcv/PCVGuardian.sol | 3 ++- test/unit/pcv/PCVGuardian.test.ts | 7 +++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/contracts/core/TribeRoles.sol b/contracts/core/TribeRoles.sol index 84ffd2459..a0c10302e 100644 --- a/contracts/core/TribeRoles.sol +++ b/contracts/core/TribeRoles.sol @@ -97,4 +97,7 @@ library TribeRoles { /// @notice capable of changing PCV Deposit and Global Rate Limited Minter in the PSM bytes32 internal constant PSM_ADMIN_ROLE = keccak256("PSM_ADMIN_ROLE"); + + /// @notice capable of moving PCV between safe addresses on the PCVGuardian + bytes32 internal constant PCV_SAFE_MOVER_ROLE = keccak256("PCV_SAFE_MOVER_ROLE"); } diff --git a/contracts/pcv/PCVGuardian.sol b/contracts/pcv/PCVGuardian.sol index 9a32eee8d..f66bf738e 100644 --- a/contracts/pcv/PCVGuardian.sol +++ b/contracts/pcv/PCVGuardian.sol @@ -6,6 +6,7 @@ import "../refs/CoreRef.sol"; import "./IPCVGuardian.sol"; import "./IPCVDeposit.sol"; import "../libs/CoreRefPauseableLib.sol"; +import {TribeRoles} from "../core/TribeRoles.sol"; contract PCVGuardian is IPCVGuardian, CoreRef { using CoreRefPauseableLib for address; @@ -81,7 +82,7 @@ contract PCVGuardian is IPCVGuardian, CoreRef { uint256 amount, bool pauseAfter, bool depositAfter - ) external override isGovernorOrGuardianOrAdmin { + ) external override hasAnyOfThreeRoles(TribeRoles.GOVERNOR, TribeRoles.PCV_SAFE_MOVER_ROLE, TribeRoles.GUARDIAN) { require(isSafeAddress(safeAddress), "Provided address is not a safe address!"); pcvDeposit._ensureUnpaused(); diff --git a/test/unit/pcv/PCVGuardian.test.ts b/test/unit/pcv/PCVGuardian.test.ts index bff9fe4e5..29e3c7e3e 100644 --- a/test/unit/pcv/PCVGuardian.test.ts +++ b/test/unit/pcv/PCVGuardian.test.ts @@ -209,6 +209,13 @@ describe('PCV Guardian', function () { expect(await token.balanceOf(userAddress)).to.eq(1); }); + it('should withdraw from a token-pcv deposit when called by the governor', async () => { + await pcvGuardianWithoutStartingAddresses + .connect(impersonatedSigners[governorAddress]) + .withdrawToSafeAddress(tokenPCVDeposit.address, userAddress, 1, false, false); + expect(await token.balanceOf(userAddress)).to.eq(1); + }); + it('should withdraw from a token-pcv deposit and deposit after', async () => { await pcvGuardianWithoutStartingAddresses .connect(impersonatedSigners[governorAddress]) From bb7ec40db2280243087c1e9845cc96cf6cffa380 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Tue, 3 May 2022 20:42:13 +0100 Subject: [PATCH 036/121] feat: grant PCV_SAFE_MOVER_ROLE --- proposals/dao/fip_82b.ts | 4 ++++ proposals/description/fip_82b.ts | 30 +++++++++++++++++++++++++++ protocol-configuration/permissions.ts | 3 ++- 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/proposals/dao/fip_82b.ts b/proposals/dao/fip_82b.ts index cea9f9cea..473ddd76f 100644 --- a/proposals/dao/fip_82b.ts +++ b/proposals/dao/fip_82b.ts @@ -87,6 +87,7 @@ const validateNewCouncilRoles = async (core: Contract) => { expect(await core.getRoleAdmin(ethers.utils.id('FEI_MINT_ADMIN'))).to.be.equal(ROLE_ADMIN); expect(await core.getRoleAdmin(ethers.utils.id('PCV_MINOR_PARAM_ROLE'))).to.be.equal(ROLE_ADMIN); expect(await core.getRoleAdmin(ethers.utils.id('PSM_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); + expect(await core.getRoleAdmin(ethers.utils.id('PCV_SAFE_MOVER_ROLE'))).to.be.equal(ROLE_ADMIN); }; /// Validate that the relevant contract admins have been set to their expected values @@ -130,6 +131,8 @@ const validateCallingContractsHaveNewAdmin = async (core: Contract, addresses: N // GOVERNOR : PCV_MINOR_PARAM_ROLE expect(await core.hasRole(ethers.utils.id('PCV_MINOR_PARAM_ROLE'), addresses.feiDAOTimelock)).to.be.true; expect(await core.hasRole(ethers.utils.id('PCV_MINOR_PARAM_ROLE'), addresses.optimisticTimelock)).to.be.true; + + expect(await core.hasRole(ethers.utils.id('PCV_SAFE_MOVER_ROLE'), addresses.optimisticTimelock)).to.be.true; }; const validateTribalCouncilRoles = async (core: Contract, tribalCouncilTimelockAddress: string) => { @@ -139,6 +142,7 @@ const validateTribalCouncilRoles = async (core: Contract, tribalCouncilTimelockA expect(await core.hasRole(ethers.utils.id('PCV_GUARDIAN_ADMIN_ROLE'), tribalCouncilTimelockAddress)).to.be.true; expect(await core.hasRole(ethers.utils.id('ORACLE_ADMIN_ROLE'), tribalCouncilTimelockAddress)).to.be.true; expect(await core.hasRole(ethers.utils.id('PSM_ADMIN_ROLE'), tribalCouncilTimelockAddress)).to.be.true; + expect(await core.hasRole(ethers.utils.id('PCV_SAFE_MOVER_ROLE'), tribalCouncilTimelockAddress)).to.be.true; }; export { deploy, setup, teardown, validate }; diff --git a/proposals/description/fip_82b.ts b/proposals/description/fip_82b.ts index 1152d6c28..a5aa0e252 100644 --- a/proposals/description/fip_82b.ts +++ b/proposals/description/fip_82b.ts @@ -165,6 +165,16 @@ const fip_82b: ProposalDescription = { ], description: 'Create MINOR_PARAM_ROLE role, assigning ROLE_ADMIN as the role admin' }, + { + target: 'core', + values: '0', + method: 'createRole(bytes32,bytes32)', + arguments: [ + '0xd387c7eec7161b3637e694ef5cf8f1a9e29bfd35135c86c9b540bebec4ef221a', // PCV_SAFE_MOVER_ROLE + '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN + ], + description: 'Create PCV_SAFE_MOVER_ROLE role, assigning ROLE_ADMIN as the role admin' + }, /////// Set the relevant contract admins to the newly created roles ////////// // FUSE_ADMIN { @@ -406,6 +416,26 @@ const fip_82b: ProposalDescription = { '{optimisticTimelock}' ], description: 'Grant optimisticTimelock the TOKEMAK_DEPOSIT_ADMIN_ROLE role' + }, + { + target: 'core', + values: '0', + method: 'grantRole(bytes32,address)', + arguments: [ + '0x6c9ecf07a5886fd74a8d32f4d3c317a7d5e5b5c7a073a3ab06c217e9ce5288e3', // PCV_SAFE_MOVER_ROLE + '{tribalCouncilTimelock}' + ], + description: 'Grant tribalCouncilTimelock the PCV_SAFE_MOVER_ROLE role' + }, + { + target: 'core', + values: '0', + method: 'grantRole(bytes32,address)', + arguments: [ + '0x6c9ecf07a5886fd74a8d32f4d3c317a7d5e5b5c7a073a3ab06c217e9ce5288e3', // PCV_SAFE_MOVER_ROLE + '{optimisticTimelock}' + ], + description: 'Grant optimisticTimelock the PCV_SAFE_MOVER_ROLE role' } ], description: ` diff --git a/protocol-configuration/permissions.ts b/protocol-configuration/permissions.ts index 837566540..600fb2418 100644 --- a/protocol-configuration/permissions.ts +++ b/protocol-configuration/permissions.ts @@ -37,7 +37,8 @@ export const permissions = { TRIBAL_CHIEF_ADMIN_ROLE: ['optimisticTimelock', 'tribalChiefSyncV2'], FUSE_ADMIN: ['optimisticTimelock', 'tribalChiefSyncV2', 'tribalCouncilTimelock'], VOTIUM_ADMIN_ROLE: ['opsOptimisticTimelock'], - PCV_GUARDIAN_ADMIN_ROLE: ['optimisticTimelock'], + PCV_GUARDIAN_ADMIN_ROLE: ['optimisticTimelock', 'tribalCouncilTimelock'], + PCV_SAFE_MOVER_ROLE: ['optimisticTimelock', 'tribalCouncilTimelock'], METAGOVERNANCE_VOTE_ADMIN: ['feiDAOTimelock', 'opsOptimisticTimelock'], METAGOVERNANCE_TOKEN_STAKING: ['feiDAOTimelock', 'opsOptimisticTimelock'], METAGOVERNANCE_GAUGE_ADMIN: ['feiDAOTimelock', 'optimisticTimelock'], From 442a0a72f1f48e65154335ab7bc25f1cd9a41b30 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Tue, 3 May 2022 19:37:05 +0100 Subject: [PATCH 037/121] refactor: rename MINTER_ADMIN to be clearer --- contracts/core/TribeRoles.sol | 2 +- proposals/dao/fip_82b.ts | 2 +- proposals/description/fip_82b.ts | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/contracts/core/TribeRoles.sol b/contracts/core/TribeRoles.sol index 840611740..035131b01 100644 --- a/contracts/core/TribeRoles.sol +++ b/contracts/core/TribeRoles.sol @@ -64,7 +64,7 @@ library TribeRoles { bytes32 internal constant PCV_MINOR_PARAM_ROLE = keccak256("PCV_MINOR_PARAM_ROLE"); /// @notice capable of setting FEI Minters within global rate limits and caps - bytes32 internal constant MINTER_ADMIN = keccak256("MINTER_ADMIN"); + bytes32 internal constant RATE_LIMITED_MINTER_ADMIN = keccak256("RATE_LIMITED_MINTER_ADMIN"); /// @notice manages the constituents of Optimistic Timelocks, including Proposers and Executors bytes32 internal constant OPTIMISTIC_ADMIN = keccak256("OPTIMISTIC_ADMIN"); diff --git a/proposals/dao/fip_82b.ts b/proposals/dao/fip_82b.ts index 4902ba6c5..6984d41b3 100644 --- a/proposals/dao/fip_82b.ts +++ b/proposals/dao/fip_82b.ts @@ -61,8 +61,8 @@ const validateTransferredRoleAdmins = async (core: Contract) => { const ROLE_ADMIN = ethers.utils.id('ROLE_ADMIN'); // Non-major roles that previously had 0x0 as their admin + expect(await core.getRoleAdmin(ethers.utils.id('RATE_LIMITED_MINTER_ADMIN'))).to.be.equal(ROLE_ADMIN); expect(await core.getRoleAdmin(ethers.utils.id('PARAMETER_ADMIN'))).to.be.equal(ROLE_ADMIN); - expect(await core.getRoleAdmin(ethers.utils.id('MINTER_ADMIN'))).to.be.equal(ROLE_ADMIN); expect(await core.getRoleAdmin(ethers.utils.id('OPTIMISTIC_ADMIN'))).to.be.equal(ROLE_ADMIN); expect(await core.getRoleAdmin(ethers.utils.id('MINOR_PARAM_ROLE'))).to.be.equal(ROLE_ADMIN); diff --git a/proposals/description/fip_82b.ts b/proposals/description/fip_82b.ts index 388a209db..1152d6c28 100644 --- a/proposals/description/fip_82b.ts +++ b/proposals/description/fip_82b.ts @@ -19,10 +19,10 @@ const fip_82b: ProposalDescription = { values: '0', method: 'createRole(bytes32,bytes32)', arguments: [ - '0x498a9dae57f391d8efcc7bb3e7440ad6a25b1261044ef1b555c5484cb9f67659', // MINTER_ADMIN + '0xdc81827f5af6c7965785d62c38ca3481ccf540d7f561cac825518e49d6161c95', // RATE_LIMITED_MINTER_ADMIN '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN ], - description: 'Transfer MINTER_ADMIN role admin to ROLE_ADMIN' + description: 'Transfer RATE_LIMITED_MINTER_ADMIN role admin to ROLE_ADMIN' }, { target: 'core', From c4ece4e2cd3fdbd9250a8e2366387589233db249 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Tue, 3 May 2022 22:23:29 +0100 Subject: [PATCH 038/121] feat: deploy new PCVGuardian with migrated state --- proposals/dao/fip_82.ts | 6 +---- proposals/dao/fip_82b.ts | 43 +++++++++++++++++++++++++++++--- proposals/description/fip_82b.ts | 16 +++++++++--- test/helpers.ts | 7 +++++- 4 files changed, 59 insertions(+), 13 deletions(-) diff --git a/proposals/dao/fip_82.ts b/proposals/dao/fip_82.ts index 57defa254..2fb653ab1 100644 --- a/proposals/dao/fip_82.ts +++ b/proposals/dao/fip_82.ts @@ -7,7 +7,7 @@ import { TeardownUpgradeFunc, ValidateUpgradeFunc } from '@custom-types/types'; -import { getImpersonatedSigner } from '@test/helpers'; +import { getImpersonatedSigner, validateArraysEqual } from '@test/helpers'; import { tribeCouncilPodConfig, PodCreationConfig } from '@protocol/optimisticGovernance'; import { abi as inviteTokenABI } from '../../artifacts/@orcaprotocol/contracts/contracts/InviteToken.sol/InviteToken.json'; import { abi as timelockABI } from '../../artifacts/@openzeppelin/contracts/governance/TimelockController.sol/TimelockController.json'; @@ -15,10 +15,6 @@ import { abi as gnosisSafeABI } from '../../artifacts/contracts/pods/interfaces/ import { Contract } from 'ethers'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; -const validateArraysEqual = (arrayA: string[], arrayB: string[]) => { - arrayA.every((a) => expect(arrayB.map((b) => b.toLowerCase()).includes(a.toLowerCase()))); -}; - // Transfers Orca tokens from deployer address to the factory, so that it can deploy pods // Requirement of holding Orca tokens to deploy is a slow rollout mechanism used by Orca const transferOrcaTokens = async ( diff --git a/proposals/dao/fip_82b.ts b/proposals/dao/fip_82b.ts index bfbcb5015..aca0f46fc 100644 --- a/proposals/dao/fip_82b.ts +++ b/proposals/dao/fip_82b.ts @@ -9,6 +9,7 @@ import { ValidateUpgradeFunc } from '@custom-types/types'; import { Contract } from 'ethers'; +import { validateArraysEqual } from '@test/helpers'; /* @@ -27,8 +28,16 @@ const fipNumber = 'fip_82b'; // This should exclusively include new contract deployments const deploy: DeployUpgradeFunc = async (deployAddress: string, addresses: NamedAddresses, logging: boolean) => { console.log(`No deploy actions for fip${fipNumber}`); + const deploySigner = (await ethers.getSigners())[0]; + const previousPCVGuardian = await ethers.getContractAt('PCVGuardian', addresses.pcvGuardian, deploySigner); + const safeAddresses = await previousPCVGuardian.getSafeAddresses(); + + const pcvGuardianFactory = await ethers.getContractFactory('PCVGuardian'); + const newPCVGuardian = await pcvGuardianFactory.deploy(addresses.core, safeAddresses); + logging && console.log('PCVGuardian deployed to: ', newPCVGuardian.address); + return { - // put returned contract objects here + newPCVGuardian }; }; @@ -48,7 +57,35 @@ const teardown: TeardownUpgradeFunc = async (addresses, oldContracts, contracts, // Run any validations required on the fip using mocha or console logging // IE check balances, check state of contracts, etc. const validate: ValidateUpgradeFunc = async (addresses, oldContracts, contracts, logging) => { - console.log(`No actions to complete in validate for fip${fipNumber}`); + // 1. Validate new PCVGuardian deployment and roles granted + const core = contracts.core; + const newPCVGuardian = contracts.newPCVGuardian; + + const safeAddresses = await newPCVGuardian.getSafeAddresses(); + const expectedSafeAddresses = [ + '0xd51dba7a94e1adea403553a8235c302cebf41a3c', + '0x4fcb1435fd42ce7ce7af3cb2e98289f79d2962b3', + '0x98e5f5706897074a4664dd3a32eb80242d6e694b', + '0x5b86887e171bae0c2c826e87e34df8d558c079b9', + '0x2a188f9eb761f70ecea083ba6c2a40145078dfc2', + '0xb0e731f036adfdec12da77c15aab0f90e8e45a0e', + '0x24f663c69cd4b263cf5685a49013ff5f1c898d24', + '0x5ae217de26f6ff5f481c6e10ec48b2cf2fc857c8', + '0xe8633c49ace655eb4a8b720e6b12f09bd3a97812', + '0xcd1ac0014e2ebd972f40f24df1694e6f528b2fd4', + '0xc5bb8f0253776bec6ff450c2b40f092f7e7f5b57', + '0xc4eac760c2c631ee0b064e39888b89158ff808b2', + '0x2c47fef515d2c70f2427706999e158533f7cf090', + '0x9aadffe00eae6d8e59bb4f7787c6b99388a6960d', + '0xd2174d78637a40448112aa6b30f9b19e6cf9d1f9', + '0x5dde9b4b14edf59cb23c1d4579b279846998205e' + ]; + validateArraysEqual(safeAddresses, expectedSafeAddresses); + expect(safeAddresses.length).to.be.equal(expectedSafeAddresses.length); + expect(await core.hasRole(ethers.utils.id('GUARDIAN_ROLE'), newPCVGuardian.address)).to.be.true; + expect(await core.hasRole(ethers.utils.id('PCV_CONTROLLER_ROLE'), newPCVGuardian.address)).to.be.true; + + // 2. Validate TribalCouncil role transfers await validateTransferredRoleAdmins(contracts.core); await validateNewCouncilRoles(contracts.core); await validateContractAdmins(contracts); @@ -131,8 +168,6 @@ const validateCallingContractsHaveNewAdmin = async (core: Contract, addresses: N // GOVERNOR : PCV_MINOR_PARAM_ROLE expect(await core.hasRole(ethers.utils.id('PCV_MINOR_PARAM_ROLE'), addresses.feiDAOTimelock)).to.be.true; expect(await core.hasRole(ethers.utils.id('PCV_MINOR_PARAM_ROLE'), addresses.optimisticTimelock)).to.be.true; - - expect(await core.hasRole(ethers.utils.id('PCV_SAFE_MOVER_ROLE'), addresses.optimisticTimelock)).to.be.true; }; const validateTribalCouncilRoles = async (core: Contract, tribalCouncilTimelockAddress: string) => { diff --git a/proposals/description/fip_82b.ts b/proposals/description/fip_82b.ts index a5aa0e252..2808b4c1c 100644 --- a/proposals/description/fip_82b.ts +++ b/proposals/description/fip_82b.ts @@ -432,10 +432,20 @@ const fip_82b: ProposalDescription = { values: '0', method: 'grantRole(bytes32,address)', arguments: [ - '0x6c9ecf07a5886fd74a8d32f4d3c317a7d5e5b5c7a073a3ab06c217e9ce5288e3', // PCV_SAFE_MOVER_ROLE - '{optimisticTimelock}' + '0x0866eae1216ed05a11636a648003f3f62921eb97ccb05acc30636f62958a8bd6', // PCV_CONTROLLER + '{newPCVGuardian}' + ], + description: 'Grant newPCVGuardian the PCV_CONTROLLER_ROLE' + }, + { + target: 'core', + values: '0', + method: 'grantRole(bytes32,address)', + arguments: [ + '0x55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041', // GUARDIAN + '{newPCVGuardian}' ], - description: 'Grant optimisticTimelock the PCV_SAFE_MOVER_ROLE role' + description: 'Grant newPCVGuardian the GUARDIAN role' } ], description: ` diff --git a/test/helpers.ts b/test/helpers.ts index 8bf0eebcb..afee1469f 100644 --- a/test/helpers.ts +++ b/test/helpers.ts @@ -134,6 +134,10 @@ async function getCore(): Promise { return core; } +const validateArraysEqual = (arrayA: string[], arrayB: string[]) => { + arrayA.every((a) => expect(arrayB.map((b) => b.toLowerCase()).includes(a.toLowerCase()))); +}; + async function expectApprox( actual: string | number | BigNumberish, expected: string | number | BigNumberish, @@ -343,5 +347,6 @@ export { resetFork, overwriteChainlinkAggregator, performDAOAction, - initialiseGnosisSDK + initialiseGnosisSDK, + validateArraysEqual }; From b50e274910cd85df0725c9b208f31f359c6f5f02 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Tue, 3 May 2022 22:51:27 +0100 Subject: [PATCH 039/121] feat: remove PCV_GUARDIAN_ADMIN --- contracts/core/TribeRoles.sol | 3 +++ contracts/pcv/PCVGuardian.sol | 30 ++++++++++++++++++++++-------- test/unit/pcv/PCVGuardian.test.ts | 10 ++++------ 3 files changed, 29 insertions(+), 14 deletions(-) diff --git a/contracts/core/TribeRoles.sol b/contracts/core/TribeRoles.sol index 98411e970..74737a94c 100644 --- a/contracts/core/TribeRoles.sol +++ b/contracts/core/TribeRoles.sol @@ -103,4 +103,7 @@ library TribeRoles { /// @notice capable of moving PCV between safe addresses on the PCVGuardian bytes32 internal constant PCV_SAFE_MOVER_ROLE = keccak256("PCV_SAFE_MOVER_ROLE"); + + /// @notice capable of setting and unsetting safe addresses on the PCVGuardian + bytes32 internal constant PCV_SAFE_ADMIN_ROLE = keccak256("PCV_SAFE_ADMIN_ROLE"); } diff --git a/contracts/pcv/PCVGuardian.sol b/contracts/pcv/PCVGuardian.sol index ce72ffc8b..d1e0687eb 100644 --- a/contracts/pcv/PCVGuardian.sol +++ b/contracts/pcv/PCVGuardian.sol @@ -16,8 +16,6 @@ contract PCVGuardian is IPCVGuardian, CoreRef { EnumerableSet.AddressSet private safeAddresses; constructor(address _core, address[] memory _safeAddresses) CoreRef(_core) { - _setContractAdminRole(keccak256("PCV_GUARDIAN_ADMIN_ROLE")); - for (uint256 i = 0; i < _safeAddresses.length; i++) { _setSafeAddress(_safeAddresses[i]); } @@ -36,34 +34,50 @@ contract PCVGuardian is IPCVGuardian, CoreRef { return safeAddresses.values(); } - // ---------- Governor-or-Admin-Only State-Changing API ---------- + // ---------- GOVERNOR-or-PCV_SAFE_ADMIN_ROLE-Only State-Changing API ---------- /// @notice governor-only method to set an address as "safe" to withdraw funds to /// @param pcvDeposit the address to set as safe - function setSafeAddress(address pcvDeposit) external override onlyGovernorOrAdmin { + function setSafeAddress(address pcvDeposit) + external + override + hasAnyOfTwoRoles(TribeRoles.GOVERNOR, TribeRoles.PCV_SAFE_ADMIN_ROLE) + { _setSafeAddress(pcvDeposit); } /// @notice batch version of setSafeAddress /// @param _safeAddresses the addresses to set as safe, as calldata - function setSafeAddresses(address[] calldata _safeAddresses) external override onlyGovernorOrAdmin { + function setSafeAddresses(address[] calldata _safeAddresses) + external + override + hasAnyOfTwoRoles(TribeRoles.GOVERNOR, TribeRoles.PCV_SAFE_ADMIN_ROLE) + { require(_safeAddresses.length != 0, "empty"); for (uint256 i = 0; i < _safeAddresses.length; i++) { _setSafeAddress(_safeAddresses[i]); } } - // ---------- Governor-or-Admin-Or-Guardian-Only State-Changing API ---------- + // ---------- GOVERNOR-or-PCV_SAFE_ADMIN_ROLE-Or-GUARDIAN-Only State-Changing API ---------- /// @notice governor-or-guardian-only method to un-set an address as "safe" to withdraw funds to /// @param pcvDeposit the address to un-set as safe - function unsetSafeAddress(address pcvDeposit) external override isGovernorOrGuardianOrAdmin { + function unsetSafeAddress(address pcvDeposit) + external + override + hasAnyOfThreeRoles(TribeRoles.GOVERNOR, TribeRoles.GUARDIAN, TribeRoles.PCV_SAFE_ADMIN_ROLE) + { _unsetSafeAddress(pcvDeposit); } /// @notice batch version of unsetSafeAddresses /// @param _safeAddresses the addresses to un-set as safe - function unsetSafeAddresses(address[] calldata _safeAddresses) external override isGovernorOrGuardianOrAdmin { + function unsetSafeAddresses(address[] calldata _safeAddresses) + external + override + hasAnyOfThreeRoles(TribeRoles.GOVERNOR, TribeRoles.GUARDIAN, TribeRoles.PCV_SAFE_ADMIN_ROLE) + { require(_safeAddresses.length != 0, "empty"); for (uint256 i = 0; i < _safeAddresses.length; i++) { _unsetSafeAddress(_safeAddresses[i]); diff --git a/test/unit/pcv/PCVGuardian.test.ts b/test/unit/pcv/PCVGuardian.test.ts index 128c78df0..7dd10e845 100644 --- a/test/unit/pcv/PCVGuardian.test.ts +++ b/test/unit/pcv/PCVGuardian.test.ts @@ -85,22 +85,20 @@ describe('PCV Guardian', function () { describe('access control', async () => { it('should revert when calling setSafeAddress & setSafeAddresses from a non-governor address', async () => { - await expect(pcvGuardianWithoutStartingAddresses.setSafeAddress(userAddress)).to.be.revertedWith( - 'CoreRef: Caller is not a governor' - ); + await expect(pcvGuardianWithoutStartingAddresses.setSafeAddress(userAddress)).to.be.revertedWith('UNAUTHORIZED'); await expect( pcvGuardianWithoutStartingAddresses.setSafeAddresses([userAddress, userAddress2]) - ).to.be.revertedWith('CoreRef: Caller is not a governor'); + ).to.be.revertedWith('UNAUTHORIZED'); }); it('should revert when calling unsetSafeAddress & unsetSafeAddresses from a non-guardian-or-governor-or-admin address', async () => { await expect(pcvGuardianWithoutStartingAddresses.unsetSafeAddress(userAddress)).to.be.revertedWith( - 'CoreRef: Caller is not governor or guardian or admin' + 'UNAUTHORIZED' ); await expect( pcvGuardianWithoutStartingAddresses.unsetSafeAddresses([userAddress, userAddress2]) - ).to.be.revertedWith('CoreRef: Caller is not governor or guardian or admin'); + ).to.be.revertedWith('UNAUTHORIZED'); }); it('should revert when calling withdrawToSafeAddress from a non-guardian-or-governor-or-admin address', async () => { From 5ab41f901f1203eb9090f06ae82ccde77c8e5ae3 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Tue, 3 May 2022 22:57:04 +0100 Subject: [PATCH 040/121] feat: revoke old pcv guardian --- proposals/dao/fip_82b.ts | 12 +++++++++--- proposals/description/fip_82b.ts | 25 +++++++++++++++++++++++-- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/proposals/dao/fip_82b.ts b/proposals/dao/fip_82b.ts index aca0f46fc..814e78a7a 100644 --- a/proposals/dao/fip_82b.ts +++ b/proposals/dao/fip_82b.ts @@ -33,11 +33,11 @@ const deploy: DeployUpgradeFunc = async (deployAddress: string, addresses: Named const safeAddresses = await previousPCVGuardian.getSafeAddresses(); const pcvGuardianFactory = await ethers.getContractFactory('PCVGuardian'); - const newPCVGuardian = await pcvGuardianFactory.deploy(addresses.core, safeAddresses); - logging && console.log('PCVGuardian deployed to: ', newPCVGuardian.address); + const pcvGuardianNew = await pcvGuardianFactory.deploy(addresses.core, safeAddresses); + logging && console.log('PCVGuardian deployed to: ', pcvGuardianNew.address); return { - newPCVGuardian + pcvGuardianNew }; }; @@ -82,9 +82,15 @@ const validate: ValidateUpgradeFunc = async (addresses, oldContracts, contracts, ]; validateArraysEqual(safeAddresses, expectedSafeAddresses); expect(safeAddresses.length).to.be.equal(expectedSafeAddresses.length); + + // New PCV Guardian roles - validate granted expect(await core.hasRole(ethers.utils.id('GUARDIAN_ROLE'), newPCVGuardian.address)).to.be.true; expect(await core.hasRole(ethers.utils.id('PCV_CONTROLLER_ROLE'), newPCVGuardian.address)).to.be.true; + // Old PCV Guardian roles - validate revoked + expect(await core.hasRole(ethers.utils.id('GUARDIAN_ROLE'), addresses.pcvGuardian)).to.be.false; + expect(await core.hasRole(ethers.utils.id('PCV_CONTROLLER_ROLE'), addresses.pcvGuardian)).to.be.true; + // 2. Validate TribalCouncil role transfers await validateTransferredRoleAdmins(contracts.core); await validateNewCouncilRoles(contracts.core); diff --git a/proposals/description/fip_82b.ts b/proposals/description/fip_82b.ts index 2808b4c1c..66ba7464d 100644 --- a/proposals/description/fip_82b.ts +++ b/proposals/description/fip_82b.ts @@ -427,13 +427,14 @@ const fip_82b: ProposalDescription = { ], description: 'Grant tribalCouncilTimelock the PCV_SAFE_MOVER_ROLE role' }, + ////// Authorise new PCV Guardian and revoke old PCV Guardian //////// { target: 'core', values: '0', method: 'grantRole(bytes32,address)', arguments: [ '0x0866eae1216ed05a11636a648003f3f62921eb97ccb05acc30636f62958a8bd6', // PCV_CONTROLLER - '{newPCVGuardian}' + '{pcvGuardianNew}' ], description: 'Grant newPCVGuardian the PCV_CONTROLLER_ROLE' }, @@ -443,9 +444,29 @@ const fip_82b: ProposalDescription = { method: 'grantRole(bytes32,address)', arguments: [ '0x55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041', // GUARDIAN - '{newPCVGuardian}' + '{pcvGuardianNew}' ], description: 'Grant newPCVGuardian the GUARDIAN role' + }, + { + target: 'core', + values: '0', + method: 'revokeRoke(bytes32,address)', + arguments: [ + '0x0866eae1216ed05a11636a648003f3f62921eb97ccb05acc30636f62958a8bd6', // PCV_CONTROLLER + '{pcvGuardian}' + ], + description: 'Revoke PCV_CONTROLLER from old pcvGuardian' + }, + { + target: 'core', + values: '0', + method: 'revokeRole(bytes32,address)', + arguments: [ + '0x55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041', // GUARDIAN + '{pcvGuardian}' + ], + description: 'Revoke GUARDIAN from old pcvGuardian' } ], description: ` From d88b64d32ff333755031ce0128d7b6d0b12ceec4 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Tue, 3 May 2022 21:53:13 +0100 Subject: [PATCH 041/121] refactor: minor fixes --- protocol-configuration/dependencies.ts | 6 ++++++ protocol-configuration/permissions.ts | 4 ++-- test/integration/proposals_config.ts | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/protocol-configuration/dependencies.ts b/protocol-configuration/dependencies.ts index 34639e2b8..b8e8699f0 100644 --- a/protocol-configuration/dependencies.ts +++ b/protocol-configuration/dependencies.ts @@ -656,6 +656,9 @@ const dependencies: DependencyMap = { 'balancerLensVeBalWeth' ] }, + balancerLensVeBalBal: { + contractDependencies: ['balUsdCompositeOracle', 'chainlinkEthUsdOracleWrapper'] + }, chainlinkBALEthOracle: { contractDependencies: ['core', 'balUsdCompositeOracle'] }, @@ -1058,6 +1061,9 @@ const dependencies: DependencyMap = { }, tribalCouncilSafe: { contractDependencies: ['tribalCouncilTimelock'] + }, + veBalDelegatorPCVDeposit: { + contractDependencies: ['core'] } }; diff --git a/protocol-configuration/permissions.ts b/protocol-configuration/permissions.ts index 837566540..410ecb0ac 100644 --- a/protocol-configuration/permissions.ts +++ b/protocol-configuration/permissions.ts @@ -37,7 +37,7 @@ export const permissions = { TRIBAL_CHIEF_ADMIN_ROLE: ['optimisticTimelock', 'tribalChiefSyncV2'], FUSE_ADMIN: ['optimisticTimelock', 'tribalChiefSyncV2', 'tribalCouncilTimelock'], VOTIUM_ADMIN_ROLE: ['opsOptimisticTimelock'], - PCV_GUARDIAN_ADMIN_ROLE: ['optimisticTimelock'], + PCV_GUARDIAN_ADMIN_ROLE: ['optimisticTimelock', 'tribalCouncilTimelock'], METAGOVERNANCE_VOTE_ADMIN: ['feiDAOTimelock', 'opsOptimisticTimelock'], METAGOVERNANCE_TOKEN_STAKING: ['feiDAOTimelock', 'opsOptimisticTimelock'], METAGOVERNANCE_GAUGE_ADMIN: ['feiDAOTimelock', 'optimisticTimelock'], @@ -46,6 +46,6 @@ export const permissions = { FEI_MINT_ADMIN: ['feiDAOTimelock', 'tribalCouncilTimelock'], POD_VETO_ADMIN: ['nopeDAO'], POD_ADMIN: ['tribalCouncilTimelock', 'podFactory'], - PCV_MINOR_PARAM_ROLE: ['feiDAOTimelock', 'optimisticTimelock'], + PCV_MINOR_PARAM_ROLE: ['feiDAOTimelock', 'optimisticTimelock', 'tribalCouncilTimelock'], TOKEMAK_DEPOSIT_ADMIN_ROLE: ['optimisticTimelock'] }; diff --git a/test/integration/proposals_config.ts b/test/integration/proposals_config.ts index 1fe8585bc..ab786a781 100644 --- a/test/integration/proposals_config.ts +++ b/test/integration/proposals_config.ts @@ -67,7 +67,7 @@ const proposals: ProposalsConfigMap = { 'optimisticTimelock', 'tribalChiefSyncV2' ], - deprecatedContractSignoff: ['daiPSMFeiSkimmer', 'compoundEthPCVDripController'], + deprecatedContractSignoff: [], category: ProposalCategory.DAO }, fip_98: { From 2f98c71dcb5438e9ea1181e184267634a448b627 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Tue, 3 May 2022 23:21:02 +0100 Subject: [PATCH 042/121] refactor: do not update deprecated contracts --- proposals/dao/fip_82b.ts | 4 ---- proposals/description/fip_82b.ts | 18 ------------------ protocol-configuration/dependencies.ts | 6 ++++++ test/integration/proposals_config.ts | 2 -- 4 files changed, 6 insertions(+), 24 deletions(-) diff --git a/proposals/dao/fip_82b.ts b/proposals/dao/fip_82b.ts index 6984d41b3..0ebd6b6d4 100644 --- a/proposals/dao/fip_82b.ts +++ b/proposals/dao/fip_82b.ts @@ -100,7 +100,6 @@ const validateContractAdmins = async (contracts: NamedContracts) => { ); expect(await contracts.uniswapPCVDeposit.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_MINOR_PARAM_ROLE')); - expect(await contracts.daiPSMFeiSkimmer.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_MINOR_PARAM_ROLE')); expect(await contracts.lusdPSMFeiSkimmer.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_MINOR_PARAM_ROLE')); expect(await contracts.ethPSMFeiSkimmer.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_MINOR_PARAM_ROLE')); @@ -113,9 +112,6 @@ const validateContractAdmins = async (contracts: NamedContracts) => { expect(await contracts.lusdPCVDripController.CONTRACT_ADMIN_ROLE()).to.be.equal( ethers.utils.id('PCV_MINOR_PARAM_ROLE') ); - expect(await contracts.compoundEthPCVDripController.CONTRACT_ADMIN_ROLE()).to.be.equal( - ethers.utils.id('PCV_MINOR_PARAM_ROLE') - ); }; const validateCallingContractsHaveNewAdmin = async (core: Contract, addresses: NamedAddresses) => { diff --git a/proposals/description/fip_82b.ts b/proposals/description/fip_82b.ts index 1152d6c28..e056a9305 100644 --- a/proposals/description/fip_82b.ts +++ b/proposals/description/fip_82b.ts @@ -222,15 +222,6 @@ const fip_82b: ProposalDescription = { ], description: 'Set the contract admin of the uniswapPCVDeposit to be the PCV_MINOR_PARAM_ROLE' }, - { - target: 'daiPSMFeiSkimmer', - values: '0', - method: 'setContractAdminRole(bytes32)', - arguments: [ - '0x46797b318ce8c2d83979760ef100a5c0fdb980de4b574d6142ce4d0afce307ed' // PCV_MINOR_PARAM_ROLE - ], - description: 'Set the contract admin of the DAI PSM Fei Skimmer to be the PCV_MINOR_PARAM_ROLE' - }, { target: 'lusdPSMFeiSkimmer', values: '0', @@ -276,15 +267,6 @@ const fip_82b: ProposalDescription = { ], description: 'Set the contract admin of the LUSDC PCV Drip Controller to be the PCV_MINOR_PARAM_ROLE' }, - { - target: 'compoundEthPCVDripController', - values: '0', - method: 'setContractAdminRole(bytes32)', - arguments: [ - '0x46797b318ce8c2d83979760ef100a5c0fdb980de4b574d6142ce4d0afce307ed' // PCV_MINOR_PARAM_ROLE - ], - description: 'Set the contract admin of the Compound ETH PCV Drip Controller to be the PCV_MINOR_PARAM_ROLE' - }, ////////// Grant the Tribal Council timelock the relevant roles ////////// { target: 'core', diff --git a/protocol-configuration/dependencies.ts b/protocol-configuration/dependencies.ts index b8e8699f0..77ec35601 100644 --- a/protocol-configuration/dependencies.ts +++ b/protocol-configuration/dependencies.ts @@ -1064,6 +1064,12 @@ const dependencies: DependencyMap = { }, veBalDelegatorPCVDeposit: { contractDependencies: ['core'] + }, + balancerLensVeBalWeth: { + contractDependencies: ['balUsdCompositeOracle', 'chainlinkEthUsdOracleWrapper'] + }, + balancerLensBpt30Fei70Weth: { + contractDependencies: ['oneConstantOracle', 'chainlinkEthUsdOracleWrapper'] } }; diff --git a/test/integration/proposals_config.ts b/test/integration/proposals_config.ts index ab786a781..78d791481 100644 --- a/test/integration/proposals_config.ts +++ b/test/integration/proposals_config.ts @@ -53,13 +53,11 @@ const proposals: ProposalsConfigMap = { 'indexDelegator', 'ethTokemakPCVDeposit', 'uniswapPCVDeposit', - 'daiPSMFeiSkimmer', 'lusdPSMFeiSkimmer', 'ethPSMFeiSkimmer', 'aaveEthPCVDripController', 'daiPCVDripController', 'lusdPCVDripController', - 'compoundEthPCVDripController', 'tribalCouncilTimelock', 'feiDAOTimelock', 'roleBastion', From 51a1af3bc349cb987d943f1e5efdb52d8fc652f1 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Wed, 4 May 2022 00:59:16 +0100 Subject: [PATCH 043/121] refactor: change proposal order so safe addresses up to date --- test/integration/proposals_config.ts | 56 ++++++++++++++-------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/test/integration/proposals_config.ts b/test/integration/proposals_config.ts index 72292e92d..9a85ac7a0 100644 --- a/test/integration/proposals_config.ts +++ b/test/integration/proposals_config.ts @@ -40,34 +40,6 @@ const proposals: ProposalsConfigMap = { deprecatedContractSignoff: [], category: ProposalCategory.DAO }, - fip_82b: { - deploy: true, // deploy flag for whether to run deploy action during e2e tests or use mainnet state - totalValue: 0, // amount of ETH to send to DAO execution - proposal: fip_82b, - proposalId: '', - affectedContractSignoff: [ - 'core', - 'fuseGuardian', - 'optimisticMinter', - 'pcvEquityMinter', - 'indexDelegator', - 'ethTokemakPCVDeposit', - 'uniswapPCVDeposit', - 'lusdPSMFeiSkimmer', - 'ethPSMFeiSkimmer', - 'aaveEthPCVDripController', - 'daiPCVDripController', - 'lusdPCVDripController', - 'tribalCouncilTimelock', - 'feiDAOTimelock', - 'roleBastion', - 'opsOptimisticTimelock', - 'optimisticTimelock', - 'tribalChiefSyncV2' - ], - deprecatedContractSignoff: [], - category: ProposalCategory.DAO - }, fip_98: { deploy: false, proposalId: '47738997083165992958921925097327638388915944734650384828020246684763693471048', @@ -104,6 +76,34 @@ const proposals: ProposalsConfigMap = { category: ProposalCategory.DAO, totalValue: 0, proposal: fip_99 + }, + fip_82b: { + deploy: true, // deploy flag for whether to run deploy action during e2e tests or use mainnet state + totalValue: 0, // amount of ETH to send to DAO execution + proposal: fip_82b, + proposalId: '', + affectedContractSignoff: [ + 'core', + 'fuseGuardian', + 'optimisticMinter', + 'pcvEquityMinter', + 'indexDelegator', + 'ethTokemakPCVDeposit', + 'uniswapPCVDeposit', + 'lusdPSMFeiSkimmer', + 'ethPSMFeiSkimmer', + 'aaveEthPCVDripController', + 'daiPCVDripController', + 'lusdPCVDripController', + 'tribalCouncilTimelock', + 'feiDAOTimelock', + 'roleBastion', + 'opsOptimisticTimelock', + 'optimisticTimelock', + 'tribalChiefSyncV2' + ], + deprecatedContractSignoff: [], + category: ProposalCategory.DAO } }; From 000352688df05aae38f287e4b881648f3255f628 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Wed, 4 May 2022 01:06:04 +0100 Subject: [PATCH 044/121] refactor: use PCV_GUARDIAN_ADMIN_ROLE instead --- contracts/core/TribeRoles.sol | 3 --- contracts/pcv/PCVGuardian.sol | 12 ++++++------ proposals/dao/fip_82b.ts | 3 +-- proposals/description/fip_82b.ts | 8 ++++---- protocol-configuration/permissions.ts | 3 +-- 5 files changed, 12 insertions(+), 17 deletions(-) diff --git a/contracts/core/TribeRoles.sol b/contracts/core/TribeRoles.sol index 74737a94c..98411e970 100644 --- a/contracts/core/TribeRoles.sol +++ b/contracts/core/TribeRoles.sol @@ -103,7 +103,4 @@ library TribeRoles { /// @notice capable of moving PCV between safe addresses on the PCVGuardian bytes32 internal constant PCV_SAFE_MOVER_ROLE = keccak256("PCV_SAFE_MOVER_ROLE"); - - /// @notice capable of setting and unsetting safe addresses on the PCVGuardian - bytes32 internal constant PCV_SAFE_ADMIN_ROLE = keccak256("PCV_SAFE_ADMIN_ROLE"); } diff --git a/contracts/pcv/PCVGuardian.sol b/contracts/pcv/PCVGuardian.sol index d1e0687eb..497098656 100644 --- a/contracts/pcv/PCVGuardian.sol +++ b/contracts/pcv/PCVGuardian.sol @@ -34,14 +34,14 @@ contract PCVGuardian is IPCVGuardian, CoreRef { return safeAddresses.values(); } - // ---------- GOVERNOR-or-PCV_SAFE_ADMIN_ROLE-Only State-Changing API ---------- + // ---------- GOVERNOR-or-PCV_GUARDIAN_ADMIN-Only State-Changing API ---------- /// @notice governor-only method to set an address as "safe" to withdraw funds to /// @param pcvDeposit the address to set as safe function setSafeAddress(address pcvDeposit) external override - hasAnyOfTwoRoles(TribeRoles.GOVERNOR, TribeRoles.PCV_SAFE_ADMIN_ROLE) + hasAnyOfTwoRoles(TribeRoles.GOVERNOR, TribeRoles.PCV_GUARDIAN_ADMIN) { _setSafeAddress(pcvDeposit); } @@ -51,7 +51,7 @@ contract PCVGuardian is IPCVGuardian, CoreRef { function setSafeAddresses(address[] calldata _safeAddresses) external override - hasAnyOfTwoRoles(TribeRoles.GOVERNOR, TribeRoles.PCV_SAFE_ADMIN_ROLE) + hasAnyOfTwoRoles(TribeRoles.GOVERNOR, TribeRoles.PCV_GUARDIAN_ADMIN) { require(_safeAddresses.length != 0, "empty"); for (uint256 i = 0; i < _safeAddresses.length; i++) { @@ -59,14 +59,14 @@ contract PCVGuardian is IPCVGuardian, CoreRef { } } - // ---------- GOVERNOR-or-PCV_SAFE_ADMIN_ROLE-Or-GUARDIAN-Only State-Changing API ---------- + // ---------- GOVERNOR-or-PCV_GUARDIAN_ADMIN-Or-GUARDIAN-Only State-Changing API ---------- /// @notice governor-or-guardian-only method to un-set an address as "safe" to withdraw funds to /// @param pcvDeposit the address to un-set as safe function unsetSafeAddress(address pcvDeposit) external override - hasAnyOfThreeRoles(TribeRoles.GOVERNOR, TribeRoles.GUARDIAN, TribeRoles.PCV_SAFE_ADMIN_ROLE) + hasAnyOfThreeRoles(TribeRoles.GOVERNOR, TribeRoles.GUARDIAN, TribeRoles.PCV_GUARDIAN_ADMIN) { _unsetSafeAddress(pcvDeposit); } @@ -76,7 +76,7 @@ contract PCVGuardian is IPCVGuardian, CoreRef { function unsetSafeAddresses(address[] calldata _safeAddresses) external override - hasAnyOfThreeRoles(TribeRoles.GOVERNOR, TribeRoles.GUARDIAN, TribeRoles.PCV_SAFE_ADMIN_ROLE) + hasAnyOfThreeRoles(TribeRoles.GOVERNOR, TribeRoles.GUARDIAN, TribeRoles.PCV_GUARDIAN_ADMIN) { require(_safeAddresses.length != 0, "empty"); for (uint256 i = 0; i < _safeAddresses.length; i++) { diff --git a/proposals/dao/fip_82b.ts b/proposals/dao/fip_82b.ts index de3e996d1..db0782eb7 100644 --- a/proposals/dao/fip_82b.ts +++ b/proposals/dao/fip_82b.ts @@ -130,7 +130,7 @@ const validateNewCouncilRoles = async (core: Contract) => { expect(await core.getRoleAdmin(ethers.utils.id('PCV_MINOR_PARAM_ROLE'))).to.be.equal(ROLE_ADMIN); expect(await core.getRoleAdmin(ethers.utils.id('PSM_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); expect(await core.getRoleAdmin(ethers.utils.id('PCV_SAFE_MOVER_ROLE'))).to.be.equal(ROLE_ADMIN); - expect(await core.getRoleAdmin(ethers.utils.id('PCV_SAFE_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); + expect(await core.getRoleAdmin(ethers.utils.id('PCV_GUARDIAN_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); }; /// Validate that the relevant contract admins have been set to their expected values @@ -180,7 +180,6 @@ const validateTribalCouncilRoles = async (core: Contract, tribalCouncilTimelockA expect(await core.hasRole(ethers.utils.id('ORACLE_ADMIN_ROLE'), tribalCouncilTimelockAddress)).to.be.true; expect(await core.hasRole(ethers.utils.id('PSM_ADMIN_ROLE'), tribalCouncilTimelockAddress)).to.be.true; expect(await core.hasRole(ethers.utils.id('PCV_SAFE_MOVER_ROLE'), tribalCouncilTimelockAddress)).to.be.true; - expect(await core.hasRole(ethers.utils.id('PCV_SAFE_ADMIN_ROLE'), tribalCouncilTimelockAddress)).to.be.true; }; export { deploy, setup, teardown, validate }; diff --git a/proposals/description/fip_82b.ts b/proposals/description/fip_82b.ts index 64c7746fe..909ce4c99 100644 --- a/proposals/description/fip_82b.ts +++ b/proposals/description/fip_82b.ts @@ -180,10 +180,10 @@ const fip_82b: ProposalDescription = { values: '0', method: 'createRole(bytes32,bytes32)', arguments: [ - '0x65081acbf882e80af3e93eb980591b048c84107352e86863546b9096bdbf6c45', // PCV_SAFE_ADMIN_ROLE + '0xdf6ce05acd28d71e96472375ef55c4a692f167af3ccda9500570f7373c1ba22c', // PCV_GUARDIAN_ADMIN_ROLE '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN ], - description: 'Create PCV_SAFE_ADMIN_ROLE role, assigning ROLE_ADMIN as the role admin' + description: 'Create PCV_GUARDIAN_ADMIN_ROLE role, assigning ROLE_ADMIN as the role admin' }, /////// Set the relevant contract admins to the newly created roles ////////// // FUSE_ADMIN @@ -414,10 +414,10 @@ const fip_82b: ProposalDescription = { values: '0', method: 'grantRole(bytes32,address)', arguments: [ - '0x65081acbf882e80af3e93eb980591b048c84107352e86863546b9096bdbf6c45', // PCV_SAFE_ADMIN_ROLE + '0xdf6ce05acd28d71e96472375ef55c4a692f167af3ccda9500570f7373c1ba22c', // PCV_GUARDIAN_ADMIN_ROLE '{tribalCouncilTimelock}' ], - description: 'Grant tribalCouncilTimelock the PCV_SAFE_ADMIN_ROLE role' + description: 'Grant tribalCouncilTimelock the PCV_GUARDIAN_ADMIN_ROLE role' }, ////// Authorise new PCV Guardian and revoke old PCV Guardian //////// { diff --git a/protocol-configuration/permissions.ts b/protocol-configuration/permissions.ts index 897b1994a..42128ba0d 100644 --- a/protocol-configuration/permissions.ts +++ b/protocol-configuration/permissions.ts @@ -37,9 +37,8 @@ export const permissions = { TRIBAL_CHIEF_ADMIN_ROLE: ['optimisticTimelock', 'tribalChiefSyncV2'], FUSE_ADMIN: ['optimisticTimelock', 'tribalChiefSyncV2', 'tribalCouncilTimelock'], VOTIUM_ADMIN_ROLE: ['opsOptimisticTimelock'], - PCV_GUARDIAN_ADMIN_ROLE: ['optimisticTimelock'], + PCV_GUARDIAN_ADMIN_ROLE: ['optimisticTimelock', 'tribalCouncilTimelock'], PCV_SAFE_MOVER_ROLE: ['tribalCouncilTimelock'], - PCV_SAFE_ADMIN_ROLE: ['tribalCouncilTimelock'], METAGOVERNANCE_VOTE_ADMIN: ['feiDAOTimelock', 'opsOptimisticTimelock'], METAGOVERNANCE_TOKEN_STAKING: ['feiDAOTimelock', 'opsOptimisticTimelock'], METAGOVERNANCE_GAUGE_ADMIN: ['feiDAOTimelock', 'optimisticTimelock'], From da1a2e3c71a653918b7e00633b2f5bfb01d1b264 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Wed, 4 May 2022 01:27:57 +0100 Subject: [PATCH 045/121] fix: correct role hash, remove redundant create --- proposals/description/fip_82b.ts | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/proposals/description/fip_82b.ts b/proposals/description/fip_82b.ts index 909ce4c99..01b406454 100644 --- a/proposals/description/fip_82b.ts +++ b/proposals/description/fip_82b.ts @@ -175,16 +175,6 @@ const fip_82b: ProposalDescription = { ], description: 'Create PCV_SAFE_MOVER_ROLE role, assigning ROLE_ADMIN as the role admin' }, - { - target: 'core', - values: '0', - method: 'createRole(bytes32,bytes32)', - arguments: [ - '0xdf6ce05acd28d71e96472375ef55c4a692f167af3ccda9500570f7373c1ba22c', // PCV_GUARDIAN_ADMIN_ROLE - '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN - ], - description: 'Create PCV_GUARDIAN_ADMIN_ROLE role, assigning ROLE_ADMIN as the role admin' - }, /////// Set the relevant contract admins to the newly created roles ////////// // FUSE_ADMIN { @@ -404,7 +394,7 @@ const fip_82b: ProposalDescription = { values: '0', method: 'grantRole(bytes32,address)', arguments: [ - '0x6c9ecf07a5886fd74a8d32f4d3c317a7d5e5b5c7a073a3ab06c217e9ce5288e3', // PCV_SAFE_MOVER_ROLE + '0xd387c7eec7161b3637e694ef5cf8f1a9e29bfd35135c86c9b540bebec4ef221a', // PCV_SAFE_MOVER_ROLE '{tribalCouncilTimelock}' ], description: 'Grant tribalCouncilTimelock the PCV_SAFE_MOVER_ROLE role' From dfa5339d1bd065658fb5e81822d37824642def4f Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Wed, 4 May 2022 13:22:57 +0100 Subject: [PATCH 046/121] refactor: PR feedback, remove roles --- contracts/core/TribeRoles.sol | 8 +------- proposals/dao/fip_82b.ts | 3 --- proposals/description/fip_82b.ts | 22 ++++++---------------- protocol-configuration/permissions.ts | 1 + 4 files changed, 8 insertions(+), 26 deletions(-) diff --git a/contracts/core/TribeRoles.sol b/contracts/core/TribeRoles.sol index 035131b01..bad1ea934 100644 --- a/contracts/core/TribeRoles.sol +++ b/contracts/core/TribeRoles.sol @@ -39,7 +39,7 @@ library TribeRoles { /// @notice capable of granting and revoking other TribeRoles from having veto power over a pod bytes32 internal constant POD_VETO_ADMIN = keccak256("POD_VETO_ADMIN"); - /// @notice can manage the majority of Tribe protocol parameters. Sets boundaries for MINOR_PARAM_ROLE. + /// @notice can manage the majority of Tribe protocol parameters bytes32 internal constant PARAMETER_ADMIN = keccak256("PARAMETER_ADMIN"); /// @notice manages the Collateralization Oracle as well as other protocol oracles. @@ -66,9 +66,6 @@ library TribeRoles { /// @notice capable of setting FEI Minters within global rate limits and caps bytes32 internal constant RATE_LIMITED_MINTER_ADMIN = keccak256("RATE_LIMITED_MINTER_ADMIN"); - /// @notice manages the constituents of Optimistic Timelocks, including Proposers and Executors - bytes32 internal constant OPTIMISTIC_ADMIN = keccak256("OPTIMISTIC_ADMIN"); - /// @notice manages meta-governance actions, like voting & delegating. /// Also used to vote for gauge weights & similar liquid governance things. bytes32 internal constant METAGOVERNANCE_VOTE_ADMIN = keccak256("METAGOVERNANCE_VOTE_ADMIN"); @@ -95,9 +92,6 @@ library TribeRoles { /// @notice capable of adding an address to multi rate limited bytes32 internal constant ADD_MINTER_ROLE = keccak256("ADD_MINTER_ROLE"); - /// @notice capable of changing parameters within non-critical ranges - bytes32 internal constant MINOR_PARAM_ROLE = keccak256("MINOR_PARAM_ROLE"); - /// @notice capable of changing PCV Deposit and Global Rate Limited Minter in the PSM bytes32 internal constant PSM_ADMIN_ROLE = keccak256("PSM_ADMIN_ROLE"); diff --git a/proposals/dao/fip_82b.ts b/proposals/dao/fip_82b.ts index 0ebd6b6d4..de21f5bf5 100644 --- a/proposals/dao/fip_82b.ts +++ b/proposals/dao/fip_82b.ts @@ -63,9 +63,6 @@ const validateTransferredRoleAdmins = async (core: Contract) => { // Non-major roles that previously had 0x0 as their admin expect(await core.getRoleAdmin(ethers.utils.id('RATE_LIMITED_MINTER_ADMIN'))).to.be.equal(ROLE_ADMIN); expect(await core.getRoleAdmin(ethers.utils.id('PARAMETER_ADMIN'))).to.be.equal(ROLE_ADMIN); - expect(await core.getRoleAdmin(ethers.utils.id('OPTIMISTIC_ADMIN'))).to.be.equal(ROLE_ADMIN); - - expect(await core.getRoleAdmin(ethers.utils.id('MINOR_PARAM_ROLE'))).to.be.equal(ROLE_ADMIN); // Non-major roles that previously had GOVERNOR as their admin expect(await core.getRoleAdmin(ethers.utils.id('ORACLE_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); diff --git a/proposals/description/fip_82b.ts b/proposals/description/fip_82b.ts index e056a9305..4ef4392e8 100644 --- a/proposals/description/fip_82b.ts +++ b/proposals/description/fip_82b.ts @@ -29,20 +29,10 @@ const fip_82b: ProposalDescription = { values: '0', method: 'createRole(bytes32,bytes32)', arguments: [ - '0x6cad5c16d973906992d8e1412f4aefeca4ae44220c203bbcd6e8e66e7c717be0', // OPTIMISTIC_ADMIN - '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN - ], - description: 'Transfer OPTIMISTIC_ADMIN role admin to ROLE_ADMIN' - }, - { - target: 'core', - values: '0', - method: 'createRole(bytes32,bytes32)', - arguments: [ - '0xc307c44629779eb8fc0b85f224c3d22f5876a6c84de0ee42d481eb7814f0d3a8', // ORACLE_ADMIN + '0xc307c44629779eb8fc0b85f224c3d22f5876a6c84de0ee42d481eb7814f0d3a8', // ORACLE_ADMIN_ROLE '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN ], - description: 'Transfer ORACLE_ADMIN role admin from GOVERNOR to ROLE_ADMIN' + description: 'Transfer ORACLE_ADMIN_ROLE role admin from GOVERNOR to ROLE_ADMIN' }, { target: 'core', @@ -59,10 +49,10 @@ const fip_82b: ProposalDescription = { values: '0', method: 'createRole(bytes32,bytes32)', arguments: [ - '0xdf6ce05acd28d71e96472375ef55c4a692f167af3ccda9500570f7373c1ba22c', // PCV_GUARDIAN_ADMIN + '0xdf6ce05acd28d71e96472375ef55c4a692f167af3ccda9500570f7373c1ba22c', // PCV_GUARDIAN_ADMIN_ROLE '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN ], - description: 'Transfer PCV_GUARDIAN_ADMIN role admin from GOVERNOR to ROLE_ADMIN' + description: 'Transfer PCV_GUARDIAN_ADMIN_ROLE role from GOVERNOR to ROLE_ADMIN' }, { target: 'core', @@ -160,10 +150,10 @@ const fip_82b: ProposalDescription = { values: '0', method: 'createRole(bytes32,bytes32)', arguments: [ - '0x64bdfa4de883e5fe4519e80a554fbf0d63c0f6271ac8b89b18edcc9ef151ad60', // MINOR_PARAM_ROLE + '0xd387c7eec7161b3637e694ef5cf8f1a9e29bfd35135c86c9b540bebec4ef221a', // PCV_SAFE_MOVER_ROLE '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN ], - description: 'Create MINOR_PARAM_ROLE role, assigning ROLE_ADMIN as the role admin' + description: 'Create PCV_SAFE_MOVER_ROLE role, assigning ROLE_ADMIN as the role admin' }, /////// Set the relevant contract admins to the newly created roles ////////// // FUSE_ADMIN diff --git a/protocol-configuration/permissions.ts b/protocol-configuration/permissions.ts index 410ecb0ac..7122a67ea 100644 --- a/protocol-configuration/permissions.ts +++ b/protocol-configuration/permissions.ts @@ -33,6 +33,7 @@ export const permissions = { ], SWAP_ADMIN_ROLE: ['pcvEquityMinter', 'optimisticTimelock'], BALANCER_MANAGER_ADMIN_ROLE: [], + RATE_LIMITED_MINTER_ADMIN: [], PSM_ADMIN_ROLE: ['tribalCouncilTimelock'], TRIBAL_CHIEF_ADMIN_ROLE: ['optimisticTimelock', 'tribalChiefSyncV2'], FUSE_ADMIN: ['optimisticTimelock', 'tribalChiefSyncV2', 'tribalCouncilTimelock'], From 4c459ba3b923d7bf8b3fb93fd95c8eb3f0ad3604 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Wed, 4 May 2022 14:08:43 +0100 Subject: [PATCH 047/121] docs: update FIP description --- proposals/description/fip_82b.ts | 20 ++++++++++++++++---- test/integration/tests/pcv.ts | 4 ++-- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/proposals/description/fip_82b.ts b/proposals/description/fip_82b.ts index 4ef4392e8..6b2a485a2 100644 --- a/proposals/description/fip_82b.ts +++ b/proposals/description/fip_82b.ts @@ -381,11 +381,23 @@ const fip_82b: ProposalDescription = { } ], description: ` - FIP_82b: Create, grant and make the TribalCouncil admin of various access control roles to allow - it to manage the protocol. + FIP_82b: Authorise the TribalCouncil with necessary protocol roles + + This is the second stage of the Tribe DAO Governance upgrade. Overall, this proposal prepares the + TribalCouncil and optimistic governance pods system to operate the protocol in an optimistic fashion. + + Specifically, the proposal: + 1. Creates various new operational roles which the TribalCouncil will hold + 2. Transfers the admin of all non-major roles to the TribalCouncil + 3. Makes the TribalCouncil the admin of various operational smart contracts + 4. Creates a new PCVGuardian with a modern, more secure access control pattern - These roles allow the TribalCouncil to authorise pods with the necessary access control to operate - distinct parts of the protocol. + The governance upgrade discussed and authorised by the following forum post and snapshot vote: + - Forum: https://tribe.fei.money/t/fip-82-governance-enhancements/3945 + - Snapshot vote: https://snapshot.fei.money/#/proposal/0x463fd1be98d9e86c83eb845ca7e2a5555387e3c86ca0b756aada17a11df87f2b + + The executable code associated with this proposal is available here: + - https://github.com/fei-protocol/fei-protocol-core/pull/678 ` }; diff --git a/test/integration/tests/pcv.ts b/test/integration/tests/pcv.ts index 0889d92ed..0e0ff263a 100644 --- a/test/integration/tests/pcv.ts +++ b/test/integration/tests/pcv.ts @@ -74,7 +74,7 @@ describe('e2e-pcv', function () { describe('PCV Guardian', async () => { it('can withdraw PCV and pause', async () => { - const pcvGuardian = contracts.pcvGuardian; + const pcvGuardian = contracts.pcvGuardianNew; const amount = await contracts.compoundEthPCVDeposit.balance(); await pcvGuardian.withdrawToSafeAddress( @@ -89,7 +89,7 @@ describe('e2e-pcv', function () { }); it('can withdraw PCV and pause', async () => { - const pcvGuardian = contracts.pcvGuardian; + const pcvGuardian = contracts.pcvGuardianNew; const feiBalanceBefore = await contracts.fei.balanceOf(contractAddresses.feiDAOTimelock); await pcvGuardian.withdrawToSafeAddress( From 9ae64145b3d92a052158c510c48cab61877016d0 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Wed, 4 May 2022 15:29:18 +0100 Subject: [PATCH 048/121] Revert "Merge branch 'feat-role-transfer' of https://github.com/fei-protocol/fei-protocol-core into feat-role-transfer" This reverts commit 30b5eb46dcd34ddcd59d9dfcc4d5949db793ff86, reversing changes made to 4c459ba3b923d7bf8b3fb93fd95c8eb3f0ad3604. --- contracts/core/TribeRoles.sol | 4 +- contracts/pcv/PCVGuardian.sol | 37 ++++-------- proposals/dao/fip_82.ts | 6 +- proposals/dao/fip_82b.ts | 52 +---------------- proposals/description/fip_82b.ts | 81 ++++----------------------- protocol-configuration/permissions.ts | 5 +- test/helpers.ts | 8 +-- test/integration/proposals_config.ts | 56 +++++++++--------- test/unit/pcv/PCVGuardian.test.ts | 23 +++----- 9 files changed, 71 insertions(+), 201 deletions(-) diff --git a/contracts/core/TribeRoles.sol b/contracts/core/TribeRoles.sol index 5fc00ce7a..bad1ea934 100644 --- a/contracts/core/TribeRoles.sol +++ b/contracts/core/TribeRoles.sol @@ -95,6 +95,6 @@ library TribeRoles { /// @notice capable of changing PCV Deposit and Global Rate Limited Minter in the PSM bytes32 internal constant PSM_ADMIN_ROLE = keccak256("PSM_ADMIN_ROLE"); - /// @notice capable of moving PCV between safe addresses on the PCVGuardian - bytes32 internal constant PCV_SAFE_MOVER_ROLE = keccak256("PCV_SAFE_MOVER_ROLE"); + /// @notice capable of moving PCV on the PCVGuardian + bytes32 internal constant PCV_MOVER = keccak256("PCV_MOVER"); } diff --git a/contracts/pcv/PCVGuardian.sol b/contracts/pcv/PCVGuardian.sol index 497098656..9a32eee8d 100644 --- a/contracts/pcv/PCVGuardian.sol +++ b/contracts/pcv/PCVGuardian.sol @@ -6,7 +6,6 @@ import "../refs/CoreRef.sol"; import "./IPCVGuardian.sol"; import "./IPCVDeposit.sol"; import "../libs/CoreRefPauseableLib.sol"; -import {TribeRoles} from "../core/TribeRoles.sol"; contract PCVGuardian is IPCVGuardian, CoreRef { using CoreRefPauseableLib for address; @@ -16,6 +15,8 @@ contract PCVGuardian is IPCVGuardian, CoreRef { EnumerableSet.AddressSet private safeAddresses; constructor(address _core, address[] memory _safeAddresses) CoreRef(_core) { + _setContractAdminRole(keccak256("PCV_GUARDIAN_ADMIN_ROLE")); + for (uint256 i = 0; i < _safeAddresses.length; i++) { _setSafeAddress(_safeAddresses[i]); } @@ -34,50 +35,34 @@ contract PCVGuardian is IPCVGuardian, CoreRef { return safeAddresses.values(); } - // ---------- GOVERNOR-or-PCV_GUARDIAN_ADMIN-Only State-Changing API ---------- + // ---------- Governor-or-Admin-Only State-Changing API ---------- /// @notice governor-only method to set an address as "safe" to withdraw funds to /// @param pcvDeposit the address to set as safe - function setSafeAddress(address pcvDeposit) - external - override - hasAnyOfTwoRoles(TribeRoles.GOVERNOR, TribeRoles.PCV_GUARDIAN_ADMIN) - { + function setSafeAddress(address pcvDeposit) external override onlyGovernorOrAdmin { _setSafeAddress(pcvDeposit); } /// @notice batch version of setSafeAddress /// @param _safeAddresses the addresses to set as safe, as calldata - function setSafeAddresses(address[] calldata _safeAddresses) - external - override - hasAnyOfTwoRoles(TribeRoles.GOVERNOR, TribeRoles.PCV_GUARDIAN_ADMIN) - { + function setSafeAddresses(address[] calldata _safeAddresses) external override onlyGovernorOrAdmin { require(_safeAddresses.length != 0, "empty"); for (uint256 i = 0; i < _safeAddresses.length; i++) { _setSafeAddress(_safeAddresses[i]); } } - // ---------- GOVERNOR-or-PCV_GUARDIAN_ADMIN-Or-GUARDIAN-Only State-Changing API ---------- + // ---------- Governor-or-Admin-Or-Guardian-Only State-Changing API ---------- /// @notice governor-or-guardian-only method to un-set an address as "safe" to withdraw funds to /// @param pcvDeposit the address to un-set as safe - function unsetSafeAddress(address pcvDeposit) - external - override - hasAnyOfThreeRoles(TribeRoles.GOVERNOR, TribeRoles.GUARDIAN, TribeRoles.PCV_GUARDIAN_ADMIN) - { + function unsetSafeAddress(address pcvDeposit) external override isGovernorOrGuardianOrAdmin { _unsetSafeAddress(pcvDeposit); } /// @notice batch version of unsetSafeAddresses /// @param _safeAddresses the addresses to un-set as safe - function unsetSafeAddresses(address[] calldata _safeAddresses) - external - override - hasAnyOfThreeRoles(TribeRoles.GOVERNOR, TribeRoles.GUARDIAN, TribeRoles.PCV_GUARDIAN_ADMIN) - { + function unsetSafeAddresses(address[] calldata _safeAddresses) external override isGovernorOrGuardianOrAdmin { require(_safeAddresses.length != 0, "empty"); for (uint256 i = 0; i < _safeAddresses.length; i++) { _unsetSafeAddress(_safeAddresses[i]); @@ -96,7 +81,7 @@ contract PCVGuardian is IPCVGuardian, CoreRef { uint256 amount, bool pauseAfter, bool depositAfter - ) external override hasAnyOfThreeRoles(TribeRoles.GOVERNOR, TribeRoles.PCV_SAFE_MOVER_ROLE, TribeRoles.GUARDIAN) { + ) external override isGovernorOrGuardianOrAdmin { require(isSafeAddress(safeAddress), "Provided address is not a safe address!"); pcvDeposit._ensureUnpaused(); @@ -126,7 +111,7 @@ contract PCVGuardian is IPCVGuardian, CoreRef { uint256 amount, bool pauseAfter, bool depositAfter - ) external override hasAnyOfThreeRoles(TribeRoles.GOVERNOR, TribeRoles.PCV_SAFE_MOVER_ROLE, TribeRoles.GUARDIAN) { + ) external override isGovernorOrGuardianOrAdmin { require(isSafeAddress(safeAddress), "Provided address is not a safe address!"); pcvDeposit._ensureUnpaused(); @@ -157,7 +142,7 @@ contract PCVGuardian is IPCVGuardian, CoreRef { uint256 amount, bool pauseAfter, bool depositAfter - ) external override hasAnyOfThreeRoles(TribeRoles.GOVERNOR, TribeRoles.PCV_SAFE_MOVER_ROLE, TribeRoles.GUARDIAN) { + ) external override isGovernorOrGuardianOrAdmin { require(isSafeAddress(safeAddress), "Provided address is not a safe address!"); pcvDeposit._ensureUnpaused(); diff --git a/proposals/dao/fip_82.ts b/proposals/dao/fip_82.ts index 2fb653ab1..57defa254 100644 --- a/proposals/dao/fip_82.ts +++ b/proposals/dao/fip_82.ts @@ -7,7 +7,7 @@ import { TeardownUpgradeFunc, ValidateUpgradeFunc } from '@custom-types/types'; -import { getImpersonatedSigner, validateArraysEqual } from '@test/helpers'; +import { getImpersonatedSigner } from '@test/helpers'; import { tribeCouncilPodConfig, PodCreationConfig } from '@protocol/optimisticGovernance'; import { abi as inviteTokenABI } from '../../artifacts/@orcaprotocol/contracts/contracts/InviteToken.sol/InviteToken.json'; import { abi as timelockABI } from '../../artifacts/@openzeppelin/contracts/governance/TimelockController.sol/TimelockController.json'; @@ -15,6 +15,10 @@ import { abi as gnosisSafeABI } from '../../artifacts/contracts/pods/interfaces/ import { Contract } from 'ethers'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +const validateArraysEqual = (arrayA: string[], arrayB: string[]) => { + arrayA.every((a) => expect(arrayB.map((b) => b.toLowerCase()).includes(a.toLowerCase()))); +}; + // Transfers Orca tokens from deployer address to the factory, so that it can deploy pods // Requirement of holding Orca tokens to deploy is a slow rollout mechanism used by Orca const transferOrcaTokens = async ( diff --git a/proposals/dao/fip_82b.ts b/proposals/dao/fip_82b.ts index 9436e76e9..de21f5bf5 100644 --- a/proposals/dao/fip_82b.ts +++ b/proposals/dao/fip_82b.ts @@ -9,7 +9,6 @@ import { ValidateUpgradeFunc } from '@custom-types/types'; import { Contract } from 'ethers'; -import { validateArraysEqual } from '@test/helpers'; /* @@ -27,17 +26,9 @@ const fipNumber = 'fip_82b'; // Do any deployments // This should exclusively include new contract deployments const deploy: DeployUpgradeFunc = async (deployAddress: string, addresses: NamedAddresses, logging: boolean) => { - const deploySigner = (await ethers.getSigners())[0]; - const previousPCVGuardian = await ethers.getContractAt('PCVGuardian', addresses.pcvGuardian, deploySigner); - const safeAddresses = await previousPCVGuardian.getSafeAddresses(); - - const pcvGuardianFactory = await ethers.getContractFactory('PCVGuardian'); - const pcvGuardianNew = await pcvGuardianFactory.deploy(addresses.core, safeAddresses); - logging && console.log('PCVGuardian deployed to: ', pcvGuardianNew.address); - logging && console.log('PCVGuardian safeAddresses: ', safeAddresses); - + console.log(`No deploy actions for fip${fipNumber}`); return { - pcvGuardianNew + // put returned contract objects here }; }; @@ -57,40 +48,7 @@ const teardown: TeardownUpgradeFunc = async (addresses, oldContracts, contracts, // Run any validations required on the fip using mocha or console logging // IE check balances, check state of contracts, etc. const validate: ValidateUpgradeFunc = async (addresses, oldContracts, contracts, logging) => { - // 1. Validate new PCVGuardian deployment and roles granted - const core = contracts.core; - const newPCVGuardian = contracts.pcvGuardianNew; - - const safeAddresses = await newPCVGuardian.getSafeAddresses(); - const expectedSafeAddresses = [ - '0xd51dba7a94e1adea403553a8235c302cebf41a3c', - '0x4fcb1435fd42ce7ce7af3cb2e98289f79d2962b3', - '0x98e5f5706897074a4664dd3a32eb80242d6e694b', - '0x5b86887e171bae0c2c826e87e34df8d558c079b9', - '0x2a188f9eb761f70ecea083ba6c2a40145078dfc2', - '0xb0e731f036adfdec12da77c15aab0f90e8e45a0e', - '0x24f663c69cd4b263cf5685a49013ff5f1c898d24', - '0x5ae217de26f6ff5f481c6e10ec48b2cf2fc857c8', - '0xe8633c49ace655eb4a8b720e6b12f09bd3a97812', - '0xcd1ac0014e2ebd972f40f24df1694e6f528b2fd4', - '0xc5bb8f0253776bec6ff450c2b40f092f7e7f5b57', - '0xc4eac760c2c631ee0b064e39888b89158ff808b2', - '0x2c47fef515d2c70f2427706999e158533f7cf090', - '0x9aadffe00eae6d8e59bb4f7787c6b99388a6960d', - '0xd2174d78637a40448112aa6b30f9b19e6cf9d1f9', - '0x5dde9b4b14edf59cb23c1d4579b279846998205e' - ]; - validateArraysEqual(safeAddresses, expectedSafeAddresses); - - // New PCV Guardian roles - validate granted - expect(await core.hasRole(ethers.utils.id('GUARDIAN_ROLE'), newPCVGuardian.address)).to.be.true; - expect(await core.hasRole(ethers.utils.id('PCV_CONTROLLER_ROLE'), newPCVGuardian.address)).to.be.true; - - // Old PCV Guardian roles - validate revoked - expect(await core.hasRole(ethers.utils.id('GUARDIAN_ROLE'), addresses.pcvGuardian)).to.be.false; - expect(await core.hasRole(ethers.utils.id('PCV_CONTROLLER_ROLE'), addresses.pcvGuardian)).to.be.false; - - // 2. Validate TribalCouncil role transfers + console.log(`No actions to complete in validate for fip${fipNumber}`); await validateTransferredRoleAdmins(contracts.core); await validateNewCouncilRoles(contracts.core); await validateContractAdmins(contracts); @@ -115,7 +73,6 @@ const validateTransferredRoleAdmins = async (core: Contract) => { expect(await core.getRoleAdmin(ethers.utils.id('METAGOVERNANCE_GAUGE_ADMIN'))).to.be.equal(ROLE_ADMIN); expect(await core.getRoleAdmin(ethers.utils.id('SWAP_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); expect(await core.getRoleAdmin(ethers.utils.id('VOTIUM_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); - expect(await core.getRoleAdmin(ethers.utils.id('RATE_LIMITED_MINTER_ADMIN'))).to.be.equal(ROLE_ADMIN); }; /// Validate that the expected new TribeRoles have been created @@ -126,8 +83,6 @@ const validateNewCouncilRoles = async (core: Contract) => { expect(await core.getRoleAdmin(ethers.utils.id('FEI_MINT_ADMIN'))).to.be.equal(ROLE_ADMIN); expect(await core.getRoleAdmin(ethers.utils.id('PCV_MINOR_PARAM_ROLE'))).to.be.equal(ROLE_ADMIN); expect(await core.getRoleAdmin(ethers.utils.id('PSM_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); - expect(await core.getRoleAdmin(ethers.utils.id('PCV_SAFE_MOVER_ROLE'))).to.be.equal(ROLE_ADMIN); - expect(await core.getRoleAdmin(ethers.utils.id('PCV_GUARDIAN_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); }; /// Validate that the relevant contract admins have been set to their expected values @@ -176,7 +131,6 @@ const validateTribalCouncilRoles = async (core: Contract, tribalCouncilTimelockA expect(await core.hasRole(ethers.utils.id('PCV_GUARDIAN_ADMIN_ROLE'), tribalCouncilTimelockAddress)).to.be.true; expect(await core.hasRole(ethers.utils.id('ORACLE_ADMIN_ROLE'), tribalCouncilTimelockAddress)).to.be.true; expect(await core.hasRole(ethers.utils.id('PSM_ADMIN_ROLE'), tribalCouncilTimelockAddress)).to.be.true; - expect(await core.hasRole(ethers.utils.id('PCV_SAFE_MOVER_ROLE'), tribalCouncilTimelockAddress)).to.be.true; }; export { deploy, setup, teardown, validate }; diff --git a/proposals/description/fip_82b.ts b/proposals/description/fip_82b.ts index 2c20ef64c..6b2a485a2 100644 --- a/proposals/description/fip_82b.ts +++ b/proposals/description/fip_82b.ts @@ -155,16 +155,6 @@ const fip_82b: ProposalDescription = { ], description: 'Create PCV_SAFE_MOVER_ROLE role, assigning ROLE_ADMIN as the role admin' }, - { - target: 'core', - values: '0', - method: 'createRole(bytes32,bytes32)', - arguments: [ - '0xd387c7eec7161b3637e694ef5cf8f1a9e29bfd35135c86c9b540bebec4ef221a', // PCV_SAFE_MOVER_ROLE - '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN - ], - description: 'Create PCV_SAFE_MOVER_ROLE role, assigning ROLE_ADMIN as the role admin' - }, /////// Set the relevant contract admins to the newly created roles ////////// // FUSE_ADMIN { @@ -298,6 +288,16 @@ const fip_82b: ProposalDescription = { ], description: 'Grant TribalCouncil timelock the PCV_MINOR_PARAM_ROLE role' }, + { + target: 'core', + values: '0', + method: 'grantRole(bytes32,address)', + arguments: [ + '0xdf6ce05acd28d71e96472375ef55c4a692f167af3ccda9500570f7373c1ba22c', // PCV_GUARDIAN_ADMIN_ROLE + '{tribalCouncilTimelock}' + ], + description: 'Grant TribalCouncil timelock the PCV_GUARDIAN_ADMIN_ROLE role' + }, { target: 'core', values: '0', @@ -378,67 +378,6 @@ const fip_82b: ProposalDescription = { '{optimisticTimelock}' ], description: 'Grant optimisticTimelock the TOKEMAK_DEPOSIT_ADMIN_ROLE role' - }, - { - target: 'core', - values: '0', - method: 'grantRole(bytes32,address)', - arguments: [ - '0xd387c7eec7161b3637e694ef5cf8f1a9e29bfd35135c86c9b540bebec4ef221a', // PCV_SAFE_MOVER_ROLE - '{tribalCouncilTimelock}' - ], - description: 'Grant tribalCouncilTimelock the PCV_SAFE_MOVER_ROLE role' - }, - { - target: 'core', - values: '0', - method: 'grantRole(bytes32,address)', - arguments: [ - '0xdf6ce05acd28d71e96472375ef55c4a692f167af3ccda9500570f7373c1ba22c', // PCV_GUARDIAN_ADMIN_ROLE - '{tribalCouncilTimelock}' - ], - description: 'Grant tribalCouncilTimelock the PCV_GUARDIAN_ADMIN_ROLE role' - }, - ////// Authorise new PCV Guardian and revoke old PCV Guardian //////// - { - target: 'core', - values: '0', - method: 'grantRole(bytes32,address)', - arguments: [ - '0x0866eae1216ed05a11636a648003f3f62921eb97ccb05acc30636f62958a8bd6', // PCV_CONTROLLER - '{pcvGuardianNew}' - ], - description: 'Grant newPCVGuardian the PCV_CONTROLLER_ROLE' - }, - { - target: 'core', - values: '0', - method: 'grantRole(bytes32,address)', - arguments: [ - '0x55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041', // GUARDIAN - '{pcvGuardianNew}' - ], - description: 'Grant newPCVGuardian the GUARDIAN role' - }, - { - target: 'core', - values: '0', - method: 'revokeRole(bytes32,address)', - arguments: [ - '0x0866eae1216ed05a11636a648003f3f62921eb97ccb05acc30636f62958a8bd6', // PCV_CONTROLLER - '{pcvGuardian}' - ], - description: 'Revoke PCV_CONTROLLER from old pcvGuardian' - }, - { - target: 'core', - values: '0', - method: 'revokeRole(bytes32,address)', - arguments: [ - '0x55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041', // GUARDIAN - '{pcvGuardian}' - ], - description: 'Revoke GUARDIAN from old pcvGuardian' } ], description: ` diff --git a/protocol-configuration/permissions.ts b/protocol-configuration/permissions.ts index b82658808..7122a67ea 100644 --- a/protocol-configuration/permissions.ts +++ b/protocol-configuration/permissions.ts @@ -17,14 +17,14 @@ export const permissions = { 'feiDAOTimelock', 'ratioPCVControllerV2', 'aaveEthPCVDripController', - 'pcvGuardianNew', + 'pcvGuardian', 'daiPCVDripController', 'lusdPCVDripController', 'ethPSMFeiSkimmer', 'lusdPSMFeiSkimmer', 'raiPCVDripController' ], - GUARDIAN_ROLE: ['multisig', 'pcvGuardianNew', 'pcvSentinel'], + GUARDIAN_ROLE: ['multisig', 'pcvGuardian', 'pcvSentinel'], ORACLE_ADMIN_ROLE: [ 'collateralizationOracleGuardian', 'optimisticTimelock', @@ -39,7 +39,6 @@ export const permissions = { FUSE_ADMIN: ['optimisticTimelock', 'tribalChiefSyncV2', 'tribalCouncilTimelock'], VOTIUM_ADMIN_ROLE: ['opsOptimisticTimelock'], PCV_GUARDIAN_ADMIN_ROLE: ['optimisticTimelock', 'tribalCouncilTimelock'], - PCV_SAFE_MOVER_ROLE: ['tribalCouncilTimelock'], METAGOVERNANCE_VOTE_ADMIN: ['feiDAOTimelock', 'opsOptimisticTimelock'], METAGOVERNANCE_TOKEN_STAKING: ['feiDAOTimelock', 'opsOptimisticTimelock'], METAGOVERNANCE_GAUGE_ADMIN: ['feiDAOTimelock', 'optimisticTimelock'], diff --git a/test/helpers.ts b/test/helpers.ts index 7da3e7b1d..8bf0eebcb 100644 --- a/test/helpers.ts +++ b/test/helpers.ts @@ -134,11 +134,6 @@ async function getCore(): Promise { return core; } -const validateArraysEqual = (arrayA: string[], arrayB: string[]) => { - expect(arrayA.length).to.equal(arrayB.length); - arrayA.every((a) => expect(arrayB.map((b) => b.toLowerCase()).includes(a.toLowerCase()))); -}; - async function expectApprox( actual: string | number | BigNumberish, expected: string | number | BigNumberish, @@ -348,6 +343,5 @@ export { resetFork, overwriteChainlinkAggregator, performDAOAction, - initialiseGnosisSDK, - validateArraysEqual + initialiseGnosisSDK }; diff --git a/test/integration/proposals_config.ts b/test/integration/proposals_config.ts index 9a85ac7a0..78d791481 100644 --- a/test/integration/proposals_config.ts +++ b/test/integration/proposals_config.ts @@ -40,6 +40,34 @@ const proposals: ProposalsConfigMap = { deprecatedContractSignoff: [], category: ProposalCategory.DAO }, + fip_82b: { + deploy: false, // deploy flag for whether to run deploy action during e2e tests or use mainnet state + totalValue: 0, // amount of ETH to send to DAO execution + proposal: fip_82b, + proposalId: '', + affectedContractSignoff: [ + 'core', + 'fuseGuardian', + 'optimisticMinter', + 'pcvEquityMinter', + 'indexDelegator', + 'ethTokemakPCVDeposit', + 'uniswapPCVDeposit', + 'lusdPSMFeiSkimmer', + 'ethPSMFeiSkimmer', + 'aaveEthPCVDripController', + 'daiPCVDripController', + 'lusdPCVDripController', + 'tribalCouncilTimelock', + 'feiDAOTimelock', + 'roleBastion', + 'opsOptimisticTimelock', + 'optimisticTimelock', + 'tribalChiefSyncV2' + ], + deprecatedContractSignoff: [], + category: ProposalCategory.DAO + }, fip_98: { deploy: false, proposalId: '47738997083165992958921925097327638388915944734650384828020246684763693471048', @@ -76,34 +104,6 @@ const proposals: ProposalsConfigMap = { category: ProposalCategory.DAO, totalValue: 0, proposal: fip_99 - }, - fip_82b: { - deploy: true, // deploy flag for whether to run deploy action during e2e tests or use mainnet state - totalValue: 0, // amount of ETH to send to DAO execution - proposal: fip_82b, - proposalId: '', - affectedContractSignoff: [ - 'core', - 'fuseGuardian', - 'optimisticMinter', - 'pcvEquityMinter', - 'indexDelegator', - 'ethTokemakPCVDeposit', - 'uniswapPCVDeposit', - 'lusdPSMFeiSkimmer', - 'ethPSMFeiSkimmer', - 'aaveEthPCVDripController', - 'daiPCVDripController', - 'lusdPCVDripController', - 'tribalCouncilTimelock', - 'feiDAOTimelock', - 'roleBastion', - 'opsOptimisticTimelock', - 'optimisticTimelock', - 'tribalChiefSyncV2' - ], - deprecatedContractSignoff: [], - category: ProposalCategory.DAO } }; diff --git a/test/unit/pcv/PCVGuardian.test.ts b/test/unit/pcv/PCVGuardian.test.ts index 7dd10e845..bff9fe4e5 100644 --- a/test/unit/pcv/PCVGuardian.test.ts +++ b/test/unit/pcv/PCVGuardian.test.ts @@ -85,32 +85,34 @@ describe('PCV Guardian', function () { describe('access control', async () => { it('should revert when calling setSafeAddress & setSafeAddresses from a non-governor address', async () => { - await expect(pcvGuardianWithoutStartingAddresses.setSafeAddress(userAddress)).to.be.revertedWith('UNAUTHORIZED'); + await expect(pcvGuardianWithoutStartingAddresses.setSafeAddress(userAddress)).to.be.revertedWith( + 'CoreRef: Caller is not a governor' + ); await expect( pcvGuardianWithoutStartingAddresses.setSafeAddresses([userAddress, userAddress2]) - ).to.be.revertedWith('UNAUTHORIZED'); + ).to.be.revertedWith('CoreRef: Caller is not a governor'); }); it('should revert when calling unsetSafeAddress & unsetSafeAddresses from a non-guardian-or-governor-or-admin address', async () => { await expect(pcvGuardianWithoutStartingAddresses.unsetSafeAddress(userAddress)).to.be.revertedWith( - 'UNAUTHORIZED' + 'CoreRef: Caller is not governor or guardian or admin' ); await expect( pcvGuardianWithoutStartingAddresses.unsetSafeAddresses([userAddress, userAddress2]) - ).to.be.revertedWith('UNAUTHORIZED'); + ).to.be.revertedWith('CoreRef: Caller is not governor or guardian or admin'); }); it('should revert when calling withdrawToSafeAddress from a non-guardian-or-governor-or-admin address', async () => { await expect( pcvGuardianWithoutStartingAddresses.withdrawToSafeAddress(userAddress, userAddress, 1, false, false) - ).to.be.revertedWith('UNAUTHORIZED'); + ).to.be.revertedWith('CoreRef: Caller is not governor or guardian or admin'); }); it('should revert when calling withdrawETHToSafeAddress from a non-guardian-or-governor-or-admin address', async () => { await expect( pcvGuardianWithoutStartingAddresses.withdrawETHToSafeAddress(userAddress, userAddress, 1, false, false) - ).to.be.revertedWith('UNAUTHORIZED'); + ).to.be.revertedWith('CoreRef: Caller is not governor or guardian or admin'); }); it('should revert when calling withdrawERC20ToSafeAddress from a non-guardian-or-governor-or-admin address', async () => { @@ -123,7 +125,7 @@ describe('PCV Guardian', function () { false, false ) - ).to.be.revertedWith('UNAUTHORIZED'); + ).to.be.revertedWith('CoreRef: Caller is not governor or guardian or admin'); }); it('should allow the governor to add a safe address', async () => { @@ -207,13 +209,6 @@ describe('PCV Guardian', function () { expect(await token.balanceOf(userAddress)).to.eq(1); }); - it('should withdraw from a token-pcv deposit when called by the governor', async () => { - await pcvGuardianWithoutStartingAddresses - .connect(impersonatedSigners[governorAddress]) - .withdrawToSafeAddress(tokenPCVDeposit.address, userAddress, 1, false, false); - expect(await token.balanceOf(userAddress)).to.eq(1); - }); - it('should withdraw from a token-pcv deposit and deposit after', async () => { await pcvGuardianWithoutStartingAddresses .connect(impersonatedSigners[governorAddress]) From 30e9dd639cbd5c7c11eddf64c6ce65cc339da35c Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Wed, 4 May 2022 14:35:13 +0100 Subject: [PATCH 049/121] Merge branch 'feat-role-transfer' of https://github.com/fei-protocol/fei-protocol-core into feat-role-transfer --- contracts/core/TribeRoles.sol | 4 +- contracts/pcv/PCVGuardian.sol | 37 ++++++++---- proposals/dao/fip_82.ts | 6 +- proposals/dao/fip_82b.ts | 52 ++++++++++++++++- proposals/description/fip_82b.ts | 81 +++++++++++++++++++++++---- protocol-configuration/permissions.ts | 5 +- test/helpers.ts | 8 ++- test/integration/proposals_config.ts | 56 +++++++++--------- test/unit/pcv/PCVGuardian.test.ts | 23 +++++--- 9 files changed, 201 insertions(+), 71 deletions(-) diff --git a/contracts/core/TribeRoles.sol b/contracts/core/TribeRoles.sol index bad1ea934..5fc00ce7a 100644 --- a/contracts/core/TribeRoles.sol +++ b/contracts/core/TribeRoles.sol @@ -95,6 +95,6 @@ library TribeRoles { /// @notice capable of changing PCV Deposit and Global Rate Limited Minter in the PSM bytes32 internal constant PSM_ADMIN_ROLE = keccak256("PSM_ADMIN_ROLE"); - /// @notice capable of moving PCV on the PCVGuardian - bytes32 internal constant PCV_MOVER = keccak256("PCV_MOVER"); + /// @notice capable of moving PCV between safe addresses on the PCVGuardian + bytes32 internal constant PCV_SAFE_MOVER_ROLE = keccak256("PCV_SAFE_MOVER_ROLE"); } diff --git a/contracts/pcv/PCVGuardian.sol b/contracts/pcv/PCVGuardian.sol index 9a32eee8d..497098656 100644 --- a/contracts/pcv/PCVGuardian.sol +++ b/contracts/pcv/PCVGuardian.sol @@ -6,6 +6,7 @@ import "../refs/CoreRef.sol"; import "./IPCVGuardian.sol"; import "./IPCVDeposit.sol"; import "../libs/CoreRefPauseableLib.sol"; +import {TribeRoles} from "../core/TribeRoles.sol"; contract PCVGuardian is IPCVGuardian, CoreRef { using CoreRefPauseableLib for address; @@ -15,8 +16,6 @@ contract PCVGuardian is IPCVGuardian, CoreRef { EnumerableSet.AddressSet private safeAddresses; constructor(address _core, address[] memory _safeAddresses) CoreRef(_core) { - _setContractAdminRole(keccak256("PCV_GUARDIAN_ADMIN_ROLE")); - for (uint256 i = 0; i < _safeAddresses.length; i++) { _setSafeAddress(_safeAddresses[i]); } @@ -35,34 +34,50 @@ contract PCVGuardian is IPCVGuardian, CoreRef { return safeAddresses.values(); } - // ---------- Governor-or-Admin-Only State-Changing API ---------- + // ---------- GOVERNOR-or-PCV_GUARDIAN_ADMIN-Only State-Changing API ---------- /// @notice governor-only method to set an address as "safe" to withdraw funds to /// @param pcvDeposit the address to set as safe - function setSafeAddress(address pcvDeposit) external override onlyGovernorOrAdmin { + function setSafeAddress(address pcvDeposit) + external + override + hasAnyOfTwoRoles(TribeRoles.GOVERNOR, TribeRoles.PCV_GUARDIAN_ADMIN) + { _setSafeAddress(pcvDeposit); } /// @notice batch version of setSafeAddress /// @param _safeAddresses the addresses to set as safe, as calldata - function setSafeAddresses(address[] calldata _safeAddresses) external override onlyGovernorOrAdmin { + function setSafeAddresses(address[] calldata _safeAddresses) + external + override + hasAnyOfTwoRoles(TribeRoles.GOVERNOR, TribeRoles.PCV_GUARDIAN_ADMIN) + { require(_safeAddresses.length != 0, "empty"); for (uint256 i = 0; i < _safeAddresses.length; i++) { _setSafeAddress(_safeAddresses[i]); } } - // ---------- Governor-or-Admin-Or-Guardian-Only State-Changing API ---------- + // ---------- GOVERNOR-or-PCV_GUARDIAN_ADMIN-Or-GUARDIAN-Only State-Changing API ---------- /// @notice governor-or-guardian-only method to un-set an address as "safe" to withdraw funds to /// @param pcvDeposit the address to un-set as safe - function unsetSafeAddress(address pcvDeposit) external override isGovernorOrGuardianOrAdmin { + function unsetSafeAddress(address pcvDeposit) + external + override + hasAnyOfThreeRoles(TribeRoles.GOVERNOR, TribeRoles.GUARDIAN, TribeRoles.PCV_GUARDIAN_ADMIN) + { _unsetSafeAddress(pcvDeposit); } /// @notice batch version of unsetSafeAddresses /// @param _safeAddresses the addresses to un-set as safe - function unsetSafeAddresses(address[] calldata _safeAddresses) external override isGovernorOrGuardianOrAdmin { + function unsetSafeAddresses(address[] calldata _safeAddresses) + external + override + hasAnyOfThreeRoles(TribeRoles.GOVERNOR, TribeRoles.GUARDIAN, TribeRoles.PCV_GUARDIAN_ADMIN) + { require(_safeAddresses.length != 0, "empty"); for (uint256 i = 0; i < _safeAddresses.length; i++) { _unsetSafeAddress(_safeAddresses[i]); @@ -81,7 +96,7 @@ contract PCVGuardian is IPCVGuardian, CoreRef { uint256 amount, bool pauseAfter, bool depositAfter - ) external override isGovernorOrGuardianOrAdmin { + ) external override hasAnyOfThreeRoles(TribeRoles.GOVERNOR, TribeRoles.PCV_SAFE_MOVER_ROLE, TribeRoles.GUARDIAN) { require(isSafeAddress(safeAddress), "Provided address is not a safe address!"); pcvDeposit._ensureUnpaused(); @@ -111,7 +126,7 @@ contract PCVGuardian is IPCVGuardian, CoreRef { uint256 amount, bool pauseAfter, bool depositAfter - ) external override isGovernorOrGuardianOrAdmin { + ) external override hasAnyOfThreeRoles(TribeRoles.GOVERNOR, TribeRoles.PCV_SAFE_MOVER_ROLE, TribeRoles.GUARDIAN) { require(isSafeAddress(safeAddress), "Provided address is not a safe address!"); pcvDeposit._ensureUnpaused(); @@ -142,7 +157,7 @@ contract PCVGuardian is IPCVGuardian, CoreRef { uint256 amount, bool pauseAfter, bool depositAfter - ) external override isGovernorOrGuardianOrAdmin { + ) external override hasAnyOfThreeRoles(TribeRoles.GOVERNOR, TribeRoles.PCV_SAFE_MOVER_ROLE, TribeRoles.GUARDIAN) { require(isSafeAddress(safeAddress), "Provided address is not a safe address!"); pcvDeposit._ensureUnpaused(); diff --git a/proposals/dao/fip_82.ts b/proposals/dao/fip_82.ts index 57defa254..2fb653ab1 100644 --- a/proposals/dao/fip_82.ts +++ b/proposals/dao/fip_82.ts @@ -7,7 +7,7 @@ import { TeardownUpgradeFunc, ValidateUpgradeFunc } from '@custom-types/types'; -import { getImpersonatedSigner } from '@test/helpers'; +import { getImpersonatedSigner, validateArraysEqual } from '@test/helpers'; import { tribeCouncilPodConfig, PodCreationConfig } from '@protocol/optimisticGovernance'; import { abi as inviteTokenABI } from '../../artifacts/@orcaprotocol/contracts/contracts/InviteToken.sol/InviteToken.json'; import { abi as timelockABI } from '../../artifacts/@openzeppelin/contracts/governance/TimelockController.sol/TimelockController.json'; @@ -15,10 +15,6 @@ import { abi as gnosisSafeABI } from '../../artifacts/contracts/pods/interfaces/ import { Contract } from 'ethers'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; -const validateArraysEqual = (arrayA: string[], arrayB: string[]) => { - arrayA.every((a) => expect(arrayB.map((b) => b.toLowerCase()).includes(a.toLowerCase()))); -}; - // Transfers Orca tokens from deployer address to the factory, so that it can deploy pods // Requirement of holding Orca tokens to deploy is a slow rollout mechanism used by Orca const transferOrcaTokens = async ( diff --git a/proposals/dao/fip_82b.ts b/proposals/dao/fip_82b.ts index de21f5bf5..9436e76e9 100644 --- a/proposals/dao/fip_82b.ts +++ b/proposals/dao/fip_82b.ts @@ -9,6 +9,7 @@ import { ValidateUpgradeFunc } from '@custom-types/types'; import { Contract } from 'ethers'; +import { validateArraysEqual } from '@test/helpers'; /* @@ -26,9 +27,17 @@ const fipNumber = 'fip_82b'; // Do any deployments // This should exclusively include new contract deployments const deploy: DeployUpgradeFunc = async (deployAddress: string, addresses: NamedAddresses, logging: boolean) => { - console.log(`No deploy actions for fip${fipNumber}`); + const deploySigner = (await ethers.getSigners())[0]; + const previousPCVGuardian = await ethers.getContractAt('PCVGuardian', addresses.pcvGuardian, deploySigner); + const safeAddresses = await previousPCVGuardian.getSafeAddresses(); + + const pcvGuardianFactory = await ethers.getContractFactory('PCVGuardian'); + const pcvGuardianNew = await pcvGuardianFactory.deploy(addresses.core, safeAddresses); + logging && console.log('PCVGuardian deployed to: ', pcvGuardianNew.address); + logging && console.log('PCVGuardian safeAddresses: ', safeAddresses); + return { - // put returned contract objects here + pcvGuardianNew }; }; @@ -48,7 +57,40 @@ const teardown: TeardownUpgradeFunc = async (addresses, oldContracts, contracts, // Run any validations required on the fip using mocha or console logging // IE check balances, check state of contracts, etc. const validate: ValidateUpgradeFunc = async (addresses, oldContracts, contracts, logging) => { - console.log(`No actions to complete in validate for fip${fipNumber}`); + // 1. Validate new PCVGuardian deployment and roles granted + const core = contracts.core; + const newPCVGuardian = contracts.pcvGuardianNew; + + const safeAddresses = await newPCVGuardian.getSafeAddresses(); + const expectedSafeAddresses = [ + '0xd51dba7a94e1adea403553a8235c302cebf41a3c', + '0x4fcb1435fd42ce7ce7af3cb2e98289f79d2962b3', + '0x98e5f5706897074a4664dd3a32eb80242d6e694b', + '0x5b86887e171bae0c2c826e87e34df8d558c079b9', + '0x2a188f9eb761f70ecea083ba6c2a40145078dfc2', + '0xb0e731f036adfdec12da77c15aab0f90e8e45a0e', + '0x24f663c69cd4b263cf5685a49013ff5f1c898d24', + '0x5ae217de26f6ff5f481c6e10ec48b2cf2fc857c8', + '0xe8633c49ace655eb4a8b720e6b12f09bd3a97812', + '0xcd1ac0014e2ebd972f40f24df1694e6f528b2fd4', + '0xc5bb8f0253776bec6ff450c2b40f092f7e7f5b57', + '0xc4eac760c2c631ee0b064e39888b89158ff808b2', + '0x2c47fef515d2c70f2427706999e158533f7cf090', + '0x9aadffe00eae6d8e59bb4f7787c6b99388a6960d', + '0xd2174d78637a40448112aa6b30f9b19e6cf9d1f9', + '0x5dde9b4b14edf59cb23c1d4579b279846998205e' + ]; + validateArraysEqual(safeAddresses, expectedSafeAddresses); + + // New PCV Guardian roles - validate granted + expect(await core.hasRole(ethers.utils.id('GUARDIAN_ROLE'), newPCVGuardian.address)).to.be.true; + expect(await core.hasRole(ethers.utils.id('PCV_CONTROLLER_ROLE'), newPCVGuardian.address)).to.be.true; + + // Old PCV Guardian roles - validate revoked + expect(await core.hasRole(ethers.utils.id('GUARDIAN_ROLE'), addresses.pcvGuardian)).to.be.false; + expect(await core.hasRole(ethers.utils.id('PCV_CONTROLLER_ROLE'), addresses.pcvGuardian)).to.be.false; + + // 2. Validate TribalCouncil role transfers await validateTransferredRoleAdmins(contracts.core); await validateNewCouncilRoles(contracts.core); await validateContractAdmins(contracts); @@ -73,6 +115,7 @@ const validateTransferredRoleAdmins = async (core: Contract) => { expect(await core.getRoleAdmin(ethers.utils.id('METAGOVERNANCE_GAUGE_ADMIN'))).to.be.equal(ROLE_ADMIN); expect(await core.getRoleAdmin(ethers.utils.id('SWAP_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); expect(await core.getRoleAdmin(ethers.utils.id('VOTIUM_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); + expect(await core.getRoleAdmin(ethers.utils.id('RATE_LIMITED_MINTER_ADMIN'))).to.be.equal(ROLE_ADMIN); }; /// Validate that the expected new TribeRoles have been created @@ -83,6 +126,8 @@ const validateNewCouncilRoles = async (core: Contract) => { expect(await core.getRoleAdmin(ethers.utils.id('FEI_MINT_ADMIN'))).to.be.equal(ROLE_ADMIN); expect(await core.getRoleAdmin(ethers.utils.id('PCV_MINOR_PARAM_ROLE'))).to.be.equal(ROLE_ADMIN); expect(await core.getRoleAdmin(ethers.utils.id('PSM_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); + expect(await core.getRoleAdmin(ethers.utils.id('PCV_SAFE_MOVER_ROLE'))).to.be.equal(ROLE_ADMIN); + expect(await core.getRoleAdmin(ethers.utils.id('PCV_GUARDIAN_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); }; /// Validate that the relevant contract admins have been set to their expected values @@ -131,6 +176,7 @@ const validateTribalCouncilRoles = async (core: Contract, tribalCouncilTimelockA expect(await core.hasRole(ethers.utils.id('PCV_GUARDIAN_ADMIN_ROLE'), tribalCouncilTimelockAddress)).to.be.true; expect(await core.hasRole(ethers.utils.id('ORACLE_ADMIN_ROLE'), tribalCouncilTimelockAddress)).to.be.true; expect(await core.hasRole(ethers.utils.id('PSM_ADMIN_ROLE'), tribalCouncilTimelockAddress)).to.be.true; + expect(await core.hasRole(ethers.utils.id('PCV_SAFE_MOVER_ROLE'), tribalCouncilTimelockAddress)).to.be.true; }; export { deploy, setup, teardown, validate }; diff --git a/proposals/description/fip_82b.ts b/proposals/description/fip_82b.ts index 6b2a485a2..2c20ef64c 100644 --- a/proposals/description/fip_82b.ts +++ b/proposals/description/fip_82b.ts @@ -155,6 +155,16 @@ const fip_82b: ProposalDescription = { ], description: 'Create PCV_SAFE_MOVER_ROLE role, assigning ROLE_ADMIN as the role admin' }, + { + target: 'core', + values: '0', + method: 'createRole(bytes32,bytes32)', + arguments: [ + '0xd387c7eec7161b3637e694ef5cf8f1a9e29bfd35135c86c9b540bebec4ef221a', // PCV_SAFE_MOVER_ROLE + '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN + ], + description: 'Create PCV_SAFE_MOVER_ROLE role, assigning ROLE_ADMIN as the role admin' + }, /////// Set the relevant contract admins to the newly created roles ////////// // FUSE_ADMIN { @@ -288,16 +298,6 @@ const fip_82b: ProposalDescription = { ], description: 'Grant TribalCouncil timelock the PCV_MINOR_PARAM_ROLE role' }, - { - target: 'core', - values: '0', - method: 'grantRole(bytes32,address)', - arguments: [ - '0xdf6ce05acd28d71e96472375ef55c4a692f167af3ccda9500570f7373c1ba22c', // PCV_GUARDIAN_ADMIN_ROLE - '{tribalCouncilTimelock}' - ], - description: 'Grant TribalCouncil timelock the PCV_GUARDIAN_ADMIN_ROLE role' - }, { target: 'core', values: '0', @@ -378,6 +378,67 @@ const fip_82b: ProposalDescription = { '{optimisticTimelock}' ], description: 'Grant optimisticTimelock the TOKEMAK_DEPOSIT_ADMIN_ROLE role' + }, + { + target: 'core', + values: '0', + method: 'grantRole(bytes32,address)', + arguments: [ + '0xd387c7eec7161b3637e694ef5cf8f1a9e29bfd35135c86c9b540bebec4ef221a', // PCV_SAFE_MOVER_ROLE + '{tribalCouncilTimelock}' + ], + description: 'Grant tribalCouncilTimelock the PCV_SAFE_MOVER_ROLE role' + }, + { + target: 'core', + values: '0', + method: 'grantRole(bytes32,address)', + arguments: [ + '0xdf6ce05acd28d71e96472375ef55c4a692f167af3ccda9500570f7373c1ba22c', // PCV_GUARDIAN_ADMIN_ROLE + '{tribalCouncilTimelock}' + ], + description: 'Grant tribalCouncilTimelock the PCV_GUARDIAN_ADMIN_ROLE role' + }, + ////// Authorise new PCV Guardian and revoke old PCV Guardian //////// + { + target: 'core', + values: '0', + method: 'grantRole(bytes32,address)', + arguments: [ + '0x0866eae1216ed05a11636a648003f3f62921eb97ccb05acc30636f62958a8bd6', // PCV_CONTROLLER + '{pcvGuardianNew}' + ], + description: 'Grant newPCVGuardian the PCV_CONTROLLER_ROLE' + }, + { + target: 'core', + values: '0', + method: 'grantRole(bytes32,address)', + arguments: [ + '0x55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041', // GUARDIAN + '{pcvGuardianNew}' + ], + description: 'Grant newPCVGuardian the GUARDIAN role' + }, + { + target: 'core', + values: '0', + method: 'revokeRole(bytes32,address)', + arguments: [ + '0x0866eae1216ed05a11636a648003f3f62921eb97ccb05acc30636f62958a8bd6', // PCV_CONTROLLER + '{pcvGuardian}' + ], + description: 'Revoke PCV_CONTROLLER from old pcvGuardian' + }, + { + target: 'core', + values: '0', + method: 'revokeRole(bytes32,address)', + arguments: [ + '0x55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a5041', // GUARDIAN + '{pcvGuardian}' + ], + description: 'Revoke GUARDIAN from old pcvGuardian' } ], description: ` diff --git a/protocol-configuration/permissions.ts b/protocol-configuration/permissions.ts index 7122a67ea..b82658808 100644 --- a/protocol-configuration/permissions.ts +++ b/protocol-configuration/permissions.ts @@ -17,14 +17,14 @@ export const permissions = { 'feiDAOTimelock', 'ratioPCVControllerV2', 'aaveEthPCVDripController', - 'pcvGuardian', + 'pcvGuardianNew', 'daiPCVDripController', 'lusdPCVDripController', 'ethPSMFeiSkimmer', 'lusdPSMFeiSkimmer', 'raiPCVDripController' ], - GUARDIAN_ROLE: ['multisig', 'pcvGuardian', 'pcvSentinel'], + GUARDIAN_ROLE: ['multisig', 'pcvGuardianNew', 'pcvSentinel'], ORACLE_ADMIN_ROLE: [ 'collateralizationOracleGuardian', 'optimisticTimelock', @@ -39,6 +39,7 @@ export const permissions = { FUSE_ADMIN: ['optimisticTimelock', 'tribalChiefSyncV2', 'tribalCouncilTimelock'], VOTIUM_ADMIN_ROLE: ['opsOptimisticTimelock'], PCV_GUARDIAN_ADMIN_ROLE: ['optimisticTimelock', 'tribalCouncilTimelock'], + PCV_SAFE_MOVER_ROLE: ['tribalCouncilTimelock'], METAGOVERNANCE_VOTE_ADMIN: ['feiDAOTimelock', 'opsOptimisticTimelock'], METAGOVERNANCE_TOKEN_STAKING: ['feiDAOTimelock', 'opsOptimisticTimelock'], METAGOVERNANCE_GAUGE_ADMIN: ['feiDAOTimelock', 'optimisticTimelock'], diff --git a/test/helpers.ts b/test/helpers.ts index 8bf0eebcb..7da3e7b1d 100644 --- a/test/helpers.ts +++ b/test/helpers.ts @@ -134,6 +134,11 @@ async function getCore(): Promise { return core; } +const validateArraysEqual = (arrayA: string[], arrayB: string[]) => { + expect(arrayA.length).to.equal(arrayB.length); + arrayA.every((a) => expect(arrayB.map((b) => b.toLowerCase()).includes(a.toLowerCase()))); +}; + async function expectApprox( actual: string | number | BigNumberish, expected: string | number | BigNumberish, @@ -343,5 +348,6 @@ export { resetFork, overwriteChainlinkAggregator, performDAOAction, - initialiseGnosisSDK + initialiseGnosisSDK, + validateArraysEqual }; diff --git a/test/integration/proposals_config.ts b/test/integration/proposals_config.ts index 78d791481..9a85ac7a0 100644 --- a/test/integration/proposals_config.ts +++ b/test/integration/proposals_config.ts @@ -40,34 +40,6 @@ const proposals: ProposalsConfigMap = { deprecatedContractSignoff: [], category: ProposalCategory.DAO }, - fip_82b: { - deploy: false, // deploy flag for whether to run deploy action during e2e tests or use mainnet state - totalValue: 0, // amount of ETH to send to DAO execution - proposal: fip_82b, - proposalId: '', - affectedContractSignoff: [ - 'core', - 'fuseGuardian', - 'optimisticMinter', - 'pcvEquityMinter', - 'indexDelegator', - 'ethTokemakPCVDeposit', - 'uniswapPCVDeposit', - 'lusdPSMFeiSkimmer', - 'ethPSMFeiSkimmer', - 'aaveEthPCVDripController', - 'daiPCVDripController', - 'lusdPCVDripController', - 'tribalCouncilTimelock', - 'feiDAOTimelock', - 'roleBastion', - 'opsOptimisticTimelock', - 'optimisticTimelock', - 'tribalChiefSyncV2' - ], - deprecatedContractSignoff: [], - category: ProposalCategory.DAO - }, fip_98: { deploy: false, proposalId: '47738997083165992958921925097327638388915944734650384828020246684763693471048', @@ -104,6 +76,34 @@ const proposals: ProposalsConfigMap = { category: ProposalCategory.DAO, totalValue: 0, proposal: fip_99 + }, + fip_82b: { + deploy: true, // deploy flag for whether to run deploy action during e2e tests or use mainnet state + totalValue: 0, // amount of ETH to send to DAO execution + proposal: fip_82b, + proposalId: '', + affectedContractSignoff: [ + 'core', + 'fuseGuardian', + 'optimisticMinter', + 'pcvEquityMinter', + 'indexDelegator', + 'ethTokemakPCVDeposit', + 'uniswapPCVDeposit', + 'lusdPSMFeiSkimmer', + 'ethPSMFeiSkimmer', + 'aaveEthPCVDripController', + 'daiPCVDripController', + 'lusdPCVDripController', + 'tribalCouncilTimelock', + 'feiDAOTimelock', + 'roleBastion', + 'opsOptimisticTimelock', + 'optimisticTimelock', + 'tribalChiefSyncV2' + ], + deprecatedContractSignoff: [], + category: ProposalCategory.DAO } }; diff --git a/test/unit/pcv/PCVGuardian.test.ts b/test/unit/pcv/PCVGuardian.test.ts index bff9fe4e5..7dd10e845 100644 --- a/test/unit/pcv/PCVGuardian.test.ts +++ b/test/unit/pcv/PCVGuardian.test.ts @@ -85,34 +85,32 @@ describe('PCV Guardian', function () { describe('access control', async () => { it('should revert when calling setSafeAddress & setSafeAddresses from a non-governor address', async () => { - await expect(pcvGuardianWithoutStartingAddresses.setSafeAddress(userAddress)).to.be.revertedWith( - 'CoreRef: Caller is not a governor' - ); + await expect(pcvGuardianWithoutStartingAddresses.setSafeAddress(userAddress)).to.be.revertedWith('UNAUTHORIZED'); await expect( pcvGuardianWithoutStartingAddresses.setSafeAddresses([userAddress, userAddress2]) - ).to.be.revertedWith('CoreRef: Caller is not a governor'); + ).to.be.revertedWith('UNAUTHORIZED'); }); it('should revert when calling unsetSafeAddress & unsetSafeAddresses from a non-guardian-or-governor-or-admin address', async () => { await expect(pcvGuardianWithoutStartingAddresses.unsetSafeAddress(userAddress)).to.be.revertedWith( - 'CoreRef: Caller is not governor or guardian or admin' + 'UNAUTHORIZED' ); await expect( pcvGuardianWithoutStartingAddresses.unsetSafeAddresses([userAddress, userAddress2]) - ).to.be.revertedWith('CoreRef: Caller is not governor or guardian or admin'); + ).to.be.revertedWith('UNAUTHORIZED'); }); it('should revert when calling withdrawToSafeAddress from a non-guardian-or-governor-or-admin address', async () => { await expect( pcvGuardianWithoutStartingAddresses.withdrawToSafeAddress(userAddress, userAddress, 1, false, false) - ).to.be.revertedWith('CoreRef: Caller is not governor or guardian or admin'); + ).to.be.revertedWith('UNAUTHORIZED'); }); it('should revert when calling withdrawETHToSafeAddress from a non-guardian-or-governor-or-admin address', async () => { await expect( pcvGuardianWithoutStartingAddresses.withdrawETHToSafeAddress(userAddress, userAddress, 1, false, false) - ).to.be.revertedWith('CoreRef: Caller is not governor or guardian or admin'); + ).to.be.revertedWith('UNAUTHORIZED'); }); it('should revert when calling withdrawERC20ToSafeAddress from a non-guardian-or-governor-or-admin address', async () => { @@ -125,7 +123,7 @@ describe('PCV Guardian', function () { false, false ) - ).to.be.revertedWith('CoreRef: Caller is not governor or guardian or admin'); + ).to.be.revertedWith('UNAUTHORIZED'); }); it('should allow the governor to add a safe address', async () => { @@ -209,6 +207,13 @@ describe('PCV Guardian', function () { expect(await token.balanceOf(userAddress)).to.eq(1); }); + it('should withdraw from a token-pcv deposit when called by the governor', async () => { + await pcvGuardianWithoutStartingAddresses + .connect(impersonatedSigners[governorAddress]) + .withdrawToSafeAddress(tokenPCVDeposit.address, userAddress, 1, false, false); + expect(await token.balanceOf(userAddress)).to.eq(1); + }); + it('should withdraw from a token-pcv deposit and deposit after', async () => { await pcvGuardianWithoutStartingAddresses .connect(impersonatedSigners[governorAddress]) From cbebe54bc2eb90e4324405f6b4ba0913a8edf723 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Wed, 4 May 2022 15:31:39 +0100 Subject: [PATCH 050/121] fix: correct broken merge --- proposals/description/fip_82b.ts | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/proposals/description/fip_82b.ts b/proposals/description/fip_82b.ts index 2c20ef64c..13cb0fcd7 100644 --- a/proposals/description/fip_82b.ts +++ b/proposals/description/fip_82b.ts @@ -155,16 +155,6 @@ const fip_82b: ProposalDescription = { ], description: 'Create PCV_SAFE_MOVER_ROLE role, assigning ROLE_ADMIN as the role admin' }, - { - target: 'core', - values: '0', - method: 'createRole(bytes32,bytes32)', - arguments: [ - '0xd387c7eec7161b3637e694ef5cf8f1a9e29bfd35135c86c9b540bebec4ef221a', // PCV_SAFE_MOVER_ROLE - '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN - ], - description: 'Create PCV_SAFE_MOVER_ROLE role, assigning ROLE_ADMIN as the role admin' - }, /////// Set the relevant contract admins to the newly created roles ////////// // FUSE_ADMIN { From f6c79ee8ac8f6f326705a357d2f1cdb6064e64c9 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Wed, 4 May 2022 15:53:10 +0100 Subject: [PATCH 051/121] feat: add PARAMETER_ADMIN to permissions --- protocol-configuration/permissions.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/protocol-configuration/permissions.ts b/protocol-configuration/permissions.ts index b82658808..9a5361ae1 100644 --- a/protocol-configuration/permissions.ts +++ b/protocol-configuration/permissions.ts @@ -34,6 +34,7 @@ export const permissions = { SWAP_ADMIN_ROLE: ['pcvEquityMinter', 'optimisticTimelock'], BALANCER_MANAGER_ADMIN_ROLE: [], RATE_LIMITED_MINTER_ADMIN: [], + PARAMETER_ADMIN: [], PSM_ADMIN_ROLE: ['tribalCouncilTimelock'], TRIBAL_CHIEF_ADMIN_ROLE: ['optimisticTimelock', 'tribalChiefSyncV2'], FUSE_ADMIN: ['optimisticTimelock', 'tribalChiefSyncV2', 'tribalCouncilTimelock'], From ee41371d3c794d5ecedea4230ee9654e059eadbe Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Wed, 4 May 2022 16:42:33 +0100 Subject: [PATCH 052/121] refactor: change tokemak and index delegator admins --- proposals/dao/fip_82b.ts | 10 +++++-- proposals/description/fip_82b.ts | 43 ++++++++++++++++++++------- protocol-configuration/permissions.ts | 4 +-- 3 files changed, 42 insertions(+), 15 deletions(-) diff --git a/proposals/dao/fip_82b.ts b/proposals/dao/fip_82b.ts index 9436e76e9..91d4f7ac9 100644 --- a/proposals/dao/fip_82b.ts +++ b/proposals/dao/fip_82b.ts @@ -136,9 +136,11 @@ const validateContractAdmins = async (contracts: NamedContracts) => { expect(await contracts.optimisticMinter.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('FEI_MINT_ADMIN')); expect(await contracts.pcvEquityMinter.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('FEI_MINT_ADMIN')); - expect(await contracts.indexDelegator.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_MINOR_PARAM_ROLE')); + expect(await contracts.indexDelegator.CONTRACT_ADMIN_ROLE()).to.be.equal( + ethers.utils.id('METAGOVERNANCE_VOTE_ADMIN') + ); expect(await contracts.ethTokemakPCVDeposit.CONTRACT_ADMIN_ROLE()).to.be.equal( - ethers.utils.id('PCV_MINOR_PARAM_ROLE') + ethers.utils.id('TOKEMAK_DEPOSIT_ADMIN_ROLE') ); expect(await contracts.uniswapPCVDeposit.CONTRACT_ADMIN_ROLE()).to.be.equal(ethers.utils.id('PCV_MINOR_PARAM_ROLE')); @@ -167,6 +169,9 @@ const validateCallingContractsHaveNewAdmin = async (core: Contract, addresses: N // GOVERNOR : PCV_MINOR_PARAM_ROLE expect(await core.hasRole(ethers.utils.id('PCV_MINOR_PARAM_ROLE'), addresses.feiDAOTimelock)).to.be.true; expect(await core.hasRole(ethers.utils.id('PCV_MINOR_PARAM_ROLE'), addresses.optimisticTimelock)).to.be.true; + + expect(await core.hasRole(ethers.utils.id('TOKEMAK_DEPOSIT_ADMIN_ROLE'), addresses.optimisticTimelock)).to.be.true; + expect(await core.hasRole(ethers.utils.id('TOKEMAK_DEPOSIT_ADMIN_ROLE'), addresses.feiDAOTimelock)).to.be.true; }; const validateTribalCouncilRoles = async (core: Contract, tribalCouncilTimelockAddress: string) => { @@ -177,6 +182,7 @@ const validateTribalCouncilRoles = async (core: Contract, tribalCouncilTimelockA expect(await core.hasRole(ethers.utils.id('ORACLE_ADMIN_ROLE'), tribalCouncilTimelockAddress)).to.be.true; expect(await core.hasRole(ethers.utils.id('PSM_ADMIN_ROLE'), tribalCouncilTimelockAddress)).to.be.true; expect(await core.hasRole(ethers.utils.id('PCV_SAFE_MOVER_ROLE'), tribalCouncilTimelockAddress)).to.be.true; + expect(await core.hasRole(ethers.utils.id('TOKEMAK_DEPOSIT_ADMIN_ROLE'), tribalCouncilTimelockAddress)).to.be.true; }; export { deploy, setup, teardown, validate }; diff --git a/proposals/description/fip_82b.ts b/proposals/description/fip_82b.ts index 13cb0fcd7..247f3de49 100644 --- a/proposals/description/fip_82b.ts +++ b/proposals/description/fip_82b.ts @@ -185,23 +185,14 @@ const fip_82b: ProposalDescription = { ], description: 'Set the contract admin of the PCV Equity Minter to be the FEI_MINT_ADMIN' }, - { - target: 'indexDelegator', // this is SnapshotDelegatorPCVDeposit - values: '0', - method: 'setContractAdminRole(bytes32)', - arguments: [ - '0x46797b318ce8c2d83979760ef100a5c0fdb980de4b574d6142ce4d0afce307ed' // PCV_MINOR_PARAM_ROLE - ], - description: 'Set the contract admin of the indexDelegator to be the PCV_MINOR_PARAM_ROLE' - }, { target: 'ethTokemakPCVDeposit', // TokemakPCVDepositBase values: '0', method: 'setContractAdminRole(bytes32)', arguments: [ - '0x46797b318ce8c2d83979760ef100a5c0fdb980de4b574d6142ce4d0afce307ed' // PCV_MINOR_PARAM_ROLE + '0x6c9ecf07a5886fd74a8d32f4d3c317a7d5e5b5c7a073a3ab06c217e9ce5288e3' // TOKEMAK_DEPOSIT_ADMIN_ROLE ], - description: 'Set the contract admin of the ethTokemarkPCVdeposit to be the PCV_MINOR_PARAM_ROLE' + description: 'Set the contract admin of the ethTokemarkPCVdeposit to be the TOKEMAK_DEPOSIT_ADMIN_ROLE' }, { target: 'uniswapPCVDeposit', @@ -268,6 +259,36 @@ const fip_82b: ProposalDescription = { ], description: 'Grant TribalCouncil timelock the FUSE_ADMIN role' }, + { + target: 'core', + values: '0', + method: 'grantRole(bytes32,address)', + arguments: [ + '0xb02f76effb323167cad756bb4f3edbfb9d9291f9bfcdc72c9ceea005562f32eb', // METAGOVERNANCE_VOTE_ADMIN + '{tribalCouncilTimelock}' + ], + description: 'Grant METAGOVERNANCE_VOTE_ADMIN to the tribalCouncilTimelock' + }, + { + target: 'core', + values: '0', + method: 'grantRole(bytes32,address)', + arguments: [ + '0x6c9ecf07a5886fd74a8d32f4d3c317a7d5e5b5c7a073a3ab06c217e9ce5288e3', // TOKEMAK_DEPOSIT_ADMIN_ROLE + '{tribalCouncilTimelock}' + ], + description: 'Grant TOKEMAK_DEPOSIT_ADMIN_ROLE to the tribalCouncilTimelock' + }, + { + target: 'core', + values: '0', + method: 'grantRole(bytes32,address)', + arguments: [ + '0x6c9ecf07a5886fd74a8d32f4d3c317a7d5e5b5c7a073a3ab06c217e9ce5288e3', // TOKEMAK_DEPOSIT_ADMIN_ROLE + '{feiDAOTimelock}' + ], + description: 'Grant TOKEMAK_DEPOSIT_ADMIN_ROLE to the feiDAOTimelock' + }, { target: 'core', values: '0', diff --git a/protocol-configuration/permissions.ts b/protocol-configuration/permissions.ts index 9a5361ae1..ca1aaae8c 100644 --- a/protocol-configuration/permissions.ts +++ b/protocol-configuration/permissions.ts @@ -41,7 +41,7 @@ export const permissions = { VOTIUM_ADMIN_ROLE: ['opsOptimisticTimelock'], PCV_GUARDIAN_ADMIN_ROLE: ['optimisticTimelock', 'tribalCouncilTimelock'], PCV_SAFE_MOVER_ROLE: ['tribalCouncilTimelock'], - METAGOVERNANCE_VOTE_ADMIN: ['feiDAOTimelock', 'opsOptimisticTimelock'], + METAGOVERNANCE_VOTE_ADMIN: ['feiDAOTimelock', 'opsOptimisticTimelock', 'tribalCouncilTimelock'], METAGOVERNANCE_TOKEN_STAKING: ['feiDAOTimelock', 'opsOptimisticTimelock'], METAGOVERNANCE_GAUGE_ADMIN: ['feiDAOTimelock', 'optimisticTimelock'], ROLE_ADMIN: ['feiDAOTimelock', 'tribalCouncilTimelock'], @@ -50,5 +50,5 @@ export const permissions = { POD_VETO_ADMIN: ['nopeDAO'], POD_ADMIN: ['tribalCouncilTimelock', 'podFactory'], PCV_MINOR_PARAM_ROLE: ['feiDAOTimelock', 'optimisticTimelock', 'tribalCouncilTimelock'], - TOKEMAK_DEPOSIT_ADMIN_ROLE: ['optimisticTimelock'] + TOKEMAK_DEPOSIT_ADMIN_ROLE: ['optimisticTimelock', 'feiDAOTimelock', 'tribalCouncilTimelock'] }; From 48acdf9d68b2b59e506d47e9a15d0492d24dd0f2 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Wed, 4 May 2022 19:25:57 +0100 Subject: [PATCH 053/121] feat: take admin of two more roles --- contracts/core/TribeRoles.sol | 6 ++++++ proposals/dao/fip_82b.ts | 3 +++ proposals/description/fip_82b.ts | 20 ++++++++++++++++++++ protocol-configuration/mainnetAddresses.ts | 2 +- 4 files changed, 30 insertions(+), 1 deletion(-) diff --git a/contracts/core/TribeRoles.sol b/contracts/core/TribeRoles.sol index 5fc00ce7a..09b672f8d 100644 --- a/contracts/core/TribeRoles.sol +++ b/contracts/core/TribeRoles.sol @@ -78,6 +78,12 @@ library TribeRoles { /// @notice manages whitelisting of gauges where the protocol's tokens can be staked bytes32 internal constant METAGOVERNANCE_GAUGE_ADMIN = keccak256("METAGOVERNANCE_GAUGE_ADMIN"); + /// @notice capable of performing swaps on Balancer LBP Swapper + bytes32 internal constant SWAP_ADMIN_ROLE = keccak256("SWAP_ADMIN_ROLE"); + + /// @notice capable of setting properties on Balancer BasePool utility wrapper + bytes32 internal constant BALANCER_MANAGER_ADMIN_ROLE = keccak256("BALANCER_MANAGER_ADMIN_ROLE"); + /*/////////////////////////////////////////////////////////////// Minor Roles //////////////////////////////////////////////////////////////*/ diff --git a/proposals/dao/fip_82b.ts b/proposals/dao/fip_82b.ts index 91d4f7ac9..24ffee305 100644 --- a/proposals/dao/fip_82b.ts +++ b/proposals/dao/fip_82b.ts @@ -116,6 +116,9 @@ const validateTransferredRoleAdmins = async (core: Contract) => { expect(await core.getRoleAdmin(ethers.utils.id('SWAP_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); expect(await core.getRoleAdmin(ethers.utils.id('VOTIUM_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); expect(await core.getRoleAdmin(ethers.utils.id('RATE_LIMITED_MINTER_ADMIN'))).to.be.equal(ROLE_ADMIN); + + expect(await core.getRoleAdmin(ethers.utils.id('BALANCER_MANAGER_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); + expect(await core.getRoleAdmin(ethers.utils.id('SWAP_ADMIN_ROLE'))).to.be.equal(ROLE_ADMIN); }; /// Validate that the expected new TribeRoles have been created diff --git a/proposals/description/fip_82b.ts b/proposals/description/fip_82b.ts index 247f3de49..0e0b24a63 100644 --- a/proposals/description/fip_82b.ts +++ b/proposals/description/fip_82b.ts @@ -34,6 +34,26 @@ const fip_82b: ProposalDescription = { ], description: 'Transfer ORACLE_ADMIN_ROLE role admin from GOVERNOR to ROLE_ADMIN' }, + { + target: 'core', + values: '0', + method: 'createRole(bytes32,bytes32)', + arguments: [ + '0x2ed79c21cc719d0c08e90d592e29828e4bd23efdb9ac45a4fe9b6c0ab5955b80', // BALANCER_MANAGER_ADMIN_ROLE + '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN + ], + description: 'Transfer BALANCER_MANAGER_ADMIN_ROLE role admin to ROLE_ADMIN' + }, + { + target: 'core', + values: '0', + method: 'createRole(bytes32,bytes32)', + arguments: [ + '0x471cfe1a44bf1b786db7d7104d51e6728ed7b90a35394ad7cc424adf8ed16816', // SWAP_ADMIN_ROLE + '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN + ], + description: 'Transfer SWAP_ADMIN_ROLE role admin to ROLE_ADMIN' + }, { target: 'core', values: '0', diff --git a/protocol-configuration/mainnetAddresses.ts b/protocol-configuration/mainnetAddresses.ts index f4f6076cb..630b81f9b 100644 --- a/protocol-configuration/mainnetAddresses.ts +++ b/protocol-configuration/mainnetAddresses.ts @@ -34,7 +34,7 @@ const MainnetAddresses: MainnetAddresses = { pcvGuardian: { artifactName: 'PCVGuardian', address: '0x2D1b1b509B6432A73e3d798572f0648f6453a5D9', - category: AddressCategory.Core + category: AddressCategory.Deprecated }, pcvSentinel: { artifactName: 'PCVSentinel', From ed4d53511d226674d9e235337bb6aab8b4780da0 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Wed, 4 May 2022 20:51:16 +0100 Subject: [PATCH 054/121] test: make dependency test pass --- proposals/description/fip_82b.ts | 16 +++----------- protocol-configuration/dependencies.ts | 25 ++++++++++++---------- protocol-configuration/mainnetAddresses.ts | 2 +- 3 files changed, 18 insertions(+), 25 deletions(-) diff --git a/proposals/description/fip_82b.ts b/proposals/description/fip_82b.ts index 0e0b24a63..884d21a6c 100644 --- a/proposals/description/fip_82b.ts +++ b/proposals/description/fip_82b.ts @@ -49,17 +49,7 @@ const fip_82b: ProposalDescription = { values: '0', method: 'createRole(bytes32,bytes32)', arguments: [ - '0x471cfe1a44bf1b786db7d7104d51e6728ed7b90a35394ad7cc424adf8ed16816', // SWAP_ADMIN_ROLE - '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN - ], - description: 'Transfer SWAP_ADMIN_ROLE role admin to ROLE_ADMIN' - }, - { - target: 'core', - values: '0', - method: 'createRole(bytes32,bytes32)', - arguments: [ - '0x23970cab3799b6876df4319661e6c03cc45bd59628799d92e988dd8cbdc90e31', // TRIBAL_CHIEF_ADMIN + '0x23970cab3799b6876df4319661e6c03cc45bd59628799d92e988dd8cbdc90e31', // TRIBAL_CHIEF_ADMIN_ROLE '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN ], description: 'Transfer TRIBAL_CHIEF_ADMIN role admin from GOVERNOR to ROLE_ADMIN' @@ -109,7 +99,7 @@ const fip_82b: ProposalDescription = { values: '0', method: 'createRole(bytes32,bytes32)', arguments: [ - '0x471cfe1a44bf1b786db7d7104d51e6728ed7b90a35394ad7cc424adf8ed16816', // LBP_SWAP_ROLE + '0x471cfe1a44bf1b786db7d7104d51e6728ed7b90a35394ad7cc424adf8ed16816', // SWAP_ADMIN_ROLE '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN ], description: 'Transfer LBP_SWAP_ROLE role admin from GOVERNOR to ROLE_ADMIN' @@ -480,7 +470,7 @@ const fip_82b: ProposalDescription = { Specifically, the proposal: 1. Creates various new operational roles which the TribalCouncil will hold - 2. Transfers the admin of all non-major roles to the TribalCouncil + 2. Transfers the admin of all non-major roles to the TribalCouncil (all major roles remain under the control of the DAO) 3. Makes the TribalCouncil the admin of various operational smart contracts 4. Creates a new PCVGuardian with a modern, more secure access control pattern diff --git a/protocol-configuration/dependencies.ts b/protocol-configuration/dependencies.ts index 77ec35601..95e70277b 100644 --- a/protocol-configuration/dependencies.ts +++ b/protocol-configuration/dependencies.ts @@ -37,7 +37,7 @@ const dependencies: DependencyMap = { 'feiTribeLBPSwapper', 'optimisticMinter', 'pcvEquityMinter', - 'pcvGuardian', + 'pcvGuardianNew', 'ratioPCVControllerV2', 'tribe', 'tribeMinter', @@ -195,7 +195,7 @@ const dependencies: DependencyMap = { pcvEquityMinter: { contractDependencies: ['core', 'collateralizationOracleWrapper', 'feiTribeLBPSwapper'] }, - pcvGuardian: { + pcvGuardianNew: { contractDependencies: [ 'core', 'guardian', @@ -210,7 +210,7 @@ const dependencies: DependencyMap = { ] }, raiPriceBoundPSM: { - contractDependencies: ['core', 'fei', 'raiPCVDripController', 'pcvGuardian'] + contractDependencies: ['core', 'fei', 'raiPCVDripController', 'pcvGuardianNew'] }, proxyAdmin: { contractDependencies: [ @@ -261,14 +261,14 @@ const dependencies: DependencyMap = { 'aaveTribeIncentivesController', 'tribeMinter', 'timelock', - 'pcvGuardian', + 'pcvGuardianNew', 'pegExchanger', 'voltFeiSwapContract', 'voltDepositWrapper' ] }, guardian: { - contractDependencies: ['core', 'collateralizationOracleGuardian', 'pcvGuardian', 'fuseGuardian', 'fuseAdmin'] + contractDependencies: ['core', 'collateralizationOracleGuardian', 'pcvGuardianNew', 'fuseGuardian', 'fuseAdmin'] }, optimisticMultisig: { contractDependencies: ['optimisticTimelock'] @@ -313,7 +313,7 @@ const dependencies: DependencyMap = { 'compoundDaiPCVDeposit', 'daiPCVDripController', 'chainlinkDaiUsdOracleWrapper', - 'pcvGuardian' + 'pcvGuardianNew' ] }, lusdPSM: { @@ -322,7 +322,7 @@ const dependencies: DependencyMap = { 'fei', 'bammDeposit', 'chainlinkLUSDOracleWrapper', - 'pcvGuardian', + 'pcvGuardianNew', 'lusdPCVDripController', 'lusdPSMFeiSkimmer' ] @@ -339,7 +339,7 @@ const dependencies: DependencyMap = { 'fei', 'aaveEthPCVDeposit', 'chainlinkEthUsdOracleWrapper', - 'pcvGuardian', + 'pcvGuardianNew', 'aaveEthPCVDripController', 'ethPSMRouter', 'ethPSMFeiSkimmer' @@ -352,13 +352,13 @@ const dependencies: DependencyMap = { contractDependencies: ['core', 'tribeUsdCompositeOracle', 'tribeMinter', 'collateralizationOracleWrapper', 'tribe'] }, aaveEthPCVDeposit: { - contractDependencies: ['core', 'aaveEthPCVDripController', 'pcvGuardian', 'ethPSM'] + contractDependencies: ['core', 'aaveEthPCVDripController', 'pcvGuardianNew', 'ethPSM'] }, aaveFeiPCVDeposit: { contractDependencies: ['core', 'fei'] }, aaveRaiPCVDeposit: { - contractDependencies: ['core', 'pcvGuardian', 'raiPCVDripController'] + contractDependencies: ['core', 'pcvGuardianNew', 'raiPCVDripController'] }, agEurAngleUniswapPCVDeposit: { contractDependencies: ['core', 'fei', 'chainlinkEurUsdOracleWrapper'] @@ -373,7 +373,7 @@ const dependencies: DependencyMap = { contractDependencies: ['core', 'daiPCVDripController', 'daiFixedPricePSM'] }, compoundEthPCVDeposit: { - contractDependencies: ['core', 'pcvGuardian'] + contractDependencies: ['core', 'pcvGuardianNew'] }, d3poolConvexPCVDeposit: { contractDependencies: ['core'] @@ -1070,6 +1070,9 @@ const dependencies: DependencyMap = { }, balancerLensBpt30Fei70Weth: { contractDependencies: ['oneConstantOracle', 'chainlinkEthUsdOracleWrapper'] + }, + pcvGuardian: { + contractDependencies: [] } }; diff --git a/protocol-configuration/mainnetAddresses.ts b/protocol-configuration/mainnetAddresses.ts index 630b81f9b..f4f6076cb 100644 --- a/protocol-configuration/mainnetAddresses.ts +++ b/protocol-configuration/mainnetAddresses.ts @@ -34,7 +34,7 @@ const MainnetAddresses: MainnetAddresses = { pcvGuardian: { artifactName: 'PCVGuardian', address: '0x2D1b1b509B6432A73e3d798572f0648f6453a5D9', - category: AddressCategory.Deprecated + category: AddressCategory.Core }, pcvSentinel: { artifactName: 'PCVSentinel', From 1163cccdc9567fed31fc028659aa24106bbf83cf Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Wed, 4 May 2022 21:32:27 +0100 Subject: [PATCH 055/121] refactor: remove redundant role --- contracts/core/TribeRoles.sol | 5 +---- proposals/description/fip_82b.ts | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/contracts/core/TribeRoles.sol b/contracts/core/TribeRoles.sol index 09b672f8d..7992ef0a3 100644 --- a/contracts/core/TribeRoles.sol +++ b/contracts/core/TribeRoles.sol @@ -60,7 +60,7 @@ library TribeRoles { /// @notice admin of minting Fei for specific scoped contracts bytes32 internal constant FEI_MINT_ADMIN = keccak256("FEI_MINT_ADMIN"); - /// @notice admin of minting Fei for specific scoped contracts + /// @notice capable of admin functionality on PCVDeposits bytes32 internal constant PCV_MINOR_PARAM_ROLE = keccak256("PCV_MINOR_PARAM_ROLE"); /// @notice capable of setting FEI Minters within global rate limits and caps @@ -89,9 +89,6 @@ library TribeRoles { //////////////////////////////////////////////////////////////*/ bytes32 internal constant POD_METADATA_REGISTER_ROLE = keccak256("POD_METADATA_REGISTER_ROLE"); - /// @notice capable of poking existing LBP auctions to exchange tokens. - bytes32 internal constant LBP_SWAP_ROLE = keccak256("SWAP_ADMIN_ROLE"); - /// @notice capable of engaging with Votium for voting incentives. bytes32 internal constant VOTIUM_ROLE = keccak256("VOTIUM_ADMIN_ROLE"); diff --git a/proposals/description/fip_82b.ts b/proposals/description/fip_82b.ts index 884d21a6c..d118b4a3b 100644 --- a/proposals/description/fip_82b.ts +++ b/proposals/description/fip_82b.ts @@ -102,7 +102,7 @@ const fip_82b: ProposalDescription = { '0x471cfe1a44bf1b786db7d7104d51e6728ed7b90a35394ad7cc424adf8ed16816', // SWAP_ADMIN_ROLE '0x2172861495e7b85edac73e3cd5fbb42dd675baadf627720e687bcfdaca025096' // ROLE_ADMIN ], - description: 'Transfer LBP_SWAP_ROLE role admin from GOVERNOR to ROLE_ADMIN' + description: 'Transfer SWAP_ADMIN_ROLE role admin from GOVERNOR to ROLE_ADMIN' }, { target: 'core', From 0a74ceb0e8a4b912f2a5dee409cc92b92ce06aea Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Thu, 5 May 2022 00:22:39 +0100 Subject: [PATCH 056/121] feat: add new PCVGuardian deploy --- protocol-configuration/mainnetAddresses.ts | 5 +++++ test/integration/proposals_config.ts | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/protocol-configuration/mainnetAddresses.ts b/protocol-configuration/mainnetAddresses.ts index f4f6076cb..fafa309eb 100644 --- a/protocol-configuration/mainnetAddresses.ts +++ b/protocol-configuration/mainnetAddresses.ts @@ -36,6 +36,11 @@ const MainnetAddresses: MainnetAddresses = { address: '0x2D1b1b509B6432A73e3d798572f0648f6453a5D9', category: AddressCategory.Core }, + pcvGuardianNew: { + artifactName: 'PCVGuardian', + address: '0x02435948F84d7465FB71dE45ABa6098Fc6eC2993', + category: AddressCategory.Core + }, pcvSentinel: { artifactName: 'PCVSentinel', address: '0xC297705Acf50134d256187c754B92FA37826C019', diff --git a/test/integration/proposals_config.ts b/test/integration/proposals_config.ts index 9a85ac7a0..f13b8464f 100644 --- a/test/integration/proposals_config.ts +++ b/test/integration/proposals_config.ts @@ -78,7 +78,7 @@ const proposals: ProposalsConfigMap = { proposal: fip_99 }, fip_82b: { - deploy: true, // deploy flag for whether to run deploy action during e2e tests or use mainnet state + deploy: false, // deploy flag for whether to run deploy action during e2e tests or use mainnet state totalValue: 0, // amount of ETH to send to DAO execution proposal: fip_82b, proposalId: '', From 1ff714b623a0aece4170ef13dd98790e7b4c44de Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Thu, 5 May 2022 00:43:35 +0100 Subject: [PATCH 057/121] build: remove fip_99 already executed and rariPool9RaiPCVDeposit is empty now --- test/integration/proposals_config.ts | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/test/integration/proposals_config.ts b/test/integration/proposals_config.ts index f13b8464f..7bf82f162 100644 --- a/test/integration/proposals_config.ts +++ b/test/integration/proposals_config.ts @@ -59,24 +59,6 @@ const proposals: ProposalsConfigMap = { totalValue: 0, proposal: fip_98 }, - fip_99: { - deploy: false, - proposalId: null, - affectedContractSignoff: [ - 'collateralizationOracle', - 'ratioPCVControllerV2', - 'rariPool9RaiPCVDeposit', - 'aaveRaiPCVDeposit', - 'raiPCVDripController', - 'raiPriceBoundPSM', - 'pcvGuardian', - 'core' - ], - deprecatedContractSignoff: [], - category: ProposalCategory.DAO, - totalValue: 0, - proposal: fip_99 - }, fip_82b: { deploy: false, // deploy flag for whether to run deploy action during e2e tests or use mainnet state totalValue: 0, // amount of ETH to send to DAO execution From a78066bf971fc079ebaaf849aab93135e7a25bf5 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Thu, 5 May 2022 01:31:19 +0100 Subject: [PATCH 058/121] refactor: update blockNumber to latest --- hardhat.config.ts | 2 +- test/integration/proposals_config.ts | 43 ---------------------------- 2 files changed, 1 insertion(+), 44 deletions(-) diff --git a/hardhat.config.ts b/hardhat.config.ts index bfcf69452..65d68c995 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -57,7 +57,7 @@ export default { forking: enableMainnetForking ? { url: `https://eth-mainnet.alchemyapi.io/v2/${mainnetAlchemyApiKey}`, - blockNumber: 14676055 // Friday, April 29th + blockNumber: 14714028 // Thursday, May 5th } : undefined }, diff --git a/test/integration/proposals_config.ts b/test/integration/proposals_config.ts index 7bf82f162..8d9c83d4e 100644 --- a/test/integration/proposals_config.ts +++ b/test/integration/proposals_config.ts @@ -1,9 +1,6 @@ import { ProposalCategory, ProposalsConfigMap } from '@custom-types/types'; -import fip_82 from '@proposals/description/fip_82'; import fip_82b from '@proposals/description/fip_82b'; -import fip_98 from '@proposals/description/fip_98'; -import fip_99 from '@proposals/description/fip_99'; // import fip_xx_proposal from '@proposals/description/fip_xx'; @@ -19,46 +16,6 @@ const proposals: ProposalsConfigMap = { category: ProposalCategory.DAO } */ - fip_82: { - deploy: false, // deploy flag for whether to run deploy action during e2e tests or use mainnet state - totalValue: 0, // amount of ETH to send to DAO execution - proposal: fip_82, - proposalId: '', - affectedContractSignoff: [ - 'roleBastion', - 'podFactory', - 'podExecutor', - 'nopeDAO', - 'governanceMetadataRegistry', - 'core', - 'tribe', - 'feiDAOTimelock', - 'tribalCouncilTimelock', - 'tribalCouncilSafe', - 'podAdminGateway' - ], - deprecatedContractSignoff: [], - category: ProposalCategory.DAO - }, - fip_98: { - deploy: false, - proposalId: '47738997083165992958921925097327638388915944734650384828020246684763693471048', - affectedContractSignoff: [ - 'fei', - 'feiDAOTimelock', - 'voltFeiSwapContract', - 'collateralizationOracle', - 'volt', - 'voltOracle', - 'voltDepositWrapper', - 'pcvGuardian', - 'turboFusePCVDeposit' - ], - deprecatedContractSignoff: [], - category: ProposalCategory.DAO, - totalValue: 0, - proposal: fip_98 - }, fip_82b: { deploy: false, // deploy flag for whether to run deploy action during e2e tests or use mainnet state totalValue: 0, // amount of ETH to send to DAO execution From 616c2077857e8cd3e6ce4f3558d9e72d039b92fa Mon Sep 17 00:00:00 2001 From: Caleb Date: Thu, 5 May 2022 02:50:53 -0700 Subject: [PATCH 059/121] circleci caching improvements --- .circleci/config.yml | 47 +++++++++++++++----------------------------- 1 file changed, 16 insertions(+), 31 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 516ed3156..bf46c6a76 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,6 +1,4 @@ version: 2.1 -orbs: - discord: antonioned/discord@0.1.0 jobs: build: @@ -10,37 +8,34 @@ jobs: resource_class: xlarge steps: - checkout - - run: - name: 'Update NPM' - command: sudo npm install -g npm@8.5.3 - - run: - name: 'Set caching variables' - command: | - LAST_SUCCESSFUL_BUILD_URL="https://circleci.com/api/v1.1/project/github/$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME/tree/master?filter=successful&limit=1" - LAST_SUCCESSFUL_COMMIT=`curl -Ss -u "$CIRCLE_TOKEN:" $LAST_SUCCESSFUL_BUILD_URL | jq -r '.[0]["vcs_revision"]'` - echo $LAST_SUCCESSFUL_COMMIT > /tmp/last-successful-commit - echo $CIRCLE_SHA1 > /tmp/current-commit - restore_cache: - keys: - - build-cache-{{ .Branch }}-{{ checksum "/tmp/last-successful-commit" }} + key: package-cache-{{ checksum "package-lock.json" }} - run: name: Install dependencies - command: npm install + command: npm ci + - save_cache: + key: package-cache-{{ checksum "package-lock.json" }} + paths: + - package-lock.json + - node_modules + - restore_cache: + key: solcache-{{ checksum "cache/solidity-files-cache.json" }} + paths: + - artifacts + - cache/solidity-files-cache.json - run: name: Compile contracts command: npm run compile:hardhat - save_cache: - key: repo-{{ .Environment.CIRCLE_SHA1 }} + key: solcache-{{ checksum "cache/solidity-files-cache.json" }} paths: - - ~/repo + - artifacts + - cache/solidity-files-cache.json lint: working_directory: ~/repo docker: - image: cimg/node:16.14 steps: - - restore_cache: - keys: - - repo-{{ .Environment.CIRCLE_SHA1 }} - run: name: Run linter command: npm run lint @@ -51,9 +46,6 @@ jobs: parallelism: 16 resource_class: large steps: - - restore_cache: - keys: - - repo-{{ .Environment.CIRCLE_SHA1 }} - run: name: Run tests command: | @@ -66,14 +58,7 @@ jobs: test-forge: working_directory: ~/repo - docker: - - image: cimg/node:16.14 - resource_class: xlarge - steps: - - checkout - - restore_cache: - keys: - - repo-{{ .Environment.CIRCLE_SHA1 }} + docker: - image: cimg/node:16.14 resource_class: xlarge steps: - checkout - restore_cache: keys: - repo-{{ .Environment.CIRCLE_SHA1 }} - run: name: Setup env command: echo "export PATH=$PATH:$(pwd)/.circleci" >> /home/circleci/.bashrc From 95148fdd484ec11135c0c037b2935cf7d3e62882 Mon Sep 17 00:00:00 2001 From: Caleb Ditchfield Date: Thu, 5 May 2022 02:54:56 -0700 Subject: [PATCH 060/121] Updated config.yml --- .circleci/config.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index bf46c6a76..0b207afc6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -58,7 +58,14 @@ jobs: test-forge: working_directory: ~/repo - docker: - image: cimg/node:16.14 resource_class: xlarge steps: - checkout - restore_cache: keys: - repo-{{ .Environment.CIRCLE_SHA1 }} + docker: + - image: cimg/node:16.14 + resource_class: xlarge + steps: + - checkout + - restore_cache: + keys: + - repo-{{ .Environment.CIRCLE_SHA1 }} - run: name: Setup env command: echo "export PATH=$PATH:$(pwd)/.circleci" >> /home/circleci/.bashrc From 10d7eab3017458b6252be1fad33f119b832ba7a3 Mon Sep 17 00:00:00 2001 From: Caleb Date: Thu, 5 May 2022 03:08:06 -0700 Subject: [PATCH 061/121] properly build --- .circleci/config.yml | 49 ++++++++++++++++++++++++++------------------ 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 0b207afc6..091a2eb62 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,13 +1,17 @@ version: 2.1 -jobs: - build: - working_directory: ~/repo +executors: + node-image: docker: - image: cimg/node:16.14 + working_directory: ~/repo resource_class: xlarge + +jobs: + build: + executor: node-image steps: - - checkout + - checkout - restore_cache: key: package-cache-{{ checksum "package-lock.json" }} - run: @@ -23,6 +27,7 @@ jobs: paths: - artifacts - cache/solidity-files-cache.json + - types/contracts - run: name: Compile contracts command: npm run compile:hardhat @@ -31,21 +36,27 @@ jobs: paths: - artifacts - cache/solidity-files-cache.json + - types/contracts + - persist_to_workspace: + root: ~/repo + paths: + - ./ lint: working_directory: ~/repo - docker: - - image: cimg/node:16.14 + executor: node-img steps: + - attach_workspace: + at: ./ - run: name: Run linter command: npm run lint test: working_directory: ~/repo - docker: - - image: cimg/node:16.14 + executor: node-img parallelism: 16 - resource_class: large steps: + - attach_workspace: + at: ./ - run: name: Run tests command: | @@ -58,10 +69,11 @@ jobs: test-forge: working_directory: ~/repo - docker: - - image: cimg/node:16.14 - resource_class: xlarge - steps: + executor: node-img + parallelism: 16 + steps: + - attach_workspace: + at: ./ - checkout - restore_cache: keys: @@ -83,14 +95,11 @@ jobs: e2e-test: working_directory: ~/repo - docker: - - image: cimg/node:16.14 - parallelism: 5 - resource_class: xlarge + executor: node-img + parallelism: 16 steps: - - restore_cache: - keys: - - repo-{{ .Environment.CIRCLE_SHA1 }} + - attach_workspace: + at: ./ - run: name: Run end-to-end tests command: | From e1dedfaed3fcd3a08510f751144c72163b73a550 Mon Sep 17 00:00:00 2001 From: Caleb Ditchfield Date: Thu, 5 May 2022 03:10:10 -0700 Subject: [PATCH 062/121] Updated config.yml --- .circleci/config.yml | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 091a2eb62..c481e7f1c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,7 +1,7 @@ version: 2.1 executors: - node-image: + nodeimage: docker: - image: cimg/node:16.14 working_directory: ~/repo @@ -9,7 +9,7 @@ executors: jobs: build: - executor: node-image + executor: nodeimage steps: - checkout - restore_cache: @@ -24,10 +24,6 @@ jobs: - node_modules - restore_cache: key: solcache-{{ checksum "cache/solidity-files-cache.json" }} - paths: - - artifacts - - cache/solidity-files-cache.json - - types/contracts - run: name: Compile contracts command: npm run compile:hardhat @@ -43,20 +39,20 @@ jobs: - ./ lint: working_directory: ~/repo - executor: node-img + executor: nodeimage steps: - attach_workspace: - at: ./ + at: ./ - run: name: Run linter command: npm run lint test: working_directory: ~/repo - executor: node-img + executor: nodeimage parallelism: 16 steps: - attach_workspace: - at: ./ + at: ./ - run: name: Run tests command: | @@ -69,7 +65,7 @@ jobs: test-forge: working_directory: ~/repo - executor: node-img + executor: nodeimage parallelism: 16 steps: - attach_workspace: @@ -95,7 +91,7 @@ jobs: e2e-test: working_directory: ~/repo - executor: node-img + executor: nodeimage parallelism: 16 steps: - attach_workspace: From df1ddb4e4ee0a95dfcf1581a282f086040622170 Mon Sep 17 00:00:00 2001 From: Caleb Date: Thu, 5 May 2022 03:14:40 -0700 Subject: [PATCH 063/121] add in the solidity files cache --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 191a5e729..97ab4e95d 100644 --- a/.gitignore +++ b/.gitignore @@ -9,7 +9,8 @@ coverage/ tenderly.yaml artifacts cache +!cache/solidity-files-cache.json types/contracts .eslintcache .xml -out \ No newline at end of file +out From 87af224147290e478d9ae49ee4770a4e6802a165 Mon Sep 17 00:00:00 2001 From: Caleb Date: Thu, 5 May 2022 03:15:53 -0700 Subject: [PATCH 064/121] fix .gitignore --- .gitignore | 3 +- cache/solidity-files-cache.json | 13931 ++++++++++++++++++++++++++++++ 2 files changed, 13932 insertions(+), 2 deletions(-) create mode 100644 cache/solidity-files-cache.json diff --git a/.gitignore b/.gitignore index 97ab4e95d..e121d2535 100644 --- a/.gitignore +++ b/.gitignore @@ -8,8 +8,7 @@ coverage.json coverage/ tenderly.yaml artifacts -cache -!cache/solidity-files-cache.json +cache/hardhat-network-fork types/contracts .eslintcache .xml diff --git a/cache/solidity-files-cache.json b/cache/solidity-files-cache.json new file mode 100644 index 000000000..03da8174f --- /dev/null +++ b/cache/solidity-files-cache.json @@ -0,0 +1,13931 @@ +{ + "_format": "hh-sol-cache-2", + "files": { + "/home/caleb/fei-protocol-core/contracts/Constants.sol": { + "lastModificationDate": 1651060617410, + "contentHash": "dc72118c07af9d44022a6f0f5bd24f42", + "sourceName": "contracts/Constants.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@uniswap/v2-periphery/contracts/interfaces/IWETH.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "Constants" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@uniswap/v2-periphery/contracts/interfaces/IWETH.sol": { + "lastModificationDate": 1650954663750, + "contentHash": "270f2c1a1f22475259d5a2f6a524f72e", + "sourceName": "@uniswap/v2-periphery/contracts/interfaces/IWETH.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + ">=0.5.0" + ], + "artifacts": [ + "IWETH" + ] + }, + "/home/caleb/fei-protocol-core/contracts/tribe/TribeMinter.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "ab349a7405159b6ccc52871d5c5afe25", + "sourceName": "contracts/tribe/TribeMinter.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./ITribeMinter.sol", + "../utils/RateLimited.sol", + "../Constants.sol", + "@openzeppelin/contracts/utils/math/Math.sol", + "@openzeppelin/contracts/access/Ownable.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "TribeMinter" + ] + }, + "/home/caleb/fei-protocol-core/contracts/tribe/ITribeMinter.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "b7905a6493f0baa9b33d93983fc04547", + "sourceName": "contracts/tribe/ITribeMinter.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/IERC20.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "ITribe", + "ITribeMinter" + ] + }, + "/home/caleb/fei-protocol-core/contracts/utils/RateLimited.sol": { + "lastModificationDate": 1651060617410, + "contentHash": "93017779d0e8264477127ec3e25b6bd0", + "sourceName": "contracts/utils/RateLimited.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../refs/CoreRef.sol", + "@openzeppelin/contracts/utils/math/Math.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "RateLimited" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/utils/math/Math.sol": { + "lastModificationDate": 1651119843910, + "contentHash": "339b9793dcbd7b5d55af725ef47de74c", + "sourceName": "@openzeppelin/contracts/utils/math/Math.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "Math" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/access/Ownable.sol": { + "lastModificationDate": 1651119843920, + "contentHash": "8398972af73b4e9e5ff3b31cad86234f", + "sourceName": "@openzeppelin/contracts/access/Ownable.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../utils/Context.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "Ownable" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { + "lastModificationDate": 1651119843750, + "contentHash": "ad7c2d0af148c8f9f097d65deeb4da6b", + "sourceName": "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IERC20" + ] + }, + "/home/caleb/fei-protocol-core/contracts/refs/CoreRef.sol": { + "lastModificationDate": 1651119315480, + "contentHash": "8c102f50cd75f1dfe43d81e53d66b2e2", + "sourceName": "contracts/refs/CoreRef.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./ICoreRef.sol", + "@openzeppelin/contracts/security/Pausable.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "CoreRef" + ] + }, + "/home/caleb/fei-protocol-core/contracts/refs/ICoreRef.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "81c785739026a222a63950dba35a7bbe", + "sourceName": "contracts/refs/ICoreRef.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../core/ICore.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "ICoreRef" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/security/Pausable.sol": { + "lastModificationDate": 1651119843930, + "contentHash": "9c2dccab8e3a43a18c41e358763fe4d8", + "sourceName": "@openzeppelin/contracts/security/Pausable.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../utils/Context.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "Pausable" + ] + }, + "/home/caleb/fei-protocol-core/contracts/core/ICore.sol": { + "lastModificationDate": 1643166535080, + "contentHash": "f15823d155445ea9dd4bdd25d302b14c", + "sourceName": "contracts/core/ICore.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IPermissions.sol", + "../fei/IFei.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "ICore" + ] + }, + "/home/caleb/fei-protocol-core/contracts/core/IPermissions.sol": { + "lastModificationDate": 1646115056090, + "contentHash": "a42042ac4ed6d8b2b4450ab1beadba8c", + "sourceName": "contracts/core/IPermissions.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/access/AccessControl.sol", + "./IPermissionsRead.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IPermissions" + ] + }, + "/home/caleb/fei-protocol-core/contracts/fei/IFei.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "2ec9d579772f0206fe29b19edc874cfe", + "sourceName": "contracts/fei/IFei.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/IERC20.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IFei" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/access/AccessControl.sol": { + "lastModificationDate": 1651119842740, + "contentHash": "08101487003fda67e21e6d2cfe35bb2e", + "sourceName": "@openzeppelin/contracts/access/AccessControl.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IAccessControl.sol", + "../utils/Context.sol", + "../utils/Strings.sol", + "../utils/introspection/ERC165.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "AccessControl" + ] + }, + "/home/caleb/fei-protocol-core/contracts/core/IPermissionsRead.sol": { + "lastModificationDate": 1646115056090, + "contentHash": "67ac44954e83b7eb4bc48726071151f6", + "sourceName": "contracts/core/IPermissionsRead.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IPermissionsRead" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/access/IAccessControl.sol": { + "lastModificationDate": 1651119843570, + "contentHash": "57c84298234411cea19c7c284d86be8b", + "sourceName": "@openzeppelin/contracts/access/IAccessControl.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IAccessControl" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/utils/Context.sol": { + "lastModificationDate": 1651119842870, + "contentHash": "5f2c5c4b6af2dd4551027144797bc8be", + "sourceName": "@openzeppelin/contracts/utils/Context.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "Context" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/utils/Strings.sol": { + "lastModificationDate": 1651119844020, + "contentHash": "9c54c6c065d9e590fdcdd72c451425b9", + "sourceName": "@openzeppelin/contracts/utils/Strings.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "Strings" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol": { + "lastModificationDate": 1651119843170, + "contentHash": "0e7db055ce108f9da7bb6686a00287c0", + "sourceName": "@openzeppelin/contracts/utils/introspection/ERC165.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IERC165.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "ERC165" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { + "lastModificationDate": 1651119843720, + "contentHash": "03e6768535ac4da0e9756f1d8a4a018a", + "sourceName": "@openzeppelin/contracts/utils/introspection/IERC165.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IERC165" + ] + }, + "/home/caleb/fei-protocol-core/contracts/timelocks/TimelockedDelegator.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "a298346e86014827243bd06241afbfb1", + "sourceName": "contracts/timelocks/TimelockedDelegator.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/access/Ownable.sol", + "./ITimelockedDelegator.sol", + "./LinearTokenTimelock.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "Delegatee", + "TimelockedDelegator" + ] + }, + "/home/caleb/fei-protocol-core/contracts/timelocks/ITimelockedDelegator.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "a74b076f1b6f87ede9db5866399fb965", + "sourceName": "contracts/timelocks/ITimelockedDelegator.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "../fei/IFei.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "ITimelockedDelegator", + "ITribe" + ] + }, + "/home/caleb/fei-protocol-core/contracts/timelocks/LinearTokenTimelock.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "1c423a365056dbd4dc46d9d77e100922", + "sourceName": "contracts/timelocks/LinearTokenTimelock.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./TokenTimelock.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "LinearTokenTimelock" + ] + }, + "/home/caleb/fei-protocol-core/contracts/timelocks/TokenTimelock.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "c30b2d816080a53225e7eeaac6b8fadd", + "sourceName": "contracts/timelocks/TokenTimelock.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../utils/Timed.sol", + "./ITokenTimelock.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "TokenTimelock" + ] + }, + "/home/caleb/fei-protocol-core/contracts/utils/Timed.sol": { + "lastModificationDate": 1646115056100, + "contentHash": "d15b08a72dc46a3a93f9973edafc5729", + "sourceName": "contracts/utils/Timed.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "Timed" + ] + }, + "/home/caleb/fei-protocol-core/contracts/timelocks/ITokenTimelock.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "a7276c867af9da16059cb974aea2865b", + "sourceName": "contracts/timelocks/ITokenTimelock.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/IERC20.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "ITokenTimelock" + ] + }, + "/home/caleb/fei-protocol-core/contracts/timelocks/QuadraticTokenTimelock.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "8389ae542098eb73b47aa357957a37bc", + "sourceName": "contracts/timelocks/QuadraticTokenTimelock.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./TokenTimelock.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "QuadraticTokenTimelock" + ] + }, + "/home/caleb/fei-protocol-core/contracts/timelocks/QuadraticTimelockedSubdelegator.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "9dcd61f1aa55f96c4b8669f0651e2214", + "sourceName": "contracts/timelocks/QuadraticTimelockedSubdelegator.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/access/Ownable.sol", + "./ITimelockedDelegator.sol", + "./QuadraticTokenTimelock.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "Delegatee", + "QuadtraticTimelockedSubdelegator" + ] + }, + "/home/caleb/fei-protocol-core/contracts/test/unit/Fei.t.sol": { + "lastModificationDate": 1651119315500, + "contentHash": "c45de6b4102572580216108108eeb0ce", + "sourceName": "contracts/test/unit/Fei.t.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "../../fei/IFei.sol", + "../../fei/Fei.sol", + "../../core/ICore.sol", + "../../core/Core.sol", + "../utils/Vm.sol", + "../utils/DSTest.sol", + "../utils/Fixtures.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "FeiTest" + ] + }, + "/home/caleb/fei-protocol-core/contracts/fei/Fei.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "c996e65691236d6db00db78bd66b2072", + "sourceName": "contracts/fei/Fei.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol", + "./IIncentive.sol", + "../refs/CoreRef.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "Fei" + ] + }, + "/home/caleb/fei-protocol-core/contracts/core/Core.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "5290f3850051e3ae01c55c1d06efa645", + "sourceName": "contracts/core/Core.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/proxy/utils/Initializable.sol", + "./Permissions.sol", + "./ICore.sol", + "../fei/Fei.sol", + "../tribe/Tribe.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "Core" + ] + }, + "/home/caleb/fei-protocol-core/contracts/test/utils/Vm.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "111469f30ba587b11c2d58fc6fe0709b", + "sourceName": "contracts/test/utils/Vm.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "Vm" + ] + }, + "/home/caleb/fei-protocol-core/contracts/test/utils/DSTest.sol": { + "lastModificationDate": 1651060617410, + "contentHash": "4beb4825e39f21061d27f31bae54e973", + "sourceName": "contracts/test/utils/DSTest.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../utils/Deviation.sol" + ], + "versionPragmas": [ + ">=0.4.23" + ], + "artifacts": [ + "DSTest" + ] + }, + "/home/caleb/fei-protocol-core/contracts/test/utils/Fixtures.sol": { + "lastModificationDate": 1651119315480, + "contentHash": "600411255ddc192aa9bea1cabad137c3", + "sourceName": "contracts/test/utils/Fixtures.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../core/Core.sol", + "./Vm.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "DummyStorage" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol": { + "lastModificationDate": 1651119843240, + "contentHash": "a1c7f80ae26f5b2d7d563475627fbf25", + "sourceName": "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../ERC20.sol", + "../../../utils/Context.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "ERC20Burnable" + ] + }, + "/home/caleb/fei-protocol-core/contracts/fei/IIncentive.sol": { + "lastModificationDate": 1643166535080, + "contentHash": "d7def660d936191ef6c9eae84c9ecaec", + "sourceName": "contracts/fei/IIncentive.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IIncentive" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol": { + "lastModificationDate": 1651119843240, + "contentHash": "a9d2146925da52142435d3bb8df53c3c", + "sourceName": "@openzeppelin/contracts/token/ERC20/ERC20.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IERC20.sol", + "./extensions/IERC20Metadata.sol", + "../../utils/Context.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "ERC20" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": { + "lastModificationDate": 1651119843750, + "contentHash": "909ab67fc5c25033fe6cd364f8c056f9", + "sourceName": "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../IERC20.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IERC20Metadata" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/proxy/utils/Initializable.sol": { + "lastModificationDate": 1651119843870, + "contentHash": "f0c92df5bfd98a90d0eda04719bafda5", + "sourceName": "@openzeppelin/contracts/proxy/utils/Initializable.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../utils/Address.sol" + ], + "versionPragmas": [ + "^0.8.2" + ], + "artifacts": [ + "Initializable" + ] + }, + "/home/caleb/fei-protocol-core/contracts/core/Permissions.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "9924619bc76a9be77da22c68c96c52c2", + "sourceName": "contracts/core/Permissions.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/access/AccessControlEnumerable.sol", + "./IPermissions.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "Permissions" + ] + }, + "/home/caleb/fei-protocol-core/contracts/tribe/Tribe.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "d05ec7df12e225252d7c5b5e7816b707", + "sourceName": "contracts/tribe/Tribe.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "Tribe" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/utils/Address.sol": { + "lastModificationDate": 1651119842770, + "contentHash": "ad714a6368ee7d43cded6bbe8af0b155", + "sourceName": "@openzeppelin/contracts/utils/Address.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.1" + ], + "artifacts": [ + "Address" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/access/AccessControlEnumerable.sol": { + "lastModificationDate": 1651119842750, + "contentHash": "b6d9b165dc57e9ad8153bdca05c783a4", + "sourceName": "@openzeppelin/contracts/access/AccessControlEnumerable.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IAccessControlEnumerable.sol", + "./AccessControl.sol", + "../utils/structs/EnumerableSet.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "AccessControlEnumerable" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/access/IAccessControlEnumerable.sol": { + "lastModificationDate": 1651119843580, + "contentHash": "4e71cc90682e109e999ce2bd329f6572", + "sourceName": "@openzeppelin/contracts/access/IAccessControlEnumerable.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IAccessControl.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IAccessControlEnumerable" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol": { + "lastModificationDate": 1651119843040, + "contentHash": "ee7890ed6993382898aeeed014cffab8", + "sourceName": "@openzeppelin/contracts/utils/structs/EnumerableSet.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "EnumerableSet" + ] + }, + "/home/caleb/fei-protocol-core/contracts/utils/Deviation.sol": { + "lastModificationDate": 1651060617410, + "contentHash": "d077d44afc92da26d5541629ab320e61", + "sourceName": "contracts/utils/Deviation.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./../Constants.sol", + "@openzeppelin/contracts/utils/math/SafeCast.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "Deviation" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": { + "lastModificationDate": 1651119843970, + "contentHash": "cd91252bfcbee6eaba8f5144f504583c", + "sourceName": "@openzeppelin/contracts/utils/math/SafeCast.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "SafeCast" + ] + }, + "/home/caleb/fei-protocol-core/contracts/test/unit/NonCustodialPSM.t.sol": { + "lastModificationDate": 1651119290200, + "contentHash": "9e5e7987fe7ae9f56f14dc91a149f2aa", + "sourceName": "contracts/test/unit/NonCustodialPSM.t.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/ERC20.sol", + "@openzeppelin/contracts/utils/math/SafeCast.sol", + "../../mock/MockPCVDepositV2.sol", + "../../pcv/IPCVDeposit.sol", + "../../mock/MockERC20.sol", + "../../core/ICore.sol", + "../../oracle/ConstantOracle.sol", + "../../core/Core.sol", + "../../fei/Fei.sol", + "../../peg/NonCustodialPSM.sol", + "./../utils/Vm.sol", + "./../utils/DSTest.sol", + "./../utils/Fixtures.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "NonCustodialPSMTest" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockPCVDepositV2.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "f1f122e09db05e1c523b062e4af662a4", + "sourceName": "contracts/mock/MockPCVDepositV2.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../refs/CoreRef.sol", + "../pcv/IPCVDeposit.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockPCVDepositV2" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/IPCVDeposit.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "35c94152a5c8f4cc33114251574d4d21", + "sourceName": "contracts/pcv/IPCVDeposit.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IPCVDepositBalances.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IPCVDeposit" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockERC20.sol": { + "lastModificationDate": 1646115056090, + "contentHash": "45dc5b316181d9fda92445b5781d7844", + "sourceName": "contracts/mock/MockERC20.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol", + "@openzeppelin/contracts/token/ERC20/ERC20.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockERC20" + ] + }, + "/home/caleb/fei-protocol-core/contracts/oracle/ConstantOracle.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "2a767c72d5b06797124db5a35d131169", + "sourceName": "contracts/oracle/ConstantOracle.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IOracle.sol", + "../refs/CoreRef.sol", + "../Constants.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "ConstantOracle" + ] + }, + "/home/caleb/fei-protocol-core/contracts/peg/NonCustodialPSM.sol": { + "lastModificationDate": 1651060617410, + "contentHash": "416f1b33858261f89f96cd03755a4cec", + "sourceName": "contracts/peg/NonCustodialPSM.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../external/Decimal.sol", + "../Constants.sol", + "./../refs/OracleRef.sol", + "./../core/TribeRoles.sol", + "./../utils/RateLimited.sol", + "./../pcv/PCVDeposit.sol", + "./INonCustodialPSM.sol", + "./../utils/GlobalRateLimitedMinter.sol", + "@openzeppelin/contracts/utils/math/Math.sol", + "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "@openzeppelin/contracts/utils/math/SafeCast.sol", + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", + "@openzeppelin/contracts/security/ReentrancyGuard.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "NonCustodialPSM" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/IPCVDepositBalances.sol": { + "lastModificationDate": 1646115056100, + "contentHash": "6437ddda65cc0f9d00c300cae1f12282", + "sourceName": "contracts/pcv/IPCVDepositBalances.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IPCVDepositBalances" + ] + }, + "/home/caleb/fei-protocol-core/contracts/oracle/IOracle.sol": { + "lastModificationDate": 1646115056100, + "contentHash": "b49826b512a072f62714f469ead33be5", + "sourceName": "contracts/oracle/IOracle.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../external/Decimal.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IOracle" + ] + }, + "/home/caleb/fei-protocol-core/contracts/external/Decimal.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "f1273c8a4f46c32f88bc8275d8c6943f", + "sourceName": "contracts/external/Decimal.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/utils/math/SafeMath.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "Decimal" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/utils/math/SafeMath.sol": { + "lastModificationDate": 1651119843990, + "contentHash": "2337f0279507b5edf14a07067adf0d05", + "sourceName": "@openzeppelin/contracts/utils/math/SafeMath.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "SafeMath" + ] + }, + "/home/caleb/fei-protocol-core/contracts/refs/OracleRef.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "2eaf5c78b8a5a26d728b4a69929a4360", + "sourceName": "contracts/refs/OracleRef.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IOracleRef.sol", + "./CoreRef.sol", + "@openzeppelin/contracts/utils/math/SafeCast.sol", + "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "OracleRef" + ] + }, + "/home/caleb/fei-protocol-core/contracts/core/TribeRoles.sol": { + "lastModificationDate": 1651119315480, + "contentHash": "61c6dad7bbb084bfb888a01a9a7660c1", + "sourceName": "contracts/core/TribeRoles.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "TribeRoles" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/PCVDeposit.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "a1dd68be8841b6a67478b4b2eb5d616d", + "sourceName": "contracts/pcv/PCVDeposit.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../refs/CoreRef.sol", + "./IPCVDeposit.sol", + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "PCVDeposit" + ] + }, + "/home/caleb/fei-protocol-core/contracts/peg/INonCustodialPSM.sol": { + "lastModificationDate": 1651060617410, + "contentHash": "aba53704305659abe65d0f77b1c972e2", + "sourceName": "contracts/peg/INonCustodialPSM.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "../pcv/IPCVDeposit.sol", + "../utils/GlobalRateLimitedMinter.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "INonCustodialPSM" + ] + }, + "/home/caleb/fei-protocol-core/contracts/utils/GlobalRateLimitedMinter.sol": { + "lastModificationDate": 1651060617410, + "contentHash": "076e03fcc1ab67d45cec0039b4b3fa60", + "sourceName": "contracts/utils/GlobalRateLimitedMinter.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./MultiRateLimited.sol", + "./IGlobalRateLimitedMinter.sol", + "./../refs/CoreRef.sol", + "@openzeppelin/contracts/utils/math/Math.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "GlobalRateLimitedMinter" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { + "lastModificationDate": 1651119843990, + "contentHash": "76814c83c32552ed2b521c816b4d801a", + "sourceName": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../IERC20.sol", + "../../../utils/Address.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "SafeERC20" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/security/ReentrancyGuard.sol": { + "lastModificationDate": 1651119843960, + "contentHash": "92f9448b23a90ea3bb932ee55cc3ccce", + "sourceName": "@openzeppelin/contracts/security/ReentrancyGuard.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "ReentrancyGuard" + ] + }, + "/home/caleb/fei-protocol-core/contracts/refs/IOracleRef.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "c9ebc7fe787db6315b5d815f5cc5a78e", + "sourceName": "contracts/refs/IOracleRef.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../oracle/IOracle.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IOracleRef" + ] + }, + "/home/caleb/fei-protocol-core/contracts/utils/MultiRateLimited.sol": { + "lastModificationDate": 1651060617410, + "contentHash": "e716ef5854017556a03e36e5d6b15cf8", + "sourceName": "contracts/utils/MultiRateLimited.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../refs/CoreRef.sol", + "./../core/TribeRoles.sol", + "./RateLimited.sol", + "./IMultiRateLimited.sol", + "@openzeppelin/contracts/utils/math/Math.sol", + "@openzeppelin/contracts/utils/math/SafeCast.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MultiRateLimited" + ] + }, + "/home/caleb/fei-protocol-core/contracts/utils/IGlobalRateLimitedMinter.sol": { + "lastModificationDate": 1651060617410, + "contentHash": "11eae3af65a80a0381428a71edcde945", + "sourceName": "contracts/utils/IGlobalRateLimitedMinter.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IMultiRateLimited.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IGlobalRateLimitedMinter" + ] + }, + "/home/caleb/fei-protocol-core/contracts/utils/IMultiRateLimited.sol": { + "lastModificationDate": 1651060617410, + "contentHash": "8b526da918254ff4285a8bae3fbc836b", + "sourceName": "contracts/utils/IMultiRateLimited.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IMultiRateLimited" + ] + }, + "/home/caleb/fei-protocol-core/contracts/test/unit/governance/PodExecutor.t.sol": { + "lastModificationDate": 1651119315480, + "contentHash": "030312bc27cbd2f808b9f88807cb9c99", + "sourceName": "contracts/test/unit/governance/PodExecutor.t.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../utils/DSTest.sol", + "../../utils/Vm.sol", + "../../utils/Fixtures.sol", + "../../../pods/PodExecutor.sol", + "../../../core/TribeRoles.sol", + "../../../core/Core.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "PodExecutorTest" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pods/PodExecutor.sol": { + "lastModificationDate": 1651119315480, + "contentHash": "1ab8c6396ede9e5beb62c69b560ffd69", + "sourceName": "contracts/pods/PodExecutor.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../dao/timelock/ITimelock.sol", + "../refs/CoreRef.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "PodExecutor" + ] + }, + "/home/caleb/fei-protocol-core/contracts/dao/timelock/ITimelock.sol": { + "lastModificationDate": 1651119315480, + "contentHash": "c9384352f04382f5b416b26a0b2092c4", + "sourceName": "contracts/dao/timelock/ITimelock.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "ITimelock" + ] + }, + "/home/caleb/fei-protocol-core/contracts/test/unit/governance/NopeDAO.t.sol": { + "lastModificationDate": 1651119315480, + "contentHash": "ebbe3c3514d8cd8303eee14790e86be8", + "sourceName": "contracts/test/unit/governance/NopeDAO.t.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "@openzeppelin/contracts/token/ERC20/extensions/ERC20VotesComp.sol", + "../../../core/Core.sol", + "../../utils/Vm.sol", + "../../utils/DSTest.sol", + "../../../dao/nopeDAO/NopeDAO.sol", + "../../utils/Fixtures.sol", + "../../../tribe/Tribe.sol", + "../../../core/TribeRoles.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "NopeDAOTest" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20VotesComp.sol": { + "lastModificationDate": 1651119843320, + "contentHash": "85de097d4da905cf320e89d73840291a", + "sourceName": "@openzeppelin/contracts/token/ERC20/extensions/ERC20VotesComp.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./ERC20Votes.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "ERC20VotesComp" + ] + }, + "/home/caleb/fei-protocol-core/contracts/dao/nopeDAO/NopeDAO.sol": { + "lastModificationDate": 1651119315480, + "contentHash": "6199e223bf5d5affa816ea891adb4d86", + "sourceName": "contracts/dao/nopeDAO/NopeDAO.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/governance/Governor.sol", + "@openzeppelin/contracts/governance/extensions/GovernorSettings.sol", + "@openzeppelin/contracts/governance/extensions/GovernorVotesComp.sol", + "@openzeppelin/contracts/governance/extensions/GovernorCountingSimple.sol", + "@openzeppelin/contracts/token/ERC20/extensions/ERC20VotesComp.sol", + "../../refs/CoreRef.sol", + "../../core/TribeRoles.sol", + "./GovernorQuickReaction.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "NopeDAO" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol": { + "lastModificationDate": 1651119843310, + "contentHash": "d750921452f3bf2ab170f55cf4f5dc71", + "sourceName": "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./draft-ERC20Permit.sol", + "../../../utils/math/Math.sol", + "../../../governance/utils/IVotes.sol", + "../../../utils/math/SafeCast.sol", + "../../../utils/cryptography/ECDSA.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "ERC20Votes" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol": { + "lastModificationDate": 1651119842980, + "contentHash": "3c98f8ccc741d97ece615ce32d638d4c", + "sourceName": "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./draft-IERC20Permit.sol", + "../ERC20.sol", + "../../../utils/cryptography/draft-EIP712.sol", + "../../../utils/cryptography/ECDSA.sol", + "../../../utils/Counters.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "ERC20Permit" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/governance/utils/IVotes.sol": { + "lastModificationDate": 1651119843880, + "contentHash": "a036d40989f21d08bb990e68d0088fa1", + "sourceName": "@openzeppelin/contracts/governance/utils/IVotes.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IVotes" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol": { + "lastModificationDate": 1651119843030, + "contentHash": "482bcc512029ecf51ca4ae85cf4667c7", + "sourceName": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../Strings.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "ECDSA" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol": { + "lastModificationDate": 1651119843020, + "contentHash": "fb77f144244b9ab12533aa6ce85ef8c5", + "sourceName": "@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IERC20Permit" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/utils/cryptography/draft-EIP712.sol": { + "lastModificationDate": 1651119842960, + "contentHash": "161aae4dc1450371d0f324488f66a9cf", + "sourceName": "@openzeppelin/contracts/utils/cryptography/draft-EIP712.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./ECDSA.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "EIP712" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/utils/Counters.sol": { + "lastModificationDate": 1651119842870, + "contentHash": "74654e3ae5d7f39555055dfe244dab7a", + "sourceName": "@openzeppelin/contracts/utils/Counters.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "Counters" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/governance/Governor.sol": { + "lastModificationDate": 1651119843500, + "contentHash": "3b010e281b1e40085e4e028370fce27e", + "sourceName": "@openzeppelin/contracts/governance/Governor.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../token/ERC721/IERC721Receiver.sol", + "../token/ERC1155/IERC1155Receiver.sol", + "../utils/cryptography/ECDSA.sol", + "../utils/cryptography/draft-EIP712.sol", + "../utils/introspection/ERC165.sol", + "../utils/math/SafeCast.sol", + "../utils/structs/DoubleEndedQueue.sol", + "../utils/Address.sol", + "../utils/Context.sol", + "../utils/Timers.sol", + "./IGovernor.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "Governor" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/governance/extensions/GovernorSettings.sol": { + "lastModificationDate": 1651119843540, + "contentHash": "2c6e87fa9b63c7ef8579eb4ae937d4c2", + "sourceName": "@openzeppelin/contracts/governance/extensions/GovernorSettings.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../Governor.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "GovernorSettings" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/governance/extensions/GovernorVotesComp.sol": { + "lastModificationDate": 1651119843570, + "contentHash": "b5275e42abd62e4780bd73bc69492d33", + "sourceName": "@openzeppelin/contracts/governance/extensions/GovernorVotesComp.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../Governor.sol", + "../../token/ERC20/extensions/ERC20VotesComp.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "GovernorVotesComp" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/governance/extensions/GovernorCountingSimple.sol": { + "lastModificationDate": 1651119843530, + "contentHash": "02b1526768c0ab245c630eb5a6b160fc", + "sourceName": "@openzeppelin/contracts/governance/extensions/GovernorCountingSimple.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../Governor.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "GovernorCountingSimple" + ] + }, + "/home/caleb/fei-protocol-core/contracts/dao/nopeDAO/GovernorQuickReaction.sol": { + "lastModificationDate": 1651119315480, + "contentHash": "443d64ee874f19a9c61c6f4e111ded17", + "sourceName": "contracts/dao/nopeDAO/GovernorQuickReaction.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/governance/Governor.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "GovernorQuickReaction" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol": { + "lastModificationDate": 1651119843800, + "contentHash": "c22d4395e33763de693fd440c6fd10e1", + "sourceName": "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IERC721Receiver" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol": { + "lastModificationDate": 1651119843680, + "contentHash": "9f8822b72fe2702979e40160cb6d9636", + "sourceName": "@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../utils/introspection/IERC165.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IERC1155Receiver" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol": { + "lastModificationDate": 1651119842950, + "contentHash": "1252685551a5afdb6005499e0f549eff", + "sourceName": "@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../math/SafeCast.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "DoubleEndedQueue" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/utils/Timers.sol": { + "lastModificationDate": 1651119844030, + "contentHash": "ae135102abee8b2fc88eed09a40cdb4c", + "sourceName": "@openzeppelin/contracts/utils/Timers.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "Timers" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/governance/IGovernor.sol": { + "lastModificationDate": 1651119843850, + "contentHash": "78a871d820f3a4ae7ba2fe1604eae259", + "sourceName": "@openzeppelin/contracts/governance/IGovernor.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../utils/introspection/ERC165.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IGovernor" + ] + }, + "/home/caleb/fei-protocol-core/contracts/test/integration/governance/RoleBastion.t.sol": { + "lastModificationDate": 1651119315480, + "contentHash": "cad320e749896cfaaba91d8c77e46c51", + "sourceName": "contracts/test/integration/governance/RoleBastion.t.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../utils/DSTest.sol", + "../../utils/Vm.sol", + "../../utils/Fixtures.sol", + "../../../pods/RoleBastion.sol", + "../../../core/TribeRoles.sol", + "../../../core/Core.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "RoleBastionIntegrationTest" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pods/RoleBastion.sol": { + "lastModificationDate": 1651119315480, + "contentHash": "86e4a1a68d46d3b8d29af2ca09987525", + "sourceName": "contracts/pods/RoleBastion.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../core/TribeRoles.sol", + "../refs/CoreRef.sol", + "../core/Core.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "RoleBastion" + ] + }, + "/home/caleb/fei-protocol-core/contracts/sentinel/PCVSentinel.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "cc8bcb767d9e85be052de64c3ce0e008", + "sourceName": "contracts/sentinel/PCVSentinel.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/utils/Address.sol", + "@openzeppelin/contracts/utils/structs/EnumerableSet.sol", + "@rari-capital/solmate/src/utils/ReentrancyGuard.sol", + "../core/TribeRoles.sol", + "../refs/CoreRef.sol", + "../pcv/IPCVDeposit.sol", + "./IPCVSentinel.sol", + "./IGuard.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "PCVSentinel" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@rari-capital/solmate/src/utils/ReentrancyGuard.sol": { + "lastModificationDate": 1650954652950, + "contentHash": "20c95a044023884e7c4855c0d82e57f9", + "sourceName": "@rari-capital/solmate/src/utils/ReentrancyGuard.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + ">=0.8.0" + ], + "artifacts": [ + "ReentrancyGuard" + ] + }, + "/home/caleb/fei-protocol-core/contracts/sentinel/IPCVSentinel.sol": { + "lastModificationDate": 1650947999800, + "contentHash": "475ee2a583383e39e26784f38146f555", + "sourceName": "contracts/sentinel/IPCVSentinel.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IPCVSentinel" + ] + }, + "/home/caleb/fei-protocol-core/contracts/sentinel/IGuard.sol": { + "lastModificationDate": 1650947999800, + "contentHash": "5f028922dd117c59c0e53e6ab6740ff6", + "sourceName": "contracts/sentinel/IGuard.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IGuard" + ] + }, + "/home/caleb/fei-protocol-core/contracts/sentinel/guards/psmLiquidityGuard.sol": { + "lastModificationDate": 1650947999800, + "contentHash": "f10e471fe56a7f477c57ce29504bd8e5", + "sourceName": "contracts/sentinel/guards/psmLiquidityGuard.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../IGuard.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "PSMLiquidityGuard" + ] + }, + "/home/caleb/fei-protocol-core/contracts/sentinel/guards/fuseOracleLiquididtyGuard.sol": { + "lastModificationDate": 1650947999800, + "contentHash": "261f1d8c35f4e3733da227816ed0119d", + "sourceName": "contracts/sentinel/guards/fuseOracleLiquididtyGuard.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../IGuard.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "FuseOracleLiquidityGuard" + ] + }, + "/home/caleb/fei-protocol-core/contracts/sentinel/guards/examples/ReEntrancyGuard.sol": { + "lastModificationDate": 1650947999800, + "contentHash": "33d89795f9ec06cb51fe679b9ed6fef5", + "sourceName": "contracts/sentinel/guards/examples/ReEntrancyGuard.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../IGuard.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "ReEntrancyGuard" + ] + }, + "/home/caleb/fei-protocol-core/contracts/sentinel/guards/examples/RecoverEthGuard.sol": { + "lastModificationDate": 1650947999800, + "contentHash": "c666f5516962a4bfeb6a05d9ceebef24", + "sourceName": "contracts/sentinel/guards/examples/RecoverEthGuard.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../IGuard.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "RecoverEthGuard" + ] + }, + "/home/caleb/fei-protocol-core/contracts/sentinel/guards/examples/NoOpGuard.sol": { + "lastModificationDate": 1650947999800, + "contentHash": "4ce15c3d1f5eb7a01aabf25ea87afc55", + "sourceName": "contracts/sentinel/guards/examples/NoOpGuard.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../IGuard.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "NoOpGuard" + ] + }, + "/home/caleb/fei-protocol-core/contracts/sentinel/guards/examples/MultiActionGuard.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "52544a5d4d46072c72621a890e622432", + "sourceName": "contracts/sentinel/guards/examples/MultiActionGuard.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../IGuard.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MultiActionGuard" + ] + }, + "/home/caleb/fei-protocol-core/contracts/sentinel/guards/examples/BalanceGuard.sol": { + "lastModificationDate": 1650947999800, + "contentHash": "d61fc7711d51d4d807a8ca38e1ea2042", + "sourceName": "contracts/sentinel/guards/examples/BalanceGuard.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../IGuard.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "BalanceGuard" + ] + }, + "/home/caleb/fei-protocol-core/contracts/peg/PegStabilityModule.sol": { + "lastModificationDate": 1651060617410, + "contentHash": "37bb502c41dad0a9ab9be9e9185cd6a8", + "sourceName": "contracts/peg/PegStabilityModule.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./../pcv/PCVDeposit.sol", + "./../fei/minter/RateLimitedMinter.sol", + "./IPegStabilityModule.sol", + "./../refs/OracleRef.sol", + "../Constants.sol", + "@openzeppelin/contracts/security/ReentrancyGuard.sol", + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "PegStabilityModule" + ] + }, + "/home/caleb/fei-protocol-core/contracts/fei/minter/RateLimitedMinter.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "30a7cde67c996031b7634cf93ac383f0", + "sourceName": "contracts/fei/minter/RateLimitedMinter.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../utils/RateLimited.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "RateLimitedMinter" + ] + }, + "/home/caleb/fei-protocol-core/contracts/peg/IPegStabilityModule.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "a0e8eba73826d9761909ad26049a660c", + "sourceName": "contracts/peg/IPegStabilityModule.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "../pcv/IPCVDeposit.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IPegStabilityModule" + ] + }, + "/home/caleb/fei-protocol-core/contracts/peg/PSMRouter.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "09a2937f895bbd0c2a64e2ad0817c3a0", + "sourceName": "contracts/peg/PSMRouter.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IPSMRouter.sol", + "./PegStabilityModule.sol", + "../Constants.sol", + "../utils/RateLimited.sol", + "../pcv/IPCVDepositBalances.sol", + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "PSMRouter" + ] + }, + "/home/caleb/fei-protocol-core/contracts/peg/IPSMRouter.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "f7bcc7e8eadb7f599cb4eda9d4fbd96f", + "sourceName": "contracts/peg/IPSMRouter.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IPegStabilityModule.sol", + "../fei/IFei.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IPSMRouter" + ] + }, + "/home/caleb/fei-protocol-core/contracts/utils/OtcEscrow.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "b1ad1500a668b7abfd6a6bb62c3af77a", + "sourceName": "contracts/utils/OtcEscrow.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "OtcEscrow" + ] + }, + "/home/caleb/fei-protocol-core/contracts/tribe/stabilizer/TribeReserveStabilizer.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "bbb5b68ea9d851dee623bdf53f8ca5e7", + "sourceName": "contracts/tribe/stabilizer/TribeReserveStabilizer.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./ReserveStabilizer.sol", + "./ITribeReserveStabilizer.sol", + "../../tribe/ITribeMinter.sol", + "../../utils/Timed.sol", + "@openzeppelin/contracts/utils/math/Math.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "TribeReserveStabilizer" + ] + }, + "/home/caleb/fei-protocol-core/contracts/tribe/stabilizer/ReserveStabilizer.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "5b5bf8b77b9b6822648cbf8bd11799f5", + "sourceName": "contracts/tribe/stabilizer/ReserveStabilizer.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IReserveStabilizer.sol", + "../../pcv/PCVDeposit.sol", + "../../refs/OracleRef.sol", + "../../Constants.sol", + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "ReserveStabilizer" + ] + }, + "/home/caleb/fei-protocol-core/contracts/tribe/stabilizer/ITribeReserveStabilizer.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "314d9b64a0aa9db9c822fa10b57f55bc", + "sourceName": "contracts/tribe/stabilizer/ITribeReserveStabilizer.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../oracle/collateralization/ICollateralizationOracle.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "ITribeReserveStabilizer" + ] + }, + "/home/caleb/fei-protocol-core/contracts/tribe/stabilizer/IReserveStabilizer.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "42a5118152f5fc5d0e1fccd603bad93e", + "sourceName": "contracts/tribe/stabilizer/IReserveStabilizer.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IReserveStabilizer" + ] + }, + "/home/caleb/fei-protocol-core/contracts/oracle/collateralization/ICollateralizationOracle.sol": { + "lastModificationDate": 1646115056100, + "contentHash": "248e20d377de62dbdbe1a4f83227b59d", + "sourceName": "contracts/oracle/collateralization/ICollateralizationOracle.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../IOracle.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "ICollateralizationOracle" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/liquity/BAMMDeposit.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "15b647398f1a1262778a873244d3f9f0", + "sourceName": "contracts/pcv/liquity/BAMMDeposit.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../PCVDeposit.sol", + "./IBAMM.sol", + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", + "@openzeppelin/contracts/utils/math/Math.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "BAMMDeposit" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/liquity/IBAMM.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "04c8f7606c243fc641301bd80300b2ec", + "sourceName": "contracts/pcv/liquity/IBAMM.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", + "./IStabilityPool.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IBAMM" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/liquity/IStabilityPool.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "aa727e6bc909dcab6cc8043e783fbf6e", + "sourceName": "contracts/pcv/liquity/IStabilityPool.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IStabilityPool" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/balancer/BalancerLBPSwapper.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "acda2cd8e517a16560d181c6f96b34c2", + "sourceName": "contracts/pcv/balancer/BalancerLBPSwapper.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./manager/WeightedBalancerPoolManager.sol", + "./IVault.sol", + "../../utils/Timed.sol", + "../../refs/OracleRef.sol", + "../IPCVSwapper.sol", + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "BalancerLBPSwapper" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/balancer/manager/WeightedBalancerPoolManager.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "6dbb2e28c1cd214d42bedf2c5b9f966d", + "sourceName": "contracts/pcv/balancer/manager/WeightedBalancerPoolManager.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IWeightedBalancerPoolManager.sol", + "./BaseBalancerPoolManager.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "WeightedBalancerPoolManager" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/balancer/IVault.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "b7f5a38a94906340468dfc236bf66aab", + "sourceName": "contracts/pcv/balancer/IVault.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/IERC20.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IAsset", + "IVault" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/IPCVSwapper.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "ab5349d3676d4017fe2c6a3a9fd2f332", + "sourceName": "contracts/pcv/IPCVSwapper.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IPCVSwapper" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/balancer/manager/IWeightedBalancerPoolManager.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "0ea37a21692b7e7d5014029fd490e489", + "sourceName": "contracts/pcv/balancer/manager/IWeightedBalancerPoolManager.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../IWeightedPool.sol", + "./IBaseBalancerPoolManager.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IWeightedBalancerPoolManager" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/balancer/manager/BaseBalancerPoolManager.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "5ca2a36a12b7277f9d8fc711c3949f65", + "sourceName": "contracts/pcv/balancer/manager/BaseBalancerPoolManager.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../../refs/CoreRef.sol", + "./IBaseBalancerPoolManager.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "BaseBalancerPoolManager" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/balancer/IWeightedPool.sol": { + "lastModificationDate": 1646115056100, + "contentHash": "ec67f749fd36a80c226405676eb89a98", + "sourceName": "contracts/pcv/balancer/IWeightedPool.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IBasePool.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IWeightedPool" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/balancer/manager/IBaseBalancerPoolManager.sol": { + "lastModificationDate": 1646115056100, + "contentHash": "225d1bb1ddfc9e3c4b326af12c9ce4d8", + "sourceName": "contracts/pcv/balancer/manager/IBaseBalancerPoolManager.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../IBasePool.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IBaseBalancerPoolManager" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/balancer/IBasePool.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "78df90466e11a3253c54a824df8062fc", + "sourceName": "contracts/pcv/balancer/IBasePool.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IAssetManager.sol", + "./IVault.sol", + "@openzeppelin/contracts/token/ERC20/IERC20.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IBasePool" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/balancer/IAssetManager.sol": { + "lastModificationDate": 1632368757905, + "contentHash": "64544576de2967fc5cd18104327d2e68", + "sourceName": "contracts/pcv/balancer/IAssetManager.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IAssetManager" + ] + }, + "/home/caleb/fei-protocol-core/contracts/fei/minter/PCVEquityMinter.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "82b68c6f6c5c225f0d4cb1298a5fccd7", + "sourceName": "contracts/fei/minter/PCVEquityMinter.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./FeiTimedMinter.sol", + "./IPCVEquityMinter.sol", + "../../Constants.sol", + "../../pcv/IPCVSwapper.sol", + "@openzeppelin/contracts/utils/math/SafeCast.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "PCVEquityMinter" + ] + }, + "/home/caleb/fei-protocol-core/contracts/fei/minter/FeiTimedMinter.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "a1760e987e20548e56ff6b735b95ea49", + "sourceName": "contracts/fei/minter/FeiTimedMinter.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../refs/CoreRef.sol", + "../../utils/Timed.sol", + "../../utils/Incentivized.sol", + "./RateLimitedMinter.sol", + "./IFeiTimedMinter.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "FeiTimedMinter" + ] + }, + "/home/caleb/fei-protocol-core/contracts/fei/minter/IPCVEquityMinter.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "f38752e2e5e4c8add20effea25371518", + "sourceName": "contracts/fei/minter/IPCVEquityMinter.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../oracle/collateralization/ICollateralizationOracle.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IPCVEquityMinter" + ] + }, + "/home/caleb/fei-protocol-core/contracts/utils/Incentivized.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "857f3c21791bd034dcf31cf48f07cd10", + "sourceName": "contracts/utils/Incentivized.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../refs/CoreRef.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "Incentivized" + ] + }, + "/home/caleb/fei-protocol-core/contracts/fei/minter/IFeiTimedMinter.sol": { + "lastModificationDate": 1646115056090, + "contentHash": "c27cc15f406566a70afccffd40c7e67b", + "sourceName": "contracts/fei/minter/IFeiTimedMinter.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IFeiTimedMinter" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/utils/NamedStaticPCVDepositWrapper.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "eb5cd71fd5f8343216d72bdcabd8d38f", + "sourceName": "contracts/pcv/utils/NamedStaticPCVDepositWrapper.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../IPCVDepositBalances.sol", + "../../Constants.sol", + "../../refs/CoreRef.sol", + "@openzeppelin/contracts/utils/math/SafeCast.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "NamedStaticPCVDepositWrapper" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/utils/PCVDepositWrapper.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "f5d91a32317e8073e029a9c247f60002", + "sourceName": "contracts/pcv/utils/PCVDepositWrapper.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../IPCVDepositBalances.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "PCVDepositWrapper" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/utils/ERC20PCVDepositWrapper.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "b05314afb63c24353c99a95405f048c7", + "sourceName": "contracts/pcv/utils/ERC20PCVDepositWrapper.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../IPCVDepositBalances.sol", + "@openzeppelin/contracts/token/ERC20/IERC20.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "ERC20PCVDepositWrapper" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/uniswap/UniswapLens.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "556fcae0a944086b07926359a98bb117", + "sourceName": "contracts/pcv/uniswap/UniswapLens.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../IPCVDepositBalances.sol", + "../../refs/UniRef.sol", + "@uniswap/lib/contracts/libraries/Babylonian.sol" + ], + "versionPragmas": [ + "^0.8.10" + ], + "artifacts": [ + "UniswapLens" + ] + }, + "/home/caleb/fei-protocol-core/contracts/refs/UniRef.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "102ca3f20435edeb5cf60d16abd297f5", + "sourceName": "contracts/refs/UniRef.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./OracleRef.sol", + "./IUniRef.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "UniRef" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@uniswap/lib/contracts/libraries/Babylonian.sol": { + "lastModificationDate": 1650954644230, + "contentHash": "7e23695840ea364fb0959d203e2d5b3d", + "sourceName": "@uniswap/lib/contracts/libraries/Babylonian.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + ">=0.4.0" + ], + "artifacts": [ + "Babylonian" + ] + }, + "/home/caleb/fei-protocol-core/contracts/refs/IUniRef.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "b60577ce400ea0c5481142deb7e6b123", + "sourceName": "contracts/refs/IUniRef.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IUniRef" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol": { + "lastModificationDate": 1650954661640, + "contentHash": "3fa31c3860f2b9585c3a98c64850829e", + "sourceName": "@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + ">=0.5.0" + ], + "artifacts": [ + "IUniswapV2Pair" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/uniswap/UniswapPCVDeposit.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "7b56142ff439812ecd15206038464b1f", + "sourceName": "contracts/pcv/uniswap/UniswapPCVDeposit.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IUniswapPCVDeposit.sol", + "../../Constants.sol", + "../PCVDeposit.sol", + "../../refs/UniRef.sol", + "@uniswap/v2-periphery/contracts/interfaces/IWETH.sol", + "@uniswap/lib/contracts/libraries/Babylonian.sol", + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "UniswapPCVDeposit" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/uniswap/IUniswapPCVDeposit.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "0cbb9683d706fe5064d50fac072fcdca", + "sourceName": "contracts/pcv/uniswap/IUniswapPCVDeposit.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IUniswapPCVDeposit" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol": { + "lastModificationDate": 1650954663740, + "contentHash": "3fd36426274a5b35f7e702f87ba08a8e", + "sourceName": "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IUniswapV2Router01.sol" + ], + "versionPragmas": [ + ">=0.6.2" + ], + "artifacts": [ + "IUniswapV2Router02" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol": { + "lastModificationDate": 1650954663730, + "contentHash": "95d8729b2c698dc663322167b3c085fe", + "sourceName": "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + ">=0.6.2" + ], + "artifacts": [ + "IUniswapV2Router01" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/IMockUniswapV2PairLiquidity.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "02badd28c071ebc216194674e75a1377", + "sourceName": "contracts/mock/IMockUniswapV2PairLiquidity.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol", + "../external/Decimal.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IMockUniswapV2PairLiquidity" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockRouter.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "33f5ba5febb9cd5f5391b1f9c63216e1", + "sourceName": "contracts/mock/MockRouter.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "@openzeppelin/contracts/utils/math/SafeMath.sol", + "../external/Decimal.sol", + "./IMockUniswapV2PairLiquidity.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockRouter" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/lido/EthLidoPCVDeposit.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "8fa3d33147a8ba654b90452f8deb10cc", + "sourceName": "contracts/pcv/lido/EthLidoPCVDeposit.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../PCVDeposit.sol", + "../../Constants.sol", + "../../refs/CoreRef.sol", + "../../external/Decimal.sol", + "@openzeppelin/contracts/token/ERC20/ERC20.sol", + "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "EthLidoPCVDeposit", + "ILido", + "IStableSwapSTETH" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/governance/TimelockController.sol": { + "lastModificationDate": 1651119844020, + "contentHash": "973bd5531bb5ead6f93625277d15e5bd", + "sourceName": "@openzeppelin/contracts/governance/TimelockController.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../access/AccessControl.sol", + "../token/ERC721/IERC721Receiver.sol", + "../token/ERC1155/IERC1155Receiver.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "TimelockController" + ] + }, + "/home/caleb/fei-protocol-core/contracts/test/integration/fixtures/MainnetAddresses.sol": { + "lastModificationDate": 1651119315480, + "contentHash": "95aa7a961a0a304647090ba8b48164b4", + "sourceName": "contracts/test/integration/fixtures/MainnetAddresses.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MainnetAddresses" + ] + }, + "/home/caleb/fei-protocol-core/contracts/test/utils/StdLib.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "1ddfc027d91d722516dfbabf8277c5ea", + "sourceName": "contracts/test/utils/StdLib.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./Vm.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "StdLib", + "stdError", + "stdStorage" + ] + }, + "/home/caleb/fei-protocol-core/contracts/test/integration/IntegrationTest.t.sol": { + "lastModificationDate": 1651119315480, + "contentHash": "a40b35331d6189fc754e3244c2e0791c", + "sourceName": "contracts/test/integration/IntegrationTest.t.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../utils/DSTest.sol", + "../utils/StdLib.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IntegrationTest" + ] + }, + "/home/caleb/fei-protocol-core/contracts/test/integration/governance/GovernanceMetadataRegistry.t.sol": { + "lastModificationDate": 1651119315480, + "contentHash": "d3d04b304057de4d69eb783766b2e198", + "sourceName": "contracts/test/integration/governance/GovernanceMetadataRegistry.t.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../utils/DSTest.sol", + "../../utils/Vm.sol", + "../../../core/TribeRoles.sol", + "../../../pods/GovernanceMetadataRegistry.sol", + "../../../core/Core.sol", + "../fixtures/MainnetAddresses.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "GovernanceMetadataRegistryIntegrationTest" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pods/GovernanceMetadataRegistry.sol": { + "lastModificationDate": 1651119315480, + "contentHash": "1019b82919bec2855ff0648a899515d7", + "sourceName": "contracts/pods/GovernanceMetadataRegistry.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../refs/CoreRef.sol", + "../core/TribeRoles.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "GovernanceMetadataRegistry" + ] + }, + "/home/caleb/fei-protocol-core/contracts/test/integration/fixtures/Gnosis.sol": { + "lastModificationDate": 1651119315480, + "contentHash": "2c0a8c8995699c9711368cbdcc568d25", + "sourceName": "contracts/test/integration/fixtures/Gnosis.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../../pods/interfaces/IGnosisSafe.sol", + "../../utils/Vm.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [] + }, + "/home/caleb/fei-protocol-core/contracts/pods/interfaces/IGnosisSafe.sol": { + "lastModificationDate": 1651119315480, + "contentHash": "5b94f980c874f387e96e7f72636527d8", + "sourceName": "contracts/pods/interfaces/IGnosisSafe.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IGnosisSafe" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@gnosis.pm/zodiac/contracts/guard/BaseGuard.sol": { + "lastModificationDate": 1651119840560, + "contentHash": "d45a1301d15dba09be57c2067f5081e8", + "sourceName": "@gnosis.pm/zodiac/contracts/guard/BaseGuard.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@gnosis.pm/safe-contracts/contracts/common/Enum.sol", + "@openzeppelin/contracts/utils/introspection/IERC165.sol", + "../interfaces/IGuard.sol" + ], + "versionPragmas": [ + ">=0.7.0 <0.9.0" + ], + "artifacts": [ + "BaseGuard" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@gnosis.pm/safe-contracts/contracts/common/Enum.sol": { + "lastModificationDate": 1651119840830, + "contentHash": "70d93d6b3e8b23f419fe3e529a43c17e", + "sourceName": "@gnosis.pm/safe-contracts/contracts/common/Enum.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + ">=0.7.0 <0.9.0" + ], + "artifacts": [ + "Enum" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@gnosis.pm/zodiac/contracts/interfaces/IGuard.sol": { + "lastModificationDate": 1651119840720, + "contentHash": "f44bfd52d28472afc1810859cb08d71a", + "sourceName": "@gnosis.pm/zodiac/contracts/interfaces/IGuard.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@gnosis.pm/safe-contracts/contracts/common/Enum.sol" + ], + "versionPragmas": [ + ">=0.7.0 <0.9.0" + ], + "artifacts": [ + "IGuard" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/token/ERC1155/IERC1155.sol": { + "lastModificationDate": 1651119843670, + "contentHash": "59e1bc5713fdebc7f821dc52f4d3e0ef", + "sourceName": "@openzeppelin/contracts/token/ERC1155/IERC1155.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../utils/introspection/IERC165.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IERC1155" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol": { + "lastModificationDate": 1651119843670, + "contentHash": "9148c2e10c4efb12c71a7f080da5559b", + "sourceName": "@openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../IERC1155.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IERC1155MetadataURI" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/token/ERC1155/ERC1155.sol": { + "lastModificationDate": 1651119843070, + "contentHash": "792473360274d02eed0fe4c691d67d16", + "sourceName": "@openzeppelin/contracts/token/ERC1155/ERC1155.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IERC1155.sol", + "./IERC1155Receiver.sol", + "./extensions/IERC1155MetadataURI.sol", + "../../utils/Address.sol", + "../../utils/Context.sol", + "../../utils/introspection/ERC165.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "ERC1155" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol": { + "lastModificationDate": 1651119843160, + "contentHash": "6a99607f60a77d468b7ed41303ea4a6c", + "sourceName": "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../ERC1155.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "ERC1155Supply" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/utils/WethPCVDeposit.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "ecdfb84df03fcbef9a17a693523524f1", + "sourceName": "contracts/pcv/utils/WethPCVDeposit.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../PCVDeposit.sol", + "../../Constants.sol", + "@openzeppelin/contracts/utils/Address.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "WethPCVDeposit" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/aave/AavePCVDeposit.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "9473c98548d1354479b3ef68213fcead", + "sourceName": "contracts/pcv/aave/AavePCVDeposit.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../utils/WethPCVDeposit.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "AavePCVDeposit", + "IncentivesController", + "LendingPool" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockStEthStableSwap.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "490b3f91d78e88eb28564a990a4fc8a3", + "sourceName": "contracts/mock/MockStEthStableSwap.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "@openzeppelin/contracts/utils/Address.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockStEthStableSwap" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockEthPCVDeposit.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "cc03eab25bb1befe69f4a233ce502643", + "sourceName": "contracts/mock/MockEthPCVDeposit.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../pcv/IPCVDeposit.sol", + "@openzeppelin/contracts/utils/Address.sol", + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockEthPCVDeposit" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockEthUniswapPCVDeposit.sol": { + "lastModificationDate": 1646115056090, + "contentHash": "4318a04d39c9f2a0937eded8f9200098", + "sourceName": "contracts/mock/MockEthUniswapPCVDeposit.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./MockEthPCVDeposit.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockEthUniswapPCVDeposit" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "lastModificationDate": 1651119843210, + "contentHash": "6baa887a798e95b14f34e093f117e9b2", + "sourceName": "@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../beacon/IBeacon.sol", + "../../interfaces/draft-IERC1822.sol", + "../../utils/Address.sol", + "../../utils/StorageSlot.sol" + ], + "versionPragmas": [ + "^0.8.2" + ], + "artifacts": [ + "ERC1967Upgrade" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol": { + "lastModificationDate": 1651119843620, + "contentHash": "b6bd23bf19e90b771337037706470933", + "sourceName": "@openzeppelin/contracts/proxy/beacon/IBeacon.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IBeacon" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/interfaces/draft-IERC1822.sol": { + "lastModificationDate": 1651119843020, + "contentHash": "2858d98e74e67987ec81b39605230b74", + "sourceName": "@openzeppelin/contracts/interfaces/draft-IERC1822.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IERC1822Proxiable" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/utils/StorageSlot.sol": { + "lastModificationDate": 1651119844010, + "contentHash": "187a01c1e4e638014509dfee3ac6faa9", + "sourceName": "@openzeppelin/contracts/utils/StorageSlot.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "StorageSlot" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "lastModificationDate": 1651119843210, + "contentHash": "524a6c6f00b809b1184050dcc9e131d8", + "sourceName": "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../Proxy.sol", + "./ERC1967Upgrade.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "ERC1967Proxy" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/proxy/Proxy.sol": { + "lastModificationDate": 1651119843950, + "contentHash": "40b3d81a836d50ff47e03893dcaaf204", + "sourceName": "@openzeppelin/contracts/proxy/Proxy.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "Proxy" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "lastModificationDate": 1651119844030, + "contentHash": "433af24ebe64e49e21ea173b3744af6c", + "sourceName": "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../ERC1967/ERC1967Proxy.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "TransparentUpgradeableProxy" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol": { + "lastModificationDate": 1651119843950, + "contentHash": "a947492251ac15d6bfd899c9fdb4d82b", + "sourceName": "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./TransparentUpgradeableProxy.sol", + "../../access/Ownable.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "ProxyAdmin" + ] + }, + "/home/caleb/fei-protocol-core/contracts/external/TransparentUpgradeableProxy.sol": { + "lastModificationDate": 1646087631420, + "contentHash": "afbc21a1b1e51483062a7ba284397b06", + "sourceName": "contracts/external/TransparentUpgradeableProxy.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol", + "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/governance/compatibility/GovernorCompatibilityBravo.sol": { + "lastModificationDate": 1651119843520, + "contentHash": "bde5610ecd11f2f5930e70fda7c90165", + "sourceName": "@openzeppelin/contracts/governance/compatibility/GovernorCompatibilityBravo.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../utils/Counters.sol", + "../../utils/math/SafeCast.sol", + "../extensions/IGovernorTimelock.sol", + "../Governor.sol", + "./IGovernorCompatibilityBravo.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "GovernorCompatibilityBravo" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/governance/extensions/IGovernorTimelock.sol": { + "lastModificationDate": 1651119843850, + "contentHash": "eebb17e144c4fd58549d815db19552da", + "sourceName": "@openzeppelin/contracts/governance/extensions/IGovernorTimelock.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../IGovernor.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IGovernorTimelock" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/governance/compatibility/IGovernorCompatibilityBravo.sol": { + "lastModificationDate": 1651119843850, + "contentHash": "150a6426dc55ba789e76389d6893f908", + "sourceName": "@openzeppelin/contracts/governance/compatibility/IGovernorCompatibilityBravo.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../IGovernor.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IGovernorCompatibilityBravo" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/governance/extensions/GovernorTimelockCompound.sol": { + "lastModificationDate": 1651119843550, + "contentHash": "756c2fabb71e0805f8bf4464638b3034", + "sourceName": "@openzeppelin/contracts/governance/extensions/GovernorTimelockCompound.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IGovernorTimelock.sol", + "../Governor.sol", + "../../utils/math/SafeCast.sol", + "../../vendor/compound/ICompoundTimelock.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "GovernorTimelockCompound" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/vendor/compound/ICompoundTimelock.sol": { + "lastModificationDate": 1651119843640, + "contentHash": "0aa957092da3c691ed6bf15e56aedc3b", + "sourceName": "@openzeppelin/contracts/vendor/compound/ICompoundTimelock.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "ICompoundTimelock" + ] + }, + "/home/caleb/fei-protocol-core/contracts/dao/governor/FeiDAO.sol": { + "lastModificationDate": 1651119315480, + "contentHash": "29ef01e2ea8bbaa0a75e927d6e10b5bd", + "sourceName": "contracts/dao/governor/FeiDAO.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/governance/compatibility/GovernorCompatibilityBravo.sol", + "@openzeppelin/contracts/governance/extensions/GovernorTimelockCompound.sol", + "@openzeppelin/contracts/governance/extensions/GovernorVotesComp.sol", + "@openzeppelin/contracts/token/ERC20/extensions/ERC20VotesComp.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "FeiDAO" + ] + }, + "/home/caleb/fei-protocol-core/contracts/libs/CoreRefPauseableLib.sol": { + "lastModificationDate": 1646115056090, + "contentHash": "aeeb021f633bcb770563f3f5ecd11f83", + "sourceName": "contracts/libs/CoreRefPauseableLib.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../refs/CoreRef.sol", + "@openzeppelin/contracts/security/Pausable.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "CoreRefPauseableLib" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/PCVGuardian.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "e1ef5be19bba715c0f39d9fe05532458", + "sourceName": "contracts/pcv/PCVGuardian.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/utils/structs/EnumerableSet.sol", + "../refs/CoreRef.sol", + "./IPCVGuardian.sol", + "./IPCVDeposit.sol", + "../libs/CoreRefPauseableLib.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "PCVGuardian" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/IPCVGuardian.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "41d082372c73ea6eafbdc564e5bc30aa", + "sourceName": "contracts/pcv/IPCVGuardian.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IPCVGuardian" + ] + }, + "/home/caleb/fei-protocol-core/contracts/oracle/collateralization/CollateralizationOracle.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "68e4eb7fdf21b2c820235e292e1fa4dc", + "sourceName": "contracts/oracle/collateralization/CollateralizationOracle.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../IOracle.sol", + "./ICollateralizationOracle.sol", + "../../refs/CoreRef.sol", + "../../pcv/IPCVDepositBalances.sol", + "@openzeppelin/contracts/utils/structs/EnumerableSet.sol", + "@openzeppelin/contracts/utils/math/SafeCast.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "CollateralizationOracle", + "IPausable" + ] + }, + "/home/caleb/fei-protocol-core/contracts/oracle/collateralization/ICollateralizationOracleWrapper.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "9e7619653963b5a48d0c7882c822841f", + "sourceName": "contracts/oracle/collateralization/ICollateralizationOracleWrapper.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./ICollateralizationOracle.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "ICollateralizationOracleWrapper" + ] + }, + "/home/caleb/fei-protocol-core/contracts/oracle/collateralization/CollateralizationOracleWrapper.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "27b77b3b1985df89ec10e6466f54e11a", + "sourceName": "contracts/oracle/collateralization/CollateralizationOracleWrapper.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../IOracle.sol", + "./ICollateralizationOracleWrapper.sol", + "../../Constants.sol", + "../../utils/Timed.sol", + "../../refs/CoreRef.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "CollateralizationOracleWrapper", + "IPausable" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/utils/PCVDripController.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "9c29908b26536bdf4a7e4d12c9ce62ab", + "sourceName": "contracts/pcv/utils/PCVDripController.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IPCVDripController.sol", + "../../utils/Incentivized.sol", + "../../fei/minter/RateLimitedMinter.sol", + "../../utils/Timed.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "PCVDripController" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/utils/IPCVDripController.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "91e0b1ad8ecc6c1bee77639cd73c27e3", + "sourceName": "contracts/pcv/utils/IPCVDripController.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../IPCVDeposit.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IPCVDripController" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockRateLimitedMinter.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "30cf6f6752f8cd0335a5598ac4892002", + "sourceName": "contracts/mock/MockRateLimitedMinter.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../fei/minter/RateLimitedMinter.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockRateLimitedMinter" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockMinter.sol": { + "lastModificationDate": 1651060617410, + "contentHash": "5e8ed487b5a99ac6d8df6784642025df", + "sourceName": "contracts/mock/MockMinter.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./../utils/GlobalRateLimitedMinter.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockMinter" + ] + }, + "/home/caleb/fei-protocol-core/contracts/keeper/CollateralizationOracleKeeper.sol": { + "lastModificationDate": 1646115056090, + "contentHash": "524b31d49c07215f2fdb15faf0ffea3d", + "sourceName": "contracts/keeper/CollateralizationOracleKeeper.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../fei/minter/FeiTimedMinter.sol", + "../oracle/collateralization/ICollateralizationOracleWrapper.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "CollateralizationOracleKeeper" + ] + }, + "/home/caleb/fei-protocol-core/contracts/fei/minter/OwnableTimedMinter.sol": { + "lastModificationDate": 1646115056090, + "contentHash": "47d9700f80c32e6fc1bc2e914dd72643", + "sourceName": "contracts/fei/minter/OwnableTimedMinter.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./FeiTimedMinter.sol", + "@openzeppelin/contracts/access/Ownable.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "OwnableTimedMinter" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/utils/ERC20Dripper.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "54b3329e8d08af6ee07d2bd74dc8ba12", + "sourceName": "contracts/pcv/utils/ERC20Dripper.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./../PCVDeposit.sol", + "./../../utils/Timed.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "ERC20Dripper" + ] + }, + "/home/caleb/fei-protocol-core/contracts/oracle/collateralization/CollateralizationOracleGuardian.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "53e58dfddfb4fa4e3802688729b99089", + "sourceName": "contracts/oracle/collateralization/CollateralizationOracleGuardian.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./ICollateralizationOracleWrapper.sol", + "../../refs/CoreRef.sol", + "../../utils/Timed.sol", + "../../Constants.sol", + "@openzeppelin/contracts/utils/math/SafeCast.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "CollateralizationOracleGuardian" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/balancer/BPTLens.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "1174e91daa40c4157013437c617ab5c6", + "sourceName": "contracts/pcv/balancer/BPTLens.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IVault.sol", + "./IWeightedPool.sol", + "../../external/gyro/ExtendedMath.sol", + "../IPCVDepositBalances.sol", + "../../oracle/IOracle.sol", + "../../Constants.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "BPTLens" + ] + }, + "/home/caleb/fei-protocol-core/contracts/external/gyro/ExtendedMath.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "783010e144bdad22f4ffd223c341daf0", + "sourceName": "contracts/external/gyro/ExtendedMath.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./abdk/ABDKMath64x64.sol", + "@openzeppelin/contracts/utils/math/SafeMath.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "ExtendedMath" + ] + }, + "/home/caleb/fei-protocol-core/contracts/external/gyro/abdk/ABDKMath64x64.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "e89b7fe6e1d8ef5ddfc25564d7a6c3a0", + "sourceName": "contracts/external/gyro/abdk/ABDKMath64x64.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "ABDKMath64x64" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/balancer/BalancerPool2Lens.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "7688edbc7a44f4efd6b4198886adc578", + "sourceName": "contracts/pcv/balancer/BalancerPool2Lens.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IVault.sol", + "./IWeightedPool.sol", + "../../external/gyro/ExtendedMath.sol", + "../IPCVDepositBalances.sol", + "../../oracle/IOracle.sol", + "../../Constants.sol" + ], + "versionPragmas": [ + "^0.8.10" + ], + "artifacts": [ + "BalancerPool2Lens" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/balancer/BalancerPCVDepositWeightedPool.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "3bb10df2e2de6b61eea0efaba1744e3d", + "sourceName": "contracts/pcv/balancer/BalancerPCVDepositWeightedPool.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IVault.sol", + "./IWeightedPool.sol", + "./BalancerPCVDepositBase.sol", + "../PCVDeposit.sol", + "../../Constants.sol", + "../../refs/CoreRef.sol", + "../../oracle/IOracle.sol", + "../../external/gyro/ExtendedMath.sol", + "../../external/gyro/abdk/ABDKMath64x64.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "BalancerPCVDepositWeightedPool" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/balancer/BalancerPCVDepositBase.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "8167ead02af2a7ee6c852dd63707b8d1", + "sourceName": "contracts/pcv/balancer/BalancerPCVDepositBase.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IVault.sol", + "./IMerkleOrchard.sol", + "./IWeightedPool.sol", + "../PCVDeposit.sol", + "../../Constants.sol", + "../../refs/CoreRef.sol", + "@openzeppelin/contracts/token/ERC20/ERC20.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "BalancerPCVDepositBase" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/balancer/IMerkleOrchard.sol": { + "lastModificationDate": 1643166535080, + "contentHash": "3d1c0d0810c9a0bd4c20162843cc5955", + "sourceName": "contracts/pcv/balancer/IMerkleOrchard.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/IERC20.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IMerkleOrchard" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockMerkleOrchard.sol": { + "lastModificationDate": 1643166535080, + "contentHash": "d19634eb948cd9855a8b6bfe6900e388", + "sourceName": "contracts/mock/MockMerkleOrchard.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "../pcv/balancer/IMerkleOrchard.sol", + "./MockERC20.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockMerkleOrchard" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockWeightedPool.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "69a4678d3cec9ea832c7654fdf693929", + "sourceName": "contracts/mock/MockWeightedPool.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./MockERC20.sol", + "./MockVault.sol", + "../pcv/balancer/IVault.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockWeightedPool" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockVault.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "3acfe83edd106dd56617c288e1d2992f", + "sourceName": "contracts/mock/MockVault.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", + "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "./MockWeightedPool.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockVault" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/balancer/manager/WeightedBalancerPoolManagerBase.sol": { + "lastModificationDate": 1646115056100, + "contentHash": "0df1f35b096c5dc703112574276cb748", + "sourceName": "contracts/pcv/balancer/manager/WeightedBalancerPoolManagerBase.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./WeightedBalancerPoolManager.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "WeightedBalancerPoolManagerBase" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockTribe.sol": { + "lastModificationDate": 1646115056100, + "contentHash": "624d5ef45d0a6c1e6b30ef30ffe6f043", + "sourceName": "contracts/mock/MockTribe.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./MockERC20.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockTribe" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockTokemakRewards.sol": { + "lastModificationDate": 1638934590030, + "contentHash": "4d40548a2c8ae2c3bd6b825015ef4eee", + "sourceName": "contracts/mock/MockTokemakRewards.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./MockERC20.sol", + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "MockTokemakRewards" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockWeth.sol": { + "lastModificationDate": 1646115056100, + "contentHash": "42ed76cbcc3d6c616ad05471bcbbc452", + "sourceName": "contracts/mock/MockWeth.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./MockERC20.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockWeth" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockTokemakEthPool.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "70c9cd811cec99418881e9300059fced", + "sourceName": "contracts/mock/MockTokemakEthPool.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./MockERC20.sol", + "./MockWeth.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "MockTokemakEthPool" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockTokemakERC20Pool.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "d8e2732ecd6a8750503eb6d0c119f771", + "sourceName": "contracts/mock/MockTokemakERC20Pool.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./MockERC20.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "MockTokemakERC20Pool" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockStEthToken.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "efba5c01949c3b813c4c328207f052e1", + "sourceName": "contracts/mock/MockStEthToken.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./MockERC20.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockStEthToken" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockLendingPool.sol": { + "lastModificationDate": 1646115056090, + "contentHash": "71c05a625f0ef4d62be6edfcb4f919ae", + "sourceName": "contracts/mock/MockLendingPool.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./MockERC20.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "MockLendingPool" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockCurveMetapool.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "bb024c27e6acd3a0b6ad461debcfd0c7", + "sourceName": "contracts/mock/MockCurveMetapool.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./MockERC20.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockCurveMetapool" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockCurve3pool.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "c4abd10ddcea973ff5450021f48c90cd", + "sourceName": "contracts/mock/MockCurve3pool.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./MockERC20.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockCurve3pool" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockCToken.sol": { + "lastModificationDate": 1646115056090, + "contentHash": "fc73f96a943fdd30cc8ab81d23eb0aa7", + "sourceName": "contracts/mock/MockCToken.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./MockERC20.sol", + "hardhat/console.sol", + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "CToken", + "MockCToken" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/hardhat/console.sol": { + "lastModificationDate": 1650954664840, + "contentHash": "cc4777addd464ea56fa35b1c45df0591", + "sourceName": "hardhat/console.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + ">=0.4.22 <0.9.0" + ], + "artifacts": [ + "console" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockConvexBooster.sol": { + "lastModificationDate": 1646115056090, + "contentHash": "0c2db7520532f0261ae11f2fbae4325b", + "sourceName": "contracts/mock/MockConvexBooster.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./MockERC20.sol", + "./MockConvexBaseRewardPool.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockConvexBooster" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockConvexBaseRewardPool.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "6b2db6089b50d0b0c7b167f37630037b", + "sourceName": "contracts/mock/MockConvexBaseRewardPool.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./MockERC20.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockConvexBaseRewardPool" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockConfigurableERC20.sol": { + "lastModificationDate": 1632368757905, + "contentHash": "2be780650a48c077eb93fd5c8ce9d3d4", + "sourceName": "contracts/mock/MockConfigurableERC20.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol", + "@openzeppelin/contracts/token/ERC20/ERC20.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "MockConfigurableERC20" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockCore.sol": { + "lastModificationDate": 1646115056090, + "contentHash": "82db2e14ffc224621c50796d3690402b", + "sourceName": "contracts/mock/MockCore.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./../core/Permissions.sol", + "../fei/Fei.sol", + "../tribe/Tribe.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "MockCore" + ] + }, + "/home/caleb/fei-protocol-core/contracts/core/RestrictedPermissions.sol": { + "lastModificationDate": 1646115056090, + "contentHash": "b6cdef3e524e6aea6994206727ceff92", + "sourceName": "contracts/core/RestrictedPermissions.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IPermissionsRead.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "RestrictedPermissions" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockRestrictedPermissions.sol": { + "lastModificationDate": 1646115056090, + "contentHash": "73e607cdd386063912c170bd7e93c810", + "sourceName": "contracts/mock/MockRestrictedPermissions.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../core/RestrictedPermissions.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockRestrictedPermissions" + ] + }, + "/home/caleb/fei-protocol-core/contracts/fuse/rewards/RewardsDistributorAdmin.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "fcdacf1fa95e96df8cdb3414c30d32cf", + "sourceName": "contracts/fuse/rewards/RewardsDistributorAdmin.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../refs/CoreRef.sol", + "./IRewardsDistributorAdmin.sol", + "@openzeppelin/contracts/access/AccessControlEnumerable.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "RewardsDistributorAdmin" + ] + }, + "/home/caleb/fei-protocol-core/contracts/fuse/rewards/IRewardsDistributorAdmin.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "90f26ec2569e62b44f5e5ab5b453ff40", + "sourceName": "contracts/fuse/rewards/IRewardsDistributorAdmin.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IRewardsDistributorAdmin" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockRewardsDistributor.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "a69263229f2ef55820489dc49faf5683", + "sourceName": "contracts/mock/MockRewardsDistributor.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./../staking/TribalChief.sol", + "../refs/CoreRef.sol", + "../fuse/rewards/IRewardsDistributorAdmin.sol", + "@openzeppelin/contracts/access/Ownable.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "MockRewardsDistributor" + ] + }, + "/home/caleb/fei-protocol-core/contracts/staking/TribalChief.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "15c9ff06e6a00844cbd6d9856d6195e5", + "sourceName": "contracts/staking/TribalChief.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./../refs/CoreRef.sol", + "./IRewarder.sol", + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", + "@openzeppelin/contracts/utils/math/SafeCast.sol", + "@openzeppelin/contracts/security/ReentrancyGuard.sol", + "@openzeppelin/contracts/proxy/utils/Initializable.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "TribalChief" + ] + }, + "/home/caleb/fei-protocol-core/contracts/staking/IRewarder.sol": { + "lastModificationDate": 1646115056100, + "contentHash": "0ecde07c6d39fa6365299ae42854c555", + "sourceName": "contracts/staking/IRewarder.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/IERC20.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IRewarder" + ] + }, + "/home/caleb/fei-protocol-core/contracts/staking/StakingTokenWrapper.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "3fd09b9d170bf6b3be21e95d8091d671", + "sourceName": "contracts/staking/StakingTokenWrapper.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/ERC20.sol", + "@openzeppelin/contracts/proxy/utils/Initializable.sol", + "./ITribalChief.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "StakingTokenWrapper" + ] + }, + "/home/caleb/fei-protocol-core/contracts/staking/ITribalChief.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "8e6d43da9f10d3a42e3593b263c101cd", + "sourceName": "contracts/staking/ITribalChief.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IRewarder.sol", + "@openzeppelin/contracts/token/ERC20/IERC20.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "ITribalChief" + ] + }, + "/home/caleb/fei-protocol-core/contracts/staking/STWBulkHarvest.sol": { + "lastModificationDate": 1643166535080, + "contentHash": "a7777610f8fb3a9db4bc84cfbb781e58", + "sourceName": "contracts/staking/STWBulkHarvest.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./StakingTokenWrapper.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "STWBulkHarvest" + ] + }, + "/home/caleb/fei-protocol-core/contracts/staking/TribalChiefSyncV2.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "8cb9a4b8a87196d5678f0aa31b0d2618", + "sourceName": "contracts/staking/TribalChiefSyncV2.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./ITribalChief.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IAutoRewardsDistributor", + "ITimelock", + "TribalChiefSyncV2" + ] + }, + "/home/caleb/fei-protocol-core/contracts/staking/TribalChiefSyncExtension.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "bcdcf28391017e5252bcaa86ac96c12d", + "sourceName": "contracts/staking/TribalChiefSyncExtension.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./TribalChiefSyncV2.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "TribalChiefSyncExtension" + ] + }, + "/home/caleb/fei-protocol-core/contracts/fuse/rewards/AutoRewardsDistributorV2.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "43a7bac5fa1d52f0d66b9b8844b3ae0d", + "sourceName": "contracts/fuse/rewards/AutoRewardsDistributorV2.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../staking/ITribalChief.sol", + "../../refs/CoreRef.sol", + "../../external/fuse/Unitroller.sol", + "../../staking/StakingTokenWrapper.sol", + "./IRewardsDistributorAdmin.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "AutoRewardsDistributorV2" + ] + }, + "/home/caleb/fei-protocol-core/contracts/external/fuse/Unitroller.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "159f863a63026aa82ffc7f48a47520a0", + "sourceName": "contracts/external/fuse/Unitroller.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./CToken.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "Unitroller" + ] + }, + "/home/caleb/fei-protocol-core/contracts/external/fuse/CToken.sol": { + "lastModificationDate": 1646115056090, + "contentHash": "8438395072b13096154f39ad144b5409", + "sourceName": "contracts/external/fuse/CToken.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "CToken" + ] + }, + "/home/caleb/fei-protocol-core/contracts/fuse/FuseGuardian.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "0ed288853f06da28cd1e9e09adcbf816", + "sourceName": "contracts/fuse/FuseGuardian.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../refs/CoreRef.sol", + "../external/fuse/Unitroller.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "FuseGuardian" + ] + }, + "/home/caleb/fei-protocol-core/contracts/fuse/FuseAdmin.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "ce82793d63a9b3a23872028879ae1a5b", + "sourceName": "contracts/fuse/FuseAdmin.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./FuseGuardian.sol", + "./IMasterOracle.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "FuseAdmin" + ] + }, + "/home/caleb/fei-protocol-core/contracts/fuse/IMasterOracle.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "ac15c139f58fc3fb76832ed41fb66a38", + "sourceName": "contracts/fuse/IMasterOracle.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IMasterOracle" + ] + }, + "/home/caleb/fei-protocol-core/contracts/fuse/rewards/AutoRewardsDistributor.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "69251800a40e6921ddf5cbbac3c9326d", + "sourceName": "contracts/fuse/rewards/AutoRewardsDistributor.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../staking/ITribalChief.sol", + "../../refs/CoreRef.sol", + "./IRewardsDistributorAdmin.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "AutoRewardsDistributor" + ] + }, + "/home/caleb/fei-protocol-core/contracts/fuse/rewards/IRewardsAdmin.sol": { + "lastModificationDate": 1646115056090, + "contentHash": "911ec08a17c570f4cd083609a77e14b9", + "sourceName": "contracts/fuse/rewards/IRewardsAdmin.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IRewardsDistributorAdmin.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IRewardsAdmin" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockIncentive.sol": { + "lastModificationDate": 1646115056090, + "contentHash": "4df1b7372840c4c964d9028f14023aba", + "sourceName": "contracts/mock/MockIncentive.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../fei/IIncentive.sol", + "../refs/CoreRef.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockIncentive" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockUniswapIncentive.sol": { + "lastModificationDate": 1646115056100, + "contentHash": "d4c13d8d727ca728806a7d533a66da71", + "sourceName": "contracts/mock/MockUniswapIncentive.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./MockIncentive.sol", + "../external/Decimal.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockUniswapIncentive" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockAngleStableMaster.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "c22d737c5058040e7fe4e7159c33f596", + "sourceName": "contracts/mock/MockAngleStableMaster.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", + "./MockERC20.sol", + "./MockAnglePoolManager.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockAngleStableMaster" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockAnglePoolManager.sol": { + "lastModificationDate": 1638934590030, + "contentHash": "eedd4e6877d8fd99d9a3ae47343b1aa2", + "sourceName": "contracts/mock/MockAnglePoolManager.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockAnglePoolManager" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockUniswapV2PairLiquidity.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "b8efc3f6640486780e0f627e279ca134", + "sourceName": "contracts/mock/MockUniswapV2PairLiquidity.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/utils/math/SafeMath.sol", + "../external/Decimal.sol", + "@uniswap/lib/contracts/libraries/FixedPoint.sol", + "@openzeppelin/contracts/token/ERC20/IERC20.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockUniswapV2PairLiquidity" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@uniswap/lib/contracts/libraries/FixedPoint.sol": { + "lastModificationDate": 1650954644350, + "contentHash": "e4a4584c59d8b1515ce998ec9bf49f5c", + "sourceName": "@uniswap/lib/contracts/libraries/FixedPoint.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./Babylonian.sol" + ], + "versionPragmas": [ + ">=0.4.0" + ], + "artifacts": [ + "FixedPoint" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockUniswapV2PairTrade.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "14bd5072b44143a8449f3a03a2c6bf95", + "sourceName": "contracts/mock/MockUniswapV2PairTrade.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@uniswap/lib/contracts/libraries/FixedPoint.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockUniswapV2PairTrade" + ] + }, + "/home/caleb/fei-protocol-core/contracts/external/uniswap/UniswapV2Library.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "2d6b3a32cb1603b92201036129c99634", + "sourceName": "contracts/external/uniswap/UniswapV2Library.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/utils/math/SafeMath.sol" + ], + "versionPragmas": [ + ">=0.6.0" + ], + "artifacts": [ + "UniswapV2Library" + ] + }, + "/home/caleb/fei-protocol-core/contracts/dao/timelock/Timelock.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "bebcde4fde10bf7e3c0ad05e5e47f560", + "sourceName": "contracts/dao/timelock/Timelock.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/utils/math/SafeMath.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "Timelock" + ] + }, + "/home/caleb/fei-protocol-core/contracts/merger/MergerBase.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "2582c6141ba3942d963a4dd8c3bfc2c7", + "sourceName": "contracts/merger/MergerBase.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", + "../dao/timelock/Timelock.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MergerBase" + ] + }, + "/home/caleb/fei-protocol-core/contracts/merger/TribeRagequit.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "3eea518f9f7d0e78f9689855acd43c31", + "sourceName": "contracts/merger/TribeRagequit.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./MergerBase.sol", + "../fei/IFei.sol", + "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "TRIBERagequit" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/utils/cryptography/MerkleProof.sol": { + "lastModificationDate": 1651119843910, + "contentHash": "8206339fb35134e364332d17ea7b5d60", + "sourceName": "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "MerkleProof" + ] + }, + "/home/caleb/fei-protocol-core/contracts/merger/PegExchanger.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "1bda4c5f5abbb278cc2d20c6ebf6b01c", + "sourceName": "contracts/merger/PegExchanger.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./MergerBase.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "PegExchanger" + ] + }, + "/home/caleb/fei-protocol-core/contracts/merger/PegExchangerDripper.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "dc5819a9babf4e6c0cb6f3589c5859f8", + "sourceName": "contracts/merger/PegExchangerDripper.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./PegExchanger.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "PegExchangerDripper" + ] + }, + "/home/caleb/fei-protocol-core/contracts/dao/timelock/FeiDAOTimelock.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "eb4fc8cabab24ed7018b9309b5a34ef6", + "sourceName": "contracts/dao/timelock/FeiDAOTimelock.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./Timelock.sol", + "../../refs/CoreRef.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "FeiDAOTimelock", + "IFeiDAO" + ] + }, + "/home/caleb/fei-protocol-core/contracts/oracle/CompositeOracle.sol": { + "lastModificationDate": 1646115056100, + "contentHash": "61377ca365c458136fbfde1c82346284", + "sourceName": "contracts/oracle/CompositeOracle.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../refs/CoreRef.sol", + "./IOracle.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "CompositeOracle" + ] + }, + "/home/caleb/fei-protocol-core/contracts/oracle/ChainlinkOracleWrapper.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "789ec6a4de667c65c5c7e6ed541973d0", + "sourceName": "contracts/oracle/ChainlinkOracleWrapper.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IOracle.sol", + "../refs/CoreRef.sol", + "@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "ChainlinkOracleWrapper" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol": { + "lastModificationDate": 1650954667200, + "contentHash": "b213894d1186ed5f03cceedb9a7811a2", + "sourceName": "@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + ">=0.6.0" + ], + "artifacts": [ + "AggregatorV3Interface" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockChainlinkOracle.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "313837e54db8ee393d9b49b24a9f0a8e", + "sourceName": "contracts/mock/MockChainlinkOracle.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockChainlinkOracle" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockOracle.sol": { + "lastModificationDate": 1646115056090, + "contentHash": "afc70e947a81e82b4a7aa4ea6f713db5", + "sourceName": "contracts/mock/MockOracle.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../external/Decimal.sol", + "../oracle/IOracle.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockOracle" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockOracleCoreRef.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "6b20b53697179eab4edabfa26d21e0ac", + "sourceName": "contracts/mock/MockOracleCoreRef.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./MockOracle.sol", + "./MockCoreRef.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockOracleCoreRef" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockCoreRef.sol": { + "lastModificationDate": 1646115056090, + "contentHash": "7993e250ea0c7591421aaa7834f2833d", + "sourceName": "contracts/mock/MockCoreRef.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../refs/CoreRef.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockCoreRef" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockVoteEscrowTokenManager.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "775e65b33959468b5f0e9fe2090d86ee", + "sourceName": "contracts/mock/MockVoteEscrowTokenManager.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./MockCoreRef.sol", + "../metagov/utils/VoteEscrowTokenManager.sol", + "@openzeppelin/contracts/token/ERC20/IERC20.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockVoteEscrowTokenManager" + ] + }, + "/home/caleb/fei-protocol-core/contracts/metagov/utils/VoteEscrowTokenManager.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "0f82b723fe701835fc7a15dbc0fc6cc3", + "sourceName": "contracts/metagov/utils/VoteEscrowTokenManager.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../refs/CoreRef.sol", + "../../core/TribeRoles.sol", + "@openzeppelin/contracts/token/ERC20/IERC20.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IVeToken", + "VoteEscrowTokenManager" + ] + }, + "/home/caleb/fei-protocol-core/contracts/metagov/VeBalDelegatorPCVDeposit.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "9374478e4a21fa5b39faa100b0054f66", + "sourceName": "contracts/metagov/VeBalDelegatorPCVDeposit.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./SnapshotDelegatorPCVDeposit.sol", + "./utils/VoteEscrowTokenManager.sol", + "./utils/LiquidityGaugeManager.sol", + "./utils/GovernorVoter.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "VeBalDelegatorPCVDeposit" + ] + }, + "/home/caleb/fei-protocol-core/contracts/metagov/SnapshotDelegatorPCVDeposit.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "e30ae6f3f7a78205c69d411f06c73739", + "sourceName": "contracts/metagov/SnapshotDelegatorPCVDeposit.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../core/TribeRoles.sol", + "../pcv/PCVDeposit.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "DelegateRegistry", + "SnapshotDelegatorPCVDeposit" + ] + }, + "/home/caleb/fei-protocol-core/contracts/metagov/utils/LiquidityGaugeManager.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "df20efc74abd30175a9a78f19ed55654", + "sourceName": "contracts/metagov/utils/LiquidityGaugeManager.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../refs/CoreRef.sol", + "../../core/TribeRoles.sol", + "@openzeppelin/contracts/token/ERC20/IERC20.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "ILiquidityGauge", + "ILiquidityGaugeController", + "LiquidityGaugeManager" + ] + }, + "/home/caleb/fei-protocol-core/contracts/metagov/utils/GovernorVoter.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "4d30da9953ce9f12658c53f66999b45b", + "sourceName": "contracts/metagov/utils/GovernorVoter.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../refs/CoreRef.sol", + "../../core/TribeRoles.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "GovernorVoter", + "IMetagovGovernor" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockGovernorVoter.sol": { + "lastModificationDate": 1650967372680, + "contentHash": "57689b1c4594fcc98a6966e61854b327", + "sourceName": "contracts/mock/MockGovernorVoter.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./MockCoreRef.sol", + "../metagov/utils/GovernorVoter.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockGovernorVoter" + ] + }, + "/home/caleb/fei-protocol-core/contracts/metagov/AngleDelegatorPCVDeposit.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "4e23779ef1d76fd1cb51e90c5a6d1b40", + "sourceName": "contracts/metagov/AngleDelegatorPCVDeposit.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./SnapshotDelegatorPCVDeposit.sol", + "./utils/VoteEscrowTokenManager.sol", + "./utils/LiquidityGaugeManager.sol", + "./utils/GovernorVoter.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "AngleDelegatorPCVDeposit" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/curve/CurveGaugeLens.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "28a9d535c359f2d87585e2b8f141479f", + "sourceName": "contracts/pcv/curve/CurveGaugeLens.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../metagov/utils/LiquidityGaugeManager.sol", + "../IPCVDepositBalances.sol" + ], + "versionPragmas": [ + "^0.8.10" + ], + "artifacts": [ + "CurveGaugeLens" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/angle/AngleGaugeLens.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "6fd2b6cceb867f214db6e6da99d3c31e", + "sourceName": "contracts/pcv/angle/AngleGaugeLens.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../metagov/utils/LiquidityGaugeManager.sol", + "../IPCVDepositBalances.sol" + ], + "versionPragmas": [ + "^0.8.10" + ], + "artifacts": [ + "AngleGaugeLens" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockLiquidityGaugeManager.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "63d74c08d5678aede36ce6efb7b63c93", + "sourceName": "contracts/mock/MockLiquidityGaugeManager.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./MockCoreRef.sol", + "../metagov/utils/LiquidityGaugeManager.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockLiquidityGaugeManager" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockCollateralizationOracle.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "9f34a75978775d65df48c9a432df0c87", + "sourceName": "contracts/mock/MockCollateralizationOracle.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./MockOracleCoreRef.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockCollateralizationOracle" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pods/interfaces/IPodAdminGateway.sol": { + "lastModificationDate": 1651119315480, + "contentHash": "66e8b4b87928d5633ad223069baea43e", + "sourceName": "contracts/pods/interfaces/IPodAdminGateway.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IPodAdminGateway" + ] + }, + "/home/caleb/fei-protocol-core/contracts/core/ICoreV1.old.sol": { + "lastModificationDate": 1646115056090, + "contentHash": "7bd7306ede718d6f6c5987b196b927bd", + "sourceName": "contracts/core/ICoreV1.old.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./ICore.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "ICoreV1" + ] + }, + "/home/caleb/fei-protocol-core/contracts/dao/timelock/OptimisticTimelock.sol": { + "lastModificationDate": 1646115056090, + "contentHash": "f0aa9676bf631c7bdc89ec98424b4333", + "sourceName": "contracts/dao/timelock/OptimisticTimelock.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/governance/TimelockController.sol", + "../../refs/CoreRef.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "OptimisticTimelock" + ] + }, + "/home/caleb/fei-protocol-core/contracts/external/saddle/ISaddleSwap.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "5923cfd0ee14c27ec5d7f932eab45813", + "sourceName": "contracts/external/saddle/ISaddleSwap.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/ERC20.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "ISaddleSwap" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockBondingCurve.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "5b75020c845ddd0ee3de2064bec8567f", + "sourceName": "contracts/mock/MockBondingCurve.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../external/Decimal.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockBondingCurve" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/angle/AngleUniswapPCVDeposit.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "c35cf01a54ad9c067d05f5761d3794dd", + "sourceName": "contracts/pcv/angle/AngleUniswapPCVDeposit.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../uniswap/UniswapPCVDeposit.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "AngleUniswapPCVDeposit", + "IPoolManager", + "IStableMaster", + "IStakingRewards" + ] + }, + "/home/caleb/fei-protocol-core/contracts/libs/UintArrayOps.sol": { + "lastModificationDate": 1646115056090, + "contentHash": "a7abe1621271a08a207dc50cb6c0fd49", + "sourceName": "contracts/libs/UintArrayOps.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/utils/math/SafeCast.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "UintArrayOps" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/tokemak/TokemakPCVDepositBase.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "9b598b5134356db8af92a9d6f82dfde7", + "sourceName": "contracts/pcv/tokemak/TokemakPCVDepositBase.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../PCVDeposit.sol", + "../../refs/CoreRef.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "ITokemakPool", + "ITokemakRewards", + "TokemakPCVDepositBase" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/tokemak/EthTokemakPCVDeposit.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "5e0f794c5f69103a654b9defba7624fd", + "sourceName": "contracts/pcv/tokemak/EthTokemakPCVDeposit.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./TokemakPCVDepositBase.sol", + "../../Constants.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "EthTokemakPCVDeposit", + "ITokemakEthPool" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/tokemak/ERC20TokemakPCVDeposit.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "581882fe6f1bf0ec4f9eae89f3ed78ce", + "sourceName": "contracts/pcv/tokemak/ERC20TokemakPCVDeposit.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./TokemakPCVDepositBase.sol", + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "ERC20TokemakPCVDeposit", + "ITokemakERC20Pool" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/curve/CurvePCVDepositPlainPool.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "dc7ae98b53c558cc59d0f1df5c0ad6da", + "sourceName": "contracts/pcv/curve/CurvePCVDepositPlainPool.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../Constants.sol", + "../PCVDeposit.sol", + "./ICurveStableSwap3.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "CurvePCVDepositPlainPool" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/curve/ICurveStableSwap3.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "73abeb4db2f124e47cd7594b72ceabfb", + "sourceName": "contracts/pcv/curve/ICurveStableSwap3.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./ICurvePool.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "ICurveStableSwap3" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/curve/ICurvePool.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "5b68ead86b66db9319017a7f46534eaf", + "sourceName": "contracts/pcv/curve/ICurvePool.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "ICurvePool" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/convex/ConvexPCVDeposit.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "b91a4f18c9a72c8c9cf11ce0f66b091e", + "sourceName": "contracts/pcv/convex/ConvexPCVDeposit.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../Constants.sol", + "./IConvexBooster.sol", + "./IConvexBaseRewardPool.sol", + "../curve/ICurvePool.sol", + "../PCVDeposit.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "ConvexPCVDeposit" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/convex/IConvexBooster.sol": { + "lastModificationDate": 1646115056100, + "contentHash": "f52907267401b2d470ec47f89e361a5a", + "sourceName": "contracts/pcv/convex/IConvexBooster.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IConvexBooster" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/convex/IConvexBaseRewardPool.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "f973406846a51938b8557221d7ca8082", + "sourceName": "contracts/pcv/convex/IConvexBaseRewardPool.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IConvexBaseRewardPool" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/compound/CompoundPCVDepositBase.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "7e71e9e584137c2cda656efbb2d98d2b", + "sourceName": "contracts/pcv/compound/CompoundPCVDepositBase.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../PCVDeposit.sol", + "../../refs/CoreRef.sol", + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "CToken", + "CompoundPCVDepositBase" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/compound/EthCompoundPCVDeposit.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "5224980c2b44e9437180ee7be7c71c84", + "sourceName": "contracts/pcv/compound/EthCompoundPCVDeposit.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./CompoundPCVDepositBase.sol", + "../../Constants.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "CEther", + "EthCompoundPCVDeposit" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/compound/ERC20CompoundPCVDeposit.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "4859c3c46a5aeb5755bc9a67ed6f24f0", + "sourceName": "contracts/pcv/compound/ERC20CompoundPCVDeposit.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./CompoundPCVDepositBase.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "CErc20", + "ERC20CompoundPCVDeposit" + ] + }, + "/home/caleb/fei-protocol-core/contracts/timelocks/QuadraticTimelockedDelegator.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "c7b4ae0bbcddb131c008d498c906110b", + "sourceName": "contracts/timelocks/QuadraticTimelockedDelegator.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "./QuadraticTokenTimelock.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IVotingToken", + "QuadraticTimelockedDelegator" + ] + }, + "/home/caleb/fei-protocol-core/contracts/timelocks/LinearTimelockedDelegator.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "ad032aeeb8e55dad8c1b67054780e585", + "sourceName": "contracts/timelocks/LinearTimelockedDelegator.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "./LinearTokenTimelock.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IVotingToken", + "LinearTimelockedDelegator" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockStakingRewards.sol": { + "lastModificationDate": 1646115056100, + "contentHash": "5e78a5cde403eb7482ab59affe33e594", + "sourceName": "contracts/mock/MockStakingRewards.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/IERC20.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockStakingRewards" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockERC20UniswapPCVDeposit.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "49b9383c4cb0b0c747f3a23f14ced654", + "sourceName": "contracts/mock/MockERC20UniswapPCVDeposit.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../pcv/IPCVDeposit.sol", + "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockERC20UniswapPCVDeposit" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockERC20PCVDeposit.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "f350831387a5654f36c1e0af7a8cb3e1", + "sourceName": "contracts/mock/MockERC20PCVDeposit.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../pcv/IPCVDeposit.sol", + "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockERC20PCVDeposit" + ] + }, + "/home/caleb/fei-protocol-core/contracts/external/sushi/IMasterContractManager.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "e5092e2ff1aa9616334e3acc2f8c44dc", + "sourceName": "contracts/external/sushi/IMasterContractManager.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/IERC20.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IMasterContractManager" + ] + }, + "/home/caleb/fei-protocol-core/contracts/external/sushi/IKashiPair.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "5322c4cee48f7e82159769a14385d72b", + "sourceName": "contracts/external/sushi/IKashiPair.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/IERC20.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IKashiPair" + ] + }, + "/home/caleb/fei-protocol-core/contracts/external/fuse/CErc20Delegator.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "c4c6fbfabf16555620d93d8089d75276", + "sourceName": "contracts/external/fuse/CErc20Delegator.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/IERC20.sol", + "./InterestRateModel.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "CErc20Delegator" + ] + }, + "/home/caleb/fei-protocol-core/contracts/external/fuse/InterestRateModel.sol": { + "lastModificationDate": 1646115056090, + "contentHash": "cc8ccf8a265265d3971126f0b163b6f6", + "sourceName": "contracts/external/fuse/InterestRateModel.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "InterestRateModel" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/utils/RatioPCVControllerV2.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "7bf1e0af4ce5c4ca22f5263cfc58bd6e", + "sourceName": "contracts/pcv/utils/RatioPCVControllerV2.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../Constants.sol", + "../../refs/CoreRef.sol", + "../IPCVDeposit.sol", + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "RatioPCVControllerV2" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/utils/DelayedPCVMover.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "05ac9710ca474b00fca0ea7a230f5793", + "sourceName": "contracts/pcv/utils/DelayedPCVMover.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../refs/CoreRef.sol", + "./RatioPCVControllerV2.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "DelayedPCVMover" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/kashi/KashiPCVRedeemer.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "9130e0f94d401e2fcab7be7bb7222693", + "sourceName": "contracts/pcv/kashi/KashiPCVRedeemer.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IKashi", + "KashiPCVRedeemer" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/idle/IdleTranchePCVRedeemer.sol": { + "lastModificationDate": 1646115056100, + "contentHash": "bc2c71d568a12a108d36f3e139cd42f3", + "sourceName": "contracts/pcv/idle/IdleTranchePCVRedeemer.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IIdleTrancheMinter", + "IdleTranchePCVRedeemer" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/idle/IdlePCVRedeemer.sol": { + "lastModificationDate": 1646115056100, + "contentHash": "24fab5a7a629f83335c512e2df1585c8", + "sourceName": "contracts/pcv/idle/IdlePCVRedeemer.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IIdleToken", + "IdlePCVRedeemer" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/convex/VotiumBriber.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "c4b7e4ac9cba61e3baae7be74d71333e", + "sourceName": "contracts/pcv/convex/VotiumBriber.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IVotiumBribe.sol", + "../../refs/CoreRef.sol", + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "VotiumBriber" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/convex/IVotiumBribe.sol": { + "lastModificationDate": 1643166535080, + "contentHash": "d86c920b0f26979e5a36fb5616c55ad3", + "sourceName": "contracts/pcv/convex/IVotiumBribe.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IVotiumBribe" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/barnbridge/SmartYieldRedeemer.sol": { + "lastModificationDate": 1646115056100, + "contentHash": "9ef31aca5f1b417f9db9727db5f09840", + "sourceName": "contracts/pcv/barnbridge/SmartYieldRedeemer.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "ISmartYield", + "SmartYieldRedeemer" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockAngleStakingRewards.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "5e21733996dce5f2e8a00c1539f8dcdf", + "sourceName": "contracts/mock/MockAngleStakingRewards.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IMockERC20", + "MockAngleStakingRewards" + ] + }, + "/home/caleb/fei-protocol-core/contracts/merger/REPTbRedeemer.sol": { + "lastModificationDate": 1646115056090, + "contentHash": "9f9ceab6f8077bfd86bcdab42a8d83dd", + "sourceName": "contracts/merger/REPTbRedeemer.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "REPTbRedeemer" + ] + }, + "/home/caleb/fei-protocol-core/contracts/merger/ExchangerTimelock.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "4f73969a561b63a04fefad35372f6d10", + "sourceName": "contracts/merger/ExchangerTimelock.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", + "@openzeppelin/contracts/access/Ownable.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "ExchangerTimelock", + "IExchanger" + ] + }, + "/home/caleb/fei-protocol-core/contracts/peg/PriceBoundPSM.sol": { + "lastModificationDate": 1651060617410, + "contentHash": "2c724c3f59c4a134c4801f9701f7a52f", + "sourceName": "contracts/peg/PriceBoundPSM.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./PegStabilityModule.sol", + "./IPriceBound.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "PriceBoundPSM" + ] + }, + "/home/caleb/fei-protocol-core/contracts/peg/IPriceBound.sol": { + "lastModificationDate": 1646115056100, + "contentHash": "c66f5fab75adf840b9edc68bb6a60bd6", + "sourceName": "contracts/peg/IPriceBound.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IPriceBound" + ] + }, + "/home/caleb/fei-protocol-core/contracts/peg/FixedPricePSM.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "cf8821ff36a30549363e1211690b6a86", + "sourceName": "contracts/peg/FixedPricePSM.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./PriceBoundPSM.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "FixedPricePSM" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/utils/FeiSkimmer.sol": { + "lastModificationDate": 1646115056100, + "contentHash": "0f0300a2396cc6cb0fd045556d4b4f9c", + "sourceName": "contracts/pcv/utils/FeiSkimmer.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../IPCVDeposit.sol", + "../../refs/CoreRef.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "FeiSkimmer" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/utils/PCVSplitter.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "b169d76debf6af8d075a546cf3aafa72", + "sourceName": "contracts/pcv/utils/PCVSplitter.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../../refs/CoreRef.sol", + "../../Constants.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "PCVSplitter" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/utils/ERC20Splitter.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "c8813726ee1cc20834b6fdf24db78615", + "sourceName": "contracts/pcv/utils/ERC20Splitter.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./PCVSplitter.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "ERC20Splitter" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockIncentivized.sol": { + "lastModificationDate": 1646115056090, + "contentHash": "4b6a29e8f9006f14e1571b0c45ee7dbd", + "sourceName": "contracts/mock/MockIncentivized.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../refs/CoreRef.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockIncentivized" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockCoreRefTest.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "d3bcac1361e3bce01a3dd00012d6925f", + "sourceName": "contracts/mock/MockCoreRefTest.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../refs/CoreRef.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockCoreRefTest" + ] + }, + "/home/caleb/fei-protocol-core/contracts/dao/governor/GovernorAlpha.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "abfae88220c854f7ebedf08c7fb707c8", + "sourceName": "contracts/dao/governor/GovernorAlpha.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "GovernorAlpha", + "TimelockInterface", + "TribeInterface" + ] + }, + "/home/caleb/fei-protocol-core/contracts/merger/MergerGate.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "797af1bfe5595bc4a705c0d893cd5039", + "sourceName": "contracts/merger/MergerGate.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../dao/governor/GovernorAlpha.sol" + ], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MergerGate" + ] + }, + "/home/caleb/fei-protocol-core/contracts/external/aave/DataTypes.sol": { + "lastModificationDate": 1646115056090, + "contentHash": "7c2152a4a31affdc4da366d5ae0a5cab", + "sourceName": "contracts/external/aave/DataTypes.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "DataTypes" + ] + }, + "/home/caleb/fei-protocol-core/contracts/external/aave/ILendingPool.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "e0ff4eae1110cb5d61138d93f8a434bb", + "sourceName": "contracts/external/aave/ILendingPool.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./DataTypes.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "ILendingPool", + "ILendingPoolAddressesProvider" + ] + }, + "/home/caleb/fei-protocol-core/contracts/external/aave/IAaveDistributionManager.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "905cb404e746e27e179707e4f7198a39", + "sourceName": "contracts/external/aave/IAaveDistributionManager.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IAaveDistributionManager" + ] + }, + "/home/caleb/fei-protocol-core/contracts/external/aave/IAaveIncentivesController.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "cc29b411cd06159ae9e0be14502556a9", + "sourceName": "contracts/external/aave/IAaveIncentivesController.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IAaveDistributionManager.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IAaveIncentivesController" + ] + }, + "/home/caleb/fei-protocol-core/contracts/external/aave/IAaveGovernanceV2.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "2ad79ce72f7b9900dbe6659280a0de58", + "sourceName": "contracts/external/aave/IAaveGovernanceV2.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IAaveGovernanceV2", + "IExecutorWithTimelock" + ] + }, + "/home/caleb/fei-protocol-core/contracts/external/balancer/ILiquidityBootstrappingPoolFactory.sol": { + "lastModificationDate": 1643166535080, + "contentHash": "5bc5851990e415747951316d736ff381", + "sourceName": "contracts/external/balancer/ILiquidityBootstrappingPoolFactory.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "ILiquidityBootstrappingPoolFactory" + ] + }, + "/home/caleb/fei-protocol-core/contracts/external/balancer/IWeightedPool2TokensFactory.sol": { + "lastModificationDate": 1643166535080, + "contentHash": "08f717d5c14b412ee20213598a11f4ee", + "sourceName": "contracts/external/balancer/IWeightedPool2TokensFactory.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IWeightedPool2TokensFactory" + ] + }, + "/home/caleb/fei-protocol-core/contracts/external/fuse/IConvexERC4626.sol": { + "lastModificationDate": 1646115056090, + "contentHash": "1caa18e8bf8b63842ec1ee86f20bbfa7", + "sourceName": "contracts/external/fuse/IConvexERC4626.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IConvexERC4626" + ] + }, + "/home/caleb/fei-protocol-core/contracts/external/fuse/IFuseFeeDistributor.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "2289855b6c30e526e5ce98fe6eed822e", + "sourceName": "contracts/external/fuse/IFuseFeeDistributor.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IFuseFeeDistributor" + ] + }, + "/home/caleb/fei-protocol-core/contracts/external/fuse/IRewardsDistributor.sol": { + "lastModificationDate": 1646115056090, + "contentHash": "538d1983e83c306dcb0af31e136f8cb6", + "sourceName": "contracts/external/fuse/IRewardsDistributor.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IRewardsDistributor" + ] + }, + "/home/caleb/fei-protocol-core/contracts/external/multisend/IERC20Airdropper.sol": { + "lastModificationDate": 1646115056090, + "contentHash": "6e9deec243ae96c1647ae2c28c57c180", + "sourceName": "contracts/external/multisend/IERC20Airdropper.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IERC20Airdropper" + ] + }, + "/home/caleb/fei-protocol-core/contracts/external/rari/RariGovernanceTokenUniswapDistributor.sol": { + "lastModificationDate": 1651053026300, + "contentHash": "2b2f2ee224293d734b56d445dc0d1134", + "sourceName": "contracts/external/rari/RariGovernanceTokenUniswapDistributor.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "RariGovernanceTokenUniswapDistributor" + ] + }, + "/home/caleb/fei-protocol-core/contracts/external/visor/IHypervisor.sol": { + "lastModificationDate": 1646115056090, + "contentHash": "a31a2e2c679cb51438485b94258840f2", + "sourceName": "contracts/external/visor/IHypervisor.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "IHypervisor" + ] + }, + "/home/caleb/fei-protocol-core/contracts/fuse/irm/ZeroInterestRateModel.sol": { + "lastModificationDate": 1646115056090, + "contentHash": "ae8f38b6bd5ea799dbd646c33a694972", + "sourceName": "contracts/fuse/irm/ZeroInterestRateModel.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "ZeroInterestRateModel" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/ForceEth.sol": { + "lastModificationDate": 1646115056090, + "contentHash": "885cd12ace3960673978a8fc413270c4", + "sourceName": "contracts/mock/ForceEth.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "ForceEth" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockPCVSwapper.sol": { + "lastModificationDate": 1646115056090, + "contentHash": "09d90e831a478c7216fbd1228e93a256", + "sourceName": "contracts/mock/MockPCVSwapper.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "MockPCVSwapper" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockTribalChief.sol": { + "lastModificationDate": 1646115056100, + "contentHash": "d0d4e2bd65257b904eff9bf5d5b4ae67", + "sourceName": "contracts/mock/MockTribalChief.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0", + "^0.8.0" + ], + "artifacts": [ + "MockTribalChief" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/MockTribeMinter.sol": { + "lastModificationDate": 1646115056100, + "contentHash": "a68aa8c4f9a6a4d2b99024e97c200a22", + "sourceName": "contracts/mock/MockTribeMinter.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.4" + ], + "artifacts": [ + "ITribe", + "MockTribeMinter" + ] + }, + "/home/caleb/fei-protocol-core/contracts/mock/RevertReceiver.sol": { + "lastModificationDate": 1646115056100, + "contentHash": "44672feae9c0dcb654c874dcf9b8ca8b", + "sourceName": "contracts/mock/RevertReceiver.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "RevertReceiver" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pcv/balancer/riskcurve/IRiskCurve.sol": { + "lastModificationDate": 1651053026310, + "contentHash": "268ba02bc0b5575f31c0bbac24ace4a4", + "sourceName": "contracts/pcv/balancer/riskcurve/IRiskCurve.sol", + "solcConfig": { + "version": "0.8.10", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IRiskCurve" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@orcaprotocol/contracts/contracts/InviteToken.sol": { + "lastModificationDate": 1651119845250, + "contentHash": "d1fe340cc1587aab9466e426b0a6195f", + "sourceName": "@orcaprotocol/contracts/contracts/InviteToken.sol", + "solcConfig": { + "version": "0.8.7", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC20/ERC20.sol", + "@openzeppelin/contracts/access/AccessControl.sol" + ], + "versionPragmas": [ + "0.8.7" + ], + "artifacts": [ + "InviteToken" + ] + }, + "/home/caleb/fei-protocol-core/contracts/test/integration/governance/PodFactory.t.sol": { + "lastModificationDate": 1651196504870, + "contentHash": "00a5d095157c0fd45a7f67169007c372", + "sourceName": "contracts/test/integration/governance/PodFactory.t.sol", + "solcConfig": { + "version": "0.8.7", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/governance/TimelockController.sol", + "@orcaprotocol/contracts/contracts/ControllerV1.sol", + "@orcaprotocol/contracts/contracts/MemberToken.sol", + "../../../pods/interfaces/IGnosisSafe.sol", + "../../../pods/PodFactory.sol", + "../../../pods/PodExecutor.sol", + "../../../pods/interfaces/IPodFactory.sol", + "../../../core/Core.sol", + "../../../core/TribeRoles.sol", + "../../../pods/PodAdminGateway.sol", + "../../utils/DSTest.sol", + "../fixtures/Orca.sol", + "../../utils/Fixtures.sol", + "../../utils/Vm.sol", + "../fixtures/MainnetAddresses.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "PodFactoryIntegrationTest" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@orcaprotocol/contracts/contracts/ControllerV1.sol": { + "lastModificationDate": 1651119845240, + "contentHash": "f25d509cfab4036074a0ce74a8ea16fc", + "sourceName": "@orcaprotocol/contracts/contracts/ControllerV1.sol", + "solcConfig": { + "version": "0.8.7", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/access/Ownable.sol", + "@openzeppelin/contracts/utils/Strings.sol", + "./interfaces/IControllerV1.sol", + "./interfaces/IMemberToken.sol", + "./interfaces/IControllerRegistry.sol", + "./SafeTeller.sol", + "./ens/IPodEnsRegistrar.sol" + ], + "versionPragmas": [ + "0.8.7" + ], + "artifacts": [ + "ControllerV1" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@orcaprotocol/contracts/contracts/MemberToken.sol": { + "lastModificationDate": 1651119845250, + "contentHash": "c15aff78eab5d60fb153205873ff0d1d", + "sourceName": "@orcaprotocol/contracts/contracts/MemberToken.sol", + "solcConfig": { + "version": "0.8.7", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/access/Ownable.sol", + "@openzeppelin/contracts/utils/Address.sol", + "@openzeppelin/contracts/token/ERC1155/ERC1155.sol", + "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol", + "./interfaces/IControllerRegistry.sol", + "./interfaces/IControllerBase.sol" + ], + "versionPragmas": [ + "0.8.7" + ], + "artifacts": [ + "MemberToken" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pods/PodFactory.sol": { + "lastModificationDate": 1651196504870, + "contentHash": "73ee3e8e1d0362cff39da09bb393cff2", + "sourceName": "contracts/pods/PodFactory.sol", + "solcConfig": { + "version": "0.8.7", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/governance/TimelockController.sol", + "@orcaprotocol/contracts/contracts/ControllerV1.sol", + "@orcaprotocol/contracts/contracts/MemberToken.sol", + "./interfaces//IGnosisSafe.sol", + "./interfaces/IPodFactory.sol", + "../core/TribeRoles.sol", + "../refs/CoreRef.sol", + "../core/ICore.sol", + "./PodAdminGateway.sol", + "./PodExecutor.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "PodFactory" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pods/interfaces/IPodFactory.sol": { + "lastModificationDate": 1651196504870, + "contentHash": "ab8016eacbe36601b5cb3609c3c2098c", + "sourceName": "contracts/pods/interfaces/IPodFactory.sol", + "solcConfig": { + "version": "0.8.7", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@orcaprotocol/contracts/contracts/ControllerV1.sol", + "@orcaprotocol/contracts/contracts/MemberToken.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "IPodFactory" + ] + }, + "/home/caleb/fei-protocol-core/contracts/pods/PodAdminGateway.sol": { + "lastModificationDate": 1651196504870, + "contentHash": "ecf9f252172b8d20b902fc9f83b26147", + "sourceName": "contracts/pods/PodAdminGateway.sol", + "solcConfig": { + "version": "0.8.7", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@orcaprotocol/contracts/contracts/MemberToken.sol", + "@orcaprotocol/contracts/contracts/ControllerV1.sol", + "@openzeppelin/contracts/governance/TimelockController.sol", + "../refs/CoreRef.sol", + "../core/ICore.sol", + "../core/Core.sol", + "../core/TribeRoles.sol", + "./interfaces/IPodAdminGateway.sol", + "./interfaces/IPodFactory.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "PodAdminGateway" + ] + }, + "/home/caleb/fei-protocol-core/contracts/test/integration/fixtures/Orca.sol": { + "lastModificationDate": 1651196504870, + "contentHash": "a742c453a6ebcf579d56089ef5e09da2", + "sourceName": "contracts/test/integration/fixtures/Orca.sol", + "solcConfig": { + "version": "0.8.7", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/governance/TimelockController.sol", + "@orcaprotocol/contracts/contracts/MemberToken.sol", + "@orcaprotocol/contracts/contracts/ControllerV1.sol", + "@orcaprotocol/contracts/contracts/InviteToken.sol", + "../../../pods/interfaces/IPodFactory.sol", + "../../../pods/PodFactory.sol", + "../../utils/Vm.sol", + "../../../pods/PodAdminGateway.sol", + "../fixtures/MainnetAddresses.sol", + "../../../core/TribeRoles.sol", + "../../../core/Core.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [] + }, + "/home/caleb/fei-protocol-core/node_modules/@orcaprotocol/contracts/contracts/interfaces/IControllerV1.sol": { + "lastModificationDate": 1651119845240, + "contentHash": "8c2c8f3d805565771820b95697104d81", + "sourceName": "@orcaprotocol/contracts/contracts/interfaces/IControllerV1.sol", + "solcConfig": { + "version": "0.8.7", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "./IControllerBase.sol" + ], + "versionPragmas": [ + "0.8.7" + ], + "artifacts": [ + "IControllerV1" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@orcaprotocol/contracts/contracts/interfaces/IMemberToken.sol": { + "lastModificationDate": 1651119845250, + "contentHash": "fddb5c530dada12b88f67e7e04609cfa", + "sourceName": "@orcaprotocol/contracts/contracts/interfaces/IMemberToken.sol", + "solcConfig": { + "version": "0.8.7", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/token/ERC1155/IERC1155.sol" + ], + "versionPragmas": [ + "0.8.7" + ], + "artifacts": [ + "IMemberToken" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@orcaprotocol/contracts/contracts/interfaces/IControllerRegistry.sol": { + "lastModificationDate": 1651119845240, + "contentHash": "e8912d08c2d092f1aa479ed69318678b", + "sourceName": "@orcaprotocol/contracts/contracts/interfaces/IControllerRegistry.sol", + "solcConfig": { + "version": "0.8.7", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "0.8.7" + ], + "artifacts": [ + "IControllerRegistry" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@orcaprotocol/contracts/contracts/SafeTeller.sol": { + "lastModificationDate": 1651119845260, + "contentHash": "7875c2e1529f83028c8af782372e0fe2", + "sourceName": "@orcaprotocol/contracts/contracts/SafeTeller.sol", + "solcConfig": { + "version": "0.8.7", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/utils/Address.sol", + "./interfaces/IGnosisSafe.sol", + "./interfaces/IGnosisSafeProxyFactory.sol", + "@gnosis.pm/zodiac/contracts/guard/BaseGuard.sol" + ], + "versionPragmas": [ + "0.8.7" + ], + "artifacts": [ + "SafeTeller" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@orcaprotocol/contracts/contracts/ens/IPodEnsRegistrar.sol": { + "lastModificationDate": 1651119845250, + "contentHash": "167817b68d9a6821967e1204672ab528", + "sourceName": "@orcaprotocol/contracts/contracts/ens/IPodEnsRegistrar.sol", + "solcConfig": { + "version": "0.8.7", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "0.8.7" + ], + "artifacts": [ + "IPodEnsRegistrar" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@orcaprotocol/contracts/contracts/interfaces/IControllerBase.sol": { + "lastModificationDate": 1651119845240, + "contentHash": "982a96f0d3ce7673ad277fed82db5e4b", + "sourceName": "@orcaprotocol/contracts/contracts/interfaces/IControllerBase.sol", + "solcConfig": { + "version": "0.8.7", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "0.8.7" + ], + "artifacts": [ + "IControllerBase" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@orcaprotocol/contracts/contracts/interfaces/IGnosisSafe.sol": { + "lastModificationDate": 1651119845250, + "contentHash": "65a10a17ad3e28fca065adfb22aef5e6", + "sourceName": "@orcaprotocol/contracts/contracts/interfaces/IGnosisSafe.sol", + "solcConfig": { + "version": "0.8.7", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "0.8.7" + ], + "artifacts": [ + "IGnosisSafe" + ] + }, + "/home/caleb/fei-protocol-core/node_modules/@orcaprotocol/contracts/contracts/interfaces/IGnosisSafeProxyFactory.sol": { + "lastModificationDate": 1651119845250, + "contentHash": "fccd4b3aee4aa03f8b9e5f73e8c8ad41", + "sourceName": "@orcaprotocol/contracts/contracts/interfaces/IGnosisSafeProxyFactory.sol", + "solcConfig": { + "version": "0.8.7", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "0.8.7" + ], + "artifacts": [ + "IGnosisSafeProxyFactory" + ] + }, + "/home/caleb/fei-protocol-core/contracts/test/integration/governance/PodAdminGateway.t.sol": { + "lastModificationDate": 1651196504870, + "contentHash": "0a2eee4557f1050f413dae6481050a3d", + "sourceName": "contracts/test/integration/governance/PodAdminGateway.t.sol", + "solcConfig": { + "version": "0.8.7", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/governance/TimelockController.sol", + "@orcaprotocol/contracts/contracts/ControllerV1.sol", + "@orcaprotocol/contracts/contracts/MemberToken.sol", + "../../utils/Vm.sol", + "../../utils/DSTest.sol", + "../../../pods/PodFactory.sol", + "../../../pods/PodAdminGateway.sol", + "../../../pods/interfaces/IPodAdminGateway.sol", + "../fixtures/Orca.sol", + "../../../pods/interfaces/IPodFactory.sol", + "../../../core/TribeRoles.sol", + "../../../core/ICore.sol", + "../fixtures/MainnetAddresses.sol", + "../../../core/Core.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "PodAdminGatewayIntegrationTest" + ] + }, + "/home/caleb/fei-protocol-core/contracts/test/integration/governance/NopeDAO.t.sol": { + "lastModificationDate": 1651196504870, + "contentHash": "b81ca22a9a0d1f9ca970f945906c8930", + "sourceName": "contracts/test/integration/governance/NopeDAO.t.sol", + "solcConfig": { + "version": "0.8.7", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/governance/TimelockController.sol", + "@openzeppelin/contracts/token/ERC20/extensions/ERC20VotesComp.sol", + "../../utils/DSTest.sol", + "../../../pods/interfaces/IPodFactory.sol", + "../../utils/Vm.sol", + "../../../core/TribeRoles.sol", + "../../../dao/nopeDAO/NopeDAO.sol", + "../../../core/Core.sol", + "../../../pods/PodFactory.sol", + "../fixtures/MainnetAddresses.sol", + "../fixtures/Orca.sol", + "../../../pods/PodAdminGateway.sol", + "../../utils/Fixtures.sol", + "../../../pods/interfaces/IPodFactory.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "NopeDAOIntegrationTest" + ] + }, + "/home/caleb/fei-protocol-core/contracts/test/integration/governance/OptimisticPodTest.t.sol": { + "lastModificationDate": 1651196504870, + "contentHash": "ab82b363a6f8ad0d89d619a44c0fc404", + "sourceName": "contracts/test/integration/governance/OptimisticPodTest.t.sol", + "solcConfig": { + "version": "0.8.7", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "@openzeppelin/contracts/governance/TimelockController.sol", + "@orcaprotocol/contracts/contracts/MemberToken.sol", + "@orcaprotocol/contracts/contracts/ControllerV1.sol", + "../../../pods/interfaces/IGnosisSafe.sol", + "../fixtures/Orca.sol", + "../fixtures/MainnetAddresses.sol", + "../../utils/Vm.sol", + "../../utils/DSTest.sol" + ], + "versionPragmas": [ + "^0.8.0" + ], + "artifacts": [ + "OptimisticPodIntegrationTest" + ] + }, + "/home/caleb/fei-protocol-core/contracts/external/WETH9.sol": { + "lastModificationDate": 1646115056090, + "contentHash": "af8a53a7090868789adbf57aa6d3ab6b", + "sourceName": "contracts/external/WETH9.sol", + "solcConfig": { + "version": "0.4.18", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.4.18" + ], + "artifacts": [ + "WETH9" + ] + } + } +} From edac38e65a414bea6b91c5a8cfa7a3350ffc0509 Mon Sep 17 00:00:00 2001 From: Caleb Date: Thu, 5 May 2022 03:18:41 -0700 Subject: [PATCH 065/121] npm ci cache --- .circleci/config.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index c481e7f1c..00cba35f8 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -14,6 +14,9 @@ jobs: - checkout - restore_cache: key: package-cache-{{ checksum "package-lock.json" }} + - run: + name: Set npm cache + command: npm set cache .npm - run: name: Install dependencies command: npm ci @@ -22,6 +25,7 @@ jobs: paths: - package-lock.json - node_modules + - .npm - restore_cache: key: solcache-{{ checksum "cache/solidity-files-cache.json" }} - run: From ecd4f94aafa24cfdf2bca23527ae5093006ae5d3 Mon Sep 17 00:00:00 2001 From: Caleb Date: Thu, 5 May 2022 03:32:07 -0700 Subject: [PATCH 066/121] comments --- .circleci/config.yml | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 00cba35f8..744d5fd20 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -12,31 +12,32 @@ jobs: executor: nodeimage steps: - checkout - - restore_cache: + - restore_cache: # This one restores node_modules, and .npm if the package-lock.json checksum is the same key: package-cache-{{ checksum "package-lock.json" }} - - run: + - run: # Set the npm ci cache directory so that it won't always reinstall everything name: Set npm cache command: npm set cache .npm - - run: + - run: # npm ci is faster than npm install name: Install dependencies command: npm ci - - save_cache: + - save_cache: # Save the node_modules and .npm directories into the cache by the checksum of package-lock.json key: package-cache-{{ checksum "package-lock.json" }} paths: - - package-lock.json - node_modules - .npm - - restore_cache: + - restore_cache: # Restore the solidity files cache the same way we do node_modules (by the checksum of the .json file) key: solcache-{{ checksum "cache/solidity-files-cache.json" }} - run: name: Compile contracts command: npm run compile:hardhat - - save_cache: + - save_cache: # Save the solidity files cache, the compiled artifacts, and the generated types key: solcache-{{ checksum "cache/solidity-files-cache.json" }} paths: - artifacts - cache/solidity-files-cache.json - types/contracts + - restore_cache: # Restore the hardhat network fork cache if the hardhad-config hasn't changed + key: hardhat-config-{{ checksum "hardhat.config.ts" }} - persist_to_workspace: root: ~/repo paths: @@ -70,7 +71,6 @@ jobs: test-forge: working_directory: ~/repo executor: nodeimage - parallelism: 16 steps: - attach_workspace: at: ./ @@ -109,6 +109,10 @@ jobs: path: test-results - store_artifacts: path: test-results + - save_cache: + key: hardhat-config-{{ checksum "hardhat.config.ts" }} + paths: # Save the hardhat-network-fork cache + - cache/hardhat-network-fork workflows: main: From 257361a7d4b90b06c964e91718865182f5e3ae52 Mon Sep 17 00:00:00 2001 From: Caleb Date: Thu, 5 May 2022 03:35:13 -0700 Subject: [PATCH 067/121] trigger a cache rebuild --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 180360149..6facdff97 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "author": "joeysantoro", "license": "AGPL-3.0-only", "engines": { - "npm": ">=8.0.0", + "npm": ">=8.0.1", "node": ">=16.0.0" }, "dependencies": { From 338f76c837a6e6911f171500645ad69ad0d20b89 Mon Sep 17 00:00:00 2001 From: Caleb Date: Thu, 5 May 2022 03:35:38 -0700 Subject: [PATCH 068/121] commit package-lock.json --- package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index ce05af076..79de4990b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -67,7 +67,7 @@ }, "engines": { "node": ">=16.0.0", - "npm": ">=8.0.0" + "npm": ">=8.0.1" } }, "node_modules/@babel/code-frame": { From 7fb10d6947ee14cc770ce5785ec08716d6c61b5a Mon Sep 17 00:00:00 2001 From: Caleb Date: Thu, 5 May 2022 04:04:55 -0700 Subject: [PATCH 069/121] use hardhat_mine instead of evm_mine --- package.json | 2 +- test/helpers.ts | 12 +++--------- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 6facdff97..432c90733 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,7 @@ "@nomiclabs/hardhat-ethers": "^2.0.5", "@nomiclabs/hardhat-etherscan": "^3.0.3", "@typechain/ethers-v5": "^7.1.2", - "@typechain/hardhat": "^2.3.0", + "@typechain/hardhat": "^2.9.3", "@types/chai": "^4.3.1", "@types/mocha": "^9.1.1", "@types/node": "^17.0.30", diff --git a/test/helpers.ts b/test/helpers.ts index 7da3e7b1d..8f4e2a343 100644 --- a/test/helpers.ts +++ b/test/helpers.ts @@ -240,17 +240,11 @@ const time = { target = ethers.BigNumber.from(target); const currentBlock = await time.latestBlock(); - const start = Date.now(); - let notified; if (target.lt(currentBlock)) throw Error(`Target block #(${target}) is lower than current block #(${currentBlock})`); - while (ethers.BigNumber.from(await time.latestBlock()).lt(target)) { - if (!notified && Date.now() - start >= 5000) { - notified = true; - console.warn(`You're advancing many blocks; this test may be slow.`); - } - await time.advanceBlock(); - } + + const diff = target.sub(currentBlock); + await hre.network.provider.send('hardhat_mine', [diff.toNumber()]); }, advanceBlock: async (): Promise => { From 718046064bdb89d0c8d7b6be249061931f9b5261 Mon Sep 17 00:00:00 2001 From: Caleb Date: Thu, 5 May 2022 04:07:55 -0700 Subject: [PATCH 070/121] fix bad package version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 432c90733..6facdff97 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,7 @@ "@nomiclabs/hardhat-ethers": "^2.0.5", "@nomiclabs/hardhat-etherscan": "^3.0.3", "@typechain/ethers-v5": "^7.1.2", - "@typechain/hardhat": "^2.9.3", + "@typechain/hardhat": "^2.3.0", "@types/chai": "^4.3.1", "@types/mocha": "^9.1.1", "@types/node": "^17.0.30", From c96e7123e3012ae7acb335e259131e4ac1550a21 Mon Sep 17 00:00:00 2001 From: Caleb Date: Thu, 5 May 2022 04:12:37 -0700 Subject: [PATCH 071/121] more cache stuff --- .circleci/config.yml | 1 - cache/solidity-files-cache.json | 77 +++++++++++++++++---------------- 2 files changed, 39 insertions(+), 39 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 744d5fd20..4d071fc18 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -34,7 +34,6 @@ jobs: key: solcache-{{ checksum "cache/solidity-files-cache.json" }} paths: - artifacts - - cache/solidity-files-cache.json - types/contracts - restore_cache: # Restore the hardhat network fork cache if the hardhad-config hasn't changed key: hardhat-config-{{ checksum "hardhat.config.ts" }} diff --git a/cache/solidity-files-cache.json b/cache/solidity-files-cache.json index 03da8174f..1654599cc 100644 --- a/cache/solidity-files-cache.json +++ b/cache/solidity-files-cache.json @@ -2,7 +2,7 @@ "_format": "hh-sol-cache-2", "files": { "/home/caleb/fei-protocol-core/contracts/Constants.sol": { - "lastModificationDate": 1651060617410, + "lastModificationDate": 1651196504860, "contentHash": "dc72118c07af9d44022a6f0f5bd24f42", "sourceName": "contracts/Constants.sol", "solcConfig": { @@ -153,7 +153,7 @@ ] }, "/home/caleb/fei-protocol-core/contracts/utils/RateLimited.sol": { - "lastModificationDate": 1651060617410, + "lastModificationDate": 1651196504870, "contentHash": "93017779d0e8264477127ec3e25b6bd0", "sourceName": "contracts/utils/RateLimited.sol", "solcConfig": { @@ -298,7 +298,7 @@ ] }, "/home/caleb/fei-protocol-core/contracts/refs/CoreRef.sol": { - "lastModificationDate": 1651119315480, + "lastModificationDate": 1651196504870, "contentHash": "8c102f50cd75f1dfe43d81e53d66b2e2", "sourceName": "contracts/refs/CoreRef.sol", "solcConfig": { @@ -1078,7 +1078,7 @@ ] }, "/home/caleb/fei-protocol-core/contracts/test/unit/Fei.t.sol": { - "lastModificationDate": 1651119315500, + "lastModificationDate": 1651196504870, "contentHash": "c45de6b4102572580216108108eeb0ce", "sourceName": "contracts/test/unit/Fei.t.sol", "solcConfig": { @@ -1237,7 +1237,7 @@ ] }, "/home/caleb/fei-protocol-core/contracts/test/utils/DSTest.sol": { - "lastModificationDate": 1651060617410, + "lastModificationDate": 1651196504870, "contentHash": "4beb4825e39f21061d27f31bae54e973", "sourceName": "contracts/test/utils/DSTest.sol", "solcConfig": { @@ -1274,7 +1274,7 @@ ] }, "/home/caleb/fei-protocol-core/contracts/test/utils/Fixtures.sol": { - "lastModificationDate": 1651119315480, + "lastModificationDate": 1651196504870, "contentHash": "600411255ddc192aa9bea1cabad137c3", "sourceName": "contracts/test/utils/Fixtures.sol", "solcConfig": { @@ -1717,7 +1717,7 @@ ] }, "/home/caleb/fei-protocol-core/contracts/utils/Deviation.sol": { - "lastModificationDate": 1651060617410, + "lastModificationDate": 1651196504870, "contentHash": "d077d44afc92da26d5541629ab320e61", "sourceName": "contracts/utils/Deviation.sol", "solcConfig": { @@ -1790,7 +1790,7 @@ ] }, "/home/caleb/fei-protocol-core/contracts/test/unit/NonCustodialPSM.t.sol": { - "lastModificationDate": 1651119290200, + "lastModificationDate": 1651196504870, "contentHash": "9e5e7987fe7ae9f56f14dc91a149f2aa", "sourceName": "contracts/test/unit/NonCustodialPSM.t.sol", "solcConfig": { @@ -1991,7 +1991,7 @@ ] }, "/home/caleb/fei-protocol-core/contracts/peg/NonCustodialPSM.sol": { - "lastModificationDate": 1651060617410, + "lastModificationDate": 1651196504870, "contentHash": "416f1b33858261f89f96cd03755a4cec", "sourceName": "contracts/peg/NonCustodialPSM.sol", "solcConfig": { @@ -2224,8 +2224,8 @@ ] }, "/home/caleb/fei-protocol-core/contracts/core/TribeRoles.sol": { - "lastModificationDate": 1651119315480, - "contentHash": "61c6dad7bbb084bfb888a01a9a7660c1", + "lastModificationDate": 1651742826860, + "contentHash": "ce99f75f5984832ca52ce856ac111002", "sourceName": "contracts/core/TribeRoles.sol", "solcConfig": { "version": "0.8.10", @@ -2298,7 +2298,7 @@ ] }, "/home/caleb/fei-protocol-core/contracts/peg/INonCustodialPSM.sol": { - "lastModificationDate": 1651060617410, + "lastModificationDate": 1651196504870, "contentHash": "aba53704305659abe65d0f77b1c972e2", "sourceName": "contracts/peg/INonCustodialPSM.sol", "solcConfig": { @@ -2337,7 +2337,7 @@ ] }, "/home/caleb/fei-protocol-core/contracts/utils/GlobalRateLimitedMinter.sol": { - "lastModificationDate": 1651060617410, + "lastModificationDate": 1651196504870, "contentHash": "076e03fcc1ab67d45cec0039b4b3fa60", "sourceName": "contracts/utils/GlobalRateLimitedMinter.sol", "solcConfig": { @@ -2487,7 +2487,7 @@ ] }, "/home/caleb/fei-protocol-core/contracts/utils/MultiRateLimited.sol": { - "lastModificationDate": 1651060617410, + "lastModificationDate": 1651196504870, "contentHash": "e716ef5854017556a03e36e5d6b15cf8", "sourceName": "contracts/utils/MultiRateLimited.sol", "solcConfig": { @@ -2529,7 +2529,7 @@ ] }, "/home/caleb/fei-protocol-core/contracts/utils/IGlobalRateLimitedMinter.sol": { - "lastModificationDate": 1651060617410, + "lastModificationDate": 1651196504870, "contentHash": "11eae3af65a80a0381428a71edcde945", "sourceName": "contracts/utils/IGlobalRateLimitedMinter.sol", "solcConfig": { @@ -2566,7 +2566,7 @@ ] }, "/home/caleb/fei-protocol-core/contracts/utils/IMultiRateLimited.sol": { - "lastModificationDate": 1651060617410, + "lastModificationDate": 1651196504870, "contentHash": "8b526da918254ff4285a8bae3fbc836b", "sourceName": "contracts/utils/IMultiRateLimited.sol", "solcConfig": { @@ -2601,7 +2601,7 @@ ] }, "/home/caleb/fei-protocol-core/contracts/test/unit/governance/PodExecutor.t.sol": { - "lastModificationDate": 1651119315480, + "lastModificationDate": 1651196504870, "contentHash": "030312bc27cbd2f808b9f88807cb9c99", "sourceName": "contracts/test/unit/governance/PodExecutor.t.sol", "solcConfig": { @@ -2643,7 +2643,7 @@ ] }, "/home/caleb/fei-protocol-core/contracts/pods/PodExecutor.sol": { - "lastModificationDate": 1651119315480, + "lastModificationDate": 1651196504870, "contentHash": "1ab8c6396ede9e5beb62c69b560ffd69", "sourceName": "contracts/pods/PodExecutor.sol", "solcConfig": { @@ -2681,7 +2681,7 @@ ] }, "/home/caleb/fei-protocol-core/contracts/dao/timelock/ITimelock.sol": { - "lastModificationDate": 1651119315480, + "lastModificationDate": 1651196504860, "contentHash": "c9384352f04382f5b416b26a0b2092c4", "sourceName": "contracts/dao/timelock/ITimelock.sol", "solcConfig": { @@ -2716,7 +2716,7 @@ ] }, "/home/caleb/fei-protocol-core/contracts/test/unit/governance/NopeDAO.t.sol": { - "lastModificationDate": 1651119315480, + "lastModificationDate": 1651196504870, "contentHash": "ebbe3c3514d8cd8303eee14790e86be8", "sourceName": "contracts/test/unit/governance/NopeDAO.t.sol", "solcConfig": { @@ -2798,7 +2798,7 @@ ] }, "/home/caleb/fei-protocol-core/contracts/dao/nopeDAO/NopeDAO.sol": { - "lastModificationDate": 1651119315480, + "lastModificationDate": 1651196504860, "contentHash": "6199e223bf5d5affa816ea891adb4d86", "sourceName": "contracts/dao/nopeDAO/NopeDAO.sol", "solcConfig": { @@ -3262,7 +3262,7 @@ ] }, "/home/caleb/fei-protocol-core/contracts/dao/nopeDAO/GovernorQuickReaction.sol": { - "lastModificationDate": 1651119315480, + "lastModificationDate": 1651196504860, "contentHash": "443d64ee874f19a9c61c6f4e111ded17", "sourceName": "contracts/dao/nopeDAO/GovernorQuickReaction.sol", "solcConfig": { @@ -3480,7 +3480,7 @@ ] }, "/home/caleb/fei-protocol-core/contracts/test/integration/governance/RoleBastion.t.sol": { - "lastModificationDate": 1651119315480, + "lastModificationDate": 1651196504870, "contentHash": "cad320e749896cfaaba91d8c77e46c51", "sourceName": "contracts/test/integration/governance/RoleBastion.t.sol", "solcConfig": { @@ -3522,7 +3522,7 @@ ] }, "/home/caleb/fei-protocol-core/contracts/pods/RoleBastion.sol": { - "lastModificationDate": 1651119315480, + "lastModificationDate": 1651196504870, "contentHash": "86e4a1a68d46d3b8d29af2ca09987525", "sourceName": "contracts/pods/RoleBastion.sol", "solcConfig": { @@ -3969,7 +3969,7 @@ ] }, "/home/caleb/fei-protocol-core/contracts/peg/PegStabilityModule.sol": { - "lastModificationDate": 1651060617410, + "lastModificationDate": 1651196504870, "contentHash": "37bb502c41dad0a9ab9be9e9185cd6a8", "sourceName": "contracts/peg/PegStabilityModule.sol", "solcConfig": { @@ -5690,7 +5690,7 @@ ] }, "/home/caleb/fei-protocol-core/contracts/test/integration/fixtures/MainnetAddresses.sol": { - "lastModificationDate": 1651119315480, + "lastModificationDate": 1651196504870, "contentHash": "95aa7a961a0a304647090ba8b48164b4", "sourceName": "contracts/test/integration/fixtures/MainnetAddresses.sol", "solcConfig": { @@ -5764,7 +5764,7 @@ ] }, "/home/caleb/fei-protocol-core/contracts/test/integration/IntegrationTest.t.sol": { - "lastModificationDate": 1651119315480, + "lastModificationDate": 1651196504870, "contentHash": "a40b35331d6189fc754e3244c2e0791c", "sourceName": "contracts/test/integration/IntegrationTest.t.sol", "solcConfig": { @@ -5802,7 +5802,7 @@ ] }, "/home/caleb/fei-protocol-core/contracts/test/integration/governance/GovernanceMetadataRegistry.t.sol": { - "lastModificationDate": 1651119315480, + "lastModificationDate": 1651196504870, "contentHash": "d3d04b304057de4d69eb783766b2e198", "sourceName": "contracts/test/integration/governance/GovernanceMetadataRegistry.t.sol", "solcConfig": { @@ -5844,7 +5844,7 @@ ] }, "/home/caleb/fei-protocol-core/contracts/pods/GovernanceMetadataRegistry.sol": { - "lastModificationDate": 1651119315480, + "lastModificationDate": 1651196504870, "contentHash": "1019b82919bec2855ff0648a899515d7", "sourceName": "contracts/pods/GovernanceMetadataRegistry.sol", "solcConfig": { @@ -5882,7 +5882,7 @@ ] }, "/home/caleb/fei-protocol-core/contracts/test/integration/fixtures/Gnosis.sol": { - "lastModificationDate": 1651119315480, + "lastModificationDate": 1651196504870, "contentHash": "2c0a8c8995699c9711368cbdcc568d25", "sourceName": "contracts/test/integration/fixtures/Gnosis.sol", "solcConfig": { @@ -5918,7 +5918,7 @@ "artifacts": [] }, "/home/caleb/fei-protocol-core/contracts/pods/interfaces/IGnosisSafe.sol": { - "lastModificationDate": 1651119315480, + "lastModificationDate": 1651196504870, "contentHash": "5b94f980c874f387e96e7f72636527d8", "sourceName": "contracts/pods/interfaces/IGnosisSafe.sol", "solcConfig": { @@ -6928,7 +6928,7 @@ ] }, "/home/caleb/fei-protocol-core/contracts/dao/governor/FeiDAO.sol": { - "lastModificationDate": 1651119315480, + "lastModificationDate": 1651196504860, "contentHash": "29ef01e2ea8bbaa0a75e927d6e10b5bd", "sourceName": "contracts/dao/governor/FeiDAO.sol", "solcConfig": { @@ -7006,8 +7006,8 @@ ] }, "/home/caleb/fei-protocol-core/contracts/pcv/PCVGuardian.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "e1ef5be19bba715c0f39d9fe05532458", + "lastModificationDate": 1651742826860, + "contentHash": "1703365b2d728ca1ca8e4b5c1dd4caee", "sourceName": "contracts/pcv/PCVGuardian.sol", "solcConfig": { "version": "0.8.10", @@ -7037,7 +7037,8 @@ "../refs/CoreRef.sol", "./IPCVGuardian.sol", "./IPCVDeposit.sol", - "../libs/CoreRefPauseableLib.sol" + "../libs/CoreRefPauseableLib.sol", + "../core/TribeRoles.sol" ], "versionPragmas": [ "^0.8.4" @@ -7318,7 +7319,7 @@ ] }, "/home/caleb/fei-protocol-core/contracts/mock/MockMinter.sol": { - "lastModificationDate": 1651060617410, + "lastModificationDate": 1651196504870, "contentHash": "5e8ed487b5a99ac6d8df6784642025df", "sourceName": "contracts/mock/MockMinter.sol", "solcConfig": { @@ -10557,7 +10558,7 @@ ] }, "/home/caleb/fei-protocol-core/contracts/pods/interfaces/IPodAdminGateway.sol": { - "lastModificationDate": 1651119315480, + "lastModificationDate": 1651196504870, "contentHash": "66e8b4b87928d5633ad223069baea43e", "sourceName": "contracts/pods/interfaces/IPodAdminGateway.sol", "solcConfig": { @@ -12033,7 +12034,7 @@ ] }, "/home/caleb/fei-protocol-core/contracts/peg/PriceBoundPSM.sol": { - "lastModificationDate": 1651060617410, + "lastModificationDate": 1651196504870, "contentHash": "2c724c3f59c4a134c4801f9701f7a52f", "sourceName": "contracts/peg/PriceBoundPSM.sol", "solcConfig": { From 1510a35207a3784706c35930e0591836f6e05d77 Mon Sep 17 00:00:00 2001 From: Caleb Date: Thu, 5 May 2022 04:34:19 -0700 Subject: [PATCH 072/121] sigmaproposalbuilder --- scripts/utils/constructProposal.ts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/scripts/utils/constructProposal.ts b/scripts/utils/constructProposal.ts index cf95840f9..c9d70d257 100644 --- a/scripts/utils/constructProposal.ts +++ b/scripts/utils/constructProposal.ts @@ -2,6 +2,28 @@ import { proposals } from 'hardhat'; import { MainnetContracts, NamedAddresses, ProposalDescription } from '@custom-types/types'; import format from 'string-template'; import { AlphaProposal } from '@idle-finance/hardhat-proposals-plugin/dist/src/proposals/compound-alpha'; +import { BigNumber } from 'ethers'; +import { InternalProposalState } from '@idle-finance/hardhat-proposals-plugin/dist/src/proposals/proposal'; +import { HardhatPluginError } from 'hardhat/plugins'; +import { PACKAGE_NAME, errors } from '@idle-finance/hardhat-proposals-plugin/dist/src/constants'; + +export class SigmaProposal extends AlphaProposal { + protected async mineBlocks(blocks: any) { + const blocksToMine = BigNumber.from(blocks).toNumber(); + await this.hre.network.provider.send('hardhat_mine', [blocksToMine]); + } + + async simulate(fullSimulation = false, force?: boolean) { + if (this.internalState != InternalProposalState.UNSUBMITTED && !force) { + throw new HardhatPluginError(PACKAGE_NAME, errors.ALREADY_SIMULATED); + } + + if (fullSimulation) await this._fullSimulate(); + else await this._simulate(); + + this.internalState = InternalProposalState.SIMULATED; + } +} /** * Constucts a hardhat proposal object @@ -34,6 +56,7 @@ export default async function constructProposal( proposalBuilder.setDescription(`${proposalInfo.title}\n${proposalDescription.toString()}`); // Set proposal description const proposal = proposalBuilder.build(); + proposal.simulate = new SigmaProposal(this.hre).simulate; logging && console.log(await proposal.printProposalInfo()); return proposal; } From e177ecac9227758080294c5adf1459ee9ffe2163 Mon Sep 17 00:00:00 2001 From: Caleb Date: Thu, 5 May 2022 04:38:20 -0700 Subject: [PATCH 073/121] fix hardhat_mine --- test/helpers.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/helpers.ts b/test/helpers.ts index 8f4e2a343..c94a91a8e 100644 --- a/test/helpers.ts +++ b/test/helpers.ts @@ -244,7 +244,7 @@ const time = { throw Error(`Target block #(${target}) is lower than current block #(${currentBlock})`); const diff = target.sub(currentBlock); - await hre.network.provider.send('hardhat_mine', [diff.toNumber()]); + await hre.network.provider.send('hardhat_mine', [diff.toString()]); }, advanceBlock: async (): Promise => { From 9450791c330c6812719b9dbbb6bdaa951fda655b Mon Sep 17 00:00:00 2001 From: Caleb Date: Thu, 5 May 2022 04:46:56 -0700 Subject: [PATCH 074/121] fix hre --- scripts/utils/constructProposal.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/utils/constructProposal.ts b/scripts/utils/constructProposal.ts index c9d70d257..d0444d029 100644 --- a/scripts/utils/constructProposal.ts +++ b/scripts/utils/constructProposal.ts @@ -1,4 +1,4 @@ -import { proposals } from 'hardhat'; +import hre, { proposals } from 'hardhat'; import { MainnetContracts, NamedAddresses, ProposalDescription } from '@custom-types/types'; import format from 'string-template'; import { AlphaProposal } from '@idle-finance/hardhat-proposals-plugin/dist/src/proposals/compound-alpha'; @@ -10,7 +10,7 @@ import { PACKAGE_NAME, errors } from '@idle-finance/hardhat-proposals-plugin/dis export class SigmaProposal extends AlphaProposal { protected async mineBlocks(blocks: any) { const blocksToMine = BigNumber.from(blocks).toNumber(); - await this.hre.network.provider.send('hardhat_mine', [blocksToMine]); + await hre.network.provider.send('hardhat_mine', [blocksToMine]); } async simulate(fullSimulation = false, force?: boolean) { @@ -56,7 +56,7 @@ export default async function constructProposal( proposalBuilder.setDescription(`${proposalInfo.title}\n${proposalDescription.toString()}`); // Set proposal description const proposal = proposalBuilder.build(); - proposal.simulate = new SigmaProposal(this.hre).simulate; + proposal.simulate = new SigmaProposal(hre).simulate; logging && console.log(await proposal.printProposalInfo()); return proposal; } From 3429ba190fb5a7b4ea7482f38b7003f92b2e32f0 Mon Sep 17 00:00:00 2001 From: Caleb Date: Thu, 5 May 2022 04:49:59 -0700 Subject: [PATCH 075/121] try hex string --- test/helpers.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/helpers.ts b/test/helpers.ts index c94a91a8e..f358c222a 100644 --- a/test/helpers.ts +++ b/test/helpers.ts @@ -244,7 +244,7 @@ const time = { throw Error(`Target block #(${target}) is lower than current block #(${currentBlock})`); const diff = target.sub(currentBlock); - await hre.network.provider.send('hardhat_mine', [diff.toString()]); + await hre.network.provider.send('hardhat_mine', [diff.toHexString()]); }, advanceBlock: async (): Promise => { From 690c7e0a0b060396ce973581c77fcee4af3be3a2 Mon Sep 17 00:00:00 2001 From: Caleb Date: Thu, 5 May 2022 04:55:05 -0700 Subject: [PATCH 076/121] different bignumber --- test/helpers.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/helpers.ts b/test/helpers.ts index f358c222a..5a6a9c707 100644 --- a/test/helpers.ts +++ b/test/helpers.ts @@ -6,6 +6,7 @@ import { BigNumber, BigNumberish, Contract, Signer } from 'ethers'; import { NamedAddresses } from '@custom-types/types'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; import EthersAdapter from '@gnosis.pm/safe-ethers-lib'; +import { BN } from 'ethereumjs-util'; import Safe from '@gnosis.pm/safe-core-sdk'; // use default BigNumber @@ -244,7 +245,7 @@ const time = { throw Error(`Target block #(${target}) is lower than current block #(${currentBlock})`); const diff = target.sub(currentBlock); - await hre.network.provider.send('hardhat_mine', [diff.toHexString()]); + await hre.network.provider.send('hardhat_mine', [new BN(diff.toNumber())]); }, advanceBlock: async (): Promise => { From 0afe5939c21713724b2d8d881fd8d0af8bc06eb0 Mon Sep 17 00:00:00 2001 From: Caleb Date: Thu, 5 May 2022 05:07:00 -0700 Subject: [PATCH 077/121] fix the other instance --- scripts/utils/constructProposal.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/utils/constructProposal.ts b/scripts/utils/constructProposal.ts index d0444d029..aeaa9a586 100644 --- a/scripts/utils/constructProposal.ts +++ b/scripts/utils/constructProposal.ts @@ -6,11 +6,12 @@ import { BigNumber } from 'ethers'; import { InternalProposalState } from '@idle-finance/hardhat-proposals-plugin/dist/src/proposals/proposal'; import { HardhatPluginError } from 'hardhat/plugins'; import { PACKAGE_NAME, errors } from '@idle-finance/hardhat-proposals-plugin/dist/src/constants'; +import { BN } from 'ethereumjs-util'; export class SigmaProposal extends AlphaProposal { protected async mineBlocks(blocks: any) { const blocksToMine = BigNumber.from(blocks).toNumber(); - await hre.network.provider.send('hardhat_mine', [blocksToMine]); + await hre.network.provider.send('hardhat_mine', [new BN(blocksToMine)]); } async simulate(fullSimulation = false, force?: boolean) { From 1950648a7c45544a6cf92fb3765dc0522a7e87fd Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Thu, 5 May 2022 13:13:24 +0100 Subject: [PATCH 078/121] refactor: update affected contrat signoff --- test/integration/proposals_config.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/integration/proposals_config.ts b/test/integration/proposals_config.ts index 8d9c83d4e..c50af56c3 100644 --- a/test/integration/proposals_config.ts +++ b/test/integration/proposals_config.ts @@ -37,6 +37,8 @@ const proposals: ProposalsConfigMap = { 'tribalCouncilTimelock', 'feiDAOTimelock', 'roleBastion', + 'pcvGuardianNew', + 'pcvGuardian', 'opsOptimisticTimelock', 'optimisticTimelock', 'tribalChiefSyncV2' From 545b32112c0b5ec51107d155100abc0b2a01995f Mon Sep 17 00:00:00 2001 From: Caleb Date: Thu, 5 May 2022 05:23:08 -0700 Subject: [PATCH 079/121] fix bugs --- test/integration/tests/dao.ts | 2 +- test/integration/tests/staking.ts | 5 ++--- test/unit/dao/governor/FeiDao.test.ts | 2 +- test/unit/staking/TribalChiefPart1.test.ts | 8 +++----- test/unit/staking/TribalChiefPart2.test.ts | 9 +++------ 5 files changed, 10 insertions(+), 16 deletions(-) diff --git a/test/integration/tests/dao.ts b/test/integration/tests/dao.ts index 7e4ad7515..384b1476e 100644 --- a/test/integration/tests/dao.ts +++ b/test/integration/tests/dao.ts @@ -97,7 +97,7 @@ describe('e2e-dao', function () { // advance to end of voting period const endBlock = (await feiDAO.proposals(pid)).endBlock; - await time.advanceBlockTo(endBlock.toString()); + await time.advanceBlockTo(endBlock.toNumber()); // queue await feiDAO['queue(address[],uint256[],bytes[],bytes32)']( diff --git a/test/integration/tests/staking.ts b/test/integration/tests/staking.ts index 171444794..c7927d7ec 100644 --- a/test/integration/tests/staking.ts +++ b/test/integration/tests/staking.ts @@ -15,6 +15,7 @@ import { expectApprox, getImpersonatedSigner, resetFork, time } from '@test/help import proposals from '@test/integration/proposals_config'; import { TestEndtoEndCoordinator } from '../setup'; import { forceEth } from '@test/integration/setup/utils'; +import { BN } from 'ethereumjs-util'; const toBN = ethers.BigNumber.from; @@ -215,9 +216,7 @@ describe('e2e-staking', function () { const startingTribeBalance = await tribe.balanceOf(rariRewardsDistributorDelegator); const blocksToAdvance = 10; - for (let i = 0; i < blocksToAdvance; i++) { - await time.advanceBlock(); - } + await hre.network.provider.send('hardhat_mine', [new BN(blocksToAdvance)]); /// add 1 as calling the harvest is another block where rewards are received const pendingTribe = toBN(blocksToAdvance + 1) diff --git a/test/unit/dao/governor/FeiDao.test.ts b/test/unit/dao/governor/FeiDao.test.ts index c3b2c106f..6c383bfef 100644 --- a/test/unit/dao/governor/FeiDao.test.ts +++ b/test/unit/dao/governor/FeiDao.test.ts @@ -138,7 +138,7 @@ describe('FeiDAO', function () { // advance to end of voting period const endBlock = (await feiDAO.proposals(pid)).endBlock; - await time.advanceBlockTo(endBlock.toString()); + await time.advanceBlockTo(endBlock.toNumber()); // queue await feiDAO['queue(uint256)'](pid); diff --git a/test/unit/staking/TribalChiefPart1.test.ts b/test/unit/staking/TribalChiefPart1.test.ts index 6c756ab75..42d96b908 100644 --- a/test/unit/staking/TribalChiefPart1.test.ts +++ b/test/unit/staking/TribalChiefPart1.test.ts @@ -9,8 +9,9 @@ import { time } from '../../helpers'; import { expectRevert, expectUnspecifiedRevert, getCore, getAddresses, expectApprox } from '../../helpers'; import { expect } from 'chai'; import hre, { ethers } from 'hardhat'; -import { Signer } from 'ethers'; +import { BigNumber, Signer } from 'ethers'; import { TransactionReceipt, TransactionResponse } from '@ethersproject/abstract-provider'; +import { BN } from 'ethereumjs-util'; const toBN = ethers.BigNumber.from; @@ -482,10 +483,7 @@ describe('TribalChief', () => { pid ); - for (let i = 0; i < 98; i++) { - await time.advanceBlock(); - } - + await hre.network.provider.send('hardhat_mine', [new BN(98)]); await this.tribalChief.updatePool(pid); const expectedAccTribePerShare = toBN(100) diff --git a/test/unit/staking/TribalChiefPart2.test.ts b/test/unit/staking/TribalChiefPart2.test.ts index 17a1a279d..071c2d7ca 100644 --- a/test/unit/staking/TribalChiefPart2.test.ts +++ b/test/unit/staking/TribalChiefPart2.test.ts @@ -11,6 +11,7 @@ import { expect } from 'chai'; import hre, { ethers } from 'hardhat'; import { Signer } from 'ethers'; import { TransactionReceipt, TransactionResponse } from '@ethersproject/abstract-provider'; +import { BN } from 'ethereumjs-util'; const toBN = ethers.BigNumber.from; @@ -600,9 +601,7 @@ describe('TribalChief', () => { // to the staked amount which is total staked x 2 expect((await this.tribalChief.poolInfo(pid)).virtualTotalSupply).to.be.equal(toBN(totalStaked).mul(toBN('2'))); - for (let i = 0; i < 50; i++) { - await time.advanceBlock(); - } + await hre.network.provider.send('hardhat_mine', [new BN(50)]); let pendingTribe = await this.tribalChief.pendingRewards(pid, userAddress); await this.tribalChief @@ -623,9 +622,7 @@ describe('TribalChief', () => { expect(await this.LPToken.balanceOf(userAddress)).to.be.equal(toBN(totalStaked)); expect(await this.tribe.balanceOf(userAddress)).to.be.gte(pendingTribe); - for (let i = 0; i < 50; i++) { - await time.advanceBlock(); - } + await hre.network.provider.send('hardhat_mine', [new BN(50)]); pendingTribe = await this.tribalChief.pendingRewards(pid, userAddress); const currentTribe = await this.tribe.balanceOf(userAddress); // assert that the virtual total supply is equal to the staked amount From d16338f4bf531d40bdf08f517a3ddaed06243c46 Mon Sep 17 00:00:00 2001 From: Caleb Date: Thu, 5 May 2022 05:34:21 -0700 Subject: [PATCH 080/121] found a way to actually cache solidity source --- .circleci/config.yml | 11 +++++++++-- checksum.sh | 23 +++++++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) create mode 100755 checksum.sh diff --git a/.circleci/config.yml b/.circleci/config.yml index 4d071fc18..2c03a6529 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -25,15 +25,22 @@ jobs: paths: - node_modules - .npm + - run: # generate a checksum of all of the source solidity files to see if they have changed, which we use as the key for caching + name: Generate solidity source checksum + command: ./checksum.sh /tmp/checksum.txt - restore_cache: # Restore the solidity files cache the same way we do node_modules (by the checksum of the .json file) - key: solcache-{{ checksum "cache/solidity-files-cache.json" }} + key: solcache-{{ checksum "/tmp/checksum.txt" }} - run: name: Compile contracts command: npm run compile:hardhat + - run: # generate a checksum of all of the source solidity files to see if they have changed, which we use as the key for caching + name: Generate solidity source checksum (again) + command: ./checksum.sh /tmp/checksum.txt - save_cache: # Save the solidity files cache, the compiled artifacts, and the generated types - key: solcache-{{ checksum "cache/solidity-files-cache.json" }} + key: solcache-{{ checksum "/tmp/checksum.txt" }} paths: - artifacts + - cache/solidity-files-cache.json - types/contracts - restore_cache: # Restore the hardhat network fork cache if the hardhad-config hasn't changed key: hardhat-config-{{ checksum "hardhat.config.ts" }} diff --git a/checksum.sh b/checksum.sh new file mode 100755 index 000000000..e7fafe69b --- /dev/null +++ b/checksum.sh @@ -0,0 +1,23 @@ +#!/bin/bash +RESULT_FILE=$1 + +if [ -f $RESULT_FILE ]; then + rm $RESULT_FILE +fi +touch $RESULT_FILE + +checksum_file() { + echo `openssl md5 $1 | awk '{print $2}'` +} + +FILES=() +while read -r -d ''; do + FILES+=("$REPLY") +done < <(find ./contracts -name '*.sol' -type f -print0) + +# Loop through files and append MD5 to result file +for FILE in ${FILES[@]}; do + echo `checksum_file $FILE` >> $RESULT_FILE +done +# Now sort the file so that it is +sort $RESULT_FILE -o $RESULT_FILE \ No newline at end of file From ef19737bc15da361e41d2ef46278ac02cad62d99 Mon Sep 17 00:00:00 2001 From: Caleb Date: Thu, 5 May 2022 05:37:53 -0700 Subject: [PATCH 081/121] try to placate the bn gods --- test/helpers.ts | 2 +- test/integration/tests/staking.ts | 2 +- test/unit/staking/TribalChiefPart1.test.ts | 2 +- test/unit/staking/TribalChiefPart2.test.ts | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/test/helpers.ts b/test/helpers.ts index 5a6a9c707..759a791be 100644 --- a/test/helpers.ts +++ b/test/helpers.ts @@ -245,7 +245,7 @@ const time = { throw Error(`Target block #(${target}) is lower than current block #(${currentBlock})`); const diff = target.sub(currentBlock); - await hre.network.provider.send('hardhat_mine', [new BN(diff.toNumber())]); + await hre.network.provider.send('hardhat_mine', [diff.toHexString()]); }, advanceBlock: async (): Promise => { diff --git a/test/integration/tests/staking.ts b/test/integration/tests/staking.ts index c7927d7ec..35374e829 100644 --- a/test/integration/tests/staking.ts +++ b/test/integration/tests/staking.ts @@ -216,7 +216,7 @@ describe('e2e-staking', function () { const startingTribeBalance = await tribe.balanceOf(rariRewardsDistributorDelegator); const blocksToAdvance = 10; - await hre.network.provider.send('hardhat_mine', [new BN(blocksToAdvance)]); + await hre.network.provider.send('hardhat_mine', [BigNumber.from(blocksToAdvance).toHexString()]); /// add 1 as calling the harvest is another block where rewards are received const pendingTribe = toBN(blocksToAdvance + 1) diff --git a/test/unit/staking/TribalChiefPart1.test.ts b/test/unit/staking/TribalChiefPart1.test.ts index 42d96b908..187983887 100644 --- a/test/unit/staking/TribalChiefPart1.test.ts +++ b/test/unit/staking/TribalChiefPart1.test.ts @@ -483,7 +483,7 @@ describe('TribalChief', () => { pid ); - await hre.network.provider.send('hardhat_mine', [new BN(98)]); + await hre.network.provider.send('hardhat_mine', [BigNumber.from(98).toHexString()]); await this.tribalChief.updatePool(pid); const expectedAccTribePerShare = toBN(100) diff --git a/test/unit/staking/TribalChiefPart2.test.ts b/test/unit/staking/TribalChiefPart2.test.ts index 071c2d7ca..5e807e265 100644 --- a/test/unit/staking/TribalChiefPart2.test.ts +++ b/test/unit/staking/TribalChiefPart2.test.ts @@ -9,7 +9,7 @@ import { time } from '../../helpers'; import { expectRevert, expectUnspecifiedRevert, getCore, getAddresses, expectApprox } from '../../helpers'; import { expect } from 'chai'; import hre, { ethers } from 'hardhat'; -import { Signer } from 'ethers'; +import { BigNumber, Signer } from 'ethers'; import { TransactionReceipt, TransactionResponse } from '@ethersproject/abstract-provider'; import { BN } from 'ethereumjs-util'; @@ -601,7 +601,7 @@ describe('TribalChief', () => { // to the staked amount which is total staked x 2 expect((await this.tribalChief.poolInfo(pid)).virtualTotalSupply).to.be.equal(toBN(totalStaked).mul(toBN('2'))); - await hre.network.provider.send('hardhat_mine', [new BN(50)]); + await hre.network.provider.send('hardhat_mine', [BigNumber.from(50).toHexString()]); let pendingTribe = await this.tribalChief.pendingRewards(pid, userAddress); await this.tribalChief @@ -622,7 +622,7 @@ describe('TribalChief', () => { expect(await this.LPToken.balanceOf(userAddress)).to.be.equal(toBN(totalStaked)); expect(await this.tribe.balanceOf(userAddress)).to.be.gte(pendingTribe); - await hre.network.provider.send('hardhat_mine', [new BN(50)]); + await hre.network.provider.send('hardhat_mine', [BigNumber.from(50).toHexString()]); pendingTribe = await this.tribalChief.pendingRewards(pid, userAddress); const currentTribe = await this.tribe.balanceOf(userAddress); // assert that the virtual total supply is equal to the staked amount From 3870c7a6d1af5b8496445c6c7c5c13f78d848d53 Mon Sep 17 00:00:00 2001 From: Caleb Date: Thu, 5 May 2022 05:44:02 -0700 Subject: [PATCH 082/121] fix npm caching --- .circleci/config.yml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 2c03a6529..877afdd0e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -14,17 +14,13 @@ jobs: - checkout - restore_cache: # This one restores node_modules, and .npm if the package-lock.json checksum is the same key: package-cache-{{ checksum "package-lock.json" }} - - run: # Set the npm ci cache directory so that it won't always reinstall everything - name: Set npm cache - command: npm set cache .npm - - run: # npm ci is faster than npm install + - run: # we use npm install and not npm ci because npm ci removes node-modules entirely name: Install dependencies - command: npm ci + command: npm install - save_cache: # Save the node_modules and .npm directories into the cache by the checksum of package-lock.json key: package-cache-{{ checksum "package-lock.json" }} paths: - node_modules - - .npm - run: # generate a checksum of all of the source solidity files to see if they have changed, which we use as the key for caching name: Generate solidity source checksum command: ./checksum.sh /tmp/checksum.txt From 07391629bacdeeef5ba197bb56a82cee869306c2 Mon Sep 17 00:00:00 2001 From: Caleb Date: Thu, 5 May 2022 05:57:49 -0700 Subject: [PATCH 083/121] issue --- test/helpers.ts | 2 +- test/integration/tests/staking.ts | 4 +++- test/unit/staking/TribalChiefPart1.test.ts | 2 +- test/unit/staking/TribalChiefPart2.test.ts | 4 ++-- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/test/helpers.ts b/test/helpers.ts index 759a791be..bcdfc978a 100644 --- a/test/helpers.ts +++ b/test/helpers.ts @@ -245,7 +245,7 @@ const time = { throw Error(`Target block #(${target}) is lower than current block #(${currentBlock})`); const diff = target.sub(currentBlock); - await hre.network.provider.send('hardhat_mine', [diff.toHexString()]); + await hre.network.provider.send('hardhat_mine', [ethers.utils.hexStripZeros(diff.toHexString())]); }, advanceBlock: async (): Promise => { diff --git a/test/integration/tests/staking.ts b/test/integration/tests/staking.ts index 35374e829..da814b9d8 100644 --- a/test/integration/tests/staking.ts +++ b/test/integration/tests/staking.ts @@ -216,7 +216,9 @@ describe('e2e-staking', function () { const startingTribeBalance = await tribe.balanceOf(rariRewardsDistributorDelegator); const blocksToAdvance = 10; - await hre.network.provider.send('hardhat_mine', [BigNumber.from(blocksToAdvance).toHexString()]); + await hre.network.provider.send('hardhat_mine', [ + ethers.utils.hexStripZeros(BigNumber.from(blocksToAdvance).toHexString()) + ]); /// add 1 as calling the harvest is another block where rewards are received const pendingTribe = toBN(blocksToAdvance + 1) diff --git a/test/unit/staking/TribalChiefPart1.test.ts b/test/unit/staking/TribalChiefPart1.test.ts index 187983887..c49be5ecf 100644 --- a/test/unit/staking/TribalChiefPart1.test.ts +++ b/test/unit/staking/TribalChiefPart1.test.ts @@ -483,7 +483,7 @@ describe('TribalChief', () => { pid ); - await hre.network.provider.send('hardhat_mine', [BigNumber.from(98).toHexString()]); + await hre.network.provider.send('hardhat_mine', [ethers.utils.hexStripZeros(BigNumber.from(98).toHexString())]); await this.tribalChief.updatePool(pid); const expectedAccTribePerShare = toBN(100) diff --git a/test/unit/staking/TribalChiefPart2.test.ts b/test/unit/staking/TribalChiefPart2.test.ts index 5e807e265..79f9f4aaf 100644 --- a/test/unit/staking/TribalChiefPart2.test.ts +++ b/test/unit/staking/TribalChiefPart2.test.ts @@ -601,7 +601,7 @@ describe('TribalChief', () => { // to the staked amount which is total staked x 2 expect((await this.tribalChief.poolInfo(pid)).virtualTotalSupply).to.be.equal(toBN(totalStaked).mul(toBN('2'))); - await hre.network.provider.send('hardhat_mine', [BigNumber.from(50).toHexString()]); + await hre.network.provider.send('hardhat_mine', [ethers.utils.hexStripZeros(BigNumber.from(50).toHexString())]); let pendingTribe = await this.tribalChief.pendingRewards(pid, userAddress); await this.tribalChief @@ -622,7 +622,7 @@ describe('TribalChief', () => { expect(await this.LPToken.balanceOf(userAddress)).to.be.equal(toBN(totalStaked)); expect(await this.tribe.balanceOf(userAddress)).to.be.gte(pendingTribe); - await hre.network.provider.send('hardhat_mine', [BigNumber.from(50).toHexString()]); + await hre.network.provider.send('hardhat_mine', [ethers.utils.hexStripZeros(BigNumber.from(50).toHexString())]); pendingTribe = await this.tribalChief.pendingRewards(pid, userAddress); const currentTribe = await this.tribe.balanceOf(userAddress); // assert that the virtual total supply is equal to the staked amount From e832b5249d889080e7612b3237804d94cd17e13c Mon Sep 17 00:00:00 2001 From: Caleb Date: Thu, 5 May 2022 05:59:07 -0700 Subject: [PATCH 084/121] disable unused test --- test/integration/tests/{merger.ts => merger.ts.disabled} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename test/integration/tests/{merger.ts => merger.ts.disabled} (100%) diff --git a/test/integration/tests/merger.ts b/test/integration/tests/merger.ts.disabled similarity index 100% rename from test/integration/tests/merger.ts rename to test/integration/tests/merger.ts.disabled From 857e5f2cf574a9503d017a06f949cfa4b8a525e4 Mon Sep 17 00:00:00 2001 From: Caleb Date: Thu, 5 May 2022 06:01:48 -0700 Subject: [PATCH 085/121] why not --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 877afdd0e..86880bdef 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -98,7 +98,7 @@ jobs: e2e-test: working_directory: ~/repo executor: nodeimage - parallelism: 16 + parallelism: 32 steps: - attach_workspace: at: ./ From 207761000908316102a6b47de4c9f43cc62a979f Mon Sep 17 00:00:00 2001 From: Caleb Date: Thu, 5 May 2022 06:19:12 -0700 Subject: [PATCH 086/121] more parallel more better --- .circleci/config.yml | 2 +- test/integration/setup/loadContracts.ts | 21 +++++++++------------ 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 86880bdef..67cb4bf16 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -98,7 +98,7 @@ jobs: e2e-test: working_directory: ~/repo executor: nodeimage - parallelism: 32 + parallelism: 40 steps: - attach_workspace: at: ./ diff --git a/test/integration/setup/loadContracts.ts b/test/integration/setup/loadContracts.ts index a3faf88ec..30a6c24b5 100644 --- a/test/integration/setup/loadContracts.ts +++ b/test/integration/setup/loadContracts.ts @@ -12,19 +12,16 @@ interface MainnetContractsJSON { } export async function getAllContracts(): Promise { - const contracts: MainnetContracts = {} as MainnetContracts; const addresses = mainnetAddresses as MainnetContractsJSON; - - for (const mainnetAddressEntryName in addresses) { - const mainnetAddressEntry = addresses[mainnetAddressEntryName]; - const artifactName = mainnetAddressEntry.artifactName; - const address = mainnetAddressEntry.address; - if (artifactName == 'unknown') continue; - const contract = await ethers.getContractAt(artifactName, address); - contracts[mainnetAddressEntryName] = contract; - } - - return contracts; + const contracts = await Promise.all( + Object.entries(addresses) + .filter((entry) => entry[1].artifactName != 'unknown') + .map(async (entry) => { + return [entry[0], await ethers.getContractAt(entry[1].artifactName, entry[1].address)]; + }) + ); + + return contracts as unknown as MainnetContracts; } export function getAllContractAddresses(): NamedAddresses { From 27e980e909cc1f9a9371e8248f30b117b045f363 Mon Sep 17 00:00:00 2001 From: Caleb Date: Thu, 5 May 2022 06:20:30 -0700 Subject: [PATCH 087/121] too much parallel --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 67cb4bf16..5ab19ff00 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -98,7 +98,7 @@ jobs: e2e-test: working_directory: ~/repo executor: nodeimage - parallelism: 40 + parallelism: 28 steps: - attach_workspace: at: ./ From cf638b079376481a78b3ca15e6fd3e4c7f066412 Mon Sep 17 00:00:00 2001 From: Caleb Date: Thu, 5 May 2022 06:28:37 -0700 Subject: [PATCH 088/121] fix --- test/integration/setup/loadContracts.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/integration/setup/loadContracts.ts b/test/integration/setup/loadContracts.ts index 30a6c24b5..c2dae32dc 100644 --- a/test/integration/setup/loadContracts.ts +++ b/test/integration/setup/loadContracts.ts @@ -13,7 +13,7 @@ interface MainnetContractsJSON { export async function getAllContracts(): Promise { const addresses = mainnetAddresses as MainnetContractsJSON; - const contracts = await Promise.all( + const contractsAsArrayEntries = await Promise.all( Object.entries(addresses) .filter((entry) => entry[1].artifactName != 'unknown') .map(async (entry) => { @@ -21,7 +21,7 @@ export async function getAllContracts(): Promise { }) ); - return contracts as unknown as MainnetContracts; + return Object.fromEntries(contractsAsArrayEntries) as MainnetContracts; } export function getAllContractAddresses(): NamedAddresses { From 124ef379db42f7e0e3e3b670c8903acd64d845a2 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Thu, 5 May 2022 15:14:09 +0100 Subject: [PATCH 089/121] test: fix broken Rai PSM tests --- test/integration/tests/psm.ts | 51 +++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/test/integration/tests/psm.ts b/test/integration/tests/psm.ts index 79e70d508..997164b2c 100644 --- a/test/integration/tests/psm.ts +++ b/test/integration/tests/psm.ts @@ -9,7 +9,7 @@ import proposals from '@test/integration/proposals_config'; import { forceEth } from '@test/integration/setup/utils'; import { Contract, Signer } from 'ethers'; import { expectApprox } from '@test/helpers'; -import { FeiDAO, WETH9 } from '@custom-types/contracts'; +import { WETH9 } from '@custom-types/contracts'; const toBN = ethers.BigNumber.from; @@ -23,10 +23,8 @@ describe('e2e-peg-stability-module', function () { let ethPSMRouter: Contract; let userAddress; let minterAddress; - let governorAddress; let weth: Contract; let dai: Contract; - let daiPSM: Contract; let raiPriceBoundPSM: Contract; let ethPSM: Contract; let fei: Contract; @@ -77,7 +75,6 @@ describe('e2e-peg-stability-module', function () { } = contracts); doLogging && console.log(`Environment loaded.`); weth = contracts.weth as WETH9; - daiPSM = daiFixedPricePSM; // add any addresses you want to impersonate here const impersonatedAddresses = [ @@ -289,7 +286,7 @@ describe('e2e-peg-stability-module', function () { ); await contracts.compoundDaiPCVDeposit.deposit(); await contracts.dai.connect(signer).transfer( - contracts.daiPSM.address, + contracts.daiFixedPricePSM.address, '5500000000000000000000000' // 5.5M ); }); @@ -306,16 +303,20 @@ describe('e2e-peg-stability-module', function () { it('does drip when the dai PSM is under the threshold', async () => { const timelock = await getImpersonatedSigner(feiDAOTimelock.address); - await daiPSM + await daiFixedPricePSM .connect(timelock) - .withdrawERC20(dai.address, contracts.compoundDaiPCVDeposit.address, await dai.balanceOf(daiPSM.address)); + .withdrawERC20( + dai.address, + contracts.compoundDaiPCVDeposit.address, + await dai.balanceOf(daiFixedPricePSM.address) + ); await contracts.compoundDaiPCVDeposit.deposit(); - expect(await dai.balanceOf(daiPSM.address)).to.be.equal(0); + expect(await dai.balanceOf(daiFixedPricePSM.address)).to.be.equal(0); await daiPCVDripController.drip(); - expect(await dai.balanceOf(daiPSM.address)).to.be.equal(await daiPCVDripController.dripAmount()); + expect(await dai.balanceOf(daiFixedPricePSM.address)).to.be.equal(await daiPCVDripController.dripAmount()); }); }); @@ -324,15 +325,17 @@ describe('e2e-peg-stability-module', function () { const redeemAmount = 500_000; beforeEach(async () => { await fei.connect(impersonatedSigners[minterAddress]).mint(userAddress, redeemAmount); - await fei.connect(impersonatedSigners[userAddress]).approve(daiPSM.address, redeemAmount); + await fei.connect(impersonatedSigners[userAddress]).approve(daiFixedPricePSM.address, redeemAmount); }); it('exchanges 500,000 FEI for DAI', async () => { const startingFEIBalance = await fei.balanceOf(userAddress); const startingDAIBalance = await dai.balanceOf(userAddress); - const expectedDAIAmount = await daiPSM.getRedeemAmountOut(redeemAmount); + const expectedDAIAmount = await daiFixedPricePSM.getRedeemAmountOut(redeemAmount); - await daiPSM.connect(impersonatedSigners[userAddress]).redeem(userAddress, redeemAmount, expectedDAIAmount); + await daiFixedPricePSM + .connect(impersonatedSigners[userAddress]) + .redeem(userAddress, redeemAmount, expectedDAIAmount); const endingFEIBalance = await fei.balanceOf(userAddress); const endingDAIBalance = await dai.balanceOf(userAddress); @@ -343,7 +346,7 @@ describe('e2e-peg-stability-module', function () { }); it('DAI price sanity check', async () => { - const actualDAIAmountOut = await daiPSM.getRedeemAmountOut(redeemAmount); + const actualDAIAmountOut = await daiFixedPricePSM.getRedeemAmountOut(redeemAmount); await expectApprox(actualDAIAmountOut, redeemAmount); }); }); @@ -356,17 +359,19 @@ describe('e2e-peg-stability-module', function () { const daiSigner = await getImpersonatedSigner(daiAccount); await forceEth(daiAccount); await dai.connect(daiSigner).transfer(userAddress, mintAmount); - await dai.connect(impersonatedSigners[userAddress]).approve(daiPSM.address, mintAmount); + await dai.connect(impersonatedSigners[userAddress]).approve(daiFixedPricePSM.address, mintAmount); }); it('mint succeeds with 500_000 DAI', async () => { - const minAmountOut = await daiPSM.getMintAmountOut(mintAmount / 2); + const minAmountOut = await daiFixedPricePSM.getMintAmountOut(mintAmount / 2); const userStartingFEIBalance = await fei.balanceOf(userAddress); - const psmStartingDAIBalance = await dai.balanceOf(daiPSM.address); + const psmStartingDAIBalance = await dai.balanceOf(daiFixedPricePSM.address); - await daiPSM.connect(impersonatedSigners[userAddress]).mint(userAddress, mintAmount / 2, minAmountOut); + await daiFixedPricePSM + .connect(impersonatedSigners[userAddress]) + .mint(userAddress, mintAmount / 2, minAmountOut); - const psmEndingDAIBalance = await dai.balanceOf(daiPSM.address); + const psmEndingDAIBalance = await dai.balanceOf(daiFixedPricePSM.address); const userEndingFEIBalance = await fei.balanceOf(userAddress); expect(userEndingFEIBalance.sub(userStartingFEIBalance)).to.be.gte(minAmountOut); @@ -374,7 +379,7 @@ describe('e2e-peg-stability-module', function () { }); it('DAI price sanity check', async () => { - const actualDAIAmountOut = await daiPSM.getMintAmountOut(mintAmount); + const actualDAIAmountOut = await daiFixedPricePSM.getMintAmountOut(mintAmount); await expectApprox(actualDAIAmountOut, mintAmount); }); }); @@ -385,7 +390,13 @@ describe('e2e-peg-stability-module', function () { const redeemAmount = 10_000_000; beforeEach(async () => { await fei.connect(impersonatedSigners[minterAddress]).mint(userAddress, redeemAmount); - await fei.connect(impersonatedSigners[userAddress]).approve(rai.address, redeemAmount); + await fei.connect(impersonatedSigners[userAddress]).approve(raiPriceBoundPSM.address, redeemAmount); + + // Ensure RAI PSM has sufficient balance to redeem against + const raiWhale = '0x618788357d0ebd8a37e763adab3bc575d54c2c7d'; + await forceEth(raiWhale); + const raiWhaleSigner = await getImpersonatedSigner(raiWhale); + await rai.connect(raiWhaleSigner).transfer(raiPriceBoundPSM.address, redeemAmount); }); it('exchanges 10,000,000 FEI for rai', async () => { From 01f4bb248767787aed7cc82d571cfa446a3bfeba Mon Sep 17 00:00:00 2001 From: Caleb Ditchfield Date: Thu, 5 May 2022 23:11:21 -0700 Subject: [PATCH 090/121] fix --- .circleci/config.yml | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 5ab19ff00..5be86fa8e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -6,7 +6,7 @@ executors: - image: cimg/node:16.14 working_directory: ~/repo resource_class: xlarge - + jobs: build: executor: nodeimage @@ -19,7 +19,7 @@ jobs: command: npm install - save_cache: # Save the node_modules and .npm directories into the cache by the checksum of package-lock.json key: package-cache-{{ checksum "package-lock.json" }} - paths: + paths: - node_modules - run: # generate a checksum of all of the source solidity files to see if they have changed, which we use as the key for caching name: Generate solidity source checksum @@ -36,7 +36,6 @@ jobs: key: solcache-{{ checksum "/tmp/checksum.txt" }} paths: - artifacts - - cache/solidity-files-cache.json - types/contracts - restore_cache: # Restore the hardhat network fork cache if the hardhad-config hasn't changed key: hardhat-config-{{ checksum "hardhat.config.ts" }} @@ -76,9 +75,9 @@ jobs: steps: - attach_workspace: at: ./ - - checkout - - restore_cache: - keys: + - checkout + - restore_cache: + keys: - repo-{{ .Environment.CIRCLE_SHA1 }} - run: name: Setup env @@ -86,7 +85,7 @@ jobs: - run: name: Finish setting up env command: echo "export PATH=$PATH:$(pwd)/.foundry/bin" >> /home/circleci/.bashrc - - run: + - run: name: Install Foundry command: curl -L https://foundry.paradigm.xyz | bash; source /home/circleci/.bashrc; $HOME/.foundry/bin/foundryup - run: @@ -120,12 +119,12 @@ workflows: main: jobs: - build - - lint: + - lint: requires: - build - test-forge: requires: - - build + - build - test: requires: - build From bb7a78f31d80bf93ed39745717e92132f563f569 Mon Sep 17 00:00:00 2001 From: Caleb Ditchfield Date: Thu, 5 May 2022 23:38:30 -0700 Subject: [PATCH 091/121] fix --- .circleci/config.yml | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 5be86fa8e..94dce6887 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -23,17 +23,17 @@ jobs: - node_modules - run: # generate a checksum of all of the source solidity files to see if they have changed, which we use as the key for caching name: Generate solidity source checksum - command: ./checksum.sh /tmp/checksum.txt + command: ./sol-checksum.sh /tmp/sol-checksum.txt - restore_cache: # Restore the solidity files cache the same way we do node_modules (by the checksum of the .json file) - key: solcache-{{ checksum "/tmp/checksum.txt" }} + key: solcache-{{ checksum "/tmp/sol-checksum.txt" }} - run: name: Compile contracts command: npm run compile:hardhat - run: # generate a checksum of all of the source solidity files to see if they have changed, which we use as the key for caching name: Generate solidity source checksum (again) - command: ./checksum.sh /tmp/checksum.txt + command: ./sol-checksum.sh /tmp/sol-checksum.txt - save_cache: # Save the solidity files cache, the compiled artifacts, and the generated types - key: solcache-{{ checksum "/tmp/checksum.txt" }} + key: solcache-{{ checksum "/tmp/sol-checksum.txt" }} paths: - artifacts - types/contracts @@ -104,15 +104,26 @@ jobs: - run: name: Run end-to-end tests command: | - circleci tests glob "test/integration/**/*.ts" | circleci tests split --split-by=filesize > /tmp/tests-to-run + circleci tests glob "test/integration/**/*.ts" | circleci tests split --split-by=timings > /tmp/tests-to-run npm run test:e2e $(cat /tmp/tests-to-run) - store_test_results: path: test-results - store_artifacts: path: test-results - - save_cache: - key: hardhat-config-{{ checksum "hardhat.config.ts" }} - paths: # Save the hardhat-network-fork cache + - persist_to_worksapce: + root: ~/repo + paths: + - ./cache/hardhat-network-fork + + save-network-fork-cache: + working_directory: ~/repo + executor: nodeimage + steps: + - attach_workspace: + at: ./ + - save_cache: # Save the solidity files cache, the compiled artifacts, and the generated types + key: fork-cache-{{ checksum "hardhat.config.ts" }} + paths: - cache/hardhat-network-fork workflows: @@ -131,3 +142,6 @@ workflows: - e2e-test: requires: - build + - save-network-fork-cache: + require: + - e2e-test From 6a65f64a64f815bda7cbb792779f0aeaac672090 Mon Sep 17 00:00:00 2001 From: Caleb Ditchfield Date: Thu, 5 May 2022 23:41:45 -0700 Subject: [PATCH 092/121] Updated config.yml --- .circleci/config.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 94dce6887..996fbde57 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -110,7 +110,7 @@ jobs: path: test-results - store_artifacts: path: test-results - - persist_to_worksapce: + - persist_to_workspace: root: ~/repo paths: - ./cache/hardhat-network-fork @@ -120,7 +120,7 @@ jobs: executor: nodeimage steps: - attach_workspace: - at: ./ + at: ./ - save_cache: # Save the solidity files cache, the compiled artifacts, and the generated types key: fork-cache-{{ checksum "hardhat.config.ts" }} paths: @@ -143,5 +143,5 @@ workflows: requires: - build - save-network-fork-cache: - require: + requires: - e2e-test From 96fb04cf4389a6fd2a2aa5480e80241dfdf66c84 Mon Sep 17 00:00:00 2001 From: Caleb Ditchfield Date: Thu, 5 May 2022 23:44:36 -0700 Subject: [PATCH 093/121] rename --- checksum.sh => sol-checksum.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename checksum.sh => sol-checksum.sh (100%) diff --git a/checksum.sh b/sol-checksum.sh similarity index 100% rename from checksum.sh rename to sol-checksum.sh From 407e285797881c69cfddadd83d37aef086cd7540 Mon Sep 17 00:00:00 2001 From: Caleb Ditchfield Date: Thu, 5 May 2022 23:47:13 -0700 Subject: [PATCH 094/121] fix-sol-cache --- .gitignore | 2 +- cache/solidity-files-cache.json | 13932 ------------------------------ 2 files changed, 1 insertion(+), 13933 deletions(-) delete mode 100644 cache/solidity-files-cache.json diff --git a/.gitignore b/.gitignore index e121d2535..49fe27e92 100644 --- a/.gitignore +++ b/.gitignore @@ -8,7 +8,7 @@ coverage.json coverage/ tenderly.yaml artifacts -cache/hardhat-network-fork +cache types/contracts .eslintcache .xml diff --git a/cache/solidity-files-cache.json b/cache/solidity-files-cache.json deleted file mode 100644 index 1654599cc..000000000 --- a/cache/solidity-files-cache.json +++ /dev/null @@ -1,13932 +0,0 @@ -{ - "_format": "hh-sol-cache-2", - "files": { - "/home/caleb/fei-protocol-core/contracts/Constants.sol": { - "lastModificationDate": 1651196504860, - "contentHash": "dc72118c07af9d44022a6f0f5bd24f42", - "sourceName": "contracts/Constants.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@uniswap/v2-periphery/contracts/interfaces/IWETH.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "Constants" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@uniswap/v2-periphery/contracts/interfaces/IWETH.sol": { - "lastModificationDate": 1650954663750, - "contentHash": "270f2c1a1f22475259d5a2f6a524f72e", - "sourceName": "@uniswap/v2-periphery/contracts/interfaces/IWETH.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - ">=0.5.0" - ], - "artifacts": [ - "IWETH" - ] - }, - "/home/caleb/fei-protocol-core/contracts/tribe/TribeMinter.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "ab349a7405159b6ccc52871d5c5afe25", - "sourceName": "contracts/tribe/TribeMinter.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./ITribeMinter.sol", - "../utils/RateLimited.sol", - "../Constants.sol", - "@openzeppelin/contracts/utils/math/Math.sol", - "@openzeppelin/contracts/access/Ownable.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "TribeMinter" - ] - }, - "/home/caleb/fei-protocol-core/contracts/tribe/ITribeMinter.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "b7905a6493f0baa9b33d93983fc04547", - "sourceName": "contracts/tribe/ITribeMinter.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/IERC20.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "ITribe", - "ITribeMinter" - ] - }, - "/home/caleb/fei-protocol-core/contracts/utils/RateLimited.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "93017779d0e8264477127ec3e25b6bd0", - "sourceName": "contracts/utils/RateLimited.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../refs/CoreRef.sol", - "@openzeppelin/contracts/utils/math/Math.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "RateLimited" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/utils/math/Math.sol": { - "lastModificationDate": 1651119843910, - "contentHash": "339b9793dcbd7b5d55af725ef47de74c", - "sourceName": "@openzeppelin/contracts/utils/math/Math.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "Math" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/access/Ownable.sol": { - "lastModificationDate": 1651119843920, - "contentHash": "8398972af73b4e9e5ff3b31cad86234f", - "sourceName": "@openzeppelin/contracts/access/Ownable.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../utils/Context.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "Ownable" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { - "lastModificationDate": 1651119843750, - "contentHash": "ad7c2d0af148c8f9f097d65deeb4da6b", - "sourceName": "@openzeppelin/contracts/token/ERC20/IERC20.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IERC20" - ] - }, - "/home/caleb/fei-protocol-core/contracts/refs/CoreRef.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "8c102f50cd75f1dfe43d81e53d66b2e2", - "sourceName": "contracts/refs/CoreRef.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./ICoreRef.sol", - "@openzeppelin/contracts/security/Pausable.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "CoreRef" - ] - }, - "/home/caleb/fei-protocol-core/contracts/refs/ICoreRef.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "81c785739026a222a63950dba35a7bbe", - "sourceName": "contracts/refs/ICoreRef.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../core/ICore.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "ICoreRef" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/security/Pausable.sol": { - "lastModificationDate": 1651119843930, - "contentHash": "9c2dccab8e3a43a18c41e358763fe4d8", - "sourceName": "@openzeppelin/contracts/security/Pausable.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../utils/Context.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "Pausable" - ] - }, - "/home/caleb/fei-protocol-core/contracts/core/ICore.sol": { - "lastModificationDate": 1643166535080, - "contentHash": "f15823d155445ea9dd4bdd25d302b14c", - "sourceName": "contracts/core/ICore.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./IPermissions.sol", - "../fei/IFei.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "ICore" - ] - }, - "/home/caleb/fei-protocol-core/contracts/core/IPermissions.sol": { - "lastModificationDate": 1646115056090, - "contentHash": "a42042ac4ed6d8b2b4450ab1beadba8c", - "sourceName": "contracts/core/IPermissions.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/access/AccessControl.sol", - "./IPermissionsRead.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IPermissions" - ] - }, - "/home/caleb/fei-protocol-core/contracts/fei/IFei.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "2ec9d579772f0206fe29b19edc874cfe", - "sourceName": "contracts/fei/IFei.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/IERC20.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IFei" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/access/AccessControl.sol": { - "lastModificationDate": 1651119842740, - "contentHash": "08101487003fda67e21e6d2cfe35bb2e", - "sourceName": "@openzeppelin/contracts/access/AccessControl.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./IAccessControl.sol", - "../utils/Context.sol", - "../utils/Strings.sol", - "../utils/introspection/ERC165.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "AccessControl" - ] - }, - "/home/caleb/fei-protocol-core/contracts/core/IPermissionsRead.sol": { - "lastModificationDate": 1646115056090, - "contentHash": "67ac44954e83b7eb4bc48726071151f6", - "sourceName": "contracts/core/IPermissionsRead.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IPermissionsRead" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/access/IAccessControl.sol": { - "lastModificationDate": 1651119843570, - "contentHash": "57c84298234411cea19c7c284d86be8b", - "sourceName": "@openzeppelin/contracts/access/IAccessControl.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IAccessControl" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/utils/Context.sol": { - "lastModificationDate": 1651119842870, - "contentHash": "5f2c5c4b6af2dd4551027144797bc8be", - "sourceName": "@openzeppelin/contracts/utils/Context.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "Context" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/utils/Strings.sol": { - "lastModificationDate": 1651119844020, - "contentHash": "9c54c6c065d9e590fdcdd72c451425b9", - "sourceName": "@openzeppelin/contracts/utils/Strings.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "Strings" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol": { - "lastModificationDate": 1651119843170, - "contentHash": "0e7db055ce108f9da7bb6686a00287c0", - "sourceName": "@openzeppelin/contracts/utils/introspection/ERC165.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./IERC165.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "ERC165" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol": { - "lastModificationDate": 1651119843720, - "contentHash": "03e6768535ac4da0e9756f1d8a4a018a", - "sourceName": "@openzeppelin/contracts/utils/introspection/IERC165.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IERC165" - ] - }, - "/home/caleb/fei-protocol-core/contracts/timelocks/TimelockedDelegator.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "a298346e86014827243bd06241afbfb1", - "sourceName": "contracts/timelocks/TimelockedDelegator.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/access/Ownable.sol", - "./ITimelockedDelegator.sol", - "./LinearTokenTimelock.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "Delegatee", - "TimelockedDelegator" - ] - }, - "/home/caleb/fei-protocol-core/contracts/timelocks/ITimelockedDelegator.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "a74b076f1b6f87ede9db5866399fb965", - "sourceName": "contracts/timelocks/ITimelockedDelegator.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/IERC20.sol", - "../fei/IFei.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "ITimelockedDelegator", - "ITribe" - ] - }, - "/home/caleb/fei-protocol-core/contracts/timelocks/LinearTokenTimelock.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "1c423a365056dbd4dc46d9d77e100922", - "sourceName": "contracts/timelocks/LinearTokenTimelock.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./TokenTimelock.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "LinearTokenTimelock" - ] - }, - "/home/caleb/fei-protocol-core/contracts/timelocks/TokenTimelock.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "c30b2d816080a53225e7eeaac6b8fadd", - "sourceName": "contracts/timelocks/TokenTimelock.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../utils/Timed.sol", - "./ITokenTimelock.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "TokenTimelock" - ] - }, - "/home/caleb/fei-protocol-core/contracts/utils/Timed.sol": { - "lastModificationDate": 1646115056100, - "contentHash": "d15b08a72dc46a3a93f9973edafc5729", - "sourceName": "contracts/utils/Timed.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "Timed" - ] - }, - "/home/caleb/fei-protocol-core/contracts/timelocks/ITokenTimelock.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "a7276c867af9da16059cb974aea2865b", - "sourceName": "contracts/timelocks/ITokenTimelock.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/IERC20.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "ITokenTimelock" - ] - }, - "/home/caleb/fei-protocol-core/contracts/timelocks/QuadraticTokenTimelock.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "8389ae542098eb73b47aa357957a37bc", - "sourceName": "contracts/timelocks/QuadraticTokenTimelock.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./TokenTimelock.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "QuadraticTokenTimelock" - ] - }, - "/home/caleb/fei-protocol-core/contracts/timelocks/QuadraticTimelockedSubdelegator.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "9dcd61f1aa55f96c4b8669f0651e2214", - "sourceName": "contracts/timelocks/QuadraticTimelockedSubdelegator.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/access/Ownable.sol", - "./ITimelockedDelegator.sol", - "./QuadraticTokenTimelock.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "Delegatee", - "QuadtraticTimelockedSubdelegator" - ] - }, - "/home/caleb/fei-protocol-core/contracts/test/unit/Fei.t.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "c45de6b4102572580216108108eeb0ce", - "sourceName": "contracts/test/unit/Fei.t.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/IERC20.sol", - "../../fei/IFei.sol", - "../../fei/Fei.sol", - "../../core/ICore.sol", - "../../core/Core.sol", - "../utils/Vm.sol", - "../utils/DSTest.sol", - "../utils/Fixtures.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "FeiTest" - ] - }, - "/home/caleb/fei-protocol-core/contracts/fei/Fei.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "c996e65691236d6db00db78bd66b2072", - "sourceName": "contracts/fei/Fei.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol", - "./IIncentive.sol", - "../refs/CoreRef.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "Fei" - ] - }, - "/home/caleb/fei-protocol-core/contracts/core/Core.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "5290f3850051e3ae01c55c1d06efa645", - "sourceName": "contracts/core/Core.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/proxy/utils/Initializable.sol", - "./Permissions.sol", - "./ICore.sol", - "../fei/Fei.sol", - "../tribe/Tribe.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "Core" - ] - }, - "/home/caleb/fei-protocol-core/contracts/test/utils/Vm.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "111469f30ba587b11c2d58fc6fe0709b", - "sourceName": "contracts/test/utils/Vm.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "Vm" - ] - }, - "/home/caleb/fei-protocol-core/contracts/test/utils/DSTest.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "4beb4825e39f21061d27f31bae54e973", - "sourceName": "contracts/test/utils/DSTest.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../../utils/Deviation.sol" - ], - "versionPragmas": [ - ">=0.4.23" - ], - "artifacts": [ - "DSTest" - ] - }, - "/home/caleb/fei-protocol-core/contracts/test/utils/Fixtures.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "600411255ddc192aa9bea1cabad137c3", - "sourceName": "contracts/test/utils/Fixtures.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../../core/Core.sol", - "./Vm.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "DummyStorage" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol": { - "lastModificationDate": 1651119843240, - "contentHash": "a1c7f80ae26f5b2d7d563475627fbf25", - "sourceName": "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../ERC20.sol", - "../../../utils/Context.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "ERC20Burnable" - ] - }, - "/home/caleb/fei-protocol-core/contracts/fei/IIncentive.sol": { - "lastModificationDate": 1643166535080, - "contentHash": "d7def660d936191ef6c9eae84c9ecaec", - "sourceName": "contracts/fei/IIncentive.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IIncentive" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol": { - "lastModificationDate": 1651119843240, - "contentHash": "a9d2146925da52142435d3bb8df53c3c", - "sourceName": "@openzeppelin/contracts/token/ERC20/ERC20.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./IERC20.sol", - "./extensions/IERC20Metadata.sol", - "../../utils/Context.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "ERC20" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": { - "lastModificationDate": 1651119843750, - "contentHash": "909ab67fc5c25033fe6cd364f8c056f9", - "sourceName": "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../IERC20.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IERC20Metadata" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/proxy/utils/Initializable.sol": { - "lastModificationDate": 1651119843870, - "contentHash": "f0c92df5bfd98a90d0eda04719bafda5", - "sourceName": "@openzeppelin/contracts/proxy/utils/Initializable.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../../utils/Address.sol" - ], - "versionPragmas": [ - "^0.8.2" - ], - "artifacts": [ - "Initializable" - ] - }, - "/home/caleb/fei-protocol-core/contracts/core/Permissions.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "9924619bc76a9be77da22c68c96c52c2", - "sourceName": "contracts/core/Permissions.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/access/AccessControlEnumerable.sol", - "./IPermissions.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "Permissions" - ] - }, - "/home/caleb/fei-protocol-core/contracts/tribe/Tribe.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "d05ec7df12e225252d7c5b5e7816b707", - "sourceName": "contracts/tribe/Tribe.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "Tribe" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/utils/Address.sol": { - "lastModificationDate": 1651119842770, - "contentHash": "ad714a6368ee7d43cded6bbe8af0b155", - "sourceName": "@openzeppelin/contracts/utils/Address.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.1" - ], - "artifacts": [ - "Address" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/access/AccessControlEnumerable.sol": { - "lastModificationDate": 1651119842750, - "contentHash": "b6d9b165dc57e9ad8153bdca05c783a4", - "sourceName": "@openzeppelin/contracts/access/AccessControlEnumerable.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./IAccessControlEnumerable.sol", - "./AccessControl.sol", - "../utils/structs/EnumerableSet.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "AccessControlEnumerable" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/access/IAccessControlEnumerable.sol": { - "lastModificationDate": 1651119843580, - "contentHash": "4e71cc90682e109e999ce2bd329f6572", - "sourceName": "@openzeppelin/contracts/access/IAccessControlEnumerable.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./IAccessControl.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IAccessControlEnumerable" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/utils/structs/EnumerableSet.sol": { - "lastModificationDate": 1651119843040, - "contentHash": "ee7890ed6993382898aeeed014cffab8", - "sourceName": "@openzeppelin/contracts/utils/structs/EnumerableSet.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "EnumerableSet" - ] - }, - "/home/caleb/fei-protocol-core/contracts/utils/Deviation.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "d077d44afc92da26d5541629ab320e61", - "sourceName": "contracts/utils/Deviation.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./../Constants.sol", - "@openzeppelin/contracts/utils/math/SafeCast.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "Deviation" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": { - "lastModificationDate": 1651119843970, - "contentHash": "cd91252bfcbee6eaba8f5144f504583c", - "sourceName": "@openzeppelin/contracts/utils/math/SafeCast.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "SafeCast" - ] - }, - "/home/caleb/fei-protocol-core/contracts/test/unit/NonCustodialPSM.t.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "9e5e7987fe7ae9f56f14dc91a149f2aa", - "sourceName": "contracts/test/unit/NonCustodialPSM.t.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/ERC20.sol", - "@openzeppelin/contracts/utils/math/SafeCast.sol", - "../../mock/MockPCVDepositV2.sol", - "../../pcv/IPCVDeposit.sol", - "../../mock/MockERC20.sol", - "../../core/ICore.sol", - "../../oracle/ConstantOracle.sol", - "../../core/Core.sol", - "../../fei/Fei.sol", - "../../peg/NonCustodialPSM.sol", - "./../utils/Vm.sol", - "./../utils/DSTest.sol", - "./../utils/Fixtures.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "NonCustodialPSMTest" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockPCVDepositV2.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "f1f122e09db05e1c523b062e4af662a4", - "sourceName": "contracts/mock/MockPCVDepositV2.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../refs/CoreRef.sol", - "../pcv/IPCVDeposit.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockPCVDepositV2" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/IPCVDeposit.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "35c94152a5c8f4cc33114251574d4d21", - "sourceName": "contracts/pcv/IPCVDeposit.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./IPCVDepositBalances.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IPCVDeposit" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockERC20.sol": { - "lastModificationDate": 1646115056090, - "contentHash": "45dc5b316181d9fda92445b5781d7844", - "sourceName": "contracts/mock/MockERC20.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol", - "@openzeppelin/contracts/token/ERC20/ERC20.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockERC20" - ] - }, - "/home/caleb/fei-protocol-core/contracts/oracle/ConstantOracle.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "2a767c72d5b06797124db5a35d131169", - "sourceName": "contracts/oracle/ConstantOracle.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./IOracle.sol", - "../refs/CoreRef.sol", - "../Constants.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "ConstantOracle" - ] - }, - "/home/caleb/fei-protocol-core/contracts/peg/NonCustodialPSM.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "416f1b33858261f89f96cd03755a4cec", - "sourceName": "contracts/peg/NonCustodialPSM.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../external/Decimal.sol", - "../Constants.sol", - "./../refs/OracleRef.sol", - "./../core/TribeRoles.sol", - "./../utils/RateLimited.sol", - "./../pcv/PCVDeposit.sol", - "./INonCustodialPSM.sol", - "./../utils/GlobalRateLimitedMinter.sol", - "@openzeppelin/contracts/utils/math/Math.sol", - "@openzeppelin/contracts/token/ERC20/IERC20.sol", - "@openzeppelin/contracts/utils/math/SafeCast.sol", - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "@openzeppelin/contracts/security/ReentrancyGuard.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "NonCustodialPSM" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/IPCVDepositBalances.sol": { - "lastModificationDate": 1646115056100, - "contentHash": "6437ddda65cc0f9d00c300cae1f12282", - "sourceName": "contracts/pcv/IPCVDepositBalances.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IPCVDepositBalances" - ] - }, - "/home/caleb/fei-protocol-core/contracts/oracle/IOracle.sol": { - "lastModificationDate": 1646115056100, - "contentHash": "b49826b512a072f62714f469ead33be5", - "sourceName": "contracts/oracle/IOracle.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../external/Decimal.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IOracle" - ] - }, - "/home/caleb/fei-protocol-core/contracts/external/Decimal.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "f1273c8a4f46c32f88bc8275d8c6943f", - "sourceName": "contracts/external/Decimal.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/utils/math/SafeMath.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "Decimal" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/utils/math/SafeMath.sol": { - "lastModificationDate": 1651119843990, - "contentHash": "2337f0279507b5edf14a07067adf0d05", - "sourceName": "@openzeppelin/contracts/utils/math/SafeMath.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "SafeMath" - ] - }, - "/home/caleb/fei-protocol-core/contracts/refs/OracleRef.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "2eaf5c78b8a5a26d728b4a69929a4360", - "sourceName": "contracts/refs/OracleRef.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./IOracleRef.sol", - "./CoreRef.sol", - "@openzeppelin/contracts/utils/math/SafeCast.sol", - "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "OracleRef" - ] - }, - "/home/caleb/fei-protocol-core/contracts/core/TribeRoles.sol": { - "lastModificationDate": 1651742826860, - "contentHash": "ce99f75f5984832ca52ce856ac111002", - "sourceName": "contracts/core/TribeRoles.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "TribeRoles" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/PCVDeposit.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "a1dd68be8841b6a67478b4b2eb5d616d", - "sourceName": "contracts/pcv/PCVDeposit.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../refs/CoreRef.sol", - "./IPCVDeposit.sol", - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "PCVDeposit" - ] - }, - "/home/caleb/fei-protocol-core/contracts/peg/INonCustodialPSM.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "aba53704305659abe65d0f77b1c972e2", - "sourceName": "contracts/peg/INonCustodialPSM.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/IERC20.sol", - "../pcv/IPCVDeposit.sol", - "../utils/GlobalRateLimitedMinter.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "INonCustodialPSM" - ] - }, - "/home/caleb/fei-protocol-core/contracts/utils/GlobalRateLimitedMinter.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "076e03fcc1ab67d45cec0039b4b3fa60", - "sourceName": "contracts/utils/GlobalRateLimitedMinter.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./MultiRateLimited.sol", - "./IGlobalRateLimitedMinter.sol", - "./../refs/CoreRef.sol", - "@openzeppelin/contracts/utils/math/Math.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "GlobalRateLimitedMinter" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { - "lastModificationDate": 1651119843990, - "contentHash": "76814c83c32552ed2b521c816b4d801a", - "sourceName": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../IERC20.sol", - "../../../utils/Address.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "SafeERC20" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/security/ReentrancyGuard.sol": { - "lastModificationDate": 1651119843960, - "contentHash": "92f9448b23a90ea3bb932ee55cc3ccce", - "sourceName": "@openzeppelin/contracts/security/ReentrancyGuard.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "ReentrancyGuard" - ] - }, - "/home/caleb/fei-protocol-core/contracts/refs/IOracleRef.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "c9ebc7fe787db6315b5d815f5cc5a78e", - "sourceName": "contracts/refs/IOracleRef.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../oracle/IOracle.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IOracleRef" - ] - }, - "/home/caleb/fei-protocol-core/contracts/utils/MultiRateLimited.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "e716ef5854017556a03e36e5d6b15cf8", - "sourceName": "contracts/utils/MultiRateLimited.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../refs/CoreRef.sol", - "./../core/TribeRoles.sol", - "./RateLimited.sol", - "./IMultiRateLimited.sol", - "@openzeppelin/contracts/utils/math/Math.sol", - "@openzeppelin/contracts/utils/math/SafeCast.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MultiRateLimited" - ] - }, - "/home/caleb/fei-protocol-core/contracts/utils/IGlobalRateLimitedMinter.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "11eae3af65a80a0381428a71edcde945", - "sourceName": "contracts/utils/IGlobalRateLimitedMinter.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./IMultiRateLimited.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IGlobalRateLimitedMinter" - ] - }, - "/home/caleb/fei-protocol-core/contracts/utils/IMultiRateLimited.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "8b526da918254ff4285a8bae3fbc836b", - "sourceName": "contracts/utils/IMultiRateLimited.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IMultiRateLimited" - ] - }, - "/home/caleb/fei-protocol-core/contracts/test/unit/governance/PodExecutor.t.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "030312bc27cbd2f808b9f88807cb9c99", - "sourceName": "contracts/test/unit/governance/PodExecutor.t.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../../utils/DSTest.sol", - "../../utils/Vm.sol", - "../../utils/Fixtures.sol", - "../../../pods/PodExecutor.sol", - "../../../core/TribeRoles.sol", - "../../../core/Core.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "PodExecutorTest" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pods/PodExecutor.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "1ab8c6396ede9e5beb62c69b560ffd69", - "sourceName": "contracts/pods/PodExecutor.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../dao/timelock/ITimelock.sol", - "../refs/CoreRef.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "PodExecutor" - ] - }, - "/home/caleb/fei-protocol-core/contracts/dao/timelock/ITimelock.sol": { - "lastModificationDate": 1651196504860, - "contentHash": "c9384352f04382f5b416b26a0b2092c4", - "sourceName": "contracts/dao/timelock/ITimelock.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "ITimelock" - ] - }, - "/home/caleb/fei-protocol-core/contracts/test/unit/governance/NopeDAO.t.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "ebbe3c3514d8cd8303eee14790e86be8", - "sourceName": "contracts/test/unit/governance/NopeDAO.t.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/IERC20.sol", - "@openzeppelin/contracts/token/ERC20/extensions/ERC20VotesComp.sol", - "../../../core/Core.sol", - "../../utils/Vm.sol", - "../../utils/DSTest.sol", - "../../../dao/nopeDAO/NopeDAO.sol", - "../../utils/Fixtures.sol", - "../../../tribe/Tribe.sol", - "../../../core/TribeRoles.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "NopeDAOTest" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20VotesComp.sol": { - "lastModificationDate": 1651119843320, - "contentHash": "85de097d4da905cf320e89d73840291a", - "sourceName": "@openzeppelin/contracts/token/ERC20/extensions/ERC20VotesComp.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./ERC20Votes.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "ERC20VotesComp" - ] - }, - "/home/caleb/fei-protocol-core/contracts/dao/nopeDAO/NopeDAO.sol": { - "lastModificationDate": 1651196504860, - "contentHash": "6199e223bf5d5affa816ea891adb4d86", - "sourceName": "contracts/dao/nopeDAO/NopeDAO.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/governance/Governor.sol", - "@openzeppelin/contracts/governance/extensions/GovernorSettings.sol", - "@openzeppelin/contracts/governance/extensions/GovernorVotesComp.sol", - "@openzeppelin/contracts/governance/extensions/GovernorCountingSimple.sol", - "@openzeppelin/contracts/token/ERC20/extensions/ERC20VotesComp.sol", - "../../refs/CoreRef.sol", - "../../core/TribeRoles.sol", - "./GovernorQuickReaction.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "NopeDAO" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol": { - "lastModificationDate": 1651119843310, - "contentHash": "d750921452f3bf2ab170f55cf4f5dc71", - "sourceName": "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./draft-ERC20Permit.sol", - "../../../utils/math/Math.sol", - "../../../governance/utils/IVotes.sol", - "../../../utils/math/SafeCast.sol", - "../../../utils/cryptography/ECDSA.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "ERC20Votes" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol": { - "lastModificationDate": 1651119842980, - "contentHash": "3c98f8ccc741d97ece615ce32d638d4c", - "sourceName": "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./draft-IERC20Permit.sol", - "../ERC20.sol", - "../../../utils/cryptography/draft-EIP712.sol", - "../../../utils/cryptography/ECDSA.sol", - "../../../utils/Counters.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "ERC20Permit" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/governance/utils/IVotes.sol": { - "lastModificationDate": 1651119843880, - "contentHash": "a036d40989f21d08bb990e68d0088fa1", - "sourceName": "@openzeppelin/contracts/governance/utils/IVotes.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IVotes" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol": { - "lastModificationDate": 1651119843030, - "contentHash": "482bcc512029ecf51ca4ae85cf4667c7", - "sourceName": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../Strings.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "ECDSA" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol": { - "lastModificationDate": 1651119843020, - "contentHash": "fb77f144244b9ab12533aa6ce85ef8c5", - "sourceName": "@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IERC20Permit" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/utils/cryptography/draft-EIP712.sol": { - "lastModificationDate": 1651119842960, - "contentHash": "161aae4dc1450371d0f324488f66a9cf", - "sourceName": "@openzeppelin/contracts/utils/cryptography/draft-EIP712.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./ECDSA.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "EIP712" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/utils/Counters.sol": { - "lastModificationDate": 1651119842870, - "contentHash": "74654e3ae5d7f39555055dfe244dab7a", - "sourceName": "@openzeppelin/contracts/utils/Counters.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "Counters" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/governance/Governor.sol": { - "lastModificationDate": 1651119843500, - "contentHash": "3b010e281b1e40085e4e028370fce27e", - "sourceName": "@openzeppelin/contracts/governance/Governor.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../token/ERC721/IERC721Receiver.sol", - "../token/ERC1155/IERC1155Receiver.sol", - "../utils/cryptography/ECDSA.sol", - "../utils/cryptography/draft-EIP712.sol", - "../utils/introspection/ERC165.sol", - "../utils/math/SafeCast.sol", - "../utils/structs/DoubleEndedQueue.sol", - "../utils/Address.sol", - "../utils/Context.sol", - "../utils/Timers.sol", - "./IGovernor.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "Governor" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/governance/extensions/GovernorSettings.sol": { - "lastModificationDate": 1651119843540, - "contentHash": "2c6e87fa9b63c7ef8579eb4ae937d4c2", - "sourceName": "@openzeppelin/contracts/governance/extensions/GovernorSettings.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../Governor.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "GovernorSettings" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/governance/extensions/GovernorVotesComp.sol": { - "lastModificationDate": 1651119843570, - "contentHash": "b5275e42abd62e4780bd73bc69492d33", - "sourceName": "@openzeppelin/contracts/governance/extensions/GovernorVotesComp.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../Governor.sol", - "../../token/ERC20/extensions/ERC20VotesComp.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "GovernorVotesComp" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/governance/extensions/GovernorCountingSimple.sol": { - "lastModificationDate": 1651119843530, - "contentHash": "02b1526768c0ab245c630eb5a6b160fc", - "sourceName": "@openzeppelin/contracts/governance/extensions/GovernorCountingSimple.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../Governor.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "GovernorCountingSimple" - ] - }, - "/home/caleb/fei-protocol-core/contracts/dao/nopeDAO/GovernorQuickReaction.sol": { - "lastModificationDate": 1651196504860, - "contentHash": "443d64ee874f19a9c61c6f4e111ded17", - "sourceName": "contracts/dao/nopeDAO/GovernorQuickReaction.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/governance/Governor.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "GovernorQuickReaction" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol": { - "lastModificationDate": 1651119843800, - "contentHash": "c22d4395e33763de693fd440c6fd10e1", - "sourceName": "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IERC721Receiver" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol": { - "lastModificationDate": 1651119843680, - "contentHash": "9f8822b72fe2702979e40160cb6d9636", - "sourceName": "@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../../utils/introspection/IERC165.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IERC1155Receiver" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol": { - "lastModificationDate": 1651119842950, - "contentHash": "1252685551a5afdb6005499e0f549eff", - "sourceName": "@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../math/SafeCast.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "DoubleEndedQueue" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/utils/Timers.sol": { - "lastModificationDate": 1651119844030, - "contentHash": "ae135102abee8b2fc88eed09a40cdb4c", - "sourceName": "@openzeppelin/contracts/utils/Timers.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "Timers" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/governance/IGovernor.sol": { - "lastModificationDate": 1651119843850, - "contentHash": "78a871d820f3a4ae7ba2fe1604eae259", - "sourceName": "@openzeppelin/contracts/governance/IGovernor.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../utils/introspection/ERC165.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IGovernor" - ] - }, - "/home/caleb/fei-protocol-core/contracts/test/integration/governance/RoleBastion.t.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "cad320e749896cfaaba91d8c77e46c51", - "sourceName": "contracts/test/integration/governance/RoleBastion.t.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../../utils/DSTest.sol", - "../../utils/Vm.sol", - "../../utils/Fixtures.sol", - "../../../pods/RoleBastion.sol", - "../../../core/TribeRoles.sol", - "../../../core/Core.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "RoleBastionIntegrationTest" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pods/RoleBastion.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "86e4a1a68d46d3b8d29af2ca09987525", - "sourceName": "contracts/pods/RoleBastion.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../core/TribeRoles.sol", - "../refs/CoreRef.sol", - "../core/Core.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "RoleBastion" - ] - }, - "/home/caleb/fei-protocol-core/contracts/sentinel/PCVSentinel.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "cc8bcb767d9e85be052de64c3ce0e008", - "sourceName": "contracts/sentinel/PCVSentinel.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/utils/Address.sol", - "@openzeppelin/contracts/utils/structs/EnumerableSet.sol", - "@rari-capital/solmate/src/utils/ReentrancyGuard.sol", - "../core/TribeRoles.sol", - "../refs/CoreRef.sol", - "../pcv/IPCVDeposit.sol", - "./IPCVSentinel.sol", - "./IGuard.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "PCVSentinel" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@rari-capital/solmate/src/utils/ReentrancyGuard.sol": { - "lastModificationDate": 1650954652950, - "contentHash": "20c95a044023884e7c4855c0d82e57f9", - "sourceName": "@rari-capital/solmate/src/utils/ReentrancyGuard.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - ">=0.8.0" - ], - "artifacts": [ - "ReentrancyGuard" - ] - }, - "/home/caleb/fei-protocol-core/contracts/sentinel/IPCVSentinel.sol": { - "lastModificationDate": 1650947999800, - "contentHash": "475ee2a583383e39e26784f38146f555", - "sourceName": "contracts/sentinel/IPCVSentinel.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IPCVSentinel" - ] - }, - "/home/caleb/fei-protocol-core/contracts/sentinel/IGuard.sol": { - "lastModificationDate": 1650947999800, - "contentHash": "5f028922dd117c59c0e53e6ab6740ff6", - "sourceName": "contracts/sentinel/IGuard.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IGuard" - ] - }, - "/home/caleb/fei-protocol-core/contracts/sentinel/guards/psmLiquidityGuard.sol": { - "lastModificationDate": 1650947999800, - "contentHash": "f10e471fe56a7f477c57ce29504bd8e5", - "sourceName": "contracts/sentinel/guards/psmLiquidityGuard.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../IGuard.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "PSMLiquidityGuard" - ] - }, - "/home/caleb/fei-protocol-core/contracts/sentinel/guards/fuseOracleLiquididtyGuard.sol": { - "lastModificationDate": 1650947999800, - "contentHash": "261f1d8c35f4e3733da227816ed0119d", - "sourceName": "contracts/sentinel/guards/fuseOracleLiquididtyGuard.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../IGuard.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "FuseOracleLiquidityGuard" - ] - }, - "/home/caleb/fei-protocol-core/contracts/sentinel/guards/examples/ReEntrancyGuard.sol": { - "lastModificationDate": 1650947999800, - "contentHash": "33d89795f9ec06cb51fe679b9ed6fef5", - "sourceName": "contracts/sentinel/guards/examples/ReEntrancyGuard.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../../IGuard.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "ReEntrancyGuard" - ] - }, - "/home/caleb/fei-protocol-core/contracts/sentinel/guards/examples/RecoverEthGuard.sol": { - "lastModificationDate": 1650947999800, - "contentHash": "c666f5516962a4bfeb6a05d9ceebef24", - "sourceName": "contracts/sentinel/guards/examples/RecoverEthGuard.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../../IGuard.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "RecoverEthGuard" - ] - }, - "/home/caleb/fei-protocol-core/contracts/sentinel/guards/examples/NoOpGuard.sol": { - "lastModificationDate": 1650947999800, - "contentHash": "4ce15c3d1f5eb7a01aabf25ea87afc55", - "sourceName": "contracts/sentinel/guards/examples/NoOpGuard.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../../IGuard.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "NoOpGuard" - ] - }, - "/home/caleb/fei-protocol-core/contracts/sentinel/guards/examples/MultiActionGuard.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "52544a5d4d46072c72621a890e622432", - "sourceName": "contracts/sentinel/guards/examples/MultiActionGuard.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../../IGuard.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MultiActionGuard" - ] - }, - "/home/caleb/fei-protocol-core/contracts/sentinel/guards/examples/BalanceGuard.sol": { - "lastModificationDate": 1650947999800, - "contentHash": "d61fc7711d51d4d807a8ca38e1ea2042", - "sourceName": "contracts/sentinel/guards/examples/BalanceGuard.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../../IGuard.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "BalanceGuard" - ] - }, - "/home/caleb/fei-protocol-core/contracts/peg/PegStabilityModule.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "37bb502c41dad0a9ab9be9e9185cd6a8", - "sourceName": "contracts/peg/PegStabilityModule.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./../pcv/PCVDeposit.sol", - "./../fei/minter/RateLimitedMinter.sol", - "./IPegStabilityModule.sol", - "./../refs/OracleRef.sol", - "../Constants.sol", - "@openzeppelin/contracts/security/ReentrancyGuard.sol", - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "PegStabilityModule" - ] - }, - "/home/caleb/fei-protocol-core/contracts/fei/minter/RateLimitedMinter.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "30a7cde67c996031b7634cf93ac383f0", - "sourceName": "contracts/fei/minter/RateLimitedMinter.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../../utils/RateLimited.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "RateLimitedMinter" - ] - }, - "/home/caleb/fei-protocol-core/contracts/peg/IPegStabilityModule.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "a0e8eba73826d9761909ad26049a660c", - "sourceName": "contracts/peg/IPegStabilityModule.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/IERC20.sol", - "../pcv/IPCVDeposit.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IPegStabilityModule" - ] - }, - "/home/caleb/fei-protocol-core/contracts/peg/PSMRouter.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "09a2937f895bbd0c2a64e2ad0817c3a0", - "sourceName": "contracts/peg/PSMRouter.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./IPSMRouter.sol", - "./PegStabilityModule.sol", - "../Constants.sol", - "../utils/RateLimited.sol", - "../pcv/IPCVDepositBalances.sol", - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "PSMRouter" - ] - }, - "/home/caleb/fei-protocol-core/contracts/peg/IPSMRouter.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "f7bcc7e8eadb7f599cb4eda9d4fbd96f", - "sourceName": "contracts/peg/IPSMRouter.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./IPegStabilityModule.sol", - "../fei/IFei.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IPSMRouter" - ] - }, - "/home/caleb/fei-protocol-core/contracts/utils/OtcEscrow.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "b1ad1500a668b7abfd6a6bb62c3af77a", - "sourceName": "contracts/utils/OtcEscrow.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/IERC20.sol", - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "OtcEscrow" - ] - }, - "/home/caleb/fei-protocol-core/contracts/tribe/stabilizer/TribeReserveStabilizer.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "bbb5b68ea9d851dee623bdf53f8ca5e7", - "sourceName": "contracts/tribe/stabilizer/TribeReserveStabilizer.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./ReserveStabilizer.sol", - "./ITribeReserveStabilizer.sol", - "../../tribe/ITribeMinter.sol", - "../../utils/Timed.sol", - "@openzeppelin/contracts/utils/math/Math.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "TribeReserveStabilizer" - ] - }, - "/home/caleb/fei-protocol-core/contracts/tribe/stabilizer/ReserveStabilizer.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "5b5bf8b77b9b6822648cbf8bd11799f5", - "sourceName": "contracts/tribe/stabilizer/ReserveStabilizer.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./IReserveStabilizer.sol", - "../../pcv/PCVDeposit.sol", - "../../refs/OracleRef.sol", - "../../Constants.sol", - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "ReserveStabilizer" - ] - }, - "/home/caleb/fei-protocol-core/contracts/tribe/stabilizer/ITribeReserveStabilizer.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "314d9b64a0aa9db9c822fa10b57f55bc", - "sourceName": "contracts/tribe/stabilizer/ITribeReserveStabilizer.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../../oracle/collateralization/ICollateralizationOracle.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "ITribeReserveStabilizer" - ] - }, - "/home/caleb/fei-protocol-core/contracts/tribe/stabilizer/IReserveStabilizer.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "42a5118152f5fc5d0e1fccd603bad93e", - "sourceName": "contracts/tribe/stabilizer/IReserveStabilizer.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IReserveStabilizer" - ] - }, - "/home/caleb/fei-protocol-core/contracts/oracle/collateralization/ICollateralizationOracle.sol": { - "lastModificationDate": 1646115056100, - "contentHash": "248e20d377de62dbdbe1a4f83227b59d", - "sourceName": "contracts/oracle/collateralization/ICollateralizationOracle.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../IOracle.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "ICollateralizationOracle" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/liquity/BAMMDeposit.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "15b647398f1a1262778a873244d3f9f0", - "sourceName": "contracts/pcv/liquity/BAMMDeposit.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../PCVDeposit.sol", - "./IBAMM.sol", - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "@openzeppelin/contracts/utils/math/Math.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "BAMMDeposit" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/liquity/IBAMM.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "04c8f7606c243fc641301bd80300b2ec", - "sourceName": "contracts/pcv/liquity/IBAMM.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "./IStabilityPool.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IBAMM" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/liquity/IStabilityPool.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "aa727e6bc909dcab6cc8043e783fbf6e", - "sourceName": "contracts/pcv/liquity/IStabilityPool.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IStabilityPool" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/balancer/BalancerLBPSwapper.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "acda2cd8e517a16560d181c6f96b34c2", - "sourceName": "contracts/pcv/balancer/BalancerLBPSwapper.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./manager/WeightedBalancerPoolManager.sol", - "./IVault.sol", - "../../utils/Timed.sol", - "../../refs/OracleRef.sol", - "../IPCVSwapper.sol", - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "BalancerLBPSwapper" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/balancer/manager/WeightedBalancerPoolManager.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "6dbb2e28c1cd214d42bedf2c5b9f966d", - "sourceName": "contracts/pcv/balancer/manager/WeightedBalancerPoolManager.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./IWeightedBalancerPoolManager.sol", - "./BaseBalancerPoolManager.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "WeightedBalancerPoolManager" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/balancer/IVault.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "b7f5a38a94906340468dfc236bf66aab", - "sourceName": "contracts/pcv/balancer/IVault.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/IERC20.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IAsset", - "IVault" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/IPCVSwapper.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "ab5349d3676d4017fe2c6a3a9fd2f332", - "sourceName": "contracts/pcv/IPCVSwapper.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IPCVSwapper" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/balancer/manager/IWeightedBalancerPoolManager.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "0ea37a21692b7e7d5014029fd490e489", - "sourceName": "contracts/pcv/balancer/manager/IWeightedBalancerPoolManager.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../IWeightedPool.sol", - "./IBaseBalancerPoolManager.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IWeightedBalancerPoolManager" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/balancer/manager/BaseBalancerPoolManager.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "5ca2a36a12b7277f9d8fc711c3949f65", - "sourceName": "contracts/pcv/balancer/manager/BaseBalancerPoolManager.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../../../refs/CoreRef.sol", - "./IBaseBalancerPoolManager.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "BaseBalancerPoolManager" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/balancer/IWeightedPool.sol": { - "lastModificationDate": 1646115056100, - "contentHash": "ec67f749fd36a80c226405676eb89a98", - "sourceName": "contracts/pcv/balancer/IWeightedPool.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./IBasePool.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IWeightedPool" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/balancer/manager/IBaseBalancerPoolManager.sol": { - "lastModificationDate": 1646115056100, - "contentHash": "225d1bb1ddfc9e3c4b326af12c9ce4d8", - "sourceName": "contracts/pcv/balancer/manager/IBaseBalancerPoolManager.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../IBasePool.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IBaseBalancerPoolManager" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/balancer/IBasePool.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "78df90466e11a3253c54a824df8062fc", - "sourceName": "contracts/pcv/balancer/IBasePool.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./IAssetManager.sol", - "./IVault.sol", - "@openzeppelin/contracts/token/ERC20/IERC20.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IBasePool" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/balancer/IAssetManager.sol": { - "lastModificationDate": 1632368757905, - "contentHash": "64544576de2967fc5cd18104327d2e68", - "sourceName": "contracts/pcv/balancer/IAssetManager.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IAssetManager" - ] - }, - "/home/caleb/fei-protocol-core/contracts/fei/minter/PCVEquityMinter.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "82b68c6f6c5c225f0d4cb1298a5fccd7", - "sourceName": "contracts/fei/minter/PCVEquityMinter.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./FeiTimedMinter.sol", - "./IPCVEquityMinter.sol", - "../../Constants.sol", - "../../pcv/IPCVSwapper.sol", - "@openzeppelin/contracts/utils/math/SafeCast.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "PCVEquityMinter" - ] - }, - "/home/caleb/fei-protocol-core/contracts/fei/minter/FeiTimedMinter.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "a1760e987e20548e56ff6b735b95ea49", - "sourceName": "contracts/fei/minter/FeiTimedMinter.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../../refs/CoreRef.sol", - "../../utils/Timed.sol", - "../../utils/Incentivized.sol", - "./RateLimitedMinter.sol", - "./IFeiTimedMinter.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "FeiTimedMinter" - ] - }, - "/home/caleb/fei-protocol-core/contracts/fei/minter/IPCVEquityMinter.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "f38752e2e5e4c8add20effea25371518", - "sourceName": "contracts/fei/minter/IPCVEquityMinter.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../../oracle/collateralization/ICollateralizationOracle.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IPCVEquityMinter" - ] - }, - "/home/caleb/fei-protocol-core/contracts/utils/Incentivized.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "857f3c21791bd034dcf31cf48f07cd10", - "sourceName": "contracts/utils/Incentivized.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../refs/CoreRef.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "Incentivized" - ] - }, - "/home/caleb/fei-protocol-core/contracts/fei/minter/IFeiTimedMinter.sol": { - "lastModificationDate": 1646115056090, - "contentHash": "c27cc15f406566a70afccffd40c7e67b", - "sourceName": "contracts/fei/minter/IFeiTimedMinter.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IFeiTimedMinter" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/utils/NamedStaticPCVDepositWrapper.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "eb5cd71fd5f8343216d72bdcabd8d38f", - "sourceName": "contracts/pcv/utils/NamedStaticPCVDepositWrapper.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../IPCVDepositBalances.sol", - "../../Constants.sol", - "../../refs/CoreRef.sol", - "@openzeppelin/contracts/utils/math/SafeCast.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "NamedStaticPCVDepositWrapper" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/utils/PCVDepositWrapper.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "f5d91a32317e8073e029a9c247f60002", - "sourceName": "contracts/pcv/utils/PCVDepositWrapper.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../IPCVDepositBalances.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "PCVDepositWrapper" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/utils/ERC20PCVDepositWrapper.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "b05314afb63c24353c99a95405f048c7", - "sourceName": "contracts/pcv/utils/ERC20PCVDepositWrapper.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../IPCVDepositBalances.sol", - "@openzeppelin/contracts/token/ERC20/IERC20.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "ERC20PCVDepositWrapper" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/uniswap/UniswapLens.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "556fcae0a944086b07926359a98bb117", - "sourceName": "contracts/pcv/uniswap/UniswapLens.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../IPCVDepositBalances.sol", - "../../refs/UniRef.sol", - "@uniswap/lib/contracts/libraries/Babylonian.sol" - ], - "versionPragmas": [ - "^0.8.10" - ], - "artifacts": [ - "UniswapLens" - ] - }, - "/home/caleb/fei-protocol-core/contracts/refs/UniRef.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "102ca3f20435edeb5cf60d16abd297f5", - "sourceName": "contracts/refs/UniRef.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./OracleRef.sol", - "./IUniRef.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "UniRef" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@uniswap/lib/contracts/libraries/Babylonian.sol": { - "lastModificationDate": 1650954644230, - "contentHash": "7e23695840ea364fb0959d203e2d5b3d", - "sourceName": "@uniswap/lib/contracts/libraries/Babylonian.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - ">=0.4.0" - ], - "artifacts": [ - "Babylonian" - ] - }, - "/home/caleb/fei-protocol-core/contracts/refs/IUniRef.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "b60577ce400ea0c5481142deb7e6b123", - "sourceName": "contracts/refs/IUniRef.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IUniRef" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol": { - "lastModificationDate": 1650954661640, - "contentHash": "3fa31c3860f2b9585c3a98c64850829e", - "sourceName": "@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - ">=0.5.0" - ], - "artifacts": [ - "IUniswapV2Pair" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/uniswap/UniswapPCVDeposit.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "7b56142ff439812ecd15206038464b1f", - "sourceName": "contracts/pcv/uniswap/UniswapPCVDeposit.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./IUniswapPCVDeposit.sol", - "../../Constants.sol", - "../PCVDeposit.sol", - "../../refs/UniRef.sol", - "@uniswap/v2-periphery/contracts/interfaces/IWETH.sol", - "@uniswap/lib/contracts/libraries/Babylonian.sol", - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "UniswapPCVDeposit" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/uniswap/IUniswapPCVDeposit.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "0cbb9683d706fe5064d50fac072fcdca", - "sourceName": "contracts/pcv/uniswap/IUniswapPCVDeposit.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IUniswapPCVDeposit" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol": { - "lastModificationDate": 1650954663740, - "contentHash": "3fd36426274a5b35f7e702f87ba08a8e", - "sourceName": "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./IUniswapV2Router01.sol" - ], - "versionPragmas": [ - ">=0.6.2" - ], - "artifacts": [ - "IUniswapV2Router02" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol": { - "lastModificationDate": 1650954663730, - "contentHash": "95d8729b2c698dc663322167b3c085fe", - "sourceName": "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - ">=0.6.2" - ], - "artifacts": [ - "IUniswapV2Router01" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/IMockUniswapV2PairLiquidity.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "02badd28c071ebc216194674e75a1377", - "sourceName": "contracts/mock/IMockUniswapV2PairLiquidity.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol", - "../external/Decimal.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IMockUniswapV2PairLiquidity" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockRouter.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "33f5ba5febb9cd5f5391b1f9c63216e1", - "sourceName": "contracts/mock/MockRouter.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/IERC20.sol", - "@openzeppelin/contracts/utils/math/SafeMath.sol", - "../external/Decimal.sol", - "./IMockUniswapV2PairLiquidity.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockRouter" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/lido/EthLidoPCVDeposit.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "8fa3d33147a8ba654b90452f8deb10cc", - "sourceName": "contracts/pcv/lido/EthLidoPCVDeposit.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../PCVDeposit.sol", - "../../Constants.sol", - "../../refs/CoreRef.sol", - "../../external/Decimal.sol", - "@openzeppelin/contracts/token/ERC20/ERC20.sol", - "@openzeppelin/contracts/token/ERC20/IERC20.sol", - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "EthLidoPCVDeposit", - "ILido", - "IStableSwapSTETH" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/governance/TimelockController.sol": { - "lastModificationDate": 1651119844020, - "contentHash": "973bd5531bb5ead6f93625277d15e5bd", - "sourceName": "@openzeppelin/contracts/governance/TimelockController.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../access/AccessControl.sol", - "../token/ERC721/IERC721Receiver.sol", - "../token/ERC1155/IERC1155Receiver.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "TimelockController" - ] - }, - "/home/caleb/fei-protocol-core/contracts/test/integration/fixtures/MainnetAddresses.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "95aa7a961a0a304647090ba8b48164b4", - "sourceName": "contracts/test/integration/fixtures/MainnetAddresses.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MainnetAddresses" - ] - }, - "/home/caleb/fei-protocol-core/contracts/test/utils/StdLib.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "1ddfc027d91d722516dfbabf8277c5ea", - "sourceName": "contracts/test/utils/StdLib.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./Vm.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "StdLib", - "stdError", - "stdStorage" - ] - }, - "/home/caleb/fei-protocol-core/contracts/test/integration/IntegrationTest.t.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "a40b35331d6189fc754e3244c2e0791c", - "sourceName": "contracts/test/integration/IntegrationTest.t.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../utils/DSTest.sol", - "../utils/StdLib.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IntegrationTest" - ] - }, - "/home/caleb/fei-protocol-core/contracts/test/integration/governance/GovernanceMetadataRegistry.t.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "d3d04b304057de4d69eb783766b2e198", - "sourceName": "contracts/test/integration/governance/GovernanceMetadataRegistry.t.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../../utils/DSTest.sol", - "../../utils/Vm.sol", - "../../../core/TribeRoles.sol", - "../../../pods/GovernanceMetadataRegistry.sol", - "../../../core/Core.sol", - "../fixtures/MainnetAddresses.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "GovernanceMetadataRegistryIntegrationTest" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pods/GovernanceMetadataRegistry.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "1019b82919bec2855ff0648a899515d7", - "sourceName": "contracts/pods/GovernanceMetadataRegistry.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../refs/CoreRef.sol", - "../core/TribeRoles.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "GovernanceMetadataRegistry" - ] - }, - "/home/caleb/fei-protocol-core/contracts/test/integration/fixtures/Gnosis.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "2c0a8c8995699c9711368cbdcc568d25", - "sourceName": "contracts/test/integration/fixtures/Gnosis.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../../../pods/interfaces/IGnosisSafe.sol", - "../../utils/Vm.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [] - }, - "/home/caleb/fei-protocol-core/contracts/pods/interfaces/IGnosisSafe.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "5b94f980c874f387e96e7f72636527d8", - "sourceName": "contracts/pods/interfaces/IGnosisSafe.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IGnosisSafe" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@gnosis.pm/zodiac/contracts/guard/BaseGuard.sol": { - "lastModificationDate": 1651119840560, - "contentHash": "d45a1301d15dba09be57c2067f5081e8", - "sourceName": "@gnosis.pm/zodiac/contracts/guard/BaseGuard.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@gnosis.pm/safe-contracts/contracts/common/Enum.sol", - "@openzeppelin/contracts/utils/introspection/IERC165.sol", - "../interfaces/IGuard.sol" - ], - "versionPragmas": [ - ">=0.7.0 <0.9.0" - ], - "artifacts": [ - "BaseGuard" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@gnosis.pm/safe-contracts/contracts/common/Enum.sol": { - "lastModificationDate": 1651119840830, - "contentHash": "70d93d6b3e8b23f419fe3e529a43c17e", - "sourceName": "@gnosis.pm/safe-contracts/contracts/common/Enum.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - ">=0.7.0 <0.9.0" - ], - "artifacts": [ - "Enum" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@gnosis.pm/zodiac/contracts/interfaces/IGuard.sol": { - "lastModificationDate": 1651119840720, - "contentHash": "f44bfd52d28472afc1810859cb08d71a", - "sourceName": "@gnosis.pm/zodiac/contracts/interfaces/IGuard.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@gnosis.pm/safe-contracts/contracts/common/Enum.sol" - ], - "versionPragmas": [ - ">=0.7.0 <0.9.0" - ], - "artifacts": [ - "IGuard" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/token/ERC1155/IERC1155.sol": { - "lastModificationDate": 1651119843670, - "contentHash": "59e1bc5713fdebc7f821dc52f4d3e0ef", - "sourceName": "@openzeppelin/contracts/token/ERC1155/IERC1155.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../../utils/introspection/IERC165.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IERC1155" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol": { - "lastModificationDate": 1651119843670, - "contentHash": "9148c2e10c4efb12c71a7f080da5559b", - "sourceName": "@openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../IERC1155.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IERC1155MetadataURI" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/token/ERC1155/ERC1155.sol": { - "lastModificationDate": 1651119843070, - "contentHash": "792473360274d02eed0fe4c691d67d16", - "sourceName": "@openzeppelin/contracts/token/ERC1155/ERC1155.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./IERC1155.sol", - "./IERC1155Receiver.sol", - "./extensions/IERC1155MetadataURI.sol", - "../../utils/Address.sol", - "../../utils/Context.sol", - "../../utils/introspection/ERC165.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "ERC1155" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol": { - "lastModificationDate": 1651119843160, - "contentHash": "6a99607f60a77d468b7ed41303ea4a6c", - "sourceName": "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../ERC1155.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "ERC1155Supply" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/utils/WethPCVDeposit.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "ecdfb84df03fcbef9a17a693523524f1", - "sourceName": "contracts/pcv/utils/WethPCVDeposit.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../PCVDeposit.sol", - "../../Constants.sol", - "@openzeppelin/contracts/utils/Address.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "WethPCVDeposit" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/aave/AavePCVDeposit.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "9473c98548d1354479b3ef68213fcead", - "sourceName": "contracts/pcv/aave/AavePCVDeposit.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../utils/WethPCVDeposit.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "AavePCVDeposit", - "IncentivesController", - "LendingPool" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockStEthStableSwap.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "490b3f91d78e88eb28564a990a4fc8a3", - "sourceName": "contracts/mock/MockStEthStableSwap.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/IERC20.sol", - "@openzeppelin/contracts/utils/Address.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockStEthStableSwap" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockEthPCVDeposit.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "cc03eab25bb1befe69f4a233ce502643", - "sourceName": "contracts/mock/MockEthPCVDeposit.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../pcv/IPCVDeposit.sol", - "@openzeppelin/contracts/utils/Address.sol", - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockEthPCVDeposit" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockEthUniswapPCVDeposit.sol": { - "lastModificationDate": 1646115056090, - "contentHash": "4318a04d39c9f2a0937eded8f9200098", - "sourceName": "contracts/mock/MockEthUniswapPCVDeposit.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./MockEthPCVDeposit.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockEthUniswapPCVDeposit" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { - "lastModificationDate": 1651119843210, - "contentHash": "6baa887a798e95b14f34e093f117e9b2", - "sourceName": "@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../beacon/IBeacon.sol", - "../../interfaces/draft-IERC1822.sol", - "../../utils/Address.sol", - "../../utils/StorageSlot.sol" - ], - "versionPragmas": [ - "^0.8.2" - ], - "artifacts": [ - "ERC1967Upgrade" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol": { - "lastModificationDate": 1651119843620, - "contentHash": "b6bd23bf19e90b771337037706470933", - "sourceName": "@openzeppelin/contracts/proxy/beacon/IBeacon.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IBeacon" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/interfaces/draft-IERC1822.sol": { - "lastModificationDate": 1651119843020, - "contentHash": "2858d98e74e67987ec81b39605230b74", - "sourceName": "@openzeppelin/contracts/interfaces/draft-IERC1822.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IERC1822Proxiable" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/utils/StorageSlot.sol": { - "lastModificationDate": 1651119844010, - "contentHash": "187a01c1e4e638014509dfee3ac6faa9", - "sourceName": "@openzeppelin/contracts/utils/StorageSlot.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "StorageSlot" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol": { - "lastModificationDate": 1651119843210, - "contentHash": "524a6c6f00b809b1184050dcc9e131d8", - "sourceName": "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../Proxy.sol", - "./ERC1967Upgrade.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "ERC1967Proxy" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/proxy/Proxy.sol": { - "lastModificationDate": 1651119843950, - "contentHash": "40b3d81a836d50ff47e03893dcaaf204", - "sourceName": "@openzeppelin/contracts/proxy/Proxy.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "Proxy" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { - "lastModificationDate": 1651119844030, - "contentHash": "433af24ebe64e49e21ea173b3744af6c", - "sourceName": "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../ERC1967/ERC1967Proxy.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "TransparentUpgradeableProxy" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol": { - "lastModificationDate": 1651119843950, - "contentHash": "a947492251ac15d6bfd899c9fdb4d82b", - "sourceName": "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./TransparentUpgradeableProxy.sol", - "../../access/Ownable.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "ProxyAdmin" - ] - }, - "/home/caleb/fei-protocol-core/contracts/external/TransparentUpgradeableProxy.sol": { - "lastModificationDate": 1646087631420, - "contentHash": "afbc21a1b1e51483062a7ba284397b06", - "sourceName": "contracts/external/TransparentUpgradeableProxy.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol", - "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/governance/compatibility/GovernorCompatibilityBravo.sol": { - "lastModificationDate": 1651119843520, - "contentHash": "bde5610ecd11f2f5930e70fda7c90165", - "sourceName": "@openzeppelin/contracts/governance/compatibility/GovernorCompatibilityBravo.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../../utils/Counters.sol", - "../../utils/math/SafeCast.sol", - "../extensions/IGovernorTimelock.sol", - "../Governor.sol", - "./IGovernorCompatibilityBravo.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "GovernorCompatibilityBravo" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/governance/extensions/IGovernorTimelock.sol": { - "lastModificationDate": 1651119843850, - "contentHash": "eebb17e144c4fd58549d815db19552da", - "sourceName": "@openzeppelin/contracts/governance/extensions/IGovernorTimelock.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../IGovernor.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IGovernorTimelock" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/governance/compatibility/IGovernorCompatibilityBravo.sol": { - "lastModificationDate": 1651119843850, - "contentHash": "150a6426dc55ba789e76389d6893f908", - "sourceName": "@openzeppelin/contracts/governance/compatibility/IGovernorCompatibilityBravo.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../IGovernor.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IGovernorCompatibilityBravo" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/governance/extensions/GovernorTimelockCompound.sol": { - "lastModificationDate": 1651119843550, - "contentHash": "756c2fabb71e0805f8bf4464638b3034", - "sourceName": "@openzeppelin/contracts/governance/extensions/GovernorTimelockCompound.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./IGovernorTimelock.sol", - "../Governor.sol", - "../../utils/math/SafeCast.sol", - "../../vendor/compound/ICompoundTimelock.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "GovernorTimelockCompound" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/vendor/compound/ICompoundTimelock.sol": { - "lastModificationDate": 1651119843640, - "contentHash": "0aa957092da3c691ed6bf15e56aedc3b", - "sourceName": "@openzeppelin/contracts/vendor/compound/ICompoundTimelock.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "ICompoundTimelock" - ] - }, - "/home/caleb/fei-protocol-core/contracts/dao/governor/FeiDAO.sol": { - "lastModificationDate": 1651196504860, - "contentHash": "29ef01e2ea8bbaa0a75e927d6e10b5bd", - "sourceName": "contracts/dao/governor/FeiDAO.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/governance/compatibility/GovernorCompatibilityBravo.sol", - "@openzeppelin/contracts/governance/extensions/GovernorTimelockCompound.sol", - "@openzeppelin/contracts/governance/extensions/GovernorVotesComp.sol", - "@openzeppelin/contracts/token/ERC20/extensions/ERC20VotesComp.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "FeiDAO" - ] - }, - "/home/caleb/fei-protocol-core/contracts/libs/CoreRefPauseableLib.sol": { - "lastModificationDate": 1646115056090, - "contentHash": "aeeb021f633bcb770563f3f5ecd11f83", - "sourceName": "contracts/libs/CoreRefPauseableLib.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../refs/CoreRef.sol", - "@openzeppelin/contracts/security/Pausable.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "CoreRefPauseableLib" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/PCVGuardian.sol": { - "lastModificationDate": 1651742826860, - "contentHash": "1703365b2d728ca1ca8e4b5c1dd4caee", - "sourceName": "contracts/pcv/PCVGuardian.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/utils/structs/EnumerableSet.sol", - "../refs/CoreRef.sol", - "./IPCVGuardian.sol", - "./IPCVDeposit.sol", - "../libs/CoreRefPauseableLib.sol", - "../core/TribeRoles.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "PCVGuardian" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/IPCVGuardian.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "41d082372c73ea6eafbdc564e5bc30aa", - "sourceName": "contracts/pcv/IPCVGuardian.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IPCVGuardian" - ] - }, - "/home/caleb/fei-protocol-core/contracts/oracle/collateralization/CollateralizationOracle.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "68e4eb7fdf21b2c820235e292e1fa4dc", - "sourceName": "contracts/oracle/collateralization/CollateralizationOracle.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../IOracle.sol", - "./ICollateralizationOracle.sol", - "../../refs/CoreRef.sol", - "../../pcv/IPCVDepositBalances.sol", - "@openzeppelin/contracts/utils/structs/EnumerableSet.sol", - "@openzeppelin/contracts/utils/math/SafeCast.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "CollateralizationOracle", - "IPausable" - ] - }, - "/home/caleb/fei-protocol-core/contracts/oracle/collateralization/ICollateralizationOracleWrapper.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "9e7619653963b5a48d0c7882c822841f", - "sourceName": "contracts/oracle/collateralization/ICollateralizationOracleWrapper.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./ICollateralizationOracle.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "ICollateralizationOracleWrapper" - ] - }, - "/home/caleb/fei-protocol-core/contracts/oracle/collateralization/CollateralizationOracleWrapper.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "27b77b3b1985df89ec10e6466f54e11a", - "sourceName": "contracts/oracle/collateralization/CollateralizationOracleWrapper.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../IOracle.sol", - "./ICollateralizationOracleWrapper.sol", - "../../Constants.sol", - "../../utils/Timed.sol", - "../../refs/CoreRef.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "CollateralizationOracleWrapper", - "IPausable" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/utils/PCVDripController.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "9c29908b26536bdf4a7e4d12c9ce62ab", - "sourceName": "contracts/pcv/utils/PCVDripController.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./IPCVDripController.sol", - "../../utils/Incentivized.sol", - "../../fei/minter/RateLimitedMinter.sol", - "../../utils/Timed.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "PCVDripController" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/utils/IPCVDripController.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "91e0b1ad8ecc6c1bee77639cd73c27e3", - "sourceName": "contracts/pcv/utils/IPCVDripController.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../IPCVDeposit.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IPCVDripController" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockRateLimitedMinter.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "30cf6f6752f8cd0335a5598ac4892002", - "sourceName": "contracts/mock/MockRateLimitedMinter.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../fei/minter/RateLimitedMinter.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockRateLimitedMinter" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockMinter.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "5e8ed487b5a99ac6d8df6784642025df", - "sourceName": "contracts/mock/MockMinter.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./../utils/GlobalRateLimitedMinter.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockMinter" - ] - }, - "/home/caleb/fei-protocol-core/contracts/keeper/CollateralizationOracleKeeper.sol": { - "lastModificationDate": 1646115056090, - "contentHash": "524b31d49c07215f2fdb15faf0ffea3d", - "sourceName": "contracts/keeper/CollateralizationOracleKeeper.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../fei/minter/FeiTimedMinter.sol", - "../oracle/collateralization/ICollateralizationOracleWrapper.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "CollateralizationOracleKeeper" - ] - }, - "/home/caleb/fei-protocol-core/contracts/fei/minter/OwnableTimedMinter.sol": { - "lastModificationDate": 1646115056090, - "contentHash": "47d9700f80c32e6fc1bc2e914dd72643", - "sourceName": "contracts/fei/minter/OwnableTimedMinter.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./FeiTimedMinter.sol", - "@openzeppelin/contracts/access/Ownable.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "OwnableTimedMinter" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/utils/ERC20Dripper.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "54b3329e8d08af6ee07d2bd74dc8ba12", - "sourceName": "contracts/pcv/utils/ERC20Dripper.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./../PCVDeposit.sol", - "./../../utils/Timed.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "ERC20Dripper" - ] - }, - "/home/caleb/fei-protocol-core/contracts/oracle/collateralization/CollateralizationOracleGuardian.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "53e58dfddfb4fa4e3802688729b99089", - "sourceName": "contracts/oracle/collateralization/CollateralizationOracleGuardian.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./ICollateralizationOracleWrapper.sol", - "../../refs/CoreRef.sol", - "../../utils/Timed.sol", - "../../Constants.sol", - "@openzeppelin/contracts/utils/math/SafeCast.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "CollateralizationOracleGuardian" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/balancer/BPTLens.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "1174e91daa40c4157013437c617ab5c6", - "sourceName": "contracts/pcv/balancer/BPTLens.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./IVault.sol", - "./IWeightedPool.sol", - "../../external/gyro/ExtendedMath.sol", - "../IPCVDepositBalances.sol", - "../../oracle/IOracle.sol", - "../../Constants.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "BPTLens" - ] - }, - "/home/caleb/fei-protocol-core/contracts/external/gyro/ExtendedMath.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "783010e144bdad22f4ffd223c341daf0", - "sourceName": "contracts/external/gyro/ExtendedMath.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./abdk/ABDKMath64x64.sol", - "@openzeppelin/contracts/utils/math/SafeMath.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "ExtendedMath" - ] - }, - "/home/caleb/fei-protocol-core/contracts/external/gyro/abdk/ABDKMath64x64.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "e89b7fe6e1d8ef5ddfc25564d7a6c3a0", - "sourceName": "contracts/external/gyro/abdk/ABDKMath64x64.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "ABDKMath64x64" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/balancer/BalancerPool2Lens.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "7688edbc7a44f4efd6b4198886adc578", - "sourceName": "contracts/pcv/balancer/BalancerPool2Lens.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./IVault.sol", - "./IWeightedPool.sol", - "../../external/gyro/ExtendedMath.sol", - "../IPCVDepositBalances.sol", - "../../oracle/IOracle.sol", - "../../Constants.sol" - ], - "versionPragmas": [ - "^0.8.10" - ], - "artifacts": [ - "BalancerPool2Lens" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/balancer/BalancerPCVDepositWeightedPool.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "3bb10df2e2de6b61eea0efaba1744e3d", - "sourceName": "contracts/pcv/balancer/BalancerPCVDepositWeightedPool.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./IVault.sol", - "./IWeightedPool.sol", - "./BalancerPCVDepositBase.sol", - "../PCVDeposit.sol", - "../../Constants.sol", - "../../refs/CoreRef.sol", - "../../oracle/IOracle.sol", - "../../external/gyro/ExtendedMath.sol", - "../../external/gyro/abdk/ABDKMath64x64.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "BalancerPCVDepositWeightedPool" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/balancer/BalancerPCVDepositBase.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "8167ead02af2a7ee6c852dd63707b8d1", - "sourceName": "contracts/pcv/balancer/BalancerPCVDepositBase.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./IVault.sol", - "./IMerkleOrchard.sol", - "./IWeightedPool.sol", - "../PCVDeposit.sol", - "../../Constants.sol", - "../../refs/CoreRef.sol", - "@openzeppelin/contracts/token/ERC20/ERC20.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "BalancerPCVDepositBase" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/balancer/IMerkleOrchard.sol": { - "lastModificationDate": 1643166535080, - "contentHash": "3d1c0d0810c9a0bd4c20162843cc5955", - "sourceName": "contracts/pcv/balancer/IMerkleOrchard.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/IERC20.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IMerkleOrchard" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockMerkleOrchard.sol": { - "lastModificationDate": 1643166535080, - "contentHash": "d19634eb948cd9855a8b6bfe6900e388", - "sourceName": "contracts/mock/MockMerkleOrchard.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/IERC20.sol", - "../pcv/balancer/IMerkleOrchard.sol", - "./MockERC20.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockMerkleOrchard" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockWeightedPool.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "69a4678d3cec9ea832c7654fdf693929", - "sourceName": "contracts/mock/MockWeightedPool.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./MockERC20.sol", - "./MockVault.sol", - "../pcv/balancer/IVault.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockWeightedPool" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockVault.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "3acfe83edd106dd56617c288e1d2992f", - "sourceName": "contracts/mock/MockVault.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "@openzeppelin/contracts/token/ERC20/IERC20.sol", - "./MockWeightedPool.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockVault" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/balancer/manager/WeightedBalancerPoolManagerBase.sol": { - "lastModificationDate": 1646115056100, - "contentHash": "0df1f35b096c5dc703112574276cb748", - "sourceName": "contracts/pcv/balancer/manager/WeightedBalancerPoolManagerBase.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./WeightedBalancerPoolManager.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "WeightedBalancerPoolManagerBase" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockTribe.sol": { - "lastModificationDate": 1646115056100, - "contentHash": "624d5ef45d0a6c1e6b30ef30ffe6f043", - "sourceName": "contracts/mock/MockTribe.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./MockERC20.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockTribe" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockTokemakRewards.sol": { - "lastModificationDate": 1638934590030, - "contentHash": "4d40548a2c8ae2c3bd6b825015ef4eee", - "sourceName": "contracts/mock/MockTokemakRewards.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./MockERC20.sol", - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "MockTokemakRewards" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockWeth.sol": { - "lastModificationDate": 1646115056100, - "contentHash": "42ed76cbcc3d6c616ad05471bcbbc452", - "sourceName": "contracts/mock/MockWeth.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./MockERC20.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockWeth" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockTokemakEthPool.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "70c9cd811cec99418881e9300059fced", - "sourceName": "contracts/mock/MockTokemakEthPool.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./MockERC20.sol", - "./MockWeth.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "MockTokemakEthPool" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockTokemakERC20Pool.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "d8e2732ecd6a8750503eb6d0c119f771", - "sourceName": "contracts/mock/MockTokemakERC20Pool.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./MockERC20.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "MockTokemakERC20Pool" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockStEthToken.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "efba5c01949c3b813c4c328207f052e1", - "sourceName": "contracts/mock/MockStEthToken.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./MockERC20.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockStEthToken" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockLendingPool.sol": { - "lastModificationDate": 1646115056090, - "contentHash": "71c05a625f0ef4d62be6edfcb4f919ae", - "sourceName": "contracts/mock/MockLendingPool.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./MockERC20.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "MockLendingPool" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockCurveMetapool.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "bb024c27e6acd3a0b6ad461debcfd0c7", - "sourceName": "contracts/mock/MockCurveMetapool.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./MockERC20.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockCurveMetapool" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockCurve3pool.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "c4abd10ddcea973ff5450021f48c90cd", - "sourceName": "contracts/mock/MockCurve3pool.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./MockERC20.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockCurve3pool" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockCToken.sol": { - "lastModificationDate": 1646115056090, - "contentHash": "fc73f96a943fdd30cc8ab81d23eb0aa7", - "sourceName": "contracts/mock/MockCToken.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./MockERC20.sol", - "hardhat/console.sol", - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "CToken", - "MockCToken" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/hardhat/console.sol": { - "lastModificationDate": 1650954664840, - "contentHash": "cc4777addd464ea56fa35b1c45df0591", - "sourceName": "hardhat/console.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - ">=0.4.22 <0.9.0" - ], - "artifacts": [ - "console" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockConvexBooster.sol": { - "lastModificationDate": 1646115056090, - "contentHash": "0c2db7520532f0261ae11f2fbae4325b", - "sourceName": "contracts/mock/MockConvexBooster.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./MockERC20.sol", - "./MockConvexBaseRewardPool.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockConvexBooster" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockConvexBaseRewardPool.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "6b2db6089b50d0b0c7b167f37630037b", - "sourceName": "contracts/mock/MockConvexBaseRewardPool.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./MockERC20.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockConvexBaseRewardPool" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockConfigurableERC20.sol": { - "lastModificationDate": 1632368757905, - "contentHash": "2be780650a48c077eb93fd5c8ce9d3d4", - "sourceName": "contracts/mock/MockConfigurableERC20.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol", - "@openzeppelin/contracts/token/ERC20/ERC20.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "MockConfigurableERC20" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockCore.sol": { - "lastModificationDate": 1646115056090, - "contentHash": "82db2e14ffc224621c50796d3690402b", - "sourceName": "contracts/mock/MockCore.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./../core/Permissions.sol", - "../fei/Fei.sol", - "../tribe/Tribe.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "MockCore" - ] - }, - "/home/caleb/fei-protocol-core/contracts/core/RestrictedPermissions.sol": { - "lastModificationDate": 1646115056090, - "contentHash": "b6cdef3e524e6aea6994206727ceff92", - "sourceName": "contracts/core/RestrictedPermissions.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./IPermissionsRead.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "RestrictedPermissions" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockRestrictedPermissions.sol": { - "lastModificationDate": 1646115056090, - "contentHash": "73e607cdd386063912c170bd7e93c810", - "sourceName": "contracts/mock/MockRestrictedPermissions.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../core/RestrictedPermissions.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockRestrictedPermissions" - ] - }, - "/home/caleb/fei-protocol-core/contracts/fuse/rewards/RewardsDistributorAdmin.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "fcdacf1fa95e96df8cdb3414c30d32cf", - "sourceName": "contracts/fuse/rewards/RewardsDistributorAdmin.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../../refs/CoreRef.sol", - "./IRewardsDistributorAdmin.sol", - "@openzeppelin/contracts/access/AccessControlEnumerable.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "RewardsDistributorAdmin" - ] - }, - "/home/caleb/fei-protocol-core/contracts/fuse/rewards/IRewardsDistributorAdmin.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "90f26ec2569e62b44f5e5ab5b453ff40", - "sourceName": "contracts/fuse/rewards/IRewardsDistributorAdmin.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IRewardsDistributorAdmin" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockRewardsDistributor.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "a69263229f2ef55820489dc49faf5683", - "sourceName": "contracts/mock/MockRewardsDistributor.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./../staking/TribalChief.sol", - "../refs/CoreRef.sol", - "../fuse/rewards/IRewardsDistributorAdmin.sol", - "@openzeppelin/contracts/access/Ownable.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "MockRewardsDistributor" - ] - }, - "/home/caleb/fei-protocol-core/contracts/staking/TribalChief.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "15c9ff06e6a00844cbd6d9856d6195e5", - "sourceName": "contracts/staking/TribalChief.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./../refs/CoreRef.sol", - "./IRewarder.sol", - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "@openzeppelin/contracts/utils/math/SafeCast.sol", - "@openzeppelin/contracts/security/ReentrancyGuard.sol", - "@openzeppelin/contracts/proxy/utils/Initializable.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "TribalChief" - ] - }, - "/home/caleb/fei-protocol-core/contracts/staking/IRewarder.sol": { - "lastModificationDate": 1646115056100, - "contentHash": "0ecde07c6d39fa6365299ae42854c555", - "sourceName": "contracts/staking/IRewarder.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/IERC20.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IRewarder" - ] - }, - "/home/caleb/fei-protocol-core/contracts/staking/StakingTokenWrapper.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "3fd09b9d170bf6b3be21e95d8091d671", - "sourceName": "contracts/staking/StakingTokenWrapper.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/ERC20.sol", - "@openzeppelin/contracts/proxy/utils/Initializable.sol", - "./ITribalChief.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "StakingTokenWrapper" - ] - }, - "/home/caleb/fei-protocol-core/contracts/staking/ITribalChief.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "8e6d43da9f10d3a42e3593b263c101cd", - "sourceName": "contracts/staking/ITribalChief.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./IRewarder.sol", - "@openzeppelin/contracts/token/ERC20/IERC20.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "ITribalChief" - ] - }, - "/home/caleb/fei-protocol-core/contracts/staking/STWBulkHarvest.sol": { - "lastModificationDate": 1643166535080, - "contentHash": "a7777610f8fb3a9db4bc84cfbb781e58", - "sourceName": "contracts/staking/STWBulkHarvest.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./StakingTokenWrapper.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "STWBulkHarvest" - ] - }, - "/home/caleb/fei-protocol-core/contracts/staking/TribalChiefSyncV2.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "8cb9a4b8a87196d5678f0aa31b0d2618", - "sourceName": "contracts/staking/TribalChiefSyncV2.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./ITribalChief.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IAutoRewardsDistributor", - "ITimelock", - "TribalChiefSyncV2" - ] - }, - "/home/caleb/fei-protocol-core/contracts/staking/TribalChiefSyncExtension.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "bcdcf28391017e5252bcaa86ac96c12d", - "sourceName": "contracts/staking/TribalChiefSyncExtension.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./TribalChiefSyncV2.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "TribalChiefSyncExtension" - ] - }, - "/home/caleb/fei-protocol-core/contracts/fuse/rewards/AutoRewardsDistributorV2.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "43a7bac5fa1d52f0d66b9b8844b3ae0d", - "sourceName": "contracts/fuse/rewards/AutoRewardsDistributorV2.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../../staking/ITribalChief.sol", - "../../refs/CoreRef.sol", - "../../external/fuse/Unitroller.sol", - "../../staking/StakingTokenWrapper.sol", - "./IRewardsDistributorAdmin.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "AutoRewardsDistributorV2" - ] - }, - "/home/caleb/fei-protocol-core/contracts/external/fuse/Unitroller.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "159f863a63026aa82ffc7f48a47520a0", - "sourceName": "contracts/external/fuse/Unitroller.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./CToken.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "Unitroller" - ] - }, - "/home/caleb/fei-protocol-core/contracts/external/fuse/CToken.sol": { - "lastModificationDate": 1646115056090, - "contentHash": "8438395072b13096154f39ad144b5409", - "sourceName": "contracts/external/fuse/CToken.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "CToken" - ] - }, - "/home/caleb/fei-protocol-core/contracts/fuse/FuseGuardian.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "0ed288853f06da28cd1e9e09adcbf816", - "sourceName": "contracts/fuse/FuseGuardian.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../refs/CoreRef.sol", - "../external/fuse/Unitroller.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "FuseGuardian" - ] - }, - "/home/caleb/fei-protocol-core/contracts/fuse/FuseAdmin.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "ce82793d63a9b3a23872028879ae1a5b", - "sourceName": "contracts/fuse/FuseAdmin.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./FuseGuardian.sol", - "./IMasterOracle.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "FuseAdmin" - ] - }, - "/home/caleb/fei-protocol-core/contracts/fuse/IMasterOracle.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "ac15c139f58fc3fb76832ed41fb66a38", - "sourceName": "contracts/fuse/IMasterOracle.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IMasterOracle" - ] - }, - "/home/caleb/fei-protocol-core/contracts/fuse/rewards/AutoRewardsDistributor.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "69251800a40e6921ddf5cbbac3c9326d", - "sourceName": "contracts/fuse/rewards/AutoRewardsDistributor.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../../staking/ITribalChief.sol", - "../../refs/CoreRef.sol", - "./IRewardsDistributorAdmin.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "AutoRewardsDistributor" - ] - }, - "/home/caleb/fei-protocol-core/contracts/fuse/rewards/IRewardsAdmin.sol": { - "lastModificationDate": 1646115056090, - "contentHash": "911ec08a17c570f4cd083609a77e14b9", - "sourceName": "contracts/fuse/rewards/IRewardsAdmin.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./IRewardsDistributorAdmin.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IRewardsAdmin" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockIncentive.sol": { - "lastModificationDate": 1646115056090, - "contentHash": "4df1b7372840c4c964d9028f14023aba", - "sourceName": "contracts/mock/MockIncentive.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../fei/IIncentive.sol", - "../refs/CoreRef.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockIncentive" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockUniswapIncentive.sol": { - "lastModificationDate": 1646115056100, - "contentHash": "d4c13d8d727ca728806a7d533a66da71", - "sourceName": "contracts/mock/MockUniswapIncentive.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./MockIncentive.sol", - "../external/Decimal.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockUniswapIncentive" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockAngleStableMaster.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "c22d737c5058040e7fe4e7159c33f596", - "sourceName": "contracts/mock/MockAngleStableMaster.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "./MockERC20.sol", - "./MockAnglePoolManager.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockAngleStableMaster" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockAnglePoolManager.sol": { - "lastModificationDate": 1638934590030, - "contentHash": "eedd4e6877d8fd99d9a3ae47343b1aa2", - "sourceName": "contracts/mock/MockAnglePoolManager.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockAnglePoolManager" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockUniswapV2PairLiquidity.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "b8efc3f6640486780e0f627e279ca134", - "sourceName": "contracts/mock/MockUniswapV2PairLiquidity.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/utils/math/SafeMath.sol", - "../external/Decimal.sol", - "@uniswap/lib/contracts/libraries/FixedPoint.sol", - "@openzeppelin/contracts/token/ERC20/IERC20.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockUniswapV2PairLiquidity" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@uniswap/lib/contracts/libraries/FixedPoint.sol": { - "lastModificationDate": 1650954644350, - "contentHash": "e4a4584c59d8b1515ce998ec9bf49f5c", - "sourceName": "@uniswap/lib/contracts/libraries/FixedPoint.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./Babylonian.sol" - ], - "versionPragmas": [ - ">=0.4.0" - ], - "artifacts": [ - "FixedPoint" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockUniswapV2PairTrade.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "14bd5072b44143a8449f3a03a2c6bf95", - "sourceName": "contracts/mock/MockUniswapV2PairTrade.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@uniswap/lib/contracts/libraries/FixedPoint.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockUniswapV2PairTrade" - ] - }, - "/home/caleb/fei-protocol-core/contracts/external/uniswap/UniswapV2Library.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "2d6b3a32cb1603b92201036129c99634", - "sourceName": "contracts/external/uniswap/UniswapV2Library.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/utils/math/SafeMath.sol" - ], - "versionPragmas": [ - ">=0.6.0" - ], - "artifacts": [ - "UniswapV2Library" - ] - }, - "/home/caleb/fei-protocol-core/contracts/dao/timelock/Timelock.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "bebcde4fde10bf7e3c0ad05e5e47f560", - "sourceName": "contracts/dao/timelock/Timelock.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/utils/math/SafeMath.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "Timelock" - ] - }, - "/home/caleb/fei-protocol-core/contracts/merger/MergerBase.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "2582c6141ba3942d963a4dd8c3bfc2c7", - "sourceName": "contracts/merger/MergerBase.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "../dao/timelock/Timelock.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MergerBase" - ] - }, - "/home/caleb/fei-protocol-core/contracts/merger/TribeRagequit.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "3eea518f9f7d0e78f9689855acd43c31", - "sourceName": "contracts/merger/TribeRagequit.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./MergerBase.sol", - "../fei/IFei.sol", - "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "TRIBERagequit" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@openzeppelin/contracts/utils/cryptography/MerkleProof.sol": { - "lastModificationDate": 1651119843910, - "contentHash": "8206339fb35134e364332d17ea7b5d60", - "sourceName": "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "MerkleProof" - ] - }, - "/home/caleb/fei-protocol-core/contracts/merger/PegExchanger.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "1bda4c5f5abbb278cc2d20c6ebf6b01c", - "sourceName": "contracts/merger/PegExchanger.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./MergerBase.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "PegExchanger" - ] - }, - "/home/caleb/fei-protocol-core/contracts/merger/PegExchangerDripper.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "dc5819a9babf4e6c0cb6f3589c5859f8", - "sourceName": "contracts/merger/PegExchangerDripper.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./PegExchanger.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "PegExchangerDripper" - ] - }, - "/home/caleb/fei-protocol-core/contracts/dao/timelock/FeiDAOTimelock.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "eb4fc8cabab24ed7018b9309b5a34ef6", - "sourceName": "contracts/dao/timelock/FeiDAOTimelock.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./Timelock.sol", - "../../refs/CoreRef.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "FeiDAOTimelock", - "IFeiDAO" - ] - }, - "/home/caleb/fei-protocol-core/contracts/oracle/CompositeOracle.sol": { - "lastModificationDate": 1646115056100, - "contentHash": "61377ca365c458136fbfde1c82346284", - "sourceName": "contracts/oracle/CompositeOracle.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../refs/CoreRef.sol", - "./IOracle.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "CompositeOracle" - ] - }, - "/home/caleb/fei-protocol-core/contracts/oracle/ChainlinkOracleWrapper.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "789ec6a4de667c65c5c7e6ed541973d0", - "sourceName": "contracts/oracle/ChainlinkOracleWrapper.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./IOracle.sol", - "../refs/CoreRef.sol", - "@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "ChainlinkOracleWrapper" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol": { - "lastModificationDate": 1650954667200, - "contentHash": "b213894d1186ed5f03cceedb9a7811a2", - "sourceName": "@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - ">=0.6.0" - ], - "artifacts": [ - "AggregatorV3Interface" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockChainlinkOracle.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "313837e54db8ee393d9b49b24a9f0a8e", - "sourceName": "contracts/mock/MockChainlinkOracle.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockChainlinkOracle" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockOracle.sol": { - "lastModificationDate": 1646115056090, - "contentHash": "afc70e947a81e82b4a7aa4ea6f713db5", - "sourceName": "contracts/mock/MockOracle.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../external/Decimal.sol", - "../oracle/IOracle.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockOracle" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockOracleCoreRef.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "6b20b53697179eab4edabfa26d21e0ac", - "sourceName": "contracts/mock/MockOracleCoreRef.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./MockOracle.sol", - "./MockCoreRef.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockOracleCoreRef" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockCoreRef.sol": { - "lastModificationDate": 1646115056090, - "contentHash": "7993e250ea0c7591421aaa7834f2833d", - "sourceName": "contracts/mock/MockCoreRef.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../refs/CoreRef.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockCoreRef" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockVoteEscrowTokenManager.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "775e65b33959468b5f0e9fe2090d86ee", - "sourceName": "contracts/mock/MockVoteEscrowTokenManager.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./MockCoreRef.sol", - "../metagov/utils/VoteEscrowTokenManager.sol", - "@openzeppelin/contracts/token/ERC20/IERC20.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockVoteEscrowTokenManager" - ] - }, - "/home/caleb/fei-protocol-core/contracts/metagov/utils/VoteEscrowTokenManager.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "0f82b723fe701835fc7a15dbc0fc6cc3", - "sourceName": "contracts/metagov/utils/VoteEscrowTokenManager.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../../refs/CoreRef.sol", - "../../core/TribeRoles.sol", - "@openzeppelin/contracts/token/ERC20/IERC20.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IVeToken", - "VoteEscrowTokenManager" - ] - }, - "/home/caleb/fei-protocol-core/contracts/metagov/VeBalDelegatorPCVDeposit.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "9374478e4a21fa5b39faa100b0054f66", - "sourceName": "contracts/metagov/VeBalDelegatorPCVDeposit.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./SnapshotDelegatorPCVDeposit.sol", - "./utils/VoteEscrowTokenManager.sol", - "./utils/LiquidityGaugeManager.sol", - "./utils/GovernorVoter.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "VeBalDelegatorPCVDeposit" - ] - }, - "/home/caleb/fei-protocol-core/contracts/metagov/SnapshotDelegatorPCVDeposit.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "e30ae6f3f7a78205c69d411f06c73739", - "sourceName": "contracts/metagov/SnapshotDelegatorPCVDeposit.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../core/TribeRoles.sol", - "../pcv/PCVDeposit.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "DelegateRegistry", - "SnapshotDelegatorPCVDeposit" - ] - }, - "/home/caleb/fei-protocol-core/contracts/metagov/utils/LiquidityGaugeManager.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "df20efc74abd30175a9a78f19ed55654", - "sourceName": "contracts/metagov/utils/LiquidityGaugeManager.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../../refs/CoreRef.sol", - "../../core/TribeRoles.sol", - "@openzeppelin/contracts/token/ERC20/IERC20.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "ILiquidityGauge", - "ILiquidityGaugeController", - "LiquidityGaugeManager" - ] - }, - "/home/caleb/fei-protocol-core/contracts/metagov/utils/GovernorVoter.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "4d30da9953ce9f12658c53f66999b45b", - "sourceName": "contracts/metagov/utils/GovernorVoter.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../../refs/CoreRef.sol", - "../../core/TribeRoles.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "GovernorVoter", - "IMetagovGovernor" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockGovernorVoter.sol": { - "lastModificationDate": 1650967372680, - "contentHash": "57689b1c4594fcc98a6966e61854b327", - "sourceName": "contracts/mock/MockGovernorVoter.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./MockCoreRef.sol", - "../metagov/utils/GovernorVoter.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockGovernorVoter" - ] - }, - "/home/caleb/fei-protocol-core/contracts/metagov/AngleDelegatorPCVDeposit.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "4e23779ef1d76fd1cb51e90c5a6d1b40", - "sourceName": "contracts/metagov/AngleDelegatorPCVDeposit.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./SnapshotDelegatorPCVDeposit.sol", - "./utils/VoteEscrowTokenManager.sol", - "./utils/LiquidityGaugeManager.sol", - "./utils/GovernorVoter.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "AngleDelegatorPCVDeposit" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/curve/CurveGaugeLens.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "28a9d535c359f2d87585e2b8f141479f", - "sourceName": "contracts/pcv/curve/CurveGaugeLens.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../../metagov/utils/LiquidityGaugeManager.sol", - "../IPCVDepositBalances.sol" - ], - "versionPragmas": [ - "^0.8.10" - ], - "artifacts": [ - "CurveGaugeLens" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/angle/AngleGaugeLens.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "6fd2b6cceb867f214db6e6da99d3c31e", - "sourceName": "contracts/pcv/angle/AngleGaugeLens.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../../metagov/utils/LiquidityGaugeManager.sol", - "../IPCVDepositBalances.sol" - ], - "versionPragmas": [ - "^0.8.10" - ], - "artifacts": [ - "AngleGaugeLens" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockLiquidityGaugeManager.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "63d74c08d5678aede36ce6efb7b63c93", - "sourceName": "contracts/mock/MockLiquidityGaugeManager.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./MockCoreRef.sol", - "../metagov/utils/LiquidityGaugeManager.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockLiquidityGaugeManager" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockCollateralizationOracle.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "9f34a75978775d65df48c9a432df0c87", - "sourceName": "contracts/mock/MockCollateralizationOracle.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./MockOracleCoreRef.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockCollateralizationOracle" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pods/interfaces/IPodAdminGateway.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "66e8b4b87928d5633ad223069baea43e", - "sourceName": "contracts/pods/interfaces/IPodAdminGateway.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IPodAdminGateway" - ] - }, - "/home/caleb/fei-protocol-core/contracts/core/ICoreV1.old.sol": { - "lastModificationDate": 1646115056090, - "contentHash": "7bd7306ede718d6f6c5987b196b927bd", - "sourceName": "contracts/core/ICoreV1.old.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./ICore.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "ICoreV1" - ] - }, - "/home/caleb/fei-protocol-core/contracts/dao/timelock/OptimisticTimelock.sol": { - "lastModificationDate": 1646115056090, - "contentHash": "f0aa9676bf631c7bdc89ec98424b4333", - "sourceName": "contracts/dao/timelock/OptimisticTimelock.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/governance/TimelockController.sol", - "../../refs/CoreRef.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "OptimisticTimelock" - ] - }, - "/home/caleb/fei-protocol-core/contracts/external/saddle/ISaddleSwap.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "5923cfd0ee14c27ec5d7f932eab45813", - "sourceName": "contracts/external/saddle/ISaddleSwap.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/ERC20.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "ISaddleSwap" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockBondingCurve.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "5b75020c845ddd0ee3de2064bec8567f", - "sourceName": "contracts/mock/MockBondingCurve.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../external/Decimal.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockBondingCurve" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/angle/AngleUniswapPCVDeposit.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "c35cf01a54ad9c067d05f5761d3794dd", - "sourceName": "contracts/pcv/angle/AngleUniswapPCVDeposit.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../uniswap/UniswapPCVDeposit.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "AngleUniswapPCVDeposit", - "IPoolManager", - "IStableMaster", - "IStakingRewards" - ] - }, - "/home/caleb/fei-protocol-core/contracts/libs/UintArrayOps.sol": { - "lastModificationDate": 1646115056090, - "contentHash": "a7abe1621271a08a207dc50cb6c0fd49", - "sourceName": "contracts/libs/UintArrayOps.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/utils/math/SafeCast.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "UintArrayOps" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/tokemak/TokemakPCVDepositBase.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "9b598b5134356db8af92a9d6f82dfde7", - "sourceName": "contracts/pcv/tokemak/TokemakPCVDepositBase.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../PCVDeposit.sol", - "../../refs/CoreRef.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "ITokemakPool", - "ITokemakRewards", - "TokemakPCVDepositBase" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/tokemak/EthTokemakPCVDeposit.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "5e0f794c5f69103a654b9defba7624fd", - "sourceName": "contracts/pcv/tokemak/EthTokemakPCVDeposit.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./TokemakPCVDepositBase.sol", - "../../Constants.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "EthTokemakPCVDeposit", - "ITokemakEthPool" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/tokemak/ERC20TokemakPCVDeposit.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "581882fe6f1bf0ec4f9eae89f3ed78ce", - "sourceName": "contracts/pcv/tokemak/ERC20TokemakPCVDeposit.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./TokemakPCVDepositBase.sol", - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "ERC20TokemakPCVDeposit", - "ITokemakERC20Pool" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/curve/CurvePCVDepositPlainPool.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "dc7ae98b53c558cc59d0f1df5c0ad6da", - "sourceName": "contracts/pcv/curve/CurvePCVDepositPlainPool.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../../Constants.sol", - "../PCVDeposit.sol", - "./ICurveStableSwap3.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "CurvePCVDepositPlainPool" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/curve/ICurveStableSwap3.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "73abeb4db2f124e47cd7594b72ceabfb", - "sourceName": "contracts/pcv/curve/ICurveStableSwap3.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./ICurvePool.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "ICurveStableSwap3" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/curve/ICurvePool.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "5b68ead86b66db9319017a7f46534eaf", - "sourceName": "contracts/pcv/curve/ICurvePool.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "ICurvePool" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/convex/ConvexPCVDeposit.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "b91a4f18c9a72c8c9cf11ce0f66b091e", - "sourceName": "contracts/pcv/convex/ConvexPCVDeposit.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../../Constants.sol", - "./IConvexBooster.sol", - "./IConvexBaseRewardPool.sol", - "../curve/ICurvePool.sol", - "../PCVDeposit.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "ConvexPCVDeposit" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/convex/IConvexBooster.sol": { - "lastModificationDate": 1646115056100, - "contentHash": "f52907267401b2d470ec47f89e361a5a", - "sourceName": "contracts/pcv/convex/IConvexBooster.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IConvexBooster" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/convex/IConvexBaseRewardPool.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "f973406846a51938b8557221d7ca8082", - "sourceName": "contracts/pcv/convex/IConvexBaseRewardPool.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IConvexBaseRewardPool" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/compound/CompoundPCVDepositBase.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "7e71e9e584137c2cda656efbb2d98d2b", - "sourceName": "contracts/pcv/compound/CompoundPCVDepositBase.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../PCVDeposit.sol", - "../../refs/CoreRef.sol", - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "CToken", - "CompoundPCVDepositBase" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/compound/EthCompoundPCVDeposit.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "5224980c2b44e9437180ee7be7c71c84", - "sourceName": "contracts/pcv/compound/EthCompoundPCVDeposit.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./CompoundPCVDepositBase.sol", - "../../Constants.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "CEther", - "EthCompoundPCVDeposit" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/compound/ERC20CompoundPCVDeposit.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "4859c3c46a5aeb5755bc9a67ed6f24f0", - "sourceName": "contracts/pcv/compound/ERC20CompoundPCVDeposit.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./CompoundPCVDepositBase.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "CErc20", - "ERC20CompoundPCVDeposit" - ] - }, - "/home/caleb/fei-protocol-core/contracts/timelocks/QuadraticTimelockedDelegator.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "c7b4ae0bbcddb131c008d498c906110b", - "sourceName": "contracts/timelocks/QuadraticTimelockedDelegator.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/IERC20.sol", - "./QuadraticTokenTimelock.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IVotingToken", - "QuadraticTimelockedDelegator" - ] - }, - "/home/caleb/fei-protocol-core/contracts/timelocks/LinearTimelockedDelegator.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "ad032aeeb8e55dad8c1b67054780e585", - "sourceName": "contracts/timelocks/LinearTimelockedDelegator.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/IERC20.sol", - "./LinearTokenTimelock.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IVotingToken", - "LinearTimelockedDelegator" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockStakingRewards.sol": { - "lastModificationDate": 1646115056100, - "contentHash": "5e78a5cde403eb7482ab59affe33e594", - "sourceName": "contracts/mock/MockStakingRewards.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/IERC20.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockStakingRewards" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockERC20UniswapPCVDeposit.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "49b9383c4cb0b0c747f3a23f14ced654", - "sourceName": "contracts/mock/MockERC20UniswapPCVDeposit.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../pcv/IPCVDeposit.sol", - "@openzeppelin/contracts/token/ERC20/IERC20.sol", - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockERC20UniswapPCVDeposit" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockERC20PCVDeposit.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "f350831387a5654f36c1e0af7a8cb3e1", - "sourceName": "contracts/mock/MockERC20PCVDeposit.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../pcv/IPCVDeposit.sol", - "@openzeppelin/contracts/token/ERC20/IERC20.sol", - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockERC20PCVDeposit" - ] - }, - "/home/caleb/fei-protocol-core/contracts/external/sushi/IMasterContractManager.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "e5092e2ff1aa9616334e3acc2f8c44dc", - "sourceName": "contracts/external/sushi/IMasterContractManager.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/IERC20.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IMasterContractManager" - ] - }, - "/home/caleb/fei-protocol-core/contracts/external/sushi/IKashiPair.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "5322c4cee48f7e82159769a14385d72b", - "sourceName": "contracts/external/sushi/IKashiPair.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/IERC20.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IKashiPair" - ] - }, - "/home/caleb/fei-protocol-core/contracts/external/fuse/CErc20Delegator.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "c4c6fbfabf16555620d93d8089d75276", - "sourceName": "contracts/external/fuse/CErc20Delegator.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/IERC20.sol", - "./InterestRateModel.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "CErc20Delegator" - ] - }, - "/home/caleb/fei-protocol-core/contracts/external/fuse/InterestRateModel.sol": { - "lastModificationDate": 1646115056090, - "contentHash": "cc8ccf8a265265d3971126f0b163b6f6", - "sourceName": "contracts/external/fuse/InterestRateModel.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "InterestRateModel" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/utils/RatioPCVControllerV2.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "7bf1e0af4ce5c4ca22f5263cfc58bd6e", - "sourceName": "contracts/pcv/utils/RatioPCVControllerV2.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../../Constants.sol", - "../../refs/CoreRef.sol", - "../IPCVDeposit.sol", - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "RatioPCVControllerV2" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/utils/DelayedPCVMover.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "05ac9710ca474b00fca0ea7a230f5793", - "sourceName": "contracts/pcv/utils/DelayedPCVMover.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../../refs/CoreRef.sol", - "./RatioPCVControllerV2.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "DelayedPCVMover" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/kashi/KashiPCVRedeemer.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "9130e0f94d401e2fcab7be7bb7222693", - "sourceName": "contracts/pcv/kashi/KashiPCVRedeemer.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IKashi", - "KashiPCVRedeemer" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/idle/IdleTranchePCVRedeemer.sol": { - "lastModificationDate": 1646115056100, - "contentHash": "bc2c71d568a12a108d36f3e139cd42f3", - "sourceName": "contracts/pcv/idle/IdleTranchePCVRedeemer.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IIdleTrancheMinter", - "IdleTranchePCVRedeemer" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/idle/IdlePCVRedeemer.sol": { - "lastModificationDate": 1646115056100, - "contentHash": "24fab5a7a629f83335c512e2df1585c8", - "sourceName": "contracts/pcv/idle/IdlePCVRedeemer.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IIdleToken", - "IdlePCVRedeemer" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/convex/VotiumBriber.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "c4b7e4ac9cba61e3baae7be74d71333e", - "sourceName": "contracts/pcv/convex/VotiumBriber.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./IVotiumBribe.sol", - "../../refs/CoreRef.sol", - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "VotiumBriber" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/convex/IVotiumBribe.sol": { - "lastModificationDate": 1643166535080, - "contentHash": "d86c920b0f26979e5a36fb5616c55ad3", - "sourceName": "contracts/pcv/convex/IVotiumBribe.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IVotiumBribe" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/barnbridge/SmartYieldRedeemer.sol": { - "lastModificationDate": 1646115056100, - "contentHash": "9ef31aca5f1b417f9db9727db5f09840", - "sourceName": "contracts/pcv/barnbridge/SmartYieldRedeemer.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "ISmartYield", - "SmartYieldRedeemer" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockAngleStakingRewards.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "5e21733996dce5f2e8a00c1539f8dcdf", - "sourceName": "contracts/mock/MockAngleStakingRewards.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IMockERC20", - "MockAngleStakingRewards" - ] - }, - "/home/caleb/fei-protocol-core/contracts/merger/REPTbRedeemer.sol": { - "lastModificationDate": 1646115056090, - "contentHash": "9f9ceab6f8077bfd86bcdab42a8d83dd", - "sourceName": "contracts/merger/REPTbRedeemer.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "REPTbRedeemer" - ] - }, - "/home/caleb/fei-protocol-core/contracts/merger/ExchangerTimelock.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "4f73969a561b63a04fefad35372f6d10", - "sourceName": "contracts/merger/ExchangerTimelock.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol", - "@openzeppelin/contracts/access/Ownable.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "ExchangerTimelock", - "IExchanger" - ] - }, - "/home/caleb/fei-protocol-core/contracts/peg/PriceBoundPSM.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "2c724c3f59c4a134c4801f9701f7a52f", - "sourceName": "contracts/peg/PriceBoundPSM.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./PegStabilityModule.sol", - "./IPriceBound.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "PriceBoundPSM" - ] - }, - "/home/caleb/fei-protocol-core/contracts/peg/IPriceBound.sol": { - "lastModificationDate": 1646115056100, - "contentHash": "c66f5fab75adf840b9edc68bb6a60bd6", - "sourceName": "contracts/peg/IPriceBound.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IPriceBound" - ] - }, - "/home/caleb/fei-protocol-core/contracts/peg/FixedPricePSM.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "cf8821ff36a30549363e1211690b6a86", - "sourceName": "contracts/peg/FixedPricePSM.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./PriceBoundPSM.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "FixedPricePSM" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/utils/FeiSkimmer.sol": { - "lastModificationDate": 1646115056100, - "contentHash": "0f0300a2396cc6cb0fd045556d4b4f9c", - "sourceName": "contracts/pcv/utils/FeiSkimmer.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../IPCVDeposit.sol", - "../../refs/CoreRef.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "FeiSkimmer" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/utils/PCVSplitter.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "b169d76debf6af8d075a546cf3aafa72", - "sourceName": "contracts/pcv/utils/PCVSplitter.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../../refs/CoreRef.sol", - "../../Constants.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "PCVSplitter" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/utils/ERC20Splitter.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "c8813726ee1cc20834b6fdf24db78615", - "sourceName": "contracts/pcv/utils/ERC20Splitter.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./PCVSplitter.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "ERC20Splitter" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockIncentivized.sol": { - "lastModificationDate": 1646115056090, - "contentHash": "4b6a29e8f9006f14e1571b0c45ee7dbd", - "sourceName": "contracts/mock/MockIncentivized.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../refs/CoreRef.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockIncentivized" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockCoreRefTest.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "d3bcac1361e3bce01a3dd00012d6925f", - "sourceName": "contracts/mock/MockCoreRefTest.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../refs/CoreRef.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockCoreRefTest" - ] - }, - "/home/caleb/fei-protocol-core/contracts/dao/governor/GovernorAlpha.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "abfae88220c854f7ebedf08c7fb707c8", - "sourceName": "contracts/dao/governor/GovernorAlpha.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "GovernorAlpha", - "TimelockInterface", - "TribeInterface" - ] - }, - "/home/caleb/fei-protocol-core/contracts/merger/MergerGate.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "797af1bfe5595bc4a705c0d893cd5039", - "sourceName": "contracts/merger/MergerGate.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../dao/governor/GovernorAlpha.sol" - ], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MergerGate" - ] - }, - "/home/caleb/fei-protocol-core/contracts/external/aave/DataTypes.sol": { - "lastModificationDate": 1646115056090, - "contentHash": "7c2152a4a31affdc4da366d5ae0a5cab", - "sourceName": "contracts/external/aave/DataTypes.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "DataTypes" - ] - }, - "/home/caleb/fei-protocol-core/contracts/external/aave/ILendingPool.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "e0ff4eae1110cb5d61138d93f8a434bb", - "sourceName": "contracts/external/aave/ILendingPool.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./DataTypes.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "ILendingPool", - "ILendingPoolAddressesProvider" - ] - }, - "/home/caleb/fei-protocol-core/contracts/external/aave/IAaveDistributionManager.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "905cb404e746e27e179707e4f7198a39", - "sourceName": "contracts/external/aave/IAaveDistributionManager.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IAaveDistributionManager" - ] - }, - "/home/caleb/fei-protocol-core/contracts/external/aave/IAaveIncentivesController.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "cc29b411cd06159ae9e0be14502556a9", - "sourceName": "contracts/external/aave/IAaveIncentivesController.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./IAaveDistributionManager.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IAaveIncentivesController" - ] - }, - "/home/caleb/fei-protocol-core/contracts/external/aave/IAaveGovernanceV2.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "2ad79ce72f7b9900dbe6659280a0de58", - "sourceName": "contracts/external/aave/IAaveGovernanceV2.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IAaveGovernanceV2", - "IExecutorWithTimelock" - ] - }, - "/home/caleb/fei-protocol-core/contracts/external/balancer/ILiquidityBootstrappingPoolFactory.sol": { - "lastModificationDate": 1643166535080, - "contentHash": "5bc5851990e415747951316d736ff381", - "sourceName": "contracts/external/balancer/ILiquidityBootstrappingPoolFactory.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "ILiquidityBootstrappingPoolFactory" - ] - }, - "/home/caleb/fei-protocol-core/contracts/external/balancer/IWeightedPool2TokensFactory.sol": { - "lastModificationDate": 1643166535080, - "contentHash": "08f717d5c14b412ee20213598a11f4ee", - "sourceName": "contracts/external/balancer/IWeightedPool2TokensFactory.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IWeightedPool2TokensFactory" - ] - }, - "/home/caleb/fei-protocol-core/contracts/external/fuse/IConvexERC4626.sol": { - "lastModificationDate": 1646115056090, - "contentHash": "1caa18e8bf8b63842ec1ee86f20bbfa7", - "sourceName": "contracts/external/fuse/IConvexERC4626.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IConvexERC4626" - ] - }, - "/home/caleb/fei-protocol-core/contracts/external/fuse/IFuseFeeDistributor.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "2289855b6c30e526e5ce98fe6eed822e", - "sourceName": "contracts/external/fuse/IFuseFeeDistributor.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IFuseFeeDistributor" - ] - }, - "/home/caleb/fei-protocol-core/contracts/external/fuse/IRewardsDistributor.sol": { - "lastModificationDate": 1646115056090, - "contentHash": "538d1983e83c306dcb0af31e136f8cb6", - "sourceName": "contracts/external/fuse/IRewardsDistributor.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IRewardsDistributor" - ] - }, - "/home/caleb/fei-protocol-core/contracts/external/multisend/IERC20Airdropper.sol": { - "lastModificationDate": 1646115056090, - "contentHash": "6e9deec243ae96c1647ae2c28c57c180", - "sourceName": "contracts/external/multisend/IERC20Airdropper.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IERC20Airdropper" - ] - }, - "/home/caleb/fei-protocol-core/contracts/external/rari/RariGovernanceTokenUniswapDistributor.sol": { - "lastModificationDate": 1651053026300, - "contentHash": "2b2f2ee224293d734b56d445dc0d1134", - "sourceName": "contracts/external/rari/RariGovernanceTokenUniswapDistributor.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "RariGovernanceTokenUniswapDistributor" - ] - }, - "/home/caleb/fei-protocol-core/contracts/external/visor/IHypervisor.sol": { - "lastModificationDate": 1646115056090, - "contentHash": "a31a2e2c679cb51438485b94258840f2", - "sourceName": "contracts/external/visor/IHypervisor.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "IHypervisor" - ] - }, - "/home/caleb/fei-protocol-core/contracts/fuse/irm/ZeroInterestRateModel.sol": { - "lastModificationDate": 1646115056090, - "contentHash": "ae8f38b6bd5ea799dbd646c33a694972", - "sourceName": "contracts/fuse/irm/ZeroInterestRateModel.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "ZeroInterestRateModel" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/ForceEth.sol": { - "lastModificationDate": 1646115056090, - "contentHash": "885cd12ace3960673978a8fc413270c4", - "sourceName": "contracts/mock/ForceEth.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "ForceEth" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockPCVSwapper.sol": { - "lastModificationDate": 1646115056090, - "contentHash": "09d90e831a478c7216fbd1228e93a256", - "sourceName": "contracts/mock/MockPCVSwapper.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "MockPCVSwapper" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockTribalChief.sol": { - "lastModificationDate": 1646115056100, - "contentHash": "d0d4e2bd65257b904eff9bf5d5b4ae67", - "sourceName": "contracts/mock/MockTribalChief.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.0", - "^0.8.0" - ], - "artifacts": [ - "MockTribalChief" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/MockTribeMinter.sol": { - "lastModificationDate": 1646115056100, - "contentHash": "a68aa8c4f9a6a4d2b99024e97c200a22", - "sourceName": "contracts/mock/MockTribeMinter.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.4" - ], - "artifacts": [ - "ITribe", - "MockTribeMinter" - ] - }, - "/home/caleb/fei-protocol-core/contracts/mock/RevertReceiver.sol": { - "lastModificationDate": 1646115056100, - "contentHash": "44672feae9c0dcb654c874dcf9b8ca8b", - "sourceName": "contracts/mock/RevertReceiver.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "RevertReceiver" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pcv/balancer/riskcurve/IRiskCurve.sol": { - "lastModificationDate": 1651053026310, - "contentHash": "268ba02bc0b5575f31c0bbac24ace4a4", - "sourceName": "contracts/pcv/balancer/riskcurve/IRiskCurve.sol", - "solcConfig": { - "version": "0.8.10", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IRiskCurve" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@orcaprotocol/contracts/contracts/InviteToken.sol": { - "lastModificationDate": 1651119845250, - "contentHash": "d1fe340cc1587aab9466e426b0a6195f", - "sourceName": "@orcaprotocol/contracts/contracts/InviteToken.sol", - "solcConfig": { - "version": "0.8.7", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC20/ERC20.sol", - "@openzeppelin/contracts/access/AccessControl.sol" - ], - "versionPragmas": [ - "0.8.7" - ], - "artifacts": [ - "InviteToken" - ] - }, - "/home/caleb/fei-protocol-core/contracts/test/integration/governance/PodFactory.t.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "00a5d095157c0fd45a7f67169007c372", - "sourceName": "contracts/test/integration/governance/PodFactory.t.sol", - "solcConfig": { - "version": "0.8.7", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/governance/TimelockController.sol", - "@orcaprotocol/contracts/contracts/ControllerV1.sol", - "@orcaprotocol/contracts/contracts/MemberToken.sol", - "../../../pods/interfaces/IGnosisSafe.sol", - "../../../pods/PodFactory.sol", - "../../../pods/PodExecutor.sol", - "../../../pods/interfaces/IPodFactory.sol", - "../../../core/Core.sol", - "../../../core/TribeRoles.sol", - "../../../pods/PodAdminGateway.sol", - "../../utils/DSTest.sol", - "../fixtures/Orca.sol", - "../../utils/Fixtures.sol", - "../../utils/Vm.sol", - "../fixtures/MainnetAddresses.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "PodFactoryIntegrationTest" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@orcaprotocol/contracts/contracts/ControllerV1.sol": { - "lastModificationDate": 1651119845240, - "contentHash": "f25d509cfab4036074a0ce74a8ea16fc", - "sourceName": "@orcaprotocol/contracts/contracts/ControllerV1.sol", - "solcConfig": { - "version": "0.8.7", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/access/Ownable.sol", - "@openzeppelin/contracts/utils/Strings.sol", - "./interfaces/IControllerV1.sol", - "./interfaces/IMemberToken.sol", - "./interfaces/IControllerRegistry.sol", - "./SafeTeller.sol", - "./ens/IPodEnsRegistrar.sol" - ], - "versionPragmas": [ - "0.8.7" - ], - "artifacts": [ - "ControllerV1" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@orcaprotocol/contracts/contracts/MemberToken.sol": { - "lastModificationDate": 1651119845250, - "contentHash": "c15aff78eab5d60fb153205873ff0d1d", - "sourceName": "@orcaprotocol/contracts/contracts/MemberToken.sol", - "solcConfig": { - "version": "0.8.7", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/access/Ownable.sol", - "@openzeppelin/contracts/utils/Address.sol", - "@openzeppelin/contracts/token/ERC1155/ERC1155.sol", - "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol", - "./interfaces/IControllerRegistry.sol", - "./interfaces/IControllerBase.sol" - ], - "versionPragmas": [ - "0.8.7" - ], - "artifacts": [ - "MemberToken" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pods/PodFactory.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "73ee3e8e1d0362cff39da09bb393cff2", - "sourceName": "contracts/pods/PodFactory.sol", - "solcConfig": { - "version": "0.8.7", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/governance/TimelockController.sol", - "@orcaprotocol/contracts/contracts/ControllerV1.sol", - "@orcaprotocol/contracts/contracts/MemberToken.sol", - "./interfaces//IGnosisSafe.sol", - "./interfaces/IPodFactory.sol", - "../core/TribeRoles.sol", - "../refs/CoreRef.sol", - "../core/ICore.sol", - "./PodAdminGateway.sol", - "./PodExecutor.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "PodFactory" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pods/interfaces/IPodFactory.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "ab8016eacbe36601b5cb3609c3c2098c", - "sourceName": "contracts/pods/interfaces/IPodFactory.sol", - "solcConfig": { - "version": "0.8.7", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@orcaprotocol/contracts/contracts/ControllerV1.sol", - "@orcaprotocol/contracts/contracts/MemberToken.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "IPodFactory" - ] - }, - "/home/caleb/fei-protocol-core/contracts/pods/PodAdminGateway.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "ecf9f252172b8d20b902fc9f83b26147", - "sourceName": "contracts/pods/PodAdminGateway.sol", - "solcConfig": { - "version": "0.8.7", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@orcaprotocol/contracts/contracts/MemberToken.sol", - "@orcaprotocol/contracts/contracts/ControllerV1.sol", - "@openzeppelin/contracts/governance/TimelockController.sol", - "../refs/CoreRef.sol", - "../core/ICore.sol", - "../core/Core.sol", - "../core/TribeRoles.sol", - "./interfaces/IPodAdminGateway.sol", - "./interfaces/IPodFactory.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "PodAdminGateway" - ] - }, - "/home/caleb/fei-protocol-core/contracts/test/integration/fixtures/Orca.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "a742c453a6ebcf579d56089ef5e09da2", - "sourceName": "contracts/test/integration/fixtures/Orca.sol", - "solcConfig": { - "version": "0.8.7", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/governance/TimelockController.sol", - "@orcaprotocol/contracts/contracts/MemberToken.sol", - "@orcaprotocol/contracts/contracts/ControllerV1.sol", - "@orcaprotocol/contracts/contracts/InviteToken.sol", - "../../../pods/interfaces/IPodFactory.sol", - "../../../pods/PodFactory.sol", - "../../utils/Vm.sol", - "../../../pods/PodAdminGateway.sol", - "../fixtures/MainnetAddresses.sol", - "../../../core/TribeRoles.sol", - "../../../core/Core.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [] - }, - "/home/caleb/fei-protocol-core/node_modules/@orcaprotocol/contracts/contracts/interfaces/IControllerV1.sol": { - "lastModificationDate": 1651119845240, - "contentHash": "8c2c8f3d805565771820b95697104d81", - "sourceName": "@orcaprotocol/contracts/contracts/interfaces/IControllerV1.sol", - "solcConfig": { - "version": "0.8.7", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "./IControllerBase.sol" - ], - "versionPragmas": [ - "0.8.7" - ], - "artifacts": [ - "IControllerV1" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@orcaprotocol/contracts/contracts/interfaces/IMemberToken.sol": { - "lastModificationDate": 1651119845250, - "contentHash": "fddb5c530dada12b88f67e7e04609cfa", - "sourceName": "@orcaprotocol/contracts/contracts/interfaces/IMemberToken.sol", - "solcConfig": { - "version": "0.8.7", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/token/ERC1155/IERC1155.sol" - ], - "versionPragmas": [ - "0.8.7" - ], - "artifacts": [ - "IMemberToken" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@orcaprotocol/contracts/contracts/interfaces/IControllerRegistry.sol": { - "lastModificationDate": 1651119845240, - "contentHash": "e8912d08c2d092f1aa479ed69318678b", - "sourceName": "@orcaprotocol/contracts/contracts/interfaces/IControllerRegistry.sol", - "solcConfig": { - "version": "0.8.7", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "0.8.7" - ], - "artifacts": [ - "IControllerRegistry" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@orcaprotocol/contracts/contracts/SafeTeller.sol": { - "lastModificationDate": 1651119845260, - "contentHash": "7875c2e1529f83028c8af782372e0fe2", - "sourceName": "@orcaprotocol/contracts/contracts/SafeTeller.sol", - "solcConfig": { - "version": "0.8.7", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/utils/Address.sol", - "./interfaces/IGnosisSafe.sol", - "./interfaces/IGnosisSafeProxyFactory.sol", - "@gnosis.pm/zodiac/contracts/guard/BaseGuard.sol" - ], - "versionPragmas": [ - "0.8.7" - ], - "artifacts": [ - "SafeTeller" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@orcaprotocol/contracts/contracts/ens/IPodEnsRegistrar.sol": { - "lastModificationDate": 1651119845250, - "contentHash": "167817b68d9a6821967e1204672ab528", - "sourceName": "@orcaprotocol/contracts/contracts/ens/IPodEnsRegistrar.sol", - "solcConfig": { - "version": "0.8.7", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "0.8.7" - ], - "artifacts": [ - "IPodEnsRegistrar" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@orcaprotocol/contracts/contracts/interfaces/IControllerBase.sol": { - "lastModificationDate": 1651119845240, - "contentHash": "982a96f0d3ce7673ad277fed82db5e4b", - "sourceName": "@orcaprotocol/contracts/contracts/interfaces/IControllerBase.sol", - "solcConfig": { - "version": "0.8.7", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "0.8.7" - ], - "artifacts": [ - "IControllerBase" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@orcaprotocol/contracts/contracts/interfaces/IGnosisSafe.sol": { - "lastModificationDate": 1651119845250, - "contentHash": "65a10a17ad3e28fca065adfb22aef5e6", - "sourceName": "@orcaprotocol/contracts/contracts/interfaces/IGnosisSafe.sol", - "solcConfig": { - "version": "0.8.7", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "0.8.7" - ], - "artifacts": [ - "IGnosisSafe" - ] - }, - "/home/caleb/fei-protocol-core/node_modules/@orcaprotocol/contracts/contracts/interfaces/IGnosisSafeProxyFactory.sol": { - "lastModificationDate": 1651119845250, - "contentHash": "fccd4b3aee4aa03f8b9e5f73e8c8ad41", - "sourceName": "@orcaprotocol/contracts/contracts/interfaces/IGnosisSafeProxyFactory.sol", - "solcConfig": { - "version": "0.8.7", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "0.8.7" - ], - "artifacts": [ - "IGnosisSafeProxyFactory" - ] - }, - "/home/caleb/fei-protocol-core/contracts/test/integration/governance/PodAdminGateway.t.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "0a2eee4557f1050f413dae6481050a3d", - "sourceName": "contracts/test/integration/governance/PodAdminGateway.t.sol", - "solcConfig": { - "version": "0.8.7", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/governance/TimelockController.sol", - "@orcaprotocol/contracts/contracts/ControllerV1.sol", - "@orcaprotocol/contracts/contracts/MemberToken.sol", - "../../utils/Vm.sol", - "../../utils/DSTest.sol", - "../../../pods/PodFactory.sol", - "../../../pods/PodAdminGateway.sol", - "../../../pods/interfaces/IPodAdminGateway.sol", - "../fixtures/Orca.sol", - "../../../pods/interfaces/IPodFactory.sol", - "../../../core/TribeRoles.sol", - "../../../core/ICore.sol", - "../fixtures/MainnetAddresses.sol", - "../../../core/Core.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "PodAdminGatewayIntegrationTest" - ] - }, - "/home/caleb/fei-protocol-core/contracts/test/integration/governance/NopeDAO.t.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "b81ca22a9a0d1f9ca970f945906c8930", - "sourceName": "contracts/test/integration/governance/NopeDAO.t.sol", - "solcConfig": { - "version": "0.8.7", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/governance/TimelockController.sol", - "@openzeppelin/contracts/token/ERC20/extensions/ERC20VotesComp.sol", - "../../utils/DSTest.sol", - "../../../pods/interfaces/IPodFactory.sol", - "../../utils/Vm.sol", - "../../../core/TribeRoles.sol", - "../../../dao/nopeDAO/NopeDAO.sol", - "../../../core/Core.sol", - "../../../pods/PodFactory.sol", - "../fixtures/MainnetAddresses.sol", - "../fixtures/Orca.sol", - "../../../pods/PodAdminGateway.sol", - "../../utils/Fixtures.sol", - "../../../pods/interfaces/IPodFactory.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "NopeDAOIntegrationTest" - ] - }, - "/home/caleb/fei-protocol-core/contracts/test/integration/governance/OptimisticPodTest.t.sol": { - "lastModificationDate": 1651196504870, - "contentHash": "ab82b363a6f8ad0d89d619a44c0fc404", - "sourceName": "contracts/test/integration/governance/OptimisticPodTest.t.sol", - "solcConfig": { - "version": "0.8.7", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "@openzeppelin/contracts/governance/TimelockController.sol", - "@orcaprotocol/contracts/contracts/MemberToken.sol", - "@orcaprotocol/contracts/contracts/ControllerV1.sol", - "../../../pods/interfaces/IGnosisSafe.sol", - "../fixtures/Orca.sol", - "../fixtures/MainnetAddresses.sol", - "../../utils/Vm.sol", - "../../utils/DSTest.sol" - ], - "versionPragmas": [ - "^0.8.0" - ], - "artifacts": [ - "OptimisticPodIntegrationTest" - ] - }, - "/home/caleb/fei-protocol-core/contracts/external/WETH9.sol": { - "lastModificationDate": 1646115056090, - "contentHash": "af8a53a7090868789adbf57aa6d3ab6b", - "sourceName": "contracts/external/WETH9.sol", - "solcConfig": { - "version": "0.4.18", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.4.18" - ], - "artifacts": [ - "WETH9" - ] - } - } -} From 12955bf5bc241c358d08e4999dcded4150278643 Mon Sep 17 00:00:00 2001 From: Caleb Ditchfield Date: Thu, 5 May 2022 23:48:11 -0700 Subject: [PATCH 095/121] we do want to cache the solcache --- .circleci/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 996fbde57..2d3aaa5b7 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -37,6 +37,7 @@ jobs: paths: - artifacts - types/contracts + - cache/solidity-files-cache.json - restore_cache: # Restore the hardhat network fork cache if the hardhad-config hasn't changed key: hardhat-config-{{ checksum "hardhat.config.ts" }} - persist_to_workspace: From efce372d1ae8d057e9f61e5bf122cf20944645f3 Mon Sep 17 00:00:00 2001 From: Caleb Ditchfield Date: Thu, 5 May 2022 23:57:03 -0700 Subject: [PATCH 096/121] fix glob --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 2d3aaa5b7..923fe28ca 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -105,7 +105,7 @@ jobs: - run: name: Run end-to-end tests command: | - circleci tests glob "test/integration/**/*.ts" | circleci tests split --split-by=timings > /tmp/tests-to-run + circleci tests glob "test/integration/tests/*.ts" | circleci tests split --split-by=timings > /tmp/tests-to-run npm run test:e2e $(cat /tmp/tests-to-run) - store_test_results: path: test-results From e2b9da02a37847eb34f0672b54b2715fc7c0c4e1 Mon Sep 17 00:00:00 2001 From: Caleb Ditchfield Date: Fri, 6 May 2022 00:00:37 -0700 Subject: [PATCH 097/121] fix --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 923fe28ca..f6f93b03b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -105,7 +105,7 @@ jobs: - run: name: Run end-to-end tests command: | - circleci tests glob "test/integration/tests/*.ts" | circleci tests split --split-by=timings > /tmp/tests-to-run + circleci tests glob "test/integration/tests/*.ts" | circleci tests split --split-by=timings --timings-type=filename > /tmp/tests-to-run npm run test:e2e $(cat /tmp/tests-to-run) - store_test_results: path: test-results From a28be35f067042e646a0958617f78cd35b913e16 Mon Sep 17 00:00:00 2001 From: Caleb Ditchfield Date: Fri, 6 May 2022 00:15:00 -0700 Subject: [PATCH 098/121] fix paralle numbers --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index f6f93b03b..e8100ef41 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -98,7 +98,7 @@ jobs: e2e-test: working_directory: ~/repo executor: nodeimage - parallelism: 28 + parallelism: 20 steps: - attach_workspace: at: ./ From 322b2d28fd34496095b1392372bf2340c98dd816 Mon Sep 17 00:00:00 2001 From: Caleb Ditchfield Date: Fri, 6 May 2022 00:28:04 -0700 Subject: [PATCH 099/121] restore the fork-cache in e2e --- .circleci/config.yml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index e8100ef41..1fccbfd0b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -38,7 +38,7 @@ jobs: - artifacts - types/contracts - cache/solidity-files-cache.json - - restore_cache: # Restore the hardhat network fork cache if the hardhad-config hasn't changed + - restore_cache: # Restore the hardhat network fork cache if the hardhat-config hasn't changed key: hardhat-config-{{ checksum "hardhat.config.ts" }} - persist_to_workspace: root: ~/repo @@ -66,9 +66,9 @@ jobs: circleci tests glob "test/unit/**/*.ts" | circleci tests split --split-by=filesize > /tmp/tests-to-run npm run test:hardhat $(cat /tmp/tests-to-run) - store_test_results: - path: test-results + path: test-results - store_artifacts: - path: test-results + path: test-results test-forge: working_directory: ~/repo @@ -102,15 +102,17 @@ jobs: steps: - attach_workspace: at: ./ + - restore_cache: + key: fork-cache-{{ checksum "hardhat.config.ts" }} - run: name: Run end-to-end tests command: | circleci tests glob "test/integration/tests/*.ts" | circleci tests split --split-by=timings --timings-type=filename > /tmp/tests-to-run npm run test:e2e $(cat /tmp/tests-to-run) - store_test_results: - path: test-results + path: test-results - store_artifacts: - path: test-results + path: test-results - persist_to_workspace: root: ~/repo paths: From 6c050f81bfdb7887a32cb8a8b208dbaa438f5783 Mon Sep 17 00:00:00 2001 From: Caleb Ditchfield Date: Fri, 6 May 2022 00:40:34 -0700 Subject: [PATCH 100/121] remove extraenous resetfork --- test/integration/tests/backstop.ts | 1 - test/integration/tests/balancer-weightedpool.ts | 1 - test/integration/tests/buybacks.ts | 1 - test/integration/tests/daiFixedPricePSM.ts | 1 - test/integration/tests/dao.ts | 1 - test/integration/tests/ethPSM.ts | 1 - test/integration/tests/fei.ts | 1 - test/integration/tests/fip-38-tokemak.ts | 1 - test/integration/tests/fuse.ts | 1 - test/integration/tests/lusdPSM.ts | 1 - test/integration/tests/merger.ts.disabled | 1 - test/integration/tests/old/migrateProxies/index.ts | 1 - test/integration/tests/podOperation.ts | 1 - test/integration/tests/psm.ts | 1 - test/integration/tests/staking.ts | 1 - test/integration/tests/tribalCouncil.ts | 1 - test/integration/tests/turboPCVDeposit.ts | 1 - 17 files changed, 17 deletions(-) diff --git a/test/integration/tests/backstop.ts b/test/integration/tests/backstop.ts index 9eade3b5a..9988b00cd 100644 --- a/test/integration/tests/backstop.ts +++ b/test/integration/tests/backstop.ts @@ -21,7 +21,6 @@ describe('e2e-backstop', function () { before(async () => { chai.use(CBN(ethers.BigNumber)); chai.use(solidity); - await resetFork(); }); before(async function () { diff --git a/test/integration/tests/balancer-weightedpool.ts b/test/integration/tests/balancer-weightedpool.ts index a63600648..8c10e6fd7 100644 --- a/test/integration/tests/balancer-weightedpool.ts +++ b/test/integration/tests/balancer-weightedpool.ts @@ -21,7 +21,6 @@ describe('balancer-weightedpool', function () { before(async () => { chai.use(CBN(ethers.BigNumber)); chai.use(solidity); - await resetFork(); }); before(async function () { diff --git a/test/integration/tests/buybacks.ts b/test/integration/tests/buybacks.ts index a81ef839b..974ffac88 100644 --- a/test/integration/tests/buybacks.ts +++ b/test/integration/tests/buybacks.ts @@ -26,7 +26,6 @@ describe('e2e-buybacks', function () { before(async () => { chai.use(CBN(ethers.BigNumber)); chai.use(solidity); - await resetFork(); }); before(async function () { diff --git a/test/integration/tests/daiFixedPricePSM.ts b/test/integration/tests/daiFixedPricePSM.ts index 5670c8e59..69a66271a 100644 --- a/test/integration/tests/daiFixedPricePSM.ts +++ b/test/integration/tests/daiFixedPricePSM.ts @@ -14,7 +14,6 @@ import { FixedPricePSM } from '@custom-types/contracts'; before(async () => { chai.use(CBN(ethers.BigNumber)); chai.use(solidity); - await resetFork(); }); describe('e2e-peg-stability-module', function () { diff --git a/test/integration/tests/dao.ts b/test/integration/tests/dao.ts index 384b1476e..2257af38f 100644 --- a/test/integration/tests/dao.ts +++ b/test/integration/tests/dao.ts @@ -20,7 +20,6 @@ describe('e2e-dao', function () { before(async () => { chai.use(CBN(ethers.BigNumber)); chai.use(solidity); - await resetFork(); }); before(async function () { diff --git a/test/integration/tests/ethPSM.ts b/test/integration/tests/ethPSM.ts index 01d35912e..a2713519f 100644 --- a/test/integration/tests/ethPSM.ts +++ b/test/integration/tests/ethPSM.ts @@ -40,7 +40,6 @@ describe('eth PSM', function () { before(async () => { chai.use(CBN(ethers.BigNumber)); chai.use(solidity); - await resetFork(); }); before(async function () { diff --git a/test/integration/tests/fei.ts b/test/integration/tests/fei.ts index e0abe1991..5a8687511 100644 --- a/test/integration/tests/fei.ts +++ b/test/integration/tests/fei.ts @@ -22,7 +22,6 @@ describe('e2e-fei', function () { before(async () => { chai.use(CBN(ethers.BigNumber)); chai.use(solidity); - await resetFork(); }); before(async function () { diff --git a/test/integration/tests/fip-38-tokemak.ts b/test/integration/tests/fip-38-tokemak.ts index 7d78c1764..1f24bd066 100644 --- a/test/integration/tests/fip-38-tokemak.ts +++ b/test/integration/tests/fip-38-tokemak.ts @@ -23,7 +23,6 @@ describe('e2e-fip-38-tokemak', function () { before(async () => { chai.use(CBN(ethers.BigNumber)); chai.use(solidity); - await resetFork(); }); before(async function () { diff --git a/test/integration/tests/fuse.ts b/test/integration/tests/fuse.ts index 835907156..99a298480 100644 --- a/test/integration/tests/fuse.ts +++ b/test/integration/tests/fuse.ts @@ -11,7 +11,6 @@ import { forceEth } from '../setup/utils'; before(async () => { chai.use(CBN(ethers.BigNumber)); chai.use(solidity); - await resetFork(); }); describe('e2e-fuse', function () { diff --git a/test/integration/tests/lusdPSM.ts b/test/integration/tests/lusdPSM.ts index 088a53539..bf7ed53ba 100644 --- a/test/integration/tests/lusdPSM.ts +++ b/test/integration/tests/lusdPSM.ts @@ -38,7 +38,6 @@ describe('lusd PSM', function () { before(async () => { chai.use(CBN(ethers.BigNumber)); chai.use(solidity); - await resetFork(); }); before(async function () { diff --git a/test/integration/tests/merger.ts.disabled b/test/integration/tests/merger.ts.disabled index 636682869..561000e02 100644 --- a/test/integration/tests/merger.ts.disabled +++ b/test/integration/tests/merger.ts.disabled @@ -22,7 +22,6 @@ describe('e2e-merger', function () { before(async () => { chai.use(CBN(ethers.BigNumber)); chai.use(solidity); - await resetFork(); }); before(async function () { diff --git a/test/integration/tests/old/migrateProxies/index.ts b/test/integration/tests/old/migrateProxies/index.ts index c829a3079..70d6cf2d3 100644 --- a/test/integration/tests/old/migrateProxies/index.ts +++ b/test/integration/tests/old/migrateProxies/index.ts @@ -32,7 +32,6 @@ describe.skip('e2e-migrate-proxies', function () { before(async () => { chai.use(CBN(ethers.BigNumber)); chai.use(solidity); - await resetFork(); }); before(async function () { diff --git a/test/integration/tests/podOperation.ts b/test/integration/tests/podOperation.ts index 9ab8d2594..7b833d572 100644 --- a/test/integration/tests/podOperation.ts +++ b/test/integration/tests/podOperation.ts @@ -40,7 +40,6 @@ describe('Pod operation and veto', function () { before(async () => { chai.use(CBN(ethers.BigNumber)); chai.use(solidity); - await resetFork(); }); beforeEach(async function () { diff --git a/test/integration/tests/psm.ts b/test/integration/tests/psm.ts index 997164b2c..25a0d2a60 100644 --- a/test/integration/tests/psm.ts +++ b/test/integration/tests/psm.ts @@ -38,7 +38,6 @@ describe('e2e-peg-stability-module', function () { before(async () => { chai.use(CBN(ethers.BigNumber)); chai.use(solidity); - await resetFork(); }); before(async function () { diff --git a/test/integration/tests/staking.ts b/test/integration/tests/staking.ts index da814b9d8..72d9caa4f 100644 --- a/test/integration/tests/staking.ts +++ b/test/integration/tests/staking.ts @@ -29,7 +29,6 @@ describe('e2e-staking', function () { before(async () => { chai.use(CBN(ethers.BigNumber)); chai.use(solidity); - await resetFork(); }); before(async function () { diff --git a/test/integration/tests/tribalCouncil.ts b/test/integration/tests/tribalCouncil.ts index a44ecd28a..f21126f64 100644 --- a/test/integration/tests/tribalCouncil.ts +++ b/test/integration/tests/tribalCouncil.ts @@ -33,7 +33,6 @@ describe('Tribal Council', function () { before(async () => { chai.use(CBN(ethers.BigNumber)); chai.use(solidity); - await resetFork(); }); before(async function () { diff --git a/test/integration/tests/turboPCVDeposit.ts b/test/integration/tests/turboPCVDeposit.ts index d4442a3ae..b2b8b429e 100644 --- a/test/integration/tests/turboPCVDeposit.ts +++ b/test/integration/tests/turboPCVDeposit.ts @@ -23,7 +23,6 @@ describe('Turbo PCV deposit', function () { before(async () => { chai.use(CBN(ethers.BigNumber)); chai.use(solidity); - await resetFork(); }); before(async function () { From 217a52a0c3e827c31f30a38cd28659dd684a0b56 Mon Sep 17 00:00:00 2001 From: Caleb Ditchfield Date: Fri, 6 May 2022 00:54:45 -0700 Subject: [PATCH 101/121] change beforeEach to before --- test/integration/tests/podOperation.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/integration/tests/podOperation.ts b/test/integration/tests/podOperation.ts index 7b833d572..7c938952a 100644 --- a/test/integration/tests/podOperation.ts +++ b/test/integration/tests/podOperation.ts @@ -42,7 +42,7 @@ describe('Pod operation and veto', function () { chai.use(solidity); }); - beforeEach(async function () { + before(async function () { // Setup test environment and get contracts const version = 1; // Set deploy address to Tom's address. This has Orca SHIP From 873e763553b1e9765525084da7b39fa5ab0af5d4 Mon Sep 17 00:00:00 2001 From: Caleb Ditchfield Date: Fri, 6 May 2022 01:07:37 -0700 Subject: [PATCH 102/121] change params so hash is different --- .circleci/config.yml | 2 +- test/integration/tests/podOperation.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 1fccbfd0b..c218d088a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -107,7 +107,7 @@ jobs: - run: name: Run end-to-end tests command: | - circleci tests glob "test/integration/tests/*.ts" | circleci tests split --split-by=timings --timings-type=filename > /tmp/tests-to-run + circleci tests glob "test/integration/tests/*.ts" | circleci tests split --split-by=filesize > /tmp/tests-to-run npm run test:e2e $(cat /tmp/tests-to-run) - store_test_results: path: test-results diff --git a/test/integration/tests/podOperation.ts b/test/integration/tests/podOperation.ts index 7c938952a..fb8d444d9 100644 --- a/test/integration/tests/podOperation.ts +++ b/test/integration/tests/podOperation.ts @@ -179,7 +179,7 @@ describe('Pod operation and veto', function () { 0, registryTxData, '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000001' + '0x0000000000000000000000000000000000000000000000000000000000000002' ); // User proposes on NopeDAO From 8b644338d1ad24b339627171107079c9cbf021e2 Mon Sep 17 00:00:00 2001 From: Caleb Ditchfield Date: Fri, 6 May 2022 01:23:15 -0700 Subject: [PATCH 103/121] fix pod test --- test/integration/tests/podOperation.ts | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/test/integration/tests/podOperation.ts b/test/integration/tests/podOperation.ts index fb8d444d9..2731a29ee 100644 --- a/test/integration/tests/podOperation.ts +++ b/test/integration/tests/podOperation.ts @@ -33,6 +33,7 @@ describe('Pod operation and veto', function () { let timelockAddress: string; let podTimelock: Contract; let registryTxData: string; + let registryTxData2: string; const proposalId = '1234'; const proposalMetadata = 'FIP_XX: This tests that the governance upgrade flow works'; @@ -124,6 +125,12 @@ describe('Pod operation and veto', function () { proposalMetadata ]); + registryTxData2 = contracts.governanceMetadataRegistry.interface.encodeFunctionData('registerProposal', [ + podId, + proposalId, + proposalMetadata + ]); + // Grant the Pod Safe and timelock eth await forceEth(safeAddress); await forceEth(timelockAddress); @@ -136,11 +143,25 @@ describe('Pod operation and veto', function () { '0x0000000000000000000000000000000000000000000000000000000000000001', podConfig.minDelay ]); + + const txArgs2 = createSafeTxArgs(podTimelock, 'schedule', [ + contractAddresses.governanceMetadataRegistry, + 0, + registryTxData2, + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000001', + podConfig.minDelay + ]); + const safeTransaction = await safeSDK.createTransaction(txArgs); + const safeTransaction2 = await safeSDK.createTransaction(txArgs2); // 3.0 Execute transaction on Safe const executeTxResponse = await safeSDK.executeTransaction(safeTransaction); await executeTxResponse.transactionResponse?.wait(); + + const executeTxResponse2 = await safeSDK.executeTransaction(safeTransaction2); + await executeTxResponse2.transactionResponse?.wait(); }); it('should allow a proposal to be proposed and executed', async () => { @@ -177,9 +198,9 @@ describe('Pod operation and veto', function () { const timelockProposalId = await podTimelock.hashOperation( contractAddresses.governanceMetadataRegistry, 0, - registryTxData, + registryTxData2, '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000002' + '0x0000000000000000000000000000000000000000000000000000000000000001' ); // User proposes on NopeDAO From b11c09db99f50310fd465a5724a2756168f30f8e Mon Sep 17 00:00:00 2001 From: Caleb Ditchfield Date: Fri, 6 May 2022 01:35:43 -0700 Subject: [PATCH 104/121] fix --- test/integration/tests/podOperation.ts | 39 +++++++++++++------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/test/integration/tests/podOperation.ts b/test/integration/tests/podOperation.ts index 2731a29ee..2d0f7cdce 100644 --- a/test/integration/tests/podOperation.ts +++ b/test/integration/tests/podOperation.ts @@ -34,6 +34,7 @@ describe('Pod operation and veto', function () { let podTimelock: Contract; let registryTxData: string; let registryTxData2: string; + let safeSDK: any; const proposalId = '1234'; const proposalMetadata = 'FIP_XX: This tests that the governance upgrade flow works'; @@ -109,7 +110,7 @@ describe('Pod operation and veto', function () { // 2.0 Instantiate Gnosis SDK podTimelock = new ethers.Contract(timelockAddress, timelockABI, podMemberSigner); - const safeSDK = await initialiseGnosisSDK(podMemberSigner, safeAddress); + safeSDK = await initialiseGnosisSDK(podMemberSigner, safeAddress); // 3. TribalCouncil authorises pod with POD_METADATA_REGISTER_ROLE role await contracts.core @@ -125,12 +126,6 @@ describe('Pod operation and veto', function () { proposalMetadata ]); - registryTxData2 = contracts.governanceMetadataRegistry.interface.encodeFunctionData('registerProposal', [ - podId, - proposalId, - proposalMetadata - ]); - // Grant the Pod Safe and timelock eth await forceEth(safeAddress); await forceEth(timelockAddress); @@ -144,24 +139,11 @@ describe('Pod operation and veto', function () { podConfig.minDelay ]); - const txArgs2 = createSafeTxArgs(podTimelock, 'schedule', [ - contractAddresses.governanceMetadataRegistry, - 0, - registryTxData2, - '0x0000000000000000000000000000000000000000000000000000000000000000', - '0x0000000000000000000000000000000000000000000000000000000000000001', - podConfig.minDelay - ]); - const safeTransaction = await safeSDK.createTransaction(txArgs); - const safeTransaction2 = await safeSDK.createTransaction(txArgs2); // 3.0 Execute transaction on Safe const executeTxResponse = await safeSDK.executeTransaction(safeTransaction); await executeTxResponse.transactionResponse?.wait(); - - const executeTxResponse2 = await safeSDK.executeTransaction(safeTransaction2); - await executeTxResponse2.transactionResponse?.wait(); }); it('should allow a proposal to be proposed and executed', async () => { @@ -190,6 +172,23 @@ describe('Pod operation and veto', function () { }); it('should allow the nopeDAO to veto a proposal through the pod', async () => { + const registryTxData2 = contracts.governanceMetadataRegistry.interface.encodeFunctionData('registerProposal', [ + podId, + proposalId, + proposalMetadata + ]); + const txArgs2 = createSafeTxArgs(podTimelock, 'schedule', [ + contractAddresses.governanceMetadataRegistry, + 0, + registryTxData2, + '0x0000000000000000000000000000000000000000000000000000000000000000', + '0x0000000000000000000000000000000000000000000000000000000000000001', + podConfig.minDelay + ]); + const safeTransaction2 = await safeSDK.createTransaction(txArgs2); + const executeTxResponse2 = await safeSDK.executeTransaction(safeTransaction2); + await executeTxResponse2.transactionResponse?.wait(); + // 1. Create proposal on the NopeDAO to veto. This proposal needs to // call the podAdminGateway.veto() method with the proposalId that is in the timelock // 2. Have a member with >quorum TRIBE vote for proposal From 141713de6d4aa57995cf524a4074142f488b091c Mon Sep 17 00:00:00 2001 From: Caleb Ditchfield Date: Fri, 6 May 2022 01:43:25 -0700 Subject: [PATCH 105/121] must fix proposal id --- test/integration/tests/podOperation.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/integration/tests/podOperation.ts b/test/integration/tests/podOperation.ts index 2d0f7cdce..2343038c5 100644 --- a/test/integration/tests/podOperation.ts +++ b/test/integration/tests/podOperation.ts @@ -172,9 +172,10 @@ describe('Pod operation and veto', function () { }); it('should allow the nopeDAO to veto a proposal through the pod', async () => { + const proposalId2 = '4321'; const registryTxData2 = contracts.governanceMetadataRegistry.interface.encodeFunctionData('registerProposal', [ podId, - proposalId, + proposalId2, proposalMetadata ]); const txArgs2 = createSafeTxArgs(podTimelock, 'schedule', [ From ad01a9c403ea95167a1dedfaaaf99529361eb3ea Mon Sep 17 00:00:00 2001 From: Caleb Ditchfield Date: Fri, 6 May 2022 01:52:49 -0700 Subject: [PATCH 106/121] some final speedupds --- test/helpers.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/test/helpers.ts b/test/helpers.ts index bcdfc978a..840f2a236 100644 --- a/test/helpers.ts +++ b/test/helpers.ts @@ -222,9 +222,7 @@ const time = { if (durationBN.lt(ethers.constants.Zero)) throw Error(`Cannot increase time by a negative amount (${duration})`); - await hre.network.provider.send('evm_increaseTime', [durationBN.toNumber()]); - - await hre.network.provider.send('evm_mine'); + await hre.network.provider.send('hardhat_mine', ['0x1', ethers.utils.hexStripZeros(durationBN.toHexString())]); }, increaseTo: async (target: number | string | BigNumberish): Promise => { @@ -249,7 +247,7 @@ const time = { }, advanceBlock: async (): Promise => { - await hre.network.provider.send('evm_mine'); + await hre.network.provider.send('hardhat_mine'); } }; From 212d18ad0acf52458b97e6fa94a557160dab1d5e Mon Sep 17 00:00:00 2001 From: Caleb Ditchfield Date: Fri, 6 May 2022 01:55:32 -0700 Subject: [PATCH 107/121] found another one --- test/helpers.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/helpers.ts b/test/helpers.ts index 840f2a236..dd94c3251 100644 --- a/test/helpers.ts +++ b/test/helpers.ts @@ -109,7 +109,7 @@ async function latestTime(): Promise { async function mine(): Promise { await hre.network.provider.request({ - method: 'evm_mine' + method: 'hardhat_mine' }); } From fa7c6e720aec9fc0aa409d2924557cb7ea5db007 Mon Sep 17 00:00:00 2001 From: Caleb Ditchfield Date: Fri, 6 May 2022 02:06:41 -0700 Subject: [PATCH 108/121] try fix --- test/helpers.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/helpers.ts b/test/helpers.ts index dd94c3251..8b033fb69 100644 --- a/test/helpers.ts +++ b/test/helpers.ts @@ -222,7 +222,7 @@ const time = { if (durationBN.lt(ethers.constants.Zero)) throw Error(`Cannot increase time by a negative amount (${duration})`); - await hre.network.provider.send('hardhat_mine', ['0x1', ethers.utils.hexStripZeros(durationBN.toHexString())]); + await hre.network.provider.send('hardhat_mine', ['0x2', ethers.utils.hexStripZeros(durationBN.toHexString())]); }, increaseTo: async (target: number | string | BigNumberish): Promise => { From 1141478a9c9d17ae1ff44764010f845714fc7891 Mon Sep 17 00:00:00 2001 From: Caleb Ditchfield Date: Fri, 6 May 2022 02:08:23 -0700 Subject: [PATCH 109/121] special case for zero --- test/helpers.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/helpers.ts b/test/helpers.ts index 8b033fb69..40f7abccc 100644 --- a/test/helpers.ts +++ b/test/helpers.ts @@ -222,7 +222,11 @@ const time = { if (durationBN.lt(ethers.constants.Zero)) throw Error(`Cannot increase time by a negative amount (${duration})`); - await hre.network.provider.send('hardhat_mine', ['0x2', ethers.utils.hexStripZeros(durationBN.toHexString())]); + if (durationBN.eq(ethers.constants.Zero)) { + await hre.network.provider.send('hardhat_mine'); + } else { + await hre.network.provider.send('hardhat_mine', ['0x2', ethers.utils.hexStripZeros(durationBN.toHexString())]); + } }, increaseTo: async (target: number | string | BigNumberish): Promise => { From e2981a9f48f0163176ba24c5171d8947b713c64d Mon Sep 17 00:00:00 2001 From: Caleb Ditchfield Date: Fri, 6 May 2022 02:20:40 -0700 Subject: [PATCH 110/121] SigmaProposal --- scripts/utils/constructProposal.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/scripts/utils/constructProposal.ts b/scripts/utils/constructProposal.ts index aeaa9a586..06356822d 100644 --- a/scripts/utils/constructProposal.ts +++ b/scripts/utils/constructProposal.ts @@ -9,9 +9,10 @@ import { PACKAGE_NAME, errors } from '@idle-finance/hardhat-proposals-plugin/dis import { BN } from 'ethereumjs-util'; export class SigmaProposal extends AlphaProposal { - protected async mineBlocks(blocks: any) { + async mineBlocks(blocks: any) { const blocksToMine = BigNumber.from(blocks).toNumber(); await hre.network.provider.send('hardhat_mine', [new BN(blocksToMine)]); + console.log('Mined ' + blocksToMine + ' blocks via SigmaProposalBuilder.'); } async simulate(fullSimulation = false, force?: boolean) { @@ -26,6 +27,9 @@ export class SigmaProposal extends AlphaProposal { } } +proposals.proposals.alpha.prototype.mineBlocks = SigmaProposal.prototype.mineBlocks; +proposals.proposals.alpha.prototype.simulate = SigmaProposal.prototype.simulate; + /** * Constucts a hardhat proposal object * https://github.com/Idle-Finance/hardhat-proposals-plugin/blob/main/src/proposals/proposal.ts @@ -55,7 +59,6 @@ export default async function constructProposal( } proposalBuilder.setDescription(`${proposalInfo.title}\n${proposalDescription.toString()}`); // Set proposal description - const proposal = proposalBuilder.build(); proposal.simulate = new SigmaProposal(hre).simulate; logging && console.log(await proposal.printProposalInfo()); From c69a57c07fc0c662c70870904f9392009a4897f3 Mon Sep 17 00:00:00 2001 From: Caleb Ditchfield Date: Fri, 6 May 2022 02:43:02 -0700 Subject: [PATCH 111/121] sigmaproposal --- scripts/utils/constructProposal.ts | 33 +++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/scripts/utils/constructProposal.ts b/scripts/utils/constructProposal.ts index 06356822d..9ebd284ba 100644 --- a/scripts/utils/constructProposal.ts +++ b/scripts/utils/constructProposal.ts @@ -1,15 +1,19 @@ import hre, { proposals } from 'hardhat'; import { MainnetContracts, NamedAddresses, ProposalDescription } from '@custom-types/types'; import format from 'string-template'; -import { AlphaProposal } from '@idle-finance/hardhat-proposals-plugin/dist/src/proposals/compound-alpha'; +import { + AlphaProposal, + AlphaProposalBuilder +} from '@idle-finance/hardhat-proposals-plugin/dist/src/proposals/compound-alpha'; import { BigNumber } from 'ethers'; import { InternalProposalState } from '@idle-finance/hardhat-proposals-plugin/dist/src/proposals/proposal'; import { HardhatPluginError } from 'hardhat/plugins'; import { PACKAGE_NAME, errors } from '@idle-finance/hardhat-proposals-plugin/dist/src/constants'; import { BN } from 'ethereumjs-util'; +import { HardhatRuntimeEnvironment } from 'hardhat/types'; export class SigmaProposal extends AlphaProposal { - async mineBlocks(blocks: any) { + protected async mineBlocks(blocks: any) { const blocksToMine = BigNumber.from(blocks).toNumber(); await hre.network.provider.send('hardhat_mine', [new BN(blocksToMine)]); console.log('Mined ' + blocksToMine + ' blocks via SigmaProposalBuilder.'); @@ -27,8 +31,20 @@ export class SigmaProposal extends AlphaProposal { } } -proposals.proposals.alpha.prototype.mineBlocks = SigmaProposal.prototype.mineBlocks; -proposals.proposals.alpha.prototype.simulate = SigmaProposal.prototype.simulate; +export class SigmaProposalBuilder extends AlphaProposalBuilder { + proposal: SigmaProposal; + + constructor(hre: HardhatRuntimeEnvironment, governor?: any, votingToken?: any, maxActions = 50) { + super(hre); + + this.maxActions = maxActions; + this.proposal = new SigmaProposal(hre, governor, votingToken); + } + + build() { + return this.proposal; + } +} /** * Constucts a hardhat proposal object @@ -40,12 +56,16 @@ export default async function constructProposal( contracts: MainnetContracts, contractAddresses: NamedAddresses, logging = false -): Promise { +): Promise { logging && console.log(`Constructing proposal...`); const proposalDescription = proposalInfo.description; - const proposalBuilder = proposals.builders.alpha(); + const proposalBuilder = new SigmaProposalBuilder( + hre, + hre.config.proposals.governor, + hre.config.proposals.votingToken + ); proposalBuilder.maxActions = 50; for (let i = 0; i < proposalInfo.commands.length; i += 1) { @@ -60,7 +80,6 @@ export default async function constructProposal( proposalBuilder.setDescription(`${proposalInfo.title}\n${proposalDescription.toString()}`); // Set proposal description const proposal = proposalBuilder.build(); - proposal.simulate = new SigmaProposal(hre).simulate; logging && console.log(await proposal.printProposalInfo()); return proposal; } From 5f43ac4f724fde532e64149e12965cc86d7f6d8f Mon Sep 17 00:00:00 2001 From: Caleb Ditchfield Date: Fri, 6 May 2022 02:48:07 -0700 Subject: [PATCH 112/121] fix bug --- scripts/utils/constructProposal.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/scripts/utils/constructProposal.ts b/scripts/utils/constructProposal.ts index 9ebd284ba..5d30ebc55 100644 --- a/scripts/utils/constructProposal.ts +++ b/scripts/utils/constructProposal.ts @@ -5,17 +5,16 @@ import { AlphaProposal, AlphaProposalBuilder } from '@idle-finance/hardhat-proposals-plugin/dist/src/proposals/compound-alpha'; -import { BigNumber } from 'ethers'; +import { BigNumber, utils } from 'ethers'; import { InternalProposalState } from '@idle-finance/hardhat-proposals-plugin/dist/src/proposals/proposal'; import { HardhatPluginError } from 'hardhat/plugins'; import { PACKAGE_NAME, errors } from '@idle-finance/hardhat-proposals-plugin/dist/src/constants'; -import { BN } from 'ethereumjs-util'; import { HardhatRuntimeEnvironment } from 'hardhat/types'; export class SigmaProposal extends AlphaProposal { protected async mineBlocks(blocks: any) { - const blocksToMine = BigNumber.from(blocks).toNumber(); - await hre.network.provider.send('hardhat_mine', [new BN(blocksToMine)]); + const blocksToMine = BigNumber.from(blocks); + await hre.network.provider.send('hardhat_mine', [utils.hexStripZeros(blocksToMine.toHexString())]); console.log('Mined ' + blocksToMine + ' blocks via SigmaProposalBuilder.'); } From 990648ab5e11a0bd50c6435d5c198733e94d90cf Mon Sep 17 00:00:00 2001 From: Caleb Ditchfield Date: Fri, 6 May 2022 03:13:44 -0700 Subject: [PATCH 113/121] replace --- scripts/utils/constructProposal.ts | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/scripts/utils/constructProposal.ts b/scripts/utils/constructProposal.ts index 5d30ebc55..26bc1b218 100644 --- a/scripts/utils/constructProposal.ts +++ b/scripts/utils/constructProposal.ts @@ -10,12 +10,25 @@ import { InternalProposalState } from '@idle-finance/hardhat-proposals-plugin/di import { HardhatPluginError } from 'hardhat/plugins'; import { PACKAGE_NAME, errors } from '@idle-finance/hardhat-proposals-plugin/dist/src/constants'; import { HardhatRuntimeEnvironment } from 'hardhat/types'; +import { time } from '@test/helpers'; export class SigmaProposal extends AlphaProposal { protected async mineBlocks(blocks: any) { const blocksToMine = BigNumber.from(blocks); await hre.network.provider.send('hardhat_mine', [utils.hexStripZeros(blocksToMine.toHexString())]); - console.log('Mined ' + blocksToMine + ' blocks via SigmaProposalBuilder.'); + console.log( + `Mined ${blocksToMine.toString()} blocks via SigmaProposalBuilder. (kryptoklob just saved you ${ + blocksToMine.toNumber() / 10 + } seconds of your life.)` + ); + } + + protected async mineBlock(timestamp?: number) { + if (timestamp) { + await time.increaseTo(timestamp); + } else { + await hre.network.provider.send('evm_mine'); + } } async simulate(fullSimulation = false, force?: boolean) { From a41909c3e6e1d6eac05a0813cc389cfe75dbbae3 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Fri, 6 May 2022 12:52:15 +0100 Subject: [PATCH 114/121] feat: update proposalId --- test/integration/proposals_config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/integration/proposals_config.ts b/test/integration/proposals_config.ts index c50af56c3..b20940e54 100644 --- a/test/integration/proposals_config.ts +++ b/test/integration/proposals_config.ts @@ -20,7 +20,7 @@ const proposals: ProposalsConfigMap = { deploy: false, // deploy flag for whether to run deploy action during e2e tests or use mainnet state totalValue: 0, // amount of ETH to send to DAO execution proposal: fip_82b, - proposalId: '', + proposalId: '100114570810112501972314307970004446869175784368342294400079771147860837319881', affectedContractSignoff: [ 'core', 'fuseGuardian', From e5e54b3da264438063fd09eae8fa528ba4342d50 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Fri, 6 May 2022 13:00:19 +0100 Subject: [PATCH 115/121] deps: update block number --- hardhat.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hardhat.config.ts b/hardhat.config.ts index 65d68c995..1831a6987 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -57,7 +57,7 @@ export default { forking: enableMainnetForking ? { url: `https://eth-mainnet.alchemyapi.io/v2/${mainnetAlchemyApiKey}`, - blockNumber: 14714028 // Thursday, May 5th + blockNumber: 14723389 // Friday, May 6th } : undefined }, From a4596b30e9d08cdd0af4839e500b72841a4895a4 Mon Sep 17 00:00:00 2001 From: Joey <31974730+Joeysantoro@users.noreply.github.com> Date: Thu, 19 May 2022 16:15:26 -0700 Subject: [PATCH 116/121] Clear proposals config --- test/integration/proposals_config.ts | 32 ---------------------------- 1 file changed, 32 deletions(-) diff --git a/test/integration/proposals_config.ts b/test/integration/proposals_config.ts index b20940e54..e825c3957 100644 --- a/test/integration/proposals_config.ts +++ b/test/integration/proposals_config.ts @@ -1,7 +1,5 @@ import { ProposalCategory, ProposalsConfigMap } from '@custom-types/types'; -import fip_82b from '@proposals/description/fip_82b'; - // import fip_xx_proposal from '@proposals/description/fip_xx'; const proposals: ProposalsConfigMap = { @@ -16,36 +14,6 @@ const proposals: ProposalsConfigMap = { category: ProposalCategory.DAO } */ - fip_82b: { - deploy: false, // deploy flag for whether to run deploy action during e2e tests or use mainnet state - totalValue: 0, // amount of ETH to send to DAO execution - proposal: fip_82b, - proposalId: '100114570810112501972314307970004446869175784368342294400079771147860837319881', - affectedContractSignoff: [ - 'core', - 'fuseGuardian', - 'optimisticMinter', - 'pcvEquityMinter', - 'indexDelegator', - 'ethTokemakPCVDeposit', - 'uniswapPCVDeposit', - 'lusdPSMFeiSkimmer', - 'ethPSMFeiSkimmer', - 'aaveEthPCVDripController', - 'daiPCVDripController', - 'lusdPCVDripController', - 'tribalCouncilTimelock', - 'feiDAOTimelock', - 'roleBastion', - 'pcvGuardianNew', - 'pcvGuardian', - 'opsOptimisticTimelock', - 'optimisticTimelock', - 'tribalChiefSyncV2' - ], - deprecatedContractSignoff: [], - category: ProposalCategory.DAO - } }; export default proposals; From 38612523b972e45faee195ef61c849c3f92de139 Mon Sep 17 00:00:00 2001 From: Joey <31974730+Joeysantoro@users.noreply.github.com> Date: Thu, 19 May 2022 16:17:49 -0700 Subject: [PATCH 117/121] Block number update --- hardhat.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hardhat.config.ts b/hardhat.config.ts index 1831a6987..4790ea15f 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -57,7 +57,7 @@ export default { forking: enableMainnetForking ? { url: `https://eth-mainnet.alchemyapi.io/v2/${mainnetAlchemyApiKey}`, - blockNumber: 14723389 // Friday, May 6th + blockNumber: 14807700 // Thursday, May 19th } : undefined }, From 9e2209eedda3e50393f86b0226df90ab39ce1813 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Fri, 20 May 2022 12:56:13 +0100 Subject: [PATCH 118/121] feat: update block num --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 076b4170c..08350784e 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "console:ropsten": "npx hardhat console --network ropsten", "clean": "forge clean && rm -rf artifacts", "test": "forge test --no-match-contract IntegrationTest", - "test:integration": "FORK_BLOCK=14516592; forge test --fork-url https://eth-mainnet.alchemyapi.io/v2/$MAINNET_ALCHEMY_API_KEY --fork-block-number $FORK_BLOCK --match-contract IntegrationTest", + "test:integration": "FORK_BLOCK=14810964; forge test --fork-url https://eth-mainnet.alchemyapi.io/v2/$MAINNET_ALCHEMY_API_KEY --fork-block-number $FORK_BLOCK --match-contract IntegrationTest", "test:integration:latest": "forge test --fork-url https://eth-mainnet.alchemyapi.io/v2/$MAINNET_ALCHEMY_API_KEY --match-contract IntegrationTest", "test:hardhat": "npx hardhat test", "test:hardhat:dependencies": "LOGGING=true NO_RESET=true npx hardhat test test/integration/tests/dependencies.ts", From 88d9dd5ed7612d2860b9a10fc9edee10de05483c Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Fri, 20 May 2022 13:02:22 +0100 Subject: [PATCH 119/121] test: unpause DAI psm for e2e tests --- .../collateralizationOracle.ts | 20 ++++--------------- test/integration/tests/daiFixedPricePSM.ts | 10 ++++++++++ test/integration/tests/psm.ts | 10 ++++++++++ 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/protocol-configuration/collateralizationOracle.ts b/protocol-configuration/collateralizationOracle.ts index 94dc4861a..929b22286 100644 --- a/protocol-configuration/collateralizationOracle.ts +++ b/protocol-configuration/collateralizationOracle.ts @@ -1,14 +1,10 @@ const collateralizationAddresses = { fei: [ 'feiOATimelockWrapper', - 'rariPool8FeiPCVDepositWrapper', 'rariPool6FeiPCVDepositWrapper', 'rariPool19FeiPCVDepositWrapper', 'rariPool24FeiPCVDepositWrapper', 'rariPool25FeiPCVDepositWrapper', - 'rariPool27FeiPCVDepositWrapper', - 'rariPool18FeiPCVDepositWrapper', - 'rariPool90FeiPCVDepositWrapper', 'aaveFeiPCVDepositWrapper', 'rariPool79FeiPCVDepositWrapper', 'rariPool31FeiPCVDepositWrapper', @@ -16,18 +12,11 @@ const collateralizationAddresses = { 'rariPool128FeiPCVDepositWrapper', 'rariPool22FeiPCVDepositWrapper', 'feiBuybackLensNoFee', - 'convexPoolPCVDepositWrapper', - 'compoundPCVDepositWrapper', + 'compoundFeiPCVDepositWrapper', 'turboFusePCVDeposit' ], - lusd: [ - 'liquityFusePoolLusdPCVDeposit', - 'rariPool7LusdPCVDeposit', - 'bammDeposit', - 'lusdPSM', - 'rariPool8LusdPCVDeposit' - ], - dai: ['compoundDaiPCVDepositWrapper', 'daiFixedPricePSM', 'rariPool8DaiPCVDeposit'], + lusd: ['liquityFusePoolLusdPCVDeposit', 'rariPool7LusdPCVDeposit', 'bammDeposit', 'lusdPSM'], + dai: ['compoundDaiPCVDepositWrapper', 'daiFixedPricePSM'], usd: ['namedStaticPCVDepositWrapper', 'd3poolCurvePCVDeposit', 'd3poolConvexPCVDeposit'], bal: ['balancerDepositBalWeth', 'balancerLensVeBalBal'], cream: ['creamDepositWrapper'], @@ -38,7 +27,6 @@ const collateralizationAddresses = { 'uniswapPCVDeposit', 'ethTokemakPCVDeposit', 'ethPSM', - 'rariPool146EthPCVDeposit', 'wethDepositWrapper', 'balancerDepositFeiWeth', 'balancerLensBpt30Fei70Weth', @@ -50,4 +38,4 @@ const collateralizationAddresses = { volt: ['voltDepositWrapper'] }; -export default collateralizationAddresses; +export default collateralizationAddresses; \ No newline at end of file diff --git a/test/integration/tests/daiFixedPricePSM.ts b/test/integration/tests/daiFixedPricePSM.ts index 69a66271a..551b0fcf3 100644 --- a/test/integration/tests/daiFixedPricePSM.ts +++ b/test/integration/tests/daiFixedPricePSM.ts @@ -122,6 +122,16 @@ describe('e2e-peg-stability-module', function () { beforeEach(async () => { await fei.connect(impersonatedSigners[minterAddress]).mint(userAddress, redeemAmount); await fei.connect(impersonatedSigners[userAddress]).approve(daiPSM.address, redeemAmount); + + const isPaused = await daiPSM.paused(); + if (isPaused) { + await daiPSM.unpause(); + } + + const isRedeemPaused = await daiPSM.redeemPaused(); + if (isRedeemPaused) { + await daiPSM.unpauseRedeem(); + } }); it('exchanges 10,000,000 FEI for DAI', async () => { diff --git a/test/integration/tests/psm.ts b/test/integration/tests/psm.ts index 3d88389b4..944202fc2 100644 --- a/test/integration/tests/psm.ts +++ b/test/integration/tests/psm.ts @@ -325,6 +325,16 @@ describe('e2e-peg-stability-module', function () { beforeEach(async () => { await fei.connect(impersonatedSigners[minterAddress]).mint(userAddress, redeemAmount); await fei.connect(impersonatedSigners[userAddress]).approve(daiFixedPricePSM.address, redeemAmount); + + const isPaused = await daiFixedPricePSM.paused(); + if (isPaused) { + await daiFixedPricePSM.unpause(); + } + + const isRedeemPaused = await daiFixedPricePSM.redeemPaused(); + if (isRedeemPaused) { + await daiFixedPricePSM.unpauseRedeem(); + } }); it('exchanges 500,000 FEI for DAI', async () => { From a310f037ba8f792a2e397ae44bf5dd50422be8a4 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Fri, 20 May 2022 14:15:13 +0100 Subject: [PATCH 120/121] feat: update mainnet addresses --- protocol-configuration/mainnetAddresses.ts | 38 ++++++++++++++-------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/protocol-configuration/mainnetAddresses.ts b/protocol-configuration/mainnetAddresses.ts index fafa309eb..5c3f82269 100644 --- a/protocol-configuration/mainnetAddresses.ts +++ b/protocol-configuration/mainnetAddresses.ts @@ -34,7 +34,7 @@ const MainnetAddresses: MainnetAddresses = { pcvGuardian: { artifactName: 'PCVGuardian', address: '0x2D1b1b509B6432A73e3d798572f0648f6453a5D9', - category: AddressCategory.Core + category: AddressCategory.Deprecated }, pcvGuardianNew: { artifactName: 'PCVGuardian', @@ -224,7 +224,7 @@ const MainnetAddresses: MainnetAddresses = { rariPool18FeiPCVDeposit: { artifactName: 'ERC20CompoundPCVDeposit', address: '0x5A8CB4556e5D5935Af06beab8292905f48131479', - category: AddressCategory.PCV_V1 + category: AddressCategory.Deprecated }, rariPool22FeiPCVDeposit: { artifactName: 'ERC20CompoundPCVDeposit', @@ -249,7 +249,7 @@ const MainnetAddresses: MainnetAddresses = { rariPool27FeiPCVDeposit: { artifactName: 'ERC20CompoundPCVDeposit', address: '0x91f50E3183a8CC30D2A981C3aFA85A2Bf6691c67', - category: AddressCategory.PCV_V1 + category: AddressCategory.Deprecated }, rariPool128FeiPCVDeposit: { artifactName: 'ERC20CompoundPCVDeposit', @@ -314,7 +314,7 @@ const MainnetAddresses: MainnetAddresses = { rariPool90FeiPCVDeposit: { artifactName: 'ERC20CompoundPCVDeposit', address: '0x61d26126D2F8A44b41c1D8E1B1F276551DC8EEc6', - category: AddressCategory.PCV_V1 + category: AddressCategory.Deprecated }, rariPool91FeiPCVDeposit: { artifactName: 'ERC20CompoundPCVDeposit', @@ -396,9 +396,14 @@ const MainnetAddresses: MainnetAddresses = { address: '0xa8E388a1f19f2b33Be8bf2cCeC43641C10b4D1e5', category: AddressCategory.External // not really External, but not PCV }, - balancerLensBpt30Fei70Weth: { + balancerLensBpt30Fei70WethOld: { artifactName: 'BalancerPool2Lens', address: '0xb31F75550e97A2C4c7AC8d4355032B8AE8b9584D', + category: AddressCategory.Deprecated + }, + balancerLensBpt30Fei70Weth: { + artifactName: 'BalancerPool2Lens', + address: '0x673f7DFA863b611dE657759aEDE629b260F4E682', category: AddressCategory.PCV }, balancerLensVeBalBal: { @@ -499,22 +504,22 @@ const MainnetAddresses: MainnetAddresses = { rariPool146EthPCVDeposit: { artifactName: 'EthCompoundPCVDeposit', address: '0xC68412B72e68c30D4E6c0854b439CBBe957146e4', - category: AddressCategory.PCV + category: AddressCategory.Deprecated }, rariPool8DaiPCVDeposit: { artifactName: 'ERC20CompoundPCVDeposit', address: '0x9CC46aB5A714f7cd24C59f33C5769039B5872491', - category: AddressCategory.PCV + category: AddressCategory.Deprecated }, rariPool8LusdPCVDeposit: { artifactName: 'ERC20CompoundPCVDeposit', address: '0xF846eE6E8EE9A6fbf51c7c65105CAbc041c048ad', - category: AddressCategory.PCV + category: AddressCategory.Deprecated }, rariPool18FeiPCVDepositWrapper: { artifactName: 'PCVDepositWrapper', address: '0x07F2DD7E6A78D96c08D0a8212f4097dCC129d629', - category: AddressCategory.PCV + category: AddressCategory.Deprecated }, rariPool19DpiPCVDepositWrapper: { artifactName: 'PCVDepositWrapper', @@ -544,7 +549,7 @@ const MainnetAddresses: MainnetAddresses = { rariPool27FeiPCVDepositWrapper: { artifactName: 'PCVDepositWrapper', address: '0xe2e35097638F0Ff2EeCA2EF70F352Be37431945f', - category: AddressCategory.PCV + category: AddressCategory.Deprecated }, rariPool6FeiPCVDepositWrapper: { artifactName: 'PCVDepositWrapper', @@ -559,7 +564,7 @@ const MainnetAddresses: MainnetAddresses = { rariPool8FeiPCVDepositWrapper: { artifactName: 'PCVDepositWrapper', address: '0xD6598a23418c7FEf7c0Dc863265515B623B720F9', - category: AddressCategory.PCV + category: AddressCategory.Deprecated }, rariPool9FeiPCVDepositWrapper: { artifactName: 'PCVDepositWrapper', @@ -579,7 +584,7 @@ const MainnetAddresses: MainnetAddresses = { rariPool90FeiPCVDepositWrapper: { artifactName: 'PCVDepositWrapper', address: '0xec54148CbC47bFF8FCc5e04e5E8083aDb8aF9aD9', - category: AddressCategory.PCV + category: AddressCategory.Deprecated }, rariPool91FeiPCVDepositWrapper: { artifactName: 'PCVDepositWrapper', @@ -1974,13 +1979,18 @@ const MainnetAddresses: MainnetAddresses = { convexPoolPCVDepositWrapper: { artifactName: 'PCVDepositWrapper', address: '0x1370CA8655C255948d6c6110066d78680601B7c2', - category: AddressCategory.PCV + category: AddressCategory.Deprecated }, - compoundPCVDepositWrapper: { + compoundFeiPCVDepositWrapper: { artifactName: 'PCVDepositWrapper', address: '0xB80B3dc4F8B30589477b2bA0e4EF2b8224bDf0a5', category: AddressCategory.PCV }, + compoundFeiPCVDeposit: { + artifactName: 'PCVDeposit', + address: '0xe1f2a7342459b54fbfea9f40695cdd46efadeeee', + category: AddressCategory.PCV_V1 + }, turboFusePCVDeposit: { artifactName: 'ERC20CompoundPCVDeposit', address: '0x2c47Fef515d2C70F2427706999E158533F7cF090', From a9b43e2a77aca29a0a809e3af3d1cb26b8a381e7 Mon Sep 17 00:00:00 2001 From: thomas-waite Date: Fri, 20 May 2022 14:25:58 +0100 Subject: [PATCH 121/121] style: fix lint error --- protocol-configuration/collateralizationOracle.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protocol-configuration/collateralizationOracle.ts b/protocol-configuration/collateralizationOracle.ts index 929b22286..e748be1be 100644 --- a/protocol-configuration/collateralizationOracle.ts +++ b/protocol-configuration/collateralizationOracle.ts @@ -38,4 +38,4 @@ const collateralizationAddresses = { volt: ['voltDepositWrapper'] }; -export default collateralizationAddresses; \ No newline at end of file +export default collateralizationAddresses;