From 006a33533c2f0593e7cdbd6b4edd04cf6242ff4d Mon Sep 17 00:00:00 2001 From: eccheung4 Date: Wed, 27 Oct 2021 20:59:11 -0700 Subject: [PATCH] feat: update connector for polygon --- .../connectors/pooltogether_v4/main.sol | 16 +- package.json | 1 + .../pooltogether.test.js | 179 ++++++++---------- 3 files changed, 84 insertions(+), 112 deletions(-) diff --git a/contracts/polygon/connectors/pooltogether_v4/main.sol b/contracts/polygon/connectors/pooltogether_v4/main.sol index e4493186..bee71865 100644 --- a/contracts/polygon/connectors/pooltogether_v4/main.sol +++ b/contracts/polygon/connectors/pooltogether_v4/main.sol @@ -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"; } \ No newline at end of file diff --git a/package.json b/package.json index 62f04e3f..c1ce2758 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/test/pooltogether_v4-polygon/pooltogether.test.js b/test/pooltogether_v4-polygon/pooltogether.test.js index 7bdd5dd7..c238fe13 100644 --- a/test/pooltogether_v4-polygon/pooltogether.test.js +++ b/test/pooltogether_v4-polygon/pooltogether.test.js @@ -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)); }); }) }) \ No newline at end of file