For the complete documentation index, see llms.txt. This page is also available as Markdown.

Liquidity Layer

Uniswap V4, from block one

Every agent trades in a single Uniswap V4 pool. There is no bonding curve and no threshold to cross — the V4 pool is the only venue and it exists from the launch transaction onward. (A gated migration path exists on the initializer but has never been used; see the FAQ.)

The launch supply is placed as locked liquidity. The creator cannot withdraw it.

The pool key

The same shape on every Orbofi agent launched so far — only the currencies differ:

const poolKey = {
  currency0,                 // lower address of (agent, numeraire)
  currency1,                 // higher address
  fee: 8388608,              // 0x800000 — V4 dynamic-fee sentinel
  tickSpacing: 200,
  hooks: "0x4e3468951D49f2EEa976eD0D6e75fFCb44a9a544",
};

Currencies are address-sorted, so the agent is currency0 for some pools and currency1 for others. Derive it:

const tokenIsCurrency0 = agentToken.toLowerCase() < numeraire.toLowerCase();

Both cases occur in production. An ETH-paired agent is almost always currency1; a stock-paired one is split roughly evenly between the two — so derive it, never assume.

Dynamic fee, and the anti-snipe window

The pool registers the V4 dynamic-fee flag, so the swap fee is not constant. It follows a decaying schedule set at launch:

Opening fee

80% (800000, units of 1e6)

Decay

linear, over 10 seconds

Settles at

the pool's standing rate — see Fees

Starts at

pool initialization

The 80% opening fee exists to make first-block sniping unprofitable. It decays to the standing rate within ten seconds of the pool opening, so it is invisible to ordinary trading — but a quote taken in the first few seconds of a launch will correctly show a punitive rate.

Reading the fee back

The two legs are charged by two different mechanisms, and only one of them is visible to Uniswap's accounting:

Source
What it reports

Swap event fee field

LP leg only1000, i.e. 0.1%

quoteExactInputSingle

The real cost, net of both legs

The hook leg is taken through hook deltas rather than the pool's own fee, so it never appears in Swap.fee. An integration that displays that field as the trading cost understates it by roughly 16x. Confirmed by decoding a live swap: fee = 1000, against a pool whose standing rate is more than an order of magnitude higher.

Price

Take sqrtPriceX96 from the pool's Initialize event and keep it current from each Swap:

P=(sqrtPriceX96296)2P = \left(\frac{\text{sqrtPriceX96}}{2^{96}}\right)^2

P is currency1 per currency0 in raw units. Orient it to the agent, then convert through the numeraire's USD feed. Worked example in Inspect an agent token.

Last updated

Was this helpful?