Skip to content

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

  1. 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.

  2. Enable Trading: enableTrading() (admin‑only) activates trading and starts the restrictions window (default 30 days).

  3. 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.

  4. 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 via taxBuys.

  • Where Fees Go: Fees are transferred to the token contract balance. Anyone can call collectFees() to forward the full fee balance to the feeReceiver. Admins can target a specific amount and recipient via collectFeesTo(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 feeReceiver is 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—transferapproveallowancebalanceOftotalSupply, etc.—are also available.)

Read / View

  • decimals() → uint8 — Always 18.

  • totalSupply() → uint256 — Fixed total.

  • circulatingSupply() → uint256 — Alias of totalSupply().

  • 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=false and mintAvailable=0 by 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 to feeReceiver.

  • 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.