Skip to content

Commit c15f3b2

Browse files
authored
chore: add concrete test for DOS vector (#307)
* chore: add concrete test for DOS vector * chore: set evm version to cancun * add logs * chore: fix * chore: fix gas limit * chore: rm concrete test * chore: remove cancun pin
1 parent d85280e commit c15f3b2

File tree

3 files changed

+10
-6
lines changed

3 files changed

+10
-6
lines changed

.github/workflows/test.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ jobs:
3434
id: build
3535

3636
- name: Run Forge tests
37-
run: forge test --isolate -vvv
37+
run: FOUNDRY_GAS_LIMIT=9223372036854775807 forge test --isolate -vvv
3838
id: test
3939
env:
4040
FORGE_SNAPSHOT_CHECK: true

script/deploy/DeployAuctionStateLens.s.sol

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.0;
33

4-
import {IContinuousClearingAuction} from '../../../src/interfaces/IContinuousClearingAuction.sol';
5-
import {AuctionStateLens} from '../../../src/lens/AuctionStateLens.sol';
4+
import {IContinuousClearingAuction} from '../../src/interfaces/IContinuousClearingAuction.sol';
5+
import {AuctionStateLens} from '../../src/lens/AuctionStateLens.sol';
66
import 'forge-std/Script.sol';
77
import 'forge-std/console2.sol';
88

test/Auction.dos.t.sol

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ contract AuctionDosTest is AuctionBaseTest {
2121

2222
// This test is quite slow so only fuzz 100 times. We hardcode most of the params for simplicity anyways
2323
/// forge-config: default.isolate = true
24-
/// forge-config: default.gas_limit = 18446744073709551615
24+
/// forge-config: default.gas_limit = 9223372036854775807
2525
/// forge-config: ci.isolate = true
26-
/// forge-config: ci.gas_limit = 18446744073709551615
26+
/// forge-config: ci.gas_limit = 9223372036854775807
2727
/// forge-config: default.fuzz.runs = 100
2828
/// forge-config: ci.fuzz.runs = 100
2929
function test_forceIterateOverTicks_preventsDoS(FuzzDeploymentParams memory _deploymentParams)
@@ -46,6 +46,7 @@ contract AuctionDosTest is AuctionBaseTest {
4646
_deploymentParams.auctionParams.endBlock = uint64(_deploymentParams.auctionParams.startBlock + 1e7);
4747
_deploymentParams.auctionParams.claimBlock = uint64(_deploymentParams.auctionParams.endBlock + 1);
4848
_deploymentParams.auctionParams.auctionStepsData = AuctionStepsBuilder.init().addStep(1, 1e7);
49+
_deploymentParams.auctionParams.validationHook = address(0);
4950

5051
auction = new ContinuousClearingAuction(
5152
address(token), _deploymentParams.totalSupply, _deploymentParams.auctionParams
@@ -75,7 +76,7 @@ contract AuctionDosTest is AuctionBaseTest {
7576
uint128 bidAmount = uint128(FixedPointMathLib.fullMulDivUp(auction.totalSupply(), maxPrice, FixedPoint96.Q96));
7677

7778
// Move the auction up to the highest tick
78-
auction.submitBid{value: bidAmount, gas: FUSAKA_TX_GAS_LIMIT}(maxPrice, bidAmount, alice, prevPrice, bytes(''));
79+
auction.submitBid{value: bidAmount}(maxPrice, bidAmount, alice, prevPrice, bytes(''));
7980

8081
vm.roll(block.number + 1);
8182
// This should revert due to OOG
@@ -88,6 +89,9 @@ contract AuctionDosTest is AuctionBaseTest {
8889
emit ITickStorage.NextActiveTickUpdated(untilTickPrice);
8990
auction.forceIterateOverTicks{gas: FUSAKA_TX_GAS_LIMIT}(untilTickPrice);
9091

92+
emit log_named_uint('gasleft', gasleft());
93+
require(gasleft() > FUSAKA_TX_GAS_LIMIT, 'Gas left is not greater than FUSAKA_TX_GAS_LIMIT');
94+
9195
// Now you should be able to checkpoint
9296
auction.checkpoint{gas: FUSAKA_TX_GAS_LIMIT}();
9397
}

0 commit comments

Comments
 (0)