Skip to main content

How Catflow Works

What a flow is​

A flow is a coin's creator-fee right, held as an NFT. Whoever holds the NFT is the coin's registered creator for fee purposes, and receives the fee on every trade the coin makes. It is the right itself — not a claim on a fund, not a share in a pool. MotoSwap's vault pays the address the registry names, and the NFT's holder is that address.

That makes a flow a perpetual, cash-paying stream: a bet on the coin's trading volume. It can be listed, offered for, and sold like any other NFT.

Where the fees come from​

Every moto.fun coin pays its creator:

  • 0.5% of every trade while the coin is on its bonding curve;
  • 0.3% of every swap on its pools after it graduates — with no end date.

The fees accrue in MotoSwap's CreatorFeeVault, and they are paid in the trade's quote asset: ETH on the curve and on the coin/ETH pool, MOTO on the coin/MOTO pool. Never in the coin itself. A flow therefore pays out two assets, ETH and MOTO, at every claim.

Accrual is keyed per coin, not per recipient. Whatever is unclaimed at the moment the right moves goes with it.

Creating a flow, and handing the right over​

Creating a flow and giving it the right are two separate transactions:

  1. Create — the app clones a position contract for the coin and mints you the NFT. At this point the position holds nothing; the right is still yours.
  2. Hand over — you call registry.setCreator(coin, position), which names the position as the coin's creator. Only the current creator can do this, so you do it yourself; Catflow never needs your key.

Until step 2 the flow is inert. isActive() returns false, and every sale path refuses it.

isActive() — the one-line health check​

isActive() is true when the coin's registered creator is this position. It is false before you hand the right over, and it goes false again if MotoSwap takes the coin's fees back (see below). A flow that is not active cannot be bought — buy and acceptOffer both revert — so a buyer is never sold a right that has already moved.

The pending balance​

Fees that have accrued but not yet been claimed are the pending balance. Two things matter:

  • A sale through Catflow pays the pending balance to the seller. When you sell a flow, the sale claims every pending fee (less the claim fee) and pays it to you, inside the same transaction. You keep everything you earned up to the sale; the buyer starts at zero.
  • A sale elsewhere does not. An ordinary transferFrom, or a sale on another marketplace, carries the pending balance to the new holder, because hooking a claim into every ERC-721 transfer would give the transfer a way to revert. If you are selling off-market, claim first.

The app's listing flow makes this explicit, so a seller is never surprised by it.

Taking it back out​

release(to) calls registry.setCreator(coin, to) and hands the fee right to any wallet you name. The position keeps nothing. It is the escape hatch — the way to stop using Catflow at all.

release requires isActive(): once MotoSwap has reassigned or disabled a coin, the position no longer holds a right it can hand back, and release reverts.

What Catpound can and cannot do​

  • It cannot take a flow. There is no admin path to move your NFT or your fees. The NFT is a standard ERC-721: whoever holds it, holds the flow.
  • It cannot raise your fees after the fact. Fee rates are fixed per flow and per listing; see Fees.
  • It can be beaten to a claim, but never to the money. A claim is open to anyone, but it always forwards to the current NFT owner.
  • MotoSwap's owner is a separate, larger trust boundary. The registry owner can reassign any coin's fees (adminSetCreator) or stop them accruing (setDisabled). Catflow cannot remove that power, so it is disclosed on every listing. See the FAQ for the full picture.

Next​