Deep dive

Projects and tokens

Two objects cover most use cases: a project groups related artwork; a token is one edition.

Every project and token has an address

A token’s address is three values: its chain (network), contract (collection), and tokenId (edition number). A project uses chain and id. Pass those values directly to the read APIs.

tsx
const token = useToken({ chain, contract, tokenId })
// Discovery returns the same identity fields inline.
const { projects } = useProjects({ chain: "eip155:1" })
const selected = projects[0]
const result = useProject({ chain: selected.chain, id: selected.id })

WhitehashToken: one token

FieldSourceNull when
chainThe network the token lives onnever
contractThe token’s contract (Tezos gentk FA2, or an EVM collection)never
tokenIdOn-chain token ID / iteration indexnever
nameMetadata JSONmetadata omits it
iterationHashThe fxhash seed(gentk-v1: a separate metadata field; v2/v3 & EVM: embedded in the artifact URI)token is unrevealed
artifactUriMetadata: the executable generator URL (ipfs:///onchfs://) with render statemetadata omits it
displayUri / thumbnailUriMetadata: static preview imagesno preview published
generatorUriMetadata: the project’s reusable generator, without render paramsnot published (common on old v1)
attributesMetadata features, folded to {name, value}empty array, never null
assignedDerived: false = unrevealed placeholdernever (boolean)
rawThe untouched source metadata JSONnever (may be null value)

WhitehashProject: one generative project

FieldSourceNull when
chainThe network the project lives onnever
idEVM collection contract, or a Tezos issuer entry such as v3:13623never
name / descriptionProject metadata JSONmetadata omits it
displayUri / thumbnailUriProject metadata previewno preview
editionsThe mint cap (max supply)unknown for this generation
mintedIterations actually created so farunknown
captureSettingsNormalized project capture mode, trigger, resolution, delay, selector, GPU, and GIF settingsproject metadata does not publish capture configuration

Refs are optional. Use projectRef(), tokenRef(), and formatRef() only when a route or paste field needs one serialized value. Ordinary reads use the identity fields above.