AgentStack
SKILL verified MIT Self-run

Token Compatibility

skill-omermaksutii-rugproof-token-compatibility · by omermaksutii

Detect ERC-20 token compatibility issues — fee-on-transfer, rebasing, non-standard return values, missing decimals(), low-decimal tokens, blacklistable tokens (USDC), pausable tokens. Activate on any ERC-20 integration, `transfer`/`transferFrom` use, balance-based accounting, decimal scaling.

No reviews yet
0 installs
16 views
0.0% view→install

Install

$ agentstack add skill-omermaksutii-rugproof-token-compatibility

✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README — it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-omermaksutii-rugproof-token-compatibility)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
1mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming — see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps — measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Token Compatibility? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Token compatibility detection

When this applies

  • Any ERC-20 integration: lending, AMM, vault, staking, bridge
  • Balance-based accounting (balanceOf(this) - prevBalance)
  • Decimal scaling between tokens
  • Cross-chain bridges with various token implementations
  • Aggregators / routers handling user-supplied tokens

Detection patterns

Fee-on-transfer assumed away (HIGH)

uint256 before = token.balanceOf(address(this));
token.transferFrom(user, address(this), amount);
shares = amount * X / Y;        // ← uses `amount`, not actual received

Tokens like USDT (when fee enabled), SafeMoon, etc. take a fee. Use balanceOf(this) - before as the effective amount.

Rebasing token accounting (HIGH)

stETH, aUSDC, AMPL — balances change without transfer. Vaults assuming balanceOf ≡ deposit will mis-account. Either don't accept rebasing tokens, or use share-based accounting (wstETH-style wrappers).

Non-standard return values — USDT (HIGH)

USDT's transfer does NOT return bool (pre-SafeERC20 use breaks):

bool ok = IERC20(usdt).transfer(to, amt);   // ← reverts: ABI mismatch

Use OZ SafeERC20 which uses low-level call + return-data inspection.

Blacklistable tokens (HIGH)

USDC, USDT can blacklist addresses. If a user gets blacklisted after deposit, the protocol may be unable to return funds → other users' funds stuck if pooled.

Pausable tokens (HIGH)

USDC, USDT can pause transfers. Protocol functions that must succeed (liquidations) may revert.

Low-decimal tokens (MEDIUM-HIGH)

GUSD has 2 decimals. Math assuming 18 decimals causes huge rounding errors.

shares = assets * 1e18 / something;   // ← shares now astronomical or zero

Tokens with hooks (ERC-777) (HIGH)

Reentrancy surface (see [[reentrancy]]). Many protocols implicitly assume vanilla ERC-20.

Tokens with double-entry (HIGH)

TUSD historically had two valid addresses. transferFrom could be invoked from either. Approval to one didn't bind the other.

Missing return on approve / non-zero approve revert (HIGH)

Some tokens (early USDT) require approve(spender, 0) before approve(spender, X). Use safeApprove or forceApprove. See [[approval-issues]].

Missing decimals() (LOW)

Non-standard tokens may lack decimals(). Guard with try/catch and default to 18.

Tokens that revert on zero-amount transfer (LOW-MEDIUM)

LEND, others. Cap-by-zero guards needed.

Severity rubric

| Pattern | Severity | |---|---| | Vault accepts fee-on-transfer with no balance-delta accounting | High | | Protocol accepts rebasing token without share-wrapper | High | | Naive ERC-20 transfer (no SafeERC20) | High | | Pooled funds with blacklistable token + no escape hatch | High | | Low-decimal token with 18-decimal-assumed math | High | | Pausable token in liquidation path | High | | Approve-non-zero revert ignored | High | | Zero-amount-revert in batch flow | Medium | | Missing decimals() graceful handling | Low |

Remediation patterns

  • Allowlist tokens — easier than supporting every token.
  • Use SafeERC20 — covers most return-value quirks.
  • Balance-delta accounting — measure balanceOf(this) - prev after transferFrom.
  • Disallow rebasing tokens — or only accept their share-wrapped form (wstETH not stETH).
  • Reset approval before setforceApprove from OZ ≥4.9, or safeApprove(0) then safeApprove(amount).
  • Escape hatches — admin can swap a single user's blacklisted balance out of pooled state into a side mapping.

False-positive notes

  • Protocol explicitly lists supported tokens and tests against them → not a finding for unsupported.
  • Test/mock tokens in test/ → ignore.

Related

  • [[unchecked-calls]]
  • [[approval-issues]]
  • [[reentrancy]] — ERC-777 hooks
  • [[integer-issues]] — decimals math

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.