Quantum Audit Logo

Is GRVT Safe?

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

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

GRVT GRVT
0x46f2…1be7
BNB Chain Not verifiedLast checked 3d ago 1 audit on record
How is this score calculated? → Critical Risk
Executive SummaryAI Copilot

The BridgeToken contract, implemented as a BeaconProxy, provides standard ERC-20 functionalities including minting, burning, and EIP-712 permit. The contract exhibits good adherence to Solidity 0.8+ safety features and standard ERC-20 patterns. However, a critical vulnerability was identified in the EIP-712 permit implementation, where the `verifyingContract` in the domain separator incorrectly resolves to the implementation address instead of the proxy address, rendering the permit functionality unusable. Additionally, the owner maintains significant centralized control over token supply and metadata.

1 Critical1 High1 Informational
Volume 24h
$20.6K
Liquidity
$21.7K
Price
$0.1586
Token Age
11d
Top 10 Holders
90.8%

Security Findings

Critical

EIP-712 Permit `verifyingContract` Mismatch in Proxy

C-01The `_buildDomainSeparator` function, used to construct the EIP-712 domain separator for the `permit` function, incorrectly uses `address(this)` to determine the `verifyingContract`. In a proxy setup (like the BeaconProxy used here), `address(this)` within the implementation contract refers to the implementation's address, not the proxy's address. This means that any `permit` signatures generated by users will be invalid when verified by the proxy contract, rendering the `permit` functionality completely unusable.
IssueThe `_buildDomainSeparator` function, used to construct the EIP-712 domain separator for the `permit` function, incorrectly uses `address(this)` to determine the `verifyingContract`. In a proxy setup (like the BeaconProxy used here), `address(this)` within the implementation contract refers to the implementation's address, not the proxy's address. This means that any `permit` signatures generated by users will be invalid when verified by the proxy contract, rendering the `permit` functionality completely unusable.
FixTo correctly implement EIP-712 `permit` in a proxy contract, the `verifyingContract` in the domain separator must be the address of the proxy. This can be achieved by: 1. Storing the proxy's address during initialization (e.g., `_initialize(address(this))`). 2. Using OpenZeppelin's `ERC712` contract and calling `_ERC712_init(name, version)` in the initializer, which correctly handles the `_domainSeparatorV4` for proxies. The `_initializePermitStateIfNeeded` logic also needs to be updated to ref…
StatusUnresolved
High

Centralized Control by Owner

H-01The contract grants significant centralized control to the `owner` address. The owner can `mint` new tokens, `burn` existing tokens, and `updateDetails` (name, symbol, sequence). While this level of control might be necessary for a bridge token's operational model, it introduces a single point of failure and a high trust requirement in the owner. A compromised owner key or malicious owner could lead to arbitrary supply manipulation or token identity changes.
IssueThe contract grants significant centralized control to the `owner` address. The owner can `mint` new tokens, `burn` existing tokens, and `updateDetails` (name, symbol, sequence). While this level of control might be necessary for a bridge token's operational model, it introduces a single point of failure and a high trust requirement in the owner. A compromised owner key or malicious owner could lead to arbitrary supply manipulation or token identity changes.
FixTo mitigate the risks associated with centralized control, consider implementing a multi-signature wallet for the owner address, if not already in place. For critical functions like `mint` and `burn`, explore implementing a time-lock mechanism or a more decentralized governance process that requires multiple approvals or community consensus for execution.
StatusUnresolved
Info

`increaseAllowance`/`decreaseAllowance` Front-Running Risk

I-01The `increaseAllowance` and `decreaseAllowance` functions, while standard ERC-20 implementations, are susceptible to a known front-running attack. An attacker can observe a pending transaction to `increaseAllowance` or `decreaseAllowance`, and then quickly execute a `transferFrom` transaction to spend the original allowance before the new allowance is set. This can lead to the spender being able to spend more or less than the owner intended.
IssueThe `increaseAllowance` and `decreaseAllowance` functions, while standard ERC-20 implementations, are susceptible to a known front-running attack. An attacker can observe a pending transaction to `increaseAllowance` or `decreaseAllowance`, and then quickly execute a `transferFrom` transaction to spend the original allowance before the new allowance is set. This can lead to the spender being able to spend more or less than the owner intended.
FixThis is an inherent design limitation of the ERC-20 standard and not a bug in this specific contract's implementation. Users should be aware of this risk when interacting with `increaseAllowance` and `decreaseAllowance`. For critical operations, it is often safer to first `approve(spender, 0)` to reset the allowance, and then `approve(spender, newAmount)` to set the desired allowance, though this requires two transactions.
StatusUnresolved

Category Ratings

TechnicalMedium4/10

The contract implements standard ERC-20 functionalities (7.2 Code Security) with appropriate checks for zero addresses and sufficient balances, leveraging Solidity 0.8+ for automatic integer overflow/underflow protection. No reentrancy vulnerabilities were identified due to the absence of external calls in critical state-changing functions. However, a critical flaw exists in the EIP-712 permit implementation, where the `verifyingContract` is incorrectly set to the implementation address instead of the proxy address, making the `permit` function unusable (7.2 Code Security, 7.7 Upgrades).

GovernanceHigh1/10

The contract's economic model (7.4 Economic) grants the owner significant centralized control, including the ability to `mint` and `burn` tokens, and `updateDetails` such as name and symbol. While this is typical for a bridge token managed by a bridge operator, it represents a high centralization risk. The owner address is noted as an 'Other-Contract' (7.8 Operations), which suggests a multi-sig or similar controlled entity, mitigating some of the single-point-of-failure risk.

UpgradesHigh1/10

The contract utilizes the BeaconProxy pattern (7.1 Architecture, 7.7 Upgrades), which provides a robust and efficient mechanism for upgradeability. The `initializer` modifier correctly prevents re-initialization of the logic contract. However, the EIP-712 permit functionality's reliance on `address(this)` within the implementation context creates a critical issue for proxy deployments, as it does not correctly identify the proxy contract as the `verifyingContract` (7.7 Upgrades).

Security Checklist

Contract VerifiedPass
Ownership RenouncedFail
No Mint FunctionFail
Liquidity LockedFail
Not a ProxyFail

Proxy Upgrade Controls

Proxy TypeBeacon
ImplementationVerified source

Holder Composition

11.5% in wallets79.3% in contracts
Effective Concentration43.2%

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

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 Holder60.9%
Top-3 Unlocked97.5%

Key Addresses

Deployer
0x22b1…79bf
Unlocked LP Held By
0x575e…fe980xf949…02980xe6ac…ec1f0xf022…cdbe0x8d17…35cc0x98c5…6e290x66cb…cf59

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

What Raised This Score

  • Ownership NOT renounced — owner is a contract (governance/executor, not an EOA)
  • Mintable supply — no cap found, dilution unbounded
  • Proxy contract (upgradeable — admin can replace logic)
  • Complex proxy pattern (BEACON)
  • Top-10 concentration > 30% (90.8% total → 43.2% effective; 11.5% in EOAs, 79.3% in contracts — moderate)
  • Liquidity not locked, but no owner/deployer address holds LP — market-depth risk, not rug risk
  • Liquidity < $50k ($22,169 across 4 pairs — thin market)
  • LP top1 unlocked holder = 60.9% (independent LP — depth risk, pool = 98% of DEX liquidity)
  • LP top3 unlocked holders = 97.5% (independent LP — depth risk, pool = 98% of DEX liquidity)
  • Token age < 30 days (still settling)
  • 1 Critical finding(s) from audit
  • 1 High 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

Based Token (BASED)Critical RiskFalcon Finance (FF)Critical RiskKGENCritical RiskBinance Brokers (BBROKERS)Critical RiskSpaceX (SPCXB)Critical RiskLorenzo Governance Token (BANK)Critical Risk

Would You Like a More Detailed Audit of GRVT?

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

Get Detailed Audit