{"analyzer_versions":{"semgrep":"1.163.0","solc":"0.7.6"},"body":{"audit_stages":[{"blockers":[],"completed_at":"2026-09-23T23:30:49.637Z","description":"Normalize the submitted contract target and confirm it can enter the Solidity audit lane.","elapsed_ms":320,"id":"intake","label":"Audit intake","limitations":[],"next_step":"Acquire verified source or scan the pasted Solidity source.","order":1,"status":"passed"},{"blockers":[],"completed_at":"2026-09-23T23:30:49.637Z","description":"Resolve pasted source or verified explorer source without treating malformed input as demo data.","elapsed_ms":1450,"id":"source_acquisition","label":"Source acquisition","limitations":[],"next_step":"Validate the analyzer toolchain against the acquired source.","order":2,"status":"passed"},{"blockers":[],"completed_at":"2026-09-23T23:30:49.637Z","description":"Confirm the configured static analyzers can run and produce parseable output.","elapsed_ms":2300,"id":"toolchain_validation","label":"Toolchain validation","limitations":["One or more analyzers emitted warnings; report findings remain usable but should be read with limitations."],"next_step":"Run static analysis and capture raw detector evidence.","order":3,"status":"partial"},{"blockers":[],"completed_at":"2026-09-23T23:30:49.637Z","description":"Run static analyzers against the sandboxed source and collect raw detector evidence.","elapsed_ms":8800,"findings_count":77,"id":"static_analysis","label":"Static analysis","limitations":["One or more analyzers emitted warnings; report findings remain usable but should be read with limitations."],"next_step":"Normalize detector output into one deduped finding set.","order":4,"status":"partial"},{"blockers":[],"completed_at":"2026-09-23T23:30:49.637Z","description":"Dedupe detectors, classify vulnerability classes and compute severity-weighted risk.","elapsed_ms":1150,"findings_count":77,"id":"finding_normalization","label":"Finding normalization","limitations":[],"next_step":"Review exploitability conservatively against confidence and limitations.","order":5,"status":"passed"},{"blockers":[],"completed_at":"2026-09-23T23:30:49.637Z","description":"Frame automated findings with conservative exploitability and limitation notes.","elapsed_ms":1900,"findings_count":77,"id":"exploitability_review","label":"Exploitability review","limitations":["Automated exploitability review is conservative and does not replace a manual exploitability assessment."],"next_step":"Draft remediation notes from the normalized evidence.","order":6,"status":"partial"},{"blockers":[],"completed_at":"2026-09-23T23:30:49.637Z","description":"Prepare remediation-oriented evidence for the shareable report artifact.","elapsed_ms":1500,"findings_count":77,"id":"remediation_draft","label":"Remediation draft","limitations":["Remediation notes are generated from detector evidence and require project-specific engineering review."],"next_step":"Attach an operator review artifact before claiming human review.","order":7,"status":"partial"},{"blockers":["No operator review artifact is attached to this automated scan."],"completed_at":"2026-09-23T23:30:49.637Z","description":"Record whether a human operator artifact exists before buyer escalation.","elapsed_ms":0,"id":"operator_review","label":"Operator review","limitations":["Human operator review has not been attached to this automated scan yet."],"next_step":"Attach a real operator review artifact before claiming human review.","order":8,"status":"blocked"},{"artifact":{"created_at":"2026-09-23T23:30:49.637Z","id":"solidity-2f746d702f766567","label":"Automated Solidity report","type":"report"},"blockers":[],"completed_at":"2026-09-23T23:30:49.637Z","description":"Publish the automated report artifact or explain why the scan failed closed.","elapsed_ms":620,"findings_count":77,"id":"finalization","label":"Finalization","limitations":["Final report is an automated static-analysis artifact; no operator review artifact is attached."],"next_step":"Share the report with explicit limitations and review state.","order":9,"status":"partial"}],"counts":{"access-control":4,"centralization":0,"flash-loan":0,"front-running":0,"gas-dos":1,"logic":22,"math-overflow":3,"oracle-manipulation":0,"other":23,"reentrancy":7,"timestamp-dependence":1,"unchecked-call":16,"uninitialized":0},"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."],"findings":[{"class":"math-overflow","component":"mulDiv","confidence":"medium","description":"FullMath.mulDiv(uint256,uint256,uint256) (@uniswap/v3-core/contracts/libraries/FullMath.sol#14-106) has bitwise-xor operator ^ instead of the exponentiation operator **: \n\t - inv = (3 * denominator) ^ 2 (@uniswap/v3-core/contracts/libraries/FullMath.sol#87)\n","end_line":106,"exploitability":"medium","exploitability_note":"Medium-confidence detection; manual review required before relying on the finding either way.","file":"@uniswap/v3-core/contracts/libraries/FullMath.sol","id":"3dbf9872712c38d472fba56c83d8241d23e4c2ff4704cd3a20578a2010c0bfd7","line":14,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-exp"],"remediation":"Confirm the solc version uses checked arithmetic (>=0.8) or wrap mutations in OpenZeppelin SafeMath. Avoid unchecked blocks unless explicitly justified.","rule_id":"slither:incorrect-exp","severity":"high","source":"slither","title":"FullMath.mulDiv(uint256,uint256,uint256) (@uniswap/v3-core/contracts/libraries/FullMath.sol#14-106) has bitwise-xor operator ^ instead of the exponentiation ope"},{"class":"access-control","confidence":"medium","description":"permit-style approval path reaches _approve without incrementing or consuming a nonce. Missing nonce accounting enables signature replay. Consume nonces before accepting the signature.","end_line":84,"exploitability":"medium","exploitability_note":"Medium-confidence detection; manual review required before relying on the finding either way.","file":"contracts/base/ERC721Permit.sol","id":"2d0e9726cea80789bf4d0939ee6990496081bb1cd1ee894510f1816bf8d26dd9","line":55,"references":["https://github.com/JE4NVRG/vegasec/blob/main/apps/web/src/lib/risk/solidity/semgrep-rules/vegasec-solidity.yml#vegasec-permit-missing-nonce-increment"],"remediation":"Gate privileged functions behind a tested role/ownership pattern (e.g. OpenZeppelin Ownable/AccessControl). Avoid tx.origin for authorization.","rule_id":"semgrep:vegasec-permit-missing-nonce-increment","severity":"high","source":"semgrep","title":"permit-style approval path reaches _approve without incrementing or consuming a nonce"},{"class":"access-control","component":"multicall","confidence":"medium","description":"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)\n","end_line":27,"exploitability":"medium","exploitability_note":"Medium-confidence detection; manual review required before relying on the finding either way.","file":"contracts/base/Multicall.sol","id":"8df7704ab9cfe00c2da752fed8cccc57fd6bb451514a59442e6bf9c65c758055","line":11,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#delegatecall-loop"],"remediation":"Gate privileged functions behind a tested role/ownership pattern (e.g. OpenZeppelin Ownable/AccessControl). Avoid tx.origin for authorization.","rule_id":"slither:delegatecall-loop","severity":"high","source":"slither","title":"Multicall.multicall(bytes[]) (contracts/base/Multicall.sol#11-27) has delegatecall inside a loop in a payable function: (success,result) = address(this).delegat"},{"class":"access-control","component":"pay","confidence":"high","description":"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)\n","end_line":69,"exploitability":"high","exploitability_note":"High-confidence detection of a severe pattern; treat as exploitable until disproven by manual review.","file":"contracts/base/PeripheryPayments.sol","id":"a2433ae1fa09014ab19a7e0e602c70e62937b5469a176f9ef5d3fe7dd13341e6","line":52,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#arbitrary-send-erc20"],"remediation":"Gate privileged functions behind a tested role/ownership pattern (e.g. OpenZeppelin Ownable/AccessControl). Avoid tx.origin for authorization.","rule_id":"slither:arbitrary-send-erc20","severity":"high","source":"slither","title":"PeripheryPayments.pay(address,address,address,uint256) (contracts/base/PeripheryPayments.sol#52-69) uses arbitrary from in transferFrom: TransferHelper.safeTran"},{"class":"unchecked-call","component":"pay","confidence":"medium","description":"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)\n","end_line":69,"exploitability":"medium","exploitability_note":"Medium-confidence detection; manual review required before relying on the finding either way.","file":"contracts/base/PeripheryPayments.sol","id":"e4fa387408e0472b411be35cde154d535792d69d27a9c3a36983e8a4d9791c9f","line":52,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#unchecked-transfer"],"remediation":"Check the boolean return of low-level call/delegatecall/send and revert on failure with a descriptive reason string.","rule_id":"slither:unchecked-transfer","severity":"high","source":"slither","title":"PeripheryPayments.pay(address,address,address,uint256) (contracts/base/PeripheryPayments.sol#52-69) ignores return value by IWETH9(WETH9).transfer(recipient,val"},{"class":"other","component":"tokenByIndex","confidence":"medium","description":"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)\n","end_line":183,"exploitability":"medium","exploitability_note":"Medium-confidence detection; manual review required before relying on the finding either way.","file":"@openzeppelin/contracts/token/ERC721/ERC721.sol","id":"fc252972627fbdd0e36c68ce55eba74ac40456364e0413c66b8d28eb47708d5d","line":180,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#unused-return"],"remediation":"Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.","rule_id":"slither:unused-return","severity":"medium","source":"slither","title":"ERC721.tokenByIndex(uint256) (@openzeppelin/contracts/token/ERC721/ERC721.sol#180-183) ignores return value by (tokenId,None) = _tokenOwners.at(index) (@openzep"},{"class":"other","component":"_mint","confidence":"medium","description":"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)\n","end_line":344,"exploitability":"medium","exploitability_note":"Medium-confidence detection; manual review required before relying on the finding either way.","file":"@openzeppelin/contracts/token/ERC721/ERC721.sol","id":"dfed1ff3381d523594a2421c51dfc100b7b714e88ab5488a8cdfbd473947f056","line":333,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#unused-return"],"remediation":"Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.","rule_id":"slither:unused-return","severity":"medium","source":"slither","title":"ERC721._mint(address,uint256) (@openzeppelin/contracts/token/ERC721/ERC721.sol#333-344) ignores return value by _holderTokens[to].add(tokenId) (@openzeppelin/co"},{"class":"other","component":"_burn","confidence":"medium","description":"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)\n","end_line":374,"exploitability":"medium","exploitability_note":"Medium-confidence detection; manual review required before relying on the finding either way.","file":"@openzeppelin/contracts/token/ERC721/ERC721.sol","id":"969da69b92fdd9312e0e5350495bdd1fe8efef996dd586540e0f1fd9f4c8a6d3","line":356,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#unused-return"],"remediation":"Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.","rule_id":"slither:unused-return","severity":"medium","source":"slither","title":"ERC721._burn(uint256) (@openzeppelin/contracts/token/ERC721/ERC721.sol#356-374) ignores return value by _tokenOwners.remove(tokenId) (@openzeppelin/contracts/to"},{"class":"other","component":"_transfer","confidence":"medium","description":"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)\n","end_line":402,"exploitability":"medium","exploitability_note":"Medium-confidence detection; manual review required before relying on the finding either way.","file":"@openzeppelin/contracts/token/ERC721/ERC721.sol","id":"75f627749452817daf6a70728ec64703897ceba420f766aec2d2fa4bf59556c2","line":387,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#unused-return"],"remediation":"Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.","rule_id":"slither:unused-return","severity":"medium","source":"slither","title":"ERC721._transfer(address,address,uint256) (@openzeppelin/contracts/token/ERC721/ERC721.sol#387-402) ignores return value by _holderTokens[to].add(tokenId) (@ope"},{"class":"unchecked-call","confidence":"unknown","description":"Low-level .call to an externally-controlled target. Combined with reentrancy or unchecked return values, this is a common fund-draining pattern.","exploitability":"unknown","exploitability_note":"Analyzer did not report a confidence level; treat as unverified until reviewed.","file":"@openzeppelin/contracts/utils/Address.sol","id":"1207cb446d666c17ce050794e583b1672ccebcc987cd63515ab205bc3cbe281f","line":57,"references":["https://github.com/JE4NVRG/vegasec/blob/main/apps/web/src/lib/risk/solidity/semgrep-rules/vegasec-solidity.yml#vegasec-low-level-call-untrusted"],"remediation":"Check the boolean return of low-level call/delegatecall/send and revert on failure with a descriptive reason string.","rule_id":"semgrep:vegasec-low-level-call-untrusted","severity":"medium","source":"semgrep","title":"Low-level .call to an externally-controlled target"},{"class":"unchecked-call","confidence":"unknown","description":"Low-level .call to an externally-controlled target. Combined with reentrancy or unchecked return values, this is a common fund-draining pattern.","exploitability":"unknown","exploitability_note":"Analyzer did not report a confidence level; treat as unverified until reviewed.","file":"@openzeppelin/contracts/utils/Address.sol","id":"20ab6b252390a16e695e233ed842caae54c2fb5d3a559803d4986c165646e74e","line":119,"references":["https://github.com/JE4NVRG/vegasec/blob/main/apps/web/src/lib/risk/solidity/semgrep-rules/vegasec-solidity.yml#vegasec-low-level-call-untrusted"],"remediation":"Check the boolean return of low-level call/delegatecall/send and revert on failure with a descriptive reason string.","rule_id":"semgrep:vegasec-low-level-call-untrusted","severity":"medium","source":"semgrep","title":"Low-level .call to an externally-controlled target"},{"class":"math-overflow","component":"mulDiv","confidence":"medium","description":"FullMath.mulDiv(uint256,uint256,uint256) (@uniswap/v3-core/contracts/libraries/FullMath.sol#14-106) performs a multiplication on the result of a division:\n\t- denominator = denominator / twos (@uniswap/v3-core/contracts/libraries/FullMath.sol#67)\n\t- inv *= 2 - denominator * inv (@uniswap/v3-core/contracts/libraries/FullMath.sol#92)\n","end_line":106,"exploitability":"medium","exploitability_note":"Medium-confidence detection; manual review required before relying on the finding either way.","file":"@uniswap/v3-core/contracts/libraries/FullMath.sol","id":"0050a75d84df694cb2e06003126cf739cc8656aeab645135c479fb4ba36e783a","line":14,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#divide-before-multiply"],"remediation":"Confirm the solc version uses checked arithmetic (>=0.8) or wrap mutations in OpenZeppelin SafeMath. Avoid unchecked blocks unless explicitly justified.","rule_id":"slither:divide-before-multiply","severity":"medium","source":"slither","title":"FullMath.mulDiv(uint256,uint256,uint256) (@uniswap/v3-core/contracts/libraries/FullMath.sol#14-106) performs a multiplication on the result of a division:"},{"class":"math-overflow","component":"getSqrtRatioAtTick","confidence":"medium","description":"TickMath.getSqrtRatioAtTick(int24) (@uniswap/v3-core/contracts/libraries/TickMath.sol#23-54) performs a multiplication on the result of a division:\n\t- ratio = (ratio * 0xa9f746462d870fdf8a65dc1f90e061e5) >> 128 (@uniswap/v3-core/contracts/libraries/TickMath.sol#40)\n\t- ratio = type()(uint256).max / ratio (@uniswap/v3-core/contracts/libraries/TickMath.sol#48)\n","end_line":54,"exploitability":"medium","exploitability_note":"Medium-confidence detection; manual review required before relying on the finding either way.","file":"@uniswap/v3-core/contracts/libraries/TickMath.sol","id":"04344b40729a6ac15b4498e5801ff43cf3c841e99375b8a565e3347c8226a507","line":23,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#divide-before-multiply"],"remediation":"Confirm the solc version uses checked arithmetic (>=0.8) or wrap mutations in OpenZeppelin SafeMath. Avoid unchecked blocks unless explicitly justified.","rule_id":"slither:divide-before-multiply","severity":"medium","source":"slither","title":"TickMath.getSqrtRatioAtTick(int24) (@uniswap/v3-core/contracts/libraries/TickMath.sol#23-54) performs a multiplication on the result of a division:"},{"class":"other","component":"mint","confidence":"medium","description":"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)\n","end_line":182,"exploitability":"medium","exploitability_note":"Medium-confidence detection; manual review required before relying on the finding either way.","file":"contracts/NonfungiblePositionManager.sol","id":"d8a64d59c477db5f82abb72b3d6ba15f7b17d88a933933371f40e098acbebc11","line":128,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#unused-return"],"remediation":"Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.","rule_id":"slither:unused-return","severity":"medium","source":"slither","title":"NonfungiblePositionManager.mint(INonfungiblePositionManager.MintParams) (contracts/NonfungiblePositionManager.sol#128-182) ignores return value by (None,feeGrow"},{"class":"reentrancy","component":"increaseLiquidity","confidence":"medium","description":"Reentrancy in NonfungiblePositionManager.increaseLiquidity(INonfungiblePositionManager.IncreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#198-254):\n\tExternal calls:\n\t- (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)\n\t\t- (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)\n\tState variables written after the call(s):\n\t- position.tokensOwed0 += uint128(FullMath.mulDiv(feeGrowthInside0LastX128 - position.feeGrowthInside0LastX128,position.liquidity,FixedPoint128.Q128)) (contracts/NonfungiblePositionManager.sol#234-240)\n\tNonfungiblePositionManager._positions (contracts/NonfungiblePositionManager.sol#61) can be used in cross function reentrancies:\n\t- NonfungiblePositionManager._approve(address,uint256) (contracts/NonfungiblePositionManager.sol#396-399)\n\t- NonfungiblePositionManager._getAndIncrementNonce(uint256) (contracts/NonfungiblePositionManager.sol#384-386)\n\t- NonfungiblePositionManager.burn(uint256) (contracts/NonfungiblePositionManager.sol#377-382)\n\t- NonfungiblePositionManager.collect(INonfungiblePositionManager.CollectParams) (contracts/NonfungiblePositionManager.sol#309-374)\n\t- NonfungiblePositionManager.decreaseLiquidity(INonfungiblePositionManager.DecreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#257-306)\n\t- NonfungiblePositionManager.getApproved(uint256) (contracts/NonfungiblePositionManager.sol#389-393)\n\t- NonfungiblePositionManager.increaseLiquidity(INonfungiblePositionManager.IncreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#198-254)\n\t- NonfungiblePositionManager.mint(INonfungiblePositionManager.MintParams) (contracts/NonfungiblePositionManager.sol#128-182)\n\t- NonfungiblePositionManager.positions(uint256) (contracts/NonfungiblePositionManager.sol#80-116)\n\t- position.tokensOwed1 += uint128(FullMath.mulDiv(feeGrowthInside1LastX128 - position.feeGrowthInside1LastX128,position.liquidity,FixedPoint128.Q128)) (contracts/NonfungiblePositionManager.sol#241-247)\n\tNonfungiblePositionManager._positions (contracts/NonfungiblePositionManager.sol#61) can be used in cross function reentrancies:\n\t- NonfungiblePositionManager._approve(address,uint256) (contracts/NonfungiblePositionManager.sol#396-399)\n\t- NonfungiblePositionManager._getAndIncrementNonce(uint256) (contracts/NonfungiblePositionManager.sol#384-386)\n\t- NonfungiblePositionManager.burn(uint256) (contracts/NonfungiblePositionManager.sol#377-382)\n\t- NonfungiblePositionManager.collect(INonfungiblePositionManager.CollectParams) (contracts/NonfungiblePositionManager.sol#309-374)\n\t- NonfungiblePositionManager.decreaseLiquidity(INonfungiblePositionManager.DecreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#257-306)\n\t- NonfungiblePositionManager.getApproved(uint256) (contracts/NonfungiblePositionManager.sol#389-393)\n\t- NonfungiblePositionManager.increaseLiquidity(INonfungiblePositionManager.IncreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#198-254)\n\t- NonfungiblePositionManager.mint(INonfungiblePositionManager.MintParams) (contracts/NonfungiblePositionManager.sol#128-182)\n\t- NonfungiblePositionManager.positions(uint256) (contracts/NonfungiblePositionManager.sol#80-116)\n\t- position.feeGrowthInside0LastX128 = feeGrowthInside0LastX128 (contracts/NonfungiblePositionManager.sol#249)\n\tNonfungiblePositionManager._positions (contracts/NonfungiblePositionManager.sol#61) can be used in cross function reentrancies:\n\t- NonfungiblePositionManager._approve(address,uint256) (contracts/NonfungiblePositionManager.sol#396-399)\n\t- NonfungiblePositionManager._getAndIncrementNonce(uint256) (contracts/NonfungiblePositionManager.sol#384-386)\n\t- NonfungiblePositionManager.burn(uint256) (contracts/NonfungiblePositionManager.sol#377-382)\n\t- NonfungiblePositionManager.collect(INonfungiblePositionManager.CollectParams) (contracts/NonfungiblePositionManager.sol#309-374)\n\t- NonfungiblePositionManager.decreaseLiquidity(INonfungiblePositionManager.DecreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#257-306)\n\t- NonfungiblePositionManager.getApproved(uint256) (contracts/NonfungiblePositionManager.sol#389-393)\n\t- NonfungiblePositionManager.increaseLiquidity(INonfungiblePositionManager.IncreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#198-254)\n\t- NonfungiblePositionManager.mint(INonfungiblePositionManager.MintParams) (contracts/NonfungiblePositionManager.sol#128-182)\n\t- NonfungiblePositionManager.positions(uint256) (contracts/NonfungiblePositionManager.sol#80-116)\n\t- position.feeGrowthInside1LastX128 = feeGrowthInside1LastX128 (contracts/NonfungiblePositionManager.sol#250)\n\tNonfungiblePositionManager._positions (contracts/NonfungiblePositionManager.sol#61) can be used in cross function reentrancies:\n\t- NonfungiblePositionManager._approve(address,uint256) (contracts/NonfungiblePositionManager.sol#396-399)\n\t- NonfungiblePositionManager._getAndIncrementNonce(uint256) (contracts/NonfungiblePositionManager.sol#384-386)\n\t- NonfungiblePositionManager.burn(uint256) (contracts/NonfungiblePositionManager.sol#377-382)\n\t- NonfungiblePositionManager.collect(INonfungiblePositionManager.CollectParams) (contracts/NonfungiblePositionManager.sol#309-374)\n\t- NonfungiblePositionManager.decreaseLiquidity(INonfungiblePositionManager.DecreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#257-306)\n\t- NonfungiblePositionManager.getApproved(uint256) (contracts/NonfungiblePositionManager.sol#389-393)\n\t- NonfungiblePositionManager.increaseLiquidity(INonfungiblePositionManager.IncreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#198-254)\n\t- NonfungiblePositionManager.mint(INonfungiblePositionManager.MintParams) (contracts/NonfungiblePositionManager.sol#128-182)\n\t- NonfungiblePositionManager.positions(uint256) (contracts/NonfungiblePositionManager.sol#80-116)\n\t- position.liquidity += liquidity (contracts/NonfungiblePositionManager.sol#251)\n\tNonfungiblePositionManager._positions (contracts/NonfungiblePositionManager.sol#61) can be used in cross function reentrancies:\n\t- NonfungiblePositionManager._approve(address,uint256) (contracts/NonfungiblePositionManager.sol#396-399)\n\t- NonfungiblePositionManager._getAndIncrementNonce(uint256) (contracts/NonfungiblePositionManager.sol#384-386)\n\t- NonfungiblePositionManager.burn(uint256) (contracts/NonfungiblePositionManager.sol#377-382)\n\t- NonfungiblePositionManager.collect(INonfungiblePositionManager.CollectParams) (contracts/NonfungiblePositionManager.sol#309-374)\n\t- NonfungiblePositionManager.decreaseLiquidity(INonfungiblePositionManager.DecreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#257-306)\n\t- NonfungiblePositionManager.getApproved(uint256) (contracts/NonfungiblePositionManager.sol#389-393)\n\t- NonfungiblePositionManager.increaseLiquidity(INonfungiblePositionManager.IncreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#198-254)\n\t- NonfungiblePositionManager.mint(INonfungiblePositionManager.MintParams) (contracts/NonfungiblePositionManager.sol#128-182)\n\t- NonfungiblePositionManager.positions(uint256) (contracts/NonfungiblePositionManager.sol#80-116)\n","end_line":254,"exploitability":"medium","exploitability_note":"Medium-confidence detection; manual review required before relying on the finding either way.","file":"contracts/NonfungiblePositionManager.sol","id":"586c552a9b4caa6f82f48e79f5c6d8ed1bd0b5b6d6229f439d6e084a9b542da7","line":198,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-no-eth"],"remediation":"Apply the checks-effects-interactions pattern. State writes must happen before external calls, and consider OpenZeppelin's ReentrancyGuard for high-risk entry points.","rule_id":"slither:reentrancy-no-eth","severity":"medium","source":"slither","title":"Reentrancy in NonfungiblePositionManager.increaseLiquidity(INonfungiblePositionManager.IncreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#198-25"},{"class":"other","component":"increaseLiquidity","confidence":"medium","description":"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)\n","end_line":254,"exploitability":"medium","exploitability_note":"Medium-confidence detection; manual review required before relying on the finding either way.","file":"contracts/NonfungiblePositionManager.sol","id":"b0ae59f8bd17b0f6c665999900945c4157ada9b6c7c8fdd0b99b7a304d2b098c","line":198,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#unused-return"],"remediation":"Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.","rule_id":"slither:unused-return","severity":"medium","source":"slither","title":"NonfungiblePositionManager.increaseLiquidity(INonfungiblePositionManager.IncreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#198-254) ignores ret"},{"class":"reentrancy","component":"decreaseLiquidity","confidence":"medium","description":"Reentrancy in NonfungiblePositionManager.decreaseLiquidity(INonfungiblePositionManager.DecreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#257-306):\n\tExternal calls:\n\t- (amount0,amount1) = pool.burn(position.tickLower,position.tickUpper,params.liquidity) (contracts/NonfungiblePositionManager.sol#273)\n\tState variables written after the call(s):\n\t- position.tokensOwed0 += uint128(amount0) + uint128(FullMath.mulDiv(feeGrowthInside0LastX128 - position.feeGrowthInside0LastX128,positionLiquidity,FixedPoint128.Q128)) (contracts/NonfungiblePositionManager.sol#281-289)\n\tNonfungiblePositionManager._positions (contracts/NonfungiblePositionManager.sol#61) can be used in cross function reentrancies:\n\t- NonfungiblePositionManager._approve(address,uint256) (contracts/NonfungiblePositionManager.sol#396-399)\n\t- NonfungiblePositionManager._getAndIncrementNonce(uint256) (contracts/NonfungiblePositionManager.sol#384-386)\n\t- NonfungiblePositionManager.burn(uint256) (contracts/NonfungiblePositionManager.sol#377-382)\n\t- NonfungiblePositionManager.collect(INonfungiblePositionManager.CollectParams) (contracts/NonfungiblePositionManager.sol#309-374)\n\t- NonfungiblePositionManager.decreaseLiquidity(INonfungiblePositionManager.DecreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#257-306)\n\t- NonfungiblePositionManager.getApproved(uint256) (contracts/NonfungiblePositionManager.sol#389-393)\n\t- NonfungiblePositionManager.increaseLiquidity(INonfungiblePositionManager.IncreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#198-254)\n\t- NonfungiblePositionManager.mint(INonfungiblePositionManager.MintParams) (contracts/NonfungiblePositionManager.sol#128-182)\n\t- NonfungiblePositionManager.positions(uint256) (contracts/NonfungiblePositionManager.sol#80-116)\n\t- position.tokensOwed1 += uint128(amount1) + uint128(FullMath.mulDiv(feeGrowthInside1LastX128 - position.feeGrowthInside1LastX128,positionLiquidity,FixedPoint128.Q128)) (contracts/NonfungiblePositionManager.sol#290-298)\n\tNonfungiblePositionManager._positions (contracts/NonfungiblePositionManager.sol#61) can be used in cross function reentrancies:\n\t- NonfungiblePositionManager._approve(address,uint256) (contracts/NonfungiblePositionManager.sol#396-399)\n\t- NonfungiblePositionManager._getAndIncrementNonce(uint256) (contracts/NonfungiblePositionManager.sol#384-386)\n\t- NonfungiblePositionManager.burn(uint256) (contracts/NonfungiblePositionManager.sol#377-382)\n\t- NonfungiblePositionManager.collect(INonfungiblePositionManager.CollectParams) (contracts/NonfungiblePositionManager.sol#309-374)\n\t- NonfungiblePositionManager.decreaseLiquidity(INonfungiblePositionManager.DecreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#257-306)\n\t- NonfungiblePositionManager.getApproved(uint256) (contracts/NonfungiblePositionManager.sol#389-393)\n\t- NonfungiblePositionManager.increaseLiquidity(INonfungiblePositionManager.IncreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#198-254)\n\t- NonfungiblePositionManager.mint(INonfungiblePositionManager.MintParams) (contracts/NonfungiblePositionManager.sol#128-182)\n\t- NonfungiblePositionManager.positions(uint256) (contracts/NonfungiblePositionManager.sol#80-116)\n\t- position.feeGrowthInside0LastX128 = feeGrowthInside0LastX128 (contracts/NonfungiblePositionManager.sol#300)\n\tNonfungiblePositionManager._positions (contracts/NonfungiblePositionManager.sol#61) can be used in cross function reentrancies:\n\t- NonfungiblePositionManager._approve(address,uint256) (contracts/NonfungiblePositionManager.sol#396-399)\n\t- NonfungiblePositionManager._getAndIncrementNonce(uint256) (contracts/NonfungiblePositionManager.sol#384-386)\n\t- NonfungiblePositionManager.burn(uint256) (contracts/NonfungiblePositionManager.sol#377-382)\n\t- NonfungiblePositionManager.collect(INonfungiblePositionManager.CollectParams) (contracts/NonfungiblePositionManager.sol#309-374)\n\t- NonfungiblePositionManager.decreaseLiquidity(INonfungiblePositionManager.DecreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#257-306)\n\t- NonfungiblePositionManager.getApproved(uint256) (contracts/NonfungiblePositionManager.sol#389-393)\n\t- NonfungiblePositionManager.increaseLiquidity(INonfungiblePositionManager.IncreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#198-254)\n\t- NonfungiblePositionManager.mint(INonfungiblePositionManager.MintParams) (contracts/NonfungiblePositionManager.sol#128-182)\n\t- NonfungiblePositionManager.positions(uint256) (contracts/NonfungiblePositionManager.sol#80-116)\n\t- position.feeGrowthInside1LastX128 = feeGrowthInside1LastX128 (contracts/NonfungiblePositionManager.sol#301)\n\tNonfungiblePositionManager._positions (contracts/NonfungiblePositionManager.sol#61) can be used in cross function reentrancies:\n\t- NonfungiblePositionManager._approve(address,uint256) (contracts/NonfungiblePositionManager.sol#396-399)\n\t- NonfungiblePositionManager._getAndIncrementNonce(uint256) (contracts/NonfungiblePositionManager.sol#384-386)\n\t- NonfungiblePositionManager.burn(uint256) (contracts/NonfungiblePositionManager.sol#377-382)\n\t- NonfungiblePositionManager.collect(INonfungiblePositionManager.CollectParams) (contracts/NonfungiblePositionManager.sol#309-374)\n\t- NonfungiblePositionManager.decreaseLiquidity(INonfungiblePositionManager.DecreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#257-306)\n\t- NonfungiblePositionManager.getApproved(uint256) (contracts/NonfungiblePositionManager.sol#389-393)\n\t- NonfungiblePositionManager.increaseLiquidity(INonfungiblePositionManager.IncreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#198-254)\n\t- NonfungiblePositionManager.mint(INonfungiblePositionManager.MintParams) (contracts/NonfungiblePositionManager.sol#128-182)\n\t- NonfungiblePositionManager.positions(uint256) (contracts/NonfungiblePositionManager.sol#80-116)\n\t- position.liquidity = positionLiquidity - params.liquidity (contracts/NonfungiblePositionManager.sol#303)\n\tNonfungiblePositionManager._positions (contracts/NonfungiblePositionManager.sol#61) can be used in cross function reentrancies:\n\t- NonfungiblePositionManager._approve(address,uint256) (contracts/NonfungiblePositionManager.sol#396-399)\n\t- NonfungiblePositionManager._getAndIncrementNonce(uint256) (contracts/NonfungiblePositionManager.sol#384-386)\n\t- NonfungiblePositionManager.burn(uint256) (contracts/NonfungiblePositionManager.sol#377-382)\n\t- NonfungiblePositionManager.collect(INonfungiblePositionManager.CollectParams) (contracts/NonfungiblePositionManager.sol#309-374)\n\t- NonfungiblePositionManager.decreaseLiquidity(INonfungiblePositionManager.DecreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#257-306)\n\t- NonfungiblePositionManager.getApproved(uint256) (contracts/NonfungiblePositionManager.sol#389-393)\n\t- NonfungiblePositionManager.increaseLiquidity(INonfungiblePositionManager.IncreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#198-254)\n\t- NonfungiblePositionManager.mint(INonfungiblePositionManager.MintParams) (contracts/NonfungiblePositionManager.sol#128-182)\n\t- NonfungiblePositionManager.positions(uint256) (contracts/NonfungiblePositionManager.sol#80-116)\n","end_line":306,"exploitability":"medium","exploitability_note":"Medium-confidence detection; manual review required before relying on the finding either way.","file":"contracts/NonfungiblePositionManager.sol","id":"6597cf9b721247a95f3ba9d199780ec1276635aaa0f84713a098ee74b357e744","line":257,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-no-eth"],"remediation":"Apply the checks-effects-interactions pattern. State writes must happen before external calls, and consider OpenZeppelin's ReentrancyGuard for high-risk entry points.","rule_id":"slither:reentrancy-no-eth","severity":"medium","source":"slither","title":"Reentrancy in NonfungiblePositionManager.decreaseLiquidity(INonfungiblePositionManager.DecreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#257-30"},{"class":"other","component":"decreaseLiquidity","confidence":"medium","description":"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)\n","end_line":306,"exploitability":"medium","exploitability_note":"Medium-confidence detection; manual review required before relying on the finding either way.","file":"contracts/NonfungiblePositionManager.sol","id":"c2663dc7025557764440ffd28e7b0c52d5b89c56a74f01435478b3665813a981","line":257,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#unused-return"],"remediation":"Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.","rule_id":"slither:unused-return","severity":"medium","source":"slither","title":"NonfungiblePositionManager.decreaseLiquidity(INonfungiblePositionManager.DecreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#257-306) ignores ret"},{"class":"reentrancy","component":"collect","confidence":"medium","description":"Reentrancy in NonfungiblePositionManager.collect(INonfungiblePositionManager.CollectParams) (contracts/NonfungiblePositionManager.sol#309-374):\n\tExternal calls:\n\t- pool.burn(position.tickLower,position.tickUpper,0) (contracts/NonfungiblePositionManager.sol#330)\n\t- (amount0,amount1) = pool.collect(recipient,position.tickLower,position.tickUpper,amount0Collect,amount1Collect) (contracts/NonfungiblePositionManager.sol#361-367)\n\tState variables written after the call(s):\n\t- (position.tokensOwed0,position.tokensOwed1) = (tokensOwed0 - amount0Collect,tokensOwed1 - amount1Collect) (contracts/NonfungiblePositionManager.sol#371)\n\tNonfungiblePositionManager._positions (contracts/NonfungiblePositionManager.sol#61) can be used in cross function reentrancies:\n\t- NonfungiblePositionManager._approve(address,uint256) (contracts/NonfungiblePositionManager.sol#396-399)\n\t- NonfungiblePositionManager._getAndIncrementNonce(uint256) (contracts/NonfungiblePositionManager.sol#384-386)\n\t- NonfungiblePositionManager.burn(uint256) (contracts/NonfungiblePositionManager.sol#377-382)\n\t- NonfungiblePositionManager.collect(INonfungiblePositionManager.CollectParams) (contracts/NonfungiblePositionManager.sol#309-374)\n\t- NonfungiblePositionManager.decreaseLiquidity(INonfungiblePositionManager.DecreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#257-306)\n\t- NonfungiblePositionManager.getApproved(uint256) (contracts/NonfungiblePositionManager.sol#389-393)\n\t- NonfungiblePositionManager.increaseLiquidity(INonfungiblePositionManager.IncreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#198-254)\n\t- NonfungiblePositionManager.mint(INonfungiblePositionManager.MintParams) (contracts/NonfungiblePositionManager.sol#128-182)\n\t- NonfungiblePositionManager.positions(uint256) (contracts/NonfungiblePositionManager.sol#80-116)\n","end_line":374,"exploitability":"medium","exploitability_note":"Medium-confidence detection; manual review required before relying on the finding either way.","file":"contracts/NonfungiblePositionManager.sol","id":"4c8fe058f0d8a461e78b8a3fc53d23f324313a23041ca9edc7cbd71e6d1c07bb","line":309,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-no-eth"],"remediation":"Apply the checks-effects-interactions pattern. State writes must happen before external calls, and consider OpenZeppelin's ReentrancyGuard for high-risk entry points.","rule_id":"slither:reentrancy-no-eth","severity":"medium","source":"slither","title":"Reentrancy in NonfungiblePositionManager.collect(INonfungiblePositionManager.CollectParams) (contracts/NonfungiblePositionManager.sol#309-374):"},{"class":"other","component":"collect","confidence":"medium","description":"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)\n","end_line":374,"exploitability":"medium","exploitability_note":"Medium-confidence detection; manual review required before relying on the finding either way.","file":"contracts/NonfungiblePositionManager.sol","id":"44fe5123c375162e2a3b66040ae2703cc01f92d863e938a332c1664ba12e896e","line":309,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#unused-return"],"remediation":"Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.","rule_id":"slither:unused-return","severity":"medium","source":"slither","title":"NonfungiblePositionManager.collect(INonfungiblePositionManager.CollectParams) (contracts/NonfungiblePositionManager.sol#309-374) ignores return value by (None,f"},{"class":"other","component":"uniswapV3MintCallback","confidence":"medium","description":"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)\n","end_line":35,"exploitability":"medium","exploitability_note":"Medium-confidence detection; manual review required before relying on the finding either way.","file":"contracts/base/LiquidityManagement.sol","id":"d542e73431055430e074b703b86b6e896a6f57845961cfbaa5e5a148a09ef6d0","line":25,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#unused-return"],"remediation":"Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.","rule_id":"slither:unused-return","severity":"medium","source":"slither","title":"LiquidityManagement.uniswapV3MintCallback(uint256,uint256,bytes) (contracts/base/LiquidityManagement.sol#25-35) ignores return value by CallbackValidation.verif"},{"class":"other","component":"addLiquidity","confidence":"medium","description":"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)\n","end_line":89,"exploitability":"medium","exploitability_note":"Medium-confidence detection; manual review required before relying on the finding either way.","file":"contracts/base/LiquidityManagement.sol","id":"59239750fbd442f41a4dc094792c0442b1eede044fd7efaa1b1eec3eafef8802","line":51,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#unused-return"],"remediation":"Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.","rule_id":"slither:unused-return","severity":"medium","source":"slither","title":"LiquidityManagement.addLiquidity(LiquidityManagement.AddLiquidityParams) (contracts/base/LiquidityManagement.sol#51-89) ignores return value by (sqrtPriceX96,No"},{"class":"other","component":"createAndInitializePoolIfNecessary","confidence":"medium","description":"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)\n","end_line":31,"exploitability":"medium","exploitability_note":"Medium-confidence detection; manual review required before relying on the finding either way.","file":"contracts/base/PoolInitializer.sol","id":"7067d10c9e94f9acc62e172fdb4ad2bc3cc8e5c4acc890731abb9b604bea2d96","line":13,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#unused-return"],"remediation":"Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.","rule_id":"slither:unused-return","severity":"medium","source":"slither","title":"PoolInitializer.createAndInitializePoolIfNecessary(address,address,uint24,uint160) (contracts/base/PoolInitializer.sol#13-31) ignores return value by (sqrtPrice"},{"class":"unchecked-call","confidence":"unknown","description":"Low-level .call to an externally-controlled target. Combined with reentrancy or unchecked return values, this is a common fund-draining pattern.","exploitability":"unknown","exploitability_note":"Analyzer did not report a confidence level; treat as unverified until reviewed.","file":"contracts/libraries/TransferHelper.sol","id":"49c06087b71ae93a1cba1b12681e562ac078b67c0f45c48b8eddb8fac81ff326","line":20,"references":["https://github.com/JE4NVRG/vegasec/blob/main/apps/web/src/lib/risk/solidity/semgrep-rules/vegasec-solidity.yml#vegasec-low-level-call-untrusted"],"remediation":"Check the boolean return of low-level call/delegatecall/send and revert on failure with a descriptive reason string.","rule_id":"semgrep:vegasec-low-level-call-untrusted","severity":"medium","source":"semgrep","title":"Low-level .call to an externally-controlled target"},{"class":"unchecked-call","confidence":"unknown","description":"Low-level .call to an externally-controlled target. Combined with reentrancy or unchecked return values, this is a common fund-draining pattern.","exploitability":"unknown","exploitability_note":"Analyzer did not report a confidence level; treat as unverified until reviewed.","file":"contracts/libraries/TransferHelper.sol","id":"b8121e39111840e447d325fdb473995f86f3b2606ec3cadeb474bf71bc91e809","line":34,"references":["https://github.com/JE4NVRG/vegasec/blob/main/apps/web/src/lib/risk/solidity/semgrep-rules/vegasec-solidity.yml#vegasec-low-level-call-untrusted"],"remediation":"Check the boolean return of low-level call/delegatecall/send and revert on failure with a descriptive reason string.","rule_id":"semgrep:vegasec-low-level-call-untrusted","severity":"medium","source":"semgrep","title":"Low-level .call to an externally-controlled target"},{"class":"unchecked-call","confidence":"unknown","description":"Low-level .call to an externally-controlled target. Combined with reentrancy or unchecked return values, this is a common fund-draining pattern.","exploitability":"unknown","exploitability_note":"Analyzer did not report a confidence level; treat as unverified until reviewed.","file":"contracts/libraries/TransferHelper.sol","id":"a3c04c2978374bb868cabb3c84f65ab0bb51f8bb2cb1d4659a93d76b42f22cc5","line":48,"references":["https://github.com/JE4NVRG/vegasec/blob/main/apps/web/src/lib/risk/solidity/semgrep-rules/vegasec-solidity.yml#vegasec-low-level-call-untrusted"],"remediation":"Check the boolean return of low-level call/delegatecall/send and revert on failure with a descriptive reason string.","rule_id":"semgrep:vegasec-low-level-call-untrusted","severity":"medium","source":"semgrep","title":"Low-level .call to an externally-controlled target"},{"class":"unchecked-call","confidence":"unknown","description":"Low-level .call to an externally-controlled target. Combined with reentrancy or unchecked return values, this is a common fund-draining pattern.","exploitability":"unknown","exploitability_note":"Analyzer did not report a confidence level; treat as unverified until reviewed.","file":"contracts/libraries/TransferHelper.sol","id":"aabfabf3013e14b43eb759c51f6ec04417b13b7b11131112f5a3e3b416f8becc","line":57,"references":["https://github.com/JE4NVRG/vegasec/blob/main/apps/web/src/lib/risk/solidity/semgrep-rules/vegasec-solidity.yml#vegasec-low-level-call-untrusted"],"remediation":"Check the boolean return of low-level call/delegatecall/send and revert on failure with a descriptive reason string.","rule_id":"semgrep:vegasec-low-level-call-untrusted","severity":"medium","source":"semgrep","title":"Low-level .call to an externally-controlled target"},{"class":"access-control","component":"_tokenDescriptor_","confidence":"medium","description":"NonfungiblePositionManager.constructor(address,address,address)._tokenDescriptor_ (contracts/NonfungiblePositionManager.sol#74) lacks a zero-check on :\n\t\t- _tokenDescriptor = _tokenDescriptor_ (contracts/NonfungiblePositionManager.sol#76)\n","exploitability":"medium","exploitability_note":"Medium-confidence detection; manual review required before relying on the finding either way.","file":"contracts/NonfungiblePositionManager.sol","id":"10918a0943fd585c4a7ddb734ca8c4dbb095bb4dab55def1d4a400be0d29af30","line":74,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#missing-zero-check"],"remediation":"Gate privileged functions behind a tested role/ownership pattern (e.g. OpenZeppelin Ownable/AccessControl). Avoid tx.origin for authorization.","rule_id":"slither:missing-zero-check","severity":"low","source":"slither","title":"NonfungiblePositionManager.constructor(address,address,address)._tokenDescriptor_ (contracts/NonfungiblePositionManager.sol#74) lacks a zero-check on :"},{"class":"reentrancy","component":"mint","confidence":"medium","description":"Reentrancy in NonfungiblePositionManager.mint(INonfungiblePositionManager.MintParams) (contracts/NonfungiblePositionManager.sol#128-182):\n\tExternal calls:\n\t- (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)\n\t\t- (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)\n\tEvent emitted after the call(s):\n\t- IncreaseLiquidity(tokenId,liquidity,amount0,amount1) (contracts/NonfungiblePositionManager.sol#181)\n\t- Transfer(address(0),to,tokenId) (@openzeppelin/contracts/token/ERC721/ERC721.sol#343)\n\t\t- _mint(params.recipient,(tokenId = _nextId ++)) (contracts/NonfungiblePositionManager.sol#156)\n","end_line":182,"exploitability":"medium","exploitability_note":"Medium-confidence detection; manual review required before relying on the finding either way.","file":"contracts/NonfungiblePositionManager.sol","id":"7d94ffcd3eb59a6e08bd20cfdc85354a85c4700a8524bd571310bce433579805","line":128,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-events"],"remediation":"Apply the checks-effects-interactions pattern. State writes must happen before external calls, and consider OpenZeppelin's ReentrancyGuard for high-risk entry points.","rule_id":"slither:reentrancy-events","severity":"low","source":"slither","title":"Reentrancy in NonfungiblePositionManager.mint(INonfungiblePositionManager.MintParams) (contracts/NonfungiblePositionManager.sol#128-182):"},{"class":"reentrancy","component":"increaseLiquidity","confidence":"medium","description":"Reentrancy in NonfungiblePositionManager.increaseLiquidity(INonfungiblePositionManager.IncreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#198-254):\n\tExternal calls:\n\t- (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)\n\t\t- (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)\n\tEvent emitted after the call(s):\n\t- IncreaseLiquidity(params.tokenId,liquidity,amount0,amount1) (contracts/NonfungiblePositionManager.sol#253)\n","end_line":254,"exploitability":"medium","exploitability_note":"Medium-confidence detection; manual review required before relying on the finding either way.","file":"contracts/NonfungiblePositionManager.sol","id":"7b9c1e39abd810003b7efc18cd5ca683155f36aefaeb54e5dec6b180e03b439b","line":198,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-events"],"remediation":"Apply the checks-effects-interactions pattern. State writes must happen before external calls, and consider OpenZeppelin's ReentrancyGuard for high-risk entry points.","rule_id":"slither:reentrancy-events","severity":"low","source":"slither","title":"Reentrancy in NonfungiblePositionManager.increaseLiquidity(INonfungiblePositionManager.IncreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#198-25"},{"class":"reentrancy","component":"decreaseLiquidity","confidence":"medium","description":"Reentrancy in NonfungiblePositionManager.decreaseLiquidity(INonfungiblePositionManager.DecreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#257-306):\n\tExternal calls:\n\t- (amount0,amount1) = pool.burn(position.tickLower,position.tickUpper,params.liquidity) (contracts/NonfungiblePositionManager.sol#273)\n\tEvent emitted after the call(s):\n\t- DecreaseLiquidity(params.tokenId,params.liquidity,amount0,amount1) (contracts/NonfungiblePositionManager.sol#305)\n","end_line":306,"exploitability":"medium","exploitability_note":"Medium-confidence detection; manual review required before relying on the finding either way.","file":"contracts/NonfungiblePositionManager.sol","id":"e0b8f3d4edaffb2c63980ed2666144a2fb8998e573cd0046cd94baafd7cf793d","line":257,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-events"],"remediation":"Apply the checks-effects-interactions pattern. State writes must happen before external calls, and consider OpenZeppelin's ReentrancyGuard for high-risk entry points.","rule_id":"slither:reentrancy-events","severity":"low","source":"slither","title":"Reentrancy in NonfungiblePositionManager.decreaseLiquidity(INonfungiblePositionManager.DecreaseLiquidityParams) (contracts/NonfungiblePositionManager.sol#257-30"},{"class":"reentrancy","component":"collect","confidence":"medium","description":"Reentrancy in NonfungiblePositionManager.collect(INonfungiblePositionManager.CollectParams) (contracts/NonfungiblePositionManager.sol#309-374):\n\tExternal calls:\n\t- pool.burn(position.tickLower,position.tickUpper,0) (contracts/NonfungiblePositionManager.sol#330)\n\t- (amount0,amount1) = pool.collect(recipient,position.tickLower,position.tickUpper,amount0Collect,amount1Collect) (contracts/NonfungiblePositionManager.sol#361-367)\n\tEvent emitted after the call(s):\n\t- Collect(params.tokenId,recipient,amount0Collect,amount1Collect) (contracts/NonfungiblePositionManager.sol#373)\n","end_line":374,"exploitability":"medium","exploitability_note":"Medium-confidence detection; manual review required before relying on the finding either way.","file":"contracts/NonfungiblePositionManager.sol","id":"002440d1ce8155a2966ebf8c9d39f380330cb29d714dde405a6ff3973df7d0b9","line":309,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-events"],"remediation":"Apply the checks-effects-interactions pattern. State writes must happen before external calls, and consider OpenZeppelin's ReentrancyGuard for high-risk entry points.","rule_id":"slither:reentrancy-events","severity":"low","source":"slither","title":"Reentrancy in NonfungiblePositionManager.collect(INonfungiblePositionManager.CollectParams) (contracts/NonfungiblePositionManager.sol#309-374):"},{"class":"timestamp-dependence","component":"permit","confidence":"medium","description":"ERC721Permit.permit(address,uint256,uint256,uint8,bytes32,bytes32) (contracts/base/ERC721Permit.sol#55-85) uses timestamp for comparisons\n\tDangerous comparisons:\n\t- require(bool,string)(_blockTimestamp() <= deadline,Permit expired) (contracts/base/ERC721Permit.sol#63)\n","end_line":85,"exploitability":"medium","exploitability_note":"Medium-confidence detection; manual review required before relying on the finding either way.","file":"contracts/base/ERC721Permit.sol","id":"db7c2b14c03eb584b0063c5618ad53704f702b681d130e107edecef6707b2488","line":55,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#timestamp"],"remediation":"Treat block.timestamp as a coarse value with miner influence; prefer block-number windows for short-term invariants and add tolerance bands.","rule_id":"slither:timestamp","severity":"low","source":"slither","title":"ERC721Permit.permit(address,uint256,uint256,uint8,bytes32,bytes32) (contracts/base/ERC721Permit.sol#55-85) uses timestamp for comparisons"},{"class":"gas-dos","component":"multicall","confidence":"medium","description":"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)\n","end_line":27,"exploitability":"medium","exploitability_note":"Medium-confidence detection; manual review required before relying on the finding either way.","file":"contracts/base/Multicall.sol","id":"afc01878e11c771693d155a9ad3ccebd98cbcbf3cab3fe051dbd291e9ad4c345","line":11,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#calls-loop"],"remediation":"Cap loop bounds, paginate iteration, and ensure no user can grow a state structure the contract must traverse to make progress.","rule_id":"slither:calls-loop","severity":"low","source":"slither","title":"Multicall.multicall(bytes[]) (contracts/base/Multicall.sol#11-27) has external calls inside a loop: (success,result) = address(this).delegatecall(data[i]) (cont"},{"class":"logic","component":">=0.6.0<0.8.0","confidence":"high","description":"8 different versions of Solidity are used:\n\t- Version constraint >=0.6.0<0.8.0 is used by:\n\t\t->=0.6.0<0.8.0 (@openzeppelin/contracts/drafts/IERC20Permit.sol#3)\n\t\t->=0.6.0<0.8.0 (@openzeppelin/contracts/utils/Context.sol#3)\n\t- Version constraint ^0.7.0 is used by:\n\t\t-^0.7.0 (@openzeppelin/contracts/introspection/ERC165.sol#3)\n\t\t-^0.7.0 (@openzeppelin/contracts/introspection/IERC165.sol#3)\n\t\t-^0.7.0 (@openzeppelin/contracts/math/SafeMath.sol#3)\n\t\t-^0.7.0 (@openzeppelin/contracts/token/ERC20/IERC20.sol#3)\n\t\t-^0.7.0 (@openzeppelin/contracts/token/ERC721/ERC721.sol#3)\n\t\t-^0.7.0 (@openzeppelin/contracts/token/ERC721/IERC721.sol#3)\n\t\t-^0.7.0 (@openzeppelin/contracts/token/ERC721/IERC721Enumerable.sol#3)\n\t\t-^0.7.0 (@openzeppelin/contracts/token/ERC721/IERC721Metadata.sol#3)\n\t\t-^0.7.0 (@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol#3)\n\t\t-^0.7.0 (@openzeppelin/contracts/utils/Address.sol#3)\n\t\t-^0.7.0 (@openzeppelin/contracts/utils/EnumerableMap.sol#3)\n\t\t-^0.7.0 (@openzeppelin/contracts/utils/EnumerableSet.sol#3)\n\t\t-^0.7.0 (@openzeppelin/contracts/utils/Strings.sol#3)\n\t- Version constraint >=0.5.0 is used by:\n\t\t->=0.5.0 (@uniswap/v3-core/contracts/interfaces/IUniswapV3Factory.sol#2)\n\t\t->=0.5.0 (@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol#2)\n\t\t->=0.5.0 (@uniswap/v3-core/contracts/interfaces/callback/IUniswapV3MintCallback.sol#2)\n\t\t->=0.5.0 (@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol#2)\n\t\t->=0.5.0 (@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol#2)\n\t\t->=0.5.0 (@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol#2)\n\t\t->=0.5.0 (@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol#2)\n\t\t->=0.5.0 (@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol#2)\n\t\t->=0.5.0 (@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol#2)\n\t\t->=0.5.0 (@uniswap/v3-core/contracts/libraries/TickMath.sol#2)\n\t\t->=0.5.0 (contracts/base/SelfPermit.sol#2)\n\t\t->=0.5.0 (contracts/interfaces/INonfungibleTokenPositionDescriptor.sol#2)\n\t\t->=0.5.0 (contracts/interfaces/IPeripheryImmutableState.sol#2)\n\t\t->=0.5.0 (contracts/interfaces/external/IERC1271.sol#2)\n\t\t->=0.5.0 (contracts/interfaces/external/IERC20PermitAllowed.sol#2)\n\t\t->=0.5.0 (contracts/libraries/LiquidityAmounts.sol#2)\n\t\t->=0.5.0 (contracts/libraries/PoolAddress.sol#2)\n\t\t->=0.5.0 (contracts/libraries/PositionKey.sol#2)\n\t- Version constraint >=0.4.0 is used by:\n\t\t->=0.4.0 (@uniswap/v3-core/contracts/libraries/FixedPoint128.sol#2)\n\t\t->=0.4.0 (@uniswap/v3-core/contracts/libraries/FixedPoint96.sol#2)\n\t\t->=0.4.0 (@uniswap/v3-core/contracts/libraries/FullMath.sol#2)\n\t- Version constraint =0.7.6 is used by:\n\t\t-=0.7.6 (contracts/NonfungiblePositionManager.sol#2)\n\t\t-=0.7.6 (contracts/base/BlockTimestamp.sol#2)\n\t\t-=0.7.6 (contracts/base/ERC721Permit.sol#2)\n\t\t-=0.7.6 (contracts/base/LiquidityManagement.sol#2)\n\t\t-=0.7.6 (contracts/base/Multicall.sol#2)\n\t\t-=0.7.6 (contracts/base/PeripheryImmutableState.sol#2)\n\t\t-=0.7.6 (contracts/base/PeripheryValidation.sol#2)\n\t\t-=0.7.6 (contracts/base/PoolInitializer.sol#2)\n\t\t-=0.7.6 (contracts/interfaces/external/IWETH9.sol#2)\n\t\t-=0.7.6 (contracts/libraries/CallbackValidation.sol#2)\n\t- Version constraint >=0.7.5 is used by:\n\t\t->=0.7.5 (contracts/base/PeripheryPayments.sol#2)\n\t\t->=0.7.5 (contracts/interfaces/IERC721Permit.sol#2)\n\t\t->=0.7.5 (contracts/interfaces/IMulticall.sol#2)\n\t\t->=0.7.5 (contracts/interfaces/INonfungiblePositionManager.sol#2)\n\t\t->=0.7.5 (contracts/interfaces/IPeripheryPayments.sol#2)\n\t\t->=0.7.5 (contracts/interfaces/IPoolInitializer.sol#2)\n\t\t->=0.7.5 (contracts/interfaces/ISelfPermit.sol#2)\n\t- Version constraint >=0.7.0 is used by:\n\t\t->=0.7.0 (contracts/libraries/ChainId.sol#2)\n\t- Version constraint >=0.6.0 is used by:\n\t\t->=0.6.0 (contracts/libraries/TransferHelper.sol#2)\n","exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"@openzeppelin/contracts/drafts/IERC20Permit.sol","id":"afd6ed46cc5f32285470c1b29bfd24161badf60fcbf3073851d41f544d71bd41","line":3,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#pragma"],"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.","rule_id":"slither:pragma","severity":"informational","source":"slither","title":"8 different versions of Solidity are used:"},{"class":"logic","component":">=0.6.0<0.8.0","confidence":"high","description":"Version constraint >=0.6.0<0.8.0 is too complex.\nIt is used by:\n\t- >=0.6.0<0.8.0 (@openzeppelin/contracts/drafts/IERC20Permit.sol#3)\n\t- >=0.6.0<0.8.0 (@openzeppelin/contracts/utils/Context.sol#3)\n","exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"@openzeppelin/contracts/drafts/IERC20Permit.sol","id":"93163be8ba69208347f72b869b9b88348e24adb3675f19903458c6b60180804f","line":3,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#solc-version"],"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.","rule_id":"slither:solc-version","severity":"informational","source":"slither","title":"Version constraint >=0.6.0<0.8.0 is too complex."},{"class":"logic","component":"DOMAIN_SEPARATOR","confidence":"high","description":"Function IERC20Permit.DOMAIN_SEPARATOR() (@openzeppelin/contracts/drafts/IERC20Permit.sol#50) is not in mixedCase\n","exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"@openzeppelin/contracts/drafts/IERC20Permit.sol","id":"9a77c79a6cf40e2f151723e49ba63d30100a56d0f72688e58cdf4a550a6ff843","line":50,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#naming-convention"],"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.","rule_id":"slither:naming-convention","severity":"informational","source":"slither","title":"Function IERC20Permit.DOMAIN_SEPARATOR() (@openzeppelin/contracts/drafts/IERC20Permit.sol#50) is not in mixedCase"},{"class":"logic","component":"^0.7.0","confidence":"high","description":"Version constraint ^0.7.0 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)\n\t- FullInlinerNonExpressionSplitArgumentEvaluationOrder\n\t- MissingSideEffectsOnSelectorAccess\n\t- AbiReencodingHeadOverflowWithStaticArrayCleanup\n\t- DirtyBytesArrayToStorage\n\t- DataLocationChangeInInternalOverride\n\t- NestedCalldataArrayAbiReencodingSizeValidation\n\t- SignedImmutables\n\t- ABIDecodeTwoDimensionalArrayMemory\n\t- KeccakCaching\n\t- EmptyByteArrayCopy\n\t- DynamicArrayCleanup.\nIt is used by:\n\t- ^0.7.0 (@openzeppelin/contracts/introspection/ERC165.sol#3)\n\t- ^0.7.0 (@openzeppelin/contracts/introspection/IERC165.sol#3)\n\t- ^0.7.0 (@openzeppelin/contracts/math/SafeMath.sol#3)\n\t- ^0.7.0 (@openzeppelin/contracts/token/ERC20/IERC20.sol#3)\n\t- ^0.7.0 (@openzeppelin/contracts/token/ERC721/ERC721.sol#3)\n\t- ^0.7.0 (@openzeppelin/contracts/token/ERC721/IERC721.sol#3)\n\t- ^0.7.0 (@openzeppelin/contracts/token/ERC721/IERC721Enumerable.sol#3)\n\t- ^0.7.0 (@openzeppelin/contracts/token/ERC721/IERC721Metadata.sol#3)\n\t- ^0.7.0 (@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol#3)\n\t- ^0.7.0 (@openzeppelin/contracts/utils/Address.sol#3)\n\t- ^0.7.0 (@openzeppelin/contracts/utils/EnumerableMap.sol#3)\n\t- ^0.7.0 (@openzeppelin/contracts/utils/EnumerableSet.sol#3)\n\t- ^0.7.0 (@openzeppelin/contracts/utils/Strings.sol#3)\n","exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"@openzeppelin/contracts/introspection/ERC165.sol","id":"9cd103de993a0094482f6f7dcb063add07ad464398448a43517f9cc81cfa5f47","line":3,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#solc-version"],"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.","rule_id":"slither:solc-version","severity":"informational","source":"slither","title":"Version constraint ^0.7.0 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)"},{"class":"logic","component":"_data","confidence":"high","description":"Parameter ERC721.safeTransferFrom(address,address,uint256,bytes)._data (@openzeppelin/contracts/token/ERC721/ERC721.sol#245) is not in mixedCase\n","exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"@openzeppelin/contracts/token/ERC721/ERC721.sol","id":"4738072ee269ef93569c4e9ad5d6e048e2edd020e653ecb4e5b94cc29f5fc3d7","line":245,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#naming-convention"],"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.","rule_id":"slither:naming-convention","severity":"informational","source":"slither","title":"Parameter ERC721.safeTransferFrom(address,address,uint256,bytes)._data (@openzeppelin/contracts/token/ERC721/ERC721.sol#245) is not in mixedCase"},{"class":"other","component":"_safeMint","confidence":"medium","description":"ERC721._safeMint(address,uint256) (@openzeppelin/contracts/token/ERC721/ERC721.sol#308-310) is never used and should be removed\n","end_line":310,"exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"@openzeppelin/contracts/token/ERC721/ERC721.sol","id":"e705804a3ec3f3d08d998ec0db0f3bfff3d140e5df12bf2c7317f197b45e1d23","line":308,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#dead-code"],"remediation":"Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.","rule_id":"slither:dead-code","severity":"informational","source":"slither","title":"ERC721._safeMint(address,uint256) (@openzeppelin/contracts/token/ERC721/ERC721.sol#308-310) is never used and should be removed"},{"class":"other","component":"_safeMint","confidence":"medium","description":"ERC721._safeMint(address,uint256,bytes) (@openzeppelin/contracts/token/ERC721/ERC721.sol#316-319) is never used and should be removed\n","end_line":319,"exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"@openzeppelin/contracts/token/ERC721/ERC721.sol","id":"a9f8d610803b419c04c45303a43107fa505bac49176d5f486ed8e902b03eb72c","line":316,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#dead-code"],"remediation":"Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.","rule_id":"slither:dead-code","severity":"informational","source":"slither","title":"ERC721._safeMint(address,uint256,bytes) (@openzeppelin/contracts/token/ERC721/ERC721.sol#316-319) is never used and should be removed"},{"class":"other","component":"_setTokenURI","confidence":"medium","description":"ERC721._setTokenURI(uint256,string) (@openzeppelin/contracts/token/ERC721/ERC721.sol#411-414) is never used and should be removed\n","end_line":414,"exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"@openzeppelin/contracts/token/ERC721/ERC721.sol","id":"6121f2dd1b096d952c5b3b1637bb08d307c98ba5c4f4ec00a098a4014a472bc4","line":411,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#dead-code"],"remediation":"Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.","rule_id":"slither:dead-code","severity":"informational","source":"slither","title":"ERC721._setTokenURI(uint256,string) (@openzeppelin/contracts/token/ERC721/ERC721.sol#411-414) is never used and should be removed"},{"class":"other","component":"_setBaseURI","confidence":"medium","description":"ERC721._setBaseURI(string) (@openzeppelin/contracts/token/ERC721/ERC721.sol#421-423) is never used and should be removed\n","end_line":423,"exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"@openzeppelin/contracts/token/ERC721/ERC721.sol","id":"67cb310c9bea5fcdda01fd5f99d4858b2b9e078d4617e310fc8e31fcd17549bc","line":421,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#dead-code"],"remediation":"Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.","rule_id":"slither:dead-code","severity":"informational","source":"slither","title":"ERC721._setBaseURI(string) (@openzeppelin/contracts/token/ERC721/ERC721.sol#421-423) is never used and should be removed"},{"class":"other","component":"_approve","confidence":"medium","description":"ERC721._approve(address,uint256) (@openzeppelin/contracts/token/ERC721/ERC721.sol#457-460) is never used and should be removed\n","end_line":460,"exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"@openzeppelin/contracts/token/ERC721/ERC721.sol","id":"ebfd4d9137438fe3dd816d58c80fa12a16798e1b7d4f293b97a851b99c5db80b","line":457,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#dead-code"],"remediation":"Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.","rule_id":"slither:dead-code","severity":"informational","source":"slither","title":"ERC721._approve(address,uint256) (@openzeppelin/contracts/token/ERC721/ERC721.sol#457-460) is never used and should be removed"},{"class":"logic","component":"isContract","confidence":"high","description":"Address.isContract(address) (@openzeppelin/contracts/utils/Address.sol#26-35) uses assembly\n\t- INLINE ASM (@openzeppelin/contracts/utils/Address.sol#33)\n","end_line":35,"exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"@openzeppelin/contracts/utils/Address.sol","id":"db3c97caae897572b505df4067aae8adbf4993e8c9ec908bce53e9fc80361d37","line":26,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#assembly"],"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.","rule_id":"slither:assembly","severity":"informational","source":"slither","title":"Address.isContract(address) (@openzeppelin/contracts/utils/Address.sol#26-35) uses assembly"},{"class":"unchecked-call","component":"sendValue","confidence":"high","description":"Low level call in Address.sendValue(address,uint256) (@openzeppelin/contracts/utils/Address.sol#53-59):\n\t- (success,None) = recipient.call{value: amount}() (@openzeppelin/contracts/utils/Address.sol#57)\n","end_line":59,"exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"@openzeppelin/contracts/utils/Address.sol","id":"49c27bd5466486113312c8d0302c6aa919edbd26840f56dadfa28987edbeac5f","line":53,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#low-level-calls"],"remediation":"Check the boolean return of low-level call/delegatecall/send and revert on failure with a descriptive reason string.","rule_id":"slither:low-level-calls","severity":"informational","source":"slither","title":"Low level call in Address.sendValue(address,uint256) (@openzeppelin/contracts/utils/Address.sol#53-59):"},{"class":"unchecked-call","component":"functionCallWithValue","confidence":"high","description":"Low level call in Address.functionCallWithValue(address,bytes,uint256,string) (@openzeppelin/contracts/utils/Address.sol#114-121):\n\t- (success,returndata) = target.call{value: value}(data) (@openzeppelin/contracts/utils/Address.sol#119)\n","end_line":121,"exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"@openzeppelin/contracts/utils/Address.sol","id":"8a13bd86ae0897f0d57e43975f189f411a192c968bec067c6f6ea38c390b0180","line":114,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#low-level-calls"],"remediation":"Check the boolean return of low-level call/delegatecall/send and revert on failure with a descriptive reason string.","rule_id":"slither:low-level-calls","severity":"informational","source":"slither","title":"Low level call in Address.functionCallWithValue(address,bytes,uint256,string) (@openzeppelin/contracts/utils/Address.sol#114-121):"},{"class":"unchecked-call","component":"functionStaticCall","confidence":"high","description":"Low level call in Address.functionStaticCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#139-145):\n\t- (success,returndata) = target.staticcall(data) (@openzeppelin/contracts/utils/Address.sol#143)\n","end_line":145,"exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"@openzeppelin/contracts/utils/Address.sol","id":"e609a68a8305d6537020460e8d2f2b8d0005409434785a20831fc90292544727","line":139,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#low-level-calls"],"remediation":"Check the boolean return of low-level call/delegatecall/send and revert on failure with a descriptive reason string.","rule_id":"slither:low-level-calls","severity":"informational","source":"slither","title":"Low level call in Address.functionStaticCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#139-145):"},{"class":"unchecked-call","component":"functionDelegateCall","confidence":"high","description":"Low level call in Address.functionDelegateCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#163-169):\n\t- (success,returndata) = target.delegatecall(data) (@openzeppelin/contracts/utils/Address.sol#167)\n","end_line":169,"exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"@openzeppelin/contracts/utils/Address.sol","id":"54a6f47ceb28682483ca3e559430249850bd2a482c57246a9b9b2386883c5569","line":163,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#low-level-calls"],"remediation":"Check the boolean return of low-level call/delegatecall/send and revert on failure with a descriptive reason string.","rule_id":"slither:low-level-calls","severity":"informational","source":"slither","title":"Low level call in Address.functionDelegateCall(address,bytes,string) (@openzeppelin/contracts/utils/Address.sol#163-169):"},{"class":"logic","component":"_verifyCallResult","confidence":"high","description":"Address._verifyCallResult(bool,bytes,string) (@openzeppelin/contracts/utils/Address.sol#171-188) uses assembly\n\t- INLINE ASM (@openzeppelin/contracts/utils/Address.sol#180-183)\n","end_line":188,"exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"@openzeppelin/contracts/utils/Address.sol","id":"506fb3a749b4f17557192cf9175f582e8bbf6cfa5ec207e9bcbe57dc7499be0a","line":171,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#assembly"],"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.","rule_id":"slither:assembly","severity":"informational","source":"slither","title":"Address._verifyCallResult(bool,bytes,string) (@openzeppelin/contracts/utils/Address.sol#171-188) uses assembly"},{"class":"other","component":"_msgData","confidence":"medium","description":"Context._msgData() (@openzeppelin/contracts/utils/Context.sol#20-23) is never used and should be removed\n","end_line":23,"exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"@openzeppelin/contracts/utils/Context.sol","id":"93bd23634a3bf022810e43138345cf58db61248a704a7d277c8ec3d68c3ad188","line":20,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#dead-code"],"remediation":"Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.","rule_id":"slither:dead-code","severity":"informational","source":"slither","title":"Context._msgData() (@openzeppelin/contracts/utils/Context.sol#20-23) is never used and should be removed"},{"class":"other","component":"this","confidence":"high","description":"Redundant expression \"this (@openzeppelin/contracts/utils/Context.sol#21)\" inContext (@openzeppelin/contracts/utils/Context.sol#15-24)\n","exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"@openzeppelin/contracts/utils/Context.sol","id":"09b4c2bdfbfb327327b748c9e547dc50c8b7bccaeffe3ad7f673fc009b01cd3b","line":21,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#redundant-statements"],"remediation":"Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.","rule_id":"slither:redundant-statements","severity":"informational","source":"slither","title":"Redundant expression \"this (@openzeppelin/contracts/utils/Context.sol#21)\" inContext (@openzeppelin/contracts/utils/Context.sol#15-24)"},{"class":"logic","component":">=0.5.0","confidence":"high","description":"Version constraint >=0.5.0 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)\n\t- DirtyBytesArrayToStorage\n\t- ABIDecodeTwoDimensionalArrayMemory\n\t- KeccakCaching\n\t- EmptyByteArrayCopy\n\t- DynamicArrayCleanup\n\t- ImplicitConstructorCallvalueCheck\n\t- TupleAssignmentMultiStackSlotComponents\n\t- MemoryArrayCreationOverflow\n\t- privateCanBeOverridden\n\t- SignedArrayStorageCopy\n\t- ABIEncoderV2StorageArrayWithMultiSlotElement\n\t- DynamicConstructorArgumentsClippedABIV2\n\t- UninitializedFunctionPointerInConstructor\n\t- IncorrectEventSignatureInLibraries\n\t- ABIEncoderV2PackedStorage.\nIt is used by:\n\t- >=0.5.0 (@uniswap/v3-core/contracts/interfaces/IUniswapV3Factory.sol#2)\n\t- >=0.5.0 (@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol#2)\n\t- >=0.5.0 (@uniswap/v3-core/contracts/interfaces/callback/IUniswapV3MintCallback.sol#2)\n\t- >=0.5.0 (@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol#2)\n\t- >=0.5.0 (@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol#2)\n\t- >=0.5.0 (@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol#2)\n\t- >=0.5.0 (@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol#2)\n\t- >=0.5.0 (@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol#2)\n\t- >=0.5.0 (@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol#2)\n\t- >=0.5.0 (@uniswap/v3-core/contracts/libraries/TickMath.sol#2)\n\t- >=0.5.0 (contracts/base/SelfPermit.sol#2)\n\t- >=0.5.0 (contracts/interfaces/INonfungibleTokenPositionDescriptor.sol#2)\n\t- >=0.5.0 (contracts/interfaces/IPeripheryImmutableState.sol#2)\n\t- >=0.5.0 (contracts/interfaces/external/IERC1271.sol#2)\n\t- >=0.5.0 (contracts/interfaces/external/IERC20PermitAllowed.sol#2)\n\t- >=0.5.0 (contracts/libraries/LiquidityAmounts.sol#2)\n\t- >=0.5.0 (contracts/libraries/PoolAddress.sol#2)\n\t- >=0.5.0 (contracts/libraries/PositionKey.sol#2)\n","exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"@uniswap/v3-core/contracts/interfaces/IUniswapV3Factory.sol","id":"67ad29b0428b1d2b1662d382343864bca917d8067807dbf72043378b55934f6c","line":2,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#solc-version"],"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.","rule_id":"slither:solc-version","severity":"informational","source":"slither","title":"Version constraint >=0.5.0 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)"},{"class":"logic","component":">=0.4.0","confidence":"high","description":"Version constraint >=0.4.0 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)\n\t- DirtyBytesArrayToStorage\n\t- KeccakCaching\n\t- EmptyByteArrayCopy\n\t- DynamicArrayCleanup\n\t- TupleAssignmentMultiStackSlotComponents\n\t- MemoryArrayCreationOverflow\n\t- privateCanBeOverridden\n\t- IncorrectEventSignatureInLibraries_0.4.x\n\t- ExpExponentCleanup\n\t- NestedArrayFunctionCallDecoder\n\t- ZeroFunctionSelector\n\t- DelegateCallReturnValue\n\t- ECRecoverMalformedInput\n\t- SkipEmptyStringLiteral\n\t- ConstantOptimizerSubtraction\n\t- IdentityPrecompileReturnIgnored\n\t- HighOrderByteCleanStorage\n\t- OptimizerStaleKnowledgeAboutSHA3\n\t- LibrariesNotCallableFromPayableFunctions.\nIt is used by:\n\t- >=0.4.0 (@uniswap/v3-core/contracts/libraries/FixedPoint128.sol#2)\n\t- >=0.4.0 (@uniswap/v3-core/contracts/libraries/FixedPoint96.sol#2)\n\t- >=0.4.0 (@uniswap/v3-core/contracts/libraries/FullMath.sol#2)\n","exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"@uniswap/v3-core/contracts/libraries/FixedPoint128.sol","id":"62ef71fe8b521029780d15204fe165b9f40e087be1a370ad01be736f787b43ce","line":2,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#solc-version"],"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.","rule_id":"slither:solc-version","severity":"informational","source":"slither","title":"Version constraint >=0.4.0 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)"},{"class":"other","component":"slitherConstructorConstantVariables","confidence":"medium","description":"FixedPoint128.slitherConstructorConstantVariables() (@uniswap/v3-core/contracts/libraries/FixedPoint128.sol#6-8) uses literals with too many digits:\n\t- Q128 = 0x100000000000000000000000000000000 (@uniswap/v3-core/contracts/libraries/FixedPoint128.sol#7)\n","end_line":8,"exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"@uniswap/v3-core/contracts/libraries/FixedPoint128.sol","id":"f9589712dea974c6187bbf976c2d624f7e219b72f9d38cff1d7c748587ddf038","line":6,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#too-many-digits"],"remediation":"Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.","rule_id":"slither:too-many-digits","severity":"informational","source":"slither","title":"FixedPoint128.slitherConstructorConstantVariables() (@uniswap/v3-core/contracts/libraries/FixedPoint128.sol#6-8) uses literals with too many digits:"},{"class":"other","component":"slitherConstructorConstantVariables","confidence":"medium","description":"FixedPoint96.slitherConstructorConstantVariables() (@uniswap/v3-core/contracts/libraries/FixedPoint96.sol#7-10) uses literals with too many digits:\n\t- Q96 = 0x1000000000000000000000000 (@uniswap/v3-core/contracts/libraries/FixedPoint96.sol#9)\n","end_line":10,"exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"@uniswap/v3-core/contracts/libraries/FixedPoint96.sol","id":"e37f680121f2560a8020840b9f9c5c7d52b5db6b44a7ad4ade2244fcd4c97291","line":7,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#too-many-digits"],"remediation":"Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.","rule_id":"slither:too-many-digits","severity":"informational","source":"slither","title":"FixedPoint96.slitherConstructorConstantVariables() (@uniswap/v3-core/contracts/libraries/FixedPoint96.sol#7-10) uses literals with too many digits:"},{"class":"logic","component":"mulDiv","confidence":"high","description":"FullMath.mulDiv(uint256,uint256,uint256) (@uniswap/v3-core/contracts/libraries/FullMath.sol#14-106) uses assembly\n\t- INLINE ASM (@uniswap/v3-core/contracts/libraries/FullMath.sol#26-30)\n\t- INLINE ASM (@uniswap/v3-core/contracts/libraries/FullMath.sol#35-37)\n\t- INLINE ASM (@uniswap/v3-core/contracts/libraries/FullMath.sol#52-54)\n\t- INLINE ASM (@uniswap/v3-core/contracts/libraries/FullMath.sol#56-59)\n\t- INLINE ASM (@uniswap/v3-core/contracts/libraries/FullMath.sol#66-68)\n\t- INLINE ASM (@uniswap/v3-core/contracts/libraries/FullMath.sol#71-73)\n\t- INLINE ASM (@uniswap/v3-core/contracts/libraries/FullMath.sol#77-79)\n","end_line":106,"exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"@uniswap/v3-core/contracts/libraries/FullMath.sol","id":"980a9c5530b7a2eba50f8e45d43fae30c79872179a978485773a9a4a6854873a","line":14,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#assembly"],"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.","rule_id":"slither:assembly","severity":"informational","source":"slither","title":"FullMath.mulDiv(uint256,uint256,uint256) (@uniswap/v3-core/contracts/libraries/FullMath.sol#14-106) uses assembly"},{"class":"other","component":"getSqrtRatioAtTick","confidence":"high","description":"TickMath.getSqrtRatioAtTick(int24) (@uniswap/v3-core/contracts/libraries/TickMath.sol#23-54) has a high cyclomatic complexity (24).\n","end_line":54,"exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"@uniswap/v3-core/contracts/libraries/TickMath.sol","id":"299db849fa7b8fd3931fc6d0ed62d57ec8a93eb237f23adbdd487c9a70222e33","line":23,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#cyclomatic-complexity"],"remediation":"Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.","rule_id":"slither:cyclomatic-complexity","severity":"informational","source":"slither","title":"TickMath.getSqrtRatioAtTick(int24) (@uniswap/v3-core/contracts/libraries/TickMath.sol#23-54) has a high cyclomatic complexity (24)."},{"class":"other","component":"getSqrtRatioAtTick","confidence":"medium","description":"TickMath.getSqrtRatioAtTick(int24) (@uniswap/v3-core/contracts/libraries/TickMath.sol#23-54) uses literals with too many digits:\n\t- ratio = 0x100000000000000000000000000000000 (@uniswap/v3-core/contracts/libraries/TickMath.sol#27)\n","end_line":54,"exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"@uniswap/v3-core/contracts/libraries/TickMath.sol","id":"8d27b07616ae7d2302004b93a0b62aa88cac7d56c923f873e8f8d547929a0ee8","line":23,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#too-many-digits"],"remediation":"Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.","rule_id":"slither:too-many-digits","severity":"informational","source":"slither","title":"TickMath.getSqrtRatioAtTick(int24) (@uniswap/v3-core/contracts/libraries/TickMath.sol#23-54) uses literals with too many digits:"},{"class":"logic","component":"getTickAtSqrtRatio","confidence":"high","description":"TickMath.getTickAtSqrtRatio(uint160) (@uniswap/v3-core/contracts/libraries/TickMath.sol#61-204) uses assembly\n\t- INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#69-73)\n\t- INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#74-78)\n\t- INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#79-83)\n\t- INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#84-88)\n\t- INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#89-93)\n\t- INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#94-98)\n\t- INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#99-103)\n\t- INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#104-107)\n\t- INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#114-119)\n\t- INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#120-125)\n\t- INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#126-131)\n\t- INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#132-137)\n\t- INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#138-143)\n\t- INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#144-149)\n\t- INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#150-155)\n\t- INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#156-161)\n\t- INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#162-167)\n\t- INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#168-173)\n\t- INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#174-179)\n\t- INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#180-185)\n\t- INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#186-191)\n\t- INLINE ASM (@uniswap/v3-core/contracts/libraries/TickMath.sol#192-196)\n","end_line":204,"exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"@uniswap/v3-core/contracts/libraries/TickMath.sol","id":"ef58d7d49be2cae4ed0f3ee61711c366aaf5c6dcf10b379f570dcba838c2a7d1","line":61,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#assembly"],"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.","rule_id":"slither:assembly","severity":"informational","source":"slither","title":"TickMath.getTickAtSqrtRatio(uint160) (@uniswap/v3-core/contracts/libraries/TickMath.sol#61-204) uses assembly"},{"class":"logic","component":"=0.7.6","confidence":"high","description":"Version constraint =0.7.6 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)\n\t- FullInlinerNonExpressionSplitArgumentEvaluationOrder\n\t- MissingSideEffectsOnSelectorAccess\n\t- AbiReencodingHeadOverflowWithStaticArrayCleanup\n\t- DirtyBytesArrayToStorage\n\t- DataLocationChangeInInternalOverride\n\t- NestedCalldataArrayAbiReencodingSizeValidation\n\t- SignedImmutables\n\t- ABIDecodeTwoDimensionalArrayMemory\n\t- KeccakCaching.\nIt is used by:\n\t- =0.7.6 (contracts/NonfungiblePositionManager.sol#2)\n\t- =0.7.6 (contracts/base/BlockTimestamp.sol#2)\n\t- =0.7.6 (contracts/base/ERC721Permit.sol#2)\n\t- =0.7.6 (contracts/base/LiquidityManagement.sol#2)\n\t- =0.7.6 (contracts/base/Multicall.sol#2)\n\t- =0.7.6 (contracts/base/PeripheryImmutableState.sol#2)\n\t- =0.7.6 (contracts/base/PeripheryValidation.sol#2)\n\t- =0.7.6 (contracts/base/PoolInitializer.sol#2)\n\t- =0.7.6 (contracts/interfaces/external/IWETH9.sol#2)\n\t- =0.7.6 (contracts/libraries/CallbackValidation.sol#2)\n","exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"contracts/NonfungiblePositionManager.sol","id":"8d888e4a76df10db0510b0cccb9ee1c77cb481856f1378646379249808987479","line":2,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#solc-version"],"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.","rule_id":"slither:solc-version","severity":"informational","source":"slither","title":"Version constraint =0.7.6 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)"},{"class":"logic","component":"DOMAIN_SEPARATOR","confidence":"high","description":"Function ERC721Permit.DOMAIN_SEPARATOR() (contracts/base/ERC721Permit.sol#35-47) is not in mixedCase\n","end_line":47,"exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"contracts/base/ERC721Permit.sol","id":"e1bcfb933911254969fac9f4a490c8d9d8d548854d46bce25a3bc9e1fa4fa077","line":35,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#naming-convention"],"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.","rule_id":"slither:naming-convention","severity":"informational","source":"slither","title":"Function ERC721Permit.DOMAIN_SEPARATOR() (contracts/base/ERC721Permit.sol#35-47) is not in mixedCase"},{"class":"logic","component":"multicall","confidence":"high","description":"Multicall.multicall(bytes[]) (contracts/base/Multicall.sol#11-27) uses assembly\n\t- INLINE ASM (contracts/base/Multicall.sol#19-21)\n","end_line":27,"exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"contracts/base/Multicall.sol","id":"a6d45319264161eed0d1ecdc3985277514e6fac0ce000a5fa487450e6a123d9b","line":11,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#assembly"],"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.","rule_id":"slither:assembly","severity":"informational","source":"slither","title":"Multicall.multicall(bytes[]) (contracts/base/Multicall.sol#11-27) uses assembly"},{"class":"unchecked-call","component":"multicall","confidence":"high","description":"Low level call in Multicall.multicall(bytes[]) (contracts/base/Multicall.sol#11-27):\n\t- (success,result) = address(this).delegatecall(data[i]) (contracts/base/Multicall.sol#14)\n","end_line":27,"exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"contracts/base/Multicall.sol","id":"4f515f86611448d33ae1c70f3f28208d1639c37025b0275ec9bb9a4da6ebfb37","line":11,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#low-level-calls"],"remediation":"Check the boolean return of low-level call/delegatecall/send and revert on failure with a descriptive reason string.","rule_id":"slither:low-level-calls","severity":"informational","source":"slither","title":"Low level call in Multicall.multicall(bytes[]) (contracts/base/Multicall.sol#11-27):"},{"class":"logic","component":"WETH9","confidence":"high","description":"Variable PeripheryImmutableState.WETH9 (contracts/base/PeripheryImmutableState.sol#12) is not in mixedCase\n","exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"contracts/base/PeripheryImmutableState.sol","id":"588a4ac111d11de7f23ed9765c76ef4db594fd22163a3a0a4622293606de478b","line":12,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#naming-convention"],"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.","rule_id":"slither:naming-convention","severity":"informational","source":"slither","title":"Variable PeripheryImmutableState.WETH9 (contracts/base/PeripheryImmutableState.sol#12) is not in mixedCase"},{"class":"logic","component":">=0.7.5","confidence":"high","description":"Version constraint >=0.7.5 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)\n\t- FullInlinerNonExpressionSplitArgumentEvaluationOrder\n\t- MissingSideEffectsOnSelectorAccess\n\t- AbiReencodingHeadOverflowWithStaticArrayCleanup\n\t- DirtyBytesArrayToStorage\n\t- DataLocationChangeInInternalOverride\n\t- NestedCalldataArrayAbiReencodingSizeValidation\n\t- SignedImmutables\n\t- ABIDecodeTwoDimensionalArrayMemory\n\t- KeccakCaching.\nIt is used by:\n\t- >=0.7.5 (contracts/base/PeripheryPayments.sol#2)\n\t- >=0.7.5 (contracts/interfaces/IERC721Permit.sol#2)\n\t- >=0.7.5 (contracts/interfaces/IMulticall.sol#2)\n\t- >=0.7.5 (contracts/interfaces/INonfungiblePositionManager.sol#2)\n\t- >=0.7.5 (contracts/interfaces/IPeripheryPayments.sol#2)\n\t- >=0.7.5 (contracts/interfaces/IPoolInitializer.sol#2)\n\t- >=0.7.5 (contracts/interfaces/ISelfPermit.sol#2)\n","exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"contracts/base/PeripheryPayments.sol","id":"7eaa2b86cff6c0658eac94aeb97c7cfcb5aae8e58b7672e8e41f4e1b0755a8fb","line":2,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#solc-version"],"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.","rule_id":"slither:solc-version","severity":"informational","source":"slither","title":"Version constraint >=0.7.5 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)"},{"class":"logic","component":"PERMIT_TYPEHASH","confidence":"high","description":"Function IERC721Permit.PERMIT_TYPEHASH() (contracts/interfaces/IERC721Permit.sol#11) is not in mixedCase\n","exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"contracts/interfaces/IERC721Permit.sol","id":"6d3acd3ac3dd22a31d76cec3036139b767c1c12e957bc270d1f0a961b6166bf5","line":11,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#naming-convention"],"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.","rule_id":"slither:naming-convention","severity":"informational","source":"slither","title":"Function IERC721Permit.PERMIT_TYPEHASH() (contracts/interfaces/IERC721Permit.sol#11) is not in mixedCase"},{"class":"logic","component":"DOMAIN_SEPARATOR","confidence":"high","description":"Function IERC721Permit.DOMAIN_SEPARATOR() (contracts/interfaces/IERC721Permit.sol#15) is not in mixedCase\n","exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"contracts/interfaces/IERC721Permit.sol","id":"96a5e9de75cec8840bf9769098edf1f7b3c1fcb58e84c9d777127525cc1e55d3","line":15,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#naming-convention"],"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.","rule_id":"slither:naming-convention","severity":"informational","source":"slither","title":"Function IERC721Permit.DOMAIN_SEPARATOR() (contracts/interfaces/IERC721Permit.sol#15) is not in mixedCase"},{"class":"other","component":"UpdateTokenRatioPriority","confidence":"high","description":"Event INonfungibleTokenPositionDescriptor.UpdateTokenRatioPriority(address,int256) (contracts/interfaces/INonfungibleTokenPositionDescriptor.sol#11) has address parameters but no indexed parameters\n","exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"contracts/interfaces/INonfungibleTokenPositionDescriptor.sol","id":"d67a2dd27a8cac87bfe1dea37a82ee5a5c2b6f80b736f6bbabc848964829542d","line":11,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#unindexed-event-address"],"remediation":"Review the detector output against the source manually; if exploitable, design a fix and add a regression test before deploying.","rule_id":"slither:unindexed-event-address","severity":"informational","source":"slither","title":"Event INonfungibleTokenPositionDescriptor.UpdateTokenRatioPriority(address,int256) (contracts/interfaces/INonfungibleTokenPositionDescriptor.sol#11) has address"},{"class":"logic","component":"WETH9","confidence":"high","description":"Function IPeripheryImmutableState.WETH9() (contracts/interfaces/IPeripheryImmutableState.sol#11) is not in mixedCase\n","exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"contracts/interfaces/IPeripheryImmutableState.sol","id":"86e5e9fa5b48a39a6b5925350e1589b9ece0eeca6581f75b03bb0b858c3299b7","line":11,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#naming-convention"],"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.","rule_id":"slither:naming-convention","severity":"informational","source":"slither","title":"Function IPeripheryImmutableState.WETH9() (contracts/interfaces/IPeripheryImmutableState.sol#11) is not in mixedCase"},{"class":"logic","component":">=0.7.0","confidence":"high","description":"Version constraint >=0.7.0 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)\n\t- FullInlinerNonExpressionSplitArgumentEvaluationOrder\n\t- MissingSideEffectsOnSelectorAccess\n\t- AbiReencodingHeadOverflowWithStaticArrayCleanup\n\t- DirtyBytesArrayToStorage\n\t- DataLocationChangeInInternalOverride\n\t- NestedCalldataArrayAbiReencodingSizeValidation\n\t- SignedImmutables\n\t- ABIDecodeTwoDimensionalArrayMemory\n\t- KeccakCaching\n\t- EmptyByteArrayCopy\n\t- DynamicArrayCleanup.\nIt is used by:\n\t- >=0.7.0 (contracts/libraries/ChainId.sol#2)\n","exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"contracts/libraries/ChainId.sol","id":"40ef5d43d6cc777a1bfd296e2273ce3cc6fe369574948eace3c920b2b47c5794","line":2,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#solc-version"],"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.","rule_id":"slither:solc-version","severity":"informational","source":"slither","title":"Version constraint >=0.7.0 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)"},{"class":"logic","component":"get","confidence":"high","description":"ChainId.get() (contracts/libraries/ChainId.sol#8-12) uses assembly\n\t- INLINE ASM (contracts/libraries/ChainId.sol#9-11)\n","end_line":12,"exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"contracts/libraries/ChainId.sol","id":"12cec67410b52e2a2c746f69fbc219c88d64e36a80d9de57ff0cdff9bd9e0539","line":8,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#assembly"],"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.","rule_id":"slither:assembly","severity":"informational","source":"slither","title":"ChainId.get() (contracts/libraries/ChainId.sol#8-12) uses assembly"},{"class":"logic","component":">=0.6.0","confidence":"high","description":"Version constraint >=0.6.0 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)\n\t- AbiReencodingHeadOverflowWithStaticArrayCleanup\n\t- DirtyBytesArrayToStorage\n\t- NestedCalldataArrayAbiReencodingSizeValidation\n\t- ABIDecodeTwoDimensionalArrayMemory\n\t- KeccakCaching\n\t- EmptyByteArrayCopy\n\t- DynamicArrayCleanup\n\t- MissingEscapingInFormatting\n\t- ArraySliceDynamicallyEncodedBaseType\n\t- ImplicitConstructorCallvalueCheck\n\t- TupleAssignmentMultiStackSlotComponents\n\t- MemoryArrayCreationOverflow\n\t- YulOptimizerRedundantAssignmentBreakContinue.\nIt is used by:\n\t- >=0.6.0 (contracts/libraries/TransferHelper.sol#2)\n","exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"contracts/libraries/TransferHelper.sol","id":"9f7b47761e7cfe3f0cdc776c4d6d0d8c930d05b86843721357b9934438b38e9c","line":2,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#solc-version"],"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.","rule_id":"slither:solc-version","severity":"informational","source":"slither","title":"Version constraint >=0.6.0 contains known severe issues (https://solidity.readthedocs.io/en/latest/bugs.html)"},{"class":"unchecked-call","component":"safeTransferFrom","confidence":"high","description":"Low level call in TransferHelper.safeTransferFrom(address,address,address,uint256) (contracts/libraries/TransferHelper.sol#13-22):\n\t- (success,data) = token.call(abi.encodeWithSelector(IERC20.transferFrom.selector,from,to,value)) (contracts/libraries/TransferHelper.sol#19-20)\n","end_line":22,"exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"contracts/libraries/TransferHelper.sol","id":"1811e89984d964d216b27b1686ac61d5d7fc709d88dfbb02c4334142bc2deac5","line":13,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#low-level-calls"],"remediation":"Check the boolean return of low-level call/delegatecall/send and revert on failure with a descriptive reason string.","rule_id":"slither:low-level-calls","severity":"informational","source":"slither","title":"Low level call in TransferHelper.safeTransferFrom(address,address,address,uint256) (contracts/libraries/TransferHelper.sol#13-22):"},{"class":"unchecked-call","component":"safeTransfer","confidence":"high","description":"Low level call in TransferHelper.safeTransfer(address,address,uint256) (contracts/libraries/TransferHelper.sol#29-36):\n\t- (success,data) = token.call(abi.encodeWithSelector(IERC20.transfer.selector,to,value)) (contracts/libraries/TransferHelper.sol#34)\n","end_line":36,"exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"contracts/libraries/TransferHelper.sol","id":"e424844a8b7bcfe538545aabf245f937aecdcf8e0a2042890ad55749eaaaabe6","line":29,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#low-level-calls"],"remediation":"Check the boolean return of low-level call/delegatecall/send and revert on failure with a descriptive reason string.","rule_id":"slither:low-level-calls","severity":"informational","source":"slither","title":"Low level call in TransferHelper.safeTransfer(address,address,uint256) (contracts/libraries/TransferHelper.sol#29-36):"},{"class":"unchecked-call","component":"safeApprove","confidence":"high","description":"Low level call in TransferHelper.safeApprove(address,address,uint256) (contracts/libraries/TransferHelper.sol#43-50):\n\t- (success,data) = token.call(abi.encodeWithSelector(IERC20.approve.selector,to,value)) (contracts/libraries/TransferHelper.sol#48)\n","end_line":50,"exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"contracts/libraries/TransferHelper.sol","id":"a34258a52ee67b08da3a3c62aac385ff282c598a479d64431f39da7bffdeba52","line":43,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#low-level-calls"],"remediation":"Check the boolean return of low-level call/delegatecall/send and revert on failure with a descriptive reason string.","rule_id":"slither:low-level-calls","severity":"informational","source":"slither","title":"Low level call in TransferHelper.safeApprove(address,address,uint256) (contracts/libraries/TransferHelper.sol#43-50):"},{"class":"unchecked-call","component":"safeTransferETH","confidence":"high","description":"Low level call in TransferHelper.safeTransferETH(address,uint256) (contracts/libraries/TransferHelper.sol#56-59):\n\t- (success,None) = to.call{value: value}(new bytes(0)) (contracts/libraries/TransferHelper.sol#57)\n","end_line":59,"exploitability":"low","exploitability_note":"Informational signal; not directly exploitable without additional context.","file":"contracts/libraries/TransferHelper.sol","id":"7333a2689fa1030e8d91eda540b84f025a7f2aa0e7cd36754702d20baa9124eb","line":56,"references":["https://github.com/crytic/slither/wiki/Detector-Documentation#low-level-calls"],"remediation":"Check the boolean return of low-level call/delegatecall/send and revert on failure with a descriptive reason string.","rule_id":"slither:low-level-calls","severity":"informational","source":"slither","title":"Low level call in TransferHelper.safeTransferETH(address,uint256) (contracts/libraries/TransferHelper.sol#56-59):"}],"limitations":["VegaSec runs static analysis only. Findings can include false positives, miss patterns the configured detectors do not cover, and never replace manual auditor judgement.","Scan ran slither and semgrep against a multi-file sandboxed bundle of 55 Solidity file(s). Imports resolve between the bundled files; dependencies outside the bundle (an npm package, another repo, a generated file) are NOT analyzed, and an unresolved import makes the run partial rather than clean.","Some detectors emitted warnings (see `warnings`); their output was still ingested but should be read with extra care.","This report is not a certification, audit attestation, or financial advice."],"warnings":["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'"]},"canonical_version":"vss-canonical-1","coverage_status":"complete","final_score":0,"findings_count":77,"generated_at":"2026-09-23T23:30:49.637Z","id":"VSS-20260923-QDWLT3HE","severity_counts":{"critical":0,"high":5,"informational":43,"low":7,"medium":22},"source_filename":"NonfungiblePositionManager.sol","source_hash":"1c76e88943690e340dc364de256781d337165944c7655ded7ecad508deb5e802","surface":"solidity","warnings_count":6}