The jurisdiction.
A pool declares [tick_min, tick_max] at birth. The width is capped at
22,528 ticks. Outside the band there is no state, no quote, and no crossing.
Policy for liquidity / Devnet reference
The band bounds the pool. The edict writes the law. The chain enforces the verdict. A market where the rule is readable before you sign — and the trade cannot leave the rule.
01The gap
Anyone can open a pool. Almost no one can read its rules. The fee is a constant, the switch sits with a deployer, and the exception is handled off-chain. You sign first and learn the terms at settlement.
A pool declares [tick_min, tick_max] at birth. The width is capped at
22,528 ticks. Outside the band there is no state, no quote, and no crossing.
One program per pool. Set at creation, immutable after. It is consulted before and after every swap and liquidity event. No oracle. No keeper.
Eight bytes: PASS, CHARGE, or REFUSE. The pool applies it atomically. If the edict refuses, the instruction does not exist.
“An edict cannot be bypassed.”
02The trade
A policy layer is only worth the change it makes in front of you. Here is the change, by role.
Call quote_edict before you build. You see PASS, the exact surcharge,
or REFUSE. If it refuses, nothing fills. You are not repriced after signing.
Every basis point an edict charges stays in the pool and accrues to liquidity providers. The protocol takes zero. Pick a pool whose law you believe in.
Attach an edict when the pool is created. There is no admin key to hand over and no switch to leave behind. The law is part of the market.
Any program can consult an edict. No allowlist, no SDK required, no off-chain service in the path. Eight bytes come back.
Most trades pass. The ones that charge pay LPs, not a treasury. Refusals are the guardrail, not the business model.
Seeded reference feed for the devnet build. No wallet, no chain call.
03The ruling
Four beats. The pool never moves a reserve before the law has been read.
Free, off-chain, exact.
quote_edict(pool, intent) returns the same bytes the chain will
compute. No signature, no fee, no state change.
The intent enters.
The pool assembles pre-state, the swap, and the accounts the edict declares. It calls the edict before any reserve moves.
Deterministic. Bounded.
The edict runs inside a fixed compute budget. It can read accounts. It cannot read an oracle, call out, or write state.
Apply or revert.
The pool applies PASS or CHARGE atomically. REFUSE reverts the whole instruction. Nothing is partially ruled.
$ edict quote --pool 7xKX…q9 --side buy --amount 2.4 verdict CHARGE fee 38 bps ttl 8 slots lps +0.00912 SOL $ edict settle --block 284,119 applied block 284,119 · slot 348,771,204 quote equal to settlement
$ edict quote --pool 7xKX…q9 --side buy --amount 12.0 verdict REFUSE reason GUARD / impact 612 bps > 250 bps cap state unchanged $ edict settle --block 284,120 reverted whole instruction · no reserves moved quote equal to settlement
04The laws
A stock edict is a small program with parameters. It reads the pool, the intent, and the accounts it declares — nothing else.
No surcharge. No exception.
A band and nothing else. The simplest way to put a pool on the record.
fee = 0
One rate, written once.
A fixed surcharge in basis points. It cannot be raised, lowered, or switched off after creation.
fee = 15 bps
A fee that reads the market.
Surcharge expands with five-minute realized volatility and decays every slot. No oracle; the pool's own prints are the input.
min(cap, base + k · vol)
A ceiling on damage.
Refuses a swap that would move price beyond the impact cap, or a second swap from the same wallet in the same slot.
impact ≤ 250 bps
cooldown = 1 slot
Fill only what was quoted.
Requires a signed quote from a declared quoter. The pool fills at the quoted terms or not at all. Expires in eight slots.
ttl = 8 slots
Any program can be an edict. Implement one instruction, return eight deterministic bytes, declare the accounts you read. That is the whole interface.
See the interface05The band
Prices are integers. A tick is one basis point in log space. A pool declares its edges at birth and lives inside them.
tick(p) = ⌊ ln(p) / ln(1.0001) ⌋band = [t_min, t_max] · width ≤ 22,528fill = min(intent, depth_to_edge)outside(t) = ∅Out-of-band is a real place: it is nothing.
06The lab
BREATH turns realized volatility into a surcharge. Drag the market and read the exact verdict a trader would get. This is a model, not a promise.
bps per five minutes
bps, charged even in a quiet market
bps, enforced by the pool
fee = min(cap, base + 1.4 × vol)
Integer math on-chain. Rounded down.
Model only. The on-chain BREATH edict uses integer basis points and rounds down; the curve above is illustrative.
07The integration
The interface is deliberately small. The edict is a read-only program; the pool is the only thing that can apply a verdict.
check(pool, intent, accounts) → [u8; 8]A custom edict can read any account the pool passes it. It still cannot make an external call, write state, or return a different answer twice.
use edict_core::{check, Intent, Verdict};
let verdict = check(
&pool,
Intent::Swap { side, amount_in },
ctx.remaining_accounts,
)?;
match verdict {
Verdict::Pass => pool.swap(amount_in),
Verdict::Charge { bps } => pool.swap_with_fee(amount_in, bps),
Verdict::Refuse => return Err(EdictError::Refused.into()),
}
import { quoteEdict } from "@edict/sdk";
const v = await quoteEdict({
pool: "7xKX…q9",
side: "buy",
amountIn: 2_400_000_000n,
});
// { tag: 1, feeBps: 38, ttlSlots: 8 }
if (v.tag === 2) return; // REFUSE
sendSwap({ ...swap, feeBps: v.feeBps });
08The boundaries
A policy layer is defined by the powers it does not have.
It is a policy layer that runs with a pool. The pool trades; the edict sets the terms. The same law can sit in front of any pool that implements the interface.
The pool creator, at creation. It cannot be swapped later. To change the law, open a new pool.
It stays in the pool and accrues to LPs. The protocol takes 0 bps. There is no treasury cut.
Not by default. Stock edicts read the pool's own state. A custom edict can read any account the pool passes it, but it still cannot make an external call.
Then that pool's law is buggy. The blast radius is one pool, and the band still bounds the damage. This is why edicts are small, deterministic, and immutable.
The token contract is live on pump.fun. The protocol itself remains a devnet reference build: the numbers on this page are a seeded feed, and nothing here is a promise of returns.
The first pool to carry an edict. The token has no special powers: no fee switch, no admin, no claim on surcharges. It is a market, not a master key.
At the top of this page, in the token card, and in the footer. Copy it from the contract rail and verify the address before trading.
09The invitation
Every pool carries an edict. Including this one.