-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
495 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
# NETWORK AND DEPLOYMENT WALLET | ||
DEPLOYMENT_PRIVATE_KEY="..." | ||
ALCHEMY_API_KEY="..." | ||
ETHERSCAN_API_KEY="..." | ||
NETWORK="holesky" | ||
DEPLOY_AS_PRODUCTION=true # With false, the script will deploy mock helpers | ||
|
||
# GOVERNANCE PARAMETERS | ||
MIN_PROPOSAL_DURATION="864000" # in seconds (10 days) | ||
MIN_APPROVALS="5" # How many multisig approvals are required | ||
MULTISIG_PROPOSAL_EXPIRATION_PERIOD="864000" # How long until a pending proposal expires (10 days) | ||
|
||
# PARAMETERS | ||
MODE_TOKEN_ADDRESS="0x..." | ||
BPT_TOKEN_ADDRESS="0x..." | ||
|
||
# OSx IMPLEMENTATIONS ADDRESSES (network dependent, see active_contracts.json on lib/osx) | ||
# HOLESKY | ||
DAO_FACTORY="0xE640Da5AD169630555A86D9b6b9C145B4961b1EB" | ||
PLUGIN_SETUP_PROCESSOR="0xCe0B4124dea6105bfB85fB4461c4D39f360E9ef3" | ||
PLUGIN_REPO_FACTORY="0x95D563382BeD5AcB458759EE05b27DF2CB019Cc7" | ||
GOVERNANCE_ERC20_BASE="0xC24188a73dc09aA7C721f96Ad8857B469C01dC9f" | ||
GOVERNANCE_WRAPPED_ERC20_BASE="0x7a62da7B56fB3bfCdF70E900787010Bc4c9Ca42e" | ||
|
||
# PLUGIN REPO PARAMETERS (per-network) | ||
# HOLESKY | ||
MULTISIG_PLUGIN_REPO_ADDRESS="0x..." | ||
MULTISIG_PLUGIN_RELEASE="1" | ||
MULTISIG_PLUGIN_BUILD="2" | ||
SIMPLE_GAUGE_VOTER_ENS_DOMAIN="mode-simple-gauge-voter-0" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,149 @@ | ||
// SPDX-License-Identifier: UNLICENSED | ||
pragma solidity ^0.8.17; | ||
|
||
import {Script, console} from "forge-std/Script.sol"; | ||
import {DAO} from "@aragon/osx/core/dao/DAO.sol"; | ||
import {ModeDaoFactory} from "../src/factory/ModeDaoFactory.sol"; | ||
import {MultisigSetup} from "@aragon/osx/plugins/governance/multisig/MultisigSetup.sol"; | ||
import {SimpleGaugeVoterSetup} from "../src/voting/SimpleGaugeVoterSetup.sol"; | ||
import {PluginRepoFactory} from "@aragon/osx/framework/plugin/repo/PluginRepoFactory.sol"; | ||
import {PluginSetupProcessor} from "@aragon/osx/framework/plugin/setup/PluginSetupProcessor.sol"; | ||
|
||
contract Deploy is Script { | ||
MultisigPluginSetup multisigPluginSetup; | ||
SimpleGaugeVoterSetup simpleGaugeVoterSetup; | ||
|
||
modifier broadcast() { | ||
vm.startBroadcast(vm.envUint("DEPLOYMENT_PRIVATE_KEY")); | ||
console.log("Deploying from:", vm.addr(vm.envUint("DEPLOYMENT_PRIVATE_KEY"))); | ||
_; | ||
vm.stopBroadcast(); | ||
} | ||
|
||
function run() public broadcast { | ||
// NOTE: | ||
// Deploying the plugin setup's separately because of the code size limit | ||
|
||
// Resolve the multisig plugin repo address | ||
|
||
// Deploy the main plugin setup | ||
|
||
// TODO | ||
|
||
ModeDaoFactory.DeploymentSettings memory settings; | ||
if (vm.envBool("DEPLOY_AS_PRODUCTION")) { | ||
settings = getProductionSettings(); | ||
} else { | ||
settings = getInternalTestingSettings(); | ||
} | ||
|
||
console.log(""); | ||
|
||
// Create the DAO | ||
ModeDaoFactory factory = new ModeDaoFactory(settings); | ||
factory.deployOnce(); | ||
|
||
// Done | ||
printDeploymentSummary(factory); | ||
} | ||
|
||
function getProductionSettings() | ||
internal | ||
view | ||
returns (ModeDaoFactory.DeploymentSettings memory settings) | ||
{ | ||
console.log("Using production settings"); | ||
|
||
settings = ModeDaoFactory.DeploymentSettings({ | ||
// Mode contract settings | ||
tokenAddress: IVotesUpgradeable(vm.envAddress("TOKEN_ADDRESS")), | ||
// Voting settings | ||
minVetoRatio: uint32(vm.envUint("MIN_VETO_RATIO")), | ||
minStdProposalDuration: uint64(vm.envUint("MIN_STD_PROPOSAL_DURATION")), | ||
minStdApprovals: uint16(vm.envUint("MIN_STD_APPROVALS")), | ||
// OSx contracts | ||
osxDaoFactory: vm.envAddress("DAO_FACTORY"), | ||
pluginSetupProcessor: PluginSetupProcessor(vm.envAddress("PLUGIN_SETUP_PROCESSOR")), | ||
pluginRepoFactory: PluginRepoFactory(vm.envAddress("PLUGIN_REPO_FACTORY")), | ||
// Plugin setup's | ||
multisigPluginSetup: MultisigPluginSetup(multisigPluginSetup), | ||
optimisticTokenVotingPluginSetup: OptimisticTokenVotingPluginSetup( | ||
optimisticTokenVotingPluginSetup | ||
), | ||
// Multisig members | ||
multisigMembers: readMultisigMembers(), | ||
multisigExpirationPeriod: uint64(vm.envUint("MULTISIG_PROPOSAL_EXPIRATION_PERIOD")), | ||
// ENS | ||
stdMultisigEnsDomain: vm.envString("STD_MULTISIG_ENS_DOMAIN"), | ||
optimisticTokenVotingEnsDomain: vm.envString("OPTIMISTIC_TOKEN_VOTING_ENS_DOMAIN") | ||
}); | ||
} | ||
|
||
function getInternalTestingSettings() | ||
internal | ||
returns (ModeDaoFactory.DeploymentSettings memory settings) | ||
{ | ||
console.log("Using internal testing settings"); | ||
|
||
address[] memory multisigMembers = readMultisigMembers(); | ||
// address votingToken = createTestToken(multisigMembers, tokenAddress); | ||
|
||
settings = ModeDaoFactory.DeploymentSettings({ | ||
// Mode contract settings | ||
tokenAddress: IVotesUpgradeable(votingToken), | ||
// Voting settings | ||
minVetoRatio: uint32(vm.envUint("MIN_VETO_RATIO")), | ||
minStdProposalDuration: uint64(vm.envUint("MIN_STD_PROPOSAL_DURATION")), | ||
minStdApprovals: uint16(vm.envUint("MIN_STD_APPROVALS")), | ||
// OSx contracts | ||
osxDaoFactory: vm.envAddress("DAO_FACTORY"), | ||
pluginSetupProcessor: PluginSetupProcessor(vm.envAddress("PLUGIN_SETUP_PROCESSOR")), | ||
pluginRepoFactory: PluginRepoFactory(vm.envAddress("PLUGIN_REPO_FACTORY")), | ||
// Plugin setup's | ||
multisigPluginSetup: MultisigPluginSetup(multisigPluginSetup), | ||
optimisticTokenVotingPluginSetup: OptimisticTokenVotingPluginSetup( | ||
optimisticTokenVotingPluginSetup | ||
), | ||
// Multisig members | ||
multisigMembers: multisigMembers, | ||
multisigExpirationPeriod: uint64(vm.envUint("MULTISIG_PROPOSAL_EXPIRATION_PERIOD")), | ||
// ENS | ||
stdMultisigEnsDomain: vm.envString("STD_MULTISIG_ENS_DOMAIN"), | ||
optimisticTokenVotingEnsDomain: vm.envString("OPTIMISTIC_TOKEN_VOTING_ENS_DOMAIN") | ||
}); | ||
} | ||
|
||
function readMultisigMembers() internal view returns (address[] memory) { | ||
// JSON list of members | ||
string memory path = string.concat(vm.projectRoot(), "/script/multisig-members.json"); | ||
string memory json = vm.readFile(path); | ||
return vm.parseJsonAddressArray(json, "$.members"); | ||
} | ||
|
||
function printDeploymentSummary(address factory) internal { | ||
console.log("Factory:", address(factory)); | ||
console.log("Chain ID:", block.chainid); | ||
console.log(""); | ||
console.log("DAO:", address(daoDeployment.dao)); | ||
console.log("Voting token:", address(settings.tokenAddress)); | ||
console.log(""); | ||
|
||
console.log("Plugins"); | ||
console.log("- Multisig plugin:", address(daoDeployment.multisigPlugin)); | ||
console.log( | ||
"- Token voting plugin:", | ||
address(daoDeployment.optimisticTokenVotingPlugin) | ||
); | ||
console.log(""); | ||
|
||
console.log("Plugin repositories"); | ||
console.log("- Multisig plugin repository:", address(daoDeployment.multisigPluginRepo)); | ||
console.log( | ||
"- Token voting plugin repository:", | ||
address(daoDeployment.optimisticTokenVotingPluginRepo) | ||
); | ||
console.log(""); | ||
|
||
console.log("Helpers"); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
{ | ||
"members": [ | ||
] | ||
} |
Oops, something went wrong.