From 692078fe99fc7eac06c0d2734f6cdb233a0de06d Mon Sep 17 00:00:00 2001 From: Aodhgan Date: Wed, 6 Oct 2021 11:19:57 -0700 Subject: [PATCH] eliminated DrawLib --- contracts/DrawBeacon.sol | 1 - contracts/DrawCalculator.sol | 23 +++++----- contracts/DrawHistory.sol | 1 - contracts/DrawPrize.sol | 2 +- contracts/PrizeDistributionHistory.sol | 21 +++++----- contracts/interfaces/IDrawBeacon.sol | 2 +- contracts/interfaces/IDrawCalculator.sol | 2 +- contracts/interfaces/IDrawHistory.sol | 1 - contracts/interfaces/IDrawPrize.sol | 2 +- .../interfaces/IPrizeDistributionHistory.sol | 38 +++++++++++++---- contracts/libraries/DrawLib.sol | 42 ------------------- contracts/test/DrawCalculatorHarness.sol | 7 ++-- contracts/test/DrawHistoryHarness.sol | 1 - 13 files changed, 57 insertions(+), 86 deletions(-) delete mode 100644 contracts/libraries/DrawLib.sol diff --git a/contracts/DrawBeacon.sol b/contracts/DrawBeacon.sol index ccb5d781..7310f43b 100644 --- a/contracts/DrawBeacon.sol +++ b/contracts/DrawBeacon.sol @@ -11,7 +11,6 @@ import "@pooltogether/owner-manager-contracts/contracts/Ownable.sol"; import "./interfaces/IDrawBeacon.sol"; import "./interfaces/IDrawHistory.sol"; -import "./libraries/DrawLib.sol"; /** * @title PoolTogether V4 DrawBeacon diff --git a/contracts/DrawCalculator.sol b/contracts/DrawCalculator.sol index 738f165c..86763a78 100644 --- a/contracts/DrawCalculator.sol +++ b/contracts/DrawCalculator.sol @@ -11,7 +11,6 @@ import "./interfaces/ITicket.sol"; import "./interfaces/IDrawHistory.sol"; import "./interfaces/IDrawBeacon.sol"; import "./interfaces/IPrizeDistributionHistory.sol"; -import "./libraries/DrawLib.sol"; import "./libraries/DrawRingBufferLib.sol"; /** @@ -75,8 +74,8 @@ contract DrawCalculator is IDrawCalculator, Ownable { // 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. @@ -118,7 +117,7 @@ contract DrawCalculator is IDrawCalculator, Ownable { returns (uint256[] memory) { IDrawBeacon.Draw[] memory _draws = drawHistory.getDraws(_drawIds); - DrawLib.PrizeDistribution[] memory _prizeDistributions = prizeDistributionHistory + IPrizeDistributionHistory.PrizeDistribution[] memory _prizeDistributions = prizeDistributionHistory .getPrizeDistributions(_drawIds); return _getNormalizedBalancesAt(_user, _draws, _prizeDistributions); @@ -134,7 +133,7 @@ contract DrawCalculator is IDrawCalculator, Ownable { drawIds[0] = _drawId; IDrawBeacon.Draw[] memory _draws = drawHistory.getDraws(drawIds); - DrawLib.PrizeDistribution[] memory _prizeDistributions = prizeDistributionHistory + IPrizeDistributionHistory.PrizeDistribution[] memory _prizeDistributions = prizeDistributionHistory .getPrizeDistributions(drawIds); uint256[] memory userBalances = _getNormalizedBalancesAt( @@ -192,7 +191,7 @@ contract DrawCalculator is IDrawCalculator, Ownable { bytes32 _userRandomNumber, 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); @@ -223,7 +222,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 (uint256) { return (_normalizedUserBalance * _prizeDistribution.numberOfPicks) / 1 ether; @@ -239,7 +238,7 @@ contract DrawCalculator is IDrawCalculator, Ownable { function _getNormalizedBalancesAt( address _user, IDrawBeacon.Draw[] memory _draws, - DrawLib.PrizeDistribution[] memory _prizeDistributions + IPrizeDistributionHistory.PrizeDistribution[] memory _prizeDistributions ) internal view returns (uint256[] memory) { uint32[] memory _timestampsWithStartCutoffTimes = new uint32[](_draws.length); uint32[] memory _timestampsWithEndCutoffTimes = new uint32[](_draws.length); @@ -292,7 +291,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[](DISTRIBUTIONS_LENGTH); @@ -395,7 +394,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) @@ -420,7 +419,7 @@ contract DrawCalculator is IDrawCalculator, Ownable { * @return returns the fraction of the total prize (fixed point 1e9) */ function _calculatePrizeDistributionFraction( - DrawLib.PrizeDistribution memory _prizeDistribution, + IPrizeDistributionHistory.PrizeDistribution memory _prizeDistribution, uint256 _distributionIndex ) internal pure returns (uint256) { @@ -443,7 +442,7 @@ contract DrawCalculator is IDrawCalculator, Ownable { * @return returns an array of prize distributions fractions */ function _calculatePrizeDistributionFractions( - DrawLib.PrizeDistribution memory _prizeDistribution, + IPrizeDistributionHistory.PrizeDistribution memory _prizeDistribution, uint8 _maxWinningDistributionIndex ) internal pure returns (uint256[] memory) { uint256[] memory prizeDistributionFractions = new uint256[]( diff --git a/contracts/DrawHistory.sol b/contracts/DrawHistory.sol index 358f1f28..57e8ccd9 100644 --- a/contracts/DrawHistory.sol +++ b/contracts/DrawHistory.sol @@ -5,7 +5,6 @@ pragma solidity 0.8.6; import "@pooltogether/owner-manager-contracts/contracts/Manageable.sol"; import "./interfaces/IDrawHistory.sol"; -import "./libraries/DrawLib.sol"; import "./libraries/DrawRingBufferLib.sol"; /** diff --git a/contracts/DrawPrize.sol b/contracts/DrawPrize.sol index bc2326f5..6f0cb625 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"; + /** * @title PoolTogether V4 DrawPrize diff --git a/contracts/PrizeDistributionHistory.sol b/contracts/PrizeDistributionHistory.sol index abd9472c..e6a1eeec 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"; @@ -25,7 +24,7 @@ contract PrizeDistributionHistory is IPrizeDistributionHistory, Manageable { event Deployed(uint8 cardinality); /// @notice PrizeDistribution ring buffer history. - DrawLib.PrizeDistribution[MAX_CARDINALITY] internal _prizeDistributionsRingBuffer; + IPrizeDistributionHistory.PrizeDistribution[MAX_CARDINALITY] internal _prizeDistributionsRingBuffer; /// @notice Ring buffer data (nextIndex, lastDrawId, cardinality) DrawRingBufferLib.Buffer internal _prizeDistributionsRingBufferData; @@ -49,7 +48,7 @@ contract PrizeDistributionHistory is IPrizeDistributionHistory, Manageable { external view override - returns (DrawLib.PrizeDistribution memory) + returns (IPrizeDistributionHistory.PrizeDistribution memory) { return _getPrizeDistribution(_prizeDistributionsRingBufferData, _drawId); } @@ -59,10 +58,10 @@ contract PrizeDistributionHistory is IPrizeDistributionHistory, Manageable { external view override - returns (DrawLib.PrizeDistribution[] memory) + returns (IPrizeDistributionHistory.PrizeDistribution[] memory) { DrawRingBufferLib.Buffer memory buffer = _prizeDistributionsRingBufferData; - DrawLib.PrizeDistribution[] memory _prizeDistributions = new DrawLib.PrizeDistribution[]( + IPrizeDistributionHistory.PrizeDistribution[] memory _prizeDistributions = new IPrizeDistributionHistory.PrizeDistribution[]( _drawIds.length ); @@ -96,7 +95,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 = _prizeDistributionsRingBufferData; @@ -111,7 +110,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 = _prizeDistributionsRingBufferData; @@ -135,7 +134,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); } @@ -143,7 +142,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 = _prizeDistributionsRingBufferData; uint32 index = buffer.getIndex(_drawId); @@ -164,7 +163,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 _prizeDistributionsRingBuffer[_buffer.getIndex(_drawId)]; } @@ -176,7 +175,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 0d261605..62a1c18d 100644 --- a/contracts/interfaces/IDrawBeacon.sol +++ b/contracts/interfaces/IDrawBeacon.sol @@ -4,7 +4,7 @@ pragma solidity 0.8.6; import "@pooltogether/pooltogether-rng-contracts/contracts/RNGInterface.sol"; import "./IDrawHistory.sol"; -// import "../libraries/DrawLib.sol"; + interface IDrawBeacon { diff --git a/contracts/interfaces/IDrawCalculator.sol b/contracts/interfaces/IDrawCalculator.sol index 90b9338c..df4ee572 100644 --- a/contracts/interfaces/IDrawCalculator.sol +++ b/contracts/interfaces/IDrawCalculator.sol @@ -6,7 +6,7 @@ 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 8ac24c58..ddb1e394 100644 --- a/contracts/interfaces/IDrawHistory.sol +++ b/contracts/interfaces/IDrawHistory.sol @@ -2,7 +2,6 @@ pragma solidity 0.8.6; -import "../libraries/DrawLib.sol"; import "./IDrawBeacon.sol"; interface IDrawHistory { diff --git a/contracts/interfaces/IDrawPrize.sol b/contracts/interfaces/IDrawPrize.sol index 5c5a4a06..d508956b 100644 --- a/contracts/interfaces/IDrawPrize.sol +++ b/contracts/interfaces/IDrawPrize.sol @@ -4,7 +4,7 @@ import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "./IDrawHistory.sol"; import "./IDrawCalculator.sol"; import "./IDrawBeacon.sol"; -import "../libraries/DrawLib.sol"; + interface IDrawPrize { /** diff --git a/contracts/interfaces/IPrizeDistributionHistory.sol b/contracts/interfaces/IPrizeDistributionHistory.sol index 3394c5b7..7d0a35ac 100644 --- a/contracts/interfaces/IPrizeDistributionHistory.sol +++ b/contracts/interfaces/IPrizeDistributionHistory.sol @@ -2,10 +2,30 @@ pragma solidity 0.8.6; -import "../libraries/DrawLib.sol"; import "./IDrawBeacon.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 distributions Array of prize distributions 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] distributions; + uint256 prize; + } + /** * @notice Emit when a new draw has been created. * @param drawId Draw id @@ -17,11 +37,11 @@ interface IPrizeDistributionHistory { /** * @notice Emitted when the PrizeDistribution are set/updated * @param drawId Draw id - * @param prizeDistributions DrawLib.PrizeDistribution + * @param prizeDistributions IPrizeDistributionHistory.PrizeDistribution */ event PrizeDistributionsSet( uint32 indexed drawId, - DrawLib.PrizeDistribution prizeDistributions + IPrizeDistributionHistory.PrizeDistribution prizeDistributions ); /** @@ -33,7 +53,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. @@ -44,7 +64,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 @@ -53,7 +73,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 @@ -62,7 +82,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. @@ -81,7 +101,7 @@ interface IPrizeDistributionHistory { */ function pushPrizeDistribution( uint32 drawId, - DrawLib.PrizeDistribution calldata prizeDistribution + IPrizeDistributionHistory.PrizeDistribution calldata prizeDistribution ) external returns (bool); /** @@ -89,7 +109,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 e90b66ef..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 distributions within a PrizeDistribution.distributions - uint8 public constant DISTRIBUTIONS_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 distributions Array of prize distributions 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[DISTRIBUTIONS_LENGTH] distributions; - uint256 prize; - } -} diff --git a/contracts/test/DrawCalculatorHarness.sol b/contracts/test/DrawCalculatorHarness.sol index 0d95cd18..8a2f9959 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 _calculateDistributionIndex(_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 _prizeDistributionIndex Index of the prize distributions array to calculate ///@return returns the fraction of the total prize function calculatePrizeDistributionFraction( - DrawLib.PrizeDistribution calldata _prizeDistribution, + IPrizeDistributionHistory.PrizeDistribution calldata _prizeDistribution, uint256 _prizeDistributionIndex ) external pure returns (uint256) { return _calculatePrizeDistributionFraction(_prizeDistribution, _prizeDistributionIndex); @@ -49,7 +48,7 @@ contract DrawCalculatorHarness is DrawCalculator { } function calculateNumberOfUserPicks( - DrawLib.PrizeDistribution memory _prizeDistribution, + IPrizeDistributionHistory.PrizeDistribution memory _prizeDistribution, uint256 _normalizedUserBalance ) external pure returns (uint256) { return _calculateNumberOfUserPicks(_prizeDistribution, _normalizedUserBalance); diff --git a/contracts/test/DrawHistoryHarness.sol b/contracts/test/DrawHistoryHarness.sol index 1ffcea9b..56567cf9 100644 --- a/contracts/test/DrawHistoryHarness.sol +++ b/contracts/test/DrawHistoryHarness.sol @@ -3,7 +3,6 @@ pragma solidity 0.8.6; import "../DrawHistory.sol"; -import "../libraries/DrawLib.sol"; import "../interfaces/IDrawBeacon.sol"; contract DrawHistoryHarness is DrawHistory {