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:
- Build the standard route through passive AMMs.
- Build one or more candidates that include PropAMM hops.
- Submit each candidate through
eth_sendBundle, or submit a single private taker transaction. - 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
| Network | Region | WebSocket endpoint |
|---|---|---|
| Ethereum Mainnet | Global | wss://rpc.bombora.build/ws/pamm_quote_stream |
| Ethereum Mainnet | EU | wss://eu-rpc.bombora.build/ws/pamm_quote_stream |
| Ethereum Mainnet | US | wss://us-rpc.bombora.build/ws/pamm_quote_stream |
| Ethereum Mainnet | AP | wss://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"
}
}
}
}
}| Field | Description |
|---|---|
slot | Consensus slot of the target block. Omitted when not yet known, so treat it as optional. |
blockNumber | The block the overrides target, the next block. |
timestamp | Snapshot time, in Unix nanoseconds. |
0x1111… | The PropAMM contract you call to trade against that quote. See Published PropAMMs. |
↳ stateOverride | Keyed by the Priority Update Registry, always 0xda7afeed021eafc1c1af9c362de477dad0396b81. |
↳ stateDiff | Storage 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.
| Maker | PropAMM |
|---|---|
| Bebop | 0xb09aaa8933626d7e4c48d65dad2d77021cfbca9a |
| Kipseli | 0x71e790dd841c8a9061487cb3e78c288e75ce0b3d |
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.