mirror of
https://github.com/Instadapp/dsa-connectors.git
synced 2024-07-29 22:37:00 +00:00
feat: update connector for polygon
This commit is contained in:
parent
794ca9e1c6
commit
006a33533c
|
|
@ -38,12 +38,12 @@ abstract contract PoolTogetherV4Resolver is Events, DSMath, Basic {
|
|||
PrizePoolInterface prizePoolContract = PrizePoolInterface(prizePool);
|
||||
address prizePoolToken = prizePoolContract.getToken();
|
||||
|
||||
bool isEth = prizePoolToken == wethAddr;
|
||||
bool isMatic = prizePoolToken == wmaticAddr;
|
||||
TokenInterface tokenContract = TokenInterface(prizePoolToken);
|
||||
|
||||
if (isEth) {
|
||||
if (isMatic) {
|
||||
_amount = _amount == uint256(-1) ? address(this).balance : _amount;
|
||||
convertEthToWeth(isEth, tokenContract, _amount);
|
||||
convertMaticToWmatic(isMatic, tokenContract, _amount);
|
||||
} else {
|
||||
_amount = _amount == uint256(-1) ? tokenContract.balanceOf(address(this)) : _amount;
|
||||
}
|
||||
|
|
@ -81,12 +81,12 @@ abstract contract PoolTogetherV4Resolver is Events, DSMath, Basic {
|
|||
PrizePoolInterface prizePoolContract = PrizePoolInterface(prizePool);
|
||||
address prizePoolToken = prizePoolContract.getToken();
|
||||
|
||||
bool isEth = prizePoolToken == wethAddr;
|
||||
bool isMatic = prizePoolToken == wmaticAddr;
|
||||
TokenInterface tokenContract = TokenInterface(prizePoolToken);
|
||||
|
||||
if (isEth) {
|
||||
if (isMatic) {
|
||||
_amount = _amount == uint256(-1) ? address(this).balance : _amount;
|
||||
convertEthToWeth(isEth, tokenContract, _amount);
|
||||
convertMaticToWmatic(isMatic, tokenContract, _amount);
|
||||
} else {
|
||||
_amount = _amount == uint256(-1) ? tokenContract.balanceOf(address(this)) : _amount;
|
||||
}
|
||||
|
|
@ -128,7 +128,7 @@ abstract contract PoolTogetherV4Resolver is Events, DSMath, Basic {
|
|||
|
||||
_amount = prizePoolContract.withdrawFrom(address(this), _amount);
|
||||
|
||||
convertWethToEth(prizePoolToken == wethAddr, tokenContract, _amount);
|
||||
convertWmaticToMatic(prizePoolToken == wmaticAddr, tokenContract, _amount);
|
||||
|
||||
setUint(setId, _amount);
|
||||
|
||||
|
|
@ -185,6 +185,6 @@ abstract contract PoolTogetherV4Resolver is Events, DSMath, Basic {
|
|||
}
|
||||
}
|
||||
|
||||
contract ConnectV2PoolTogetherV4 is PoolTogetherV4Resolver {
|
||||
contract ConnectV2PoolTogetherV4Polygon is PoolTogetherV4Resolver {
|
||||
string public constant name = "PoolTogetherV4-v1";
|
||||
}
|
||||
|
|
@ -22,6 +22,7 @@
|
|||
"homepage": "https://github.com/InstaDApp/dsa-connectors-new#readme",
|
||||
"dependencies": {
|
||||
"@openzeppelin/contracts": "^3.4.0-solc-0.7",
|
||||
"@pooltogether/draw-calculator-js": "^1.0.2",
|
||||
"@uniswap/v3-core": "^1.0.0",
|
||||
"@uniswap/v3-periphery": "^1.2.1",
|
||||
"chalk": "^4.1.2",
|
||||
|
|
|
|||
|
|
@ -6,32 +6,33 @@ const { provider, deployMockContract } = waffle
|
|||
const ALCHEMY_ID = process.env.ALCHEMY_ID;
|
||||
|
||||
const impersonate = require("../../scripts/impersonate.js")
|
||||
const deployAndEnableConnector = require("../../scripts/deployAndEnableConnector.js")
|
||||
const buildDSAv2 = require("../../scripts/buildDSAv2")
|
||||
const encodeSpells = require("../../scripts/encodeSpells.js")
|
||||
const getMasterSigner = require("../../scripts/getMasterSigner")
|
||||
const deployAndEnableConnector = require("../../scripts/polygon/deployAndEnableConnector.js")
|
||||
const buildDSAv2 = require("../../scripts/polygon/buildDSAv2")
|
||||
const encodeSpells = require("../../scripts/polygon/encodeSpells.js")
|
||||
const getMasterSigner = require("../../scripts/polygon/getMasterSigner")
|
||||
|
||||
const addresses = require("../../scripts/constant/addresses");
|
||||
const addresses = require("../../scripts/polygon/constant/addresses");
|
||||
const abis = require("../../scripts/constant/abis");
|
||||
const tokens = require("../../scripts/polygon/constant/tokens");
|
||||
|
||||
const connectV2AaveV2Artifacts = require("../../artifacts/contracts/polygon/connectors/aave/v2/main.sol/ConnectV2AaveV2Polygon.json")
|
||||
const connectV2PoolTogetherV4Artifacts = require("../../artifacts/contracts/polygon/connectors/pooltogether_v4/main.sol/ConnectV2PoolTogetherV4Polygon.json")
|
||||
|
||||
const connectV2CompoundArtifacts = require("../../artifacts/contracts/mainnet/connectors/compound/main.sol/ConnectV2Compound.json")
|
||||
const connectV2PoolTogetherV4Artifacts = require("../../artifacts/contracts/mainnet/connectors/pooltogether_v4/main.sol/ConnectV2PoolTogetherV4.json")
|
||||
const PrizeDistributionBuffer = require('./artifacts/PrizeDistributionBuffer.json')
|
||||
const DrawBeacon = require('./artifacts/DrawBeacon.json')
|
||||
const DrawBuffer = require('./artifacts/DrawBuffer.json')
|
||||
|
||||
// https://www.npmjs.com/package/@pooltogether/draw-calculator-js
|
||||
const {drawCalculator, Draw, PrizeDistribution, generatePicks, prepareClaims, computePicks, batchCalculateDrawResults, calculateNumberOfPicksForUser } = require("@pooltogether/draw-calculator-js")
|
||||
|
||||
// Mainnet Test Addresses https://v4.docs.pooltogether.com/protocol/reference/deployments/mainnet
|
||||
const PRIZE_POOL_ADDR = "0xd89a09084555a7D0ABe7B111b1f78DFEdDd638Be" // Prize Pool
|
||||
const PRIZE_POOL_TOKEN_ADDR = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" // ERC20 USDC
|
||||
const PRIZE_POOL_TICKET_ADDR = "0xdd4d117723C257CEe402285D3aCF218E9A8236E1" // ERC20 TICKET
|
||||
const PRIZE_DISTRIBUTOR_ADDR = "0xb9a179DcA5a7bf5f8B9E088437B3A85ebB495eFe"
|
||||
const PRIZE_DISTRIBUTION_BUFFER_ADDR = "0xf025a8d9E6080F885e841C8cC0E324368D7C6577"
|
||||
const PRIZE_POOL_ADDR = "0x19DE635fb3678D8B8154E37d8C9Cdf182Fe84E60" // Prize Pool
|
||||
const PRIZE_POOL_TOKEN_ADDR = "0x2791bca1f2de4661ed88a30c99a7a9449aa84174" // ERC20 USDC
|
||||
const PRIZE_POOL_TICKET_ADDR = "0x6a304dFdb9f808741244b6bfEe65ca7B3b3A6076" // ERC20 TICKET
|
||||
const PRIZE_DISTRIBUTOR_ADDR = "0x8141BcFBcEE654c5dE17C4e2B2AF26B67f9B9056"
|
||||
const PRIZE_DISTRIBUTION_BUFFER_ADDR = "0xcf6030BDEaB4E503D186426510aD88C1DA7125A3"
|
||||
const DRAW_BEACON_ADDR = "0x0D33612870cd9A475bBBbB7CC38fC66680dEcAC5"
|
||||
const DRAW_BUFFER_ADDR = "0x78Ea5a9595279DC2F9608283875571b1151F19D4"
|
||||
const DRAW_CALCULATOR_ADDR = "0x14d0675580C7255043a3AeD3726F5D7f33292730"
|
||||
const DRAW_BUFFER_ADDR = "0x44B1d66E7B9d4467139924f31754F34cbC392f44"
|
||||
const DRAW_CALCULATOR_ADDR = "0x3976BD6F4B82C97314570A77bc1e979f7A839A24"
|
||||
|
||||
const TICKET_ABI = [
|
||||
"function delegateOf(address _user) external view returns (address)",
|
||||
|
|
@ -53,7 +54,7 @@ const RNGBLOCKHASH_ABI = [
|
|||
]
|
||||
|
||||
describe("PoolTogether", function () {
|
||||
const connectorName = "COMPOUND-TEST-A"
|
||||
const connectorName = "AAVEV2-TEST-A"
|
||||
const ptConnectorName = "POOLTOGETHERV4-TEST-A"
|
||||
|
||||
let dsaWallet0
|
||||
|
|
@ -61,7 +62,7 @@ describe("PoolTogether", function () {
|
|||
let instaConnectorsV2;
|
||||
let connector;
|
||||
let ptConnector;
|
||||
let rng;
|
||||
let winningRandomNumber;
|
||||
|
||||
const wallets = provider.getWallets()
|
||||
const [wallet0, wallet1, wallet2, wallet3] = wallets
|
||||
|
|
@ -71,8 +72,8 @@ describe("PoolTogether", function () {
|
|||
params: [
|
||||
{
|
||||
forking: {
|
||||
jsonRpcUrl: `https://eth-mainnet.alchemyapi.io/v2/${ALCHEMY_ID}`,
|
||||
blockNumber: 13475671,
|
||||
jsonRpcUrl: `https://polygon-mainnet.g.alchemy.com/v2/${ALCHEMY_ID}`,
|
||||
blockNumber: 20533210, // Just after draw 8 ended
|
||||
},
|
||||
},
|
||||
],
|
||||
|
|
@ -81,10 +82,10 @@ describe("PoolTogether", function () {
|
|||
masterSigner = await getMasterSigner(wallet3)
|
||||
instaConnectorsV2 = await ethers.getContractAt(abis.core.connectorsV2, addresses.core.connectorsV2);
|
||||
|
||||
// Deploy and enable Compound Connector
|
||||
// Deploy and enable Aave Connector
|
||||
connector = await deployAndEnableConnector({
|
||||
connectorName,
|
||||
contractArtifact: connectV2CompoundArtifacts,
|
||||
contractArtifact: connectV2AaveV2Artifacts,
|
||||
signer: masterSigner,
|
||||
connectors: instaConnectorsV2
|
||||
})
|
||||
|
|
@ -111,25 +112,18 @@ describe("PoolTogether", function () {
|
|||
expect(!!dsaWallet0.address).to.be.true;
|
||||
});
|
||||
|
||||
it("Should compute winning pick from hashed dsaWallet0.address, setup Mock RNG Contract", async function() {
|
||||
it("Should compute winning pick from hashed dsaWallet0.address", async function() {
|
||||
// First pick generated from hashed dsaWallet0.address
|
||||
const hashedAddress = ethers.utils.solidityKeccak256(['address'], [dsaWallet0.address]);
|
||||
const pick0 = computePicks(hashedAddress,[ethers.BigNumber.from(0)])[0];
|
||||
|
||||
// Deploy Mock RNG Contract with hard coded winning random number of dsaWallet
|
||||
rng = await deployMockContract(wallet0, RNGBLOCKHASH_ABI);
|
||||
await rng.mock.getRequestFee.returns(ethers.constants.AddressZero, 0);
|
||||
await rng.mock.randomNumber.returns(pick0.hash);
|
||||
await rng.mock.isRequestComplete.returns(true);
|
||||
await rng.mock.getLastRequestId.returns(0);
|
||||
await rng.mock.requestRandomNumber.returns(1, await ethers.provider.getBlockNumber());
|
||||
expect(!!rng.address).to.be.true;
|
||||
winningRandomNumber = pick0.hash;
|
||||
console.log("WinningRandomNumber: ", winningRandomNumber);
|
||||
})
|
||||
|
||||
it("Deposit 10 ETH into DSA wallet", async function () {
|
||||
it("Deposit 1000 MATIC into DSA wallet", async function () {
|
||||
await wallet0.sendTransaction({
|
||||
to: dsaWallet0.address,
|
||||
value: ethers.utils.parseEther("10")
|
||||
value: ethers.utils.parseEther("1000")
|
||||
});
|
||||
expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.gte(ethers.utils.parseEther("10"));
|
||||
});
|
||||
|
|
@ -137,13 +131,13 @@ describe("PoolTogether", function () {
|
|||
|
||||
describe("Main - Prize Pool Test", function () {
|
||||
|
||||
it("Should deposit 5 ETH in Compound", async function () {
|
||||
const amount = ethers.utils.parseEther("5") // 1 ETH
|
||||
it("Should deposit 1000 MATIC in AAVE V2", async function () {
|
||||
const amount = ethers.utils.parseEther("1000") // 1000 MATIC
|
||||
const spells = [
|
||||
{
|
||||
connector: connectorName,
|
||||
method: "deposit",
|
||||
args: ["ETH-A", amount, 0, 0]
|
||||
args: [tokens.matic.address, amount, 0, 0]
|
||||
}
|
||||
]
|
||||
|
||||
|
|
@ -152,14 +146,14 @@ describe("PoolTogether", function () {
|
|||
expect(await ethers.provider.getBalance(dsaWallet0.address)).to.be.lte(ethers.utils.parseEther("5"));
|
||||
});
|
||||
|
||||
it("Should borrow 10000 USDC from Compound and deposit 1000 USDC into USDC Prize Pool without delegating (depositTo)", async function () {
|
||||
const borrowAmount = ethers.utils.parseUnits("10000", 6);
|
||||
const amount = ethers.utils.parseUnits("1000", 6) // 1000 USDC
|
||||
it("Should borrow 100 USDC from AAVE V2 and deposit 100 USDC into USDC Prize Pool without delegating (depositTo)", async function () {
|
||||
const borrowAmount = ethers.utils.parseUnits("500", 6);
|
||||
const amount = ethers.utils.parseUnits("100", 6) // 100 USDC
|
||||
const spells = [
|
||||
{
|
||||
connector: connectorName,
|
||||
method: "borrow",
|
||||
args: ["USDC-A", borrowAmount, 0, 0]
|
||||
args: [tokens.usdc.address, borrowAmount, 2, 0, 0]
|
||||
},
|
||||
{
|
||||
connector: ptConnectorName,
|
||||
|
|
@ -192,18 +186,18 @@ describe("PoolTogether", function () {
|
|||
// usdcBalance = await usdcToken.balanceOf(dsaWallet0.address);
|
||||
const balanceAfter = await usdcToken.balanceOf(dsaWallet0.address);
|
||||
console.log("TokenBalanceAfter: ", balanceAfter.toString());
|
||||
expect(balanceAfter, `Token balance equals 9000`).to.be.eq(ethers.utils.parseUnits("9000", 6));
|
||||
expect(balanceAfter, `Token balance equals 500`).to.be.eq(ethers.utils.parseUnits("400", 6));
|
||||
|
||||
const ticketBalanceOfAfter = await ticketToken.balanceOf(dsaWallet0.address);
|
||||
const ticketBalanceAtAfter = await ticketToken.getBalanceAt(dsaWallet0.address, (await ethers.provider.getBlock('latest')).timestamp);
|
||||
console.log("TicketBalanceOfAfter: ", ticketBalanceOfAfter.toString());
|
||||
console.log("TicketBalanceAtAfter: ", ticketBalanceAtAfter.toString());
|
||||
expect(ticketBalanceOfAfter, `PoolTogether Ticket balance equals 1000`).to.be.eq(ethers.utils.parseUnits("1000", 6));
|
||||
expect(ticketBalanceOfAfter, `PoolTogether Ticket balance equals 100`).to.be.eq(ethers.utils.parseUnits("100", 6));
|
||||
expect(ticketBalanceAtAfter, `PoolTogether Ticket elgible to win balance equals 0`).to.be.eq(ethers.utils.parseUnits("0", 6));
|
||||
});
|
||||
|
||||
it("Should deposit USDC into USDC Prize Pool and delegate to dsaWallet0", async function () {
|
||||
const amount = ethers.utils.parseUnits("1000", 6) // 1000 USDC
|
||||
const amount = ethers.utils.parseUnits("100", 6) // 100 USDC
|
||||
const spells = [
|
||||
{
|
||||
connector: ptConnectorName,
|
||||
|
|
@ -216,14 +210,14 @@ describe("PoolTogether", function () {
|
|||
const usdcToken = await ethers.getContractAt(abis.basic.erc20, PRIZE_POOL_TOKEN_ADDR);
|
||||
const balance = await usdcToken.balanceOf(dsaWallet0.address);
|
||||
console.log("TokenBalanceBefore: ", balance.toString());
|
||||
expect(balance, `USDC balance is 9000`).to.be.eq(ethers.utils.parseUnits("9000", 6));
|
||||
expect(balance, `USDC balance is 400`).to.be.eq(ethers.utils.parseUnits("400", 6));
|
||||
|
||||
const ticketToken = await ethers.getContractAt(TICKET_ABI, PRIZE_POOL_TICKET_ADDR);
|
||||
const ticketBalanceOf = await ticketToken.balanceOf(dsaWallet0.address);
|
||||
const ticketBalanceAt = await ticketToken.getBalanceAt(dsaWallet0.address, (await ethers.provider.getBlock('latest')).timestamp);
|
||||
console.log("TicketBalanceOfBefore: ", ticketBalanceOf.toString());
|
||||
console.log("TicketBalanceAtBefore: ", ticketBalanceAt.toString());
|
||||
expect(ticketBalanceOf, `PoolTogether Ticket balance equals 1000`).to.be.eq(ethers.utils.parseUnits("1000", 6));
|
||||
expect(ticketBalanceOf, `PoolTogether Ticket balance equals 100`).to.be.eq(ethers.utils.parseUnits("100", 6));
|
||||
expect(ticketBalanceAt, `PoolTogether Ticket elgible to win balance equals 0`).to.be.eq(ethers.utils.parseUnits("0", 6));
|
||||
|
||||
// Run spell transaction
|
||||
|
|
@ -233,18 +227,18 @@ describe("PoolTogether", function () {
|
|||
// After spell
|
||||
const balanceAfter = await usdcToken.balanceOf(dsaWallet0.address);
|
||||
console.log("TokenBalanceAfter: ", balanceAfter.toString());
|
||||
expect(balanceAfter, `Token balance equals 8000`).to.be.eq(ethers.utils.parseUnits("8000", 6));
|
||||
expect(balanceAfter, `Token balance equals 300`).to.be.eq(ethers.utils.parseUnits("300", 6));
|
||||
|
||||
const ticketBalanceOfAfter = await ticketToken.balanceOf(dsaWallet0.address);
|
||||
const ticketBalanceAtAfter = await ticketToken.getBalanceAt(dsaWallet0.address, (await ethers.provider.getBlock('latest')).timestamp);
|
||||
console.log("TicketBalanceOfAfter: ", ticketBalanceOfAfter.toString());
|
||||
console.log("TicketBalanceAtAfter: ", ticketBalanceAtAfter.toString());
|
||||
expect(ticketBalanceOfAfter, `PoolTogether Ticket balance equals 200`).to.be.eq(ethers.utils.parseUnits("2000", 6));
|
||||
expect(ticketBalanceAtAfter, `PoolTogether Ticket elgible to win balance equals 200`).to.be.eq(ethers.utils.parseUnits("2000", 6));
|
||||
expect(ticketBalanceOfAfter, `PoolTogether Ticket balance equals 200`).to.be.eq(ethers.utils.parseUnits("200", 6));
|
||||
expect(ticketBalanceAtAfter, `PoolTogether Ticket elgible to win balance equals 200`).to.be.eq(ethers.utils.parseUnits("200", 6));
|
||||
});
|
||||
|
||||
it("Should withdraw 2000 USDC from USDC Prize Pool", async function () {
|
||||
const amount = ethers.utils.parseUnits("2000", 6) // USDC
|
||||
it("Should withdraw 200 USDC from USDC Prize Pool", async function () {
|
||||
const amount = ethers.utils.parseUnits("200", 6) // USDC
|
||||
const setId = "83478237"
|
||||
const spells = [
|
||||
{
|
||||
|
|
@ -258,15 +252,15 @@ describe("PoolTogether", function () {
|
|||
let usdcToken = await ethers.getContractAt(abis.basic.erc20, PRIZE_POOL_TOKEN_ADDR)
|
||||
const balance = await usdcToken.balanceOf(dsaWallet0.address)
|
||||
console.log("TokenBalanceBefore: ", balance.toString());
|
||||
expect(balance, `USDC balance is 8000`).to.be.eq(ethers.utils.parseUnits("8000", 6));
|
||||
expect(balance, `USDC balance is 300`).to.be.eq(ethers.utils.parseUnits("300", 6));
|
||||
|
||||
const ticketToken = await ethers.getContractAt(TICKET_ABI, PRIZE_POOL_TICKET_ADDR);
|
||||
const ticketBalanceOf = await ticketToken.balanceOf(dsaWallet0.address);
|
||||
const ticketBalanceAt = await ticketToken.getBalanceAt(dsaWallet0.address, (await ethers.provider.getBlock('latest')).timestamp);
|
||||
console.log("TicketBalanceOfBefore: ", ticketBalanceOf.toString());
|
||||
console.log("TicketBalanceAtBefore: ", ticketBalanceAt.toString());
|
||||
expect(ticketBalanceOf, `PoolTogether Ticket balance equals 200`).to.be.eq(ethers.utils.parseUnits("2000", 6));
|
||||
expect(ticketBalanceAt, `PoolTogether Ticket elgible to win balance equals 200`).to.be.eq(ethers.utils.parseUnits("2000", 6));
|
||||
expect(ticketBalanceOf, `PoolTogether Ticket balance equals 200`).to.be.eq(ethers.utils.parseUnits("200", 6));
|
||||
expect(ticketBalanceAt, `PoolTogether Ticket elgible to win balance equals 200`).to.be.eq(ethers.utils.parseUnits("200", 6));
|
||||
|
||||
// Run spell transaction
|
||||
const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(spells), wallet1.address)
|
||||
|
|
@ -275,7 +269,7 @@ describe("PoolTogether", function () {
|
|||
// After spell
|
||||
const balanceAfter = await usdcToken.balanceOf(dsaWallet0.address);
|
||||
console.log("TokenBalanceAfter: ", balanceAfter.toString());
|
||||
expect(balanceAfter, `Token balance equals 10000`).to.be.eq(ethers.utils.parseUnits("10000", 6));
|
||||
expect(balanceAfter, `Token balance equals 500`).to.be.eq(ethers.utils.parseUnits("500", 6));
|
||||
|
||||
const ticketBalanceOfAfter = await ticketToken.balanceOf(dsaWallet0.address);
|
||||
const ticketBalanceAtAfter = await ticketToken.getBalanceAt(dsaWallet0.address, (await ethers.provider.getBlock('latest')).timestamp);
|
||||
|
|
@ -286,7 +280,7 @@ describe("PoolTogether", function () {
|
|||
});
|
||||
|
||||
it("Should deposit USDC into USDC Prize Pool and delegate to dsaWallet0", async function () {
|
||||
const amount = ethers.utils.parseUnits("10000", 6) // 1000 USDC
|
||||
const amount = ethers.utils.parseUnits("500", 6) // 500 USDC
|
||||
const setId = "83478237"
|
||||
const spells = [
|
||||
{
|
||||
|
|
@ -305,7 +299,7 @@ describe("PoolTogether", function () {
|
|||
// Before Spell
|
||||
const balance = await usdcToken.balanceOf(dsaWallet0.address)
|
||||
console.log("TokenBalanceBefore: ", balance.toString());
|
||||
expect(balance, `USDC balance is 10000`).to.be.eq(ethers.utils.parseUnits("10000", 6));
|
||||
expect(balance, `USDC balance is 500`).to.be.eq(ethers.utils.parseUnits("500", 6));
|
||||
|
||||
const ticketToken = await ethers.getContractAt(TICKET_ABI, PRIZE_POOL_TICKET_ADDR);
|
||||
const ticketBalanceOf = await ticketToken.balanceOf(dsaWallet0.address);
|
||||
|
|
@ -322,82 +316,59 @@ describe("PoolTogether", function () {
|
|||
// After spell
|
||||
const balanceAfter = await usdcToken.balanceOf(dsaWallet0.address);
|
||||
console.log("TokenBalanceAfter: ", balanceAfter.toString());
|
||||
expect(balanceAfter, `Token balance equals 0`).to.be.eq(ethers.utils.parseUnits("0", 6));
|
||||
expect(balanceAfter, `Token balance equals 400`).to.be.eq(ethers.utils.parseUnits("0", 6));
|
||||
|
||||
const ticketBalanceOfAfter = await ticketToken.balanceOf(dsaWallet0.address);
|
||||
const ticketBalanceAtAfter = await ticketToken.getBalanceAt(dsaWallet0.address, (await ethers.provider.getBlock('latest')).timestamp);
|
||||
console.log("TicketBalanceOfAfter: ", ticketBalanceOfAfter.toString());
|
||||
console.log("TicketBalanceAtAfter: ", ticketBalanceAtAfter.toString());
|
||||
expect(ticketBalanceOfAfter, `PoolTogether Ticket balance equals 100`).to.be.eq(ethers.utils.parseUnits("10000", 6));
|
||||
expect(ticketBalanceAtAfter, `PoolTogether Ticket elgible to win balance equals 1000`).to.be.eq(ethers.utils.parseUnits("10000", 6));
|
||||
expect(ticketBalanceOfAfter, `PoolTogether Ticket balance equals 100`).to.be.eq(ethers.utils.parseUnits("500", 6));
|
||||
expect(ticketBalanceAtAfter, `PoolTogether Ticket elgible to win balance equals 100`).to.be.eq(ethers.utils.parseUnits("500", 6));
|
||||
});
|
||||
|
||||
it("Trigger draw, claim winnings and withdraw winnings to dsaWallet0", async function () {
|
||||
const amount = ethers.utils.parseUnits("1000", 6) // 1000 USDC
|
||||
const amount = ethers.utils.parseUnits("100", 6) // 100 USDC
|
||||
const setId = "83478237"
|
||||
const drawId = 9
|
||||
|
||||
// Impersonate owner to set mock RNGService so we can set random number to always win
|
||||
const OWNER_ADDR = "0x029Aa20Dcc15c022b1b61D420aaCf7f179A9C73f"
|
||||
// Impersonate owner to set pushPrizeDistribution and pushDraw so we can set random number to always win
|
||||
const OWNER_ADDR = "0xd2146c8D93fD7Edd45C07634af7038E825880a64"
|
||||
const owner = await impersonate([OWNER_ADDR]);
|
||||
await wallet0.sendTransaction({
|
||||
to: OWNER_ADDR,
|
||||
value: ethers.utils.parseEther("1")
|
||||
});
|
||||
const drawBeaconContract = await ethers.getContractAt(DrawBeacon.abi, DRAW_BEACON_ADDR);
|
||||
await drawBeaconContract.connect(owner[0]).setRngService(rng.address);
|
||||
|
||||
// Get next drawId
|
||||
const drawCalculatorContract = await ethers.getContractAt(DRAW_CALCULATOR_ABI, DRAW_CALCULATOR_ADDR);
|
||||
const prizeDistributionBufferContract = await ethers.getContractAt(PrizeDistributionBuffer.abi, PRIZE_DISTRIBUTION_BUFFER_ADDR);
|
||||
const drawId = await drawBeaconContract.getNextDrawId();
|
||||
|
||||
// Get previous prizeDistribution
|
||||
// https://v4.docs.pooltogether.com/protocol/concepts/prize-distribution
|
||||
const prizeDistribution = await prizeDistributionBufferContract.getPrizeDistribution(drawId-2);
|
||||
const prizeDistribution = await prizeDistributionBufferContract.getPrizeDistribution(drawId-1);
|
||||
console.log(prizeDistribution);
|
||||
console.log("NumberofPicks:", prizeDistribution.numberOfPicks.toString());
|
||||
console.log("prize:", prizeDistribution.prize.toString());
|
||||
|
||||
console.log("\nCan Start Draw: ", await drawBeaconContract.canStartDraw());
|
||||
console.log("Can Complete Draw: ", await drawBeaconContract.canCompleteDraw());
|
||||
console.log("Beacon Period Remaining Seconds: ", (await drawBeaconContract.beaconPeriodRemainingSeconds()).toString());
|
||||
console.log("Next Draw Id: ", (await drawBeaconContract.getNextDrawId()).toString());
|
||||
|
||||
// Make sure beacon period ended by increasing time so we can startDraw
|
||||
await ethers.provider.send("evm_increaseTime", [1*24*60*60]);
|
||||
await ethers.provider.send("evm_mine");
|
||||
|
||||
console.log("\nIncrease Time");
|
||||
console.log("Can Start Draw: ", await drawBeaconContract.canStartDraw());
|
||||
console.log("Can Complete Draw: ", await drawBeaconContract.canCompleteDraw());
|
||||
console.log("Beacon Period Remaining Seconds: ", (await drawBeaconContract.beaconPeriodRemainingSeconds()).toString());
|
||||
|
||||
// Start Draw
|
||||
await drawBeaconContract.startDraw();
|
||||
console.log("\nStart Draw");
|
||||
console.log("Can Start Draw: ", await drawBeaconContract.canStartDraw());
|
||||
console.log("Can Complete Draw: ", await drawBeaconContract.canCompleteDraw());
|
||||
console.log("Beacon Period Remaining Seconds: ", (await drawBeaconContract.beaconPeriodRemainingSeconds()).toString());
|
||||
console.log("Next Draw Id: ", drawId);
|
||||
|
||||
// Complete Draw
|
||||
await drawBeaconContract.completeDraw();
|
||||
console.log("\nComplete Draw");
|
||||
console.log("Can Start Draw: ", await drawBeaconContract.canStartDraw());
|
||||
console.log("Can Complete Draw: ", await drawBeaconContract.canCompleteDraw());
|
||||
console.log("Beacon Period Remaining Seconds: ", (await drawBeaconContract.beaconPeriodRemainingSeconds()).toString());
|
||||
console.log("Next Draw Id: ", (await drawBeaconContract.getNextDrawId()).toString());
|
||||
|
||||
// Push previous prizeDistribution, then latest one for draw
|
||||
await prizeDistributionBufferContract.connect(owner[0]).pushPrizeDistribution(drawId-1, prizeDistribution);
|
||||
// Push prizeDistribution
|
||||
await prizeDistributionBufferContract.connect(owner[0]).pushPrizeDistribution(drawId, prizeDistribution);
|
||||
|
||||
// Set Draw with our winning Random number
|
||||
const drawBufferContract = await ethers.getContractAt(DrawBuffer.abi, DRAW_BUFFER_ADDR);
|
||||
const drawData = {
|
||||
winningRandomNumber,
|
||||
drawId,
|
||||
timestamp: 1635102210,
|
||||
beaconPeriodStartedAt: 1635015600,
|
||||
beaconPeriodSeconds: 86400
|
||||
}
|
||||
await drawBufferContract.connect(owner[0]).pushDraw(drawData);
|
||||
|
||||
// User normalized Balances, used to determine number of picks
|
||||
const normalizedBalances = await drawCalculatorContract.getNormalizedBalancesForDrawIds(dsaWallet0.address,[drawId]);
|
||||
console.log("\nNormalized Balances For DrawIds: ", normalizedBalances.toString());
|
||||
console.log("User number of Picks", calculateNumberOfPicksForUser(prizeDistribution, ethers.BigNumber.from(normalizedBalances.toString())));
|
||||
|
||||
const drawBufferContract = await ethers.getContractAt(DrawBuffer.abi, DRAW_BUFFER_ADDR);
|
||||
const draw = await drawBufferContract.getDraw(drawId);
|
||||
console.log("\nDRAW DATA");
|
||||
console.log("drawId: ", draw.drawId);
|
||||
|
|
@ -441,15 +412,15 @@ describe("PoolTogether", function () {
|
|||
let usdcToken = await ethers.getContractAt(abis.basic.erc20, PRIZE_POOL_TOKEN_ADDR)
|
||||
let balance = await usdcToken.balanceOf(dsaWallet0.address);
|
||||
console.log("\nTokenBalanceBefore: ", balance.toString());
|
||||
expect(balance, `USDC balance is 0`).to.be.eq(ethers.utils.parseEther("0"));
|
||||
expect(balance, `USDC balance is 0`).to.be.eq(ethers.utils.parseUnits("0", 6));
|
||||
|
||||
const ticketToken = await ethers.getContractAt(TICKET_ABI, PRIZE_POOL_TICKET_ADDR);
|
||||
const ticketBalanceOf = await ticketToken.balanceOf(dsaWallet0.address);
|
||||
const ticketBalanceAt = await ticketToken.getBalanceAt(dsaWallet0.address, (await ethers.provider.getBlock('latest')).timestamp);
|
||||
console.log("TicketBalanceOfBefore: ", ticketBalanceOf.toString());
|
||||
console.log("TicketBalanceAtBefore: ", ticketBalanceAt.toString());
|
||||
expect(ticketBalanceOf, `PoolTogether Ticket balance equals 0`).to.be.eq(ethers.utils.parseUnits("10000", 6));
|
||||
expect(ticketBalanceAt, `PoolTogether Ticket elgible to win balance equals 0`).to.be.eq(ethers.utils.parseUnits("10000", 6));
|
||||
expect(ticketBalanceOf, `PoolTogether Ticket balance equals 0`).to.be.eq(ethers.utils.parseUnits("500", 6));
|
||||
expect(ticketBalanceAt, `PoolTogether Ticket elgible to win balance equals 0`).to.be.eq(ethers.utils.parseUnits("500", 6));
|
||||
|
||||
// // Run spell transaction
|
||||
const tx = await dsaWallet0.connect(wallet0).cast(...encodeSpells(spells), wallet1.address)
|
||||
|
|
@ -464,8 +435,8 @@ describe("PoolTogether", function () {
|
|||
const ticketBalanceAtAfter = await ticketToken.getBalanceAt(dsaWallet0.address, (await ethers.provider.getBlock('latest')).timestamp);
|
||||
console.log("TicketBalanceOfAfter: ", ticketBalanceOfAfter.toString());
|
||||
console.log("TicketBalanceAtAfter: ", ticketBalanceAtAfter.toString());
|
||||
expect(ticketBalanceOfAfter, `PoolTogether Ticket balance equals 100`).to.be.eq(ethers.utils.parseUnits("10000", 6));
|
||||
expect(ticketBalanceAtAfter, `PoolTogether Ticket elgible to win balance equals 100`).to.be.eq(ethers.utils.parseUnits("10000", 6));
|
||||
expect(ticketBalanceOfAfter, `PoolTogether Ticket balance equals 100`).to.be.eq(ethers.utils.parseUnits("500", 6));
|
||||
expect(ticketBalanceAtAfter, `PoolTogether Ticket elgible to win balance equals 100`).to.be.eq(ethers.utils.parseUnits("500", 6));
|
||||
});
|
||||
})
|
||||
})
|
||||
Loading…
Reference in New Issue
Block a user