diff --git a/README.md b/README.md index 992bd4d..24038ae 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,26 @@ -# Foundry template +

+ + PoolTogether Brand + +

-Template to kickstart a Foundry project. +# PoolTogether V5 Draw Auction -## Getting started +[![Code Coverage](https://github.com/pooltogether/v5-draw-beacon/actions/workflows/coverage.yml/badge.svg)](https://github.com/pooltogether/v5-draw-beacon/actions/workflows/coverage.yml) +[![built-with openzeppelin](https://img.shields.io/badge/built%20with-OpenZeppelin-3677FF)](https://docs.openzeppelin.com/) +[![GPLv3 license](https://img.shields.io/badge/License-GPLv3-blue.svg)](http://perso.crans.org/besson/LICENSE.html) -The easiest way to get started is by clicking the [Use this template](https://github.com/pooltogether/foundry-template/generate) button at the top right of this page. +Have questions or want the latest news? +
Join the PoolTogether Discord or follow us on Twitter: -If you prefer to go the CLI way: +[![Discord](https://badgen.net/badge/icon/discord?icon=discord&label)](https://pooltogether.com/discord) +[![Twitter](https://badgen.net/badge/icon/twitter?icon=twitter&label)](https://twitter.com/PoolTogether_) -``` -forge init my-project --template https://github.com/pooltogether/foundry-template -``` +## Overview + +To encourage the completion of the Draw, the Prize Pool's reserve, which accumulated during the duration of the Draw, is distributed through an auction. A linear auction mechanism is used to distribute it. + +To learn more about this mechanism, consult the following documentation: [https://dev.pooltogether.com/protocol/next/design/draw-auction](https://dev.pooltogether.com/protocol/next/design/draw-auction) ## Development diff --git a/lib/optimism b/lib/optimism index 13c710c..9dd4764 160000 --- a/lib/optimism +++ b/lib/optimism @@ -1 +1 @@ -Subproject commit 13c710c7c8e39622215e8718d2c2c41f8f70d90b +Subproject commit 9dd4764865662ec48114fc2781017ef25a61fac7 diff --git a/lib/v5-prize-pool b/lib/v5-prize-pool index 9c9fd20..4cbd0db 160000 --- a/lib/v5-prize-pool +++ b/lib/v5-prize-pool @@ -1 +1 @@ -Subproject commit 9c9fd20b6648fe2bb38ee1587e1886ed80f89b6f +Subproject commit 4cbd0dbb40704c21cc07b42b2e3057a7e90b1057 diff --git a/src/DrawAuction.sol b/src/DrawAuction.sol index 6b0cb1f..b1a346e 100644 --- a/src/DrawAuction.sol +++ b/src/DrawAuction.sol @@ -84,7 +84,7 @@ contract DrawAuction is TwoStepsAuction { ) internal override { uint256[] memory _rewards = RewardLib.rewards(_auctionPhases, _prizePool, _auctionDuration); - _prizePool.completeAndStartNextDraw(_randomNumber); + _prizePool.closeDraw(_randomNumber); AuctionLib.Phase memory _startRNGPhase = _auctionPhases[0]; AuctionLib.Phase memory _completeRNGPhase = _auctionPhases[1]; diff --git a/src/DrawAuctionExecutor.sol b/src/DrawAuctionExecutor.sol index fde0c3b..61765b7 100644 --- a/src/DrawAuctionExecutor.sol +++ b/src/DrawAuctionExecutor.sol @@ -99,7 +99,7 @@ contract DrawAuctionExecutor is ExecutorAware { uint256[] memory _rewards = RewardLib.rewards(_auctionPhases, _prizePool, _auctionDuration); - _prizePool.completeAndStartNextDraw(_randomNumber); + _prizePool.closeDraw(_randomNumber); AuctionLib.Phase memory _startRNGPhase = _auctionPhases[0]; AuctionLib.Phase memory _completeRNGPhase = _auctionPhases[1]; diff --git a/src/auctions/TwoStepsAuction.sol b/src/auctions/TwoStepsAuction.sol index 7924685..f8b1afa 100644 --- a/src/auctions/TwoStepsAuction.sol +++ b/src/auctions/TwoStepsAuction.sol @@ -31,7 +31,7 @@ contract TwoStepsAuction is Auction, RNGRequestor { * @notice Hook called after the RNG request has started. * @dev The auction is not aware of the PrizePool contract, so startTime is set to 0. * Since the first phase of the auction starts when the draw has ended, - * we can derive the actual startTime by calling PrizePool.nextDrawEndsAt() when computing the reward. + * we can derive the actual startTime by calling PrizePool.hasOpenDrawFinished() when computing the reward. * @param _rewardRecipient Address that will receive the auction reward for starting the RNG request */ function _afterRNGStart(address _rewardRecipient) internal override { diff --git a/src/libraries/RewardLib.sol b/src/libraries/RewardLib.sol index c765069..5042719 100644 --- a/src/libraries/RewardLib.sol +++ b/src/libraries/RewardLib.sol @@ -24,9 +24,9 @@ library RewardLib { PrizePool _prizePool, uint32 _auctionDuration ) internal view returns (uint256[] memory) { - uint64 _auctionStart = _prizePool.nextDrawEndsAt(); + uint64 _auctionStart = _prizePool.openDrawEndsAt(); uint64 _auctionEnd = _auctionStart + _auctionDuration; - uint256 _reserve = _prizePool.reserve() + _prizePool.reserveForNextDraw(); + uint256 _reserve = _prizePool.reserve() + _prizePool.reserveForOpenDraw(); uint256 _phasesLength = _phases.length; uint256[] memory _rewards = new uint256[](_phasesLength); @@ -54,10 +54,10 @@ library RewardLib { PrizePool _prizePool, uint32 _auctionDuration ) internal view returns (uint256) { - uint64 _auctionStart = _prizePool.nextDrawEndsAt(); + uint64 _auctionStart = _prizePool.openDrawEndsAt(); uint64 _auctionEnd = _auctionStart + _auctionDuration; - uint256 _reserve = _prizePool.reserve() + _prizePool.reserveForNextDraw(); + uint256 _reserve = _prizePool.reserve() + _prizePool.reserveForOpenDraw(); return _reward(_phase, _reserve, _auctionStart, _auctionEnd, _auctionDuration); } diff --git a/test/DrawAuction.t.sol b/test/DrawAuction.t.sol index b948445..4d7daaa 100644 --- a/test/DrawAuction.t.sol +++ b/test/DrawAuction.t.sol @@ -40,7 +40,6 @@ contract DrawAuctionTest is Helpers { prizeToken: prizeToken, twabController: TwabController(address(0)), drawManager: address(0), - grandPrizePeriodDraws: uint16(365), drawPeriodSeconds: drawPeriodSeconds, firstDrawStartsAt: uint64(block.timestamp), numberOfTiers: uint8(3), // minimum number of tiers diff --git a/test/fork/DrawAuctionDispatcherEthereumToOptimismFork.t.sol b/test/fork/DrawAuctionDispatcherEthereumToOptimismFork.t.sol index 00ca112..abcd9d4 100644 --- a/test/fork/DrawAuctionDispatcherEthereumToOptimismFork.t.sol +++ b/test/fork/DrawAuctionDispatcherEthereumToOptimismFork.t.sol @@ -97,7 +97,6 @@ contract DrawAuctionDispatcherEthereumToOptimismForkTest is Helpers { prizeToken: prizeToken, twabController: TwabController(address(0)), drawManager: address(0), - grandPrizePeriodDraws: uint16(365), drawPeriodSeconds: drawPeriodSeconds, firstDrawStartsAt: uint64(block.timestamp), numberOfTiers: uint8(3), // minimum number of tiers diff --git a/test/fork/DrawAuctionExecutorEthereumToOptimismFork.t.sol b/test/fork/DrawAuctionExecutorEthereumToOptimismFork.t.sol index 6151726..fc37ce3 100644 --- a/test/fork/DrawAuctionExecutorEthereumToOptimismFork.t.sol +++ b/test/fork/DrawAuctionExecutorEthereumToOptimismFork.t.sol @@ -98,7 +98,6 @@ contract DrawAuctionExecutorEthereumToOptimismForkTest is Helpers { prizeToken: prizeToken, twabController: TwabController(address(0)), drawManager: address(0), - grandPrizePeriodDraws: uint16(365), drawPeriodSeconds: drawPeriodSeconds, firstDrawStartsAt: uint64(block.timestamp), numberOfTiers: uint8(3), // minimum number of tiers diff --git a/test/helpers/Helpers.t.sol b/test/helpers/Helpers.t.sol index 4628941..3051c8c 100644 --- a/test/helpers/Helpers.t.sol +++ b/test/helpers/Helpers.t.sol @@ -77,10 +77,10 @@ contract Helpers is Test { ); } - function _mockReserveForNextDraw(address _prizePool, uint256 _amount) internal { + function _mockReserveForOpenDraw(address _prizePool, uint256 _amount) internal { vm.mockCall( _prizePool, - abi.encodeWithSelector(PrizePool.reserveForNextDraw.selector), + abi.encodeWithSelector(PrizePool.reserveForOpenDraw.selector), abi.encode(_amount) ); } @@ -89,7 +89,7 @@ contract Helpers is Test { uint256 _amount = _reserveAmount / 2; _mockReserve(_prizePool, _amount); - _mockReserveForNextDraw(_prizePool, _amount); + _mockReserveForOpenDraw(_prizePool, _amount); } /* ============ Computations ============ */ diff --git a/test/libraries/RewardLib.t.sol b/test/libraries/RewardLib.t.sol index 7c952bc..2cc644e 100644 --- a/test/libraries/RewardLib.t.sol +++ b/test/libraries/RewardLib.t.sol @@ -27,7 +27,6 @@ contract RewardLibTest is Helpers { prizeToken: prizeToken, twabController: TwabController(address(0)), drawManager: address(0), - grandPrizePeriodDraws: uint16(365), drawPeriodSeconds: drawPeriodSeconds, firstDrawStartsAt: uint64(block.timestamp), numberOfTiers: uint8(3), // minimum number of tiers @@ -47,7 +46,7 @@ contract RewardLibTest is Helpers { /* ============ Before or at Draw ends (default state) ============ */ function testRewardBeforeDrawEnds() public { assertEq(block.timestamp, 0); - assertEq(prizePool.nextDrawEndsAt(), drawPeriodSeconds); + assertEq(prizePool.openDrawEndsAt(), drawPeriodSeconds); assertEq(rewardLib.reward(0), 0); assertEq(rewardLib.reward(1), 0); @@ -57,7 +56,7 @@ contract RewardLibTest is Helpers { vm.warp(drawPeriodSeconds); assertEq(block.timestamp, drawPeriodSeconds); - assertEq(prizePool.nextDrawEndsAt(), drawPeriodSeconds); + assertEq(prizePool.openDrawEndsAt(), drawPeriodSeconds); assertEq(rewardLib.reward(0), 0); assertEq(rewardLib.reward(1), 0); @@ -70,7 +69,7 @@ contract RewardLibTest is Helpers { vm.warp(_warpTimestamp); assertEq(block.timestamp, _warpTimestamp); - assertEq(prizePool.nextDrawEndsAt(), drawPeriodSeconds); + assertEq(prizePool.openDrawEndsAt(), drawPeriodSeconds); uint256 _reserveAmount = 200e18; _mockReserves(address(prizePool), _reserveAmount); @@ -83,7 +82,7 @@ contract RewardLibTest is Helpers { vm.warp(_warpTimestamp); assertEq(block.timestamp, _warpTimestamp); - assertEq(prizePool.nextDrawEndsAt(), drawPeriodSeconds); + assertEq(prizePool.openDrawEndsAt(), drawPeriodSeconds); uint256 _reserveAmount = 200e18; _mockReserves(address(prizePool), _reserveAmount); @@ -103,7 +102,7 @@ contract RewardLibTest is Helpers { vm.warp(_warpTimestamp); assertEq(block.timestamp, _warpTimestamp); - assertEq(prizePool.nextDrawEndsAt(), drawPeriodSeconds); + assertEq(prizePool.openDrawEndsAt(), drawPeriodSeconds); uint256 _reserveAmount = 200e18; _mockReserves(address(prizePool), _reserveAmount); @@ -116,7 +115,7 @@ contract RewardLibTest is Helpers { vm.warp(_warpTimestamp); assertEq(block.timestamp, _warpTimestamp); - assertEq(prizePool.nextDrawEndsAt(), drawPeriodSeconds); + assertEq(prizePool.openDrawEndsAt(), drawPeriodSeconds); uint256 _reserveAmount = 200e18; _mockReserves(address(prizePool), _reserveAmount); @@ -134,7 +133,7 @@ contract RewardLibTest is Helpers { vm.warp(_warpTimestamp); assertEq(block.timestamp, _warpTimestamp); - assertEq(prizePool.nextDrawEndsAt(), drawPeriodSeconds); + assertEq(prizePool.openDrawEndsAt(), drawPeriodSeconds); uint256 _reserveAmount = 200e18; _mockReserves(address(prizePool), _reserveAmount); @@ -147,7 +146,7 @@ contract RewardLibTest is Helpers { vm.warp(_warpTimestamp); assertEq(block.timestamp, _warpTimestamp); - assertEq(prizePool.nextDrawEndsAt(), drawPeriodSeconds); + assertEq(prizePool.openDrawEndsAt(), drawPeriodSeconds); uint256 _reserveAmount = 200e18; _mockReserves(address(prizePool), _reserveAmount); @@ -167,7 +166,7 @@ contract RewardLibTest is Helpers { vm.warp(_warpTimestamp); assertEq(block.timestamp, _warpTimestamp); - assertEq(prizePool.nextDrawEndsAt(), drawPeriodSeconds * 2); + assertEq(prizePool.openDrawEndsAt(), drawPeriodSeconds * 2); uint256 _reserveAmount = 400e18; _mockReserves(address(prizePool), _reserveAmount); @@ -181,7 +180,7 @@ contract RewardLibTest is Helpers { vm.warp(_warpTimestamp); assertEq(block.timestamp, _warpTimestamp); - assertEq(prizePool.nextDrawEndsAt(), drawPeriodSeconds * 2); + assertEq(prizePool.openDrawEndsAt(), drawPeriodSeconds * 2); uint256 _reserveAmount = 400e18; _mockReserves(address(prizePool), _reserveAmount); @@ -200,7 +199,7 @@ contract RewardLibTest is Helpers { vm.warp(_warpTimestamp); assertEq(block.timestamp, _warpTimestamp); - assertEq(prizePool.nextDrawEndsAt(), drawPeriodSeconds * 2); + assertEq(prizePool.openDrawEndsAt(), drawPeriodSeconds * 2); uint256 _reserveAmount = 400e18; _mockReserves(address(prizePool), _reserveAmount); @@ -214,7 +213,7 @@ contract RewardLibTest is Helpers { vm.warp(_warpTimestamp); assertEq(block.timestamp, _warpTimestamp); - assertEq(prizePool.nextDrawEndsAt(), drawPeriodSeconds * 2); + assertEq(prizePool.openDrawEndsAt(), drawPeriodSeconds * 2); uint256 _reserveAmount = 400e18; _mockReserves(address(prizePool), _reserveAmount); @@ -234,7 +233,7 @@ contract RewardLibTest is Helpers { vm.warp(_warpTimestamp); assertEq(block.timestamp, _warpTimestamp); - assertEq(prizePool.nextDrawEndsAt(), drawPeriodSeconds * 2); + assertEq(prizePool.openDrawEndsAt(), drawPeriodSeconds * 2); uint256 _reserveAmount = 400e18; _mockReserves(address(prizePool), _reserveAmount);