Adversarial smart contract review

We attack your contract
before the market does.

Pentagonal runs a permanent red team — eight specialised attackers, each fluent in a single class of exploit. Reentrancy, flash loans, oracle manipulation, MEV, economic edge cases, arithmetic overflow, access control, and gas griefing. They hunt every line you ship. The report is what’s left after they fail.

Coverage
14 networks
Latency
≈ 30 s / contract
Output
Markdown · PDF
Build

From a plain-English spec to attacker-tested Solidity.

Pentagonal scopes the contract with you, surfacing the decisions an attacker would later target — supply, fees, roles, upgradeability. Then it generates the code, referenced against OpenZeppelin v5 for Solidity and the Anchor framework for Solana, and hands it straight to the red team.

Step 01 · Describe

A sentence is enough to start.

Plain English. No template form. The model handles the rest of the scoping conversation.

“ERC-4626 staking vault for our governance token with a seven-day unlock and a one-percent performance fee, paused by a timelocked admin.”
Step 02 · Scope

Pentagonal asks what attackers would.

Decisions that hide bugs are pulled to the front. You answer them once; they land in the contract and the audit report.

  • Should the vault accept additional reward tokens, or single-asset only?
  • Who pauses emergency withdrawals — the admin, a guardian, or no-one?
  • Performance fee taken on deposit, on withdraw, or on harvest?
  • Pre-deposit donation protection — virtual shares or initial seed?
Step 03 · Generate

Solidity or Anchor, streamed.

Production-grade code against the most current standards. Compilation is free; the audit runs on the same artefact you deploy.

// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; import {ERC4626} from "@openzeppelin/contracts/token/ERC20/extensions/ERC4626.sol"; import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol"; import {Pausable} from "@openzeppelin/contracts/utils/Pausable.sol"; contract SentinelVault is ERC4626, AccessControl, Pausable { bytes32 public constant GUARDIAN = keccak256("GUARDIAN"); uint256 public constant UNLOCK = 7 days; uint256 public constant PERF_BPS = 100; // 1.00% mapping(address => uint256) public unlockAt; /* … */ }

Every generation goes straight to the red team. Findings come back inline; fixes and recompiles are free for the same contract.

Adversaries

Eight attackers run in parallel. What survives all of them ships.

Each attacker owns a single class of exploit. They run against the same contract independently, cross-confirm each other’s findings, and converge on a deduplicated report graded by exploit cost — not severity-by-vibes.

ADVERSARY 01
Reentrancy Hunter
Forces re-entry through external-call ordering, cross-function paths, read-only reentrancy via view functions, and ERC-777/1155 hooks.
ADVERSARY 02
Flash Loan Attacker
Manipulates price oracles, governance, and reward accounting inside a single block, funded by uncollateralised flash liquidity.
ADVERSARY 03
Access Control Prober
Hunts missing modifiers, role-mint paths, initializer reentry, proxy admin escalation, and unrenounced ownership.
ADVERSARY 04
Overflow Saboteur
Wraps integers through unchecked blocks, fixed-point precision loss, division ordering, and pre-0.8 patterns reintroduced via assembly.
ADVERSARY 05
Oracle Manipulator
Pushes spot-price reliance, single-source feeds, stale-round usage, TWAP window choice, and Chainlink heartbeat handling.
ADVERSARY 06
MEV Predator
Hunts sandwich exposure, slippage parameters, missing commit-reveal, and order-of-execution dependence in swap and auction paths.
ADVERSARY 07
Economic Exploit
Drives reward dilution, donation attacks against share-based vaults, fee-on-transfer asymmetry, and rounding in ERC-4626 deposits.
ADVERSARY 08
Gas Griefer
Weaponises storage layout, redundant SLOADs, calldata-vs-memory choices, and unbounded loops that turn DoS into a governance lever.
Read the full briefingOr read a sample report (human) →(agent format) →
Coverage

Solidity and Anchor. Seven mainnets, seven testnets, one Solana cluster.

EVM contracts are reviewed against OpenZeppelin and Solady references. Solana programs are reviewed against the Anchor framework and SPL conventions. Same agents, different idioms.

Surface
Networks
EVM mainnets
EthereumPolygonBNB ChainArbitrumBaseOptimismAvalanche
EVM testnets
SepoliaHoleskyPolygon AmoyArbitrum SepoliaBase SepoliaOP SepoliaAvalanche Fuji
Non-EVM
Solana mainnetSolana devnetAnchor 0.30+SPL Token-2022
Languages
Solidity 0.8.xYul / inline assemblyRust (Anchor)
Reference libraries
OpenZeppelin v5SoladyAnchorSPL
Output

After eight attackers, one report you can hand to a fund.

Markdown by default, PDF on export. Each finding includes the exploit narrative, the offending code segment with line numbers, a severity graded by attack cost, and a remediation diff.

The agent format is what an autonomous client receives over x402 — the exact output of generateReportMarkdown(). The human format is the same audit, restated as narrative for technical reviewers and fund partners.

Pentagonal · Audit ReportRev. 14 · 2026-04-22

Sentinel Vault — staking module

Solidity 0.8.24 · Base mainnet · 412 LoC · 1 contract, 3 libraries

The module implements a single-asset staking vault with time-weighted rewards. The red team broke it in eleven places, three of them critical: a reentrancy vector in withdraw, a rounding asymmetry that lets an early depositor inflate share price via direct token donation, and a missing oracle staleness check in the reward-rate setter. A consolidated remediation patch is appended.

Attacks that compound

Every exploit teaches the next attack.

Findings, exploit narratives, and remediation diffs feed a persistent rule store. When a new attack surfaces in one audit, every subsequent contract is hit with it. The corpus grows monotonically — coverage cannot regress.

2,184
Attacks in the corpus
Integration

Two ways in. One for humans, one for agents.

Pentagonal ships a native Model Context Protocol server for the IDE you’re already in, and an x402 endpoint so autonomous agents can pay per call in USDC — no account, no key management.

For humans · MCP
Run audits from your IDE.
v1.0.2on npm

Drop the server into Claude Desktop, Cursor, Windsurf, Cline, or Continue. Calls pentagonal_audit against the contract in your open buffer. Stdio for desktop, HTTP for hosted clients.

// claude_desktop_config.json { "mcpServers": { "pentagonal": { "command": "npx", "args": ["-y", "pentagonal-mcp"], "env": { "PENTAGONAL_KEY": "your-api-key" } } } }
Claude DesktopCursorWindsurfClineContinueHTTP transport
For agents · x402
Pay per call in USDC.
$5/ audit · USDC on Base

Autonomous agents hit the endpoint, get a 402, attach a USDC payment header, and retry. No signup, no API key rotation, no spend limits to engineer around. The Coinbase x402 protocol handles settlement on Base.

# Agent fetches → 402 Payment Required $ curl https://pentagonal.ai/api/audit \ -H "Content-Type: application/json" \ -d @vault.json HTTP/2 402 x-payment-amount: 5.00 x-payment-asset: USDC x-payment-network: base # Agent pays and retries $ curl https://pentagonal.ai/api/audit \ -H "X-PAYMENT: <usdc-base-tx>" \ -d @vault.json HTTP/2 200 → audit-report.md
x402 protocolUSDC · BaseNo accountPer-call settlement
Pricing

Per-audit. No subscriptions.

Generation and audit each cost five dollars. Compilation, fixes, and re-runs are free. Pay with crypto credits, or have an agent pay per call in USDC over x402.

Single audit
$5/ contract
One contract, eight agents, one consolidated report. Free fixes and recompiles for the same contract.
Pack — 10 audits
$40/ ten
Twenty percent off the single rate. Credits do not expire and are shared across team members.
Agent / x402
$5/ call · USDC
No account, no key management. Autonomous agents pay per invocation in USDC on Base via the x402 protocol.
Run an auditSet up the MCP server