Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

Takers & State Stream

Searchers, solvers, and aggregators use Bombora's normal transaction and bundle APIs for PropAMM routes. No PropAMM-specific taker submission method is required.

Submit candidate routes

Construct and submit routes the same way you do for other onchain liquidity:

  1. Build the standard route through passive AMMs.
  2. Build one or more candidates that include PropAMM hops.
  3. Submit each candidate through eth_sendBundle, or submit a single private taker transaction.
  4. Set normal slippage and execution guards in the taker transaction.

State stream

The state stream publishes next-block PropAMM state for makers that opt in. It lets takers simulate routes locally before submission.

Endpoint

NetworkRegionWebSocket endpoint
Ethereum MainnetGlobalwss://rpc.bombora.build/ws/pamm_quote_stream
Ethereum MainnetEUwss://eu-rpc.bombora.build/ws/pamm_quote_stream
Ethereum MainnetUSwss://us-rpc.bombora.build/ws/pamm_quote_stream
Ethereum MainnetAPwss://ap-rpc.bombora.build/ws/pamm_quote_stream

No API key is required.

Snapshot format

Each text message is a complete JSON snapshot:

{
  "slot": 12345678,
  "blockNumber": 25000001,
  "timestamp": 1785000000000000000,
  "0x1111111111111111111111111111111111111111": {
    "stateOverride": {
      "0xda7afeed021eafc1c1af9c362de477dad0396b81": {
        "stateDiff": {
          "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
        }
      }
    }
  }
}
FieldDescription
slotConsensus slot of the target block. Omitted when not yet known, so treat it as optional.
blockNumberThe block the overrides target, the next block.
timestampSnapshot time, in Unix nanoseconds.
0x1111…The PropAMM contract you call to trade against that quote. See Published PropAMMs.
  ↳ stateOverrideKeyed by the Priority Update Registry, always 0xda7afeed021eafc1c1af9c362de477dad0396b81.
    ↳ stateDiffStorage slot to 32-byte value: the registry writes that pre-apply that maker's pending update.

Published PropAMMs

Each top-level key is the PropAMM contract a route trades through. Select the entry for the contract you are routing against and pass its stateOverride to your simulation.

MakerPropAMM
Bebop0xb09aaa8933626d7e4c48d65dad2d77021cfbca9a
Kipseli0x71e790dd841c8a9061487cb3e78c288e75ce0b3d

A key appears in a snapshot only while its maker is quoting, so absence means no live quote rather than a delisted contract. Treat the list as informative and the snapshot as authoritative: read the keys present in the message you received.

The storage under each key is written on the Priority Update Registry, not on the PropAMM itself. That is expected. The PropAMM reads its prices from the registry, so overriding the registry is what makes your simulation see the incoming quote.

Simulating a route

A snapshot is already in Ethereum's state-override shape, so it can be passed straight to any simulation that accepts state overrides. Simulating with it prices a route against the state the block will have, rather than against what is currently onchain.

Emission

Snapshots go out as makers update their quotes. Consecutive identical snapshots are suppressed, so no message means the state is unchanged.