Connect over WebSocket
Overview
Ronin WebSockets facilitate a persistent, real-time data stream directly from the blockchain, enabling your decentralized applications (dApps) to respond instantly to on-chain events. This is essential for dApps that thrive on immediacy and interactivity, such as gaming platforms or trading apps.
Note: Connections are limited to Ethereum namespaces within the Ronin WebSockets infrastructure.
Prerequisites
- API key for authenticating your requests. Retrieve your API key from the Developer Console > your app > Information > KEY section.
- WebSocket service access. Access must be granted to interact with the WebSocket service.
For more information, see Get started.
Subscribe and retrieve messages
To engage with Ronin WebSockets, use the following JavaScript example, which utilizes the ws
library to establish a connection and handle incoming data.
const WebSocket = require('ws')
const options = {
headers: {
'X-API-KEY': "YOUR-API-KEY"
}
}
const ws = new WebSocket('wss://api-gateway.skymavis.com/rpc/socket', options)
const message = {
"method": "eth_subscribe",
"params": [
"newHeads"
],
"id": 1,
"jsonrpc": "2.0"
}
ws.on('open', function open() {
ws.send(JSON.stringify(message));
});
ws.on('message', function message(data) {
console.log('received: %s', data);
});
Subscription types
Explore the range of subscription events available on Ronin WebSockets, enabling diverse functionalities and real-time responses for your dApps.
newHeads
Receives notifications each time a new block header is added to the blockchain, crucial for applications that need to monitor block confirmations and reorganizations.
Example and response:
{
"method": "eth_subscribe",
"params": [
"newHeads"
],
"id": 1,
"jsonrpc": "2.0"
}
{
"jsonrpc": "2.0",
"method": "eth_subscription",
"params": {
"subscription": "0xeb7dcdfe2bfc5e0bbcf2b776ba681d3c",
"result": {
"parentHash": "0x961d7ae5602fdf5da4425844c25d56f3e230706b5435269af3e7c0c426e9c680",
"sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
"miner": "0xae53daac1bf3c4633d4921b8c3f8d579e757f5bc",
"stateRoot": "0xa581fd1d5b0f99f37ee267c4c0946d9dd125398ccb5a71fbcb7a0203329aae02",
"transactionsRoot": "0xb0c66c47c42d8f641e2197a43194a227a3aa86df791974a7528a6589a5809f21",
"receiptsRoot": "0x9f7532c324f8ca7f0b1a0a3ebd7aee11a7646266e04da2a773a6fdbae8356335",
"logsBloom": "0x00000000080000000000000000000000100000080000004000000000000000000800800000002000002001000000800000404000000000000000000000080004000000000000000000000008000000000000600000800000000000000000000000000000000001000000000004000000000080000000000000000014000000200100000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000200000000000000000000822000000000000020000000000000000000000000010000000000a00000000200000000000000000000000000000000800000000000040000000000000",
"difficulty": "0x7",
"number": "0x177a012",
"gasLimit": "0x5f5e100",
"gasUsed": "0x2ac19",
"timestamp": "0x6479637c",
"extraData": "0xd683020502846765746886676f312e3137856c696e757800000000000000000073aa5aff3ad3a20354f3ec7d30a630d26cd027366a6eec125a4833f6649cbc8f09ce0bbad23ebb679e69e143666a17098b6bfd221c66e65368269f736a4df89a00",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"nonce": "0x0000000000000000",
"baseFeePerGas": null,
"hash": "0xbd13f924e30908b63e14c49890fc32efec1de3c3131e9e6af28b347a75f33ade"
}
}
}
newPendingTransactions
Tracks new transactions as soon as they are added to the pending pool, vital for apps that need to respond quickly to transaction submissions.
Example and response:
{
"method": "eth_subscribe",
"params": [
"newPendingTransactions"
],
"id": 1,
"jsonrpc": "2.0"
}
{
"jsonrpc": "2.0",
"method": "eth_subscription",
"params": {
"subscription": "0xec9cc07bfb60a076695ce1999dba59db",
"result": "0xf0887b1b728e5ecaba5678f8829eb80089f99c190fbf943f5fadb7108b9a0955"
}
}
logs
Monitor specific contract logs in real-time, essential for applications that need to track specific events such as transfers or updates within contracts.
Example and responses:
- Subscribe to
Transfer()
events of a specific contract:
{
"method": "eth_subscribe",
"params": [
"logs",
{
"address": "0xc99a6A985eD2Cac1ef41640596C5A5f9F4E19Ef5",
"topics": [
"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"
]
}
],
"id": 1,
"jsonrpc": "2.0"
}
Response:
{
"jsonrpc": "2.0",
"method": "eth_subscription",
"params": {
"subscription": "0x98a829e969ef490f074bc445ba5363b7",
"result": {
"address": "0x814a9c959a3ef6ca44b5e2349e3bba9845393947",
"topics": [
"0xc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62",
"0x000000000000000000000000fff9ce5f71ca6178d3beecedb61e7eff1602950e",
"0x000000000000000000000000cfe5b7b3502145c62d41492c7f04c1a6dbe29076",
"0x00000000000000000000000099cf2aa4177984b1c437304ae963a88eeb2066d8"
],
"data": "0x00000000000000000000000000000000000000000000000000000000001e94500000000000000000000000000000000000000000000000000000000000000001",
"blockNumber": "0x177a268",
"transactionHash": "0x7be22488e41e395a81b717a4969b258b59f43d9caa6a853e293a7117cacbadf0",
"transactionIndex": "0x3",
"blockHash": "0xafca38bcea645165e6bceb8ea3c6eda6e37686bec7596e7fc797baf1a25611bd",
"logIndex": "0x8",
"removed": false
}
}
}