鹅次元 (鹅次元) security report
Radar by SecureChain.ai AI-scanned the verified 鹅次元 contract on BSC. GoPlus reports no mint, blacklist, pause, proxy, or honeypot indicators. No Slither scan was run. Source review found Medium risks from reverting dividend callbacks, external tax-processor custody during failures, and owner-controlled pool migration.
No Critical or High vulnerability was proven from the supplied source and evidence. Two Medium control and availability risks were identified: the external dividend callback can block ordinary transfers, and the configured tax processor can receive the contract's accumulated tax balance when processing fails. Pool-transfer restrictions during BondingCurve state are also a conditional operational risk if migration is not completed.
Trust score: 70/100. Source verified: Yes. Chain: bsc. Contract: 0x46e30a14464d518869c596805e89b0e531597777.
This report was last modified on 2026-09-29 and contains 3 material findings.
medium finding: Dividend callback can make ordinary transfers revert
When dividendContract is nonzero, _afterTokenTransfer calls IDividend.setShare for non-excluded sender and recipient accounts. Any revert from that external contract is caught and immediately rethrown as DividendShareUpdateFailed, causing the entire token transfer to revert. A dividend-contract outage, incompatible configuration, gas failure, or account-specific failure can therefore prevent transfers involving affected accounts.
Evidence: In _afterTokenTransfer, calls to IDividend(dividendContract).setShare(from, balanceOf(from)) and setShare(to, balanceOf(to)) are wrapped in try/catch; each catch executes revert DividendShareUpdateFailed(...). The skip conditions only exclude the token contract, zero/dead addresses, dividendContract, and configured pools.
Recommendation: Use a non-blocking dividend-share update path, such as recording pending updates, allowing transfers to proceed when share synchronization fails, or adding a carefully governed disable/fallback mechanism. Validate the dividend contract before initialization and test behavior for all transfer participants.
medium finding: Tax processor has custody of accumulated tax tokens on failure
The tax processor is supplied during initialization and is not changeable through the token contract. During liquidation, the token grants it an effectively unlimited allowance and calls processTaxTokens. If that call reverts, the catch block transfers the entire current token balance held by the token contract to taxProcessor instead of retaining or safely recovering the balance. A malicious, compromised, or incorrectly configured tax processor could therefore receive accumulated tax tokens without completing the intended processing.
Evidence: _processTax approves taxProcessor for type(uint256).max when needed. On processTaxTokens failure, it executes _plainTransfer(address(this), taxProcessor, remainingBalance), where remainingBalance is balanceOf(address(this)). The taxProcessor address is set from params.taxProcessor in initialize and has no setter.
Recommendation: Do not transfer the full balance to an external processor on failure. Preserve funds for retry or route only the current tax amount under explicit accounting. Use bounded allowances, verify the processor configuration, and add governance or emergency recovery controls with transparent events.
medium finding: Pool trading depends on owner-controlled migration completion
While poolState is BondingCurve, every transfer involving any configured pool reverts. Only the owner can call startMigration and finalizeMigration, and the contract does not expose a permissionless recovery or timeout. If the contract remains in BondingCurve or migration is not finalized, configured-pool trading and liquidity operations can be unavailable. The supplied GoPlus evidence reports owner_address as the zero address, but does not provide the current poolState, so the present impact cannot be confirmed.
Evidence: _transfer requires !pools[from] && !pools[to] in PoolState.BondingCurve. startMigration and finalizeMigration are both onlyOwner. GoPlus reports owner_address as 0x0000000000000000000000000000000000000000; current state was not supplied.
Recommendation: Expose and monitor the current state, complete migration before ownership renunciation, and consider a permissionless or time-bounded finalization path with validated migration conditions. Confirm the deployed poolState and ownership status on-chain.