Skip to content
Back to skills

Contest And Bounty Reporting

ASecurity

Write in-scope smart-contract contest and Immunefi bounty reports: severity, impact, root cause, local Foundry test, fix. Use for Code4rena, Sherlock, Cantina, Hats, Immunefi. No live exploits.

  • 3 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 2, 2026
ai-agentsrustgo

Security analysis

A100/100

Scanned September 2, 2026

npx -y skills add nuroctane/nur-cli --skill contest-and-bounty-reporting --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Contest And Bounty Reporting?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Contest And Bounty Reporting
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/nuroctane-contest-and-bounty-reporting/badge)](https://www.skillsdirectory.com/skills/nuroctane-contest-and-bounty-reporting)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: contest-and-bounty-reporting
description: "Write in-scope smart-contract contest and Immunefi bounty reports: severity, impact, root cause, local Foundry test, fix. Use for Code4rena, Sherlock, Cantina, Hats, Immunefi. No live exploits."
---

# Contest and bounty reporting

A finding that cannot be filed is not a finding. This playbook is the **writeup shape** researchers get paid for.

**Scope first.** Read the program's assets, known issues, and out-of-scope list this session. If the user points at a live protocol with no published program, load `sc-research` `references/disclosure.md` and stop.

## Platforms (process only)

| Platform | What to copy from their docs |
|----------|------------------------------|
| Immunefi | assets in scope, severity table (critical = direct loss), PoC requirements |
| Code4rena | judging criteria, duplicate window, QA vs valid, known issues |
| Sherlock | Watson vs Lead, issue validity, hierarchical judging |
| Cantina | severity, portfolio, contest vs private |
| Hats | hats.finance / audit competitions, Safe Harbor if present |

Do not invent their rules. Fetch the live docs if unsure.

## Report body (always this order)

1. **Title** - impact first, not the gadget. Bad: "reentrancy in `withdraw`". Better: "Read-only reentrancy on `totalAssets` lets an attacker mint extra shares".
2. **Severity** - program scale. State impact (who loses what) and likelihood (one tx? needs admin? needs stalled oracle?).
3. **In scope** - chain, address or repo path, commit hash.
4. **Root cause** - the trust assumption that is false (spot price, missing initializer, share math).
5. **Local proof** - Foundry test in-repo. `setUp` + attacker actor + `assert` on the broken invariant or `expectRevert` after the fix. Fork tests may read public RPC; they must **not** `--broadcast`.
6. **Fix** - the smallest change (CEI, `nonReentrant`, staleness check, `_disableInitializers`, virtual shares).
7. **References** - SWC id, one Solodit analog if it exists.

Never attach a drain script, flashbots bundle, or mainnet calldata.

## Foundry test shape (allowed)

```solidity
function test_Finding_ShareInflationOnEmptyVault() public {
    // local deploy or vm.createSelectFork of an in-scope address
    vm.prank(attacker);
    // sequence that demonstrates extra shares / stolen assets
    assertLt(vault.convertToAssets(victimShares), victimDeposit);
}
```

If the test needs an "attacker contract", keep it in `test/` and use it only under `forge test`. That is a regression test, not an exploit payload.

## Duplicate / QA hygiene

- Search Solodit + the contest's known issues before filing.
- One root cause per report. Do not split the same bug across functions unless impact differs.
- If you only have a detector hit and no economic impact, it is QA / Low - say so.

## Expected output

A markdown report matching the program form, plus a passing (demonstrating) or failing-invariant Foundry test path. Ready to paste into Immunefi / C4. No public tweet until the program allows disclosure.

## Paid analog lookup (before you file)

Do not invent a historical analog from memory. Load **one**:

| You need | Skill / slice |
|----------|----------------|
| `$` + playbook for a named Immunefi payout | `hunting-x-linked-bounties` `references/paid-payouts.md` |
| 2024-2026 X handle | `hunting-x-linked-bounties` `references/x-linked-2024-2026.md` |
| Researcher name | `hunting-x-linked-bounties` `references/researcher-index.md` |
| Grep + local test idea | `historical-smart-contract-vulns` `references/case-cards.md` |
| Ingest T-id vs pack id | `historical-smart-contract-vulns` `references/ingest-class-map.md` |

Hats Velvet (~$40k paid of ~$70k) and Immunefi Alchemix V3 liq-fee overpay are **contest-shaped** paid rows. Raft-as-Hats-venue was later **hacked** - do not cite the Hats report as a successful invariant. Uniswap v4 $15.5M / LayerZero $15M / Usual $16M are **ceilings**. GregoAI 2026 X claims are unverified.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.