Radar by SecureChain AI

Investment Banker (INVSTMNT) security report

Radar AI scanned Investment Banker (INVSTMNT) on Base at 0xa99b8a231a1ea9b9e636eaec679de85a0378aba3 using verified source review and GoPlus evidence. Slither was skipped. GoPlus reports no honeypot, blacklist, mintability, transfer tax, proxy, or selfdestruct signal. The source review identified owner-controlled pool locking, controller removal of the balance limit, and unconditional infinite allowance for canonical Permit2.

The contract was AI-scanned using verified source review and GoPlus evidence; Slither was skipped. No Critical finding was confirmed, but three Medium-to-High control risks were identified. GoPlus reports no honeypot, mintability, blacklist, or proxy signal, although the source includes owner-controlled pool transfer blocking and a balance-limit controller.

Trust score: 67/100. Source verified: Yes. Chain: base. Contract: 0xa99b8a231a1ea9b9e636eaec679de85a0378aba3.

This report was last modified on 2026-09-27 and contains 3 material findings.

high finding: Owner can block transfers to the configured pool

The owner can call lockPool to set any address as the pool and make transfers to that address revert while the pool remains locked. If the configured address is a trading pool, this can prevent token sales or liquidity operations until the owner calls unlockPool.

Evidence: DopplerERC20V1.lockPool(address pool_) is onlyOwner and sets pool = pool_ and isPoolLocked = true. _beforeTokenTransfer reverts with PoolLocked when to == pool and isPoolLocked.

Recommendation: Use a timelock or multisignature owner for pool-lock operations, restrict the pool address to an immutable or factory-approved value, and publish operational safeguards for lock and unlock actions.

medium finding: Controller can permanently disable the balance limit

When initialized with an active balance limit, the separately configured controller can permanently disable it before its scheduled expiry. Excluded addresses also bypass the limit, so initialization parameters determine which accounts can receive unrestricted balances during the restriction period.

Evidence: initialize sets controller = controller_ and isBalanceLimitActive = true when maxBalanceLimit_ or balanceLimitEnd_ is provided. disableBalanceLimit is onlyController and sets isBalanceLimitActive = false permanently. _beforeTokenTransfer enforces maxBalanceLimit only for recipients not listed in isExcludedFromBalanceLimit. GoPlus reports anti-whale behavior, but does not provide the controller value or initialization parameters.

Recommendation: Use a governed controller, emit and monitor controller changes where applicable, minimize excluded addresses, and consider making balance-limit removal timelocked or irreversible only after transparent community notice.

medium finding: Permit2 has unconditional infinite token allowance

The token treats the canonical Uniswap Permit2 address as having an unlimited allowance for every holder, regardless of the holder's token-level approval. This delegates transfer authorization to Permit2 and means users cannot revoke this allowance through this token's approve function.

Evidence: DopplerERC20V1 overrides _givePermit2InfiniteAllowance() to return true. ERC20.allowance returns type(uint256).max for the Permit2 address, approve rejects any Permit2 amount other than max, and transferFrom bypasses the token allowance check when msg.sender is Permit2. Actual transfers still depend on Permit2's own authorization mechanisms.

Recommendation: Clearly disclose the Permit2 integration, assess the trust and upgrade assumptions of the canonical Permit2 deployment on Base, and provide a token design that permits opt-out or revocation if that is a product requirement.