NonfungiblePositionManager.sol
VSS-20260923-QDWLT3HE · generated Sep 23, 2026, 11:30 PM
Verdict is derived from severity counts via the same deterministic formula every VegaSec report uses. NonfungiblePositionManager.sol was scanned from etherscan verified. This is static-analysis triage, not a certification or formal audit attestation.
PDF artifact
Queued artifact pipeline · not blocking on the scan
No PDF artifact has been requested for this report yet. The HTML report and the Markdown export already carry the full disclaimer and limitations inline. PDF synthesis is a queued artifact, not part of the scan path.
Status endpoint
GET /report/solidity/VSS-20260923-QDWLT3HE/export.pdf
Solidity evidence report
77 audit findings
Severity distribution
Executive summary
- 77 findings surfaced (0 critical, 5 high, 22 medium, 7 low, 43 informational).
- HIGH · FullMath.mulDiv(uint256,uint256,uint256) (@uniswap/v3-core/contracts/libraries/FullMath.sol#14-106) has bitwise-xor operator ^ instead of the exponentiation ope (mulDiv) — exploitability medium.
- HIGH · permit-style approval path reaches _approve without incrementing or consuming a nonce — exploitability medium.
- HIGH · Multicall.multicall(bytes[]) (contracts/base/Multicall.sol#11-27) has delegatecall inside a loop in a payable function: (success,result) = address(this).delegat (multicall) — exploitability medium.
- Automated static analysis only. A human operator review has not been attached to this report.
Warnings (6)
- · Unmapped detector slither:unused-return — classified as 'other'
- · Unmapped detector slither:cyclomatic-complexity — classified as 'other'
- · Unmapped detector slither:dead-code — classified as 'other'
- · Unmapped detector slither:redundant-statements — classified as 'other'
- · Unmapped detector slither:too-many-digits — classified as 'other'
- · Unmapped detector slither:unindexed-event-address — classified as 'other'
- highMath / overflowConfidence: mediumExploitability: mediumDetector: slither
FullMath.mulDiv(uint256,uint256,uint256) (@uniswap/v3-core/contracts/libraries/FullMath.sol#14-106) has bitwise-xor operator ^ instead of the exponentiation ope
Evidence
FullMath.mulDiv(uint256,uint256,uint256) (@uniswap/v3-core/contracts/libraries/FullMath.sol#14-106) has bitwise-xor operator ^ instead of the exponentiation operator **: - inv = (3 * denominator) ^ 2 (@uniswap/v3-core/contracts/libraries/FullMath.sol#87)
Exploitability notes
Medium-confidence detection; manual review required before relying on the finding either way.
Remediation
Confirm the solc version uses checked arithmetic (>=0.8) or wrap mutations in OpenZeppelin SafeMath. Avoid unchecked blocks unless explicitly justified.
- highAccess controlConfidence: mediumExploitability: mediumDetector: semgrep
permit-style approval path reaches _approve without incrementing or consuming a nonce
Evidence
permit-style approval path reaches _approve without incrementing or consuming a nonce. Missing nonce accounting enables signature replay. Consume nonces before accepting the signature.
Exploitability notes
Medium-confidence detection; manual review required before relying on the finding either way.
Remediation
Gate privileged functions behind a tested role/ownership pattern (e.g. OpenZeppelin Ownable/AccessControl). Avoid tx.origin for authorization.
- highAccess controlConfidence: mediumExploitability: mediumDetector: slither
Multicall.multicall(bytes[]) (contracts/base/Multicall.sol#11-27) has delegatecall inside a loop in a payable function: (success,result) = address(this).delegat
Evidence
Multicall.multicall(bytes[]) (contracts/base/Multicall.sol#11-27) has delegatecall inside a loop in a payable function: (success,result) = address(this).delegatecall(data[i]) (contracts/base/Multicall.sol#14)
Exploitability notes
Medium-confidence detection; manual review required before relying on the finding either way.
Remediation
Gate privileged functions behind a tested role/ownership pattern (e.g. OpenZeppelin Ownable/AccessControl). Avoid tx.origin for authorization.
- highAccess controlConfidence: highExploitability: highDetector: slither
PeripheryPayments.pay(address,address,address,uint256) (contracts/base/PeripheryPayments.sol#52-69) uses arbitrary from in transferFrom: TransferHelper.safeTran
Evidence
PeripheryPayments.pay(address,address,address,uint256) (contracts/base/PeripheryPayments.sol#52-69) uses arbitrary from in transferFrom: TransferHelper.safeTransferFrom(token,payer,recipient,value) (contracts/base/PeripheryPayments.sol#67)
Exploitability notes
High-confidence detection of a severe pattern; treat as exploitable until disproven by manual review.
Remediation
Gate privileged functions behind a tested role/ownership pattern (e.g. OpenZeppelin Ownable/AccessControl). Avoid tx.origin for authorization.
- highUnchecked callConfidence: mediumExploitability: mediumDetector: slither
PeripheryPayments.pay(address,address,address,uint256) (contracts/base/PeripheryPayments.sol#52-69) ignores return value by IWETH9(WETH9).transfer(recipient,val
Evidence
PeripheryPayments.pay(address,address,address,uint256) (contracts/base/PeripheryPayments.sol#52-69) ignores return value by IWETH9(WETH9).transfer(recipient,value) (contracts/base/PeripheryPayments.sol#61)
Exploitability notes
Medium-confidence detection; manual review required before relying on the finding either way.
Remediation
Check the boolean return of low-level call/delegatecall/send and revert on failure with a descriptive reason string.
- mediumOtherConfidence: mediumExploitability: mediumDetector: slither
ERC721.tokenByIndex(uint256) (@openzeppelin/contracts/token/ERC721/ERC721.sol#180-183) ignores return value by (tokenId,None) = _tokenOwners.at(index) (@openzep
Evidence
ERC721.tokenByIndex(uint256) (@openzeppelin/contracts/token/ERC721/ERC721.sol#180-183) ignores return value by (tokenId,None) = _tokenOwners.at(index) (@openzeppelin/contracts/token/ERC721/ERC721.sol#181)
Exploitability notes
Medium-confidence detection; manual review required before relying on the finding either way.
Remediation
Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.
- mediumOtherConfidence: mediumExploitability: mediumDetector: slither
ERC721._mint(address,uint256) (@openzeppelin/contracts/token/ERC721/ERC721.sol#333-344) ignores return value by _holderTokens[to].add(tokenId) (@openzeppelin/co
Evidence
ERC721._mint(address,uint256) (@openzeppelin/contracts/token/ERC721/ERC721.sol#333-344) ignores return value by _holderTokens[to].add(tokenId) (@openzeppelin/contracts/token/ERC721/ERC721.sol#339)
Exploitability notes
Medium-confidence detection; manual review required before relying on the finding either way.
Remediation
Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.
- mediumOtherConfidence: mediumExploitability: mediumDetector: slither
ERC721._burn(uint256) (@openzeppelin/contracts/token/ERC721/ERC721.sol#356-374) ignores return value by _tokenOwners.remove(tokenId) (@openzeppelin/contracts/to
Evidence
ERC721._burn(uint256) (@openzeppelin/contracts/token/ERC721/ERC721.sol#356-374) ignores return value by _tokenOwners.remove(tokenId) (@openzeppelin/contracts/token/ERC721/ERC721.sol#371)
Exploitability notes
Medium-confidence detection; manual review required before relying on the finding either way.
Remediation
Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.
- mediumOtherConfidence: mediumExploitability: mediumDetector: slither
ERC721._transfer(address,address,uint256) (@openzeppelin/contracts/token/ERC721/ERC721.sol#387-402) ignores return value by _holderTokens[to].add(tokenId) (@ope
Evidence
ERC721._transfer(address,address,uint256) (@openzeppelin/contracts/token/ERC721/ERC721.sol#387-402) ignores return value by _holderTokens[to].add(tokenId) (@openzeppelin/contracts/token/ERC721/ERC721.sol#397)
Exploitability notes
Medium-confidence detection; manual review required before relying on the finding either way.
Remediation
Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.
- mediumUnchecked callDetector: semgrep
Low-level .call to an externally-controlled target
Evidence
Low-level .call to an externally-controlled target. Combined with reentrancy or unchecked return values, this is a common fund-draining pattern.
Exploitability notes
Analyzer did not report a confidence level; treat as unverified until reviewed.
Remediation
Check the boolean return of low-level call/delegatecall/send and revert on failure with a descriptive reason string.
- mediumUnchecked callDetector: semgrep
Low-level .call to an externally-controlled target
Evidence
Low-level .call to an externally-controlled target. Combined with reentrancy or unchecked return values, this is a common fund-draining pattern.
Exploitability notes
Analyzer did not report a confidence level; treat as unverified until reviewed.
Remediation
Check the boolean return of low-level call/delegatecall/send and revert on failure with a descriptive reason string.
- mediumMath / overflowConfidence: mediumExploitability: mediumDetector: slither
FullMath.mulDiv(uint256,uint256,uint256) (@uniswap/v3-core/contracts/libraries/FullMath.sol#14-106) performs a multiplication on the result of a division:
Evidence
FullMath.mulDiv(uint256,uint256,uint256) (@uniswap/v3-core/contracts/libraries/FullMath.sol#14-106) performs a multiplication on the result of a division: - denominator = denominator / twos (@uniswap/v3-core/contracts/libraries/FullMath.sol#67) - inv *= 2 - denominator * inv (@uniswap/v3-core/contracts/libraries/FullMath.sol#92)
Exploitability notes
Medium-confidence detection; manual review required before relying on the finding either way.
Remediation
Confirm the solc version uses checked arithmetic (>=0.8) or wrap mutations in OpenZeppelin SafeMath. Avoid unchecked blocks unless explicitly justified.
- mediumMath / overflowConfidence: mediumExploitability: mediumDetector: slither
TickMath.getSqrtRatioAtTick(int24) (@uniswap/v3-core/contracts/libraries/TickMath.sol#23-54) performs a multiplication on the result of a division:
Evidence
TickMath.getSqrtRatioAtTick(int24) (@uniswap/v3-core/contracts/libraries/TickMath.sol#23-54) performs a multiplication on the result of a division: - ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5) >> 128 (@uniswap/v3-core/contracts/libraries/TickMath.sol#40) - ratio = type()(uint256).max / ratio (@uniswap/v3-core/contracts/libraries/TickMath.sol#48)
Exploitability notes
Medium-confidence detection; manual review required before relying on the finding either way.
Remediation
Confirm the solc version uses checked arithmetic (>=0.8) or wrap mutations in OpenZeppelin SafeMath. Avoid unchecked blocks unless explicitly justified.
- mediumOtherConfidence: mediumExploitability: mediumDetector: slither
NonfungiblePositionManager.mint(INonfungiblePositionManager.MintParams) (contracts/NonfungiblePositionManager.sol#128-182) ignores return value by (None,feeGrow
Evidence
NonfungiblePositionManager.mint(INonfungiblePositionManager.MintParams) (contracts/NonfungiblePositionManager.sol#128-182) ignores return value by (None,feeGrowthInside0LastX128,feeGrowthInside1LastX128,None,None) = pool.positions(positionKey) (contracts/NonfungiblePositionManager.sol#159)
Exploitability notes
Medium-confidence detection; manual review required before relying on the finding either way.
Remediation
Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.
- mediumReentrancyConfidence: mediumExploitability: mediumDetector: slither
Reentrancy in NonfungiblePositionManager.increaseLiquidity(INonfungiblePositionManager.IncreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#198-25
Evidence
Reentrancy in NonfungiblePositionManager.increaseLiquidity(INonfungiblePositionManager.IncreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#198-254): External calls: - (liquidity,amount0,amount1,pool) = addLiquidity(AddLiquidityParams({token0:poolKey.token0,token1:poolKey.token1,fee:poolKey.fee,tickLower:position.tickLower,tickUpper:position.tickUpper,amount0Desired:params.amount0Desired,amount1Desired:params.amount1Desired,amount0Min:params.amount0Min,amount1Min:params.amount1Min,recipient:address(this)})) (contracts/NonfungiblePositionManager.sol#214-227) - (amount0,amount1) = pool.mint(params.recipient,params.tickLower,params.tickUpper,liquidity,abi.encode(MintCallbackData({poolKey:poolKey,payer:msg.sender}))) (contracts/base/LiquidityManagement.sol#80-86) State variables written after the call(s): - position.tokensOwed0 += uint128(FullMath.mulDiv(feeGrowthInside0LastX128 - position.feeGrowthInside0LastX128,position.liquidity,FixedPoint128.Q128)) (contracts/NonfungiblePositionManager.sol#234-240) NonfungiblePositionManager._positions (contracts/NonfungiblePositionManager.sol#61) can be used in cross function reentrancies: - NonfungiblePositionManager._approve(address,uint256) (contracts/NonfungiblePositionManager.sol#396-399) - NonfungiblePositionManager._getAndIncrementNonce(uint256) (contracts/NonfungiblePositionManager.sol#384-386) - NonfungiblePositionManager.burn(uint256) (contracts/NonfungiblePositionManager.sol#377-382) - NonfungiblePositionManager.collect(INonfungiblePositionManager.CollectParams) (contracts/NonfungiblePositionManager.sol#309-374) - NonfungiblePositionManager.decreaseLiquidity(INonfungiblePositionManager.DecreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#257-306) - NonfungiblePositionManager.getApproved(uint256) (contracts/NonfungiblePositionManager.sol#389-393) - NonfungiblePositionManager.increaseLiquidity(INonfungiblePositionManager.IncreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#198-254) - NonfungiblePositionManager.mint(INonfungiblePositionManager.MintParams) (contracts/NonfungiblePositionManager.sol#128-182) - NonfungiblePositionManager.positions(uint256) (contracts/NonfungiblePositionManager.sol#80-116) - position.tokensOwed1 += uint128(FullMath.mulDiv(feeGrowthInside1LastX128 - position.feeGrowthInside1LastX128,position.liquidity,FixedPoint128.Q128)) (contracts/NonfungiblePositionManager.sol#241-247) NonfungiblePositionManager._positions (contracts/NonfungiblePositionManager.sol#61) can be used in cross function reentrancies: - NonfungiblePositionManager._approve(address,uint256) (contracts/NonfungiblePositionManager.sol#396-399) - NonfungiblePositionManager._getAndIncrementNonce(uint256) (contracts/NonfungiblePositionManager.sol#384-386) - NonfungiblePositionManager.burn(uint256) (contracts/NonfungiblePositionManager.sol#377-382) - NonfungiblePositionManager.collect(INonfungiblePositionManager.CollectParams) (contracts/NonfungiblePositionManager.sol#309-374) - NonfungiblePositionManager.decreaseLiquidity(INonfungiblePositionManager.DecreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#257-306) - NonfungiblePositionManager.getApproved(uint256) (contracts/NonfungiblePositionManager.sol#389-393) - NonfungiblePositionManager.increaseLiquidity(INonfungiblePositionManager.IncreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#198-254) - NonfungiblePositionManager.mint(INonfungiblePositionManager.MintParams) (contracts/NonfungiblePositionManager.sol#128-182) - NonfungiblePositionManager.positions(uint256) (contracts/NonfungiblePositionManager.sol#80-116) - position.feeGrowthInside0LastX128 = feeGrowthInside0LastX128 (contracts/NonfungiblePositionManager.sol#249) NonfungiblePositionManager._positions (contracts/NonfungiblePositionManager.sol#61) can be used in cross function reentrancies: - NonfungiblePositionManager._approve(address,uint256) (contracts/NonfungiblePositionManager.sol#396-399) - NonfungiblePositionManager._getAndIncrementNonce(uint256) (contracts/NonfungiblePositionManager.sol#384-386) - NonfungiblePositionManager.burn(uint256) (contracts/NonfungiblePositionManager.sol#377-382) - NonfungiblePositionManager.collect(INonfungiblePositionManager.CollectParams) (contracts/NonfungiblePositionManager.sol#309-374) - NonfungiblePositionManager.decreaseLiquidity(INonfungiblePositionManager.DecreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#257-306) - NonfungiblePositionManager.getApproved(uint256) (contracts/NonfungiblePositionManager.sol#389-393) - NonfungiblePositionManager.increaseLiquidity(INonfungiblePositionManager.IncreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#198-254) - NonfungiblePositionManager.mint(INonfungiblePositionManager.MintParams) (contracts/NonfungiblePositionManager.sol#128-182) - NonfungiblePositionManager.positions(uint256) (contracts/NonfungiblePositionManager.sol#80-116) - position.feeGrowthInside1LastX128 = feeGrowthInside1LastX128 (contracts/NonfungiblePositionManager.sol#250) NonfungiblePositionManager._positions (contracts/NonfungiblePositionManager.sol#61) can be used in cross function reentrancies: - NonfungiblePositionManager._approve(address,uint256) (contracts/NonfungiblePositionManager.sol#396-399) - NonfungiblePositionManager._getAndIncrementNonce(uint256) (contracts/NonfungiblePositionManager.sol#384-386) - NonfungiblePositionManager.burn(uint256) (contracts/NonfungiblePositionManager.sol#377-382) - NonfungiblePositionManager.collect(INonfungiblePositionManager.CollectParams) (contracts/NonfungiblePositionManager.sol#309-374) - NonfungiblePositionManager.decreaseLiquidity(INonfungiblePositionManager.DecreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#257-306) - NonfungiblePositionManager.getApproved(uint256) (contracts/NonfungiblePositionManager.sol#389-393) - NonfungiblePositionManager.increaseLiquidity(INonfungiblePositionManager.IncreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#198-254) - NonfungiblePositionManager.mint(INonfungiblePositionManager.MintParams) (contracts/NonfungiblePositionManager.sol#128-182) - NonfungiblePositionManager.positions(uint256) (contracts/NonfungiblePositionManager.sol#80-116) - position.liquidity += liquidity (contracts/NonfungiblePositionManager.sol#251) NonfungiblePositionManager._positions (contracts/NonfungiblePositionManager.sol#61) can be used in cross function reentrancies: - NonfungiblePositionManager._approve(address,uint256) (contracts/NonfungiblePositionManager.sol#396-399) - NonfungiblePositionManager._getAndIncrementNonce(uint256) (contracts/NonfungiblePositionManager.sol#384-386) - NonfungiblePositionManager.burn(uint256) (contracts/NonfungiblePositionManager.sol#377-382) - NonfungiblePositionManager.collect(INonfungiblePositionManager.CollectParams) (contracts/NonfungiblePositionManager.sol#309-374) - NonfungiblePositionManager.decreaseLiquidity(INonfungiblePositionManager.DecreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#257-306) - NonfungiblePositionManager.getApproved(uint256) (contracts/NonfungiblePositionManager.sol#389-393) - NonfungiblePositionManager.increaseLiquidity(INonfungiblePositionManager.IncreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#198-254) - NonfungiblePositionManager.mint(INonfungiblePositionManager.MintParams) (contracts/NonfungiblePositionManager.sol#128-182) - NonfungiblePositionManager.positions(uint256) (contracts/NonfungiblePositionManager.sol#80-116)
Exploitability notes
Medium-confidence detection; manual review required before relying on the finding either way.
Remediation
Apply the checks-effects-interactions pattern. State writes must happen before external calls, and consider OpenZeppelin's ReentrancyGuard for high-risk entry points.
- mediumOtherConfidence: mediumExploitability: mediumDetector: slither
NonfungiblePositionManager.increaseLiquidity(INonfungiblePositionManager.IncreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#198-254) ignores ret
Evidence
NonfungiblePositionManager.increaseLiquidity(INonfungiblePositionManager.IncreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#198-254) ignores return value by (None,feeGrowthInside0LastX128,feeGrowthInside1LastX128,None,None) = pool.positions(positionKey) (contracts/NonfungiblePositionManager.sol#232)
Exploitability notes
Medium-confidence detection; manual review required before relying on the finding either way.
Remediation
Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.
- mediumReentrancyConfidence: mediumExploitability: mediumDetector: slither
Reentrancy in NonfungiblePositionManager.decreaseLiquidity(INonfungiblePositionManager.DecreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#257-30
Evidence
Reentrancy in NonfungiblePositionManager.decreaseLiquidity(INonfungiblePositionManager.DecreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#257-306): External calls: - (amount0,amount1) = pool.burn(position.tickLower,position.tickUpper,params.liquidity) (contracts/NonfungiblePositionManager.sol#273) State variables written after the call(s): - position.tokensOwed0 += uint128(amount0) + uint128(FullMath.mulDiv(feeGrowthInside0LastX128 - position.feeGrowthInside0LastX128,positionLiquidity,FixedPoint128.Q128)) (contracts/NonfungiblePositionManager.sol#281-289) NonfungiblePositionManager._positions (contracts/NonfungiblePositionManager.sol#61) can be used in cross function reentrancies: - NonfungiblePositionManager._approve(address,uint256) (contracts/NonfungiblePositionManager.sol#396-399) - NonfungiblePositionManager._getAndIncrementNonce(uint256) (contracts/NonfungiblePositionManager.sol#384-386) - NonfungiblePositionManager.burn(uint256) (contracts/NonfungiblePositionManager.sol#377-382) - NonfungiblePositionManager.collect(INonfungiblePositionManager.CollectParams) (contracts/NonfungiblePositionManager.sol#309-374) - NonfungiblePositionManager.decreaseLiquidity(INonfungiblePositionManager.DecreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#257-306) - NonfungiblePositionManager.getApproved(uint256) (contracts/NonfungiblePositionManager.sol#389-393) - NonfungiblePositionManager.increaseLiquidity(INonfungiblePositionManager.IncreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#198-254) - NonfungiblePositionManager.mint(INonfungiblePositionManager.MintParams) (contracts/NonfungiblePositionManager.sol#128-182) - NonfungiblePositionManager.positions(uint256) (contracts/NonfungiblePositionManager.sol#80-116) - position.tokensOwed1 += uint128(amount1) + uint128(FullMath.mulDiv(feeGrowthInside1LastX128 - position.feeGrowthInside1LastX128,positionLiquidity,FixedPoint128.Q128)) (contracts/NonfungiblePositionManager.sol#290-298) NonfungiblePositionManager._positions (contracts/NonfungiblePositionManager.sol#61) can be used in cross function reentrancies: - NonfungiblePositionManager._approve(address,uint256) (contracts/NonfungiblePositionManager.sol#396-399) - NonfungiblePositionManager._getAndIncrementNonce(uint256) (contracts/NonfungiblePositionManager.sol#384-386) - NonfungiblePositionManager.burn(uint256) (contracts/NonfungiblePositionManager.sol#377-382) - NonfungiblePositionManager.collect(INonfungiblePositionManager.CollectParams) (contracts/NonfungiblePositionManager.sol#309-374) - NonfungiblePositionManager.decreaseLiquidity(INonfungiblePositionManager.DecreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#257-306) - NonfungiblePositionManager.getApproved(uint256) (contracts/NonfungiblePositionManager.sol#389-393) - NonfungiblePositionManager.increaseLiquidity(INonfungiblePositionManager.IncreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#198-254) - NonfungiblePositionManager.mint(INonfungiblePositionManager.MintParams) (contracts/NonfungiblePositionManager.sol#128-182) - NonfungiblePositionManager.positions(uint256) (contracts/NonfungiblePositionManager.sol#80-116) - position.feeGrowthInside0LastX128 = feeGrowthInside0LastX128 (contracts/NonfungiblePositionManager.sol#300) NonfungiblePositionManager._positions (contracts/NonfungiblePositionManager.sol#61) can be used in cross function reentrancies: - NonfungiblePositionManager._approve(address,uint256) (contracts/NonfungiblePositionManager.sol#396-399) - NonfungiblePositionManager._getAndIncrementNonce(uint256) (contracts/NonfungiblePositionManager.sol#384-386) - NonfungiblePositionManager.burn(uint256) (contracts/NonfungiblePositionManager.sol#377-382) - NonfungiblePositionManager.collect(INonfungiblePositionManager.CollectParams) (contracts/NonfungiblePositionManager.sol#309-374) - NonfungiblePositionManager.decreaseLiquidity(INonfungiblePositionManager.DecreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#257-306) - NonfungiblePositionManager.getApproved(uint256) (contracts/NonfungiblePositionManager.sol#389-393) - NonfungiblePositionManager.increaseLiquidity(INonfungiblePositionManager.IncreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#198-254) - NonfungiblePositionManager.mint(INonfungiblePositionManager.MintParams) (contracts/NonfungiblePositionManager.sol#128-182) - NonfungiblePositionManager.positions(uint256) (contracts/NonfungiblePositionManager.sol#80-116) - position.feeGrowthInside1LastX128 = feeGrowthInside1LastX128 (contracts/NonfungiblePositionManager.sol#301) NonfungiblePositionManager._positions (contracts/NonfungiblePositionManager.sol#61) can be used in cross function reentrancies: - NonfungiblePositionManager._approve(address,uint256) (contracts/NonfungiblePositionManager.sol#396-399) - NonfungiblePositionManager._getAndIncrementNonce(uint256) (contracts/NonfungiblePositionManager.sol#384-386) - NonfungiblePositionManager.burn(uint256) (contracts/NonfungiblePositionManager.sol#377-382) - NonfungiblePositionManager.collect(INonfungiblePositionManager.CollectParams) (contracts/NonfungiblePositionManager.sol#309-374) - NonfungiblePositionManager.decreaseLiquidity(INonfungiblePositionManager.DecreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#257-306) - NonfungiblePositionManager.getApproved(uint256) (contracts/NonfungiblePositionManager.sol#389-393) - NonfungiblePositionManager.increaseLiquidity(INonfungiblePositionManager.IncreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#198-254) - NonfungiblePositionManager.mint(INonfungiblePositionManager.MintParams) (contracts/NonfungiblePositionManager.sol#128-182) - NonfungiblePositionManager.positions(uint256) (contracts/NonfungiblePositionManager.sol#80-116) - position.liquidity = positionLiquidity - params.liquidity (contracts/NonfungiblePositionManager.sol#303) NonfungiblePositionManager._positions (contracts/NonfungiblePositionManager.sol#61) can be used in cross function reentrancies: - NonfungiblePositionManager._approve(address,uint256) (contracts/NonfungiblePositionManager.sol#396-399) - NonfungiblePositionManager._getAndIncrementNonce(uint256) (contracts/NonfungiblePositionManager.sol#384-386) - NonfungiblePositionManager.burn(uint256) (contracts/NonfungiblePositionManager.sol#377-382) - NonfungiblePositionManager.collect(INonfungiblePositionManager.CollectParams) (contracts/NonfungiblePositionManager.sol#309-374) - NonfungiblePositionManager.decreaseLiquidity(INonfungiblePositionManager.DecreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#257-306) - NonfungiblePositionManager.getApproved(uint256) (contracts/NonfungiblePositionManager.sol#389-393) - NonfungiblePositionManager.increaseLiquidity(INonfungiblePositionManager.IncreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#198-254) - NonfungiblePositionManager.mint(INonfungiblePositionManager.MintParams) (contracts/NonfungiblePositionManager.sol#128-182) - NonfungiblePositionManager.positions(uint256) (contracts/NonfungiblePositionManager.sol#80-116)
Exploitability notes
Medium-confidence detection; manual review required before relying on the finding either way.
Remediation
Apply the checks-effects-interactions pattern. State writes must happen before external calls, and consider OpenZeppelin's ReentrancyGuard for high-risk entry points.
- mediumOtherConfidence: mediumExploitability: mediumDetector: slither
NonfungiblePositionManager.decreaseLiquidity(INonfungiblePositionManager.DecreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#257-306) ignores ret
Evidence
NonfungiblePositionManager.decreaseLiquidity(INonfungiblePositionManager.DecreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#257-306) ignores return value by (None,feeGrowthInside0LastX128,feeGrowthInside1LastX128,None,None) = pool.positions(positionKey) (contracts/NonfungiblePositionManager.sol#279)
Exploitability notes
Medium-confidence detection; manual review required before relying on the finding either way.
Remediation
Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.
- mediumReentrancyConfidence: mediumExploitability: mediumDetector: slither
Reentrancy in NonfungiblePositionManager.collect(INonfungiblePositionManager.CollectParams) (contracts/NonfungiblePositionManager.sol#309-374):
Evidence
Reentrancy in NonfungiblePositionManager.collect(INonfungiblePositionManager.CollectParams) (contracts/NonfungiblePositionManager.sol#309-374): External calls: - pool.burn(position.tickLower,position.tickUpper,0) (contracts/NonfungiblePositionManager.sol#330) - (amount0,amount1) = pool.collect(recipient,position.tickLower,position.tickUpper,amount0Collect,amount1Collect) (contracts/NonfungiblePositionManager.sol#361-367) State variables written after the call(s): - (position.tokensOwed0,position.tokensOwed1) = (tokensOwed0 - amount0Collect,tokensOwed1 - amount1Collect) (contracts/NonfungiblePositionManager.sol#371) NonfungiblePositionManager._positions (contracts/NonfungiblePositionManager.sol#61) can be used in cross function reentrancies: - NonfungiblePositionManager._approve(address,uint256) (contracts/NonfungiblePositionManager.sol#396-399) - NonfungiblePositionManager._getAndIncrementNonce(uint256) (contracts/NonfungiblePositionManager.sol#384-386) - NonfungiblePositionManager.burn(uint256) (contracts/NonfungiblePositionManager.sol#377-382) - NonfungiblePositionManager.collect(INonfungiblePositionManager.CollectParams) (contracts/NonfungiblePositionManager.sol#309-374) - NonfungiblePositionManager.decreaseLiquidity(INonfungiblePositionManager.DecreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#257-306) - NonfungiblePositionManager.getApproved(uint256) (contracts/NonfungiblePositionManager.sol#389-393) - NonfungiblePositionManager.increaseLiquidity(INonfungiblePositionManager.IncreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#198-254) - NonfungiblePositionManager.mint(INonfungiblePositionManager.MintParams) (contracts/NonfungiblePositionManager.sol#128-182) - NonfungiblePositionManager.positions(uint256) (contracts/NonfungiblePositionManager.sol#80-116)
Exploitability notes
Medium-confidence detection; manual review required before relying on the finding either way.
Remediation
Apply the checks-effects-interactions pattern. State writes must happen before external calls, and consider OpenZeppelin's ReentrancyGuard for high-risk entry points.
- mediumOtherConfidence: mediumExploitability: mediumDetector: slither
NonfungiblePositionManager.collect(INonfungiblePositionManager.CollectParams) (contracts/NonfungiblePositionManager.sol#309-374) ignores return value by (None,f
Evidence
NonfungiblePositionManager.collect(INonfungiblePositionManager.CollectParams) (contracts/NonfungiblePositionManager.sol#309-374) ignores return value by (None,feeGrowthInside0LastX128,feeGrowthInside1LastX128,None,None) = pool.positions(PositionKey.compute(address(this),position.tickLower,position.tickUpper)) (contracts/NonfungiblePositionManager.sol#331-332)
Exploitability notes
Medium-confidence detection; manual review required before relying on the finding either way.
Remediation
Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.
- mediumOtherConfidence: mediumExploitability: mediumDetector: slither
LiquidityManagement.uniswapV3MintCallback(uint256,uint256,bytes) (contracts/base/LiquidityManagement.sol#25-35) ignores return value by CallbackValidation.verif
Evidence
LiquidityManagement.uniswapV3MintCallback(uint256,uint256,bytes) (contracts/base/LiquidityManagement.sol#25-35) ignores return value by CallbackValidation.verifyCallback(factory,decoded.poolKey) (contracts/base/LiquidityManagement.sol#31)
Exploitability notes
Medium-confidence detection; manual review required before relying on the finding either way.
Remediation
Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.
- mediumOtherConfidence: mediumExploitability: mediumDetector: slither
LiquidityManagement.addLiquidity(LiquidityManagement.AddLiquidityParams) (contracts/base/LiquidityManagement.sol#51-89) ignores return value by (sqrtPriceX96,No
Evidence
LiquidityManagement.addLiquidity(LiquidityManagement.AddLiquidityParams) (contracts/base/LiquidityManagement.sol#51-89) ignores return value by (sqrtPriceX96,None,None,None,None,None,None) = pool.slot0() (contracts/base/LiquidityManagement.sol#67)
Exploitability notes
Medium-confidence detection; manual review required before relying on the finding either way.
Remediation
Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.
- mediumOtherConfidence: mediumExploitability: mediumDetector: slither
PoolInitializer.createAndInitializePoolIfNecessary(address,address,uint24,uint160) (contracts/base/PoolInitializer.sol#13-31) ignores return value by (sqrtPrice
Evidence
PoolInitializer.createAndInitializePoolIfNecessary(address,address,uint24,uint160) (contracts/base/PoolInitializer.sol#13-31) ignores return value by (sqrtPriceX96Existing,None,None,None,None,None,None) = IUniswapV3Pool(pool).slot0() (contracts/base/PoolInitializer.sol#26)
Exploitability notes
Medium-confidence detection; manual review required before relying on the finding either way.
Remediation
Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.
- mediumUnchecked callDetector: semgrep
Low-level .call to an externally-controlled target
Evidence
Low-level .call to an externally-controlled target. Combined with reentrancy or unchecked return values, this is a common fund-draining pattern.
Exploitability notes
Analyzer did not report a confidence level; treat as unverified until reviewed.
Remediation
Check the boolean return of low-level call/delegatecall/send and revert on failure with a descriptive reason string.
- mediumUnchecked callDetector: semgrep
Low-level .call to an externally-controlled target
Evidence
Low-level .call to an externally-controlled target. Combined with reentrancy or unchecked return values, this is a common fund-draining pattern.
Exploitability notes
Analyzer did not report a confidence level; treat as unverified until reviewed.
Remediation
Check the boolean return of low-level call/delegatecall/send and revert on failure with a descriptive reason string.
- mediumUnchecked callDetector: semgrep
Low-level .call to an externally-controlled target
Evidence
Low-level .call to an externally-controlled target. Combined with reentrancy or unchecked return values, this is a common fund-draining pattern.
Exploitability notes
Analyzer did not report a confidence level; treat as unverified until reviewed.
Remediation
Check the boolean return of low-level call/delegatecall/send and revert on failure with a descriptive reason string.
- mediumUnchecked callDetector: semgrep
Low-level .call to an externally-controlled target
Evidence
Low-level .call to an externally-controlled target. Combined with reentrancy or unchecked return values, this is a common fund-draining pattern.
Exploitability notes
Analyzer did not report a confidence level; treat as unverified until reviewed.
Remediation
Check the boolean return of low-level call/delegatecall/send and revert on failure with a descriptive reason string.
- lowAccess controlConfidence: mediumExploitability: mediumDetector: slither
NonfungiblePositionManager.constructor(address,address,address)._tokenDescriptor_ (contracts/NonfungiblePositionManager.sol#74) lacks a zero-check on :
Evidence
NonfungiblePositionManager.constructor(address,address,address)._tokenDescriptor_ (contracts/NonfungiblePositionManager.sol#74) lacks a zero-check on : - _tokenDescriptor = _tokenDescriptor_ (contracts/NonfungiblePositionManager.sol#76)
Exploitability notes
Medium-confidence detection; manual review required before relying on the finding either way.
Remediation
Gate privileged functions behind a tested role/ownership pattern (e.g. OpenZeppelin Ownable/AccessControl). Avoid tx.origin for authorization.
- lowReentrancyConfidence: mediumExploitability: mediumDetector: slither
Reentrancy in NonfungiblePositionManager.mint(INonfungiblePositionManager.MintParams) (contracts/NonfungiblePositionManager.sol#128-182):
Evidence
Reentrancy in NonfungiblePositionManager.mint(INonfungiblePositionManager.MintParams) (contracts/NonfungiblePositionManager.sol#128-182): External calls: - (liquidity,amount0,amount1,pool) = addLiquidity(AddLiquidityParams({token0:params.token0,token1:params.token1,fee:params.fee,recipient:address(this),tickLower:params.tickLower,tickUpper:params.tickUpper,amount0Desired:params.amount0Desired,amount1Desired:params.amount1Desired,amount0Min:params.amount0Min,amount1Min:params.amount1Min})) (contracts/NonfungiblePositionManager.sol#141-154) - (amount0,amount1) = pool.mint(params.recipient,params.tickLower,params.tickUpper,liquidity,abi.encode(MintCallbackData({poolKey:poolKey,payer:msg.sender}))) (contracts/base/LiquidityManagement.sol#80-86) Event emitted after the call(s): - IncreaseLiquidity(tokenId,liquidity,amount0,amount1) (contracts/NonfungiblePositionManager.sol#181) - Transfer(address(0),to,tokenId) (@openzeppelin/contracts/token/ERC721/ERC721.sol#343) - _mint(params.recipient,(tokenId = _nextId ++)) (contracts/NonfungiblePositionManager.sol#156)
Exploitability notes
Medium-confidence detection; manual review required before relying on the finding either way.
Remediation
Apply the checks-effects-interactions pattern. State writes must happen before external calls, and consider OpenZeppelin's ReentrancyGuard for high-risk entry points.
- lowReentrancyConfidence: mediumExploitability: mediumDetector: slither
Reentrancy in NonfungiblePositionManager.increaseLiquidity(INonfungiblePositionManager.IncreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#198-25
Evidence
Reentrancy in NonfungiblePositionManager.increaseLiquidity(INonfungiblePositionManager.IncreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#198-254): External calls: - (liquidity,amount0,amount1,pool) = addLiquidity(AddLiquidityParams({token0:poolKey.token0,token1:poolKey.token1,fee:poolKey.fee,tickLower:position.tickLower,tickUpper:position.tickUpper,amount0Desired:params.amount0Desired,amount1Desired:params.amount1Desired,amount0Min:params.amount0Min,amount1Min:params.amount1Min,recipient:address(this)})) (contracts/NonfungiblePositionManager.sol#214-227) - (amount0,amount1) = pool.mint(params.recipient,params.tickLower,params.tickUpper,liquidity,abi.encode(MintCallbackData({poolKey:poolKey,payer:msg.sender}))) (contracts/base/LiquidityManagement.sol#80-86) Event emitted after the call(s): - IncreaseLiquidity(params.tokenId,liquidity,amount0,amount1) (contracts/NonfungiblePositionManager.sol#253)
Exploitability notes
Medium-confidence detection; manual review required before relying on the finding either way.
Remediation
Apply the checks-effects-interactions pattern. State writes must happen before external calls, and consider OpenZeppelin's ReentrancyGuard for high-risk entry points.
- lowReentrancyConfidence: mediumExploitability: mediumDetector: slither
Reentrancy in NonfungiblePositionManager.decreaseLiquidity(INonfungiblePositionManager.DecreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#257-30
Evidence
Reentrancy in NonfungiblePositionManager.decreaseLiquidity(INonfungiblePositionManager.DecreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#257-306): External calls: - (amount0,amount1) = pool.burn(position.tickLower,position.tickUpper,params.liquidity) (contracts/NonfungiblePositionManager.sol#273) Event emitted after the call(s): - DecreaseLiquidity(params.tokenId,params.liquidity,amount0,amount1) (contracts/NonfungiblePositionManager.sol#305)
Exploitability notes
Medium-confidence detection; manual review required before relying on the finding either way.
Remediation
Apply the checks-effects-interactions pattern. State writes must happen before external calls, and consider OpenZeppelin's ReentrancyGuard for high-risk entry points.
- lowReentrancyConfidence: mediumExploitability: mediumDetector: slither
Reentrancy in NonfungiblePositionManager.collect(INonfungiblePositionManager.CollectParams) (contracts/NonfungiblePositionManager.sol#309-374):
Evidence
Reentrancy in NonfungiblePositionManager.collect(INonfungiblePositionManager.CollectParams) (contracts/NonfungiblePositionManager.sol#309-374): External calls: - pool.burn(position.tickLower,position.tickUpper,0) (contracts/NonfungiblePositionManager.sol#330) - (amount0,amount1) = pool.collect(recipient,position.tickLower,position.tickUpper,amount0Collect,amount1Collect) (contracts/NonfungiblePositionManager.sol#361-367) Event emitted after the call(s): - Collect(params.tokenId,recipient,amount0Collect,amount1Collect) (contracts/NonfungiblePositionManager.sol#373)
Exploitability notes
Medium-confidence detection; manual review required before relying on the finding either way.
Remediation
Apply the checks-effects-interactions pattern. State writes must happen before external calls, and consider OpenZeppelin's ReentrancyGuard for high-risk entry points.
- lowTimestamp dependenceConfidence: mediumExploitability: mediumDetector: slither
ERC721Permit.permit(address,uint256,uint256,uint8,bytes32,bytes32) (contracts/base/ERC721Permit.sol#55-85) uses timestamp for comparisons
Evidence
ERC721Permit.permit(address,uint256,uint256,uint8,bytes32,bytes32) (contracts/base/ERC721Permit.sol#55-85) uses timestamp for comparisons Dangerous comparisons: - require(bool,string)(_blockTimestamp() <= deadline,Permit expired) (contracts/base/ERC721Permit.sol#63)
Exploitability notes
Medium-confidence detection; manual review required before relying on the finding either way.
Remediation
Treat block.timestamp as a coarse value with miner influence; prefer block-number windows for short-term invariants and add tolerance bands.
- lowGas / DoSConfidence: mediumExploitability: mediumDetector: slither
Multicall.multicall(bytes[]) (contracts/base/Multicall.sol#11-27) has external calls inside a loop: (success,result) = address(this).delegatecall(data[i]) (cont
Evidence
Multicall.multicall(bytes[]) (contracts/base/Multicall.sol#11-27) has external calls inside a loop: (success,result) = address(this).delegatecall(data[i]) (contracts/base/Multicall.sol#14)
Exploitability notes
Medium-confidence detection; manual review required before relying on the finding either way.
Remediation
Cap loop bounds, paginate iteration, and ensure no user can grow a state structure the contract must traverse to make progress.
- informationalLogicConfidence: highExploitability: lowDetector: slither
8 different versions of Solidity are used:
Evidence
8 different versions of Solidity are used: - Version constraint >=0.6.0<0.8.0 is used by: ->=0.6.0<0.8.0 (@openzeppelin/contracts/drafts/IERC20Permit.sol#3) ->=0.6.0<0.8.0 (@openzeppelin/contracts/utils/Context.sol#3) - Version constraint ^0.7.0 is used by: -^0.7.0 (@openzeppelin/contracts/introspection/ERC165.sol#3) -^0.7.0 (@openzeppelin/contracts/introspection/IERC165.sol#3) -^0.7.0 (@openzeppelin/contracts/math/SafeMath.sol#3) -^0.7.0 (@openzeppelin/contracts/token/ERC20/IERC20.sol#3) -^0.7.0 (@openzeppelin/contracts/token/ERC721/ERC721.sol#3) -^0.7.0 (@openzeppelin/contracts/token/ERC721/IERC721.sol#3) -^0.7.0 (@openzeppelin/contracts/token/ERC721/IERC721Enumerable.sol#3) -^0.7.0 (@openzeppelin/contracts/token/ERC721/IERC721Metadata.sol#3) -^0.7.0 (@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol#3) -^0.7.0 (@openzeppelin/contracts/utils/Address.sol#3) -^0.7.0 (@openzeppelin/contracts/utils/EnumerableMap.sol#3) -^0.7.0 (@openzeppelin/contracts/utils/EnumerableSet.sol#3) -^0.7.0 (@openzeppelin/contracts/utils/Strings.sol#3) - Version constraint >=0.5.0 is used by: ->=0.5.0 (@uniswap/v3-core/contracts/interfaces/IUniswapV3Factory.sol#2) ->=0.5.0 (@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol#2) ->=0.5.0 (@uniswap/v3-core/contracts/interfaces/callback/IUniswapV3MintCallback.sol#2) ->=0.5.0 (@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol#2) ->=0.5.0 (@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol#2) ->=0.5.0 (@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol#2) ->=0.5.0 (@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol#2) ->=0.5.0 (@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol#2) ->=0.5.0 (@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol#2) ->=0.5.0 (@uniswap/v3-core/contracts/libraries/TickMath.sol#2) ->=0.5.0 (contracts/base/SelfPermit.sol#2) ->=0.5.0 (contracts/interfaces/INonfungibleTokenPositionDescriptor.sol#2) ->=0.5.0 (contracts/interfaces/IPeripheryImmutableState.sol#2) ->=0.5.0 (contracts/interfaces/external/IERC1271.sol#2) ->=0.5.0 (contracts/interfaces/external/IERC20PermitAllowed.sol#2) ->=0.5.0 (contracts/libraries/LiquidityAmounts.sol#2) ->=0.5.0 (contracts/libraries/PoolAddress.sol#2) ->=0.5.0 (contracts/libraries/PositionKey.sol#2) - Version constraint >=0.4.0 is used by: ->=0.4.0 (@uniswap/v3-core/contracts/libraries/FixedPoint128.sol#2) ->=0.4.0 (@uniswap/v3-core/contracts/libraries/FixedPoint96.sol#2) ->=0.4.0 (@uniswap/v3-core/contracts/libraries/FullMath.sol#2) - Version constraint =0.7.6 is used by: -=0.7.6 (contracts/NonfungiblePositionManager.sol#2) -=0.7.6 (contracts/base/BlockTimestamp.sol#2) -=0.7.6 (contracts/base/ERC721Permit.sol#2) -=0.7.6 (contracts/base/LiquidityManagement.sol#2) -=0.7.6 (contracts/base/Multicall.sol#2) -=0.7.6 (contracts/base/PeripheryImmutableState.sol#2) -=0.7.6 (contracts/base/PeripheryValidation.sol#2) -=0.7.6 (contracts/base/PoolInitializer.sol#2) -=0.7.6 (contracts/interfaces/external/IWETH9.sol#2) -=0.7.6 (contracts/libraries/CallbackValidation.sol#2) - Version constraint >=0.7.5 is used by: ->=0.7.5 (contracts/base/PeripheryPayments.sol#2) ->=0.7.5 (contracts/interfaces/IERC721Permit.sol#2) ->=0.7.5 (contracts/interfaces/IMulticall.sol#2) ->=0.7.5 (contracts/interfaces/INonfungiblePositionManager.sol#2) ->=0.7.5 (contracts/interfaces/IPeripheryPayments.sol#2) ->=0.7.5 (contracts/interfaces/IPoolInitializer.sol#2) ->=0.7.5 (contracts/interfaces/ISelfPermit.sol#2) - Version constraint >=0.7.0 is used by: ->=0.7.0 (contracts/libraries/ChainId.sol#2) - Version constraint >=0.6.0 is used by: ->=0.6.0 (contracts/libraries/TransferHelper.sol#2)
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Re-derive the business rule by hand, write a property-based test that fails on the current path, and only then fix the implementation.
- informationalLogicConfidence: highExploitability: lowDetector: slither
Version constraint >=0.6.0<0.8.0 is too complex.
Evidence
Version constraint >=0.6.0<0.8.0 is too complex. It is used by: - >=0.6.0<0.8.0 (@openzeppelin/contracts/drafts/IERC20Permit.sol#3) - >=0.6.0<0.8.0 (@openzeppelin/contracts/utils/Context.sol#3)
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Re-derive the business rule by hand, write a property-based test that fails on the current path, and only then fix the implementation.
- informationalLogicConfidence: highExploitability: lowDetector: slither
Function IERC20Permit.DOMAIN_SEPARATOR() (@openzeppelin/contracts/drafts/IERC20Permit.sol#50) is not in mixedCase
Evidence
Function IERC20Permit.DOMAIN_SEPARATOR() (@openzeppelin/contracts/drafts/IERC20Permit.sol#50) is not in mixedCase
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Re-derive the business rule by hand, write a property-based test that fails on the current path, and only then fix the implementation.
- informationalLogicConfidence: highExploitability: lowDetector: slither
Version constraint ^0.7.0 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)
Evidence
Version constraint ^0.7.0 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html) - FullInlinerNonExpressionSplitArgumentEvaluationOrder - MissingSideEffectsOnSelectorAccess - AbiReencodingHeadOverflowWithStaticArrayCleanup - DirtyBytesArrayToStorage - DataLocationChangeInInternalOverride - NestedCalldataArrayAbiReencodingSizeValidation - SignedImmutables - ABIDecodeTwoDimensionalArrayMemory - KeccakCaching - EmptyByteArrayCopy - DynamicArrayCleanup. It is used by: - ^0.7.0 (@openzeppelin/contracts/introspection/ERC165.sol#3) - ^0.7.0 (@openzeppelin/contracts/introspection/IERC165.sol#3) - ^0.7.0 (@openzeppelin/contracts/math/SafeMath.sol#3) - ^0.7.0 (@openzeppelin/contracts/token/ERC20/IERC20.sol#3) - ^0.7.0 (@openzeppelin/contracts/token/ERC721/ERC721.sol#3) - ^0.7.0 (@openzeppelin/contracts/token/ERC721/IERC721.sol#3) - ^0.7.0 (@openzeppelin/contracts/token/ERC721/IERC721Enumerable.sol#3) - ^0.7.0 (@openzeppelin/contracts/token/ERC721/IERC721Metadata.sol#3) - ^0.7.0 (@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol#3) - ^0.7.0 (@openzeppelin/contracts/utils/Address.sol#3) - ^0.7.0 (@openzeppelin/contracts/utils/EnumerableMap.sol#3) - ^0.7.0 (@openzeppelin/contracts/utils/EnumerableSet.sol#3) - ^0.7.0 (@openzeppelin/contracts/utils/Strings.sol#3)
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Re-derive the business rule by hand, write a property-based test that fails on the current path, and only then fix the implementation.
- informationalLogicConfidence: highExploitability: lowDetector: slither
Parameter ERC721.safeTransferFrom(address,address,uint256,bytes)._data (@openzeppelin/contracts/token/ERC721/ERC721.sol#245) is not in mixedCase
Evidence
Parameter ERC721.safeTransferFrom(address,address,uint256,bytes)._data (@openzeppelin/contracts/token/ERC721/ERC721.sol#245) is not in mixedCase
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Re-derive the business rule by hand, write a property-based test that fails on the current path, and only then fix the implementation.
- informationalOtherConfidence: mediumExploitability: lowDetector: slither
ERC721._safeMint(address,uint256) (@openzeppelin/contracts/token/ERC721/ERC721.sol#308-310) is never used and should be removed
Evidence
ERC721._safeMint(address,uint256) (@openzeppelin/contracts/token/ERC721/ERC721.sol#308-310) is never used and should be removed
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.
- informationalOtherConfidence: mediumExploitability: lowDetector: slither
ERC721._safeMint(address,uint256,bytes) (@openzeppelin/contracts/token/ERC721/ERC721.sol#316-319) is never used and should be removed
Evidence
ERC721._safeMint(address,uint256,bytes) (@openzeppelin/contracts/token/ERC721/ERC721.sol#316-319) is never used and should be removed
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.
- informationalOtherConfidence: mediumExploitability: lowDetector: slither
ERC721._setTokenURI(uint256,string) (@openzeppelin/contracts/token/ERC721/ERC721.sol#411-414) is never used and should be removed
Evidence
ERC721._setTokenURI(uint256,string) (@openzeppelin/contracts/token/ERC721/ERC721.sol#411-414) is never used and should be removed
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.
- informationalOtherConfidence: mediumExploitability: lowDetector: slither
ERC721._setBaseURI(string) (@openzeppelin/contracts/token/ERC721/ERC721.sol#421-423) is never used and should be removed
Evidence
ERC721._setBaseURI(string) (@openzeppelin/contracts/token/ERC721/ERC721.sol#421-423) is never used and should be removed
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.
- informationalOtherConfidence: mediumExploitability: lowDetector: slither
ERC721._approve(address,uint256) (@openzeppelin/contracts/token/ERC721/ERC721.sol#457-460) is never used and should be removed
Evidence
ERC721._approve(address,uint256) (@openzeppelin/contracts/token/ERC721/ERC721.sol#457-460) is never used and should be removed
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.
- informationalLogicConfidence: highExploitability: lowDetector: slither
Address.isContract(address) (@openzeppelin/contracts/utils/Address.sol#26-35) uses assembly
Evidence
Address.isContract(address) (@openzeppelin/contracts/utils/Address.sol#26-35) uses assembly - INLINE ASM (@openzeppelin/contracts/utils/Address.sol#33)
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Re-derive the business rule by hand, write a property-based test that fails on the current path, and only then fix the implementation.
- informationalUnchecked callConfidence: highExploitability: lowDetector: slither
Low level call in Address.sendValue(address,uint256) (@openzeppelin/contracts/utils/Address.sol#53-59):
Evidence
Low level call in Address.sendValue(address,uint256) (@openzeppelin/contracts/utils/Address.sol#53-59): - (success,None) = recipient.call{value: amount}() (@openzeppelin/contracts/utils/Address.sol#57)
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Check the boolean return of low-level call/delegatecall/send and revert on failure with a descriptive reason string.
- informationalUnchecked callConfidence: highExploitability: lowDetector: slither
Low level call in Address.functionCallWithValue(address,bytes,uint256,string) (@openzeppelin/contracts/utils/Address.sol#114-121):
Evidence
Low level call in Address.functionCallWithValue(address,bytes,uint256,string) (@openzeppelin/contracts/utils/Address.sol#114-121): - (success,returndata) = target.call{value: value}(data) (@openzeppelin/contracts/utils/Address.sol#119)
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Check the boolean return of low-level call/delegatecall/send and revert on failure with a descriptive reason string.
- informationalUnchecked callConfidence: highExploitability: lowDetector: slither
Low level call in Address.functionStaticCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#139-145):
Evidence
Low level call in Address.functionStaticCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#139-145): - (success,returndata) = target.staticcall(data) (@openzeppelin/contracts/utils/Address.sol#143)
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Check the boolean return of low-level call/delegatecall/send and revert on failure with a descriptive reason string.
- informationalUnchecked callConfidence: highExploitability: lowDetector: slither
Low level call in Address.functionDelegateCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#163-169):
Evidence
Low level call in Address.functionDelegateCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#163-169): - (success,returndata) = target.delegatecall(data) (@openzeppelin/contracts/utils/Address.sol#167)
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Check the boolean return of low-level call/delegatecall/send and revert on failure with a descriptive reason string.
- informationalLogicConfidence: highExploitability: lowDetector: slither
Address._verifyCallResult(bool,bytes,string) (@openzeppelin/contracts/utils/Address.sol#171-188) uses assembly
Evidence
Address._verifyCallResult(bool,bytes,string) (@openzeppelin/contracts/utils/Address.sol#171-188) uses assembly - INLINE ASM (@openzeppelin/contracts/utils/Address.sol#180-183)
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Re-derive the business rule by hand, write a property-based test that fails on the current path, and only then fix the implementation.
- informationalOtherConfidence: mediumExploitability: lowDetector: slither
Context._msgData() (@openzeppelin/contracts/utils/Context.sol#20-23) is never used and should be removed
Evidence
Context._msgData() (@openzeppelin/contracts/utils/Context.sol#20-23) is never used and should be removed
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.
- informationalOtherConfidence: highExploitability: lowDetector: slither
Redundant expression "this (@openzeppelin/contracts/utils/Context.sol#21)" inContext (@openzeppelin/contracts/utils/Context.sol#15-24)
Evidence
Redundant expression "this (@openzeppelin/contracts/utils/Context.sol#21)" inContext (@openzeppelin/contracts/utils/Context.sol#15-24)
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.
- informationalLogicConfidence: highExploitability: lowDetector: slither
Version constraint >=0.5.0 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)
Evidence
Version constraint >=0.5.0 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html) - DirtyBytesArrayToStorage - ABIDecodeTwoDimensionalArrayMemory - KeccakCaching - EmptyByteArrayCopy - DynamicArrayCleanup - ImplicitConstructorCallvalueCheck - TupleAssignmentMultiStackSlotComponents - MemoryArrayCreationOverflow - privateCanBeOverridden - SignedArrayStorageCopy - ABIEncoderV2StorageArrayWithMultiSlotElement - DynamicConstructorArgumentsClippedABIV2 - UninitializedFunctionPointerInConstructor - IncorrectEventSignatureInLibraries - ABIEncoderV2PackedStorage. It is used by: - >=0.5.0 (@uniswap/v3-core/contracts/interfaces/IUniswapV3Factory.sol#2) - >=0.5.0 (@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol#2) - >=0.5.0 (@uniswap/v3-core/contracts/interfaces/callback/IUniswapV3MintCallback.sol#2) - >=0.5.0 (@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol#2) - >=0.5.0 (@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol#2) - >=0.5.0 (@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol#2) - >=0.5.0 (@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol#2) - >=0.5.0 (@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol#2) - >=0.5.0 (@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol#2) - >=0.5.0 (@uniswap/v3-core/contracts/libraries/TickMath.sol#2) - >=0.5.0 (contracts/base/SelfPermit.sol#2) - >=0.5.0 (contracts/interfaces/INonfungibleTokenPositionDescriptor.sol#2) - >=0.5.0 (contracts/interfaces/IPeripheryImmutableState.sol#2) - >=0.5.0 (contracts/interfaces/external/IERC1271.sol#2) - >=0.5.0 (contracts/interfaces/external/IERC20PermitAllowed.sol#2) - >=0.5.0 (contracts/libraries/LiquidityAmounts.sol#2) - >=0.5.0 (contracts/libraries/PoolAddress.sol#2) - >=0.5.0 (contracts/libraries/PositionKey.sol#2)
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Re-derive the business rule by hand, write a property-based test that fails on the current path, and only then fix the implementation.
- informationalLogicConfidence: highExploitability: lowDetector: slither
Version constraint >=0.4.0 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)
Evidence
Version constraint >=0.4.0 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html) - DirtyBytesArrayToStorage - KeccakCaching - EmptyByteArrayCopy - DynamicArrayCleanup - TupleAssignmentMultiStackSlotComponents - MemoryArrayCreationOverflow - privateCanBeOverridden - IncorrectEventSignatureInLibraries_0.4.x - ExpExponentCleanup - NestedArrayFunctionCallDecoder - ZeroFunctionSelector - DelegateCallReturnValue - ECRecoverMalformedInput - SkipEmptyStringLiteral - ConstantOptimizerSubtraction - IdentityPrecompileReturnIgnored - HighOrderByteCleanStorage - OptimizerStaleKnowledgeAboutSHA3 - LibrariesNotCallableFromPayableFunctions. It is used by: - >=0.4.0 (@uniswap/v3-core/contracts/libraries/FixedPoint128.sol#2) - >=0.4.0 (@uniswap/v3-core/contracts/libraries/FixedPoint96.sol#2) - >=0.4.0 (@uniswap/v3-core/contracts/libraries/FullMath.sol#2)
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Re-derive the business rule by hand, write a property-based test that fails on the current path, and only then fix the implementation.
- informationalOtherConfidence: mediumExploitability: lowDetector: slither
FixedPoint128.slitherConstructorConstantVariables() (@uniswap/v3-core/contracts/libraries/FixedPoint128.sol#6-8) uses literals with too many digits:
Evidence
FixedPoint128.slitherConstructorConstantVariables() (@uniswap/v3-core/contracts/libraries/FixedPoint128.sol#6-8) uses literals with too many digits: - Q128 = 0x100000000000000000000000000000000 (@uniswap/v3-core/contracts/libraries/FixedPoint128.sol#7)
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.
- informationalOtherConfidence: mediumExploitability: lowDetector: slither
FixedPoint96.slitherConstructorConstantVariables() (@uniswap/v3-core/contracts/libraries/FixedPoint96.sol#7-10) uses literals with too many digits:
Evidence
FixedPoint96.slitherConstructorConstantVariables() (@uniswap/v3-core/contracts/libraries/FixedPoint96.sol#7-10) uses literals with too many digits: - Q96 = 0x1000000000000000000000000 (@uniswap/v3-core/contracts/libraries/FixedPoint96.sol#9)
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.
- informationalLogicConfidence: highExploitability: lowDetector: slither
FullMath.mulDiv(uint256,uint256,uint256) (@uniswap/v3-core/contracts/libraries/FullMath.sol#14-106) uses assembly
Evidence
FullMath.mulDiv(uint256,uint256,uint256) (@uniswap/v3-core/contracts/libraries/FullMath.sol#14-106) uses assembly - INLINE ASM (@uniswap/v3-core/contracts/libraries/FullMath.sol#26-30) - INLINE ASM (@uniswap/v3-core/contracts/libraries/FullMath.sol#35-37) - INLINE ASM (@uniswap/v3-core/contracts/libraries/FullMath.sol#52-54) - INLINE ASM (@uniswap/v3-core/contracts/libraries/FullMath.sol#56-59) - INLINE ASM (@uniswap/v3-core/contracts/libraries/FullMath.sol#66-68) - INLINE ASM (@uniswap/v3-core/contracts/libraries/FullMath.sol#71-73) - INLINE ASM (@uniswap/v3-core/contracts/libraries/FullMath.sol#77-79)
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Re-derive the business rule by hand, write a property-based test that fails on the current path, and only then fix the implementation.
- informationalOtherConfidence: highExploitability: lowDetector: slither
TickMath.getSqrtRatioAtTick(int24) (@uniswap/v3-core/contracts/libraries/TickMath.sol#23-54) has a high cyclomatic complexity (24).
Evidence
TickMath.getSqrtRatioAtTick(int24) (@uniswap/v3-core/contracts/libraries/TickMath.sol#23-54) has a high cyclomatic complexity (24).
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.
- informationalOtherConfidence: mediumExploitability: lowDetector: slither
TickMath.getSqrtRatioAtTick(int24) (@uniswap/v3-core/contracts/libraries/TickMath.sol#23-54) uses literals with too many digits:
Evidence
TickMath.getSqrtRatioAtTick(int24) (@uniswap/v3-core/contracts/libraries/TickMath.sol#23-54) uses literals with too many digits: - ratio = 0x100000000000000000000000000000000 (@uniswap/v3-core/contracts/libraries/TickMath.sol#27)
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.
- informationalLogicConfidence: highExploitability: lowDetector: slither
TickMath.getTickAtSqrtRatio(uint160) (@uniswap/v3-core/contracts/libraries/TickMath.sol#61-204) uses assembly
Evidence
TickMath.getTickAtSqrtRatio(uint160) (@uniswap/v3-core/contracts/libraries/TickMath.sol#61-204) uses assembly - INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#69-73) - INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#74-78) - INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#79-83) - INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#84-88) - INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#89-93) - INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#94-98) - INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#99-103) - INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#104-107) - INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#114-119) - INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#120-125) - INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#126-131) - INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#132-137) - INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#138-143) - INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#144-149) - INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#150-155) - INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#156-161) - INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#162-167) - INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#168-173) - INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#174-179) - INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#180-185) - INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#186-191) - INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#192-196)
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Re-derive the business rule by hand, write a property-based test that fails on the current path, and only then fix the implementation.
- informationalLogicConfidence: highExploitability: lowDetector: slither
Version constraint =0.7.6 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)
Evidence
Version constraint =0.7.6 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html) - FullInlinerNonExpressionSplitArgumentEvaluationOrder - MissingSideEffectsOnSelectorAccess - AbiReencodingHeadOverflowWithStaticArrayCleanup - DirtyBytesArrayToStorage - DataLocationChangeInInternalOverride - NestedCalldataArrayAbiReencodingSizeValidation - SignedImmutables - ABIDecodeTwoDimensionalArrayMemory - KeccakCaching. It is used by: - =0.7.6 (contracts/NonfungiblePositionManager.sol#2) - =0.7.6 (contracts/base/BlockTimestamp.sol#2) - =0.7.6 (contracts/base/ERC721Permit.sol#2) - =0.7.6 (contracts/base/LiquidityManagement.sol#2) - =0.7.6 (contracts/base/Multicall.sol#2) - =0.7.6 (contracts/base/PeripheryImmutableState.sol#2) - =0.7.6 (contracts/base/PeripheryValidation.sol#2) - =0.7.6 (contracts/base/PoolInitializer.sol#2) - =0.7.6 (contracts/interfaces/external/IWETH9.sol#2) - =0.7.6 (contracts/libraries/CallbackValidation.sol#2)
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Re-derive the business rule by hand, write a property-based test that fails on the current path, and only then fix the implementation.
- informationalLogicConfidence: highExploitability: lowDetector: slither
Function ERC721Permit.DOMAIN_SEPARATOR() (contracts/base/ERC721Permit.sol#35-47) is not in mixedCase
Evidence
Function ERC721Permit.DOMAIN_SEPARATOR() (contracts/base/ERC721Permit.sol#35-47) is not in mixedCase
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Re-derive the business rule by hand, write a property-based test that fails on the current path, and only then fix the implementation.
- informationalLogicConfidence: highExploitability: lowDetector: slither
Multicall.multicall(bytes[]) (contracts/base/Multicall.sol#11-27) uses assembly
Evidence
Multicall.multicall(bytes[]) (contracts/base/Multicall.sol#11-27) uses assembly - INLINE ASM (contracts/base/Multicall.sol#19-21)
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Re-derive the business rule by hand, write a property-based test that fails on the current path, and only then fix the implementation.
- informationalUnchecked callConfidence: highExploitability: lowDetector: slither
Low level call in Multicall.multicall(bytes[]) (contracts/base/Multicall.sol#11-27):
Evidence
Low level call in Multicall.multicall(bytes[]) (contracts/base/Multicall.sol#11-27): - (success,result) = address(this).delegatecall(data[i]) (contracts/base/Multicall.sol#14)
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Check the boolean return of low-level call/delegatecall/send and revert on failure with a descriptive reason string.
- informationalLogicConfidence: highExploitability: lowDetector: slither
Variable PeripheryImmutableState.WETH9 (contracts/base/PeripheryImmutableState.sol#12) is not in mixedCase
Evidence
Variable PeripheryImmutableState.WETH9 (contracts/base/PeripheryImmutableState.sol#12) is not in mixedCase
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Re-derive the business rule by hand, write a property-based test that fails on the current path, and only then fix the implementation.
- informationalLogicConfidence: highExploitability: lowDetector: slither
Version constraint >=0.7.5 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)
Evidence
Version constraint >=0.7.5 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html) - FullInlinerNonExpressionSplitArgumentEvaluationOrder - MissingSideEffectsOnSelectorAccess - AbiReencodingHeadOverflowWithStaticArrayCleanup - DirtyBytesArrayToStorage - DataLocationChangeInInternalOverride - NestedCalldataArrayAbiReencodingSizeValidation - SignedImmutables - ABIDecodeTwoDimensionalArrayMemory - KeccakCaching. It is used by: - >=0.7.5 (contracts/base/PeripheryPayments.sol#2) - >=0.7.5 (contracts/interfaces/IERC721Permit.sol#2) - >=0.7.5 (contracts/interfaces/IMulticall.sol#2) - >=0.7.5 (contracts/interfaces/INonfungiblePositionManager.sol#2) - >=0.7.5 (contracts/interfaces/IPeripheryPayments.sol#2) - >=0.7.5 (contracts/interfaces/IPoolInitializer.sol#2) - >=0.7.5 (contracts/interfaces/ISelfPermit.sol#2)
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Re-derive the business rule by hand, write a property-based test that fails on the current path, and only then fix the implementation.
- informationalLogicConfidence: highExploitability: lowDetector: slither
Function IERC721Permit.PERMIT_TYPEHASH() (contracts/interfaces/IERC721Permit.sol#11) is not in mixedCase
Evidence
Function IERC721Permit.PERMIT_TYPEHASH() (contracts/interfaces/IERC721Permit.sol#11) is not in mixedCase
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Re-derive the business rule by hand, write a property-based test that fails on the current path, and only then fix the implementation.
- informationalLogicConfidence: highExploitability: lowDetector: slither
Function IERC721Permit.DOMAIN_SEPARATOR() (contracts/interfaces/IERC721Permit.sol#15) is not in mixedCase
Evidence
Function IERC721Permit.DOMAIN_SEPARATOR() (contracts/interfaces/IERC721Permit.sol#15) is not in mixedCase
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Re-derive the business rule by hand, write a property-based test that fails on the current path, and only then fix the implementation.
- informationalOtherConfidence: highExploitability: lowDetector: slither
Event INonfungibleTokenPositionDescriptor.UpdateTokenRatioPriority(address,int256) (contracts/interfaces/INonfungibleTokenPositionDescriptor.sol#11) has address
Evidence
Event INonfungibleTokenPositionDescriptor.UpdateTokenRatioPriority(address,int256) (contracts/interfaces/INonfungibleTokenPositionDescriptor.sol#11) has address parameters but no indexed parameters
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.
- informationalLogicConfidence: highExploitability: lowDetector: slither
Function IPeripheryImmutableState.WETH9() (contracts/interfaces/IPeripheryImmutableState.sol#11) is not in mixedCase
Evidence
Function IPeripheryImmutableState.WETH9() (contracts/interfaces/IPeripheryImmutableState.sol#11) is not in mixedCase
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Re-derive the business rule by hand, write a property-based test that fails on the current path, and only then fix the implementation.
- informationalLogicConfidence: highExploitability: lowDetector: slither
Version constraint >=0.7.0 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)
Evidence
Version constraint >=0.7.0 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html) - FullInlinerNonExpressionSplitArgumentEvaluationOrder - MissingSideEffectsOnSelectorAccess - AbiReencodingHeadOverflowWithStaticArrayCleanup - DirtyBytesArrayToStorage - DataLocationChangeInInternalOverride - NestedCalldataArrayAbiReencodingSizeValidation - SignedImmutables - ABIDecodeTwoDimensionalArrayMemory - KeccakCaching - EmptyByteArrayCopy - DynamicArrayCleanup. It is used by: - >=0.7.0 (contracts/libraries/ChainId.sol#2)
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Re-derive the business rule by hand, write a property-based test that fails on the current path, and only then fix the implementation.
- informationalLogicConfidence: highExploitability: lowDetector: slither
ChainId.get() (contracts/libraries/ChainId.sol#8-12) uses assembly
Evidence
ChainId.get() (contracts/libraries/ChainId.sol#8-12) uses assembly - INLINE ASM (contracts/libraries/ChainId.sol#9-11)
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Re-derive the business rule by hand, write a property-based test that fails on the current path, and only then fix the implementation.
- informationalLogicConfidence: highExploitability: lowDetector: slither
Version constraint >=0.6.0 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)
Evidence
Version constraint >=0.6.0 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html) - AbiReencodingHeadOverflowWithStaticArrayCleanup - DirtyBytesArrayToStorage - NestedCalldataArrayAbiReencodingSizeValidation - ABIDecodeTwoDimensionalArrayMemory - KeccakCaching - EmptyByteArrayCopy - DynamicArrayCleanup - MissingEscapingInFormatting - ArraySliceDynamicallyEncodedBaseType - ImplicitConstructorCallvalueCheck - TupleAssignmentMultiStackSlotComponents - MemoryArrayCreationOverflow - YulOptimizerRedundantAssignmentBreakContinue. It is used by: - >=0.6.0 (contracts/libraries/TransferHelper.sol#2)
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Re-derive the business rule by hand, write a property-based test that fails on the current path, and only then fix the implementation.
- informationalUnchecked callConfidence: highExploitability: lowDetector: slither
Low level call in TransferHelper.safeTransferFrom(address,address,address,uint256) (contracts/libraries/TransferHelper.sol#13-22):
Evidence
Low level call in TransferHelper.safeTransferFrom(address,address,address,uint256) (contracts/libraries/TransferHelper.sol#13-22): - (success,data) = token.call(abi.encodeWithSelector(IERC20.transferFrom.selector,from,to,value)) (contracts/libraries/TransferHelper.sol#19-20)
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Check the boolean return of low-level call/delegatecall/send and revert on failure with a descriptive reason string.
- informationalUnchecked callConfidence: highExploitability: lowDetector: slither
Low level call in TransferHelper.safeTransfer(address,address,uint256) (contracts/libraries/TransferHelper.sol#29-36):
Evidence
Low level call in TransferHelper.safeTransfer(address,address,uint256) (contracts/libraries/TransferHelper.sol#29-36): - (success,data) = token.call(abi.encodeWithSelector(IERC20.transfer.selector,to,value)) (contracts/libraries/TransferHelper.sol#34)
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Check the boolean return of low-level call/delegatecall/send and revert on failure with a descriptive reason string.
- informationalUnchecked callConfidence: highExploitability: lowDetector: slither
Low level call in TransferHelper.safeApprove(address,address,uint256) (contracts/libraries/TransferHelper.sol#43-50):
Evidence
Low level call in TransferHelper.safeApprove(address,address,uint256) (contracts/libraries/TransferHelper.sol#43-50): - (success,data) = token.call(abi.encodeWithSelector(IERC20.approve.selector,to,value)) (contracts/libraries/TransferHelper.sol#48)
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Check the boolean return of low-level call/delegatecall/send and revert on failure with a descriptive reason string.
- informationalUnchecked callConfidence: highExploitability: lowDetector: slither
Low level call in TransferHelper.safeTransferETH(address,uint256) (contracts/libraries/TransferHelper.sol#56-59):
Evidence
Low level call in TransferHelper.safeTransferETH(address,uint256) (contracts/libraries/TransferHelper.sol#56-59): - (success,None) = to.call{value: value}(new bytes(0)) (contracts/libraries/TransferHelper.sol#57)
Exploitability notes
Informational signal; not directly exploitable without additional context.
Remediation
Check the boolean return of low-level call/delegatecall/send and revert on failure with a descriptive reason string.
Exploit reasoning
Reference-grade reasoning tied to evidence
- 3dbf9872712c38d472fba56c83d8241d23e4c2ff4704cd3a20578a2010c0bfd7 · math-overflowhighConfidence: low
Conditions point at the exploit but at least one precondition needs operator confirmation.
Preconditions
- Arithmetic outside Solidity 0.8+ overflow checks (assembly, unchecked block, or compiler < 0.8)
- Caller-controlled inputs reach the arithmetic without bounds checks
Action
Attacker passes inputs that wrap a balance or counter past its boundary, producing values that pass downstream checks.
Impact
Inflated balances, bypass of cap checks, or denial-of-service when iteration counters wrap.
False-positive caveats
- Unchecked blocks are sometimes intentional (gas optimization on values bounded by other invariants).
- Compiler ≥ 0.8.0 reverts on overflow unless the code explicitly opts out.
Remediation checklist
- Move arithmetic out of the unchecked block.
- Bound caller inputs with explicit require() before arithmetic.
- Upgrade compiler to ≥ 0.8.0 when feasible and remove SafeMath wrappers.
- 2d0e9726cea80789bf4d0939ee6990496081bb1cd1ee894510f1816bf8d26dd9 · access-controlhighConfidence: low
Conditions point at the exploit but at least one precondition needs operator confirmation.
Preconditions
- Sensitive function lacks an explicit caller restriction or relies on tx.origin
- Caller controls the path that reaches the function
Action
Attacker calls the unprotected function from an attacker-controlled address, bypassing the intended restriction.
Impact
Unauthorized state mutation: ownership transfer, parameter changes, balance writes, or admin-only operations executed by a non-admin.
False-positive caveats
- The function may be intentionally callable by anyone (e.g. a public mint with a price guard).
- Access control may live in a modifier the analyzer did not parse.
Remediation checklist
- Replace tx.origin checks with msg.sender against a role registry.
- Add a `onlyRole(...)` or equivalent modifier from a vetted access control library.
- Add unit tests that assert non-admin callers revert.
- 8df7704ab9cfe00c2da752fed8cccc57fd6bb451514a59442e6bf9c65c758055 · access-controlhighConfidence: low
Conditions point at the exploit but at least one precondition needs operator confirmation.
Preconditions
- Sensitive function lacks an explicit caller restriction or relies on tx.origin
- Caller controls the path that reaches the function
Action
Attacker calls the unprotected function from an attacker-controlled address, bypassing the intended restriction.
Impact
Unauthorized state mutation: ownership transfer, parameter changes, balance writes, or admin-only operations executed by a non-admin.
False-positive caveats
- The function may be intentionally callable by anyone (e.g. a public mint with a price guard).
- Access control may live in a modifier the analyzer did not parse.
Remediation checklist
- Replace tx.origin checks with msg.sender against a role registry.
- Add a `onlyRole(...)` or equivalent modifier from a vetted access control library.
- Add unit tests that assert non-admin callers revert.
- a2433ae1fa09014ab19a7e0e602c70e62937b5469a176f9ef5d3fe7dd13341e6 · access-controlhighConfidence: high
Conditions for the exploit are met by the analyzer evidence; treat as likely until disproven by operator review.
Preconditions
- Sensitive function lacks an explicit caller restriction or relies on tx.origin
- Caller controls the path that reaches the function
Action
Attacker calls the unprotected function from an attacker-controlled address, bypassing the intended restriction.
Impact
Unauthorized state mutation: ownership transfer, parameter changes, balance writes, or admin-only operations executed by a non-admin.
False-positive caveats
- The function may be intentionally callable by anyone (e.g. a public mint with a price guard).
- Access control may live in a modifier the analyzer did not parse.
Remediation checklist
- Replace tx.origin checks with msg.sender against a role registry.
- Add a `onlyRole(...)` or equivalent modifier from a vetted access control library.
- Add unit tests that assert non-admin callers revert.
- e4fa387408e0472b411be35cde154d535792d69d27a9c3a36983e8a4d9791c9f · unchecked-callhighConfidence: low
Conditions point at the exploit but at least one precondition needs operator confirmation.
Preconditions
- Low-level call (`.call`, `.delegatecall`, `.send`) whose return value is ignored
- Subsequent logic assumes the call succeeded
Action
Attacker forces the called contract to fail (out of gas, revert) so the outer function keeps accounting for state the call never wrote.
Impact
Funds marked as transferred that never moved; balances debited without the corresponding credit.
False-positive caveats
- Some unchecked sends are intentional (best-effort fee distribution).
- Return value may be checked indirectly via reentrancy guards or balance assertions.
Remediation checklist
- Require the return value of `.call()` / `.send()` and revert on failure.
- Prefer `.transfer()` only for low-gas pure transfers; otherwise use OpenZeppelin Address.functionCall.
- Add tests covering recipient-revert paths.
- fc252972627fbdd0e36c68ce55eba74ac40456364e0413c66b8d28eb47708d5d · othermedium
Not determined
Question: Is this finding exploitable in this specific contract?
Reason: Finding class is 'other'; no deterministic narrative is safe without operator review.
- dfed1ff3381d523594a2421c51dfc100b7b714e88ab5488a8cdfbd473947f056 · othermedium
Not determined
Question: Is this finding exploitable in this specific contract?
Reason: Finding class is 'other'; no deterministic narrative is safe without operator review.
- 969da69b92fdd9312e0e5350495bdd1fe8efef996dd586540e0f1fd9f4c8a6d3 · othermedium
Not determined
Question: Is this finding exploitable in this specific contract?
Reason: Finding class is 'other'; no deterministic narrative is safe without operator review.
- 75f627749452817daf6a70728ec64703897ceba420f766aec2d2fa4bf59556c2 · othermedium
Not determined
Question: Is this finding exploitable in this specific contract?
Reason: Finding class is 'other'; no deterministic narrative is safe without operator review.
- 1207cb446d666c17ce050794e583b1672ccebcc987cd63515ab205bc3cbe281f · unchecked-callmedium
Not determined
Question: Is this finding exploitable in this specific contract?
Reason: Analyzer confidence or exploitability is unknown; the narrative would overclaim without operator review.
- 20ab6b252390a16e695e233ed842caae54c2fb5d3a559803d4986c165646e74e · unchecked-callmedium
Not determined
Question: Is this finding exploitable in this specific contract?
Reason: Analyzer confidence or exploitability is unknown; the narrative would overclaim without operator review.
- 0050a75d84df694cb2e06003126cf739cc8656aeab645135c479fb4ba36e783a · math-overflowmediumConfidence: low
Conditions point at the exploit but at least one precondition needs operator confirmation.
Preconditions
- Arithmetic outside Solidity 0.8+ overflow checks (assembly, unchecked block, or compiler < 0.8)
- Caller-controlled inputs reach the arithmetic without bounds checks
Action
Attacker passes inputs that wrap a balance or counter past its boundary, producing values that pass downstream checks.
Impact
Inflated balances, bypass of cap checks, or denial-of-service when iteration counters wrap.
False-positive caveats
- Unchecked blocks are sometimes intentional (gas optimization on values bounded by other invariants).
- Compiler ≥ 0.8.0 reverts on overflow unless the code explicitly opts out.
Remediation checklist
- Move arithmetic out of the unchecked block.
- Bound caller inputs with explicit require() before arithmetic.
- Upgrade compiler to ≥ 0.8.0 when feasible and remove SafeMath wrappers.
- 04344b40729a6ac15b4498e5801ff43cf3c841e99375b8a565e3347c8226a507 · math-overflowmediumConfidence: low
Conditions point at the exploit but at least one precondition needs operator confirmation.
Preconditions
- Arithmetic outside Solidity 0.8+ overflow checks (assembly, unchecked block, or compiler < 0.8)
- Caller-controlled inputs reach the arithmetic without bounds checks
Action
Attacker passes inputs that wrap a balance or counter past its boundary, producing values that pass downstream checks.
Impact
Inflated balances, bypass of cap checks, or denial-of-service when iteration counters wrap.
False-positive caveats
- Unchecked blocks are sometimes intentional (gas optimization on values bounded by other invariants).
- Compiler ≥ 0.8.0 reverts on overflow unless the code explicitly opts out.
Remediation checklist
- Move arithmetic out of the unchecked block.
- Bound caller inputs with explicit require() before arithmetic.
- Upgrade compiler to ≥ 0.8.0 when feasible and remove SafeMath wrappers.
- d8a64d59c477db5f82abb72b3d6ba15f7b17d88a933933371f40e098acbebc11 · othermedium
Not determined
Question: Is this finding exploitable in this specific contract?
Reason: Finding class is 'other'; no deterministic narrative is safe without operator review.
- 586c552a9b4caa6f82f48e79f5c6d8ed1bd0b5b6d6229f439d6e084a9b542da7 · reentrancymediumConfidence: low
Conditions point at the exploit but at least one precondition needs operator confirmation.
Preconditions
- External call to an untrusted address before the contract's own state is updated
- Contract or callback path reachable from the external caller
- No nonReentrant guard or equivalent on the entry-point function
Action
Attacker contract receives control during the external call and re-enters the original function before the original state write completes, repeating the state-changing side effect.
Impact
Duplicated withdrawals, double-spend on accounting balances, or out-of-order updates to invariants the function relies on.
False-positive caveats
- The external call may be to a known, trusted contract whose behavior is provable.
- The function may be guarded indirectly by a flag or external lock not visible to the analyzer.
Remediation checklist
- Apply checks-effects-interactions: update internal state before any external call.
- Add a nonReentrant guard on the entry-point function.
- Where feasible, pull-payment instead of push-payment on user balances.
- b0ae59f8bd17b0f6c665999900945c4157ada9b6c7c8fdd0b99b7a304d2b098c · othermedium
Not determined
Question: Is this finding exploitable in this specific contract?
Reason: Finding class is 'other'; no deterministic narrative is safe without operator review.
- 6597cf9b721247a95f3ba9d199780ec1276635aaa0f84713a098ee74b357e744 · reentrancymediumConfidence: low
Conditions point at the exploit but at least one precondition needs operator confirmation.
Preconditions
- External call to an untrusted address before the contract's own state is updated
- Contract or callback path reachable from the external caller
- No nonReentrant guard or equivalent on the entry-point function
Action
Attacker contract receives control during the external call and re-enters the original function before the original state write completes, repeating the state-changing side effect.
Impact
Duplicated withdrawals, double-spend on accounting balances, or out-of-order updates to invariants the function relies on.
False-positive caveats
- The external call may be to a known, trusted contract whose behavior is provable.
- The function may be guarded indirectly by a flag or external lock not visible to the analyzer.
Remediation checklist
- Apply checks-effects-interactions: update internal state before any external call.
- Add a nonReentrant guard on the entry-point function.
- Where feasible, pull-payment instead of push-payment on user balances.
- c2663dc7025557764440ffd28e7b0c52d5b89c56a74f01435478b3665813a981 · othermedium
Not determined
Question: Is this finding exploitable in this specific contract?
Reason: Finding class is 'other'; no deterministic narrative is safe without operator review.
- 4c8fe058f0d8a461e78b8a3fc53d23f324313a23041ca9edc7cbd71e6d1c07bb · reentrancymediumConfidence: low
Conditions point at the exploit but at least one precondition needs operator confirmation.
Preconditions
- External call to an untrusted address before the contract's own state is updated
- Contract or callback path reachable from the external caller
- No nonReentrant guard or equivalent on the entry-point function
Action
Attacker contract receives control during the external call and re-enters the original function before the original state write completes, repeating the state-changing side effect.
Impact
Duplicated withdrawals, double-spend on accounting balances, or out-of-order updates to invariants the function relies on.
False-positive caveats
- The external call may be to a known, trusted contract whose behavior is provable.
- The function may be guarded indirectly by a flag or external lock not visible to the analyzer.
Remediation checklist
- Apply checks-effects-interactions: update internal state before any external call.
- Add a nonReentrant guard on the entry-point function.
- Where feasible, pull-payment instead of push-payment on user balances.
- 44fe5123c375162e2a3b66040ae2703cc01f92d863e938a332c1664ba12e896e · othermedium
Not determined
Question: Is this finding exploitable in this specific contract?
Reason: Finding class is 'other'; no deterministic narrative is safe without operator review.
- d542e73431055430e074b703b86b6e896a6f57845961cfbaa5e5a148a09ef6d0 · othermedium
Not determined
Question: Is this finding exploitable in this specific contract?
Reason: Finding class is 'other'; no deterministic narrative is safe without operator review.
- 59239750fbd442f41a4dc094792c0442b1eede044fd7efaa1b1eec3eafef8802 · othermedium
Not determined
Question: Is this finding exploitable in this specific contract?
Reason: Finding class is 'other'; no deterministic narrative is safe without operator review.
- 7067d10c9e94f9acc62e172fdb4ad2bc3cc8e5c4acc890731abb9b604bea2d96 · othermedium
Not determined
Question: Is this finding exploitable in this specific contract?
Reason: Finding class is 'other'; no deterministic narrative is safe without operator review.
- 49c06087b71ae93a1cba1b12681e562ac078b67c0f45c48b8eddb8fac81ff326 · unchecked-callmedium
Not determined
Question: Is this finding exploitable in this specific contract?
Reason: Analyzer confidence or exploitability is unknown; the narrative would overclaim without operator review.
- b8121e39111840e447d325fdb473995f86f3b2606ec3cadeb474bf71bc91e809 · unchecked-callmedium
Not determined
Question: Is this finding exploitable in this specific contract?
Reason: Analyzer confidence or exploitability is unknown; the narrative would overclaim without operator review.
- a3c04c2978374bb868cabb3c84f65ab0bb51f8bb2cb1d4659a93d76b42f22cc5 · unchecked-callmedium
Not determined
Question: Is this finding exploitable in this specific contract?
Reason: Analyzer confidence or exploitability is unknown; the narrative would overclaim without operator review.
- aabfabf3013e14b43eb759c51f6ec04417b13b7b11131112f5a3e3b416f8becc · unchecked-callmedium
Not determined
Question: Is this finding exploitable in this specific contract?
Reason: Analyzer confidence or exploitability is unknown; the narrative would overclaim without operator review.
Audit pipeline
Audit cockpit
Honest stage-by-stage view of what VegaSec ran against this contract. Automated stages do not replace a human operator review.
Audit intake
Passed320ms replay11:30 PMNormalize the submitted contract target and confirm it can enter the Solidity audit lane.
Source acquisition
Passed1.4s replay11:30 PMResolve pasted source or verified explorer source without treating malformed input as demo data.
Toolchain validation
Partial2.3s replay11:30 PMConfirm the configured static analyzers can run and produce parseable output.
- One or more analyzers emitted warnings; report findings remain usable but should be read with limitations.
Static analysis
Partial77 findings8.8s replay11:30 PMRun static analyzers against the sandboxed source and collect raw detector evidence.
- One or more analyzers emitted warnings; report findings remain usable but should be read with limitations.
Finding normalization
Passed77 findings1.1s replay11:30 PMDedupe detectors, classify vulnerability classes and compute severity-weighted risk.
Exploitability review
Partial77 findings1.9s replay11:30 PMFrame automated findings with conservative exploitability and limitation notes.
- Automated exploitability review is conservative and does not replace a manual exploitability assessment.
Remediation draft
Partial77 findings1.5s replay11:30 PMPrepare remediation-oriented evidence for the shareable report artifact.
- Remediation notes are generated from detector evidence and require project-specific engineering review.
Operator review
Blocked0ms replay11:30 PMRecord whether a human operator artifact exists before buyer escalation.
- No operator review artifact is attached to this automated scan.
- Human operator review has not been attached to this automated scan yet.
Finalization
Partial77 findings620ms replay11:30 PMPublish the automated report artifact or explain why the scan failed closed.
Artifact: Automated Solidity report · solidity-2f746d702f766567
- Final report is an automated static-analysis artifact; no operator review artifact is attached.
How to read this report
Score, confidence, ranking: four moving parts, no hand-tuning.
Generated Sep 23, 2026, 11:30 PM · Solidity · NonfungiblePositionManager.sol
Score bands
0-19
AVOID-style triage · this report
Multiple high or critical findings, low source confidence, or unverified context. Public action should pause until a Private Review or a re-scan with better evidence.
20-49
High caution
Notable findings or thin evidence. Worth a Private Review before relying on the artifact.
50-69
Watch
Mixed signals: some evidence, some gaps. Re-scan after material changes to the target.
70-89
Clear surface (automated)
No critical or high findings via static analysis. Not a safety claim: human review is still recommended for diligence work.
90-100
Strong surface (automated)
No critical or high findings, verified source, and high source confidence. Not a safety claim: human review is still recommended for diligence work.
- Score
- Deterministic 0-100 derived from severity counts. Same formula across every report. Lower means more risk.
- Confidence
- Separate axis. Measures how much VegaSec trusts the input data. Low confidence pushes the verdict toward UNKNOWN; the two are never collapsed into one number.
- Ranking / percentile
- Only meaningful within the eligible Trust Index set. Shown on /trust-index when the eligible pool is large enough. Today the public index is a controlled preview.
Private Review is separate
A paid Private Review does not raise the public score on this report. Public score reflects public-source evidence only. Private Review adds operator attestation and a confidential memo, never a score bump.
Source provenance
Verified source via Etherscan
- Chain
- ETHEREUM
- Address
- 0xc364…fe88
- Contract name
- NonfungiblePositionManager
- Compiler
- v0.7.6+commit.7338295f
- License
- -
- EVM version
- Default
- Optimization
- On · 2000 runs
- File count
- 55
- Proxy implementation
- 0xc364…fe88
Provenance is the public-explorer metadata captured at scan time. It is not a re-verification of compilation; the analyzer ran against the source string as returned by the explorer.