Post a bounty

API and MCP

REST

JSON over HTTPS, no key, CORS open. Amounts in USDC are decimal numbers; times are UTC ISO 8601.

EndpointReturns
GET /api/v1/bountiesEvery bounty with program, escrow, USDC, backers and status
GET /api/v1/bounties/:idOne bounty with its snapshot, corpus, deposits, submissions and verdicts
GET /api/v1/verdicts/:idOne verdict with its hashes and the replayer report
GET /api/v1/teardown/:programThe teardown kit of a snapshotted program

List bounties

Request
SITE=https://www.decompilebounty.com
curl -s "$SITE/api/v1/bounties"
Response (live, arrays cut to 2 items)
{
  "bounties": []
}

One bounty

Request
SITE=https://www.decompilebounty.com
curl -s "$SITE/api/v1/bounties/0001"
Response (live: no bounty is open yet)
{
  "error": "not found"
}

One verdict

Request
SITE=https://www.decompilebounty.com
curl -s "$SITE/api/v1/verdicts/0001"
Response (live, arrays cut to 2 items)
{
  "id": "0001",
  "verdict": "PASS",
  "program": "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr",
  "bounty": null,
  "calibration": true,
  "label": "Calibration: SPL Memo v3, rebuilt source",
  "matched": 10985,
  "total": 10985,
  "cases": 11000,
  "budget_bound": 15,
  "real_matched": 1000,
  "real_total": 1000,
  "ok_path": 7107,
  "report_sha256": "4b029ffbe428ca3d614c609b9bd56e5379afb1193b9ed341e56ded470f0dab03",
  "source_sha256": "ca60fa3a2a704639c9ee01f94f80871e4bdc4ae978b2d8116cfdaa4b2dc838d2",
  "candidate_sha256": "dafe4811429f87ec4c43c8eb79ef16dee5f20e14dcfeffa2e073cd1d3f52b6f9",
  "corpus_sha256": "731ba8d3f3d2a0aa0ec354faa890c000f58bfb17eea4b39af4f7a05847a17858",
  "after_winner": false,
  "created_at": "2026-11-02T15:44:27.485Z",
  "memo": {
    "status": "pending",
    "text": "decomp:proof:calibration:mvzfiv4jc190a923:ca60fa3a2a704639c9ee01f94f80871e4bdc4ae978b2d8116cfdaa4b2dc838d2:4b029ffbe4..."
  },
  "report": {
    "format": "decomp-verdict/1",
    "verdict": "PASS",
    "reason": "all 10985 compared cases match, 7107 on the success path",
    "program": "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr",
    "loader": "BPFLoader2111111111111111111111111111111111",
    "original_sha256": "f520eaf096361abbb9639ea4dc3e5388a87b9330e121f476607b87c46ef67954",
    "candidate_sha256": "dafe4811429f87ec4c43c8eb79ef16dee5f20e14dcfeffa2e073cd1d3f52b6f9",
    "corpus_sha256": "731ba8d3f3d2a0aa0ec354faa890c000f58bfb17eea4b39af4f7a05847a17858",
    "source_sha256": "ca60fa3a2a704639c9ee01f94f80871e4bdc4ae978b2d8116cfdaa4b2dc838d2",
    "corpus_elf_sha256_matches_original": true,
    "cases_total": 11000,
    "compared": 10985,
    "budget_bound": 15,
    "matched": 10985,
    "real_total": 1000,
    "real_matched": 1000,
    "fuzz_total": 9985,
    "fuzz_matched": 9985,
    "fuzz_seed": "c34cf12a2e0f0762",
    "ok_path_original": 7107,
    "ok_path_minimum": 100,
    "mismatches_total": 0,
    "mismatches": [],
    "original_outcomes_sha256": "6979bdf2202d5b907d406e66d14d0f28267055d5e2bc8ede07d6eb7f9217476f",
    "candidate_outcomes_sha256": "32b9ede4837dc8ae0e3fd18eac7bf32d2b5df72d53e803d6003970c9103e0ead",
    "rules": {
      "replayer": "decomp-replayer 1.0.0",
      "litesvm": "0.17.0",
      "feature_set": "litesvm mainnet feature set",
      "compared": "result and error, logs line by line, return data, lamports owner and data of every writable account",
      "stripped": "lines 'Program <id> consumed N of M compute units'; cases where the original exhausts its compute budget are counted ..."
    }
  }
}

Teardown kit

Request
SITE=https://www.decompilebounty.com
curl -s "$SITE/api/v1/teardown/MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"
Response (live, arrays cut to 2 items)
{
  "program": "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr",
  "label": "SPL Memo v3",
  "status": "ready",
  "snapshot": {
    "program": "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr",
    "loader": "BPFLoader2111111111111111111111111111111111",
    "slot": 464547082,
    "upgradeable": false,
    "upgrade_authority": null,
    "programdata": null,
    "last_deploy_slot": null,
    "elf_size": 74800,
    "elf_sha256": "f520eaf096361abbb9639ea4dc3e5388a87b9330e121f476607b87c46ef67954",
    "onchain_hash": "68d9bbae7023f8f51d32d0f6ff8a7003921c97c99e77921ccd0f51adcf6295db",
    "verification": {
      "checked": true,
      "is_verified": false,
      "message": "On chain program not verified",
      "repo_url": "",
      "onchain_hash": "68d9bbae7023f8f51d32d0f6ff8a7003921c97c99e77921ccd0f51adcf6295db"
    },
    "taken_at": "2026-11-02T15:33:26.117Z"
  },
  "corpus": {
    "sha256": "731ba8d3f3d2a0aa0ec354faa890c000f58bfb17eea4b39af4f7a05847a17858",
    "bytes": 337987,
    "real_instructions": 1000,
    "ok_transactions": 220,
    "first_slot": 464547025,
    "last_slot": 464547084,
    "accounts": 15,
    "programs": []
  },
  "kit": {
    "format": "decomp-teardown/1",
    "elf_sha256": "f520eaf096361abbb9639ea4dc3e5388a87b9330e121f476607b87c46ef67954",
    "elf_size": 74800,
    "sbpf_version": "V0",
    "text_bytes": 57864,
    "rodata_bytes": 68080,
    "instruction_count": 7024,
    "function_count": 237,
    "functions": [
      {
        "pc": 0,
        "name": "fn_00000",
        "instructions": 2
      },
      {
        "pc": 2,
        "name": "fn_00002",
        "instructions": 2
      }
    ],
    "syscalls": [
      {
        "name": "abort",
        "calls": 67
      },
      {
        "name": "sol_log_",
        "calls": 5
      }
    ],
    "strings": [
      {
        "offset": 9516,
        "text": "El)9ya"
      },
      {
        "offset": 58112,
        "text": " (bytes     Some <= None"
      }
    ],
    "disassembly_sha256": "429744d001ba19f7b8fbb888da0208bef2bd98c364ed5a3d16bc1c7ccda9c551",
    "disassembly_lines": 7498,
    "corpus": {
      "sha256": "731ba8d3f3d2a0aa0ec354faa890c000f58bfb17eea4b39af4f7a05847a17858",
      "real_instructions": 1000,
      "discriminators": {
        "1": [
          {
            "prefix": "52",
            "count": 33
          },
          {
            "prefix": "38",
            "count": 32
          }
        ],
        "4": [
          {
            "prefix": "29737461",
            "count": 24
          },
          {
            "prefix": "686f6c64",
            "count": 22
          }
        ],
        "8": [
          {
            "prefix": "297374616b655f76",
            "count": 24
          },
          {
            "prefix": "686f6c6465722d6e",
            "count": 22
          }
        ]
      },
      "group_width": 8,
      "patterns": [
        {
          "discriminator": "297374616b655f76",
          "width": 8,
          "count": 24,
          "accounts_min": 1,
          "accounts_max": 1,
          "data_len_min": 42,
          "data_len_max": 42,
          "pattern": "sw",
          "pattern_share": 1
        },
        {
          "discriminator": "686f6c6465722d6e",
          "width": 8,
          "count": 22,
          "accounts_min": 0,
          "accounts_max": 0,
          "data_len_min": 81,
          "data_len_max": 81,
          "pattern": "",
          "pattern_share": 1
        }
      ],
      "account_owners": [
        {
          "owner": "11111111111111111111111111111111",
          "accounts": 15,
          "sizes": [
            {
              "size": 0,
              "count": 15
            }
          ]
        }
      ],
      "cpi_targets": [],
      "cpi_programs_loaded": []
    }
  },
  "downloads": {
    "elf": "/api/v1/teardown/MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr/elf",
    "disassembly": "/api/v1/teardown/MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr/disasm",
    "corpus": "/api/v1/corpus/731ba8d3f3d2a0aa0ec354faa890c000f58bfb17eea4b39af4f7a05847a17858"
  }
}

MCP server

The MCP server lives at /api/mcp: JSON-RPC 2.0 over HTTP POST (streamable HTTP, JSON responses). Point any MCP client at that URL.

ToolArgumentsReturns
list_bountiesstatus (optional)Bounties with program, USDC, backers and status
get_teardownprogramThe teardown kit of a program
get_verdictidA verdict with its hashes and the first mismatches
submit_statussubmissionThe job state of a submission: queued, building, replaying, done
initialize
SITE=https://www.decompilebounty.com
curl -s "$SITE/api/mcp" -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl","version":"1"}}}'
Response (live, arrays cut to 2 items)
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "protocolVersion": "2025-06-18",
    "capabilities": {
      "tools": {
        "listChanged": false
      }
    },
    "serverInfo": {
      "name": "decompile-bounty",
      "version": "1.0.0"
    },
    "instructions": "Read bounties on closed Solana programs, their teardown kits, the replay judge's verdicts and submission status."
  }
}
tools/list
SITE=https://www.decompilebounty.com
curl -s "$SITE/api/mcp" -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'
Response (live, arrays cut to 2 items)
{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "tools": [
      {
        "name": "list_bounties",
        "description": "Every bounty: program id and label, USDC in escrow (read from the chain), backers, days left, status, the Memo that f...",
        "inputSchema": {
          "type": "object",
          "properties": {
            "status": {
              "type": "string",
              "description": "optional filter: open, awaiting_funds, won, paid, refunding"
            }
          }
        }
      },
      {
        "name": "get_teardown",
        "description": "The teardown kit of a program: snapshot (loader, upgrade authority, deploy slot, ELF hash), functions, syscalls, roda...",
        "inputSchema": {
          "type": "object",
          "properties": {
            "program": {
              "type": "string",
              "description": "Solana program id"
            }
          },
          "required": [
            "program"
          ]
        }
      }
    ]
  }
}
tools/call get_verdict
SITE=https://www.decompilebounty.com
curl -s "$SITE/api/mcp" -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"get_verdict","arguments":{"id":"0001"}}}'
Response (live, arrays cut to 2 items)
{
  "jsonrpc": "2.0",
  "id": 3,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "(the same JSON as structuredContent)"
      }
    ],
    "structuredContent": {
      "id": "0001",
      "verdict": "PASS",
      "program": "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr",
      "bounty": null,
      "calibration": true,
      "label": "Calibration: SPL Memo v3, rebuilt source",
      "matched": 10985,
      "total": 10985,
      "cases": 11000,
      "budget_bound": 15,
      "real_matched": 1000,
      "real_total": 1000,
      "ok_path": 7107,
      "report_sha256": "4b029ffbe428ca3d614c609b9bd56e5379afb1193b9ed341e56ded470f0dab03",
      "source_sha256": "ca60fa3a2a704639c9ee01f94f80871e4bdc4ae978b2d8116cfdaa4b2dc838d2",
      "candidate_sha256": "dafe4811429f87ec4c43c8eb79ef16dee5f20e14dcfeffa2e073cd1d3f52b6f9",
      "corpus_sha256": "731ba8d3f3d2a0aa0ec354faa890c000f58bfb17eea4b39af4f7a05847a17858",
      "after_winner": false,
      "created_at": "2026-11-02T15:44:27.485Z",
      "memo": {
        "status": "pending",
        "text": "decomp:proof:calibration:mvzfiv4jc190a923:ca60fa3a2a704639c9ee01f94f80871e4bdc4ae978b2d8116cfdaa4b2dc838d2:4b029ffbe4..."
      },
      "report": {
        "format": "decomp-verdict/1",
        "verdict": "PASS",
        "reason": "all 10985 compared cases match, 7107 on the success path",
        "program": "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr",
        "loader": "BPFLoader2111111111111111111111111111111111",
        "original_sha256": "f520eaf096361abbb9639ea4dc3e5388a87b9330e121f476607b87c46ef67954",
        "candidate_sha256": "dafe4811429f87ec4c43c8eb79ef16dee5f20e14dcfeffa2e073cd1d3f52b6f9",
        "corpus_sha256": "731ba8d3f3d2a0aa0ec354faa890c000f58bfb17eea4b39af4f7a05847a17858",
        "source_sha256": "ca60fa3a2a704639c9ee01f94f80871e4bdc4ae978b2d8116cfdaa4b2dc838d2",
        "corpus_elf_sha256_matches_original": true,
        "cases_total": 11000,
        "compared": 10985,
        "budget_bound": 15,
        "matched": 10985,
        "real_total": 1000,
        "real_matched": 1000,
        "fuzz_total": 9985,
        "fuzz_matched": 9985,
        "fuzz_seed": "c34cf12a2e0f0762",
        "ok_path_original": 7107,
        "ok_path_minimum": 100,
        "mismatches_total": 0,
        "mismatches": [],
        "original_outcomes_sha256": "6979bdf2202d5b907d406e66d14d0f28267055d5e2bc8ede07d6eb7f9217476f",
        "candidate_outcomes_sha256": "32b9ede4837dc8ae0e3fd18eac7bf32d2b5df72d53e803d6003970c9103e0ead",
        "rules": {
          "replayer": "decomp-replayer 1.0.0",
          "litesvm": "0.17.0",
          "feature_set": "litesvm mainnet feature set",
          "compared": "result and error, logs line by line, return data, lamports owner and data of every writable account",
          "stripped": "lines 'Program <id> consumed N of M compute units'; cases where the original exhausts its compute budget are counted ..."
        }
      },
      "page": "https://<site>/verdicts/0001"
    },
    "isError": false
  }
}