UNPKG

@gooddollar/goodprotocol

Version:
98 lines (80 loc) 2.93 kB
import { ethers, upgrades, network } from "hardhat"; import { getSettings, releaser } from "../../scripts/getMigrationSettings"; import { SchemeRegistrar } from "../types"; import { getFounders } from "./getFounders"; console.log({ network: network.name, upgrade: process.env.UPGRADE }); const { name: networkName } = network; export const proposeUpgradeScheme = async (daoAddresses, schemeAddress) => { console.log("proposing conntract upgrade to DAO", { schemeAddress }); const schemeRegistrar = (await ethers.getContractAt( "SchemeRegistrar", daoAddresses.SchemeRegistrar )) as SchemeRegistrar; const proposaltx = await schemeRegistrar.proposeScheme( daoAddresses.Avatar, schemeAddress, ethers.constants.HashZero, "0x00000010", ethers.constants.HashZero ); const proposal = await proposaltx.wait(); const event = proposal.events.find(_ => _.event === "NewSchemeProposal"); console.log({ proposal: event }); const proposalId = event.args._proposalId; console.log("proposal", { scheme: schemeAddress, proposalId }); return proposalId; }; export const voteUpgradeScheme = async (network, daoAddresses, proposalId) => { const absoluteVote = await ethers.getContractAt( "IntVoteInterface", daoAddresses.AbsoluteVote ); const founders = await getFounders(network); console.log("voteUpgradeScheme", { absoluteVote: absoluteVote.address, founders }); await Promise.all( founders.slice(0, Math.ceil(founders.length / 2)).map(f => absoluteVote .connect(f) .vote(proposalId, 1, 0, f.address) .then(_ => _.wait()) ) ); }; const main = async () => { const { daoAddresses, modelAddresses, upgradableAddresses, founders } = await getSettings(networkName); // const implementation = "0x7fca2b3e1047291f65c2c914083d970c027f4290"; // const deployedProxy = upgradableAddresses.FuseStaking; // const upgradeTimeLock = 0; // const callData = ethers.utils.toUtf8Bytes(""); //ethers.constants.HashZero; const factory = await ethers.getContractFactory("UpgradeImplScheme"); const scheme = await factory.deploy( daoAddresses.Avatar, implementation, deployedProxy, upgradableAddresses.ProxyAdmin, callData, upgradeTimeLock ); // const scheme = await ethers.getContractAt( // "UpgradeImplScheme", // "0x2591E81be398ddEDb8a5A68c1420b7B84C0F39d2" // ); const schemeAddress = scheme.address; const proposalId = await proposeUpgradeScheme(daoAddresses, schemeAddress); // const proposalId = "0x67dc1fb651ef33c7943b7a504906b1e45bf0715d35e27a3e562c9d2b49d43586"; console.log("voting upgrade...", { proposalId }); await voteUpgradeScheme(networkName, daoAddresses, proposalId); console.log("vote passed, executing upgrade..."); const res = await scheme.upgrade(); console.log({ res }); }; main().catch(e => console.log(e));