# Token Safety Check: Mint, Blacklist and Owner Powers

> Token scanner for contract powers: whether a token can mint, blacklist, pause, change fees or be upgraded, if ownership is renounced and its top holder share.

Markdown copy of https://voltfincrypto.com/apps/token-safety-check

**Question:** Which powers does this token contract still keep: minting, blacklisting, pausing, fee changes or upgrades?

- Kind: Table in Voltfin Strata
- Topic: [Security and risk](https://voltfincrypto.com/topics/security)
- Chains: Multi-chain
- Status: Planned. The data is not published yet, so this page states no figure; each figure will open its receipt when it is.

Many token losses come from powers the contract never gave up: an owner who can mint new supply, blacklist holders, pause transfers, raise fees or swap in new code. This table reads those powers from each token's bytecode and storage, so a reader can see what the deployer can still do before buying, listing or integrating a token.

Each row shows whether ownership is renounced, whether the contract sits behind an upgradeable proxy and who controls it, which privileged functions exist and how concentrated the top holders are. A clean row is not a promise of safety: it lists what the code allows today and links the reads that show it.

## Blueprint

One row: One row per token contract per chain, read at the latest block

- **Token** (`token`): The token's name and symbol, linked to its contract.
- **Chain** (`chain`): The chain the token contract is deployed on.
- **Owner** (`owner`): The current owner from owner(), or the zero address when ownership is renounced.
- **Ownership renounced** (`renounced`): Yes when the owner is the zero address and no admin role remains; otherwise no, with the role that remains.
- **Can mint** (`can_mint`): Whether a mint function or minter role exists, and which address or role can call it.
- **Can blacklist** (`can_blacklist`): Whether a privileged account can block chosen addresses from transferring the token.
- **Can pause** (`can_pause`): Whether a privileged account can pause transfers or switch trading off.
- **Fee control** (`fee_control`): Whether a privileged account can set buy, sell or transfer fees, with the current settings where readable.
- **Upgradeable** (`upgradeable`): Whether the token sits behind an EIP-1967 or other proxy, and whether its admin is a single key, a multisig or a timelock.
- **Top 10 holders** (`top10_share`): Share of supply held by the 10 largest holders, with pools and burn addresses marked.
- **Receipt** (`receipt`): The block, calls and storage reads behind the row.

## How it will be measured

- Privileged functions are found by matching the bytecode's function selectors against known mint, blacklist, pause, fee-setter, max-transaction and trading-toggle signatures, using the verified ABI where one exists.
- Ownership is read from owner() and the latest OwnershipTransferred log; it counts as renounced only when the owner is the zero address and no other admin role remains.
- Upgradeability is read from the EIP-1967 implementation, admin and beacon storage slots at the latest block, with the admin's own type (single key, multisig or timelock) beside it.
- Holder concentration is the top 10 holders' share of supply from balanceOf at the same block, with pools, burn addresses and labelled exchanges marked.
- Every cell carries its receipt: the block, the call or storage slot read and the value it returned.

## Data it needs

- `token_holders_snapshot` (to build): Holder counts, top holders and concentration shares of registry tokens at a pinned block, with contract and exchange labels.
- `token_launches_daily` (to build): New tokens deployed per chain and launchpad per day, how many reached a DEX pool, and how many were abandoned.
- `address_labels` (to build): Labels for known addresses: exchanges, bridges, protocols, funds, treasuries, sanctioned addresses and known attackers.
- Source: Contract bytecode (eth_getCode) and verified ABIs, matched against known privileged function selectors
- Source: owner() calls and OwnershipTransferred logs
- Source: EIP-1967 implementation, admin and beacon slots via eth_getStorageAt at the latest block
- Source: AccessControl RoleGranted and RoleRevoked logs for minter, pauser and admin roles
- Source: balanceOf of the top holders at the latest block, from rebuilt transfer history

## Questions

### How can I tell if a token is safe?

No on-chain check can prove a token is safe. What can be read is what the contract allows: whether someone can still mint, blacklist, pause, change fees or upgrade it, and how concentrated its holders are. This table shows those facts with their reads and leaves the judgement to the reader.

### What does renounced ownership mean?

Renouncing moves a contract's owner role to the zero address, so owner-only functions can no longer be called. It only helps if no other role or proxy admin can still change the contract, which is why the table checks both.

### Why is a mint function a risk?

A mint function lets its controller create new tokens at will, which can dilute every holder or supply tokens to sell into the pool. Many legitimate tokens have one under a governance or multisig owner, so the table shows who controls it.

### What is a token blacklist function?

A blacklist function lets the owner block chosen addresses from sending or receiving the token. Stablecoins use one to freeze stolen funds; in a new token it can stop buyers from selling, which is how many honeypots work.

### What does an upgradeable token contract mean?

An upgradeable token sits behind a proxy that forwards calls to an implementation contract, and its admin can point the proxy at new code. The token's rules can then change completely, so the table names the admin and whether it is a single key, a multisig or a timelock.

## Glossary

- **Proxy contract**: A contract that forwards every call to a separate implementation contract, whose address its admin can change to upgrade the code.
- **EIP-1967**: The standard storage slots in which proxies keep their implementation, admin and beacon addresses, so anyone can read them.
- **Function selector**: The first four bytes of a call's data, derived from the function's signature, used here to find which functions a contract exposes.

## Related apps

- [Honeypot Token Checker: Can This Token Be Sold?](https://voltfincrypto.com/apps/honeypot-token-checker)
- [Rug Pull Tracker: New Tokens With Liquidity Pulled](https://voltfincrypto.com/apps/rug-pull-tracker)
- [Token Approval Checker: Open Allowances by Wallet](https://voltfincrypto.com/apps/token-approval-checker)
- [Smart Contract Upgrade Tracker: Proxy and Owner Changes](https://voltfincrypto.com/apps/smart-contract-upgrade-tracker)
- [New Crypto Tokens Launched Today](https://voltfincrypto.com/apps/new-crypto-tokens-today)
- [Bitcoin Quantum Risk: BTC in Exposed Public Key Addresses](https://voltfincrypto.com/apps/bitcoin-quantum-risk-exposed-keys)

Build it in Voltfin Studio: https://app.voltfincrypto.com/signup?next=%2F
