Skip to content

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:

js
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

js
const info = await factory.getTokenInfo(tokenAddress);
console.log(info.agentTokenId);

// or the reverse lookup:
const info2 = await factory.getTokenInfoByAgentId(agentTokenId);
console.log(info2.token);

Built on Robinhood Chain.