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:
| Field | Type | Description |
|---|---|---|
hash | string | Transaction hash. |
logs | []object | Filtered event logs (only whitelisted topics). |
txs | []object | Partial transaction data (to, calldata prefix, value). |
gas_used | int | Estimated gas consumption. |
mev_gas_price | string | Effective 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
| Field | Type | Description |
|---|---|---|
enabled | bool | Enable hint gossip propagation. |
ttl | string | Time-to-live for hints in the gossip layer. |
max_batch | int | Maximum hints per gossip batch. |
compression | string | Compression algorithm (zstd recommended). |
encryption | string | Encryption 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"