diff --git a/packages/contracts/deploy/update/to_v1.2.0/01_DAOFactroy.ts b/packages/contracts/deploy/update/to_v1.3.0/01_DAOFactory.ts similarity index 94% rename from packages/contracts/deploy/update/to_v1.2.0/01_DAOFactroy.ts rename to packages/contracts/deploy/update/to_v1.3.0/01_DAOFactory.ts index 0fdb4e8b7..290d55d7f 100644 --- a/packages/contracts/deploy/update/to_v1.2.0/01_DAOFactroy.ts +++ b/packages/contracts/deploy/update/to_v1.3.0/01_DAOFactory.ts @@ -1,8 +1,10 @@ import {DeployFunction} from 'hardhat-deploy/types'; import {HardhatRuntimeEnvironment} from 'hardhat/types'; -import {DAO__factory} from '../../../typechain'; import {Operation} from '../../../utils/types'; import {getContractAddress} from '../../helpers'; +import {DAO__factory} from '../../../typechain'; + +import daoFactoryArtifact from '../../../artifacts/src/framework/dao/DAOFactory.sol/DAOFactory.json'; const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { console.log('Updating DAOFactory'); @@ -23,6 +25,7 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { console.log(`Using PreviousDAOFactory ${previousDAOFactoryAddress}`); const deployResult = await deploy('DAOFactory', { + contract: daoFactoryArtifact, from: deployer.address, args: [daoRegistryAddress, pluginSetupProcessorAddress], log: true, diff --git a/packages/contracts/deploy/update/to_v1.2.0/02_DAOFactory_conclude.ts b/packages/contracts/deploy/update/to_v1.3.0/02_DAOFactory_conclude.ts similarity index 100% rename from packages/contracts/deploy/update/to_v1.2.0/02_DAOFactory_conclude.ts rename to packages/contracts/deploy/update/to_v1.3.0/02_DAOFactory_conclude.ts diff --git a/packages/contracts/deploy/update/to_v1.2.0/10_Multisig_Plugin.ts b/packages/contracts/deploy/update/to_v1.3.0/10_Multisig_Plugin.ts similarity index 91% rename from packages/contracts/deploy/update/to_v1.2.0/10_Multisig_Plugin.ts rename to packages/contracts/deploy/update/to_v1.3.0/10_Multisig_Plugin.ts index d5ff68ac2..065a8c0e2 100644 --- a/packages/contracts/deploy/update/to_v1.2.0/10_Multisig_Plugin.ts +++ b/packages/contracts/deploy/update/to_v1.3.0/10_Multisig_Plugin.ts @@ -3,9 +3,13 @@ import {HardhatRuntimeEnvironment} from 'hardhat/types'; import {PluginRepo__factory} from '../../../typechain'; import {getContractAddress, uploadToIPFS} from '../../helpers'; +import multisigSetupArtifact from '../../../artifacts/src/plugins/governance/multisig/MultisigSetup.sol/MultisigSetup.json'; + import multisigReleaseMetadata from '../../../src/plugins/governance/multisig/release-metadata.json'; import multisigBuildMetadata from '../../../src/plugins/governance/multisig/build-metadata.json'; +const TARGET_RELEASE = 1; + const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { console.log('\nUpdate Multisig Plugin'); const {deployments, ethers, network} = hre; @@ -13,6 +17,7 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { const [deployer] = await ethers.getSigners(); const deployResult = await deploy('MultisigSetup', { + contract: multisigSetupArtifact, from: deployer.address, args: [], log: true, @@ -44,7 +49,7 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { const tx = await multisigRepo .connect(deployer) .createVersion( - 1, + TARGET_RELEASE, deployResult.address, ethers.utils.toUtf8Bytes(`ipfs://${multisigBuildCIDPath}`), ethers.utils.toUtf8Bytes(`ipfs://${multisigReleaseCIDPath}`) @@ -57,7 +62,7 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { const tx = await multisigRepo .connect(deployer) .populateTransaction.createVersion( - 1, + TARGET_RELEASE, deployResult.address, ethers.utils.toUtf8Bytes(`ipfs://${multisigBuildCIDPath}`), ethers.utils.toUtf8Bytes(`ipfs://${multisigReleaseCIDPath}`) diff --git a/packages/contracts/deploy/update/to_v1.2.0/11_Multisig_Plugin_conclude.ts b/packages/contracts/deploy/update/to_v1.3.0/11_Multisig_Plugin_conclude.ts similarity index 100% rename from packages/contracts/deploy/update/to_v1.2.0/11_Multisig_Plugin_conclude.ts rename to packages/contracts/deploy/update/to_v1.3.0/11_Multisig_Plugin_conclude.ts diff --git a/packages/contracts/deploy/update/to_v1.3.0/20_TokenVoting_Plugin.ts b/packages/contracts/deploy/update/to_v1.3.0/20_TokenVoting_Plugin.ts new file mode 100644 index 000000000..7c63c5ce0 --- /dev/null +++ b/packages/contracts/deploy/update/to_v1.3.0/20_TokenVoting_Plugin.ts @@ -0,0 +1,90 @@ +import {DeployFunction} from 'hardhat-deploy/types'; +import {HardhatRuntimeEnvironment} from 'hardhat/types'; +import {PluginRepo__factory} from '../../../typechain'; +import {getContractAddress, uploadToIPFS} from '../../helpers'; + +import tokenVotingSetupArtifact from '../../../artifacts/src/plugins/governance/majority-voting/token/TokenVotingSetup.sol/TokenVotingSetup.json'; +import tokenVotingReleaseMetadata from '../../../src/plugins/governance/majority-voting/token/release-metadata.json'; +import tokenVotingBuildMetadata from '../../../src/plugins/governance/majority-voting/token/build-metadata.json'; + +const TARGET_RELEASE = 1; + +const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { + console.log('\nUpdate TokenVoting Plugin'); + const {deployments, ethers, network} = hre; + const {deploy} = deployments; + const [deployer] = await ethers.getSigners(); + + const deployResult = await deploy('TokenVotingSetup', { + contract: tokenVotingSetupArtifact, + from: deployer.address, + args: [], + log: true, + }); + + const tokenVotingReleaseCIDPath = await uploadToIPFS( + JSON.stringify(tokenVotingReleaseMetadata), + network.name + ); + const tokenVotingBuildCIDPath = await uploadToIPFS( + JSON.stringify(tokenVotingBuildMetadata), + network.name + ); + + const tokenVotingRepoAddress = await getContractAddress( + 'token-voting-repo', + hre + ); + const tokenVotingRepo = PluginRepo__factory.connect( + tokenVotingRepoAddress, + ethers.provider + ); + if ( + await tokenVotingRepo.callStatic.isGranted( + tokenVotingRepoAddress, + deployer.address, + await tokenVotingRepo.MAINTAINER_PERMISSION_ID(), + '0x00' + ) + ) { + console.log(`Deployer has permission to install new TokenVoting version`); + const tx = await tokenVotingRepo + .connect(deployer) + .createVersion( + TARGET_RELEASE, + deployResult.address, + ethers.utils.toUtf8Bytes(`ipfs://${tokenVotingBuildCIDPath}`), + ethers.utils.toUtf8Bytes(`ipfs://${tokenVotingReleaseCIDPath}`) + ); + console.log(`Creating new TokenVoting build version with ${tx.hash}`); + await tx.wait(); + return; + } + + const tx = await tokenVotingRepo + .connect(deployer) + .populateTransaction.createVersion( + TARGET_RELEASE, + deployResult.address, + ethers.utils.toUtf8Bytes(`ipfs://${tokenVotingBuildCIDPath}`), + ethers.utils.toUtf8Bytes(`ipfs://${tokenVotingReleaseCIDPath}`) + ); + + if (!tx.to || !tx.data) { + throw new Error( + `Failed to populate TokenVoting Repo createVersion transaction` + ); + } + + console.log( + `Deployer has no permission to create a new version. Adding managingDAO action` + ); + hre.managingDAOActions.push({ + to: tx.to, + data: tx.data, + value: 0, + description: `Creates a new build for release 1 in the TokenVotingRepo (${tokenVotingRepoAddress}) with TokenVotingSetup (${deployResult.address})`, + }); +}; +export default func; +func.tags = ['Update', 'TokenVotingPlugin']; diff --git a/packages/contracts/deploy/update/to_v1.3.0/21_TokenVoting_Plugin_conclude.ts b/packages/contracts/deploy/update/to_v1.3.0/21_TokenVoting_Plugin_conclude.ts new file mode 100644 index 000000000..eeae40165 --- /dev/null +++ b/packages/contracts/deploy/update/to_v1.3.0/21_TokenVoting_Plugin_conclude.ts @@ -0,0 +1,11 @@ +import {DeployFunction} from 'hardhat-deploy/types'; +import {HardhatRuntimeEnvironment} from 'hardhat/types'; +const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { + console.log('\nConcluding TokenVoting Plugin Update'); + + hre.aragonToVerifyContracts.push( + await hre.deployments.get('TokenVotingSetup') + ); +}; +export default func; +func.tags = ['TokenVotingPlugin', 'Verify']; diff --git a/packages/contracts/deploy/update/to_v1.3.0/30_AddresslistVoting_Plugin.ts b/packages/contracts/deploy/update/to_v1.3.0/30_AddresslistVoting_Plugin.ts new file mode 100644 index 000000000..d37793aec --- /dev/null +++ b/packages/contracts/deploy/update/to_v1.3.0/30_AddresslistVoting_Plugin.ts @@ -0,0 +1,92 @@ +import {DeployFunction} from 'hardhat-deploy/types'; +import {HardhatRuntimeEnvironment} from 'hardhat/types'; +import {PluginRepo__factory} from '../../../typechain'; +import {getContractAddress, uploadToIPFS} from '../../helpers'; + +import addresslistVotingSetupArtifact from '../../../artifacts/src/plugins/governance/majority-voting/addresslist/AddresslistVotingSetup.sol/AddresslistVotingSetup.json'; +import addresslistVotingReleaseMetadata from '../../../src/plugins/governance/majority-voting/addresslist/release-metadata.json'; +import addresslistVotingBuildMetadata from '../../../src/plugins/governance/majority-voting/addresslist/build-metadata.json'; + +const TARGET_RELEASE = 1; + +const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { + console.log('\nUpdate AddresslistVoting Plugin'); + const {deployments, ethers, network} = hre; + const {deploy} = deployments; + const [deployer] = await ethers.getSigners(); + + const deployResult = await deploy('AddresslistVotingSetup', { + contract: addresslistVotingSetupArtifact, + from: deployer.address, + args: [], + log: true, + }); + + const addresslistVotingReleaseCIDPath = await uploadToIPFS( + JSON.stringify(addresslistVotingReleaseMetadata), + network.name + ); + const addresslistVotingBuildCIDPath = await uploadToIPFS( + JSON.stringify(addresslistVotingBuildMetadata), + network.name + ); + + const addresslistVotingRepoAddress = await getContractAddress( + 'address-list-voting-repo', + hre + ); + const addresslistVotingRepo = PluginRepo__factory.connect( + addresslistVotingRepoAddress, + ethers.provider + ); + if ( + await addresslistVotingRepo.callStatic.isGranted( + addresslistVotingRepoAddress, + deployer.address, + await addresslistVotingRepo.MAINTAINER_PERMISSION_ID(), + '0x00' + ) + ) { + console.log( + `Deployer has permission to install new AddresslistVoting version` + ); + const tx = await addresslistVotingRepo + .connect(deployer) + .createVersion( + TARGET_RELEASE, + deployResult.address, + ethers.utils.toUtf8Bytes(`ipfs://${addresslistVotingBuildCIDPath}`), + ethers.utils.toUtf8Bytes(`ipfs://${addresslistVotingReleaseCIDPath}`) + ); + console.log(`Creating new AddresslistVoting build version with ${tx.hash}`); + await tx.wait(); + return; + } + + const tx = await addresslistVotingRepo + .connect(deployer) + .populateTransaction.createVersion( + TARGET_RELEASE, + deployResult.address, + ethers.utils.toUtf8Bytes(`ipfs://${addresslistVotingBuildCIDPath}`), + ethers.utils.toUtf8Bytes(`ipfs://${addresslistVotingReleaseCIDPath}`) + ); + + if (!tx.to || !tx.data) { + throw new Error( + `Failed to populate AddresslistVoting Repo createVersion transaction` + ); + } + + console.log( + `Deployer has no permission to create a new version. Adding managingDAO action` + ); + hre.managingDAOActions.push({ + to: tx.to, + data: tx.data, + value: 0, + description: `Creates a new build for release 1 in the AddresslistVotingRepo (${addresslistVotingRepoAddress}) with AddresslistVotingSetup (${deployResult.address})`, + }); +}; +export default func; +func.tags = ['Update', 'AddresslistVotingPlugin']; diff --git a/packages/contracts/deploy/update/to_v1.3.0/31_AddresslistVoting_Plugin_conclude.ts b/packages/contracts/deploy/update/to_v1.3.0/31_AddresslistVoting_Plugin_conclude.ts new file mode 100644 index 000000000..e5634592e --- /dev/null +++ b/packages/contracts/deploy/update/to_v1.3.0/31_AddresslistVoting_Plugin_conclude.ts @@ -0,0 +1,11 @@ +import {DeployFunction} from 'hardhat-deploy/types'; +import {HardhatRuntimeEnvironment} from 'hardhat/types'; +const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { + console.log('\nConcluding AddresslistVoting Plugin Update'); + + hre.aragonToVerifyContracts.push( + await hre.deployments.get('AddresslistVotingSetup') + ); +}; +export default func; +func.tags = ['AddresslistVotingPlugin', 'Verify']; diff --git a/packages/contracts/deploy/update/to_v1.2.0/20_ManagingDAO.ts b/packages/contracts/deploy/update/to_v1.3.0/99_ManagingDAO.ts similarity index 100% rename from packages/contracts/deploy/update/to_v1.2.0/20_ManagingDAO.ts rename to packages/contracts/deploy/update/to_v1.3.0/99_ManagingDAO.ts