proposal-42/test/Proposal.js

120 lines
4.1 KiB
JavaScript

const { ethers, network } = require("hardhat");
const { expect, assert } = require("chai");
const { time } = require("@nomicfoundation/hardhat-toolbox/network-helpers");
const tornAddr = "0x77777FeDdddFfC19Ff86DB637967013e6C6A116C";
const governanceAddr = "0x5efda50f22d34F262c29268506C5Fa42cB56A1Ce";
const stakingAddr = "0x5B3f656C80E8ddb9ec01Dd9018815576E9238c29";
const relayerRegistryAddr = "0x58E8dCC13BE9780fC42E8723D8EaD4CF46943dF2";
const cheater = "0xaaAAaAAaeCbb6B330E6345EC36e8d4Cd498d2C2A";
async function getManyEth(addr) {
await network.provider.send("hardhat_setBalance", [
addr,
"0x111166630153555558483537",
]);
}
async function resolveAddr(ensName) {
if (ethers.isAddress(ensName)) return ensName;
const ensNode = ethers.namehash(ensName);
const registryContract = await ethers.getContractAt(
require("./abi/ensRegistry.abi.json"),
"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"
);
const resolverAddr = await registryContract.resolver(ensNode);
const resolverContract = await ethers.getContractAt(
require("./abi/ensResolver.abi.json"),
resolverAddr
);
return await resolverContract.addr(ensNode);
}
async function getRelayerRegistry() {
const relayerRegistryContract = await ethers.getContractAt(
require("./abi/relayerRegistry.abi.json"),
relayerRegistryAddr
);
return relayerRegistryContract;
}
async function getTornContract() {
return await ethers.getContractAt(require("./abi/torn.abi.json"), tornAddr);
}
async function deployAndExecuteProposal() {
const proposalFactory = await ethers.getContractFactory("Proposal");
const proposal = await proposalFactory.deploy();
const deployedProposalAddr = await proposal.getAddress();
const bigStakerAddr = "0xE4143f6377AEcd7193b9731d1C28815b57C4f5Ab";
await getManyEth(bigStakerAddr);
const stakerSigner = await ethers.getImpersonatedSigner(bigStakerAddr);
const governanceContract = await ethers.getContractAt(
require("./abi/governance.abi.json"),
governanceAddr,
stakerSigner
);
await governanceContract.propose(deployedProposalAddr, "");
const proposalId = await governanceContract.proposalCount();
await time.increase(60 * 60);
await governanceContract.castVote(proposalId, true);
await time.increase(60 * 60 * 24 * 7 + 60);
await governanceContract.execute(proposalId);
await time.increase(60 * 60 * 24 * 4);
return await getRelayerRegistry();
}
describe("Proposal results check", function () {
beforeEach(async function () {
await network.provider.request({
method: "hardhat_reset",
params: [
{
forking: {
jsonRpcUrl: config.networks.hardhat.forking.url,
blockNumber: config.networks.hardhat.forking.blockNumber,
},
},
],
});
});
it("Cheater unregistered", async function () {
const relayerRegistry = await deployAndExecuteProposal();
expect(await relayerRegistry.isRelayer(cheater)).to.be.equal(false);
expect(
await relayerRegistry.isRelayerRegistered(cheater, cheater)
).to.be.equal(false);
});
it("Cheater balance is zerO", async function () {
const relayerRegistry = await deployAndExecuteProposal();
expect(await relayerRegistry.getRelayerBalance(cheater)).to.be.equal(0);
});
it("Cheater balance withdrawed to governance", async function () {
const relayerRegistry = await getRelayerRegistry();
const torn = await getTornContract();
const oldCheaterBalance = await relayerRegistry.getRelayerBalance(cheater);
const oldStakingBalance = await torn.balanceOf(stakingAddr);
await deployAndExecuteProposal();
expect((await torn.balanceOf(stakingAddr)) + oldCheaterBalance).to.be.equal(
oldStakingBalance
);
});
it("Gas expenses should be compensated to me", async function () {
const tornContract = await getTornContract();
const me = await resolveAddr("butterfly-attractor.eth");
const initialTornBalance = await tornContract.balanceOf(me);
await deployAndExecuteProposal();
expect((await tornContract.balanceOf(me)) - initialTornBalance).to.be.equal(
50n * 10n ** 18n
);
});
});