ContractLens · independent automated report

DegenToken on Base

0x4ed4e862860bed51a9570b96d89af5e1b0efefed · chain 8453 · compiler 0.8.20+commit.a1b79de6 · Sourcify exact_match · generated 2026-10-06 17:10 UTC

Summary

Findings by impact: {"High": 1, "Medium": 9, "Low": 7, "Informational": 34}

Who holds the keys

Upgradeability

Not a proxy.

Privileged functions (5)

Static analysis (High, Medium, Low)

ImpactConfidenceCheckDetail
HighMediumincorrect-exp
Math.mulDiv(uint256,uint256,uint256) (Math.sol#123-202) has bitwise-xor operator ^ instead of the exponentiation operator **: 
	 - inverse = (3 * denominator) ^ 2 (Math.sol#184)
MediumMediumdivide-before-multiply
Math.mulDiv(uint256,uint256,uint256) (Math.sol#123-202) performs a multiplication on the result of a division:
	- denominator = denominator / twos (Math.sol#169)
	- inverse *= 2 - denominator * inverse (Math.sol#188)
MediumMediumdivide-before-multiply
Math.mulDiv(uint256,uint256,uint256) (Math.sol#123-202) performs a multiplication on the result of a division:
	- denominator = denominator / twos (Math.sol#169)
	- inverse *= 2 - denominator * inverse (Math.sol#191)
MediumMediumdivide-before-multiply
Math.mulDiv(uint256,uint256,uint256) (Math.sol#123-202) performs a multiplication on the result of a division:
	- prod0 = prod0 / twos (Math.sol#172)
	- result = prod0 * inverse (Math.sol#199)
MediumMediumdivide-before-multiply
Math.mulDiv(uint256,uint256,uint256) (Math.sol#123-202) performs a multiplication on the result of a division:
	- denominator = denominator / twos (Math.sol#169)
	- inverse *= 2 - denominator * inverse (Math.sol#190)
MediumMediumdivide-before-multiply
Math.mulDiv(uint256,uint256,uint256) (Math.sol#123-202) performs a multiplication on the result of a division:
	- denominator = denominator / twos (Math.sol#169)
	- inverse *= 2 - denominator * inverse (Math.sol#193)
MediumMediumdivide-before-multiply
Math.mulDiv(uint256,uint256,uint256) (Math.sol#123-202) performs a multiplication on the result of a division:
	- denominator = denominator / twos (Math.sol#169)
	- inverse *= 2 - denominator * inverse (Math.sol#189)
MediumMediumdivide-before-multiply
Math.mulDiv(uint256,uint256,uint256) (Math.sol#123-202) performs a multiplication on the result of a division:
	- denominator = denominator / twos (Math.sol#169)
	- inverse = (3 * denominator) ^ 2 (Math.sol#184)
MediumMediumdivide-before-multiply
Math.mulDiv(uint256,uint256,uint256) (Math.sol#123-202) performs a multiplication on the result of a division:
	- denominator = denominator / twos (Math.sol#169)
	- inverse *= 2 - denominator * inverse (Math.sol#192)
MediumMediumunused-return
Time.get(Time.Delay) (Time.sol#90-93) ignores return value by (delay,None,None) = self.getFull() (Time.sol#91)
LowHighshadowing-local
ERC20Permit.constructor(string).name (ERC20Permit.sol#39) shadows:
	- ERC20.name() (ERC20.sol#58-60) (function)
	- IERC20Metadata.name() (IERC20Metadata.sol#15) (function)
LowHighshadowing-local
DegenToken.nonces(address).owner (DegenToken.sol#148) shadows:
	- Ownable.owner() (Ownable.sol#56-58) (function)
LowMediumtimestamp
Votes.delegateBySig(address,uint256,uint256,uint8,bytes32,bytes32) (Votes.sol#142-161) uses timestamp for comparisons
	Dangerous comparisons:
	- block.timestamp > expiry (Votes.sol#150)
LowMediumtimestamp
DegenToken.constructor(uint256) (DegenToken.sol#80-97) uses timestamp for comparisons
	Dangerous comparisons:
	- mintingAllowedAfter_ < block.timestamp (DegenToken.sol#87)
LowMediumtimestamp
Time._getFullAt(Time.Delay,uint48) (Time.sol#74-77) uses timestamp for comparisons
	Dangerous comparisons:
	- effect <= timepoint (Time.sol#76)
LowMediumtimestamp
ERC20Permit.permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (ERC20Permit.sol#44-67) uses timestamp for comparisons
	Dangerous comparisons:
	- block.timestamp > deadline (ERC20Permit.sol#53)
LowMediumtimestamp
DegenToken.mint(address,uint96) (DegenToken.sol#104-122) uses timestamp for comparisons
	Dangerous comparisons:
	- block.timestamp < mintingAllowedAfter (DegenToken.sol#105)

Generated by ContractLens from the Sourcify-verified source and live on-chain reads. This is automated static analysis plus reviewer notes, not a full manual audit. Findings can be false positives. Re-run any time: swarm-t3.github.io/contractlens.