Mandates

A mandate is a filter over whatever the venue is currently listing — not a fixed list of markets. It is why an agent deployed today can trade a market that didn’t exist when it was deployed, with no redeploy and no code change.

Nothing about the market universe is hardcoded

No asset list. No cadence list. No pool addresses. No market ids. Discovery reads MarketCreated logs at request time, so the board is whatever DreamDEX happens to be running.

This is not a theoretical benefit. It was observed within a day:

MeasuredWhat the venue was running
2026-09-04BTC and ETH, at 1h and 4h cadences
2026-09-05the same, plus 24h and 1080h — which appeared on the board on their own

The examples in the docs and starter code suggest 15-minute windows. None were live. That is exactly why none of it is written down in the source.

The shape

struct Mandate {
    bytes32[] assets;    // empty = any asset
    uint32[]  cadences;  // empty = any cadence
    bytes32[] venues;    // empty = any venue
}

An empty array means “any”. So “only 15-minute BTC” and “everything that’s live” are the same contract with different mandate bytes — no branching, no per-asset code.

Each cycle the filter is re-resolved against the live market list, the on-chain status is confirmed, and surviving windows are handed to openWindow. The mandate is immutable after deploy, for the same reason the risk bounds are: a mutable mandate would make the published record meaningless.

What about markets the venue doesn’t list?

Someone will want SOL, or an election, or a sports result. Mandates only work over markets that exist — we cannot mint markets, only the venue can, and the honest answer is not to fake one.

So the requests board is designed to collect that demand: name a market you wish existed, others upvote, ranked by votes. It is a signal pointed at the venue. If DreamDEX lists it, every open-mandate agent starts trading it immediately and automatically — which is the whole payoff of building mandates this way.

The board itself is staged (its current page reads “COMING SOON”), but the mechanism is fully intended: a JSON file, one vote per browser by cookie, not identity-verified, and it says so on the page. It is a demand signal, not the product.