> For the complete documentation index, see [llms.txt](https://docs.rome.builders/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.rome.builders/de/entwicklerleitfaden/websocket-subscriptions.md).

# WebSocket-Abonnements

Rome-EVM-Endpunkte unterstützen Ethereum-WebSocket-Abonnements (`eth_subscribe` / `eth_unsubscribe`) über `wss://`. Verbinde dich mit demselben Host wie beim HTTPS-RPC, mit dem `wss://` Schema:

```
wss://<chain>.<network>.romeprotocol.xyz/
```

Das ist es, was `ethers` / `viem` `WebSocketProvider` unter der Haube verwenden, daher `.on('block')`, `contract.on(event)`, und `viem`'s `watchEvent` / `watchBlocks` funktionieren sofort.

## Abonnementtypen

| Typ                      | Wird ausgelöst bei                              | Verwenden für                                                               |
| ------------------------ | ----------------------------------------------- | --------------------------------------------------------------------------- |
| `newHeads`               | jeden neuen Block                               | Block-Ticker, Aktualisierung von Guthaben/Nonces, Bots pro Block, Indexer   |
| `logs`                   | passende Ereignisse (nach `Adresse` / `Themen`) | Reaktion auf die Ereignisse deines Contracts, Relayer/Bridges, Trading-Bots |
| `newPendingTransactions` | —                                               | akzeptiert, aber wird nie ausgegeben (Rome hat keinen öffentlichen Mempool) |

## ethers (v6)

```javascript
import { ethers } from "ethers";

const provider = new ethers.WebSocketProvider(
  "wss://martius.testnet.romeprotocol.xyz/"
);

// newHeads
provider.on("block", (blockNumber) => {
  console.log("neuer Block", blockNumber);
});

// logs — auf ein Contract-Ereignis reagieren
const contract = new ethers.Contract(address, abi, provider);
contract.on("Transfer", (from, to, value) => {
  console.log("Transfer", from, to, value.toString());
});
```

## viem

```javascript
import { createPublicClient, webSocket } from "viem";

const client = createPublicClient({
  transport: webSocket("wss://martius.testnet.romeprotocol.xyz/"),
});

const unwatch = client.watchBlocks({
  onBlock: (block) => console.log("neuer Block", block.number),
});

client.watchEvent({
  address,
  onLogs: (logs) => console.log(logs),
});
```

## Rohes JSON-RPC

```json
→ {"jsonrpc":"2.0","id":1,"method":"eth_subscribe","params":["newHeads"]}
← {"jsonrpc":"2.0","id":1,"result":"0x…"}                       // Abonnement-ID
← {"jsonrpc":"2.0","method":"eth_subscription","params":{"subscription":"0x…","result":{…block…}}}
```

Für `logs`, übergib als zweiten Parameter ein Filterobjekt:

```json
{"jsonrpc":"2.0","id":1,"method":"eth_subscribe","params":["logs",{"address":"0x…","topics":["0x…"]}]}
```

## Hinweise

* Abonnements senden Updates, sobald neue Blöcke erzeugt werden (die Latenz liegt in der Größenordnung einer Blockzeit).
* Für langlebige Verbindungen solltest du Wiederverbindungen in deinem Client behandeln — Standard für jedes WebSocket-RPC.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.rome.builders/de/entwicklerleitfaden/websocket-subscriptions.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
