PoolManager
Scanned October 17, 2026 · Check a different contract →
PoolManager
How the owner could rug you
1 owner power found that could be used against holders. Each is a capability the code grants — not proof of intent.
The caller can create arbitrary amounts of the token and assign them to any address, diluting all existing holders.
Code: function mint(address to, uint256 id, uint256 amount) external onlyWhenUnlocked { ... _mint(to, currency.toId(), amount); }
Code: modifier onlyWhenUnlocked() { if (!Lock.isUnlocked()) ManagerLocked.selector.revertWith(); _; } used on swap, modifyLiquidity, donate, take, settle, etc.
Code: No mapping or function that checks a blacklist before transfers is visible in the provided code.
Code: function updateDynamicLPFee(PoolKey memory key, uint24 newDynamicLPFee) external { if (!key.fee.isDynamicFee() || msg.sender != address(key.hooks)) revert; ... _pools[id].setLPFee(newDynamicLPFee); }
Code: The contract does not inherit from a proxy pattern and no upgrade function is visible in the excerpt.
Code: The only withdraw‑like function is take(...), which has no access restriction beyond the lock, making it public rather than owner‑only.
Code: Constructor stores initialOwner in ProtocolFees, but no onlyOwner modifiers appear in the visible code.
This checks only what the code can do. It cannot see whether liquidity is locked, how concentrated holders are, or what the team intends — those need live on-chain data. Absence of these mechanisms is not proof a token is safe.
What this could cost you
How much money would you put into this? We'll show you what you could actually lose — in dollars, not just a scary word like "risk."
Enter an amount above to see it in real dollars instead of just labels.
This contract's code is 88,888 characters (after removing comments and whitespace) — only the first 9,000 were analyzed, so parts of it were not examined. That's the real reason, not a vague size limit: 79,888 characters were cut off the end. The contract's own code was read first, so what was cut is mostly shared library code.
What the code allows
Evidence: function mint(address to, uint256 id, uint256 amount) external onlyWhenUnlocked { ... _mint(to, ...); }
This allows: Allows creation of new token units after deployment, leading to possible dilution.
Evidence: modifier onlyWhenUnlocked() applied to swap, modifyLiquidity, donate, take, settle, clear, mint, burn, etc.
This allows: Transfers and liquidity actions are only possible when the contract lock is in the unlocked state.
Evidence: swap() calls _swap() which emits Swap with swapFee; updateDynamicLPFee can change the fee.
This allows: Fees affect the amount users receive on each trade.
Evidence: onlyWhenUnlocked modifier reverts when Lock.isUnlocked() is false, effectively pausing guarded functions.
This allows: The contract can halt core operations if the lock remains locked.
Evidence: No function in the excerpt uses a modifier like onlyOwner or checks msg.sender against an owner variable.
This allows: If owner privileges exist elsewhere they could affect token control.
Evidence: Contract inherits NoDelegateCall, ProtocolFees, ERC6909Claims, Extsload, Exttload but no upgrade function is shown.
This allows: Upgradeability would allow future changes to contract logic.
Evidence: constructor(address initialOwner) ProtocolFees(initialOwner) {} stores owner in ProtocolFees, but no checks are visible here.
This allows: Whether the owner still holds power influences control over the contract.
Worth reading yourself
- ›modifier onlyWhenUnlocked() { if (!Lock.isUnlocked()) ManagerLocked.selector.revertWith(); _; }
- ›function mint(address to, uint256 id, uint256 amount) external onlyWhenUnlocked { ... _mint(to, ...); }
- ›function updateDynamicLPFee(PoolKey memory key, uint24 newDynamicLPFee) external { if (!key.fee.isDynamicFee() || msg.sender != address(key.hooks)) revert; ... }
What this did not check
- ›The source provided is truncated at 9000 characters; any code beyond the excerpt could introduce or remove mechanisms.
- ›Liquidity lock status, holder concentration, and actual on‑chain balances are not visible in the source and were not checked.
Automated review of verified source only. Not an audit. Does not cover on-chain state, holder distribution, liquidity, or deployer behavior. It cannot tell you whether a token is safe or whether to buy it. Absence of a finding is not evidence that a contract is sound — it may mean the relevant code was not readable, not verified, or not reached.
Want more than the free read?
A real security researcher personally reads this contract's verified source — not an automated re-run of the free check.
What's checked
The same 7 owner-power categories as the free check — mint authority, ability to disable trading, blacklist power, mutable fees, upgradeability, privileged withdrawal, and whether ownership is still active — plus 4 categories the free tier doesn't cover: exact current fee values and where they're set, whether ownership itself can be transferred (and to whom), any hardcoded or owner-settable exceptions to fees/limits/blacklist, and external contracts this one calls out to and trusts.
How it's done
I read the contract's actual verified source directly — no token-window truncation, since a person isn't limited by an LLM's context size the way the free tier is. Every finding cites the specific function or modifier it comes from; if the code doesn't determine something, the report says so instead of guessing.
What you get
A written report emailed to you within 24 hours: a plain-English summary, every finding with its evidence, and what the review could not determine from source alone.
Disclaimer: this is a capability review of verified source code, not a formal security audit and not investment advice. It reports what the contract's owner/admin technically CAN do — it does not check on-chain state, liquidity depth, holder concentration, or deployer behavior, and it does not certify a contract as safe.
Building something that needs this programmatically?
By purchasing, you agree to our Terms of Service and Privacy Policy.
This report documents observable code capabilities only. It is not investment advice, a safety rating, or an endorsement of any kind. Capabilities listed as present do not indicate intent to misuse them. This analysis covers verified source code only — it does not assess on-chain state, liquidity, holder concentration, or deployer behavior.
nexustrinity.io · Report ID: NXT-2026-11-06-8A90 · 2026-11-06 14:42:44 UTC
This is a surface read
It reports capabilities visible in source. It does not model economics, test exploit paths, or reason about how contracts interact. A real review does — with runnable proofs for anything it claims.
Request a security review →Paid reviews go further than this free scan: every finding is signed, timestamped, and hash-chained into a record — self-scored 16/20 against an independent standard →