Sample report · Teardown

Flop Labs "Close Call" close-1: the fee rule decided the winners

Target: close-1 trading contest (xyz:NVDA) Data: public referee archive Author: Joe (Makabeez)
Flop Labs was not a client. This is my own public analysis of close-1, written up in the same format a paying client receives. Everything comes from the contest's public archive, and every number reruns from the linked script. In a paid engagement you'd get this before launch, privately, with a re-check after your fix.

Summary

close-1 was a trading contest on an NVDA perpetual: keys traded with each other in 5-minute sweeps, and prizes went to the best scores at the settlement price. I rebuilt every account from the public archive using the contest's own scoring code, then measured how the top of the board actually got there.

The scoring code itself held up: it reproduces the official results exactly. The rules around it did not. A fee waiver let owners trade for free by putting a second key on the other side, and every fill behind the final top 25 used it. Separately, the live leaderboard ranked players at a price that has no effect on the payout.

1Critical
1High
1Medium
1Held up

Scope and method

Rules reviewedFee rule (rule 12), live-board mark (rule 14), settlement price (rule 7)
DataPublic referee archive: 2,556 sweeps, 7,606,301 settled public trades, 9,405,335 keys that traded
MethodReplayed every trade with the contest's own account logic (FIFO lots, short collateral, the fee rule as written) and scored every key at the settlement price S = 234.69
Check before measuringReproduced 24 of the 25 official final scores to 0.0001 POLF. The 25th key traded in private rooms, whose 499,321 trades are redacted from the archive

Findings

IDSeverityFindingStatus
CC-01CRITICALThe fee waiver lets one owner trade free through a second keyFix written and tested
CC-02HIGHThe live board ranked players at a price that doesn't pay outIndependent board shipped
CC-03MEDIUMPrivate rooms make some top scores impossible to verifyRecommendation
CC-04HELDThe account logic reproduces the official results exactlyNo action
CRITICALCC-01

The fee waiver lets one owner trade free through a second key

What
Each side of a trade pays max(1%, discount). A side that trades 1% or more better than the sweep's close pays that gap back instead of the fee. Its entry lands exactly at the close, and the key on the other side pays the 1% and loses the discount. Keys cost nothing, so one owner can sit on both sides and route every fee to a throwaway key.
Evidence
  • 5,154,479 trade sides, one in three, skipped the fee this way
  • 452,949,720.47 POLF of 1% fees were paid by the key on the other side instead
  • 2,061,542 keys traded fee-free at least once; 3,236,971 paid another key's fee at least once
  • 772 of the 772 fills behind the final top 25 were on the fee-free side. The three winners made 31, 35 and 23 trades
Impact

The contest stopped measuring forecasting. On close-1's real price path, trading about 44 contracts:

StrategyPaying 1% a sideTrading free
Perfect foresight of every sweep's close+589+11,639
Naive momentum: long if the last 15 minutes rose−129,129+1,027

The winning score was +1,576.92. Paying the fee, even perfect foresight couldn't reach it. For scale, the 99th percentile of all keys that traded was +442.76.

Fix

Charge the fee on top of the gap, not instead of it (clawback_plus):

base   = fee_rate × qty × px
gap    = (close − px) × qty
buyer  = base + max(gap, 0)
seller = base + max(−gap, 0)

A trade at the close still pays 1% a side, a discount is still paid back in full, and the fold stays zero-sum (covered by a test). Every trade now costs each side at least 1%, so a throwaway key can't pay an owner's fee. The patch passes the contest's full build, verify and test suite. The upstream repo was archived on 6 October 2026, so it's published as a ready branch for the next contest.

Reproduce
analysis/ in close-call-board (replay script and full results) · the fix, with tests
HIGHCC-02

The live board ranked players at a price that doesn't pay out

What
The official live board valued every position at the "global" mark: the average price of the contest's own settled trades. The rules say that mark "marks the live board and sets nothing". Prizes are paid at S, the last Hyperliquid xyz:NVDA trade before 10:00 UTC on 4 October.
Evidence
The two prices sat more than $2 apart at times, and the global mark spiked to about 214 when off-market trades settled. At sweep 381 the board showed its #1 at 207.76 POLF; at the payout price that key was worth about 87 (the second figure rests on a fitted position size). Five community boards built during the contest all ranked at the same global mark.
Impact
Players decided whether to hold, add or flip based on rankings that could be wrong by more than half. A board that misstates who is winning invites disputes when prizes are paid.
Fix
Show the settlement-price score on the official board, next to the mark-based one. I shipped an independent board that does this, checks every Ed25519 signature on the referee's posts in the browser, and tells each player the final price they need to pass #1 and #3.
Reproduce
close-call-board.vercel.app · source
MEDIUMCC-03

Private rooms make some top scores impossible to verify

What
Trades in private rooms are redacted from the public archive: 499,321 of them. One of the final top 25 traded there, so its score can't be rebuilt from public data. The referee only posts the top 25 by score and the top 10 positions, so keys outside those lists can't be checked either.
Impact
Anyone disputing a prize can't independently confirm the result. Here the rest of the top 25 reproduced exactly, so this is a trust gap, not a known error.
Fix
The referee already commits a SHA-256 of each sweep's full flow file in its posts. Serving those files after settlement would make every score verifiable without exposing anything during play.
HELDCC-04

The account logic reproduces the official results exactly

What
Replaying the archive with the contest's scoring code gave the same final score as the referee for 24 of 25 top keys, to 0.0001 POLF. The 25th is explained by CC-03.
Meaning
The math is sound; the problems are in the incentives around it. That's the usual pattern, and it's why a code audit alone wouldn't have caught CC-01.

What a client gets on top

Want this for your launch?

Send me the rules or the repo. I'll reply within 24 hours with what I'd test first and a fixed price.