From cf4bb3538a52192e28ce761a49d290fd8c190cd3 Mon Sep 17 00:00:00 2001 From: aodhgan <36907214+aodhgan@users.noreply.github.com> Date: Wed, 6 Oct 2021 12:11:38 -0700 Subject: [PATCH] removed DrawLin (#195) Co-authored-by: Aodhgan --- contracts/DrawBeacon.sol | 4 +- contracts/DrawCalculator.sol | 36 ++++++++-------- contracts/DrawHistory.sol | 29 ++++++------- contracts/DrawPrize.sol | 2 +- contracts/PrizeDistributionHistory.sol | 21 +++++----- contracts/interfaces/IDrawBeacon.sol | 16 ++++++- contracts/interfaces/IDrawCalculator.sol | 1 - contracts/interfaces/IDrawHistory.sol | 28 ++++++------- contracts/interfaces/IDrawPrize.sol | 1 - .../interfaces/IPrizeDistributionHistory.sol | 39 ++++++++++++----- contracts/libraries/DrawLib.sol | 42 ------------------- contracts/test/DrawCalculatorHarness.sol | 7 ++-- contracts/test/DrawHistoryHarness.sol | 4 +- 13 files changed, 109 insertions(+), 121 deletions(-) delete mode 100644 contracts/libraries/DrawLib.sol diff --git a/contracts/DrawBeacon.sol b/contracts/DrawBeacon.sol index 489c18e0..a58f521f 100644 --- a/contracts/DrawBeacon.sol +++ b/contracts/DrawBeacon.sol @@ -11,7 +11,7 @@ import "@pooltogether/owner-manager-contracts/contracts/Ownable.sol"; import "./interfaces/IDrawBeacon.sol"; import "./interfaces/IDrawHistory.sol"; -import "./libraries/DrawLib.sol"; + /** * @title PoolTogether V4 DrawBeacon @@ -223,7 +223,7 @@ contract DrawBeacon is IDrawBeacon, Ownable { uint64 _time = _currentTime(); // create Draw struct - DrawLib.Draw memory _draw = DrawLib.Draw({ + IDrawBeacon.Draw memory _draw = IDrawBeacon.Draw({ winningRandomNumber: randomNumber, drawId: _nextDrawId, timestamp: rngRequest.requestedAt, // must use the startAward() timestamp to prevent front-running diff --git a/contracts/DrawCalculator.sol b/contracts/DrawCalculator.sol index 0b28338a..dc1c426d 100644 --- a/contracts/DrawCalculator.sol +++ b/contracts/DrawCalculator.sol @@ -10,7 +10,7 @@ import "./interfaces/IDrawCalculator.sol"; import "./interfaces/ITicket.sol"; import "./interfaces/IDrawHistory.sol"; import "./interfaces/IPrizeDistributionHistory.sol"; -import "./libraries/DrawLib.sol"; +import "./interfaces/IDrawBeacon.sol"; import "./libraries/DrawRingBufferLib.sol"; /** @@ -71,11 +71,11 @@ contract DrawCalculator is IDrawCalculator, Ownable { uint64[][] memory pickIndices = abi.decode(_pickIndicesForDraws, (uint64 [][])); require(pickIndices.length == _drawIds.length, "DrawCalc/invalid-pick-indices-length"); - // READ list of DrawLib.Draw using the drawIds from drawHistory - DrawLib.Draw[] memory draws = drawHistory.getDraws(_drawIds); + // READ list of IDrawBeacon.Draw using the drawIds from drawHistory + IDrawBeacon.Draw[] memory draws = drawHistory.getDraws(_drawIds); - // READ list of DrawLib.PrizeDistribution using the drawIds - DrawLib.PrizeDistribution[] memory _prizeDistributions = prizeDistributionHistory + // READ list of IPrizeDistributionHistory.PrizeDistribution using the drawIds + IPrizeDistributionHistory.PrizeDistribution[] memory _prizeDistributions = prizeDistributionHistory .getPrizeDistributions(_drawIds); // The userBalances are fractions representing their portion of the liquidity for a draw. @@ -116,8 +116,8 @@ contract DrawCalculator is IDrawCalculator, Ownable { override returns (uint256[] memory) { - DrawLib.Draw[] memory _draws = drawHistory.getDraws(_drawIds); - DrawLib.PrizeDistribution[] memory _prizeDistributions = prizeDistributionHistory + IDrawBeacon.Draw[] memory _draws = drawHistory.getDraws(_drawIds); + IPrizeDistributionHistory.PrizeDistribution[] memory _prizeDistributions = prizeDistributionHistory .getPrizeDistributions(_drawIds); return _getNormalizedBalancesAt(_user, _draws, _prizeDistributions); @@ -132,8 +132,8 @@ contract DrawCalculator is IDrawCalculator, Ownable { uint32[] memory drawIds = new uint32[](1); drawIds[0] = _drawId; - DrawLib.Draw[] memory _draws = drawHistory.getDraws(drawIds); - DrawLib.PrizeDistribution[] memory _prizeDistributions = prizeDistributionHistory + IDrawBeacon.Draw[] memory _draws = drawHistory.getDraws(drawIds); + IPrizeDistributionHistory.PrizeDistribution[] memory _prizeDistributions = prizeDistributionHistory .getPrizeDistributions(drawIds); uint256[] memory userBalances = _getNormalizedBalancesAt( @@ -188,9 +188,9 @@ contract DrawCalculator is IDrawCalculator, Ownable { function _calculatePrizesAwardable( uint256[] memory _normalizedUserBalances, bytes32 _userRandomNumber, - DrawLib.Draw[] memory _draws, + IDrawBeacon.Draw[] memory _draws, uint64[][] memory _pickIndicesForDraws, - DrawLib.PrizeDistribution[] memory _prizeDistributions + IPrizeDistributionHistory.PrizeDistribution[] memory _prizeDistributions ) internal pure returns (uint256[] memory) { uint256[] memory prizesAwardable = new uint256[](_normalizedUserBalances.length); @@ -221,7 +221,7 @@ contract DrawCalculator is IDrawCalculator, Ownable { * @return The number of picks a user gets for a Draw */ function _calculateNumberOfUserPicks( - DrawLib.PrizeDistribution memory _prizeDistribution, + IPrizeDistributionHistory.PrizeDistribution memory _prizeDistribution, uint256 _normalizedUserBalance ) internal pure returns (uint64) { return uint64((_normalizedUserBalance * _prizeDistribution.numberOfPicks) / 1 ether); @@ -236,8 +236,8 @@ contract DrawCalculator is IDrawCalculator, Ownable { */ function _getNormalizedBalancesAt( address _user, - DrawLib.Draw[] memory _draws, - DrawLib.PrizeDistribution[] memory _prizeDistributions + IDrawBeacon.Draw[] memory _draws, + IPrizeDistributionHistory.PrizeDistribution[] memory _prizeDistributions ) internal view returns (uint256[] memory) { uint32[] memory _timestampsWithStartCutoffTimes = new uint32[](_draws.length); uint32[] memory _timestampsWithEndCutoffTimes = new uint32[](_draws.length); @@ -290,7 +290,7 @@ contract DrawCalculator is IDrawCalculator, Ownable { uint256 _totalUserPicks, bytes32 _userRandomNumber, uint64[] memory _picks, - DrawLib.PrizeDistribution memory _prizeDistribution + IPrizeDistributionHistory.PrizeDistribution memory _prizeDistribution ) internal pure returns (uint256) { // prizeCounts stores the number of wins at a distribution index uint256[] memory prizeCounts = new uint256[](_prizeDistribution.tiers.length); @@ -392,7 +392,7 @@ contract DrawCalculator is IDrawCalculator, Ownable { * @param _prizeDistribution The PrizeDistribution to use to calculate the masks * @return An array of bitmasks */ - function _createBitMasks(DrawLib.PrizeDistribution memory _prizeDistribution) + function _createBitMasks(IPrizeDistributionHistory.PrizeDistribution memory _prizeDistribution) internal pure returns (uint256[] memory) @@ -417,7 +417,7 @@ contract DrawCalculator is IDrawCalculator, Ownable { * @return returns the fraction of the total prize (base 1e18) */ function _calculatePrizeTierFraction( - DrawLib.PrizeDistribution memory _prizeDistribution, + IPrizeDistributionHistory.PrizeDistribution memory _prizeDistribution, uint256 _prizeTierIndex ) internal pure returns (uint256) { // get the prize fraction at that index @@ -439,7 +439,7 @@ contract DrawCalculator is IDrawCalculator, Ownable { * @return returns an array of prize tiers fractions */ function _calculatePrizeTierFractions( - DrawLib.PrizeDistribution memory _prizeDistribution, + IPrizeDistributionHistory.PrizeDistribution memory _prizeDistribution, uint8 maxWinningTierIndex ) internal pure returns (uint256[] memory) { uint256[] memory prizeDistributionFractions = new uint256[]( diff --git a/contracts/DrawHistory.sol b/contracts/DrawHistory.sol index 47beca0f..4c87f8d5 100644 --- a/contracts/DrawHistory.sol +++ b/contracts/DrawHistory.sol @@ -5,7 +5,8 @@ pragma solidity 0.8.6; import "@pooltogether/owner-manager-contracts/contracts/Manageable.sol"; import "./interfaces/IDrawHistory.sol"; -import "./libraries/DrawLib.sol"; +import "./interfaces/IDrawBeacon.sol"; +import "./interfaces/IDrawBeacon.sol"; import "./libraries/DrawRingBufferLib.sol"; /** @@ -26,7 +27,7 @@ contract DrawHistory is IDrawHistory, Manageable { uint16 public constant MAX_CARDINALITY = 256; /// @notice Draws ring buffer array. - DrawLib.Draw[MAX_CARDINALITY] private _draws; + IDrawBeacon.Draw[MAX_CARDINALITY] private _draws; /// @notice Holds ring buffer information DrawRingBufferLib.Buffer internal drawRingBuffer; @@ -45,7 +46,7 @@ contract DrawHistory is IDrawHistory, Manageable { /* ============ External Functions ============ */ /// @inheritdoc IDrawHistory - function getDraw(uint32 drawId) external view override returns (DrawLib.Draw memory) { + function getDraw(uint32 drawId) external view override returns (IDrawBeacon.Draw memory) { return _draws[_drawIdToDrawIndex(drawRingBuffer, drawId)]; } @@ -54,9 +55,9 @@ contract DrawHistory is IDrawHistory, Manageable { external view override - returns (DrawLib.Draw[] memory) + returns (IDrawBeacon.Draw[] memory) { - DrawLib.Draw[] memory draws = new DrawLib.Draw[](drawIds.length); + IDrawBeacon.Draw[] memory draws = new IDrawBeacon.Draw[](drawIds.length); DrawRingBufferLib.Buffer memory buffer = drawRingBuffer; for (uint256 index = 0; index < drawIds.length; index++) { @@ -84,15 +85,15 @@ contract DrawHistory is IDrawHistory, Manageable { } /// @inheritdoc IDrawHistory - function getNewestDraw() external view override returns (DrawLib.Draw memory) { + function getNewestDraw() external view override returns (IDrawBeacon.Draw memory) { return _getNewestDraw(drawRingBuffer); } /// @inheritdoc IDrawHistory - function getOldestDraw() external view override returns (DrawLib.Draw memory) { + function getOldestDraw() external view override returns (IDrawBeacon.Draw memory) { // oldest draw should be next available index, otherwise it's at 0 DrawRingBufferLib.Buffer memory buffer = drawRingBuffer; - DrawLib.Draw memory draw = _draws[buffer.nextIndex]; + IDrawBeacon.Draw memory draw = _draws[buffer.nextIndex]; if (draw.timestamp == 0) { // if draw is not init, then use draw at 0 @@ -103,7 +104,7 @@ contract DrawHistory is IDrawHistory, Manageable { } /// @inheritdoc IDrawHistory - function pushDraw(DrawLib.Draw memory _draw) + function pushDraw(IDrawBeacon.Draw memory _draw) external override onlyManagerOrOwner @@ -113,7 +114,7 @@ contract DrawHistory is IDrawHistory, Manageable { } /// @inheritdoc IDrawHistory - function setDraw(DrawLib.Draw memory _newDraw) external override onlyOwner returns (uint32) { + function setDraw(IDrawBeacon.Draw memory _newDraw) external override onlyOwner returns (uint32) { DrawRingBufferLib.Buffer memory buffer = drawRingBuffer; uint32 index = buffer.getIndex(_newDraw.drawId); _draws[index] = _newDraw; @@ -141,12 +142,12 @@ contract DrawHistory is IDrawHistory, Manageable { * @notice Read newest Draw from the draws ring buffer. * @dev Uses the lastDrawId to calculate the most recently added Draw. * @param _buffer Draw ring buffer - * @return DrawLib.Draw + * @return IDrawBeacon.Draw */ function _getNewestDraw(DrawRingBufferLib.Buffer memory _buffer) internal view - returns (DrawLib.Draw memory) + returns (IDrawBeacon.Draw memory) { return _draws[_buffer.getIndex(_buffer.lastDrawId)]; } @@ -154,10 +155,10 @@ contract DrawHistory is IDrawHistory, Manageable { /** * @notice Push Draw onto draws ring buffer history. * @dev Push new draw onto draws list via authorized manager or owner. - * @param _newDraw DrawLib.Draw + * @param _newDraw IDrawBeacon.Draw * @return Draw.drawId */ - function _pushDraw(DrawLib.Draw memory _newDraw) internal returns (uint32) { + function _pushDraw(IDrawBeacon.Draw memory _newDraw) internal returns (uint32) { DrawRingBufferLib.Buffer memory _buffer = drawRingBuffer; _draws[_buffer.nextIndex] = _newDraw; drawRingBuffer = _buffer.push(_newDraw.drawId); diff --git a/contracts/DrawPrize.sol b/contracts/DrawPrize.sol index bc2326f5..ad8ad942 100644 --- a/contracts/DrawPrize.sol +++ b/contracts/DrawPrize.sol @@ -8,7 +8,7 @@ import "@pooltogether/owner-manager-contracts/contracts/Ownable.sol"; import "./interfaces/IDrawPrize.sol"; import "./interfaces/IDrawCalculator.sol"; -import "./libraries/DrawLib.sol"; +import "./interfaces/IDrawBeacon.sol"; /** * @title PoolTogether V4 DrawPrize diff --git a/contracts/PrizeDistributionHistory.sol b/contracts/PrizeDistributionHistory.sol index 3acd014b..25eaad3a 100644 --- a/contracts/PrizeDistributionHistory.sol +++ b/contracts/PrizeDistributionHistory.sol @@ -4,7 +4,6 @@ pragma solidity 0.8.6; import "@pooltogether/owner-manager-contracts/contracts/Manageable.sol"; -import "./libraries/DrawLib.sol"; import "./libraries/DrawRingBufferLib.sol"; import "./interfaces/IPrizeDistributionHistory.sol"; @@ -31,7 +30,7 @@ contract PrizeDistributionHistory is IPrizeDistributionHistory, Manageable { event Deployed(uint8 cardinality); /// @notice PrizeDistribution ring buffer history. - DrawLib.PrizeDistribution[MAX_CARDINALITY] internal prizeDistributionRingBuffer; + IPrizeDistributionHistory.PrizeDistribution[MAX_CARDINALITY] internal prizeDistributionRingBuffer; /// @notice Ring buffer metadata (nextIndex, lastId, cardinality) DrawRingBufferLib.Buffer internal bufferMetadata; @@ -55,7 +54,7 @@ contract PrizeDistributionHistory is IPrizeDistributionHistory, Manageable { external view override - returns (DrawLib.PrizeDistribution memory) + returns (IPrizeDistributionHistory.PrizeDistribution memory) { return _getPrizeDistribution(bufferMetadata, _drawId); } @@ -65,10 +64,10 @@ contract PrizeDistributionHistory is IPrizeDistributionHistory, Manageable { external view override - returns (DrawLib.PrizeDistribution[] memory) + returns (IPrizeDistributionHistory.PrizeDistribution[] memory) { DrawRingBufferLib.Buffer memory buffer = bufferMetadata; - DrawLib.PrizeDistribution[] memory _prizeDistributions = new DrawLib.PrizeDistribution[]( + IPrizeDistributionHistory.PrizeDistribution[] memory _prizeDistributions = new IPrizeDistributionHistory.PrizeDistribution[]( _drawIds.length ); @@ -102,7 +101,7 @@ contract PrizeDistributionHistory is IPrizeDistributionHistory, Manageable { external view override - returns (DrawLib.PrizeDistribution memory prizeDistribution, uint32 drawId) + returns (IPrizeDistributionHistory.PrizeDistribution memory prizeDistribution, uint32 drawId) { DrawRingBufferLib.Buffer memory buffer = bufferMetadata; @@ -117,7 +116,7 @@ contract PrizeDistributionHistory is IPrizeDistributionHistory, Manageable { external view override - returns (DrawLib.PrizeDistribution memory prizeDistribution, uint32 drawId) + returns (IPrizeDistributionHistory.PrizeDistribution memory prizeDistribution, uint32 drawId) { DrawRingBufferLib.Buffer memory buffer = bufferMetadata; @@ -141,7 +140,7 @@ contract PrizeDistributionHistory is IPrizeDistributionHistory, Manageable { /// @inheritdoc IPrizeDistributionHistory function pushPrizeDistribution( uint32 _drawId, - DrawLib.PrizeDistribution calldata _prizeDistribution + IPrizeDistributionHistory.PrizeDistribution calldata _prizeDistribution ) external override onlyManagerOrOwner returns (bool) { return _pushPrizeDistribution(_drawId, _prizeDistribution); } @@ -149,7 +148,7 @@ contract PrizeDistributionHistory is IPrizeDistributionHistory, Manageable { /// @inheritdoc IPrizeDistributionHistory function setPrizeDistribution( uint32 _drawId, - DrawLib.PrizeDistribution calldata _prizeDistribution + IPrizeDistributionHistory.PrizeDistribution calldata _prizeDistribution ) external override onlyOwner returns (uint32) { DrawRingBufferLib.Buffer memory buffer = bufferMetadata; uint32 index = buffer.getIndex(_drawId); @@ -170,7 +169,7 @@ contract PrizeDistributionHistory is IPrizeDistributionHistory, Manageable { function _getPrizeDistribution(DrawRingBufferLib.Buffer memory _buffer, uint32 _drawId) internal view - returns (DrawLib.PrizeDistribution memory) + returns (IPrizeDistributionHistory.PrizeDistribution memory) { return prizeDistributionRingBuffer[_buffer.getIndex(_drawId)]; } @@ -182,7 +181,7 @@ contract PrizeDistributionHistory is IPrizeDistributionHistory, Manageable { */ function _pushPrizeDistribution( uint32 _drawId, - DrawLib.PrizeDistribution calldata _prizeDistribution + IPrizeDistributionHistory.PrizeDistribution calldata _prizeDistribution ) internal returns (bool) { require(_drawId > 0, "DrawCalc/draw-id-gt-0"); diff --git a/contracts/interfaces/IDrawBeacon.sol b/contracts/interfaces/IDrawBeacon.sol index 99637374..ab55ce15 100644 --- a/contracts/interfaces/IDrawBeacon.sol +++ b/contracts/interfaces/IDrawBeacon.sol @@ -4,9 +4,23 @@ pragma solidity 0.8.6; import "@pooltogether/pooltogether-rng-contracts/contracts/RNGInterface.sol"; import "./IDrawHistory.sol"; -import "../libraries/DrawLib.sol"; interface IDrawBeacon { + + /// @notice Draw struct created every draw + /// @param winningRandomNumber The random number returned from the RNG service + /// @param drawId The monotonically increasing drawId for each draw + /// @param timestamp Unix timestamp of the draw. Recorded when the draw is created by the DrawBeacon. + /// @param beaconPeriodStartedAt Unix timestamp of when the draw started + /// @param beaconPeriodSeconds Unix timestamp of the beacon draw period for this draw. + struct Draw { + uint256 winningRandomNumber; + uint32 drawId; + uint64 timestamp; + uint64 beaconPeriodStartedAt; + uint32 beaconPeriodSeconds; + } + /** * @notice Emit when a new DrawHistory has been set. * @param newDrawHistory The new DrawHistory address diff --git a/contracts/interfaces/IDrawCalculator.sol b/contracts/interfaces/IDrawCalculator.sol index 6ae523fe..61ce16a3 100644 --- a/contracts/interfaces/IDrawCalculator.sol +++ b/contracts/interfaces/IDrawCalculator.sol @@ -6,7 +6,6 @@ import "./ITicket.sol"; import "./IDrawHistory.sol"; import "../PrizeDistributionHistory.sol"; import "../DrawPrize.sol"; -import "../libraries/DrawLib.sol"; /** * @title PoolTogether V4 DrawCalculator diff --git a/contracts/interfaces/IDrawHistory.sol b/contracts/interfaces/IDrawHistory.sol index f79c2f40..b199d9f7 100644 --- a/contracts/interfaces/IDrawHistory.sol +++ b/contracts/interfaces/IDrawHistory.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.6; -import "../libraries/DrawLib.sol"; +import "../interfaces/IDrawBeacon.sol"; interface IDrawHistory { /** @@ -10,23 +10,23 @@ interface IDrawHistory { * @param drawId Draw id * @param draw The Draw struct */ - event DrawSet(uint32 indexed drawId, DrawLib.Draw draw); + event DrawSet(uint32 indexed drawId, IDrawBeacon.Draw draw); /** * @notice Read a Draw from the draws ring buffer. * @dev Read a Draw using the Draw.drawId to calculate position in the draws ring buffer. * @param drawId Draw.drawId - * @return DrawLib.Draw + * @return IDrawBeacon.Draw */ - function getDraw(uint32 drawId) external view returns (DrawLib.Draw memory); + function getDraw(uint32 drawId) external view returns (IDrawBeacon.Draw memory); /** * @notice Read multiple Draws from the draws ring buffer. * @dev Read multiple Draws using each Draw.drawId to calculate position in the draws ring buffer. * @param drawIds Array of Draw.drawIds - * @return DrawLib.Draw[] + * @return IDrawBeacon.Draw[] */ - function getDraws(uint32[] calldata drawIds) external view returns (DrawLib.Draw[] memory); + function getDraws(uint32[] calldata drawIds) external view returns (IDrawBeacon.Draw[] memory); /** * @notice Gets the number of Draws held in the draw ring buffer. @@ -40,30 +40,30 @@ interface IDrawHistory { /** * @notice Read newest Draw from the draws ring buffer. * @dev Uses the nextDrawIndex to calculate the most recently added Draw. - * @return DrawLib.Draw + * @return IDrawBeacon.Draw */ - function getNewestDraw() external view returns (DrawLib.Draw memory); + function getNewestDraw() external view returns (IDrawBeacon.Draw memory); /** * @notice Read oldest Draw from the draws ring buffer. * @dev Finds the oldest Draw by comparing and/or diffing totalDraws with the cardinality. - * @return DrawLib.Draw + * @return IDrawBeacon.Draw */ - function getOldestDraw() external view returns (DrawLib.Draw memory); + function getOldestDraw() external view returns (IDrawBeacon.Draw memory); /** * @notice Push Draw onto draws ring buffer history. * @dev Push new draw onto draws history via authorized manager or owner. - * @param draw DrawLib.Draw + * @param draw IDrawBeacon.Draw * @return Draw.drawId */ - function pushDraw(DrawLib.Draw calldata draw) external returns (uint32); + function pushDraw(IDrawBeacon.Draw calldata draw) external returns (uint32); /** * @notice Set existing Draw in draws ring buffer with new parameters. * @dev Updating a Draw should be used sparingly and only in the event an incorrect Draw parameter has been stored. - * @param newDraw DrawLib.Draw + * @param newDraw IDrawBeacon.Draw * @return Draw.drawId */ - function setDraw(DrawLib.Draw calldata newDraw) external returns (uint32); + function setDraw(IDrawBeacon.Draw calldata newDraw) external returns (uint32); } diff --git a/contracts/interfaces/IDrawPrize.sol b/contracts/interfaces/IDrawPrize.sol index 61856114..e8ade337 100644 --- a/contracts/interfaces/IDrawPrize.sol +++ b/contracts/interfaces/IDrawPrize.sol @@ -3,7 +3,6 @@ pragma solidity 0.8.6; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "./IDrawHistory.sol"; import "./IDrawCalculator.sol"; -import "../libraries/DrawLib.sol"; interface IDrawPrize { /** diff --git a/contracts/interfaces/IPrizeDistributionHistory.sol b/contracts/interfaces/IPrizeDistributionHistory.sol index 213a1f11..3609405a 100644 --- a/contracts/interfaces/IPrizeDistributionHistory.sol +++ b/contracts/interfaces/IPrizeDistributionHistory.sol @@ -2,9 +2,28 @@ pragma solidity 0.8.6; -import "../libraries/DrawLib.sol"; - interface IPrizeDistributionHistory { + + ///@notice PrizeDistribution struct created every draw + ///@param bitRangeSize Decimal representation of bitRangeSize + ///@param matchCardinality The number of numbers to consider in the 256 bit random number. Must be > 1 and < 256/bitRangeSize. + ///@param startTimestampOffset The starting time offset in seconds from which Ticket balances are calculated. + ///@param endTimestampOffset The end time offset in seconds from which Ticket balances are calculated. + ///@param maxPicksPerUser Maximum number of picks a user can make in this draw + ///@param numberOfPicks Number of picks this draw has (may vary across networks according to how much the network has contributed to the Reserve) + ///@param tiers Array of prize tiers percentages, expressed in fraction form with base 1e9. Ordering: index0: grandPrize, index1: runnerUp, etc. + ///@param prize Total prize amount available in this draw calculator for this draw (may vary from across networks) + struct PrizeDistribution { + uint8 bitRangeSize; + uint8 matchCardinality; + uint32 startTimestampOffset; + uint32 endTimestampOffset; + uint32 maxPicksPerUser; + uint136 numberOfPicks; + uint32[16] tiers; + uint256 prize; + } + /** * @notice Emit when a new draw has been created. * @param drawId Draw id @@ -16,11 +35,11 @@ interface IPrizeDistributionHistory { /** * @notice Emitted when the PrizeDistribution are set/updated * @param drawId Draw id - * @param prizeDistribution DrawLib.PrizeDistribution + * @param prizeDistribution IPrizeDistributionHistory.PrizeDistribution */ event PrizeDistributionSet( uint32 indexed drawId, - DrawLib.PrizeDistribution prizeDistribution + IPrizeDistributionHistory.PrizeDistribution prizeDistribution ); /** @@ -32,7 +51,7 @@ interface IPrizeDistributionHistory { function getNewestPrizeDistribution() external view - returns (DrawLib.PrizeDistribution memory prizeDistribution, uint32 drawId); + returns (IPrizeDistributionHistory.PrizeDistribution memory prizeDistribution, uint32 drawId); /** * @notice Read the oldest PrizeDistribution from the prize distributions ring buffer. @@ -43,7 +62,7 @@ interface IPrizeDistributionHistory { function getOldestPrizeDistribution() external view - returns (DrawLib.PrizeDistribution memory prizeDistribution, uint32 drawId); + returns (IPrizeDistributionHistory.PrizeDistribution memory prizeDistribution, uint32 drawId); /** * @notice Gets array of PrizeDistributions for drawIds @@ -52,7 +71,7 @@ interface IPrizeDistributionHistory { function getPrizeDistributions(uint32[] calldata drawIds) external view - returns (DrawLib.PrizeDistribution[] memory); + returns (IPrizeDistributionHistory.PrizeDistribution[] memory); /** * @notice Gets the PrizeDistributionHistory for a drawId @@ -61,7 +80,7 @@ interface IPrizeDistributionHistory { function getPrizeDistribution(uint32 drawId) external view - returns (DrawLib.PrizeDistribution memory); + returns (IPrizeDistributionHistory.PrizeDistribution memory); /** * @notice Gets the number of PrizeDistributions stored in the prize distributions ring buffer. @@ -80,7 +99,7 @@ interface IPrizeDistributionHistory { */ function pushPrizeDistribution( uint32 drawId, - DrawLib.PrizeDistribution calldata prizeDistribution + IPrizeDistributionHistory.PrizeDistribution calldata prizeDistribution ) external returns (bool); /** @@ -88,7 +107,7 @@ interface IPrizeDistributionHistory { * @dev Updating a Draw should be used sparingly and only in the event an incorrect Draw parameter has been stored. * @return Draw.drawId */ - function setPrizeDistribution(uint32 drawId, DrawLib.PrizeDistribution calldata draw) + function setPrizeDistribution(uint32 drawId, IPrizeDistributionHistory.PrizeDistribution calldata draw) external returns (uint32); // maybe return drawIndex } diff --git a/contracts/libraries/DrawLib.sol b/contracts/libraries/DrawLib.sol deleted file mode 100644 index 5373be0e..00000000 --- a/contracts/libraries/DrawLib.sol +++ /dev/null @@ -1,42 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 - -pragma solidity 0.8.6; - -library DrawLib { - /// @notice Draw struct created every draw - /// @param winningRandomNumber The random number returned from the RNG service - /// @param drawId The monotonically increasing drawId for each draw - /// @param timestamp Unix timestamp of the draw. Recorded when the draw is created by the DrawBeacon. - /// @param beaconPeriodStartedAt Unix timestamp of when the draw started - /// @param beaconPeriodSeconds Unix timestamp of the beacon draw period for this draw. - struct Draw { - uint256 winningRandomNumber; - uint32 drawId; - uint64 timestamp; - uint64 beaconPeriodStartedAt; - uint32 beaconPeriodSeconds; - } - - /// @notice Fixed length of prize tiers within a PrizeDistribution.tiers - uint8 public constant TIERS_LENGTH = 16; - - ///@notice PrizeDistribution struct created every draw - ///@param bitRangeSize Decimal representation of bitRangeSize - ///@param matchCardinality The number of numbers to consider in the 256 bit random number. Must be > 1 and < 256/bitRangeSize. - ///@param startTimestampOffset The starting time offset in seconds from which Ticket balances are calculated. - ///@param endTimestampOffset The end time offset in seconds from which Ticket balances are calculated. - ///@param maxPicksPerUser Maximum number of picks a user can make in this draw - ///@param numberOfPicks Number of picks this draw has (may vary across networks according to how much the network has contributed to the Reserve) - ///@param tiers Array of prize tiers percentages, expressed in fraction form with base 1e9. Ordering: index0: grandPrize, index1: runnerUp, etc. - ///@param prize Total prize amount available in this draw calculator for this draw (may vary from across networks) - struct PrizeDistribution { - uint8 bitRangeSize; - uint8 matchCardinality; - uint32 startTimestampOffset; - uint32 endTimestampOffset; - uint32 maxPicksPerUser; - uint136 numberOfPicks; - uint32[TIERS_LENGTH] tiers; - uint256 prize; - } -} diff --git a/contracts/test/DrawCalculatorHarness.sol b/contracts/test/DrawCalculatorHarness.sol index ba6b6951..92a18f42 100644 --- a/contracts/test/DrawCalculatorHarness.sol +++ b/contracts/test/DrawCalculatorHarness.sol @@ -3,7 +3,6 @@ pragma solidity 0.8.6; import "../DrawCalculator.sol"; -import "../libraries/DrawLib.sol"; contract DrawCalculatorHarness is DrawCalculator { constructor( @@ -21,7 +20,7 @@ contract DrawCalculatorHarness is DrawCalculator { return _calculateTierIndex(_randomNumberThisPick, _winningRandomNumber, _masks); } - function createBitMasks(DrawLib.PrizeDistribution calldata _prizeDistribution) + function createBitMasks(IPrizeDistributionHistory.PrizeDistribution calldata _prizeDistribution) public pure returns (uint256[] memory) @@ -34,7 +33,7 @@ contract DrawCalculatorHarness is DrawCalculator { ///@param _prizeTierIndex Index of the prize tiers array to calculate ///@return returns the fraction of the total prize function calculatePrizeTierFraction( - DrawLib.PrizeDistribution calldata _prizeDistribution, + IPrizeDistributionHistory.PrizeDistribution calldata _prizeDistribution, uint256 _prizeTierIndex ) external pure returns (uint256) { return _calculatePrizeTierFraction(_prizeDistribution, _prizeTierIndex); @@ -49,7 +48,7 @@ contract DrawCalculatorHarness is DrawCalculator { } function calculateNumberOfUserPicks( - DrawLib.PrizeDistribution memory _prizeDistribution, + IPrizeDistributionHistory.PrizeDistribution memory _prizeDistribution, uint256 _normalizedUserBalance ) external pure returns (uint64) { return _calculateNumberOfUserPicks(_prizeDistribution, _normalizedUserBalance); diff --git a/contracts/test/DrawHistoryHarness.sol b/contracts/test/DrawHistoryHarness.sol index 86263693..56567cf9 100644 --- a/contracts/test/DrawHistoryHarness.sol +++ b/contracts/test/DrawHistoryHarness.sol @@ -3,7 +3,7 @@ pragma solidity 0.8.6; import "../DrawHistory.sol"; -import "../libraries/DrawLib.sol"; +import "../interfaces/IDrawBeacon.sol"; contract DrawHistoryHarness is DrawHistory { constructor(address owner, uint8 card) DrawHistory(owner, card) {} @@ -15,7 +15,7 @@ contract DrawHistoryHarness is DrawHistory { uint256 _winningRandomNumber ) external { for (uint256 index = _start; index <= _numberOfDraws; index++) { - DrawLib.Draw memory _draw = DrawLib.Draw({ + IDrawBeacon.Draw memory _draw = IDrawBeacon.Draw({ winningRandomNumber: _winningRandomNumber, drawId: uint32(index), timestamp: _timestamp,