MEV-Share Hints

MEV-Share hints are partial transaction data shared with searchers so they can construct backrun bundles without seeing the full transaction. The MEV engine streams hints via Server-Sent Events (SSE) and distributes them through the mesh gossip layer.

Hint Fields

Each hint contains a subset of the pending transaction's data:

FieldTypeDescription
hashstringTransaction hash.
logs[]objectFiltered event logs (only whitelisted topics).
txs[]objectPartial transaction data (to, calldata prefix, value).
gas_usedintEstimated gas consumption.
mev_gas_pricestringEffective MEV gas price offered by the transaction (wei).

Example hint payload:

{
  "hash": "0xabc123...",
  "logs": [
    {
      "address": "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D",
      "topics": ["0xd78ad95f..."],
      "data": "0x..."
    }
  ],
  "txs": [
    {
      "to": "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D",
      "calldata": "0x38ed1739",
      "value": "0x0"
    }
  ],
  "gas_used": 182000,
  "mev_gas_price": "25000000000"
}

SSE Streaming Endpoint

GET /hints/stream

Opens a persistent SSE connection that streams hints in real time.

Each event is formatted as:

event: hint
data: {"hash":"0xabc123...","logs":[...],"txs":[...],"gas_used":182000,"mev_gas_price":"25000000000"}

The connection remains open and new hints are pushed as they arrive. The server sends periodic keepalive comments (:keepalive) to prevent timeouts.

Mesh Gossip Configuration

Hints are propagated across the mesh network via the gossip protocol. Configure hint gossiping in the node's YAML config:

gossip:
  hints:
    enabled: true
    ttl: 12s
    max_batch: 50
    compression: zstd
    encryption: aes-256-gcm
FieldTypeDescription
enabledboolEnable hint gossip propagation.
ttlstringTime-to-live for hints in the gossip layer.
max_batchintMaximum hints per gossip batch.
compressionstringCompression algorithm (zstd recommended).
encryptionstringEncryption algorithm for hint payloads.

Deduplication

Hints are deduplicated by transaction hash using an in-memory map. When a node receives a hint via gossip, it checks the map before forwarding. Duplicate hints are silently dropped.

Subscriber Management

SSE subscribers are tracked by the hint stream manager. Each subscriber has:

  • A unique connection ID
  • A buffered channel (capacity 1000) for hint delivery
  • Automatic cleanup on disconnect

If a subscriber's buffer fills up, the oldest undelivered hints are dropped to prevent backpressure from affecting other subscribers.

Recent Hints

GET /hints/recent?n=50

Returns the most recent n hints (default 20, max 100).

Response:

{
  "hints": [
    {
      "hash": "0xabc123...",
      "logs": [...],
      "txs": [...],
      "gas_used": 182000,
      "mev_gas_price": "25000000000",
      "received_at": "2026-03-15T14:30:01Z"
    }
  ],
  "count": 50
}

Code Examples

Subscribe to hint stream with curl

curl -N https://rpc.yoorquezt.com/hints/stream \
  -H "Authorization: Bearer $SEARCHER_KEY"

Subscribe with EventSource (JavaScript)

const source = new EventSource(
  "https://rpc.yoorquezt.com/hints/stream",
  {
    headers: { Authorization: `Bearer ${SEARCHER_KEY}` },
  }
);

source.addEventListener("hint", (event) => {
  const hint = JSON.parse(event.data);
  console.log("New hint:", hint.hash);
  console.log("Gas used:", hint.gas_used);
  console.log("MEV gas price:", hint.mev_gas_price);

  // Analyze logs for backrun opportunities
  for (const log of hint.logs) {
    if (log.topics[0] === "0xd78ad95f...") {
      console.log("Swap detected on:", log.address);
    }
  }
});

source.onerror = (err) => {
  console.error("SSE connection error:", err);
};

Fetch recent hints

curl "https://rpc.yoorquezt.com/hints/recent?n=50" \
  -H "Authorization: Bearer $SEARCHER_KEY"
Edit this page