Sepolia

SqueekToken

$SQK ERC-20 reference: premint, lifetime cap, Mining binding, burns, and supply totals.

TL;DR

  • $SQK is a non-upgradeable ERC-20 with EIP-2612 permit and 18 decimals, capped at 2.1 billion $SQK of lifetime issuance including a construction premint.
  • The admin Timelock binds SqueekMining once with bindMining; after that only SqueekMining can mint, always to itself.
  • Any holder can burn their own $SQK; burns lower circulating supply but never reopen the cap, because the cap limits totalMinted().

Overview

These contracts may change before mainnet. Pin the ABI you use and re-check the deployment before relying on it.

SqueekToken records $SQK balances, allowances and lifetime issuance. Its constructor mints a bounded premint and authorizes the admin Timelock to bind SqueekMining once. After binding, only that proxy can increase supply, through mintForCheckpoint; the token has no owner, pause, blocklist or upgrade path. The issuance schedule lives in SqueekMining.

The token is deployed directly, not behind a proxy; its Sepolia address is under Deployments (0xd78a3956cF63164d1Fa1C622ad3c66623162Fa1e for core-sepolia-20261103).

Holder actions

Standard ERC-20 and EIP-2612

function name() external view returns (string);                 // "Squeek"
function symbol() external view returns (string);               // "SQK"
function decimals() external view returns (uint8);              // 18
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function allowance(address owner, address spender) external view returns (uint256);
function transfer(address to, uint256 value) external returns (bool);
function approve(address spender, uint256 value) external returns (bool);
function transferFrom(address from, address to, uint256 value) external returns (bool);
function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;
function nonces(address owner) external view returns (uint256);
function DOMAIN_SEPARATOR() external view returns (bytes32);

Amounts are $SQK base units (10^-18 $SQK); totalSupply() is circulating supply (minted minus burned).

burn

function burn(uint256 amount) external;

Destroys amount of the caller's own $SQK and adds it to totalBurned(); there's no burnFrom. SqueekStaking burns exit fees this way from its own balance. Burning never restores issuance capacity.

Totals and cap

function cap() external view returns (uint256);
function totalPreminted() external view returns (uint256);
function totalBurned() external view returns (uint256);
function totalMinted() external view returns (uint256);
function MAX_PREMINT_RECIPIENTS() external view returns (uint256);
FunctionReturns
cap()The lifetime cap on totalMinted(): 2,100,000,000 × 10^18 base units
totalPreminted()$SQK minted by the constructor premint; never changes
totalBurned()Lifetime $SQK destroyed through burn
totalMinted()Lifetime $SQK minted, premint included: totalSupply() + totalBurned()
MAX_PREMINT_RECIPIENTS()8, the longest constructor premint list

mining

function mining() external view returns (address);

Zero before bindMining; afterwards the bound SqueekMining proxy, permanently the only minter.

bindMining

function bindMining(address candidate) external;

Binding authority only, once. Atomically attaches the SqueekMining proxy, validates it, calls completeBootstrap(), and emits MiningBound. There's no rebinding.

mintForCheckpoint

function mintForCheckpoint(uint64 throughRound, uint256 amount) external returns (uint256);

Bound SqueekMining only. Mints amount to SqueekMining, emits CheckpointMinted, and returns amount. SqueekMining forwards it all to SqueekStaking in the same transaction.

Integration notes

  • Use base units. Keep amounts as bigint base units and format with 18 decimals; never convert to number.
  • Measure issuance with totalMinted(). Circulating supply is totalSupply(); the cap applies to lifetime issuance.
  • Reconcile with SqueekMining: totalMinted() == totalPreminted() + SqueekMining.state().minted.
  • Count supply once. A checkpoint mint emits both CheckpointMinted and a Transfer; count one.
  • Check the binding. Before relying on issuance, confirm mining() is nonzero and equals the SqueekMining proxy you verified.

Supply totals

totalMinted() = totalPreminted() + SqueekMining.state().minted
totalSupply() = totalMinted() − totalBurned()
totalMinted() ≤ cap() = 2,100,000,000 × 10^18