The audit of the RadicleToken contract identified a critical issue due to incomplete source code, preventing a full security assessment of core functionalities. Key helper functions and a significant portion of the transfer logic are missing. Additionally, the contract deviates from the ERC-20 standard by using uint96 for internal balances and allowances, which could lead to integration challenges and potential value truncation. While the contract implements EIP-712 for delegation and permits, the foundational issues with code completeness and non-standard data types pose significant risks.

On-chain security analysis — is it a scam or legit?
Is Radicle 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 audit of the RadicleToken contract identified a critical issue due to incomplete source code, preventing a full security assessment of core functionalities.
Read the full analysis- Ownership status UNKNOWN
- Top-10 concentration > 30%
- LP top1 unlocked holder = 100.0%
- LP top3 unlocked holders = 100.0%
- LP claimed locked but only 0.0% actually locked
- 1 Critical finding(s) from audit
- 1 High finding(s) from audit
- 1 Medium finding(s) from audit
Exact factors
- Ownership status UNKNOWN (owner could not be resolved)
- Top-10 concentration > 30% (76.9% total → 42.1% effective; 18.8% in EOAs, 58.1% in contracts — moderate)
- LP top1 unlocked holder = 100.0% (independent LP — depth risk)
- LP top3 unlocked holders = 100.0% (independent LP — depth risk)
- LP claimed locked but only 0.0% actually locked
- 1 Critical finding(s) from audit
- 1 High finding(s) from audit
- 1 Medium 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, staking58.1%
- Walletsanonymous holders, free to sell18.8%
- Everyone elsethe rest of the supply23.1%
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 4The risk score reads depth across every pair.
The LP tokens of the analysed pool are locked or burned.
0x8da8…30ba0x2ee8…d4020x97b1…b9820xb3ac…68a00x3d50…dd3a0x826f…1e650x0000…8a900x1f2f…f387No privileged address appears among these holders: the unlocked liquidity sits with independent providers, not with the deployer.
Security Findings
CriticalIncomplete Code Provided for Audit
The provided contract code is truncated, specifically the _transferTokens function, which is central to the token's core transfer logic. Additionally, the safe96, sub96, and getChainId helper functions, which are critical for arithmetic safety and EIP-712 domain separation, are not included. This prevents a comprehensive security assessment of critical arithmetic and core functionality, leaving significant portions of the contract unaudited.C-01
Issue
The provided contract code is truncated, specifically the _transferTokens function, which is central to the token's core transfer logic. Additionally, the safe96, sub96, and getChainId helper functions, which are critical for arithmetic safety and EIP-712 domain separation, are not included. This prevents a comprehensive security assessment of critical arithmetic and core functionality, leaving significant portions of the contract unaudited.
Fix
Provide the complete and accurate source code for the RadicleToken contract, including the full _transferTokens function and all referenced helper functions (safe96, sub96, getChainId). Without the complete code, a thorough security assessment cannot be performed.
Status
Unresolved
HighNon-Standard uint96 for ERC-20 Balances and Allowances
The contract uses uint96 for internal balances and allowances mappings, deviating from the ERC-20 standard's expectation of uint256. While external functions cast to uint256, this non-standard internal representation limits the maximum possible balance/allowance to 2^96 - 1 (approximately 7.9 x 10^28), which is significantly less than 2^256 - 1. This could lead to unexpected behavior, truncation, or integration issues with systems expecting full uint256 capacity, potentially causing loss of funds or operational failures if token values exceed uint96 limits.H-01
uint96 for ERC-20 Balances and AllowancesIssue
The contract uses uint96 for internal balances and allowances mappings, deviating from the ERC-20 standard's expectation of uint256. While external functions cast to uint256, this non-standard internal representation limits the maximum possible balance/allowance to 2^96 - 1 (approximately 7.9 x 10^28), which is significantly less than 2^256 - 1. This could lead to unexpected behavior, truncation, or integration issues with systems expecting full uint256 capacity, potentially causing loss of funds or operational failures if token values exceed uint96 limits.
Fix
Consider refactoring the contract to use uint256 for balances and allowances to fully comply with the ERC-20 standard and avoid potential issues with value truncation or integration with other DeFi protocols. If uint96 is intentionally used for gas optimization, ensure all external interfaces and integrations are fully aware of and compatible with this limitation.
Status
Unresolved
MediumDirect uint256 Subtraction for totalSupply
In the burnFrom function, totalSupply -= rawAmount; performs a direct uint256 subtraction without explicit SafeMath or Solidity 0.8+ checked arithmetic. While rawAmount is constrained by safe96 to fit uint96 and balances[account] is checked via sub96, relying on these indirect checks for totalSupply's uint256 arithmetic is less robust. An edge case where totalSupply is less than rawAmount (e.g., due to an external bug or unexpected state) could lead to an underflow if not implicitly handled by the sub96 check on balances[account].M-01
uint256 Subtraction for totalSupplyIssue
In the burnFrom function, totalSupply -= rawAmount; performs a direct uint256 subtraction without explicit SafeMath or Solidity 0.8+ checked arithmetic. While rawAmount is constrained by safe96 to fit uint96 and balances[account] is checked via sub96, relying on these indirect checks for totalSupply's uint256 arithmetic is less robust. An edge case where totalSupply is less than rawAmount (e.g., due to an external bug or unexpected state) could lead to an underflow if not implicitly handled by the sub96 check on balances[account].
Fix
Implement explicit SafeMath for uint256 operations, or upgrade the Solidity compiler to version 0.8.0 or higher, which includes built-in overflow/underflow checks. This would provide a more robust and explicit guarantee against totalSupply underflow.
Status
Unresolved
InfoUse of Older Solidity Compiler Version
The contract is compiled with pragma solidity ^0.7.5;. While not a direct vulnerability, using an older compiler version means the contract does not benefit from security enhancements, bug fixes, and optimizations introduced in newer versions (e.g., implicit overflow/underflow checks in Solidity 0.8.0+).I-01
Issue
The contract is compiled with pragma solidity ^0.7.5;. While not a direct vulnerability, using an older compiler version means the contract does not benefit from security enhancements, bug fixes, and optimizations introduced in newer versions (e.g., implicit overflow/underflow checks in Solidity 0.8.0+).
Fix
Consider upgrading the Solidity compiler version to 0.8.0 or higher. This would allow the contract to leverage newer language features, security improvements, and optimizations, such as built-in overflow/underflow checks, reducing the need for custom SafeMath implementations.
Status
Unresolved
Analysis
AI Copilotas of audit · Sep 4The contract implements a standard ERC-20 token with additional governance features, including EIP-712 based delegation and permit functionality (7.2 Code Security). Nonces are correctly managed to prevent replay attacks in delegateBySig and permit. However, a critical concern is the truncated _transferTokens function and missing safe96, sub96, and getChainId helper functions, which prevents a complete audit of core logic and arithmetic safety (7.1 Architecture, 7.2 Code Security). The use of uint96 for internal balances and allowances deviates from the ERC-20 standard, potentially causing integration issues or value truncation (7.1 Architecture, 7.6 External).
The contract includes a Compound-style delegation mechanism, allowing token holders to delegate their voting power, which is a positive for decentralized governance (7.5 Governance). The burnFrom function allows for token burning, reducing total supply. However, the uint96 limitation on balances and allowances could restrict the economic scale of the token, potentially impacting large-scale operations or future growth (7.4 Economic). The direct uint256 subtraction for totalSupply in burnFrom, while implicitly protected by other checks, is less robust than explicit safe math for uint256 (7.4 Economic).
The RadicleToken contract is a standard implementation and does not incorporate any proxy patterns or upgradeability mechanisms (7.7 Upgrades). Therefore, it is not subject to upgrade-related risks.
It is critical to provide the complete and accurate source code, including all helper functions (safe96, sub96, getChainId) and the full _transferTokens implementation, to enable a comprehensive security audit.
The project should carefully evaluate the implications of using uint96 for internal balances and allowances, considering potential compatibility issues and limitations for future growth, and consider migrating to uint256 for full ERC-20 compliance. Additionally, consider upgrading the Solidity compiler to version 0.8.0 or higher to benefit from built-in overflow/underflow checks and other security enhancements.
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.
- Aug 11, 202660Medium
Score changes are recorded as dated snapshots — history is append-only and cannot be edited.
Frequently Asked Questions
What is the RAD contract address?
The Radicle (RAD) contract on Ethereum is 0x31c8eacbffdd875c74b94b077895bd78cf1e64a3. Compare it with the address the project itself publishes before trading: other contracts can carry the same name and ticker.
Is Radicle a scam?
Quantum Audit's risk score for Radicle is 60/100 (Medium risk) as of Sep 4, 2026, computed by a deterministic function from on-chain facts — Contract verified: Verified; Mint: No mint; Liquidity lock: Locked; Upgradeability: Fixed code. A score is a dated snapshot of those facts, not a guarantee; each one is listed on this page.
Is RAD liquidity locked?
Liquidity lock: Locked (as of Sep 4, 2026). Total DEX liquidity: $1.95M.
Who holds RAD?
As of Sep 4, 2026, the 10 largest holders own 76.9% of the supply. The Holders section on this page shows who they are by holder type.
Would You Like a More Detailed Audit of Radicle?
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