The Agent NFT
Every launch mints one Agent NFT to the creator, alongside the token itself. This NFT is the actual, on-chain claim on a project's LP fee revenue: whoever holds it earns the agent's share of every collectFees() call, looked up live via ownerOf() each time.
Why fee ownership lives on an NFT, not a wallet
Tying fee ownership to an NFT instead of hardcoding the deployer's address makes the revenue right a normal, tradeable, transferable asset:
- Transferable. Sell the project, transfer the NFT, the new owner starts earning fees immediately, no contract migration, no admin call.
- Splittable. A project can route its fee share across up to 5 wallets by basis-point weight (see below), without giving up the underlying NFT.
- Provable. Anyone can verify who currently earns a project's fees by checking
ownerOf(agentTokenId), no off-chain bookkeeping.
Metadata
The Agent NFT's metadata is the same projectCid used for the token itself: name, symbol, description, image, links. There's no separate avatar or alternate metadata pool; what you see for the project is what the NFT holder's wallet displays too.
Minting
Minting happens as part of HoodPumpFactory.deploy(), authorized by the agentSignature voucher from /api/launch/prepare. You never call the Agents contract directly, the factory does it for you as the very first step of a launch.
Splitting fees across multiple wallets
By default, 100% of a project's fee share goes to whoever holds the Agent NFT. You can instead configure up to 5 recipient wallets, each with a basis-point weight (10000 = 100%), either at launch time (feeRecipientWallets / feeRecipientBps in DeployParams) or afterward via the locker:
await locker.setFeeRecipients(agentTokenId, wallets, bpsArray);Only the current Agent NFT owner can update this split. If you transfer the NFT, the new owner inherits whatever split is currently configured, and can change it.
Looking up a project's Agent NFT
const info = await factory.getTokenInfo(tokenAddress);
console.log(info.agentTokenId);
// or the reverse lookup:
const info2 = await factory.getTokenInfoByAgentId(agentTokenId);
console.log(info2.token);