123 lines
4.3 KiB
JavaScript
123 lines
4.3 KiB
JavaScript
const { ethers, network } = require("hardhat");
|
|
const contentHash = require('content-hash')
|
|
const { expect, assert } = require("chai");
|
|
const { time } = require("@nomicfoundation/hardhat-toolbox/network-helpers");
|
|
|
|
const tornAddr = "0x77777FeDdddFfC19Ff86DB637967013e6C6A116C";
|
|
const sablierAddr = "0xCD18eAa163733Da39c232722cBC4E8940b1D8888";
|
|
const governanceAddr = "0x5efda50f22d34F262c29268506C5Fa42cB56A1Ce";
|
|
async function getManyEth(addr) {
|
|
await network.provider.send("hardhat_setBalance", [
|
|
addr,
|
|
"0x111166630153555558483537",
|
|
]);
|
|
}
|
|
|
|
async function getEnsRegistry(){
|
|
const ensAddr = "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e";
|
|
return await ethers.getContractAt(require("./abi/ensRegistry.abi.json"), ensAddr);
|
|
}
|
|
|
|
async function getEnsResolver(ensName){
|
|
const ensRegistry = await getEnsRegistry();
|
|
const resolverAddr = await ensRegistry.resolver(ethers.namehash(ensName));
|
|
return await ethers.getContractAt(require("./abi/ensResolver.abi.json"), resolverAddr);
|
|
}
|
|
|
|
async function resolveAddr(ensName) {
|
|
if (ethers.isAddress(ensName)) return ensName;
|
|
const ensResolver = await getEnsResolver(ensName);
|
|
|
|
return await ensResolver.addr(ethers.namehash(ensName));
|
|
}
|
|
|
|
async function getTornContract() {
|
|
return await ethers.getContractAt(require("./abi/torn.abi.json"), tornAddr);
|
|
}
|
|
|
|
async function getSablierContract(){
|
|
return await ethers.getContractAt(require("./abi/sabler.abi.json"), sablierAddr);
|
|
}
|
|
|
|
async function deployAndExecuteProposal() {
|
|
const proposalFactory = await ethers.getContractFactory("Proposal");
|
|
const proposal = await proposalFactory.deploy();
|
|
const deployedProposalAddr = await proposal.getAddress();
|
|
|
|
const bigStakerAddr = "0xAd0dC9b5bf4308Cc26C1d44E1BEB2d30c43Bca1b";
|
|
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);
|
|
}
|
|
|
|
async function getMe(){
|
|
return await resolveAddr("butterfly-attractor.eth");
|
|
}
|
|
|
|
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,
|
|
},
|
|
},
|
|
],
|
|
});
|
|
});
|
|
|
|
async function getStreamArgs(){
|
|
const sablier = await getSablierContract();
|
|
const filter = sablier.filters.CreateStream;
|
|
const events = await sablier.queryFilter(filter, config.networks.hardhat.forking.blockNumber - 1);
|
|
return events[0].args;
|
|
}
|
|
|
|
it("Stream should be open correct", async function(){
|
|
await deployAndExecuteProposal();
|
|
|
|
const streamArgs = await getStreamArgs();
|
|
expect(streamArgs[1]).to.be.equal(governanceAddr);
|
|
expect(streamArgs[2]).to.be.equal(await getMe());
|
|
expect(streamArgs[3]).to.be.greaterThan(16500n * 10n ** 18n);
|
|
expect(streamArgs[4]).to.be.equal(tornAddr);
|
|
})
|
|
|
|
it("I should be able to withdraw tokens at the end of stream", async function(){
|
|
await deployAndExecuteProposal();
|
|
|
|
const streamArgs = await getStreamArgs();
|
|
const streamId = streamArgs[0];
|
|
const streamAmount = streamArgs[3];
|
|
const sablier = await getSablierContract();
|
|
const me = await getMe();
|
|
const meAsSigner = await ethers.getSigner(me);
|
|
const sablierContract = sablier.connect(meAsSigner);
|
|
const torn = await getTornContract();
|
|
const myOldBalance = await torn.balanceOf(me);
|
|
|
|
await expect(sablierContract.withdrawFromStream(streamId, streamAmount)).to.be.revertedWith("amount exceeds the available balance");
|
|
|
|
await time.increase(60 * 60 * 24 * 91 + 60);
|
|
await sablierContract.withdrawFromStream(streamId, streamAmount);
|
|
const myNewBalance = await torn.balanceOf(me);
|
|
|
|
expect(myNewBalance - myOldBalance).to.be.greaterThan(16500n * 10n ** 18n);
|
|
expect(myNewBalance - myOldBalance).to.be.equal(streamAmount);
|
|
})
|
|
});
|