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.

On-chain security analysis — is it a scam or legit?
Is BNB Attestation Safe?
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 →The BASToken contract is an ERC20Capped token with custom access control, pausing, and whitelisting functionalities.
Read the full analysis- 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 4Holders
as of audit · Sep 4, 2026- Contractstreasury, vesting, bridge, staking78.0%
- Walletsanonymous holders, free to sell13.8%
- Everyone elsethe rest of the supply8.2%
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- Pancakeswap v3WBNBAnalysed$2.12M99.3%
- UniswapUSDT$8.5K0.4%
- Pancakeswap v3USDT$5.1K0.2%
- UniswapUSDT$9110.0%
- Pancakeswap v3WBNB$1150.0%
- Pancakeswap v2USDT$190.0%
The risk score reads depth across every pair.
The LP tokens of the analysed pool are not locked or burned, so whoever holds them can withdraw that liquidity.
0x65cc…cb7d0x5c62…fed60x310d…035f0x0044…fcbe0xa253…fa540x91d3…1d8f0xe0eb…a2cd0x1458…8fbe0x3c9a…625bNo privileged address appears among these holders: the unlocked liquidity sits with independent providers, not with the deployer.
Security Findings
CriticalPAUSER_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
HighHigh 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
MediumWhitelist 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
LowMinter 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
InfoContract 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 4The 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).
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).
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).
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
Free for any token on the record. It links to this page and always shows the current score and the date it was checked.
- Sep 4, 202661Medium
- 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