Bug Bounty Program - Relay

Relay Bug Bounty Program

Relay runs a bug bounty program to make responsible disclosure financially rational for security researchers. Rewards scale with how much damage a bug can cause and how feasible it is to exploit in practice. We run monitoring and circuit breakers across the stack, so the likelihood tiers and modifiers reflect real response capacity — not a hypothetical one. This framework applies across Relay’s protocol and services.

How payouts are calculated

Every valid report goes through five steps:

  1. Classify severity (S1–S4) — how bad is the damage if exploited?
  2. Classify likelihood (L1–L3) — how feasible is exploitation in practice?
  3. Read the base payout from the matrix.
  4. Apply modifiers (×0.5 to ×1.5) from the fixed list.
  5. Round to the nearest $500 (ties round up). Floor: $500. Cap: $100,000.

Severity

Severity captures what happens if the bug is exploited — damage magnitude and how fast it occurs.

Tier Rule of thumb Definition
S4 — Critical Can drain everything immediately Total fund theft or protocol insolvency with no time to react.
S3 — High Large or fast theft, or permanent freeze Large-scale fund theft or permanent freeze. Requires some setup, but fast once triggered.
S2 — Medium Partial or slow damage Bounded drain (capped percentage, not total) or slow drain with a response window. Temporary freeze.
S1 — Low Annoying but not financially dangerous Griefing, minor economic damage, DoS with no fund loss, or an admin-only bug with no external exploit path.

Four rules resolve the most common classification calls:

Likelihood

Likelihood captures how probable exploitation is in practice.

Tier Rule of thumb Criteria
L3 — High Anyone can do it anytime No prerequisites. Callable by any EOA with publicly available calldata.
L2 — Medium Needs setup (flash loans, timing, conditions) Requires specific conditions: flash loan infra, a particular chain state, MEV infrastructure, or another protocol being in a particular state.
L1 — Low Needs a privileged role or rare situation Requires privileged access (operator, solver, oracle), very specific market conditions, or a multi-step attack depending on several parties.

We reduce likelihood by one tier (floored at L1) when the exploit freezes rather than steals (unless the freeze is a step toward theft).

Base payout matrix

L3 — High L2 — Medium L1 — Low
S4 — Critical $100,000 $50,000 $20,000
S3 — High $30,000 $15,000 $7,500
S2 — Medium $10,000 $5,000 $2,000
S1 — Low $2,000 $1,000 $500

The floor of $500 applies only when a report demonstrates an external exploit path — an attacker without a privileged role can reach the bug. A report is not eligible for a bounty when:

These are real bugs and we still want them reported; they just do not qualify as vulnerabilities under this framework. Strong write-ups in this category are candidates for a discretionary bonus.

Modifiers

After landing on a base payout, apply modifiers multiplicatively. Modifiers are drawn from the fixed list below. Quick checklist:

Full trigger definitions:

Modifier Trigger Factor
Permanently unrecoverable Damage cannot be reversed after exploit (e.g., theft with funds laundered) ×1.5
High remediation cost Fix requires a full contract redeploy across multiple chains ×1.25
Silent / undetectable No onchain event emitted ×1.25
High attacker cost Exploit requires significant capital at risk ×0.75
Pausable + monitored Contract can be paused with active monitoring ×0.75
Bounded damage pool Damage capped to a sub-pool ×0.5

Modifiers stack. The final amount is floored at $500, capped at $100,000, and rounded to the nearest $500. Worked example: S3/L2 base = $15,000. Pausable (×0.75) and bounded to the fee buffer (×0.5) → $15,000 × 0.75 × 0.5 = $5,625 → $5,500.

Worked examples

Flash loan reentrancy on withdrawal

An attacker uses a flash loan to reenter the withdrawal function and drain depository contract funds in a single transaction. No special permissions required.

Fee parameter drift

A rounding error lets any filler extract ~2 bps above their entitled fee per fill. Callable by any EOA, damage accumulates slowly, bounded to the fee buffer.

Permanent pool freeze via griefing

A crafted cross-chain message bricks a specific pool’s accounting, locking all funds in it. The attacker has no way to extract — it is a pure grief and costs gas.

Edge cases

Discretionary bonuses

May be awarded for exceptional write-ups or novel attack vectors that reveal a systemic pattern. Bonuses are recognition, not entitlement, and not pre-committed.

PoC requirements

Severity Requirement
S4, S3 Runnable PoC required.
S2 PoC strongly preferred. Detailed technical explanation accepted when PoC is not feasible.
S1 Description sufficient with clear reproduction steps.

Out of scope

The following are not eligible for a reward:

Reward process and requirements

Reporting a vulnerability

Email support@relay.link with a description, reproduction steps, and a runnable PoC where applicable. Most responses are provided within 24 hours, and we will get back to you with next steps within 1 to 4 business days.