Features
The WTD Token includes several features beyond basic ERC20 transfers.
Burn
Any token holder can permanently destroy their tokens, reducing the circulating supply.
Functions:
burn(amount)— Burn tokens from your own balanceburnFrom(account, amount)— Burn tokens from another account (requires prior approval)
Both functions emit a TokensBurned(account, amount) event in addition to the standard ERC20 Transfer event.
Burning tokens does not restore allocation capacity. If an allocation category has been fully claimed, burning those tokens does not allow it to be claimed again.
Pause / Unpause
The admin can pause all token transfers in an emergency. While paused, no transfers, minting, or burning can occur.
Functions:
pause()— Pause all transfers (admin only)unpause()— Resume transfers (admin only)
Access: DEFAULT_ADMIN_ROLE
Permit (EIP-2612)
WTD supports gasless token approvals through the EIP-2612 permit standard. Instead of submitting an on-chain approve transaction, a holder can sign an off-chain message that anyone can submit to grant approval.
permit(owner, spender, value, deadline, v, r, s)This allows:
Approve and transfer in a single transaction (via a relayer or integrated dApp)
Reduced gas costs for users who don't hold native ETH/gas tokens
Voting & Delegation (ERC20Votes)
WTD tokens carry on-chain voting power that can be delegated. This enables governance proposals and voting without transferring tokens.
Key concepts:
Voting power must be explicitly delegated (even to yourself) before it becomes active
Call
delegate(delegatee)to assign your voting power to any addressCall
delegate(yourOwnAddress)to self-delegate and activate your own voting powerVoting power is checkpointed at each block, allowing historical lookups
Clock mode: The contract uses timestamp-based checkpoints (mode=timestamp) rather than block numbers.
Functions:
delegate(delegatee)— Delegate voting powerdelegateBySig(delegatee, nonce, expiry, v, r, s)— Delegate via signaturegetVotes(account)— Get current voting power of an accountgetPastVotes(account, timepoint)— Get voting power at a past timestamp