03 · Approvals
Approvals outlive the dapp that asked for them. Unlimited allowances to unknown contracts are what drainers live on.
Three passes
- Known pairs. 30 major BNB Chain tokens × 21 known spenders (PancakeSwap routers, Uniswap Universal Router and V4 PositionManager, Permit2, 1inch, OpenOcean, ParaSwap, KyberSwap, 0x, OKX, Odos, LI.FI, Socket, Seaport…) through
allowance(owner, spender), batched. - Permit2.
allowance(owner, token, spender)on the Permit2 contract for the same tokens and the main spenders, with the expiry. - Event scan. Optional:
ApprovalandApprovalForAllevents where you are the owner, over the last ~1 or ~5 days of blocks, fetched in 5 000-block chunks (public RPC limit). Every candidate pair is then re-read withallowance()orisApprovedForAll()so only active allowances are listed. If the RPC refuses a range, the result says partial.
Risk per row
| Risk | Meaning |
|---|---|
| revoke | spender on a blocklist, or a plain wallet, or unlimited allowance to an unverified contract |
| warn | limited allowance to an unverified contract, or unlimited allowance to a known router |
| ok | limited allowance to a known or verified contract |
Revoke
Each row has a revoke button. It builds approve(spender, 0), setApprovalForAll(operator, false) or Permit2 approve(token, spender, 0, 0) and asks your browser wallet to sign it on BNB Chain. Routers need re-approval the next time you trade, which is the point.
Holder depth
Holding 1 M GRUB pre-selects the 5-day scan in the depth menu (you can still pick any depth). Nothing else changes: the tool is the same for everyone.
