Quantum Audit Logo
Launch App

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

Is BNB Attestation Safe?

BASBNB Chain
Not verified This record has not gone through deep verification and is not being monitored. The score is a dated snapshot — the token’s risk can change at any time.Own this token? Put it under verification →
Last checked Sep 4, 2026 · 1 audit on record
SummaryAI Copilot

The BASToken contract is an ERC20Capped token with custom access control, pausing, and whitelisting functionalities.

Read the full analysis
What raised the score
  • Ownership status UNKNOWN
  • Mintable supply, but capped at 0.0%/year
  • Top-10 concentration > 30%
  • Liquidity not locked, but no owner/deployer address holds LP — market-depth risk, not rug risk
  • LP top1 unlocked holder = 56.4%
  • LP top3 unlocked holders = 100.0%
  • 1 Critical finding(s) from audit
  • 1 High finding(s) from audit
  • 1 Medium finding(s) from audit
  • 1 Low finding(s) from audit
Exact factors
  • 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

Security Checklist

as of audit · Sep 42 of 5 checks passed
Contract verifiedVerified
OwnershipUnknown
MintMintable
Liquidity lockNot locked
UpgradeabilityFixed code

Holders

as of audit · Sep 4, 2026
78.0%Contracts13.8%Wallets8.2%Everyone else
78.0%Contracts13.8%8.2%
ContractsWalletsEveryone elseBubble area = share of supply
91.8%of supply sits with the top 10 holders
  • Contractstreasury, vesting, bridge, staking78.0%
  • Walletsanonymous holders, free to sell13.8%
  • Everyone elsethe rest of the supply8.2%
Effective concentrationwhat the score reads45.0%
How holder types affect the score

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.

Holder balances as recorded by the audit of Sep 4, 2026

Liquidity

as of audit · Sep 4$2.13M across 9 pairs
LP tokensNot locked

The LP tokens of the analysed pool are not locked or burned, so whoever holds them can withdraw that liquidity.

Analysed pool$2.12MShare of depth99.3%
Top-1 Unlocked Holder56.4%
Top-3 Unlocked100.0%
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.

Security Findings

1 Critical1 High1 Medium1 Low1 Info
Critical

PAUSER_ROLE Self-Administration Creates Unmanageable Role

The 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).C-01

Issue

The 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).

Fix

Change 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.

Status

Unresolved

High

High Centralization of Power

The 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).H-01

Issue

The 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).

Fix

Implement 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.

Status

Unresolved

Medium

Whitelist Mechanism During Pause Can Restrict Transfers

When 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).M-01

Issue

When 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).

Fix

Clearly 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.

Status

Unresolved

Low

Minter Role Can Be Granted to Multiple Addresses

The 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).L-01

Issue

The 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).

Fix

If 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.

Status

Unresolved

Info

Contract Deploys in Paused State

The 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).I-01

Issue

The 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).

Fix

Ensure 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.

Status

Unresolved

Analysis

AI Copilotas of audit · Sep 4
Executive SummaryWhat the contract is and what the review found

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.

Technical5/10Medium risk

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).

Governance1/10High risk

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).

Upgrades4/10Medium risk

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).

Final RecommendationWhat to do about this score

Address the critical access control flaw by reconfiguring the PAUSER_ROLE's administrator to the DEFAULT_ADMIN_ROLE to ensure proper role management and prevent a single point of failure.

Implement robust multi-signature wallet solutions for all critical roles (DEFAULT_ADMIN_ROLE, PAUSER_ROLE, MINTER_ROLE) to mitigate centralization risks and enhance operational security. Clearly document the intended use and implications of the whitelist mechanism, especially during paused states, to manage user expectations and potential economic impacts.

Contract & Record

1 audit on record
TypeBASToken
NetworkBNB Chain
Token age1y
Contract0x0f0d…4e37
Deployer0x9d87…a2b9
Badge for your website
BNB Attestation security record badge

Free for any token on the record. It links to this page and always shows the current score and the date it was checked.

Audit History
  1. Sep 4, 202661Medium
  2. Aug 17, 202684High

Score changes are recorded as dated snapshots — history is append-only and cannot be edited.

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 Is this your token? Publish your own audit on this page