Audits cost $5K+ and take weeks
A manual review is booked weeks ahead and priced for funded teams. Most token launches ship the day they are written, with no review at all.
Slither plus models from three labs grade your contract in minutes, and the result is minted on Base as an attestation anyone can verify.
Bright contacts are audits recorded onchain at 0xF0aA…a751; faint ones are benchmark runs. Further out means riskier.
A manual review is booked weeks ahead and priced for funded teams. Most token launches ship the day they are written, with no review at all.
Unprotected mints, owner drains and reentrancy are old, well-known bugs. They keep shipping because nobody ran even a basic check before the contract held money.
"Audited" on a website is usually a screenshot of a PDF. Nobody can check which code was reviewed, what was found, or whether the result was later withdrawn.
Paste Solidity, drop a project folder, or give a verified address on Base or Ethereum. Pay per audit with one x402 USDC signature.
Slither compiles and runs 96 detectors. Models read each contract with those results; criticals go to two reviewers from other labs.
Findings by line, severity and origin, a score out of 100, and a signed receipt for every model call, hashed into one report file.
AuditRegistry records grade, score and hashes on Base and mints the attestation NFT to the paying wallet. Anyone can verify it.
Payment path for one audit: x402 exact scheme, Circle test USDC on Base Sepolia
01 · Payer wallet
signs one EIP-3009 authorization, no gas
02 · x402 authorization
exact tier price, valid 5 minutes
03 · Facilitator
verifies, then settles on Base
04 · Sentinel treasury
receives USDC; job starts
A launch-day ERC-20 with a marketing fee and an airdrop helper. Its mint() has no access check.
// SPDX-License-Identifier: MITpragma solidity ^0.8.24; /// @title MemeToken/// @notice A launch-day meme token: fixed initial supply, a marketing wallet fee and an airdrop helper.contract MemeToken { string public constant name = "Meme Token"; string public constant symbol = "MEME"; uint8 public constant decimals = 18; uint256 public totalSupply; address public owner; address public marketingWallet; uint256 public marketingFeeBps = 200; // 2% mapping(address => uint256) public balanceOf; mapping(address => mapping(address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); constructor(address marketing) { owner = msg.sender; marketingWallet = marketing; _mint(msg.sender, 1_000_000_000 ether); } /// @notice Mints new tokens. Meant for the team's liquidity top-ups. function mint(address to, uint256 amount) external { _mint(to, amount); } function setMarketingWallet(address wallet) external { require(msg.sender == owner, "not owner"); marketingWallet = wallet; } function transfer(address to, uint256 amount) external returns (bool) { _transfer(msg.sender, to, amount); return true; } function approve(address spender, uint256 amount) external returns (bool) { allowance[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function transferFrom(address from, address to, uint256 amount) external returns (bool) { uint256 allowed = allowance[from][msg.sender]; if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; _transfer(from, to, amount); return true; } /// @notice Sends `amount` to every address in `recipients`. function airdrop(address[] calldata recipients, uint256 amount) external { for (uint256 i = 0; i < recipients.length; i++) { _transfer(msg.sender, recipients[i], amount); } } function _transfer(address from, address to, uint256 amount) internal { uint256 fee = (amount * marketingFeeBps) / 10_000; balanceOf[from] -= amount; balanceOf[to] += amount - fee; balanceOf[marketingWallet] += fee; emit Transfer(from, to, amount - fee); if (fee > 0) emit Transfer(from, marketingWallet, fee); } function _mint(address to, uint256 amount) internal { totalSupply += amount; balanceOf[to] += amount; emit Transfer(address(0), to, amount); }} Detectors
0/96
Lines read
0/78
Flagged
0
require(msg.sender.call.value(amount)());
credit[msg.sender]-=amount;withdraw sends ETH to msg.sender via a low-level call at line 17 before reducing credit[msg.sender] at line 18. A malicious recipient contract can use its fallback function to reenter withdraw repeatedly while its recorded credit remains unchanged, receiving multiple withdrawals against the same credit. This can drain ETH deposited for other users.
Fix: Apply checks-effects-interactions: reduce credit[msg.sender] before making the external call.
benchmark case swc-simple-dao, SWC registry
function emergencyWithdraw(address token, address to, uint256 amount) external {
IERC20(token).transfer(to, amount);
}emergencyWithdraw has no authorization check. Any caller can select the staking token, reward token, or any other token held by the vault, set themselves as `to`, and transfer the vault's balance to themselves. This permits direct theft of all deposited staking tokens and funded reward tokens.
Fix: Restrict this function to an authorized role, such as `require(msg.sender == owner)`, and consider preventing recovery of the staking and reward tokens while user balances or reward obligations remain outstanding.
demo: StakingVault.sol · open the reportrequire(tx.origin == owner);
Authorization is based on tx.origin rather than msg.sender. If the owner is induced to call an attacker-controlled contract, that contract can call sendTo with an attacker-selected receiver and amount while tx.origin remains the owner. The contract will then transfer its ETH to the attacker-controlled receiver.
Fix: Authenticate the direct caller instead: require(msg.sender == owner).
benchmark case swc-tx-origin, SWC registry
Tokens and small contracts
$5per audit, mainnet0.05 USDC on Base Sepolia
DeFi protocols, vaults, staking
$25per audit, mainnet0.25 USDC on Base Sepolia
Multi-contract systems
$100per audit, mainnet1.00 USDC on Base Sepolia
Re-audit on every deploy and upgrade
$99per month
Five cents on Base Sepolia. A graded report in minutes, and an attestation your launchpad can read.