Reproduced Exploit
DaosLive — the snipe swap is sent with deadline 0
finalize builds ExactInputSingleParams without a deadline. The field defaults to 0. The router enforces block.timestamp <= deadline. 0 is before this block's timestamp, so the snipe reverts and DaosLive receives 0 of the 1000 ether of tokens it tried to buy.
Chain
Other
Category
logic
Date
Jun 2025
Source
AuditVault
EVM Playground
Source-level debugger — step opcodes and Solidity in sync
The attack is replayed in an in-browser EVM preloaded with the exact dumped fork state. The execution tree shows every call; step by Solidity line or by opcode across all depths — source, Stack, Memory, Storage, Balances (native / ERC-20 / NFT), Transient storage and Return value stay in sync. Click a tree node, opcode, or source line to jump. No backend, no live RPC.
Source & credit. Reproduction of a public audit finding curated by AuditVault — the original finding: 57867-c-02-the-deadline-parameter-in-uniswapv3-swap-causes-sniping. Standalone Foundry PoC and full write-up: 57867-c-02-the-deadline-parameter-in-uniswapv3-swap-causes-sniping_exp in the
evm-hack-registrymirror.
Vulnerability classes: vuln/logic/missing-check · vuln/input-validation/missing · vuln/dos/griefing
Reproduction: a self-contained Foundry PoC that compiles and runs offline with only
forge-std— no fork and no RPC. Trace: output.txt. PoC: test/57867-c-02-the-deadline-parameter-in-uniswapv3-swap-causes-sniping_exp.sol.
Key info#
| Impact | HIGH — the snipe of 1000 ether of tokens reverts, and 0 tokens move |
| Protocol | DaosLive finalize / Uniswap V3 exactInputSingle |
| Vulnerable code | ExactInputSingleParams is built without deadline, so the field is 0 |
| Bug class | A missing deadline is already expired |
| Finding | Shieldify — DaosLive · C-02 · id 57867 |
| Report | DaosLive-Security-Review.md |
| Source | AuditVault finding |
| Status | Reproduced against checkDeadline from Uniswap v3-periphery |
| Compiler | solc 0.8.27, cancun, via IR |
TL;DR#
finalize builds ExactInputSingleParams without a deadline. The field defaults to 0. The router enforces block.timestamp <= deadline. 0 is before this block's timestamp, so the snipe reverts and DaosLive receives 0 of the 1000 ether of tokens it tried to buy.
A stored deadline of 0 is the same past instant: finalizeAtStored reverts with Transaction too old. Passing deadline: block.timestamp lets the swap mint the 1000 ether of tokens.
The vulnerable code#
// @> VULN: deadline is omitted on the audited struct, so it is 0 and already expired.
uint256 deadline = passNow ? block.timestamp : 0;
The router check, from PeripheryValidation.checkDeadline:
require(block.timestamp <= params.deadline, "Transaction too old");
The audited call site is DaosLive.sol line 314 at commit 9a1856db. The struct literal in the report has no deadline field.
Root cause#
Uniswap treats a deadline of 0 as already expired. Omitting the field does not mean "no deadline". It means "deadline in the past", and finalize cannot snipe.
Preconditions#
block.timestampis greater than 0. It is, on this block, with no warp insiderun.- The snipe amount is 1000 ether. The router would mint that many tokens if the deadline check passed.
Attack walkthrough#
- Store deadline 0 and require
block.timestamp > storedDeadline. - Call
finalize. It passes deadline 0 intoexactInputSingle. - The router require fails. The low-level call returns false.
- DaosLive's token balance is 0.
Control: passNow is true, so finalize passes block.timestamp and the router mints 1000 ether of tokens to DaosLive. A second call that passes the stored deadline of 0 reverts with Transaction too old.
Diagrams#
Impact#
Every snipe from finalize reverts. 0 of the 1000 ether of tokens move. The launch path that depends on this swap does not complete. Setting the deadline to block.timestamp moves the 1000 tokens, and a stored deadline that is already past is still rejected.
Remediation#
Set deadline on ExactInputSingleParams to a timestamp at or after block.timestamp. Do not leave the field at its zero default.
Sources#
- AuditVault finding 57867
- Shieldify DaosLive review
- ED3N-Ventures/daoslive-sc@9a1856db DaosLive.sol
- Uniswap v3-periphery PeripheryValidation
Taxonomy#
severity/highvuln/logic/missing-check·vuln/input-validation/missing·vuln/dos/griefing
Sources & further analysis#
Reproductions & code
- Standalone PoC + full trace: 57867-c-02-the-deadline-parameter-in-uniswapv3-swap-causes-sniping_exp (evm-hack-registry mirror).
- AuditVault finding: 57867-c-02-the-deadline-parameter-in-uniswapv3-swap-causes-sniping.
Alerts & third-party analyses
These dashboards index community alerts tweets, post-mortems, and independent write-ups. Reach them through the protocol name above to cross-check this reproduction against other analyses.