Skip to content

Commit

Permalink
Deploy Base Timelock (#441)
Browse files Browse the repository at this point in the history
  • Loading branch information
shahthepro authored Sep 5, 2024
1 parent eca70b7 commit 59b2db0
Show file tree
Hide file tree
Showing 12 changed files with 90 additions and 24 deletions.
8 changes: 8 additions & 0 deletions build/deployments.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,13 @@
"XOGN_GOV": "0x1D3Fbd4d129Ddd2372EA85c5Fa00b2682081c9EC",
"XOGN_IMPL": "0x97711c7a5D64A064a95d10e37f786d2bD8b1F3c8"
}
},
"8453": {
"executions": {
"001_Timelock": 1725274861
},
"contracts": {
"TIMELOCK": "0xf817cb3092179083c48c014688D98B72fB61464f"
}
}
}
4 changes: 2 additions & 2 deletions contracts/Timelock.sol
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ pragma solidity ^0.8.10;
import "OpenZeppelin/[email protected]/contracts/governance/TimelockController.sol";

contract Timelock is TimelockController {
constructor(address[] memory proposers, address[] memory executors)
TimelockController(86400 * 2, proposers, executors)
constructor(uint256 minDelay, address[] memory proposers, address[] memory executors)
TimelockController(minDelay, proposers, executors)
{}
}
5 changes: 5 additions & 0 deletions contracts/utils/Addresses.sol
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,8 @@ library Addresses {
address public constant OUSD_BUYBACK_IMPL = 0x386d8fEC5b6d5B5E36a48A376644e36239dB65d6;
address public constant OETH_BUYBACK_IMPL = 0x4F11d31f781B57051764a3823b24d520626b4833;
}

library AddressesBase {
// 5/8 multisig
address public constant GOVERNOR = 0x92A19381444A001d62cE67BaFF066fA1111d7202;
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import {Vm, VmSafe} from "forge-std/Vm.sol";
import {Addresses} from "contracts/utils/Addresses.sol";
import {GovProposal, GovProposalHelper} from "contracts/utils/GovProposalHelper.sol";

abstract contract BaseMainnetScript is Script {
abstract contract AbstractScript is Script {
using GovProposalHelper for GovProposal;

uint256 public deployBlockNum = type(uint256).max;
Expand Down Expand Up @@ -47,7 +47,7 @@ abstract contract BaseMainnetScript is Script {
function setUp() external {}

function run() external {
if (block.chainid != 1) {
if (block.chainid != AbstractScript(address(this)).CHAIN_ID()) {
revert("Not Mainnet");
}
// Will not execute script if after this block number
Expand Down Expand Up @@ -80,6 +80,8 @@ abstract contract BaseMainnetScript is Script {

function DEPLOY_NAME() external view virtual returns (string memory);

function CHAIN_ID() external view virtual returns (uint256);

function proposalExecuted() external view virtual returns (bool);

function skip() external view virtual returns (bool) {
Expand Down
22 changes: 14 additions & 8 deletions script/deploy/DeployManager.sol
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,16 @@ pragma solidity 0.8.10;
import "forge-std/Script.sol";
import "OpenZeppelin/[email protected]/contracts/utils/Strings.sol";

import {BaseMainnetScript} from "./mainnet/BaseMainnetScript.sol";
import {AbstractScript} from "./AbstractScript.sol";

import {XOGNSetupScript} from "./mainnet/010_xOGNSetupScript.sol";
import {OgnOgvMigrationScript} from "./mainnet/011_OgnOgvMigrationScript.sol";
import {MigrationZapperScript} from "./mainnet/012_MigrationZapperScript.sol";
import {UpgradeMigratorScript} from "./mainnet/013_UpgradeMigratorScript.sol";
import {XOGNGovernanceScript} from "./mainnet/014_xOGNGovernanceScript.sol";

import {DeployTimelockScript} from "./base/001_Timelock.sol";

import {VmSafe} from "forge-std/Vm.sol";

contract DeployManager is Script {
Expand Down Expand Up @@ -69,14 +71,18 @@ contract DeployManager is Script {

function run() external {
// TODO: Use vm.readDir to recursively build this?
_runDeployFile(new XOGNSetupScript());
_runDeployFile(new OgnOgvMigrationScript());
_runDeployFile(new MigrationZapperScript());
_runDeployFile(new UpgradeMigratorScript());
_runDeployFile(new XOGNGovernanceScript());
if (block.chainid == 1) {
_runDeployFile(new XOGNSetupScript());
_runDeployFile(new OgnOgvMigrationScript());
_runDeployFile(new MigrationZapperScript());
_runDeployFile(new UpgradeMigratorScript());
_runDeployFile(new XOGNGovernanceScript());
} else if (block.chainid == 8453) {
_runDeployFile(new DeployTimelockScript());
}
}

function _runDeployFile(BaseMainnetScript deployScript) internal {
function _runDeployFile(AbstractScript deployScript) internal {
if (deployScript.proposalExecuted()) {
// No action to do
return;
Expand Down Expand Up @@ -137,7 +143,7 @@ contract DeployManager is Script {
/**
* Post-deployment
*/
BaseMainnetScript.DeployRecord[] memory records = deployScript.getAllDeployRecords();
AbstractScript.DeployRecord[] memory records = deployScript.getAllDeployRecords();

for (uint256 i = 0; i < records.length; ++i) {
string memory name = records[i].name;
Expand Down
39 changes: 39 additions & 0 deletions script/deploy/base/001_Timelock.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
// SPDX-License-Identifier: MIT

pragma solidity 0.8.10;

import "../AbstractScript.sol";
import {Vm} from "forge-std/Vm.sol";

import {AddressesBase} from "contracts/utils/Addresses.sol";

import {Timelock} from "contracts/Timelock.sol";

contract DeployTimelockScript is AbstractScript {
string public constant override DEPLOY_NAME = "001_Timelock";
uint256 public constant override CHAIN_ID = 8453;
bool public constant override proposalExecuted = false;

constructor() {}

function _execute() internal override {
console.log("Deploy:");
console.log("------------");

address[] memory proposers = new address[](1);
address[] memory executors = new address[](1);

proposers[0] = AddressesBase.GOVERNOR;
executors[0] = AddressesBase.GOVERNOR;

// 1. Deploy Timelock
Timelock timelock = new Timelock(
60, // 60s
proposers,
executors
);
_recordDeploy("TIMELOCK", address(timelock));
}

function _fork() internal override {}
}
5 changes: 3 additions & 2 deletions script/deploy/mainnet/010_xOGNSetupScript.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

pragma solidity 0.8.10;

import "./BaseMainnetScript.sol";
import "../AbstractScript.sol";
import {Vm} from "forge-std/Vm.sol";

import {Addresses} from "contracts/utils/Addresses.sol";
Expand All @@ -19,8 +19,9 @@ import {Timelock} from "contracts/Timelock.sol";

import {IMintableERC20} from "contracts/interfaces/IMintableERC20.sol";

contract XOGNSetupScript is BaseMainnetScript {
contract XOGNSetupScript is AbstractScript {
string public constant override DEPLOY_NAME = "010_xOGNSetup";
uint256 public constant override CHAIN_ID = 1;
bool public constant override proposalExecuted = true;

constructor() {}
Expand Down
5 changes: 3 additions & 2 deletions script/deploy/mainnet/011_OgnOgvMigrationScript.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

pragma solidity 0.8.10;

import "./BaseMainnetScript.sol";
import "../AbstractScript.sol";
import {Vm} from "forge-std/Vm.sol";

import {Addresses} from "contracts/utils/Addresses.sol";
Expand All @@ -16,10 +16,11 @@ import {IMintableERC20} from "contracts/interfaces/IMintableERC20.sol";

import {GovProposal, GovProposalHelper} from "contracts/utils/GovProposalHelper.sol";

contract OgnOgvMigrationScript is BaseMainnetScript {
contract OgnOgvMigrationScript is AbstractScript {
using GovProposalHelper for GovProposal;

string public constant override DEPLOY_NAME = "011_OgnOgvMigration";
uint256 public constant override CHAIN_ID = 1;
bool public constant override proposalExecuted = true;

GovProposal public govProposal;
Expand Down
5 changes: 3 additions & 2 deletions script/deploy/mainnet/012_MigrationZapperScript.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

pragma solidity 0.8.10;

import "./BaseMainnetScript.sol";
import "../AbstractScript.sol";
import {Vm} from "forge-std/Vm.sol";

import {Addresses} from "contracts/utils/Addresses.sol";
Expand All @@ -17,12 +17,13 @@ import {MigrationZapper} from "contracts/MigrationZapper.sol";
import "OpenZeppelin/[email protected]/contracts/token/ERC20/extensions/ERC20Votes.sol";
import "OpenZeppelin/[email protected]/contracts/governance/TimelockController.sol";

contract MigrationZapperScript is BaseMainnetScript {
contract MigrationZapperScript is AbstractScript {
using GovFive for GovFive.GovFiveProposal;

GovFive.GovFiveProposal public govProposal;

string public constant override DEPLOY_NAME = "012_MigrationZapper";
uint256 public constant override CHAIN_ID = 1;
bool public constant override proposalExecuted = true;

constructor() {}
Expand Down
5 changes: 3 additions & 2 deletions script/deploy/mainnet/013_UpgradeMigratorScript.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

pragma solidity 0.8.10;

import "./BaseMainnetScript.sol";
import "../AbstractScript.sol";

import {Addresses} from "contracts/utils/Addresses.sol";

Expand All @@ -11,12 +11,13 @@ import {GovFive} from "contracts/utils/GovFive.sol";
import {Migrator} from "contracts/Migrator.sol";
import {OgvStaking} from "contracts/OgvStaking.sol";

contract UpgradeMigratorScript is BaseMainnetScript {
contract UpgradeMigratorScript is AbstractScript {
using GovFive for GovFive.GovFiveProposal;

GovFive.GovFiveProposal public govProposal;

string public constant override DEPLOY_NAME = "013_UpgradeMigrator";
uint256 public constant override CHAIN_ID = 1;
bool public constant override proposalExecuted = true;

constructor() {}
Expand Down
5 changes: 3 additions & 2 deletions script/deploy/mainnet/014_xOGNGovernanceScript.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

pragma solidity 0.8.10;

import "./BaseMainnetScript.sol";
import "../AbstractScript.sol";

import {Addresses} from "contracts/utils/Addresses.sol";

Expand All @@ -14,12 +14,13 @@ import {GovFive} from "contracts/utils/GovFive.sol";
import {ERC20Votes} from "OpenZeppelin/[email protected]/contracts/token/ERC20/extensions/ERC20Votes.sol";
import {TimelockController} from "OpenZeppelin/[email protected]/contracts/governance/TimelockController.sol";

contract XOGNGovernanceScript is BaseMainnetScript {
contract XOGNGovernanceScript is AbstractScript {
using GovFive for GovFive.GovFiveProposal;

GovFive.GovFiveProposal public govProposal;

string public constant override DEPLOY_NAME = "014_xOGNGovernance";
uint256 public constant override CHAIN_ID = 1;
bool public constant override proposalExecuted = false;

uint256 public constant OGN_EPOCH = 1717041600; // May 30, 2024 GMT
Expand Down
5 changes: 3 additions & 2 deletions script/deploy/mainnet/015_RevokeMultisigGovernance.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

pragma solidity 0.8.10;

import "./BaseMainnetScript.sol";
import "../AbstractScript.sol";

import {Addresses} from "contracts/utils/Addresses.sol";

Expand All @@ -11,12 +11,13 @@ import {Governance} from "contracts/Governance.sol";

import {GovFive} from "contracts/utils/GovFive.sol";

contract RevokeMultisigGovernanceScript is BaseMainnetScript {
contract RevokeMultisigGovernanceScript is AbstractScript {
using GovFive for GovFive.GovFiveProposal;

GovFive.GovFiveProposal public govProposal;

string public constant override DEPLOY_NAME = "015_RevokeMultisigGovernance";
uint256 public constant override CHAIN_ID = 1;
bool public constant override proposalExecuted = false;

constructor() {}
Expand Down

0 comments on commit 59b2db0

Please sign in to comment.