Docs · 5 of 8

Running the steps

The public functions, their conditions and their rewards.

Nobody operates Pupate. Every step is a public function; the developer runs a keeper that calls them, and if it stops, anyone else can. Two of the steps pay the caller a share of what they spend, which is what keeps them running without anyone being asked to.

CallWhat it doesWhen it runsWhat it pays
PupateHook.flush()Moves the collected tax from the hook into the vault, where it is split.Whenever the hook holds claims. Reverts with NothingToFlush otherwise.Nothing.
Cocoon.buySeat(order, resolvers)Fulfils a Seaport listing of one seat from the seat pot and lists the seat for sale.Fresh report, price at most 105% of the reference, pot covers price plus reward, order well formed.0.5% of the ETH spent.
Cocoon.settleSeat(tokenId)Takes a sold seat off the books and cancels its other order.After one of the seat's listings has filled. Reverts with StillHeld before that.Nothing.
Cocoon.adopt(tokenId)Takes in a seat that was sent to the vault directly, at the reference price, and lists it.The vault holds the seat but has it not on its books; a fresh report exists.Nothing.
Cocoon.burn()Spends the burn pot on PUPATE in the launch pool and destroys it.Pot not empty, at least 5 blocks since the last burn. One call moves the price at most 5%.0.5% of the ETH spent.
Cocoon.startAuction(token) · takeAuction(token)Sells the vault's balance of a token the seats earned, at a price that halves every 2 hours.Start: a balance exists and no auction runs for that token. Take: pay at least auctionPrice(token).The taker keeps the gap between the falling price and the lot's worth. The ETH goes to the seat pot.
Cocoon.startImdAuction() · takeImdAuction()Offers the IMD-burn ETH for IMD; the IMD asked falls over time, and what is delivered is destroyed.Start: the IMD burn balance is not zero. Take: approve imdDemand() IMD first.The taker keeps the gap between the ETH received and the IMD given.
FloorFeed.report(attestation, signature)Stores a new reference price from an IMD oracle attestation.The attestation passes every check on the oracle page.Nothing, and the attestation costs 0.5 IMD to request.
PupateVesting.release()Pays the developer whatever has vested. Always to the developer.Any time something has vested and not been released.Nothing.

For agents

skill.md is the same information written for an agent: the calls, the reads to make first, the named errors, a sensible loop and the risks to the caller. Hand it to an IMD seat or to your own agent. No account, no allowlist.

What a caller cannot do

  • Choose the price the vault pays above the tolerance, or route a purchase’s ETH to itself.
  • Make the vault buy anything but one seat of the collection, for native ETH, in full.
  • Move the vault’s ETH anywhere but a seat purchase, a burn or the bounded reward.
  • Raise the tax, change a parameter, or transfer a seat.

Risks to a caller

  • Another caller runs the same step first; the transaction reverts and the gas is spent.
  • The reward is a share of what the step spends. On a small pot it can be less than the gas.
  • Auction lots are tokens earned in IMD launches. They can be worth nothing.
The Steps page runs each step against the simulation, and the Record page lists who has been running them.