Token SmartContract
Last updated: 17 Aug 2025
Overview
SQUDY is a fixed‑supply BEP‑20 token on BNB Smart Chain (BSC). The full supply is minted at deployment and no further minting is possible. The contract includes launch‑phase protections (anti‑bot / anti‑sandwich), a limited and transparent pause mechanism, temporary blacklisting (with reason and auto‑expiry), and a timelocked fee‑receiver update flow. It uses OpenZeppelin libraries and Uniswap‑V2 compatible router/pairing for PancakeSwap.
Quick Facts
-
Chain: BNB Smart Chain (BSC)
-
Standard: BEP‑20 (ERC‑20 compatible)
-
Name / Symbol:
SQUDY Token/SQUDY -
Decimals: 18
-
Total Supply: 450,000,000,000 SQUDY (fixed)
-
Minting: 100% minted to the initial owner at deployment; no post‑deploy mint exists
-
Router / DEX: UniswapV2‑compatible (e.g., PancakeSwap); pair auto‑created if none
-
Access Control: Role‑based (OpenZeppelin
AccessControl)
Verification & Links
Contract Address (Mainnet): 0xbcac31281cd38f0150ea506c001e6d0ba902669f
BscScan Source: verified with optimizer enabled
Pancake Pair: WBNB/SQUDY Buy SQUDY
Tokenomics Snapshot
-
Fixed Supply: 450B minted on day 0 to a multisig/owner wallet.
-
No Emissions: No mint function. Max supply equals total supply forever.
-
Fee Model: A configurable fee (default 2%) applies to sells (and optionally buys); early‑launch blocks use a temporary higher fee to deter snipers.
-
Use of Fees: Collected on‑chain at the token contract and periodically transferred to the designated fee receiver.
Roles & Governance
-
DEFAULT_ADMIN_ROLE(Admin): Full administrative authority (granted to the initial owner at deploy). Renouncing this role is blocked to prevent accidental loss of control. -
ADMIN_ROLE: Operational admin (also granted to the initial owner). Required for most management functions. -
OPERATOR_ROLE: Reserved for future operational separation; not required by default flows.
BEP‑20 Nicety: The contract exposes
getOwner()for scanners (returns the initial owner hint). Real permissions are governed by the roles above.
Launch & Trading Lifecycle
-
Deployment:
-
Constructor mints 450B to the initial owner.
-
If a router address is provided, a PancakeSwap pair is created (if none exists).
-
Initial exclusions: owner & contract are excluded from fees/limits; the pair is excluded from limits.
-
-
Enable Trading:
enableTrading()(admin‑only) activates trading and starts the restrictions window (default 30 days). -
Launch‑phase Protections (auto‑sunset): Active during the restrictions window only:
-
Penalty fee schedule:
-
Blocks 0 →
penaltyBlocks(default 3): 50% fee on sells (and buys if enabled). -
Next 10 blocks: 20% fee.
-
Thereafter: normal fee (default 2%).
-
-
Anti‑bot cooldown: Per‑address cooldown (default 2 blocks) between DEX trades.
-
Same‑block guard: Disallows same‑block buy→sell patterns.
-
Price impact cap: Reverts if a trade’s notional impact exceeds a threshold (graceful higher threshold at launch, tighter later).
-
Buy/Sell limits: Max TX, Max Wallet (buys), and early sell size checks vs. pool reserves.
-
-
Post‑sunset: After the restrictions window ends, normal fee/limits remain configurable but launch‑phase penalties/guards are considered inactive for fee ramp and special checks.
Fees & Limits (Community Transparency)
-
Normal Fee (
normalFee): default 2.00% (denominator = 10,000). Applies to sells; can optionally apply to buys viataxBuys. -
Where Fees Go: Fees are transferred to the token contract balance. Anyone can call
collectFees()to forward the full fee balance to thefeeReceiver. Admins can target a specific amount and recipient viacollectFeesTo(address,uint256). -
Max TX / Max Wallet: Configurable safeguards, primarily relevant during launch.
-
Circuit Breaker: Daily aggregate volume limiter with admin‑toggle; reverts trades if exceeded.
Timelocked Receiver Change: Updating
feeReceiveris a two‑step, 48h timelocked process:proposeFeeReceiver(new)→ wait →executeFeeReceiverChange().
Safety Controls
-
Limited Pause: Admins may pause, but each pause auto‑expires after 24h and cannot be re‑used until a 7‑daycooldown elapses. Transfers automatically resume after expiry even if not manually unpaused.
-
Temporary Blacklist (with reason): Admins may temporarily block addresses for up to 72h, with a reason recorded on‑chain. Permanent toggle is also available.
-
Recoveries: Admins can recover mistakenly sent tokens (except SQUDY) and native BNB from the contract.
-
Admin Renounce Guard: Prevents renouncing the default admin role, reducing the risk of orphaning the contract.
Public Interface — Functions
Below is a community‑readable summary. (Standard ERC‑20 functions—transfer, approve, allowance, balanceOf, totalSupply, etc.—are also available.)
Read / View
-
decimals() → uint8— Always 18. -
totalSupply() → uint256— Fixed total. -
circulatingSupply() → uint256— Alias oftotalSupply(). -
getTokenInfo() → (name,symbol,decimals,totalSupply,maxSupply)— Max == total. -
getTradingInfo() → (isEnabled,currentFee,txLimit,walletLimit,dailyVolume)— Snapshot of trading parameters. -
getSecurityStatus() → (isPaused,pauseEndsAt,canMint,mintAvailable,restrictionsEndAt,blacklistedCount)— For dashboards;canMint=falseandmintAvailable=0by design. -
getOwner() → address— Scanner/helper; not used for permissions. -
isCurrentlyBlacklisted(address) → bool— Whether an account is blacklisted right now (temporary or permanent).
Launch / Trading
enableTrading()— Admin. Starts trading and the restrictions window.
Fees & Limits
-
setFees(uint256 normalFeeBps, bool taxBuys)— Admin. Caps: ≤ 5%. -
collectFees()— Permissionless. Sends ALL collected fees tofeeReceiver. -
collectFeesTo(address recipient, uint256 amount)— Admin. Targeted transfer of fee balance. -
setLimits(uint256 maxTx, uint256 maxWallet)— Admin. Adjusts buy and tx limits. -
setMaxDailyVolume(uint256 newMax)/setCircuitBreakerEnabled(bool)— Admin. Daily volume breaker.
Anti‑Bot / Market Integrity
-
setPenaltyBlocks(uint256)— Admin. Early sniper‑fee blocks count. -
setCooldownBlocks(uint256)— Admin. Per‑address cooldown blocks. -
setAntiSandwichParams(uint256 maxImpactBps,uint256 impactGraceBlocks,uint256 graceImpactBps,bool sameBlockGuard)— Admin. Price impact thresholds & same‑block rule. -
setSellLimitParams(uint256 sellLimitGraceBlocks,uint256 maxSellBpsOfReserves)— Admin. Early sell chunk sizing vs. pool reserves.
Exclusions & Access
-
setExcludedFromFee(address,bool)/setExcludedFromLimits(address,bool)— Admin. -
Roles: Managed via
AccessControl. The team does not expose public role‑grant functions to random users.
Pause & Blacklist
-
pause()/unpause()— Admin. Pause auto‑expires after 24h; 7‑day cooldown enforced. -
blacklistAddress(address,bool)— Admin. Permanent toggle. -
blacklistTemporary(address,uint256 durationSeconds,string reason)— Admin. Up to 72 hours; visible reason.
Fee Receiver (Timelock)
-
proposeFeeReceiver(address newReceiver)— Admin. Starts a 48h timelock. -
executeFeeReceiverChange()— Executes the pending change after the timelock expires.
Recoveries
-
recoverERC20(address token,address to,uint256 amount)— Admin. Cannot recover SQUDY itself. -
recoverETH(address payable to)— Admin. Withdraws native BNB held by the contract.
Events (for Transparency/Dashboards)
-
TradingEnabled(uint256 launchBlock) -
PauseLimited(uint256 endTime, uint256 maxDuration) -
BlacklistUpdated(address bot, bool value) -
BlacklistLimited(address account, uint256 expiry, string reason) -
FeesUpdated(uint256 normalFeeBps, bool taxBuys) -
FeeReceiverProposed(address newReceiver, uint256 changeTime) -
FeeReceiverUpdated(address newReceiver) -
ExcludedFromFees(address addr, bool excluded)/ExcludedFromLimits(address addr, bool excluded) -
LimitsUpdated(uint256 maxTx, uint256 maxWallet) -
MaxDailyVolumeUpdated(uint256 newMax)/DailyVolumeReset(uint256 newDay, uint256 previousVolume) -
CircuitBreakerTriggered(uint256 volume, uint256 maxVolume) -
AntiSandwichUpdated(uint256 maxImpactBps, bool sameBlockGuard)
Frequently Asked Questions
Q1: Can supply increase in the future?
A: No. Supply is fixed forever. No mint function exists in the live contract.
Q2: Why are there high fees in the first blocks?
A: This is a temporary anti‑sniper measure at launch (e.g., 50% for a few blocks, then 20% for ten blocks). It automatically transitions to the normal fee and is only active during the restrictions window.
Q3: Who controls the contract?
A: A role‑based admin (usually a multisig). Changing the fee receiver requires a 48‑hour timelock for transparency.
Q4: Can the team freeze trading indefinitely?
A: No. Pauses auto‑expire after 24 hours and can’t be re‑used until a 7‑day cooldown passes.
Q5: Why is my address blacklisted?
A: The contract permits temporary (≤72h) or permanent blacklists for market integrity. Temporary blacklists include an on‑chain reason and auto‑expire.