Solana

Solana Beta is live. Try BoltRPC Solana endpoints free - start your trial now.

Moonriver RPC Guide: Endpoints, Methods, Code Examples 2026

Complete Moonriver RPC guide covering public endpoints, ethers.js, Web3.py, curl examples, Moonbeam canary network deployment patterns, production issues.

BoltRPC
BoltRPC Team
9 min read
Moonriver RPC Guide: Endpoints, Methods, Code Examples 2026

Moonriver RPC Guide: Endpoints, Methods, Canary Network Patterns (2026)

Moonriver is the canary network for Moonbeam, running on Kusama as a parachain. It is EVM-compatible and runs real economic activity with real MOVR tokens. Its purpose is to receive and validate new features, upgrades, integrations before they deploy to Moonbeam on Polkadot. For teams building for the Moonbeam ecosystem, Moonriver is where you build and test with real-world network conditions before promoting to production.

This guide covers public Moonriver RPC endpoints, multi-library connection examples, the Moonbeam/Moonriver deployment pattern, production considerations for canary network development.

For BoltRPC endpoint setup and MetaMask configuration, see the Moonriver chain page.


Moonriver as a Canary Network: What This Means for RPC

A canary network is not a testnet. Moonriver:

  • Has real economic value (MOVR token with market price)
  • Runs production-level DeFi protocols
  • Receives protocol upgrades before Moonbeam
  • Has its own parachain slot on Kusama (not Polkadot)

From an RPC perspective, the key differences from Moonbeam:

PropertyMoonriverMoonbeam
Chain ID12851284
NetworkKusama parachainPolkadot parachain
Native tokenMOVRGLMR
PurposeCanary: new features firstProduction
Block time~12 s~12 s
RPC methodsSame as MoonbeamSame

Both chains expose identical EVM JSON-RPC interfaces plus Moonbeam-specific moon_* custom methods. Code written for Moonriver deploys to Moonbeam with only a chain ID and endpoint change.


Public Moonriver RPC Endpoints

ProviderHTTP EndpointWSS EndpointNotes
Moonbeam (official)https://rpc.api.moonriver.moonbeam.networkwss://wss.api.moonriver.moonbeam.networkOfficial, rate limited
dRPChttps://moonriver.drpc.orgwss://moonriver.drpc.orgPublic tier available
OnFinalityhttps://moonriver.api.onfinality.io/publicwss://moonriver.api.onfinality.io/public-wsFree tier
Blasthttps://moonriver.public.blastapi.iononePublic tier

Chain ID: 1285 Native token: MOVR Block explorer: https://moonriver.moonscan.io

For production, use BoltRPC: https://eu.endpoints.matrixed.link/rpc/moonriver?auth=YOUR_KEY


Connecting to Moonriver

ethers.js

import { ethers } from "ethers";

// HTTP provider for Moonriver
const provider = new ethers.JsonRpcProvider(
  "https://eu.endpoints.matrixed.link/rpc/moonriver?auth=YOUR_KEY"
);

// Verify you're on Moonriver
const network = await provider.getNetwork();
console.log("Chain ID:", network.chainId); // 1285n, Moonriver

// Environment-based config for Moonriver / Moonbeam switching
const ENDPOINTS = {
  moonriver: "https://eu.endpoints.matrixed.link/rpc/moonriver?auth=YOUR_KEY",
  moonbeam:  "https://eu.endpoints.matrixed.link/rpc/moonbeam?auth=YOUR_KEY"
};

const env = process.env.CHAIN_ENV || "moonriver";
const activeProvider = new ethers.JsonRpcProvider(ENDPOINTS[env]);

// Read MOVR balance on Moonriver
const balance = await provider.getBalance("0xYourAddress");
console.log("MOVR balance:", ethers.formatEther(balance));

Web3.py

from web3 import Web3

# Connect to Moonriver
w3 = Web3(Web3.HTTPProvider(
    "https://eu.endpoints.matrixed.link/rpc/moonriver?auth=YOUR_KEY"
))

print("Connected:", w3.is_connected())
print("Chain ID:", w3.eth.chain_id)  # 1285 for Moonriver

# Guard against wrong network
assert w3.eth.chain_id == 1285, "Not connected to Moonriver"

# Get latest block
block = w3.eth.get_block("latest")
print("Block number:", block["number"])
print("Block time:", block["timestamp"])

# Get transaction count
tx_count = w3.eth.get_transaction_count("0xYourAddress")
print("Nonce:", tx_count)

curl

# Verify chain ID on Moonriver (should return 0x505 = 1285)
curl https://eu.endpoints.matrixed.link/rpc/moonriver?auth=YOUR_KEY \
  -X POST -H "Content-Type: application/json" \
  --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}'

# Get block number
curl https://eu.endpoints.matrixed.link/rpc/moonriver?auth=YOUR_KEY \
  -X POST -H "Content-Type: application/json" \
  --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'

# moon_isBlockFinalized: works on Moonriver same as Moonbeam
curl https://eu.endpoints.matrixed.link/rpc/moonriver?auth=YOUR_KEY \
  -X POST -H "Content-Type: application/json" \
  --data '{
    "jsonrpc":"2.0",
    "method":"moon_isBlockFinalized",
    "params":["0xYourBlockHash"],
    "id":1
  }'

WebSocket subscription

import { ethers } from "ethers";

const wsProvider = new ethers.WebSocketProvider(
  "wss://eu.endpoints.matrixed.link/ws/moonriver?auth=YOUR_KEY"
);

// Monitor new blocks on Moonriver
wsProvider.on("block", async (blockNumber) => {
  const block = await wsProvider.getBlock(blockNumber);
  console.log("Moonriver block:", blockNumber, "Txs:", block.transactions.length);
});

// Filter contract events on Moonriver
const filter = {
  address: "0xYourMoonriverContract",
  topics: [ethers.id("Transfer(address,address,uint256)")],
  fromBlock: "latest"
};

wsProvider.on(filter, (log) => {
  console.log("Transfer on Moonriver:", log.transactionHash);
});

Example Moonriver RPC Methods

Moonriver supports all standard Ethereum JSON-RPC methods plus Moonbeam-specific custom methods. Code examples are for reference. Verify against the official Moonbeam documentation before production use.

MethodPurposeNotes
eth_chainIdReturns 0x505 (1285)Use to confirm Moonriver connection
eth_blockNumberGet current block height~12 second cadence
eth_callRead contract stateStandard EVM
eth_getLogsFetch contract events1,024 block max range on public nodes
eth_sendRawTransactionBroadcast transactionMOVR required for gas
eth_getTransactionReceiptGet transaction resultStandard EVM receipt format
moon_isBlockFinalizedCheck Kusama finality statusMoonriver-specific custom method
moon_isTxFinalizedCheck transaction finalityMoonriver-specific custom method

Canary Network Deployment Workflow

The standard pattern for Moonbeam ecosystem development:

Step 1: Deploy to Moonriver. Moonriver runs the same EVM and Substrate runtime as Moonbeam. Deploy your contracts with chain ID 1285 and test all functionality including any XCM integrations.

Step 2: Test with real conditions. Moonriver has real DeFi protocols, real liquidity, real network activity. Testing here is meaningfully more realistic than a testnet. Check your contracts against production-like state.

Step 3: Validate custom method behavior. If your application uses moon_isBlockFinalized or XCM precompiles, validate the behavior on Moonriver. Upgrade schedules may differ between Moonriver and Moonbeam, so newly added precompile addresses or method signatures should be confirmed on both.

Step 4: Promote to Moonbeam. Change your endpoint from Moonriver to Moonbeam and update chain ID from 1285 to 1284. Deploy the same contract code (contract addresses will differ but logic is identical).

// Config-driven environment switching
const config = {
  moonriver: {
    chainId: 1285,
    rpc: "https://eu.endpoints.matrixed.link/rpc/moonriver?auth=YOUR_KEY",
    wss: "wss://eu.endpoints.matrixed.link/ws/moonriver?auth=YOUR_KEY",
    explorer: "https://moonriver.moonscan.io"
  },
  moonbeam: {
    chainId: 1284,
    rpc: "https://eu.endpoints.matrixed.link/rpc/moonbeam?auth=YOUR_KEY",
    wss: "wss://eu.endpoints.matrixed.link/ws/moonbeam?auth=YOUR_KEY",
    explorer: "https://moonscan.io"
  }
};

const active = config[process.env.DEPLOY_ENV || "moonriver"];
const provider = new ethers.JsonRpcProvider(active.rpc);

// Verify correct network before any operations
const network = await provider.getNetwork();
if (Number(network.chainId) !== active.chainId) {
  throw new Error(`Wrong network: expected ${active.chainId}, got ${network.chainId}`);
}

Kusama vs Polkadot: What Changes for RPC

Moonriver runs on Kusama (Polkadot’s canary relay chain) and Moonbeam runs on Polkadot. From an RPC standpoint, the behavior is nearly identical. There are some operational differences to be aware of:

Upgrade frequency: Kusama is upgraded more frequently than Polkadot. Moonriver may receive runtime upgrades more often than Moonbeam. This can occasionally cause temporary behavior changes after an upgrade window.

Finality timing: Kusama’s Relay Chain finalizes blocks on a similar cadence to Polkadot (every 12 seconds). moon_isBlockFinalized has the same usage on Moonriver as on Moonbeam.

Block times are identical: Both run at approximately 12-second block times, tied to their respective relay chain slot cadences.


Production Issues on Moonriver

Chain ID confusion. The most common error when working with both Moonriver and Moonbeam is connecting to the wrong chain. Always assert chain ID in your connection initialization code. A transaction signed for chain ID 1285 (Moonriver) will fail on chain ID 1284 (Moonbeam) and vice versa.

MOVR for gas on Moonriver. Moonriver uses MOVR for gas fees. If you are deploying contracts for testing, ensure your deployer wallet has MOVR, not GLMR, which is the Moonbeam token. Both are available on exchanges but are distinct assets.

Public endpoint rate limits. Moonriver’s official public endpoint has undocumented rate limits. During active development with frequent contract calls, you can exhaust these quickly. Use a dedicated provider for sustained development work.

XCM precompile addresses are the same. Moonriver uses the same precompile addresses as Moonbeam for XCM functionality. This makes environment switching straightforward: no address updates needed for precompile interactions.


Choosing a Moonriver RPC Provider

ConsiderationWhat to Look For
Moonbeam + Moonriver supportSingle provider for both simplifies env management
Custom method supportmoon_isBlockFinalized required for finality-sensitive apps
WebSocket reliabilityParachain event subscriptions need stable connections
Consistent pricingCanary network work should not cost more than production

For dedicated Moonriver RPC (and Moonbeam on the same provider): BoltRPC Moonriver endpoint.


Moonriver RPC FAQ

What is the Moonriver RPC endpoint? Official public HTTP: https://rpc.api.moonriver.moonbeam.network. WSS: wss://wss.api.moonriver.moonbeam.network. For production, BoltRPC provides a dedicated endpoint at https://eu.endpoints.matrixed.link/rpc/moonriver?auth=YOUR_KEY. Chain ID is 1285.

What is the difference between Moonriver and Moonbeam? Moonriver is the canary network for Moonbeam. It runs on Kusama (chain ID 1285) and receives upgrades and new features before Moonbeam on Polkadot (chain ID 1284). Moonriver has real economic value (MOVR token) and real DeFi activity. It is not a testnet, but it is where new features appear first.

Is Moonriver a testnet? No. Moonriver runs real economic activity with real MOVR tokens that have market value. It is a canary network, meaning it receives protocol upgrades before Moonbeam for real-world validation. Think of it as a production environment for experimental features.

What chain ID is Moonriver? Moonriver chain ID is 1285 (0x505 in hex). Moonbeam chain ID is 1284 (0x504 in hex). Always verify chain ID when switching between environments.

Do the same RPC methods work on Moonriver and Moonbeam? Yes. Moonriver and Moonbeam share the same EVM runtime and support the same methods including custom moon_* methods. Occasionally, a newly added method may appear on Moonriver before it reaches Moonbeam due to the upgrade sequencing.

Can I use the same smart contract ABI on both Moonriver and Moonbeam? Yes. ABIs and bytecode are identical. Only the deployed contract addresses differ between networks. The underlying EVM runtime is the same on both chains.


<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "What is the Moonriver RPC endpoint?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Official public HTTP: https://rpc.api.moonriver.moonbeam.network. WSS: wss://wss.api.moonriver.moonbeam.network. For production, BoltRPC provides https://eu.endpoints.matrixed.link/rpc/moonriver?auth=YOUR_KEY. Chain ID is 1285."
      }
    },
    {
      "@type": "Question",
      "name": "What is the difference between Moonriver and Moonbeam?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Moonriver is the canary network for Moonbeam. It runs on Kusama (chain ID 1285) and receives upgrades before Moonbeam on Polkadot (chain ID 1284). Moonriver has real economic value and real DeFi activity. It is not a testnet."
      }
    },
    {
      "@type": "Question",
      "name": "Is Moonriver a testnet?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "No. Moonriver runs real economic activity with real MOVR tokens that have market value. It is a canary network that receives protocol upgrades before Moonbeam for real-world validation."
      }
    },
    {
      "@type": "Question",
      "name": "What chain ID is Moonriver?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Moonriver chain ID is 1285 (0x505 in hex). Moonbeam chain ID is 1284 (0x504 in hex). Always verify chain ID when switching between environments."
      }
    },
    {
      "@type": "Question",
      "name": "Do the same RPC methods work on Moonriver and Moonbeam?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Yes. Moonriver and Moonbeam share the same EVM runtime and support the same methods including custom moon_* methods. Occasionally a newly added method appears on Moonriver before reaching Moonbeam due to upgrade sequencing."
      }
    }
  ]
}
</script>

Frequently asked questions

Ready to build with high-performance RPC?

Start your free trial today. No credit card required. Access 20+ networks instantly.

Disclaimer: The content in this article is for informational purposes only and does not constitute financial, legal, or technical advice. Code examples and configurations are provided as-is. Always verify information with official documentation and test thoroughly in your own environment before deploying to production.

Continue reading