Appearance
Reading state
Everything an interface needs is readable from the factory and the curve.
Launch record
solidity
struct LaunchRecord {
address curve;
address creator; // live creator fee recipient
address quoteAsset; // address(0) = ETH
uint32 configId;
uint16 creatorTaxBps;
LaunchPhase phase; // 0 None, 1 Trading, 2 Graduated
bool buybackEnabled;
uint40 createdAt;
uint40 graduatedAt;
bytes32 poolId; // set on graduation
}
function launchOf(address token) external view returns (LaunchRecord memory);
function launchCount() external view returns (uint256);
function launches(uint256 offset, uint256 limit) external view returns (address[] memory);
function policyOf(address token) external view returns (FeePolicy memory);
function configOf(uint256 configId) external view returns (CurveConfig memory);phase is the authoritative signal for where a token trades. Do not infer it from balances.
Curve snapshot
One call returns everything about a curve:
solidity
struct CurveState {
uint256 quoteReserve; // real ETH collected, net of fees
uint256 tokenReserve; // tokens held, including the reserved allocation
uint256 virtualQuote;
uint256 reservedTokens; // never sold; becomes pool liquidity
uint256 sellableTokens; // still buyable
uint256 graduationQuote;
uint256 protocolAccrued; // fees waiting to be swept
uint256 creatorAccrued;
uint256 buybackAccrued;
uint256 spotPriceX18; // ETH per token, 18 decimals
uint16 progressBps; // graduation progress
uint40 tradingStartsAt;
uint40 soldOutAt; // non-zero while sold out and awaiting graduation
bool buybackEnabled;
bool closed;
}
function state() external view returns (CurveState memory);Useful derived numbers:
- Market cap in ETH:
spotPriceX18 · totalSupply / 1e36 - Market cap at graduation:
(virtualQuote + graduationQuote)² / virtualQuote - Progress:
progressBps / 10_000, orquoteReserve / graduationQuote
Token metadata
name, symbol and decimals are ordinary ERC-20 reads. metadataURI() returns the creator's data URI (see launching); creator() is the original launcher, kept for attribution only.
Earnings
- Unswept creator fees:
state().creatorAccruedon the curve, orHanokHook.accrued(poolId)(protocol,creator,buyback) after graduation. - Claimable balances:
HanokFeeEscrow.balanceOf(account, address(0)). - Vesting:
HanokVestingVault.vestOf(token)andreleasable(token).
Multicall
Multicall3 is pre-deployed on GIWA at 0xcA11bde05977b3631167028862bE2a173976CA11. The reference app batches every read through it.