Skip to main content

Connect over WebSocket

Skynet sunsetting by the end of Q1 2025

Sky Mavis is sunsetting Skynet services as part of Ronin's transition to a permissionless ecosystem. Please migrate to these alternative RPC providers:

  • Chainstack - RPC/WS node with a free tier available. Supports social logins like GitHub and crypto top-up for paid plans. Archive nodes available starting from the lowest paid plan.
  • dRPC - Ronin and Saigon testnet globally distributed RPC nodes, with high uptime maintained by professional independent teams under one load balancer.
  • Moralis - Enterprise grade RPC node API for Ronin and Saigon testnet. Supports full archive nodes and extended RPC methods. Free tier available.
  • Coming Soon Alchemy - Web3 developer platform that has powered top dApps for over half a decade. Access a full suite of RPC node APIs (coming soon), Subgraphs, and NFT API (coming ~ February).

Overview

Ronin WebSocket facilitate a persistent, real-time data stream directly from Ronin, 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

WebSocket connections are limited to Ethereum namespaces within the Ronin WebSocket infrastructure.

Prerequisites

  • An API key. Retrieve your API key from the Developer Console under your app > Information > KEY section.
  • Permission to use Ronin WebSocket. Request in the Developer Console under your app > App Permission > Ronin Websocket > Request Access.

For more information, see Get started.

Subscribe to and retrieve messages

Connect to the WebSocket server at the following URL:

  • Mainnet: wss://api-gateway.skymavis.com/rpc/socket
  • Testnet: wss://api-gateway.skymavis.com/rpc/testnet-socket (to get access, ask your Sky Mavis point of contact)

You can use any WebSocket client library to establish the connection. For example, ws for Node.js.

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

newHeads

Receives notifications each time a new block header is added to the blockchain.

Example request:

{
"method": "eth_subscribe",
"params": ["newHeads"],
"id": 1,
"jsonrpc": "2.0"
}

Response:

{
"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.

Example request:

{
"method": "eth_subscribe",
"params": ["newPendingTransactions"],
"id": 1,
"jsonrpc": "2.0"
}

Response:

{
"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 request: 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
}
}
}

See also

Ronin JSON-RPC API reference