> For the complete documentation index, see [llms.txt](https://docs.metric.xyz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.metric.xyz/run-a-pool/chain-specific-guides/ethereum.md).

# Ethereum

## Update-independent pools

If your pool doesn't need constant oracle updates, nothing special is required: follow [Best practices](/run-a-pool/chain-specific-guides.md).

## Update-dependent pools

### Conditional updates protocol

On Ethereum, Metric supports **conditional updates** to cut gas costs. You don't push to a schedule. You sign a quote-update transaction and Metric streams it to partner block builders. A builder includes it only in a block that contains a trade against your pool, placed ahead of that trade. If nobody trades, the update doesn't land and costs no gas. See [Freshness and ordering](/how-pools-work/freshness-and-ordering.md) for what that covers and what it doesn't.

Metric partnered with the block builders Titan, Quasar, BuilderNet (Flashbots), Bombora and Eureka to support the conditional updates protocol. Together they build \~97-98% of Ethereum blocks.

**Always push your updates to Metric's endpoint**, even if you also push to builders directly. Metric's infrastructure needs the updates for three things:

* Live prices in the UI. Between trades, your feed looks stale onchain. Metric applies each update to its own simulated copy of Ethereum's latest block, so your pool shows a live price.
* Fair aggregator quotes. Aggregators and solvers price your pool from Metric's quote endpoint, which reads that same simulated state. Without your updates they quote your pool at a stale price, or not at all.
* Price history. When your onchain feed has no valid price, Metric records the price from your latest update instead, so your pool's chart has fewer gaps.

Pushing directly to builders is optional. Metric forwards the updates it receives to each builder, but doesn't guarantee delivery. The response tells you which builders acknowledged it in time. A direct connection can still cut latency if you update very often. If you do push directly, still push to Metric too.

{% hint style="info" %}
Send the same update to Metric and to the builders: the same signed transaction, with the same **replacementUuid** and **replacementSeqNumber**. If they differ, Metric shows and quotes one price while the builder includes another. Takers then get quoted a price your pool won't fill, and later updates may be ordered wrongly.
{% endhint %}

### Oracles

**Metric supports these oracles for conditional updates:**

**For propAMMs, Metric recommends:**

1. **Compressed Oracle:** built for propAMMs, optimized for gas and for multiple feeds in one update.
2. **PUR by Flashbots:** an alternative, general-purpose data store; more general, less optimized for gas. Flashbots redeploys it, so take the current address from the [PUR repository](https://github.com/flashbots/priority-update-registry).

**Public oracles:**

**Chainlink and Pyth:** required for APPs; also useful for sanity checks.

For Anchored Price Providers, Metric recommends streaming the anchoring feed and your additional updates together, from the same address. Your two most recent updates should correctly serve one trade.

### Metric endpoint

Submit each signed update with `POST https://api.metric.xyz/public/v1/evm/1/pamm-quote`, authenticated with a trading API key. With every update, always include as much information as you can: `quoteAddress`, `poolAddresses` and `assetPairs`. Builders use it to match the quote to a trade, and a quote they can't match is never included. A builder may not use every field, but the more you send, the more likely your quote is to be included. Request and response formats: [PropAMM quote](/reference/api/pamm-quote.md).

### Builder endpoints and documentation

All four use the same protocol: a WebSocket stream of protobuf messages, with an API key you get from each builder.

| Builder    | Maker endpoint(s)                                          | Docs                                               |
| ---------- | ---------------------------------------------------------- | -------------------------------------------------- |
| Titan      | `wss://{eu,us,ap}.rpc.titanbuilder.xyz/ws/sendquoteupdate` | <https://docs.titanbuilder.xyz/propamms/makers>    |
| Quasar     | `wss://rpc.quasar.win/ws/sendquoteupdate`                  | <https://docs.quasar.win/propamm/makers>           |
| BuilderNet | `wss://rpc.buildernet.org/ws/sendquoteupdate`              | <https://buildernet.org/docs/api#priority-updates> |
| Bombora    | `wss://ap-rpc.bombora.build/ws/sendquoteupdate`            | <https://bombora.build/docs/propamm-makers>        |
