Skip to content

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, or quoteReserve / 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().creatorAccrued on the curve, or HanokHook.accrued(poolId) (protocol, creator, buyback) after graduation.
  • Claimable balances: HanokFeeEscrow.balanceOf(account, address(0)).
  • Vesting: HanokVestingVault.vestOf(token) and releasable(token).

Multicall ​

Multicall3 is pre-deployed on GIWA at 0xcA11bde05977b3631167028862bE2a173976CA11. The reference app batches every read through it.

Hanok is unaudited testnet software. Tokens can lose all value.