@gooddollar/goodprotocol
Version:
GoodDollar Protocol
98 lines (80 loc) • 2.93 kB
text/typescript
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));