Quantum Audit Logo

Is BNB Attestation Safe?

On-chain security analysis — is it a scam or legit?

Is this your token? Publish your own audit on this page →

BNB Attestation BAS
0x0f0d…4e37
BNB Chain Not verifiedLast checked 3d ago 1 audit on record
Executive SummaryAI Copilot

The BASToken contract is an ERC20Capped token with custom access control, pausing, and whitelisting functionalities. It leverages well-audited OpenZeppelin libraries. The audit identified a critical access control design flaw where the PAUSER_ROLE is configured to be its own administrator, creating a single point of failure for role management. Significant centralization of power in the DEFAULT_ADMIN_ROLE and PAUSER_ROLE also presents high economic and governance risks.

1 Critical1 High1 Medium1 Low1 Informational
Volume 24h
$1.20M
Liquidity
$2.12M
Price
$0.02654
Token Age
1y
Top 10 Holders
91.8%

Security Findings

Critical

PAUSER_ROLE Self-Administration Creates Unmanageable Role

C-01The constructor calls `_setRoleAdmin(PAUSER_ROLE, PAUSER_ROLE)`. This configuration means that only an address already possessing the PAUSER_ROLE can grant or revoke the PAUSER_ROLE from other addresses. The DEFAULT_ADMIN_ROLE, which typically manages all other roles, loses its ability to manage PAUSER_ROLE members. If the initial PAUSER_ROLE holder's key is lost or compromised, it becomes impossible to add new PAUSER_ROLE holders or remove existing ones, leading to an unmanageable and potentially unrecoverable critical role (7.3 Access Control, 7.8 Operations).
IssueThe constructor calls `_setRoleAdmin(PAUSER_ROLE, PAUSER_ROLE)`. This configuration means that only an address already possessing the PAUSER_ROLE can grant or revoke the PAUSER_ROLE from other addresses. The DEFAULT_ADMIN_ROLE, which typically manages all other roles, loses its ability to manage PAUSER_ROLE members. If the initial PAUSER_ROLE holder's key is lost or compromised, it becomes impossible to add new PAUSER_ROLE holders or remove existing ones, leading to an unmanageable and potentially unrecoverable critical role (7.3 Access Control, 7.8 Operations).
FixChange the role administration for PAUSER_ROLE to DEFAULT_ADMIN_ROLE. The constructor should call `_setRoleAdmin(PAUSER_ROLE, DEFAULT_ADMIN_ROLE)` instead of `_setRoleAdmin(PAUSER_ROLE, PAUSER_ROLE)`. This ensures that the DEFAULT_ADMIN_ROLE retains control over managing PAUSER_ROLE members.
StatusUnresolved
High

High Centralization of Power

H-01The contract design grants significant power to a few privileged roles. The DEFAULT_ADMIN_ROLE can set the MINTER_ROLE and recover any ERC20 tokens accidentally sent to the contract. The PAUSER_ROLE can pause/unpause the contract and manage the whitelist, effectively controlling token transferability and liquidity. The MINTER_ROLE can mint new tokens up to the cap. This high degree of centralization introduces single points of failure and potential for abuse if these privileged accounts are compromised or act maliciously (7.4 Economic, 7.5 Governance).
IssueThe contract design grants significant power to a few privileged roles. The DEFAULT_ADMIN_ROLE can set the MINTER_ROLE and recover any ERC20 tokens accidentally sent to the contract. The PAUSER_ROLE can pause/unpause the contract and manage the whitelist, effectively controlling token transferability and liquidity. The MINTER_ROLE can mint new tokens up to the cap. This high degree of centralization introduces single points of failure and potential for abuse if these privileged accounts are compromised or act maliciously (7.4 Economic, 7.5 Governance).
FixImplement multi-signature wallets (e.g., Gnosis Safe) for all critical roles (DEFAULT_ADMIN_ROLE, PAUSER_ROLE, MINTER_ROLE) to distribute control and require multiple approvals for sensitive operations. Consider a time-locked mechanism for critical administrative actions or a transition to a decentralized autonomous organization (DAO) for governance over time.
StatusUnresolved
Medium

Whitelist Mechanism During Pause Can Restrict Transfers

M-01When the contract is paused, token transfers are only permitted if both the sender and receiver are on the whitelist, or if it's a minting operation. The PAUSER_ROLE has the sole authority to add or remove addresses from this whitelist. While this mechanism might be intended for specific operational control, it gives the PAUSER_ROLE the ability to selectively restrict or allow transfers, potentially impacting market liquidity or creating a censorship vector (7.4 Economic, 7.8 Operations).
IssueWhen the contract is paused, token transfers are only permitted if both the sender and receiver are on the whitelist, or if it's a minting operation. The PAUSER_ROLE has the sole authority to add or remove addresses from this whitelist. While this mechanism might be intended for specific operational control, it gives the PAUSER_ROLE the ability to selectively restrict or allow transfers, potentially impacting market liquidity or creating a censorship vector (7.4 Economic, 7.8 Operations).
FixClearly document the intended use cases and implications of the whitelist mechanism, especially during paused states. Consider implementing a time-lock for whitelist changes to provide transparency and allow users to react. If possible, explore more decentralized or community-governed approaches for whitelist management.
StatusUnresolved
Low

Minter Role Can Be Granted to Multiple Addresses

L-01The `setMinter` function allows the DEFAULT_ADMIN_ROLE to grant the MINTER_ROLE to any address. There is no explicit mechanism to revoke a previously granted MINTER_ROLE before assigning a new one, nor is there a restriction on the number of addresses that can hold the MINTER_ROLE simultaneously. This could lead to multiple entities having minting capabilities, which might not align with the project's intended operational model (7.3 Access Control).
IssueThe `setMinter` function allows the DEFAULT_ADMIN_ROLE to grant the MINTER_ROLE to any address. There is no explicit mechanism to revoke a previously granted MINTER_ROLE before assigning a new one, nor is there a restriction on the number of addresses that can hold the MINTER_ROLE simultaneously. This could lead to multiple entities having minting capabilities, which might not align with the project's intended operational model (7.3 Access Control).
FixIf only a single minter is desired, modify the `setMinter` function to first revoke the MINTER_ROLE from any existing minter before granting it to a new address. Alternatively, if multiple minters are acceptable, explicitly document this design choice and ensure robust operational procedures for managing multiple minting entities.
StatusUnresolved
Info

Contract Deploys in Paused State

I-01The contract's constructor includes `_pause()`, meaning the token is deployed in a paused state. This prevents most token transfers (except whitelisted transfers or minting) immediately after deployment until the `unpause()` function is called by an account with the PAUSER_ROLE. This is likely a deliberate design choice for initial setup or pre-launch phases (7.8 Operations).
IssueThe contract's constructor includes `_pause()`, meaning the token is deployed in a paused state. This prevents most token transfers (except whitelisted transfers or minting) immediately after deployment until the `unpause()` function is called by an account with the PAUSER_ROLE. This is likely a deliberate design choice for initial setup or pre-launch phases (7.8 Operations).
FixEnsure that the operational plan for unpausing the contract and enabling full token transfers is clearly defined and communicated to all stakeholders. This includes the timing of the unpause event and the responsibilities of the PAUSER_ROLE.
StatusUnresolved

Category Ratings

TechnicalMedium5/10

The contract demonstrates good technical quality, utilizing battle-tested OpenZeppelin libraries for ERC20, ERC20Capped, AccessControl, and Pausable functionalities (7.2 Code Security). The custom logic for whitelisted transfers during a paused state is implemented correctly within `_beforeTokenTransfer`. No reentrancy or integer overflow/underflow vulnerabilities were identified due to the use of Solidity 0.8+ and OpenZeppelin's secure patterns. However, the access control setup for the PAUSER_ROLE introduces a critical technical flaw (7.3 Access Control).

GovernanceHigh1/10

The contract exhibits a high degree of centralization, with the DEFAULT_ADMIN_ROLE holding significant power, including setting the minter and recovering arbitrary ERC20 tokens (7.4 Economic, 7.5 Governance). The PAUSER_ROLE can pause/unpause transfers and manage the whitelist, which can significantly impact token liquidity and user experience. A critical governance risk is the `_setRoleAdmin(PAUSER_ROLE, PAUSER_ROLE)` configuration, which makes the PAUSER_ROLE unmanageable by the DEFAULT_ADMIN_ROLE, creating a single point of failure for this critical role (7.3 Access Control, 7.8 Operations).

UpgradesMedium4/10

The BASToken contract is implemented as a standard, non-upgradeable ERC20 token. It does not utilize any proxy patterns (e.g., UUPS, Transparent) or upgrade mechanisms. Therefore, there are no upgrade-specific risks or vulnerabilities associated with this contract (7.7 Upgrades).

Security Checklist

Contract VerifiedPass
Ownership Renounced?
No Mint FunctionFail
Liquidity LockedFail
Not a ProxyPass

Holder Composition

13.8% in wallets78.0% in contracts
Effective Concentration45.0%

Share held by contracts — treasury, vesting, bridge or staking — is discounted against share held by wallets when the score is computed: a contract cannot decide to sell the way an anonymous holder can, though it can still be drained or voted to sell. Effective concentration is the figure the risk score is actually calculated from.

Liquidity Depth

Show 3 more pairsShow less

The risk score reads depth across every pair. The volume figure and the volume-to-liquidity ratio elsewhere on this page describe only the pair this audit analysed, so the two are not directly comparable.

LP Distribution

Top-1 Unlocked Holder56.4%
Top-3 Unlocked100.0%

Key Addresses

Deployer
0x9d87…a2b9
Unlocked LP Held By
0x65cc…cb7d0x5c62…fed60x310d…035f0x0044…fcbe0xa253…fa540x91d3…1d8f0xe0eb…a2cd0x1458…8fbe0x3c9a…625b

No privileged address appears among these holders: the unlocked liquidity sits with independent providers, not with the deployer.

What Raised This Score

  • Ownership status UNKNOWN (owner could not be resolved)
  • Mintable supply, but capped at 0.0%/year
  • Top-10 concentration > 30% (91.8% total → 45.0% effective; 13.8% in EOAs, 78.0% in contracts — moderate)
  • Liquidity not locked, but no owner/deployer address holds LP — market-depth risk, not rug risk
  • LP top1 unlocked holder = 56.4% (independent LP — depth risk, pool = 99% of DEX liquidity)
  • LP top3 unlocked holders = 100.0% (independent LP — depth risk, pool = 99% of DEX liquidity)
  • 1 Critical finding(s) from audit
  • 1 High finding(s) from audit
  • 1 Medium finding(s) from audit
  • 1 Low finding(s) from audit

Each factor is an on-chain fact recorded at the time of this analysis. The score is computed from them by a deterministic function, so the same contract returns the same score for anyone who runs the audit. How scores are computed

Related Audits

Filecoin (FIL)High RiskStarpower Network (STAR)High RiskXRP Token (XRP)High RiskBTCB Token (BTCB)High Risk孙小圣High RiskBTR token (BTR)High Risk

Would You Like a More Detailed Audit of BNB Attestation?

Our AI-powered scanner gives you a deeper, real-time smart contract analysis — free, with every scoring factor shown.

Get Detailed Audit