Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: add documentation and update PrizePool dependency #7

Merged
merged 2 commits into from
Jun 30, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 18 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,26 @@
# Foundry template
<p align="center">
<a href="https://github.com/pooltogether/pooltogether--brand-assets">
<img src="https://github.com/pooltogether/pooltogether--brand-assets/blob/977e03604c49c63314450b5d432fe57d34747c66/logo/pooltogether-logo--purple-gradient.png?raw=true" alt="PoolTogether Brand" style="max-width:100%;" width="400">
</a>
</p>

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.
<strong>Have questions or want the latest news?</strong>
<br/>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

Expand Down
2 changes: 1 addition & 1 deletion lib/optimism
Submodule optimism updated 82 files
+5 −0 .changeset/cuddly-panthers-trade.md
+18 −3 .circleci/config.yml
+0 −1 codecov.yml
+39 −59 indexer/database/blocks.go
+23 −21 indexer/migrations/20230523_create_schema.sql
+1 −1 indexer/node/client.go
+0 −63 indexer/node/fetcher.go
+66 −0 indexer/node/header_traversal.go
+29 −29 indexer/node/header_traversal_test.go
+112 −31 indexer/processor/l1_processor.go
+10 −10 indexer/processor/l2_processor.go
+34 −28 indexer/processor/processor.go
+6 −2 op-bindings/ast/canonicalize.go
+2 −2 op-bindings/bindings/faultdisputegame.go
+2 −2 op-bindings/bindings/faultdisputegame_more.go
+1 −1 op-bindings/bindings/l2outputoracle_more.go
+1 −1 op-bindings/bindings/optimismportal_more.go
+1 −1 op-bindings/bindings/preimageoracle_more.go
+1 −1 op-bindings/bindings/systemconfig_more.go
+0 −177 op-challenger/challenger/challenger.go
+0 −33 op-challenger/challenger/factory.go
+0 −46 op-challenger/challenger/factory_test.go
+0 −154 op-challenger/challenger/log_store.go
+0 −166 op-challenger/challenger/log_store_test.go
+0 −36 op-challenger/challenger/oracle.go
+0 −52 op-challenger/challenger/oracle_test.go
+0 −77 op-challenger/challenger/output.go
+0 −236 op-challenger/challenger/output_test.go
+0 −89 op-challenger/challenger/subscription.go
+0 −83 op-challenger/challenger/subscription_test.go
+0 −81 op-challenger/cmd/entrypoint.go
+24 −40 op-challenger/cmd/main.go
+0 −46 op-challenger/cmd/watch/cmd.go
+0 −62 op-challenger/cmd/watch/factory.go
+0 −62 op-challenger/cmd/watch/oracle.go
+47 −111 op-challenger/config/config.go
+20 −46 op-challenger/config/config_test.go
+0 −21 op-challenger/config/logging.go
+18 −10 op-challenger/fault/alphabet_provider.go
+17 −8 op-challenger/fault/alphabet_provider_test.go
+53 −1 op-challenger/fault/game.go
+115 −56 op-challenger/fault/game_test.go
+8 −0 op-challenger/fault/loader_test.go
+5 −1 op-challenger/fault/orchestrator.go
+28 −6 op-challenger/fault/responder.go
+49 −10 op-challenger/fault/solver.go
+20 −0 op-challenger/fault/solver_test.go
+11 −0 op-challenger/fault/types.go
+10 −15 op-challenger/flags/flags.go
+0 −124 op-challenger/metrics/metrics.go
+0 −21 op-challenger/metrics/noop.go
+0 −73 op-challenger/types/game_type.go
+0 −83 op-challenger/types/game_type_test.go
+21 −0 op-e2e/e2eutils/waits.go
+2 −2 op-e2e/system_tob_test.go
+4 −3 op-e2e/withdrawal_helper.go
+45 −73 op-node/withdrawals/utils.go
+17 −15 packages/contracts-bedrock/.gas-snapshot
+0 −11 packages/contracts-bedrock/README.md
+21 −8 packages/contracts-bedrock/contracts/dispute/FaultDisputeGame.sol
+0 −36 packages/contracts-bedrock/contracts/echidna/FuzzAddressAliasing.sol
+0 −83 packages/contracts-bedrock/contracts/echidna/FuzzBurn.sol
+0 −72 packages/contracts-bedrock/contracts/echidna/FuzzEncoding.sol
+0 −150 packages/contracts-bedrock/contracts/echidna/FuzzHashing.sol
+0 −60 packages/contracts-bedrock/contracts/echidna/FuzzOptimismPortal.sol
+0 −225 packages/contracts-bedrock/contracts/echidna/FuzzResourceMetering.sol
+3 −0 packages/contracts-bedrock/contracts/libraries/DisputeErrors.sol
+77 −2 packages/contracts-bedrock/contracts/test/FaultDisputeGame.t.sol
+0 −9 packages/contracts-bedrock/echidna.yaml
+0 −4 packages/contracts-bedrock/foundry.toml
+0 −6 packages/contracts-bedrock/invariant-docs/AddressAliasing.md
+0 −12 packages/contracts-bedrock/invariant-docs/Burn.md
+0 −12 packages/contracts-bedrock/invariant-docs/Encoding.md
+0 −18 packages/contracts-bedrock/invariant-docs/Hashing.md
+0 −6 packages/contracts-bedrock/invariant-docs/OptimismPortal.md
+0 −19 packages/contracts-bedrock/invariant-docs/README.md
+0 −42 packages/contracts-bedrock/invariant-docs/ResourceMetering.md
+1 −9 packages/contracts-bedrock/package.json
+3 −21 packages/contracts-bedrock/scripts/invariant-doc-gen.ts
+1 −1 packages/contracts-bedrock/slither.config.json
+157 −63 packages/sdk/src/cross-chain-messenger.ts
+7 −5 packages/sdk/test/cross-chain-messenger.spec.ts
2 changes: 1 addition & 1 deletion src/DrawAuction.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand Down
2 changes: 1 addition & 1 deletion src/DrawAuctionExecutor.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand Down
2 changes: 1 addition & 1 deletion src/auctions/TwoStepsAuction.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
8 changes: 4 additions & 4 deletions src/libraries/RewardLib.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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);
}
Expand Down
1 change: 0 additions & 1 deletion test/DrawAuction.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 0 additions & 1 deletion test/fork/DrawAuctionExecutorEthereumToOptimismFork.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 3 additions & 3 deletions test/helpers/Helpers.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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)
);
}
Expand All @@ -89,7 +89,7 @@ contract Helpers is Test {
uint256 _amount = _reserveAmount / 2;

_mockReserve(_prizePool, _amount);
_mockReserveForNextDraw(_prizePool, _amount);
_mockReserveForOpenDraw(_prizePool, _amount);
}

/* ============ Computations ============ */
Expand Down
27 changes: 13 additions & 14 deletions test/libraries/RewardLib.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand Down
Loading