The wallet checked by the hook
The router captures its actual caller asactiveTrader. The hook accepts only its configured PoolManager and immutable router, then reads that caller directly. hookData carries the proof, not a trusted buyer address. The router delivers output only to its caller; it exposes no arbitrary recipient.
Local leaf format
The registry uses an address-only, double-hashed leaf:MerkleProof.verifyCalldata against the root registered for that pool. Proof generation must use matching leaf encoding and pair hashing. Copying another wallet’s proof does not impersonate its caller. The leaf does not bind a chain, purchase quota or nonce: reusing a list/root across pools makes those wallets eligible in each corresponding pool.
The single-wallet scheduled fixture uses that wallet’s leaf as the root and an empty proof array. This is a test example, not a public proof API.
Freezing and changing wallets
The list is finalized before the scheduled token and pool are deployed. Existing registry entries have no root-update method. Product decisions must define wallet verification, the linking deadline and handling of mistakes before freezing.Wallet pending in the app is illustrative. It does not confirm onchain
membership. Social OAuth, registration storage and proof delivery remain
unimplemented.