Skip to content

Commit 1f3215f

Browse files
committed
chore: change governor script
1 parent 386da9f commit 1f3215f

File tree

3 files changed

+133
-0
lines changed

3 files changed

+133
-0
lines changed

contracts/hardhat.config.ts

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import "hardhat-tracer";
1616
require("./scripts/simulations/tasks");
1717
require("./scripts/populatePolicyRegistry");
1818
require("./scripts/populateCourts");
19+
require("./scripts/changeGovernor");
1920

2021
dotenv.config();
2122

contracts/scripts/changeGovernor.ts

+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import { task } from "hardhat/config";
2+
import { prompt, print } from "gluegun";
3+
import { Cores, getContracts } from "./utils/contracts";
4+
5+
const { bold } = print.colors;
6+
7+
task("change-governor", "Changes the governor for all the contracts")
8+
.addPositionalParam("newGovernor", "The address of the new governor")
9+
.addOptionalParam(
10+
"coreType",
11+
"The type of core to use between base, neo, university (default: base)",
12+
Cores.BASE.toString()
13+
)
14+
.setAction(async (taskArgs, hre) => {
15+
const newGovernor = taskArgs.newGovernor;
16+
print.highlight(`💣 Changing governor to ${bold(newGovernor)}`);
17+
18+
const { confirm } = await prompt.ask({
19+
type: "confirm",
20+
name: "confirm",
21+
message: "Are you sure you want to proceed?",
22+
});
23+
if (!confirm) {
24+
console.log("Operation cancelled by user.");
25+
return;
26+
}
27+
28+
let coreType = Cores.BASE;
29+
coreType = Cores[taskArgs.coreType.toUpperCase() as keyof typeof Cores];
30+
if (coreType === undefined) {
31+
console.error("Invalid core type, must be one of base, neo, university");
32+
return;
33+
}
34+
console.log("Using core type %s", Cores[coreType]);
35+
36+
const { core, disputeKitClassic, disputeResolver, disputeTemplateRegistry, chainlinkRng, randomizerRng } =
37+
await getContracts(hre, coreType);
38+
39+
const updateGovernor = async (contractName: string, contractInstance: any) => {
40+
print.info(`Changing governor for ${contractName}`);
41+
42+
const spinner = print.spin(`Executing transaction for ${contractName}...`);
43+
try {
44+
const tx = await contractInstance.changeGovernor(newGovernor);
45+
await tx.wait();
46+
spinner.succeed(`Governor changed for ${contractName}, tx hash: ${tx.hash}`);
47+
} catch (error) {
48+
if (error instanceof Error) {
49+
spinner.fail(`Failed to change governor for ${contractName}: ${error.message}`);
50+
} else {
51+
spinner.fail(`Failed to change governor for ${contractName}: ${String(error)}`);
52+
}
53+
}
54+
};
55+
56+
// TODO: upgrade and add changeGovernor!
57+
// await updateGovernor("Sortition", sortition)
58+
59+
await updateGovernor("KlerosCore", core);
60+
await updateGovernor("DisputeKitClassic", disputeKitClassic);
61+
await updateGovernor("DisputeResolver", disputeResolver);
62+
await updateGovernor("DisputeTemplateRegistry", disputeTemplateRegistry);
63+
if (chainlinkRng) await updateGovernor("ChainlinkRNG", chainlinkRng);
64+
if (randomizerRng) await updateGovernor("RandomizerRNG", randomizerRng);
65+
66+
print.success("Governor changed successfully");
67+
});

contracts/scripts/utils/contracts.ts

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import { HardhatRuntimeEnvironment } from "hardhat/types";
2+
import {
3+
BlockHashRNG,
4+
ChainlinkRNG,
5+
DisputeKitClassic,
6+
DisputeResolver,
7+
DisputeTemplateRegistry,
8+
KlerosCore,
9+
KlerosCoreNeo,
10+
PNK,
11+
RandomizerRNG,
12+
SortitionModule,
13+
SortitionModuleNeo,
14+
TransactionBatcher,
15+
} from "../../typechain-types";
16+
17+
export enum Cores {
18+
BASE,
19+
NEO,
20+
UNIVERSITY,
21+
}
22+
23+
export const getContracts = async (hre: HardhatRuntimeEnvironment, coreType: Cores) => {
24+
const { ethers } = hre;
25+
let core: KlerosCore | KlerosCoreNeo;
26+
let sortition: SortitionModule | SortitionModuleNeo;
27+
let disputeKitClassic: DisputeKitClassic;
28+
let disputeResolver: DisputeResolver;
29+
switch (coreType) {
30+
case Cores.NEO:
31+
core = (await ethers.getContract("KlerosCoreNeo")) as KlerosCoreNeo;
32+
sortition = (await ethers.getContract("SortitionModuleNeo")) as SortitionModuleNeo;
33+
disputeKitClassic = (await ethers.getContract("DisputeKitClassicNeo")) as DisputeKitClassic;
34+
disputeResolver = (await ethers.getContract("DisputeResolverNeo")) as DisputeResolver;
35+
break;
36+
case Cores.BASE:
37+
core = (await ethers.getContract("KlerosCore")) as KlerosCore;
38+
sortition = (await ethers.getContract("SortitionModule")) as SortitionModule;
39+
disputeKitClassic = (await ethers.getContract("DisputeKitClassic")) as DisputeKitClassic;
40+
disputeResolver = (await ethers.getContract("DisputeResolver")) as DisputeResolver;
41+
break;
42+
case Cores.UNIVERSITY:
43+
throw new Error("University core is not supported");
44+
default:
45+
throw new Error("Invalid core type, must be one of base, neo");
46+
}
47+
const disputeTemplateRegistry = (await ethers.getContract("DisputeTemplateRegistry")) as DisputeTemplateRegistry;
48+
const batcher = (await ethers.getContract("TransactionBatcher")) as TransactionBatcher;
49+
const chainlinkRng = await ethers.getContractOrNull<ChainlinkRNG>("ChainlinkRNG");
50+
const randomizerRng = await ethers.getContractOrNull<RandomizerRNG>("RandomizerRNG");
51+
const blockHashRNG = await ethers.getContractOrNull<BlockHashRNG>("BlockHashRNG");
52+
const pnk = (await ethers.getContract("PNK")) as PNK;
53+
return {
54+
core,
55+
sortition,
56+
disputeKitClassic,
57+
disputeResolver,
58+
disputeTemplateRegistry,
59+
chainlinkRng,
60+
randomizerRng,
61+
blockHashRNG,
62+
pnk,
63+
batcher,
64+
};
65+
};

0 commit comments

Comments
 (0)