bug-bounty-intelligence-mcp 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/BENCHMARK.md CHANGED
@@ -167,7 +167,7 @@ scan_contract({ repo_url: "https://github.com/3FLabs/grunt", protocol_type: "LEN
167
167
 
168
168
  ## About Bug Bounty Intelligence
169
169
 
170
- Pattern-aware from a corpus of 56,657 submitted Sherlock findings across 212 measured contests, acceptance-rate numbers (used by `list_vulnerability_patterns`) are limited to the 7,388 findings across 35 contests that could be exact-reconciled against contest outcomes (3,694 accepted), see METHODOLOGY.md. Uses the Al-Mizaan v3 framework, a 7-gate validation chain (Code, Reachability, Threat-Model, Invariant, Protocol-Intent, Impact, Proof), to filter signals into confirmed findings.
170
+ Pattern-aware from a corpus of 56,657 submitted Sherlock findings across 212 measured contests plus the Code4rena contests crawled alongside them, acceptance-rate numbers (used by `list_vulnerability_patterns`) are limited to the 9,200 findings across 38 contests (35 Sherlock, 3 Code4rena) that could be exact-reconciled against contest outcomes (4,011 accepted), see METHODOLOGY.md. Uses the Al-Mizaan v3 framework, a 7-gate validation chain (Code, Reachability, Threat-Model, Invariant, Protocol-Intent, Impact, Proof), to filter signals into confirmed findings.
171
171
 
172
172
  **Cost:** $5 USDC on Base (eip155:8453) via x402.
173
173
  **Install:** `npx -y bug-bounty-intelligence-mcp@latest`
package/METHODOLOGY.md CHANGED
@@ -10,6 +10,9 @@ are computed, what they don't claim, and how to reproduce them from public data.
10
10
 
11
11
  ## Data source
12
12
 
13
+ Two platforms, two different public data shapes, two different reconciliation rules (same
14
+ zero-tolerance standard on both). Sherlock first, Code4rena below.
15
+
13
16
  Sherlock runs public GitHub repos for judging each audit contest
14
17
  (`sherlock-audit/<contest>-judging`), where security researchers ("Watsons") open one GitHub
15
18
  issue per submitted finding. 218 of these judging repos were crawled; a real issue count could be
@@ -54,6 +57,31 @@ also how the reconciliation check itself works (see Reproducing this, below). Re
54
57
  same reconciliation rule this way, with no local cache in the loop, is what produced the 35/7,388/
55
58
  3,694 figures above.
56
59
 
60
+ ## Code4rena: a different shape, a much smaller yield
61
+
62
+ Code4rena's `code-423n4/<contest>-findings` repos do not have Sherlock's accepted/invalid folder
63
+ convention. Contests from 2021-2023 instead use per-researcher folders
64
+ (`<researcher>/<researcher>-submission.md`) with no accept/reject marker in the file tree at
65
+ all. Contests from roughly late 2024 onward move the judging data off GitHub entirely; the repo
66
+ is reduced to a README pointing sponsors at code4rena.com (verified on
67
+ `2024-12-unruggable-findings`: the repo contains only that README).
68
+
69
+ What the 2023-era contests do have is GitHub issues with labels, including `satisfactory`,
70
+ `unsatisfactory`, and `partial-NN` (a duplicate that earned partial credit). We tested this
71
+ against five real contests spanning 2021 to 2024: the two 2021-2022 contests sampled had zero
72
+ issues carrying any of these labels (a different, unidentified labelling convention was in use),
73
+ while three contests from October 2023 reconciled exactly once `satisfactory`/`partial-NN`
74
+ (accepted), `unsatisfactory`/`withdrawn-by-warden` (rejected), and
75
+ `qa`/`gas optimization`/`analysis`-only issues (excluded, same treatment as Sherlock's
76
+ `low_info`) were counted against the real issue total.
77
+
78
+ Applying the same zero-tolerance rule (accepted + rejected + excluded must equal the real
79
+ total, with zero unexplained residual) to all 372 crawled Code4rena judging repos: **3 reconcile
80
+ exactly** (1,812 findings, 317 accepted), all three from October 2023. The other 369 either have
81
+ no GitHub-issue judging data at all, or have labels that don't account for every issue. This is
82
+ a small, honest addition on top of Sherlock, not padding — most of Code4rena's history is
83
+ excluded for the same reason most of Sherlock's is: it does not reconcile.
84
+
57
85
  ## What the resulting numbers mean
58
86
 
59
87
  For each pattern (keyword-matched against finding titles/bodies — e.g. "reentrancy",
@@ -71,9 +99,12 @@ number of distinct vulnerabilities found.
71
99
  - The keyword-based pattern tagging is a simple substring matcher (see `detectPatterns()` in the
72
100
  crawler scripts), not a semantic classifier — a manual audit found roughly 65% tagging
73
101
  precision on a sample. Pattern labels are directional, not exact classifications.
74
- - The 35-contest sample is still small relative to the full Sherlock history. Some pattern rows
75
- have thin n (e.g. `idor`, n=18) — treat low-n rows as lower-confidence than high-n rows (e.g.
76
- `trusted-actor`, n=1,814).
102
+ - The 38-contest sample (35 Sherlock, 3 Code4rena) is still small relative to either platform's
103
+ full history. Some pattern rows have thin n (e.g. `idor`, n=35) — treat low-n rows as
104
+ lower-confidence than high-n rows (e.g. `trusted-actor`, n=2,127).
105
+ - Code4rena's three contests are a narrow, single-month slice (all October 2023), not a
106
+ representative sample of Code4rena's history. Treat the combined numbers as Sherlock-dominated
107
+ (7,388 of 9,200 findings), with Code4rena adding a small, real, but not yet broad correction.
77
108
 
78
109
  ## Reproducing this
79
110
 
@@ -105,5 +136,6 @@ not use that contest's data.
105
136
  An earlier draft of this tool advertised acceptance percentages computed from the full,
106
137
  unverified raw corpus. Independent review caught that those specific percentages were
107
138
  unreliable. We would rather ship a smaller number we can prove than a bigger one we can't. That
108
- is still true today: the raw corpus is 56,657 findings, the reconciled, trustworthy number
109
- published here is 7,388.
139
+ is still true today: the raw Sherlock corpus alone is 56,657 findings, the reconciled,
140
+ trustworthy number published here (Sherlock plus the three Code4rena contests that also
141
+ reconcile) is 9,200.
package/README.md CHANGED
@@ -86,13 +86,13 @@ Reading the production scan code on 24 October 2026 showed that earlier text on
86
86
 
87
87
  Official source: this repository and the payment address in the payment section below are the only official ones for Bug Bounty Intelligence. If a listing, a reply or a website gives a different payment address, it is not ours. Check the address against the one below before you pay.
88
88
 
89
- **Drawn from a corpus of 56,657 submitted findings across 212 measured Sherlock audit competitions.**
89
+ **Drawn from a corpus of 56,657 submitted Sherlock findings across 212 measured audit competitions, plus Code4rena.**
90
90
  **Cost: $5 USDC on Base (eip155:8453) via x402 for the full scan, $1 USDC for the quick scan.**
91
91
  **Free tool: `list_vulnerability_patterns`, no payment needed.**
92
92
 
93
93
  `list_vulnerability_patterns`' acceptance-rate numbers are computed only from the subset where
94
- results could be exactly reconciled against Sherlock's own published outcomes: 7,388 findings
95
- across 35 contests. We'd rather show fewer, verified numbers than a bigger set we can't stand
94
+ results could be exactly reconciled against the platform's own published outcomes: 9,200 findings
95
+ across 38 contests (35 Sherlock, 3 Code4rena). We'd rather show fewer, verified numbers than a bigger set we can't stand
96
96
  behind. See [METHODOLOGY.md](METHODOLOGY.md) for exactly why, and how to reproduce it.
97
97
 
98
98
  ## Free dataset: no server, no MCP, no payment
package/index.mjs CHANGED
@@ -21,27 +21,30 @@ import {
21
21
  } from '@modelcontextprotocol/sdk/types.js'
22
22
  const API_URL = 'https://x402.tokenizen.nl'
23
23
 
24
- // Embedded pattern library — Sherlock audit-competition findings, updated 2026-11-12.
25
- // Methodology: only contests where Sherlock's own judging-repo result structure could be
26
- // exactly reconciled (accepted + invalid === total submissions) are included, 35 contests,
27
- // 7,388 findings. A much larger raw corpus exists (56,657 submissions across 212 measured
28
- // contests), but acceptance could not be verified for the rest without risking a wrong number,
29
- // so those are excluded rather than estimated. See METHODOLOGY.md for the full methodology note,
30
- // including the 2026-11-12 re-verification that replaced an unreliable local cache.
24
+ // Embedded pattern library — Sherlock + Code4rena audit-competition findings, updated 2026-11-12.
25
+ // Methodology: only contests where the judging repo's own result structure could be exactly
26
+ // reconciled (accepted + invalid === total submissions) are included — 35 Sherlock contests
27
+ // (7,388 findings) plus 3 Code4rena contests (1,812 findings) that happen to reconcile under
28
+ // the same zero-tolerance rule, 38 contests, 9,200 findings total. Code4rena contributes far
29
+ // less than Sherlock because most of its history does not use a consistently-applied
30
+ // satisfactory/unsatisfactory label (verified by sampling, not assumed), so those contests are
31
+ // excluded rather than estimated, exactly like the excluded Sherlock contests. See
32
+ // METHODOLOGY.md for the full methodology note, including the 2026-11-12 re-verification that
33
+ // replaced an unreliable local cache.
31
34
  const PATTERN_LIBRARY = {
32
- 'flash-loan': { acceptance_rate: '0.69', total: 185, accepted: 127, examples_accepted: ['duc - Borrower can reduce the interest of shortly loans', 'ShadowForce - Bypass the VAULT_ACCOUNT_MIN_TIME check in VaultAccountAction.sol when exiting the vau', 'mstpr-brainbot - Compound exchange rate can be manipulated to withdraw more underlying tokens from N'] },
33
- 'liquidation': { acceptance_rate: '0.66', total: 869, accepted: 576, examples_accepted: ['w42d3n - The protocol is not protected against Signature malleability', 'gryphon - Buyer may not be able to liquidate the loan', 'peanuts - NFTs are not stored in the appropriate contracts'] },
34
- 'fee-miscalculation': { acceptance_rate: '0.55', total: 540, accepted: 297, examples_accepted: ['7siech - Total loss of funds when using certain popular ERC20 tokens', 'iglyx - MigratePrimeCash\'s _calculateInterestRateCurves calculates new kinkRate1 and kinkRate2 incor', 'xiaoming90 - Prime vaults do not consider secondary debt when assessing vault fees'] },
35
- 'dos-griefing': { acceptance_rate: '0.54', total: 680, accepted: 365, examples_accepted: ['w42d3n - The protocol is not protected against Signature malleability', 'duc - Borrower can reduce the interest of shortly loans', '0xd1r4cde17a - lender gets minInterestsToRepay / loan.nbOfPositions'] },
36
- 'staleness': { acceptance_rate: '0.54', total: 1090, accepted: 586, examples_accepted: ['w42d3n - The protocol is not protected against Signature malleability', 'peanuts - Some NFTs like CryptoKitty and CryptoFighter can be paused, which block repaying/liquidati', 'csanuragjain - Liquidation occur at incorrect time'] },
37
- 'oracle-manipulation':{ acceptance_rate: '0.54', total: 911, accepted: 488, examples_accepted: ['iglyx - TokenHandler\'s _redeemMoneyMarketIfRequired can fail valid withdrawal requests', 'xiaoming90 - Underlying delta is calculated on internal token balance', 'xiaoming90 - Rebalance stops working when more holdings are added'] },
38
- 'trusted-actor': { acceptance_rate: '0.52', total: 1814, accepted: 935, examples_accepted: ['gryphon - Buyer may not be able to liquidate the loan', 'peanuts - Some NFTs like CryptoKitty and CryptoFighter can be paused, which block repaying/liquidati', 'Go-langer - Init function left open for anyone to call and initialize the protocol.'] },
39
- 'idor': { acceptance_rate: '0.50', total: 18, accepted: 9, examples_accepted: ['0Kage - A borrower with multiple loans of which one is liquidated can withdraw much more than his sh', '0xbepresent - Claimable amount could be sent to the approved address instead the provision/position', 'GimelSec - ClaimFacet.sendShareOfSaleAsSupplier() calculates unfair shares, the money should compe'] },
40
- 'overflow': { acceptance_rate: '0.48', total: 346, accepted: 165, examples_accepted: ['peanuts - Some NFTs like CryptoKitty and CryptoFighter can be paused, which block repaying/liquidati', 'Robert - checkedTransfer In claim() and claimAsBorrower() Functions Can Permanently Lock Tokens', 'Inspex - Denial-of-Service in the liquidation flow results in the collateral NTF will be stuck in th'] },
41
- 'mev-slippage': { acceptance_rate: '0.48', total: 368, accepted: 178, examples_accepted: ['xiaoming90 - Liquidation discount does not take slippage into consideration', 'xiaoming90 - Inadequate slippage control', 'ShadowForce - Bypass the VAULT_ACCOUNT_MIN_TIME check in VaultAccountAction.sol when exiting the vau'] },
42
- 'access-control': { acceptance_rate: '0.46', total: 538, accepted: 249, examples_accepted: ['Go-langer - Init function left open for anyone to call and initialize the protocol.', 'Englave - Signature Replay Attack on OfferArgs', 'xiaoming90 - It may be possible to liquidate on behalf of another account'] },
43
- 'reentrancy': { acceptance_rate: '0.40', total: 279, accepted: 111, examples_accepted: ['SPYBOY - A malicious signer can exploite reentrancy while Borrowing', 'glcanvas - Possible reentrancy which allows to write incorrect supplyPositionIndex', 'Robert - A Loan\'s supplyPositionIndex Can Be Duplicated Through Re-entrancy'] },
44
- 'rounding': { acceptance_rate: '0.40', total: 485, accepted: 192, examples_accepted: ['usmannk - Borrowers may steal funds from lenders', 'jekapi - Borrower can lock lender assets if offer has large LTV', 'iglyx - MigratePrimeCash\'s _calculateInterestRateCurves calculates new kinkRate1 and kinkRate2 incor'] },
35
+ 'flash-loan': { acceptance_rate: '0.66', total: 193, accepted: 127, examples_accepted: ['duc - Borrower can reduce the interest of shortly loans', 'ShadowForce - Bypass the VAULT_ACCOUNT_MIN_TIME check in VaultAccountAction.sol when exiting the vau', 'mstpr-brainbot - Compound exchange rate can be manipulated to withdraw more underlying tokens from N'] },
36
+ 'liquidation': { acceptance_rate: '0.66', total: 877, accepted: 576, examples_accepted: ['w42d3n - The protocol is not protected against Signature malleability', 'gryphon - Buyer may not be able to liquidate the loan', 'peanuts - NFTs are not stored in the appropriate contracts'] },
37
+ 'fee-miscalculation': { acceptance_rate: '0.54', total: 583, accepted: 313, examples_accepted: ['7siech - Total loss of funds when using certain popular ERC20 tokens', 'iglyx - MigratePrimeCash\'s _calculateInterestRateCurves calculates new kinkRate1 and kinkRate2 incor', 'xiaoming90 - Prime vaults do not consider secondary debt when assessing vault fees'] },
38
+ 'oracle-manipulation':{ acceptance_rate: '0.53', total: 949, accepted: 502, examples_accepted: ['iglyx - TokenHandler\'s _redeemMoneyMarketIfRequired can fail valid withdrawal requests', 'xiaoming90 - Underlying delta is calculated on internal token balance', 'xiaoming90 - Rebalance stops working when more holdings are added'] },
39
+ 'staleness': { acceptance_rate: '0.51', total: 1315, accepted: 675, examples_accepted: ['w42d3n - The protocol is not protected against Signature malleability', 'peanuts - Some NFTs like CryptoKitty and CryptoFighter can be paused, which block repaying/liquidati', 'csanuragjain - Liquidation occur at incorrect time'] },
40
+ 'mev-slippage': { acceptance_rate: '0.47', total: 379, accepted: 179, examples_accepted: ['xiaoming90 - Liquidation discount does not take slippage into consideration', 'xiaoming90 - Inadequate slippage control', 'ShadowForce - Bypass the VAULT_ACCOUNT_MIN_TIME check in VaultAccountAction.sol when exiting the vau'] },
41
+ 'trusted-actor': { acceptance_rate: '0.47', total: 2127, accepted: 1000, examples_accepted: ['gryphon - Buyer may not be able to liquidate the loan', 'peanuts - Some NFTs like CryptoKitty and CryptoFighter can be paused, which block repaying/liquidati', 'Go-langer - Init function left open for anyone to call and initialize the protocol.'] },
42
+ 'dos-griefing': { acceptance_rate: '0.47', total: 816, accepted: 383, examples_accepted: ['w42d3n - The protocol is not protected against Signature malleability', 'duc - Borrower can reduce the interest of shortly loans', '0xd1r4cde17a - lender gets minInterestsToRepay / loan.nbOfPositions'] },
43
+ 'overflow': { acceptance_rate: '0.43', total: 385, accepted: 167, examples_accepted: ['peanuts - Some NFTs like CryptoKitty and CryptoFighter can be paused, which block repaying/liquidati', 'Robert - checkedTransfer In claim() and claimAsBorrower() Functions Can Permanently Lock Tokens', 'Inspex - Denial-of-Service in the liquidation flow results in the collateral NTF will be stuck in th'] },
44
+ 'access-control': { acceptance_rate: '0.42', total: 846, accepted: 356, examples_accepted: ['Go-langer - Init function left open for anyone to call and initialize the protocol.', 'Englave - Signature Replay Attack on OfferArgs', 'xiaoming90 - It may be possible to liquidate on behalf of another account'] },
45
+ 'rounding': { acceptance_rate: '0.39', total: 532, accepted: 205, examples_accepted: ['usmannk - Borrowers may steal funds from lenders', 'jekapi - Borrower can lock lender assets if offer has large LTV', 'iglyx - MigratePrimeCash\'s _calculateInterestRateCurves calculates new kinkRate1 and kinkRate2 incor'] },
46
+ 'reentrancy': { acceptance_rate: '0.34', total: 332, accepted: 114, examples_accepted: ['SPYBOY - A malicious signer can exploite reentrancy while Borrowing', 'glcanvas - Possible reentrancy which allows to write incorrect supplyPositionIndex', 'Robert - A Loan\'s supplyPositionIndex Can Be Duplicated Through Re-entrancy'] },
47
+ 'idor': { acceptance_rate: '0.26', total: 35, accepted: 9, examples_accepted: ['0Kage - A borrower with multiple loans of which one is liquidated can withdraw much more than his sh', '0xbepresent - Claimable amount could be sent to the approved address instead the provision/position', 'GimelSec - ClaimFacet.sendShareOfSaleAsSupplier() calculates unfair shares, the money should compe'] },
45
48
  }
46
49
 
47
50
  // ── helpers ──────────────────────────────────────────────────────────────────
@@ -98,7 +101,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
98
101
  'Submit a public GitHub repository for an automated Solidity analysis. The result is a list of AI-generated hypotheses to review by hand. It is not an audit and not a list of confirmed bugs.',
99
102
  'The scan reads the files most likely to move funds first, in at most six parts. Tests, mocks, scripts, interfaces and vendored dependencies are left out. The report states what share of the in-scope code was actually read, and a report can say that no hypotheses came out of the part that was read.',
100
103
  'Check the repository first, for free: GET https://x402.tokenizen.nl/api/bug-intel/precheck?repo=owner/name says whether the scan counts any Solidity in it and roughly how much of it will be read.',
101
- 'How often the scan finds known issues on closed audit contests, including the misses, is published in the README of the repository (github.com/holistis/bug-bounty-intelligence-mcp). The prompt uses acceptance-rate hints from the 7,388 findings that could be exact-reconciled against contest outcomes, see METHODOLOGY.md.',
104
+ 'How often the scan finds known issues on closed audit contests, including the misses, is published in the README of the repository (github.com/holistis/bug-bounty-intelligence-mcp). The prompt uses acceptance-rate hints from the 9,200 findings that could be exact-reconciled against contest outcomes, see METHODOLOGY.md.',
102
105
  'Cost: $5 USDC on Base (eip155:8453) via x402. Reports usually arrive within the hour. If the scan fails or the report does not help, write to info@holistischadviseur.nl for a new attempt or a refund, see the terms.',
103
106
  'Returns a job_id. Use get_scan_report to poll for results.',
104
107
  'If payment_required is true, pay $5 USDC to the payTo address on Base, then retry scan_contract with the same repo_url.',
@@ -138,8 +141,8 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
138
141
  {
139
142
  name: 'list_vulnerability_patterns',
140
143
  description: [
141
- 'Returns historical vulnerability patterns and acceptance rates from Sherlock audit-competition findings.',
142
- 'Numbers are limited to contests where results could be exactly reconciled against Sherlock\'s own published outcomes (7,388 findings across 35 contests), no estimated or unverifiable figures.',
144
+ 'Returns historical vulnerability patterns and acceptance rates from Sherlock and Code4rena audit-competition findings.',
145
+ 'Numbers are limited to contests where results could be exactly reconciled against the platform\'s own published outcomes (9,200 findings across 38 contests: 35 Sherlock, 3 Code4rena), no estimated or unverifiable figures.',
143
146
  'Useful for understanding what types of bugs are most likely to be valid in a given protocol type.',
144
147
  'This tool is FREE — no payment required.',
145
148
  ].join(' '),
@@ -265,7 +268,7 @@ server.setRequestHandler(CallToolRequestSchema, async (req) => {
265
268
  }
266
269
  }
267
270
 
268
- const lines = [`Vulnerability patterns for ${protocol_type} protocols (from Sherlock audit findings, exact-reconciled contests only):`, '']
271
+ const lines = [`Vulnerability patterns for ${protocol_type} protocols (from Sherlock and Code4rena audit findings, exact-reconciled contests only):`, '']
269
272
  for (const p of patterns) {
270
273
  const pct = Math.round(parseFloat(p.acceptance_rate) * 100)
271
274
  lines.push(`${p.pattern.padEnd(24)} ${pct}% accepted (${p.total_cases} cases)`)
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bug-bounty-intelligence-mcp",
3
- "version": "1.1.0",
4
- "description": "MCP server for AI-powered smart contract security analysis. $5 USDC/scan via x402. Drawn from 56,657 Sherlock submissions, verified acceptance rates from 7,388 exact-reconciled findings. Includes a free, standalone dataset (vulnerability-acceptance-rates.json), no server required.",
3
+ "version": "1.2.0",
4
+ "description": "MCP server for AI-powered smart contract security analysis. $5 USDC/scan via x402. Drawn from 56,657 Sherlock submissions plus Code4rena, verified acceptance rates from 9,200 exact-reconciled findings. Includes a free, standalone dataset (vulnerability-acceptance-rates.json), no server required.",
5
5
  "type": "module",
6
6
  "main": "index.mjs",
7
7
  "bin": {
@@ -1,91 +1,92 @@
1
1
  {
2
2
  "$schema_note": "Free, standalone dataset, no server, no API key, no payment. Embed directly in your own tool.",
3
- "source": "Sherlock audit-competition judging repos (public GitHub)",
3
+ "source": "Sherlock and Code4rena audit-competition judging repos (public GitHub)",
4
4
  "license": "CC0, public domain, use freely with or without attribution",
5
5
  "methodology_url": "https://github.com/holistis/bug-bounty-intelligence-mcp/blob/main/METHODOLOGY.md",
6
6
  "last_updated": "2026-11-12T00:00:00.000Z",
7
- "contests_included": 35,
8
- "total_findings": 7388,
9
- "total_accepted": 3694,
10
- "note": "Only contests where accepted+invalid counts reconcile exactly against Sherlock's own published results are included. 2026-11-12: re-derived from scratch after the 2026-07-21 run was found to rest on an unreliable local issue-count cache (some contests undercounted by an order of magnitude); every count here comes fresh from GitHub's search API and git-tree data, not from a local cache. 'duplicated' is not tracked in this version, see methodology_url. See methodology_url for full scope, limitations, and reproduction steps.",
7
+ "contests_included": 38,
8
+ "contests_included_by_platform": { "sherlock": 35, "code4rena": 3 },
9
+ "total_findings": 9200,
10
+ "total_accepted": 4011,
11
+ "note": "Only contests where accepted+invalid counts reconcile exactly against the platform's own published results are included (zero tolerance, same rule for both platforms). Code4rena contributes far less than Sherlock because most of its history does not consistently apply a satisfactory/unsatisfactory label the way its October 2023 contests do; those contests are excluded rather than estimated. 'duplicated' is not tracked in this version. See methodology_url for full scope, limitations, and reproduction steps.",
11
12
  "patterns": {
12
13
  "flash-loan": {
13
- "acceptance_rate": 0.69,
14
+ "acceptance_rate": 0.66,
14
15
  "accepted": 127,
15
- "rejected": 58,
16
- "total": 185
16
+ "rejected": 66,
17
+ "total": 193
17
18
  },
18
19
  "liquidation": {
19
20
  "acceptance_rate": 0.66,
20
21
  "accepted": 576,
21
- "rejected": 293,
22
- "total": 869
22
+ "rejected": 301,
23
+ "total": 877
23
24
  },
24
25
  "fee-miscalculation": {
25
- "acceptance_rate": 0.55,
26
- "accepted": 297,
27
- "rejected": 243,
28
- "total": 540
29
- },
30
- "dos-griefing": {
31
26
  "acceptance_rate": 0.54,
32
- "accepted": 365,
33
- "rejected": 315,
34
- "total": 680
27
+ "accepted": 313,
28
+ "rejected": 270,
29
+ "total": 583
30
+ },
31
+ "oracle-manipulation": {
32
+ "acceptance_rate": 0.53,
33
+ "accepted": 502,
34
+ "rejected": 447,
35
+ "total": 949
35
36
  },
36
37
  "staleness": {
37
- "acceptance_rate": 0.54,
38
- "accepted": 586,
39
- "rejected": 504,
40
- "total": 1090
38
+ "acceptance_rate": 0.51,
39
+ "accepted": 675,
40
+ "rejected": 640,
41
+ "total": 1315
41
42
  },
42
- "oracle-manipulation": {
43
- "acceptance_rate": 0.54,
44
- "accepted": 488,
45
- "rejected": 423,
46
- "total": 911
43
+ "mev-slippage": {
44
+ "acceptance_rate": 0.47,
45
+ "accepted": 179,
46
+ "rejected": 200,
47
+ "total": 379
47
48
  },
48
49
  "trusted-actor": {
49
- "acceptance_rate": 0.52,
50
- "accepted": 935,
51
- "rejected": 879,
52
- "total": 1814
50
+ "acceptance_rate": 0.47,
51
+ "accepted": 1000,
52
+ "rejected": 1127,
53
+ "total": 2127
53
54
  },
54
- "idor": {
55
- "acceptance_rate": 0.5,
56
- "accepted": 9,
57
- "rejected": 9,
58
- "total": 18
55
+ "dos-griefing": {
56
+ "acceptance_rate": 0.47,
57
+ "accepted": 383,
58
+ "rejected": 433,
59
+ "total": 816
59
60
  },
60
61
  "overflow": {
61
- "acceptance_rate": 0.48,
62
- "accepted": 165,
63
- "rejected": 181,
64
- "total": 346
65
- },
66
- "mev-slippage": {
67
- "acceptance_rate": 0.48,
68
- "accepted": 178,
69
- "rejected": 190,
70
- "total": 368
62
+ "acceptance_rate": 0.43,
63
+ "accepted": 167,
64
+ "rejected": 218,
65
+ "total": 385
71
66
  },
72
67
  "access-control": {
73
- "acceptance_rate": 0.46,
74
- "accepted": 249,
75
- "rejected": 289,
76
- "total": 538
68
+ "acceptance_rate": 0.42,
69
+ "accepted": 356,
70
+ "rejected": 490,
71
+ "total": 846
72
+ },
73
+ "rounding": {
74
+ "acceptance_rate": 0.39,
75
+ "accepted": 205,
76
+ "rejected": 327,
77
+ "total": 532
77
78
  },
78
79
  "reentrancy": {
79
- "acceptance_rate": 0.4,
80
- "accepted": 111,
81
- "rejected": 168,
82
- "total": 279
80
+ "acceptance_rate": 0.34,
81
+ "accepted": 114,
82
+ "rejected": 218,
83
+ "total": 332
83
84
  },
84
- "rounding": {
85
- "acceptance_rate": 0.4,
86
- "accepted": 192,
87
- "rejected": 293,
88
- "total": 485
85
+ "idor": {
86
+ "acceptance_rate": 0.26,
87
+ "accepted": 9,
88
+ "rejected": 26,
89
+ "total": 35
89
90
  }
90
91
  }
91
92
  }