<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: OnFinality</title>
    <description>The latest articles on DEV Community by OnFinality (@onfinality).</description>
    <link>https://dev.to/onfinality</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3813781%2Fb863954f-6836-4b28-a128-248450616fc8.png</url>
      <title>DEV Community: OnFinality</title>
      <link>https://dev.to/onfinality</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/onfinality"/>
    <language>en</language>
    <item>
      <title>What Is Crust Network? Decentralized Storage Explained</title>
      <dc:creator>OnFinality</dc:creator>
      <pubDate>Wed, 26 Aug 2026 05:01:40 +0000</pubDate>
      <link>https://dev.to/onfinality/what-is-crust-network-decentralized-storage-explained-2c09</link>
      <guid>https://dev.to/onfinality/what-is-crust-network-decentralized-storage-explained-2c09</guid>
      <description>&lt;p&gt;Crust Network is a purpose-built layer 1 blockchain that provides decentralized cloud storage by adding an incentive and service layer to IPFS. It is designed for developers and builders who need verifiable, persistent, and cost-effective storage for dApps, NFTs, websites, and other Web3 content.&lt;/p&gt;

&lt;p&gt;If you are evaluating Crust for your project, the key decision is whether you need a decentralized storage layer at all, and if so, how to integrate it with your existing stack. This article explains what Crust is, how it works, and how to connect to it via RPC endpoints.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Recommendation: When to Use Crust Network
&lt;/h2&gt;

&lt;p&gt;Crust is a strong fit when you need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Permanent or flexible storage&lt;/strong&gt; for NFT metadata, dApp content, or website hosting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IPFS compatibility&lt;/strong&gt; with an incentive layer that ensures data availability and redundancy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-chain interoperability&lt;/strong&gt; to store data from multiple blockchains (EVM, Substrate, etc.).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your use case is simple pinning of a few files, you might start with a centralized service. But if you need verifiable, decentralized storage with on-chain guarantees, Crust is worth considering.&lt;/p&gt;

&lt;p&gt;For developers, the next step is to set up an RPC connection to interact with the Crust chain. You can use a managed RPC provider like OnFinality to get reliable endpoints without running your own node.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Crust Network Works
&lt;/h2&gt;

&lt;p&gt;Crust is built on Substrate, the same framework used by Polkadot. It uses a unique consensus mechanism called GPoS (Guaranteed Proof of Stake) that combines staking with storage proofs. Storage nodes prove they are storing data correctly using MPoW (Meaningful Proof of Work) and TEE (Trusted Execution Environment) technology.&lt;/p&gt;

&lt;p&gt;The network has three main components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Validators&lt;/strong&gt;: Secure the chain and validate transactions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storage providers&lt;/strong&gt;: Offer disk space and prove they store data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gateway providers&lt;/strong&gt;: Provide access to stored data via IPFS gateways.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Crust's storage market is on-chain, meaning users can order storage and pay with the native CRU token. The network also supports cross-chain storage via XCMP (Cross-Chain Message Passing) and EVM compatibility, making it accessible from Ethereum, Polygon, and other chains.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features of Crust Network
&lt;/h2&gt;

&lt;h3&gt;
  
  
  IPFS Integration
&lt;/h3&gt;

&lt;p&gt;Crust uses IPFS as its underlying storage protocol. Files are addressed by content ID (CID), and Crust adds an incentive layer to ensure that files are pinned and replicated across multiple nodes. This means you get the benefits of IPFS (content addressing, deduplication) with the guarantee that your data will persist.&lt;/p&gt;

&lt;h3&gt;
  
  
  On-Chain Storage Market
&lt;/h3&gt;

&lt;p&gt;Users can place storage orders on the Crust blockchain. The network matches orders with storage providers, and the data is stored with redundancy (typically 30+ replicas). This creates a permissionless market where anyone can offer storage and earn CRU.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cross-Chain Interoperability
&lt;/h3&gt;

&lt;p&gt;Crust supports multiple ways to interact with other chains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;EVM&lt;/strong&gt;: Crust has an EVM-compatible layer, so you can deploy Solidity smart contracts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;XCMP&lt;/strong&gt;: As a Polkadot parachain, Crust can communicate with other Substrate-based chains.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;X-Chain Contracts&lt;/strong&gt;: Smart contracts that allow storage functions to be called from other chains.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tools and SDKs
&lt;/h3&gt;

&lt;p&gt;Crust provides several tools for developers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Crust Files&lt;/strong&gt;: A personal cloud storage interface for Web3.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IPFS W3Auth Gateway&lt;/strong&gt;: A Web3-authenticated IPFS gateway supporting all IPFS write operations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IPFS W3Auth Pinning Service&lt;/strong&gt;: A standard IPFS pinning service with Web3 authentication.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Crust GitHub Action&lt;/strong&gt;: For decentralized CI/CD hosting via IPFS pinning.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Crust Network vs. Other Storage Solutions
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Crust Network&lt;/th&gt;
&lt;th&gt;Filecoin&lt;/th&gt;
&lt;th&gt;Arweave&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Underlying protocol&lt;/td&gt;
&lt;td&gt;IPFS&lt;/td&gt;
&lt;td&gt;IPFS&lt;/td&gt;
&lt;td&gt;Custom&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Consensus&lt;/td&gt;
&lt;td&gt;GPoS (Substrate)&lt;/td&gt;
&lt;td&gt;Proof-of-Spacetime&lt;/td&gt;
&lt;td&gt;Proof-of-Access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Storage payment&lt;/td&gt;
&lt;td&gt;On-chain market (CRU)&lt;/td&gt;
&lt;td&gt;On-chain market (FIL)&lt;/td&gt;
&lt;td&gt;Upfront payment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cross-chain&lt;/td&gt;
&lt;td&gt;EVM, XCMP&lt;/td&gt;
&lt;td&gt;Bridges&lt;/td&gt;
&lt;td&gt;Bridges&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data persistence&lt;/td&gt;
&lt;td&gt;Incentivized pinning&lt;/td&gt;
&lt;td&gt;Incentivized storage&lt;/td&gt;
&lt;td&gt;Permanent&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Crust is often compared to Filecoin and Arweave. While Filecoin also uses IPFS, Crust's integration with Substrate and its EVM compatibility make it easier to use from Polkadot and Ethereum ecosystems. Arweave offers permanent storage with a one-time fee, but Crust provides more flexibility with its storage market.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started with Crust Network RPC
&lt;/h2&gt;

&lt;p&gt;To interact with the Crust blockchain, you need an RPC endpoint. You can run your own node, but for most developers, using a managed RPC provider is more practical. OnFinality offers public and dedicated RPC endpoints for Crust, allowing you to focus on building your application.&lt;/p&gt;

&lt;h3&gt;
  
  
  Public RPC Endpoint
&lt;/h3&gt;

&lt;p&gt;OnFinality provides a public endpoint for Crust:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://rpc.crust.network
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can use this endpoint to send JSON-RPC requests to the Crust chain. For example, to get the latest block number:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://rpc.crust.network &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"jsonrpc":"2.0","method":"chain_getHeader","params":[],"id":1}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will return the latest block header, including the block number.&lt;/p&gt;

&lt;h3&gt;
  
  
  Using the Polkadot.js API
&lt;/h3&gt;

&lt;p&gt;For Substrate-based chains like Crust, you can use the Polkadot.js API to interact with the chain. Here's an example of connecting to Crust and reading the chain name:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ApiPromise&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;WsProvider&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@polkadot/api&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;WsProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;wss://rpc.crust.network&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;ApiPromise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;chain&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rpc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;system&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;chain&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Chain:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;chain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;disconnect&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Wallet Configuration
&lt;/h3&gt;

&lt;p&gt;If you want to use Crust with a wallet like SubWallet, you can add the network manually. The chain ID for Crust is &lt;code&gt;crab&lt;/code&gt; (or &lt;code&gt;crust&lt;/code&gt; for mainnet). Here's an example configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"network"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"crust"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"displayName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Crust Network"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"rpc"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://rpc.crust.network"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ws"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"wss://rpc.crust.network"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"chainId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0x0000000000000000000000000000000000000000000000000000000000000000"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"explorer"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://crust.subscan.io"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note: The chain ID is a placeholder; you should check the official documentation for the correct value.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Use Cases for Crust Network
&lt;/h2&gt;

&lt;h3&gt;
  
  
  NFT Metadata Storage
&lt;/h3&gt;

&lt;p&gt;NFTs often need metadata that persists forever. Crust can store NFT metadata on IPFS with on-chain guarantees, ensuring that the metadata remains accessible even if the original minter disappears.&lt;/p&gt;

&lt;h3&gt;
  
  
  Website Hosting
&lt;/h3&gt;

&lt;p&gt;You can host a fully decentralized website on Crust. By pinning your site's files to IPFS via Crust, you ensure that the site is always available, with no single point of failure.&lt;/p&gt;

&lt;h3&gt;
  
  
  dApp Data Storage
&lt;/h3&gt;

&lt;p&gt;Many dApps need to store user-generated content, such as messages, profiles, or documents. Crust provides a decentralized alternative to traditional cloud storage, with the added benefit of verifiable data integrity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Data Archiving
&lt;/h3&gt;

&lt;p&gt;For long-term data retention, Crust's storage market allows you to pay for storage over time, with the option to renew. This is useful for compliance or archival purposes.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Choose an RPC Provider for Crust
&lt;/h2&gt;

&lt;p&gt;When selecting an RPC provider for Crust, consider the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reliability&lt;/strong&gt;: Look for providers with a track record of uptime and performance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability&lt;/strong&gt;: Ensure the provider can handle your expected request volume.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Support&lt;/strong&gt;: Check if the provider offers dedicated nodes for high-throughput workloads.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pricing&lt;/strong&gt;: Compare pricing models, especially if you have high usage.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;OnFinality offers both shared and dedicated RPC nodes for Crust. You can start with the free public endpoint and upgrade to a dedicated node if your project grows. For more details, see our &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC pricing&lt;/a&gt; page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Troubleshooting Common RPC Issues
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Connection Timeouts
&lt;/h3&gt;

&lt;p&gt;If you experience timeouts, check your network connection and ensure you are using the correct endpoint. Public endpoints can be rate-limited; consider using a dedicated node for production.&lt;/p&gt;

&lt;h3&gt;
  
  
  Invalid Chain ID
&lt;/h3&gt;

&lt;p&gt;When connecting to Crust, ensure you use the correct chain ID. For Crust mainnet, the chain ID is &lt;code&gt;crab&lt;/code&gt; (or &lt;code&gt;crust&lt;/code&gt;). Using the wrong ID will result in connection errors.&lt;/p&gt;

&lt;h3&gt;
  
  
  WebSocket vs. HTTPS
&lt;/h3&gt;

&lt;p&gt;Some operations require WebSocket (e.g., subscriptions). Use &lt;code&gt;wss://&lt;/code&gt; for WebSocket connections and &lt;code&gt;https://&lt;/code&gt; for HTTPS. Both are available on the public endpoint.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Crust Network is a Substrate-based layer 1 blockchain that provides decentralized storage by adding an incentive layer to IPFS.&lt;/li&gt;
&lt;li&gt;It offers an on-chain storage market, cross-chain interoperability, and tools for developers.&lt;/li&gt;
&lt;li&gt;Crust is suitable for NFT metadata, website hosting, dApp data, and archiving.&lt;/li&gt;
&lt;li&gt;To interact with Crust, you need an RPC endpoint. OnFinality provides reliable public and dedicated endpoints.&lt;/li&gt;
&lt;li&gt;When choosing an RPC provider, consider reliability, scalability, support, and pricing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is Crust Network used for?
&lt;/h3&gt;

&lt;p&gt;Crust Network is used for decentralized storage, providing an incentive layer for IPFS. It is commonly used for NFT metadata, website hosting, and dApp data storage.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Crust Network a Polkadot parachain?
&lt;/h3&gt;

&lt;p&gt;Yes, Crust is built on Substrate and is a parachain in the Polkadot ecosystem. It also has EVM compatibility, allowing interaction with Ethereum-based chains.&lt;/p&gt;

&lt;h3&gt;
  
  
  How does Crust Network ensure data availability?
&lt;/h3&gt;

&lt;p&gt;Crust uses a combination of MPoW (Meaningful Proof of Work) and TEE (Trusted Execution Environment) to prove that storage nodes are actually storing the data. The network also replicates data across multiple nodes (typically 30+ replicas).&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I get a Crust RPC endpoint?
&lt;/h3&gt;

&lt;p&gt;You can use the public endpoint &lt;code&gt;https://rpc.crust.network&lt;/code&gt; or get a dedicated endpoint from a provider like OnFinality. For more options, see our &lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;supported networks&lt;/a&gt; page.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the CRU token used for?
&lt;/h3&gt;

&lt;p&gt;CRU is the native token of Crust Network. It is used to pay for storage orders, stake for consensus, and participate in governance.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use Crust with Ethereum?
&lt;/h3&gt;

&lt;p&gt;Yes, Crust has EVM compatibility, so you can interact with it using Ethereum tools and smart contracts. You can also use cross-chain bridges to store data from Ethereum.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Crust Network free to use?
&lt;/h3&gt;

&lt;p&gt;There is a cost to store data on Crust, paid in CRU. However, you can use the public RPC endpoint for free to interact with the chain. For high-volume usage, consider a paid RPC plan.&lt;/p&gt;

&lt;h3&gt;
  
  
  How does Crust compare to Filecoin?
&lt;/h3&gt;

&lt;p&gt;Both Crust and Filecoin use IPFS and provide decentralized storage. Crust is built on Substrate and has EVM compatibility, while Filecoin has its own blockchain. Crust may be easier to integrate with Polkadot and Ethereum ecosystems.&lt;/p&gt;

&lt;h3&gt;
  
  
  What are the system requirements for running a Crust node?
&lt;/h3&gt;

&lt;p&gt;Running a Crust node requires a machine with sufficient storage and bandwidth. For most developers, using a managed RPC provider is more practical. See our &lt;a href="https://onfinality.io/dedicated-node" rel="noopener noreferrer"&gt;dedicated node&lt;/a&gt; page for more information.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I monitor my Crust RPC usage?
&lt;/h3&gt;

&lt;p&gt;If you use OnFinality, you can monitor your usage through the dashboard. For custom monitoring, you can use tools like Prometheus to track request metrics.&lt;/p&gt;

&lt;p&gt;For more information about Crust Network and RPC services, visit our &lt;a href="https://onfinality.io/networks/crust" rel="noopener noreferrer"&gt;network page&lt;/a&gt; and &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC pricing&lt;/a&gt; page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/networks/crust" rel="noopener noreferrer"&gt;Crust Network RPC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;Supported Networks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC Pricing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Originally published at &lt;a href="https://onfinality.io/en/rpc-assistant/what-is-crust-network" rel="noopener noreferrer"&gt;OnFinality&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>web3</category>
      <category>blockchain</category>
      <category>devops</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Ethereum Sepolia RPC Endpoint: Chain Settings &amp; Setup</title>
      <dc:creator>OnFinality</dc:creator>
      <pubDate>Wed, 26 Aug 2026 05:01:06 +0000</pubDate>
      <link>https://dev.to/onfinality/ethereum-sepolia-rpc-endpoint-chain-settings-setup-36g7</link>
      <guid>https://dev.to/onfinality/ethereum-sepolia-rpc-endpoint-chain-settings-setup-36g7</guid>
      <description>&lt;h2&gt;
  
  
  Quick Decision: Which Sepolia RPC Should You Use?
&lt;/h2&gt;

&lt;p&gt;For most development and testing on Ethereum Sepolia, a managed RPC endpoint is the fastest way to start. Public endpoints like &lt;code&gt;https://eth-sepolia.api.onfinality.io/public&lt;/code&gt; are free and work for light usage, but they can be rate-limited and less reliable under load. If you're building a production-grade dApp, staging environment, or running automated tests that need consistent throughput, consider a dedicated node or a paid RPC plan. OnFinality offers both shared and dedicated Sepolia endpoints, with WebSocket support and archive data options. Check &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC pricing&lt;/a&gt; and &lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;supported networks&lt;/a&gt; to find the right fit for your workload.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sepolia at a Glance
&lt;/h2&gt;

&lt;p&gt;Sepolia is Ethereum's primary public testnet for developers. It mimics mainnet's proof-of-stake consensus and is designed for testing smart contracts, wallets, and infrastructure before mainnet deployment. Unlike older testnets like Goerli, Sepolia has a smaller validator set and is more stable, making it the recommended choice for most new projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chain Settings for Sepolia
&lt;/h2&gt;

&lt;p&gt;When adding Sepolia to a wallet or configuring a dApp, you need the following network parameters:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Network Name&lt;/td&gt;
&lt;td&gt;Ethereum Sepolia&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RPC URL&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://eth-sepolia.api.onfinality.io/public&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chain ID&lt;/td&gt;
&lt;td&gt;11155111 (0xaa36a7)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Currency Symbol&lt;/td&gt;
&lt;td&gt;ETH&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Block Explorer&lt;/td&gt;
&lt;td&gt;&lt;a href="https://sepolia.etherscan.io" rel="noopener noreferrer"&gt;https://sepolia.etherscan.io&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These settings are consistent across all EVM-compatible wallets and tools. The chain ID is critical: using the wrong one can cause transactions to be broadcast to the wrong network.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adding Sepolia to MetaMask
&lt;/h2&gt;

&lt;p&gt;To add Sepolia to MetaMask manually:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open MetaMask and click the network dropdown at the top.&lt;/li&gt;
&lt;li&gt;Click "Add network" or "Custom RPC".&lt;/li&gt;
&lt;li&gt;Enter the chain settings from the table above.&lt;/li&gt;
&lt;li&gt;Click "Save".&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Alternatively, you can use a one-click button from services like ChainList, but manual entry ensures you control the RPC endpoint.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connecting with ethers.js
&lt;/h2&gt;

&lt;p&gt;Here's how to connect to Sepolia using ethers.js in a Node.js environment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ethers&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ethers&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;ethers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;JsonRpcProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://eth-sepolia.api.onfinality.io/public&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getBlockNumber&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;blockNumber&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getBlockNumber&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Current block number:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;blockNumber&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;getBlockNumber&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For viem:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createPublicClient&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;http&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;viem&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;sepolia&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;viem/chains&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createPublicClient&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;chain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;sepolia&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;transport&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;http&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://eth-sepolia.api.onfinality.io/public&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;blockNumber&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getBlockNumber&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;blockNumber&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Getting Test ETH on Sepolia
&lt;/h2&gt;

&lt;p&gt;You need test ETH to pay gas fees on Sepolia. Unlike mainnet, this ETH has no real value. Common faucets include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Alchemy Sepolia Faucet&lt;/strong&gt; – requires an Alchemy account.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Infura Faucet&lt;/strong&gt; – requires an Infura account.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Public faucets&lt;/strong&gt; – like sepoliafaucet.com, but availability varies.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Faucets often have daily limits and may require you to hold a small amount of mainnet ETH or have a GitHub account. If you're running a CI pipeline, consider requesting a larger allocation from a faucet that supports it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Debugging Common Sepolia RPC Issues
&lt;/h2&gt;

&lt;p&gt;Even with a reliable endpoint, you may encounter issues. Here are common symptoms and fixes:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Symptom&lt;/th&gt;
&lt;th&gt;Likely Cause&lt;/th&gt;
&lt;th&gt;Fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;nonce too low&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Transaction nonce mismatch&lt;/td&gt;
&lt;td&gt;Reset your account nonce in MetaMask or use &lt;code&gt;eth_getTransactionCount&lt;/code&gt; with &lt;code&gt;pending&lt;/code&gt; block parameter&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;insufficient funds&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;No test ETH&lt;/td&gt;
&lt;td&gt;Get test ETH from a faucet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;rate limit exceeded&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Too many requests to public endpoint&lt;/td&gt;
&lt;td&gt;Use a paid plan or dedicated node&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;connection refused&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Wrong RPC URL&lt;/td&gt;
&lt;td&gt;Double-check the endpoint URL and network settings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;block not found&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Querying a block beyond the node's sync&lt;/td&gt;
&lt;td&gt;Use a full or archive node for historical data&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Using WebSocket for Real-Time Updates
&lt;/h2&gt;

&lt;p&gt;For applications that need real-time data, such as pending transaction monitoring, use a WebSocket endpoint. OnFinality provides WebSocket support for Sepolia. Here's an example using ethers.js:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ethers&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ethers&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;ethers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;WebSocketProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;wss://eth-sepolia.api.onfinality.io/public/ws&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;block&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;blockNumber&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;New block:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;blockNumber&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note: The exact WebSocket URL may differ; check the &lt;a href="https://onfinality.io/networks/eth-sepolia" rel="noopener noreferrer"&gt;Sepolia network page&lt;/a&gt; for the current endpoint.&lt;/p&gt;

&lt;h2&gt;
  
  
  Public vs. Dedicated Sepolia RPC
&lt;/h2&gt;

&lt;p&gt;Public endpoints are free and convenient, but they come with trade-offs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rate limits&lt;/strong&gt;: Public endpoints often limit requests per second, which can break your app under load.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reliability&lt;/strong&gt;: They may go down or become slow during peak usage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy&lt;/strong&gt;: Requests are shared, so sensitive data could be exposed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For serious development, consider a dedicated node or a paid RPC plan. OnFinality offers dedicated Sepolia nodes with predictable performance and clear rate limits, ideal for staging environments and load testing. See &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC pricing&lt;/a&gt; for options.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Sepolia is Ethereum's recommended testnet for development.&lt;/li&gt;
&lt;li&gt;Use the chain ID 11155111 and the RPC URL &lt;code&gt;https://eth-sepolia.api.onfinality.io/public&lt;/code&gt; to connect.&lt;/li&gt;
&lt;li&gt;Public endpoints are fine for light testing, but consider a dedicated node for production-like workloads.&lt;/li&gt;
&lt;li&gt;Always verify your nonce and gas settings when debugging transaction issues.&lt;/li&gt;
&lt;li&gt;WebSocket endpoints enable real-time updates for dApps.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is the RPC URL for Ethereum Sepolia?
&lt;/h3&gt;

&lt;p&gt;The public RPC URL is &lt;code&gt;https://eth-sepolia.api.onfinality.io/public&lt;/code&gt;. You can also find other endpoints on the &lt;a href="https://onfinality.io/networks/eth-sepolia" rel="noopener noreferrer"&gt;Sepolia network page&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the chain ID for Sepolia?
&lt;/h3&gt;

&lt;p&gt;The chain ID is 11155111 (0xaa36a7).&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I get Sepolia test ETH?
&lt;/h3&gt;

&lt;p&gt;Use a faucet like Alchemy or Infura. You'll need to sign in and provide your wallet address.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use Sepolia for production?
&lt;/h3&gt;

&lt;p&gt;No, Sepolia is a testnet. Use it only for testing and development. For production, deploy to Ethereum mainnet.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the difference between Sepolia and Goerli?
&lt;/h3&gt;

&lt;p&gt;Sepolia is the current recommended testnet, while Goerli is deprecated. Sepolia has a more stable validator set and is better maintained.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I add Sepolia to my wallet?
&lt;/h3&gt;

&lt;p&gt;Use the chain settings provided in this article. Most wallets allow you to add a custom network.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the block explorer for Sepolia?
&lt;/h3&gt;

&lt;p&gt;The official block explorer is &lt;a href="https://sepolia.etherscan.io" rel="noopener noreferrer"&gt;https://sepolia.etherscan.io&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does OnFinality support WebSocket for Sepolia?
&lt;/h3&gt;

&lt;p&gt;Yes, OnFinality provides WebSocket support for Sepolia. Check the network page for the exact URL.&lt;/p&gt;

&lt;h3&gt;
  
  
  What are the rate limits for the public Sepolia RPC?
&lt;/h3&gt;

&lt;p&gt;Public endpoints have rate limits to ensure fair usage. For higher limits, consider a paid plan or dedicated node.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I troubleshoot "nonce too low" errors?
&lt;/h3&gt;

&lt;p&gt;Reset your account nonce in your wallet or use &lt;code&gt;eth_getTransactionCount&lt;/code&gt; with the &lt;code&gt;pending&lt;/code&gt; block parameter to get the correct nonce.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/networks/eth-sepolia" rel="noopener noreferrer"&gt;Sepolia RPC Endpoints &amp;amp; API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC Pricing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;Supported Networks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Originally published at &lt;a href="https://onfinality.io/en/rpc-assistant/rpc-eth-sepolia" rel="noopener noreferrer"&gt;OnFinality&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>web3</category>
      <category>blockchain</category>
      <category>ethereum</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Polygon Node RPC: Endpoints, Chain Settings &amp; Provider Guide</title>
      <dc:creator>OnFinality</dc:creator>
      <pubDate>Wed, 26 Aug 2026 05:00:34 +0000</pubDate>
      <link>https://dev.to/onfinality/polygon-node-rpc-endpoints-chain-settings-provider-guide-3fi7</link>
      <guid>https://dev.to/onfinality/polygon-node-rpc-endpoints-chain-settings-provider-guide-3fi7</guid>
      <description>&lt;h2&gt;
  
  
  Quick decision guide: which Polygon RPC setup fits your app?
&lt;/h2&gt;

&lt;p&gt;Before you copy an endpoint into your config, decide what your application actually needs. The right choice depends on request volume, data depth, and whether you can tolerate rate limits.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Prototyping or low traffic:&lt;/strong&gt; a public RPC endpoint is fine. It costs nothing and is enough for wallet connections, simple reads, and test transactions. Expect rate limits and possible downtime during congestion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production app with moderate traffic:&lt;/strong&gt; a shared or managed RPC service adds reliability, load balancing, and usually WebSocket support. This is the most common choice for dApps, indexers, and backend services.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High throughput, archive data, or custom needs:&lt;/strong&gt; a dedicated Polygon node gives you exclusive access, no noisy neighbors, and full control over tracing or historical queries. Use this when you need consistent performance under load.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are unsure, start with a managed RPC service that offers both shared and dedicated options. That way you can scale without re-architecting your stack. OnFinality provides &lt;a href="https://onfinality.io/api-service" rel="noopener noreferrer"&gt;RPC services&lt;/a&gt; for Polygon and many other networks, with &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;pricing&lt;/a&gt; that scales from free public endpoints to dedicated nodes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Polygon chain settings at a glance
&lt;/h2&gt;

&lt;p&gt;Polygon is an EVM-compatible sidechain that settles on Ethereum. The mainnet and the Amoy testnet have distinct chain IDs and endpoints. Use the correct chain ID in your wallet or dApp to avoid sending transactions to the wrong network.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Property&lt;/th&gt;
&lt;th&gt;Polygon Mainnet&lt;/th&gt;
&lt;th&gt;Polygon Amoy Testnet&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Chain ID&lt;/td&gt;
&lt;td&gt;137&lt;/td&gt;
&lt;td&gt;80002&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Native token&lt;/td&gt;
&lt;td&gt;POL&lt;/td&gt;
&lt;td&gt;POL (test)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Block explorer&lt;/td&gt;
&lt;td&gt;&lt;a href="https://polygonscan.com" rel="noopener noreferrer"&gt;polygonscan.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://amoy.polygonscan.com" rel="noopener noreferrer"&gt;amoy.polygonscan.com&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RPC endpoint&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://polygon.api.onfinality.io/public&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://polygon-amoy.api.onfinality.io/public&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WebSocket support&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: Polygon migrated from MATIC to POL as the native gas token. Always use POL in your transaction configuration.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What is a Polygon node RPC?
&lt;/h2&gt;

&lt;p&gt;A Polygon node RPC is a server that exposes the Polygon blockchain's data and transaction submission capabilities through the JSON-RPC protocol. Applications send HTTP or WebSocket requests to an RPC endpoint to read balances, query contract state, estimate gas, and broadcast transactions.&lt;/p&gt;

&lt;p&gt;Running a full Polygon node yourself is possible, but it requires syncing the entire chain, maintaining hardware, and monitoring uptime. Most developers use an RPC provider to avoid this operational overhead. The trade-off is trusting a third party with your requests, so provider reliability and data accuracy matter.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to connect to Polygon RPC
&lt;/h2&gt;

&lt;p&gt;You can interact with a Polygon RPC endpoint using any Ethereum-compatible library, such as ethers.js or viem. Here is a basic example using ethers.js:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ethers&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ethers&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;ethers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;JsonRpcProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://polygon.api.onfinality.io/public&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getBlockNumber&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;blockNumber&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getBlockNumber&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Current block:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;blockNumber&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;getBlockNumber&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For a raw JSON-RPC call, you can use curl:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://polygon.api.onfinality.io/public &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you need real-time updates, use a WebSocket connection:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;WebSocket&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ws&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ws&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;WebSocket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;wss://polygon.api.onfinality.io/public&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;ws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;open&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;ws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;jsonrpc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2.0&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;eth_subscribe&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;params&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;newHeads&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
  &lt;span class="p"&gt;}));&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;ws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;message&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;New head:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Public vs. shared vs. dedicated Polygon RPC
&lt;/h2&gt;

&lt;p&gt;Understanding the difference between public, shared, and dedicated RPC nodes helps you match infrastructure to your workload.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Public RPC endpoints&lt;/strong&gt; are free and open to anyone. They are convenient for testing but often have strict rate limits, no SLA, and can become unreliable during network congestion. They are not suitable for production apps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shared RPC services&lt;/strong&gt; (also called managed or API services) pool multiple users on the same infrastructure. Providers add load balancing, caching, and failover to improve reliability. You get a dedicated API key and higher rate limits than public endpoints, but you still share resources with other customers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dedicated RPC nodes&lt;/strong&gt; give you a single-tenant node or cluster. You have exclusive access to the node's compute and bandwidth, which means consistent performance and no "noisy neighbor" issues. This is the best choice for high-throughput applications, archive data needs, or custom RPC methods.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to choose a Polygon RPC provider
&lt;/h2&gt;

&lt;p&gt;When evaluating RPC providers, focus on the criteria that directly affect your application's performance and reliability. Here is a comparison of common provider types:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider Type&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;th&gt;Considerations&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OnFinality&lt;/td&gt;
&lt;td&gt;Production apps needing scalable shared or dedicated nodes&lt;/td&gt;
&lt;td&gt;Multi-chain support, flexible pricing, WebSocket support, &lt;a href="https://onfinality.io/dedicated-node" rel="noopener noreferrer"&gt;dedicated nodes&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Public endpoints&lt;/td&gt;
&lt;td&gt;Testing, low-traffic tools&lt;/td&gt;
&lt;td&gt;Rate limits, no SLA, potential downtime&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Large API platforms&lt;/td&gt;
&lt;td&gt;Teams wanting a full suite of tools&lt;/td&gt;
&lt;td&gt;May require higher pricing tiers for production&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Self-hosted nodes&lt;/td&gt;
&lt;td&gt;Teams with DevOps capacity&lt;/td&gt;
&lt;td&gt;Full control, but high operational cost&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Key evaluation criteria:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Uptime and reliability:&lt;/strong&gt; Look for providers that publish uptime stats or offer SLAs. Avoid making absolute claims; instead, check their status pages and historical performance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate limits and throughput:&lt;/strong&gt; Understand the request-per-second (RPS) limits for your plan. Public endpoints often cap at a few requests per second, while dedicated nodes can handle much more.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data availability:&lt;/strong&gt; Do you need archive data (historical state) or trace methods? Not all providers offer these. Check if the provider supports &lt;code&gt;eth_getLogs&lt;/code&gt; with large ranges or &lt;code&gt;debug_traceTransaction&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WebSocket support:&lt;/strong&gt; For real-time applications, ensure the provider offers a stable WebSocket endpoint.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pricing model:&lt;/strong&gt; Compare per-request, per-RPS, or flat monthly pricing. Estimate your monthly request volume to choose the most cost-effective plan.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Geographic distribution:&lt;/strong&gt; Providers with multiple regions can reduce latency for your users.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Setting up a Polygon node with OnFinality
&lt;/h2&gt;

&lt;p&gt;OnFinality offers both shared and dedicated Polygon RPC nodes. To get started:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create an account on the &lt;a href="https://app.onfinality.io" rel="noopener noreferrer"&gt;OnFinality platform&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Navigate to the &lt;a href="https://onfinality.io/networks/polygon" rel="noopener noreferrer"&gt;Polygon network page&lt;/a&gt; and select the network (mainnet or Amoy testnet).&lt;/li&gt;
&lt;li&gt;Choose a shared or dedicated node plan. For production, a dedicated node gives you a private endpoint and higher throughput.&lt;/li&gt;
&lt;li&gt;Copy your API key and endpoint URL into your application configuration.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For a dedicated node, you can also enable archive mode to access historical state. This is useful for analytics, indexers, and applications that need past balances or events.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common pitfalls and troubleshooting
&lt;/h2&gt;

&lt;p&gt;Even with a reliable RPC provider, you may encounter issues. Here are common problems and how to fix them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Incorrect chain ID:&lt;/strong&gt; Using chain ID 137 for Amoy or 80002 for mainnet will cause transactions to fail. Always verify your network configuration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate limiting:&lt;/strong&gt; If you see &lt;code&gt;429 Too Many Requests&lt;/code&gt;, you are hitting the rate limit. Reduce request frequency, use batching, or upgrade to a higher-tier plan.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WebSocket disconnects:&lt;/strong&gt; WebSocket connections can drop due to network issues or server restarts. Implement reconnection logic with exponential backoff.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;eth_getLogs&lt;/code&gt; timeouts:&lt;/strong&gt; Querying logs over a large block range can time out. Use smaller ranges and paginate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nonce errors:&lt;/strong&gt; If you send multiple transactions from the same address, ensure you are using the correct nonce. See our &lt;a href="https://onfinality.io/rpc-assistant/what-is-a-blockchain-nonce" rel="noopener noreferrer"&gt;nonce guide&lt;/a&gt; for details.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Monitoring your Polygon RPC usage
&lt;/h2&gt;

&lt;p&gt;Once your app is live, monitor your RPC usage to avoid surprises. Track metrics like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Request volume:&lt;/strong&gt; How many requests per second/minute are you sending?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Error rate:&lt;/strong&gt; Percentage of failed requests (timeouts, rate limits, etc.).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latency:&lt;/strong&gt; Average and p95 response times.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WebSocket connection stability:&lt;/strong&gt; How often do connections drop?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most RPC providers offer a dashboard with these metrics. OnFinality's platform includes usage analytics for both shared and dedicated nodes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Polygon mainnet uses chain ID 137, and Amoy testnet uses 80002. Always use the correct chain ID.&lt;/li&gt;
&lt;li&gt;Public RPC endpoints are fine for testing but not for production. Use a managed or dedicated service for reliable performance.&lt;/li&gt;
&lt;li&gt;Evaluate providers based on uptime, rate limits, data availability, WebSocket support, and pricing.&lt;/li&gt;
&lt;li&gt;OnFinality offers shared and dedicated Polygon RPC nodes with flexible &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;pricing&lt;/a&gt; and &lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;multi-network support&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Monitor your RPC usage to optimize costs and performance.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is the difference between Polygon mainnet and Amoy testnet RPC?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Mainnet RPC connects to the live Polygon network with real POL tokens. Amoy testnet RPC connects to a test network where you can use free test tokens for development. They have different chain IDs and endpoints.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I use a public Polygon RPC for production?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It is not recommended. Public endpoints have rate limits and no uptime guarantees, which can cause your app to fail under load. A managed RPC service is a safer choice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does OnFinality support Polygon WebSocket?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes, OnFinality supports both HTTP and WebSocket connections for Polygon mainnet and Amoy testnet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I get test POL for Amoy?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can use the official Polygon faucet to request test POL on Amoy. Check the &lt;a href="https://onfinality.io/networks/polygon" rel="noopener noreferrer"&gt;Polygon network page&lt;/a&gt; for more details.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is a dedicated Polygon node?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A dedicated Polygon node is a single-tenant node provisioned exclusively for your use. It provides consistent performance, higher throughput, and optional archive data access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How much does a Polygon RPC cost?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pricing varies by provider and plan. OnFinality offers a free public endpoint and paid plans for shared and dedicated nodes. See &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC pricing&lt;/a&gt; for current rates.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/networks/polygon" rel="noopener noreferrer"&gt;Polygon Network Page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC Pricing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;Supported RPC Networks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Originally published at &lt;a href="https://onfinality.io/en/rpc-assistant/polygon-node-rpc" rel="noopener noreferrer"&gt;OnFinality&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>web3</category>
      <category>blockchain</category>
      <category>devops</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Kaia API: Endpoints, Methods, and How to Connect</title>
      <dc:creator>OnFinality</dc:creator>
      <pubDate>Wed, 26 Aug 2026 05:00:01 +0000</pubDate>
      <link>https://dev.to/onfinality/kaia-api-endpoints-methods-and-how-to-connect-4i5f</link>
      <guid>https://dev.to/onfinality/kaia-api-endpoints-methods-and-how-to-connect-4i5f</guid>
      <description>&lt;h2&gt;
  
  
  Quick recommendation: Which Kaia API access mode fits your project?
&lt;/h2&gt;

&lt;p&gt;Before you write any code, decide how you will reach the Kaia network. The right choice depends on your workload, not on which provider has the most documentation.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Prototyping or a hackathon&lt;/strong&gt;: use a public endpoint. It is free and fine for low-volume testing, but it is shared and can be rate-limited or unstable under load.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A production dApp or backend service&lt;/strong&gt;: use a managed RPC provider. You get dedicated throughput, higher reliability, and support for WebSocket and archive data. OnFinality offers a &lt;a href="https://onfinality.io/networks/klaytn" rel="noopener noreferrer"&gt;managed Kaia RPC service&lt;/a&gt; with public and dedicated options.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Heavy data indexing or analytics&lt;/strong&gt;: you likely need archive node access and a provider that supports large historical queries. Check whether the provider offers archive data and what the pricing looks like on &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC pricing&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are still evaluating providers, the table in the next section gives you the criteria that matter most.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the Kaia API?
&lt;/h2&gt;

&lt;p&gt;Kaia is a public, EVM-compatible Layer 1 blockchain created from the merger of Klaytn and Finschia. It is designed for high performance with one-second block times, low transaction fees, and instant finality, making it suitable for large-scale Web3 and stablecoin applications.&lt;/p&gt;

&lt;p&gt;The Kaia API is the JSON-RPC interface that lets you interact with the Kaia network. If you have worked with Ethereum's JSON-RPC APIs, the interface will feel familiar. You can use it to read blockchain data, send transactions, and call smart contract methods.&lt;/p&gt;

&lt;p&gt;Kaia exposes several API namespaces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ethereum-compatible namespaces&lt;/strong&gt;: &lt;code&gt;eth_&lt;/code&gt;, &lt;code&gt;net_&lt;/code&gt;, &lt;code&gt;web3_&lt;/code&gt; – standard methods like &lt;code&gt;eth_blockNumber&lt;/code&gt;, &lt;code&gt;eth_getBalance&lt;/code&gt;, &lt;code&gt;eth_call&lt;/code&gt;, and &lt;code&gt;eth_sendRawTransaction&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kaia-specific namespaces&lt;/strong&gt;: &lt;code&gt;kaia_&lt;/code&gt; – methods that extend the Ethereum API with Kaia-specific features, such as &lt;code&gt;kaia_getBlockByNumber&lt;/code&gt; and &lt;code&gt;kaia_getTransactionReceipt&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Legacy &lt;code&gt;klay_&lt;/code&gt; namespace&lt;/strong&gt;: maintained for backward compatibility with the old Klaytn API. It supports the same operations as &lt;code&gt;kaia_&lt;/code&gt; but with the &lt;code&gt;klay_&lt;/code&gt; prefix.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Debug namespace&lt;/strong&gt;: &lt;code&gt;debug_&lt;/code&gt; – development and debugging utilities for deep blockchain analysis and transaction inspection.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a complete list of supported methods, refer to the &lt;a href="https://docs.kaia.io/" rel="noopener noreferrer"&gt;official Kaia documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kaia chain settings at a glance
&lt;/h2&gt;

&lt;p&gt;When you configure a wallet or a dApp to connect to Kaia, you need the correct chain parameters. Here are the essential settings for the Kaia mainnet:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Network Name&lt;/td&gt;
&lt;td&gt;Kaia Mainnet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chain ID&lt;/td&gt;
&lt;td&gt;8217&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Native Currency&lt;/td&gt;
&lt;td&gt;KAIA (symbol: KAIA, decimals: 18)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Block Explorer&lt;/td&gt;
&lt;td&gt;&lt;a href="https://kaiascope.com" rel="noopener noreferrer"&gt;Kaiascope&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Public RPC Endpoint&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://klaytn.api.onfinality.io/public&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These settings are also available on the &lt;a href="https://onfinality.io/networks/klaytn" rel="noopener noreferrer"&gt;Kaia network page&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to connect to the Kaia API
&lt;/h2&gt;

&lt;p&gt;You can connect to the Kaia API using any Ethereum-compatible library, such as ethers.js, viem, or web3.js. Here is a simple example using ethers.js:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;JsonRpcProvider&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ethers&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;JsonRpcProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://klaytn.api.onfinality.io/public&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getBlockNumber&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;blockNumber&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getBlockNumber&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Latest block:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;blockNumber&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;getBlockNumber&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also make raw JSON-RPC requests with &lt;code&gt;curl&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://klaytn.api.onfinality.io/public &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For WebSocket support, you can use a WebSocket endpoint if your provider offers one. OnFinality's managed Kaia endpoints support both HTTP and WebSocket, which is useful for real-time applications like price feeds or transaction monitoring.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kaia API methods: what you can do
&lt;/h2&gt;

&lt;p&gt;Kaia's API is broad. Here are the most common method groups you will use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Chain information&lt;/strong&gt;: &lt;code&gt;eth_chainId&lt;/code&gt;, &lt;code&gt;eth_blockNumber&lt;/code&gt;, &lt;code&gt;eth_gasPrice&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Account queries&lt;/strong&gt;: &lt;code&gt;eth_getBalance&lt;/code&gt;, &lt;code&gt;eth_getTransactionCount&lt;/code&gt;, &lt;code&gt;eth_getCode&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smart contract interaction&lt;/strong&gt;: &lt;code&gt;eth_call&lt;/code&gt;, &lt;code&gt;eth_sendRawTransaction&lt;/code&gt;, &lt;code&gt;eth_getTransactionReceipt&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Block queries&lt;/strong&gt;: &lt;code&gt;eth_getBlockByNumber&lt;/code&gt;, &lt;code&gt;eth_getBlockByHash&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kaia-specific&lt;/strong&gt;: &lt;code&gt;kaia_getBlockByNumber&lt;/code&gt;, &lt;code&gt;kaia_getTransactionReceipt&lt;/code&gt;, &lt;code&gt;kaia_call&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Debug&lt;/strong&gt;: &lt;code&gt;debug_traceTransaction&lt;/code&gt;, &lt;code&gt;debug_traceBlockByNumber&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a full reference, see the &lt;a href="https://docs.kaia.io/" rel="noopener noreferrer"&gt;Kaia JSON-RPC API docs&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to choose a Kaia RPC provider
&lt;/h2&gt;

&lt;p&gt;When you move beyond a public endpoint, you need to evaluate RPC providers. Here is a comparison table to guide your decision:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;What to check&lt;/th&gt;
&lt;th&gt;Why it matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Throughput and rate limits&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Does the provider offer dedicated throughput or shared limits?&lt;/td&gt;
&lt;td&gt;High-traffic dApps need consistent performance without sudden rate limiting.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Reliability and uptime&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;What is the provider's historical uptime? Do they have a status page?&lt;/td&gt;
&lt;td&gt;Downtime directly impacts your users and can cause failed transactions.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Archive data&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Does the provider support archive requests?&lt;/td&gt;
&lt;td&gt;Indexers and analytics tools often need historical state.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;WebSocket support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Is WSS available for real-time subscriptions?&lt;/td&gt;
&lt;td&gt;Essential for applications that need live updates.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Geographic distribution&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Where are the provider's nodes located?&lt;/td&gt;
&lt;td&gt;Global edge networks reduce latency for users worldwide.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pricing model&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Is it pay-as-you-go, subscription, or usage-based?&lt;/td&gt;
&lt;td&gt;Predictable costs help you scale without surprises.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Support and SLAs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;What level of support is offered?&lt;/td&gt;
&lt;td&gt;Production apps need responsive support when issues arise.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;OnFinality is a strong option for Kaia RPC. We offer a &lt;a href="https://onfinality.io/networks/klaytn" rel="noopener noreferrer"&gt;managed Kaia endpoint&lt;/a&gt; with both public and dedicated nodes, and you can see our &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;pricing&lt;/a&gt; for details. Our infrastructure is designed for production workloads, with global edge nodes and support for WebSocket and archive data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common pitfalls and how to avoid them
&lt;/h2&gt;

&lt;p&gt;Even with a good provider, you can run into issues. Here are some common pitfalls when working with the Kaia API:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Using the wrong chain ID&lt;/strong&gt;: Make sure you use &lt;code&gt;8217&lt;/code&gt; for Kaia mainnet and &lt;code&gt;1001&lt;/code&gt; for the Kairos testnet. Using the wrong chain ID will cause transactions to fail.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate limiting on public endpoints&lt;/strong&gt;: Public endpoints are shared, so they can be rate-limited. If you see &lt;code&gt;429&lt;/code&gt; errors, consider moving to a managed provider.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not handling WebSocket reconnections&lt;/strong&gt;: If you use WebSocket, implement reconnection logic to handle network drops.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Assuming all methods are available&lt;/strong&gt;: Some providers may not support debug or archive methods. Check your provider's documentation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ignoring gas price fluctuations&lt;/strong&gt;: Kaia has low fees, but gas price can still vary. Use &lt;code&gt;eth_gasPrice&lt;/code&gt; or a gas estimator to avoid stuck transactions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Debugging Kaia API calls
&lt;/h2&gt;

&lt;p&gt;When something goes wrong, here is a quick debugging path:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Check the endpoint&lt;/strong&gt;: Verify that you are using the correct URL and that it is reachable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check the chain ID&lt;/strong&gt;: Ensure your requests include the correct chain ID.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test with a simple method&lt;/strong&gt;: Start with &lt;code&gt;eth_blockNumber&lt;/code&gt; to confirm basic connectivity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inspect error messages&lt;/strong&gt;: JSON-RPC errors include a code and message. Common codes are &lt;code&gt;-32601&lt;/code&gt; (method not found) and &lt;code&gt;-32000&lt;/code&gt; (server error).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use a block explorer&lt;/strong&gt;: If a transaction fails, look it up on &lt;a href="https://kaiascope.com" rel="noopener noreferrer"&gt;Kaiascope&lt;/a&gt; to see the revert reason.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you are using OnFinality, you can also check our &lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;network status page&lt;/a&gt; for any ongoing incidents.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The Kaia API is an Ethereum-compatible JSON-RPC interface for the Kaia blockchain.&lt;/li&gt;
&lt;li&gt;Use the correct chain ID (&lt;code&gt;8217&lt;/code&gt; for mainnet) and endpoint for your network.&lt;/li&gt;
&lt;li&gt;Public endpoints are fine for testing, but production apps should use a managed RPC provider like OnFinality.&lt;/li&gt;
&lt;li&gt;Evaluate providers based on throughput, reliability, archive data, WebSocket support, and pricing.&lt;/li&gt;
&lt;li&gt;Debug systematically: check endpoint, chain ID, and method availability before diving deeper.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is the Kaia API?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Kaia API is the JSON-RPC interface for the Kaia blockchain, allowing developers to interact with the network using Ethereum-compatible methods.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the Kaia chain ID?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Kaia mainnet chain ID is &lt;code&gt;8217&lt;/code&gt;. The Kairos testnet uses &lt;code&gt;1001&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is the Kaia API free?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Public endpoints are free but have rate limits. For production use, you will likely need a paid managed RPC service.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I use ethers.js with Kaia?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes, Kaia is EVM-compatible, so you can use ethers.js, viem, web3.js, and other Ethereum libraries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does OnFinality support Kaia?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes, OnFinality provides a managed Kaia RPC endpoint. You can find more details on the &lt;a href="https://onfinality.io/networks/klaytn" rel="noopener noreferrer"&gt;Kaia network page&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/networks/klaytn" rel="noopener noreferrer"&gt;Kaia Network Page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC Pricing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;Supported Networks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Originally published at &lt;a href="https://onfinality.io/en/rpc-assistant/kaia-api" rel="noopener noreferrer"&gt;OnFinality&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>web3</category>
      <category>blockchain</category>
      <category>devops</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Bitcoin Testnet RPC: Setup, Faucet &amp; Best Practices</title>
      <dc:creator>OnFinality</dc:creator>
      <pubDate>Wed, 26 Aug 2026 04:59:28 +0000</pubDate>
      <link>https://dev.to/onfinality/bitcoin-testnet-rpc-setup-faucet-best-practices-311</link>
      <guid>https://dev.to/onfinality/bitcoin-testnet-rpc-setup-faucet-best-practices-311</guid>
      <description>&lt;h2&gt;
  
  
  Quick Recommendation: When to Use Bitcoin Testnet vs Regtest
&lt;/h2&gt;

&lt;p&gt;If you are building a Bitcoin application, you need a safe environment to test transactions, wallet logic, and block processing. Bitcoin Testnet is a public network that mimics mainnet behavior but uses valueless coins. It is ideal for integration testing, wallet development, and any scenario where you need to interact with a live network of peers.&lt;/p&gt;

&lt;p&gt;For most development, however, &lt;strong&gt;regtest mode&lt;/strong&gt; is often the better choice. Regtest gives you a private blockchain where you control block creation, making it faster and more deterministic for unit tests and CI pipelines. Use testnet when you need to test against a public network with realistic transaction propagation and mempool behavior.&lt;/p&gt;

&lt;p&gt;If you need a reliable testnet RPC endpoint without running your own node, OnFinality provides managed Bitcoin Testnet RPC services. Check our &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC pricing&lt;/a&gt; and &lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;supported networks&lt;/a&gt; for details.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is Bitcoin Testnet?
&lt;/h2&gt;

&lt;p&gt;Bitcoin Testnet is an alternative blockchain designed for testing. It runs the same consensus rules as mainnet but uses testnet coins (tBTC) that have no real-world value. This allows developers to experiment with transactions, smart contracts (via sidechains), and wallet features without financial risk.&lt;/p&gt;

&lt;p&gt;Testnet is a public resource maintained by the community. It is not a private sandbox—anyone can join, and the network experiences real transaction traffic. This makes it useful for testing how your application behaves under realistic conditions, such as mempool congestion and block reorgs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testnet vs Mainnet vs Regtest: Key Differences
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Mainnet&lt;/th&gt;
&lt;th&gt;Testnet&lt;/th&gt;
&lt;th&gt;Regtest&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Coin value&lt;/td&gt;
&lt;td&gt;Real&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Network access&lt;/td&gt;
&lt;td&gt;Public&lt;/td&gt;
&lt;td&gt;Public&lt;/td&gt;
&lt;td&gt;Private&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Block creation&lt;/td&gt;
&lt;td&gt;~10 min&lt;/td&gt;
&lt;td&gt;~10 min&lt;/td&gt;
&lt;td&gt;Instant (on demand)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Use case&lt;/td&gt;
&lt;td&gt;Production&lt;/td&gt;
&lt;td&gt;Integration testing&lt;/td&gt;
&lt;td&gt;Unit tests, CI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Faucet needed&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transaction restrictions&lt;/td&gt;
&lt;td&gt;Standard&lt;/td&gt;
&lt;td&gt;Relaxed&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Testnet relaxes some standard transaction checks, allowing you to test features that might be disabled on mainnet. However, because it is a shared network, you should not abuse it—faucets and nodes are provided by volunteers.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Get Testnet Bitcoin (Faucets)
&lt;/h2&gt;

&lt;p&gt;To send transactions on testnet, you need tBTC. You can obtain it from public faucets. These services send a small amount of testnet coins to a testnet address. Common faucets include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Coinfaucet.eu&lt;/li&gt;
&lt;li&gt;Bitcoin testnet faucets listed on community sites&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When using a faucet, ensure you provide a valid testnet address. Testnet addresses typically start with &lt;code&gt;m&lt;/code&gt; or &lt;code&gt;n&lt;/code&gt; (for P2PKH) or &lt;code&gt;tb1&lt;/code&gt; (for SegWit). Do not send mainnet BTC to a testnet address—they are incompatible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting Up a Bitcoin Testnet Node
&lt;/h2&gt;

&lt;p&gt;To interact with testnet, you can run your own node using Bitcoin Core. Here is a basic setup:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Download and install Bitcoin Core.&lt;/li&gt;
&lt;li&gt;Configure &lt;code&gt;bitcoin.conf&lt;/code&gt; to use testnet:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="c"&gt;# bitcoin.conf
&lt;/span&gt;&lt;span class="py"&gt;testnet&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;1&lt;/span&gt;
&lt;span class="py"&gt;server&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;1&lt;/span&gt;
&lt;span class="py"&gt;rpcuser&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;yourusername&lt;/span&gt;
&lt;span class="py"&gt;rpcpassword&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;yourpassword&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Start &lt;code&gt;bitcoind&lt;/code&gt; in testnet mode:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bitcoind &lt;span class="nt"&gt;-testnet&lt;/span&gt; &lt;span class="nt"&gt;-daemon&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Wait for the node to sync. Testnet blockchain is smaller than mainnet but still takes time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use &lt;code&gt;bitcoin-cli&lt;/code&gt; to interact with the node:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bitcoin-cli &lt;span class="nt"&gt;-testnet&lt;/span&gt; getblockchaininfo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will show your node's sync status, block height, and network information.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connecting to a Bitcoin Testnet RPC Endpoint
&lt;/h2&gt;

&lt;p&gt;If you prefer not to run a full node, you can use a managed RPC provider like OnFinality. This gives you a public or private endpoint without the overhead of syncing and maintaining a node.&lt;/p&gt;

&lt;p&gt;OnFinality offers Bitcoin Testnet RPC endpoints that you can use directly in your applications. For example, you can make JSON-RPC calls to query blockchain data:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://bitcoin-testnet.rpc.onfinality.io &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"jsonrpc":"1.0","id":1,"method":"getblockchaininfo","params":[]}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace the URL with the actual endpoint provided by OnFinality for Bitcoin Testnet. Check the &lt;a href="https://onfinality.io/networks/bitcoin-testnet" rel="noopener noreferrer"&gt;network page&lt;/a&gt; for the latest endpoint details.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using Bitcoin Testnet with JavaScript (bitcoinjs-lib)
&lt;/h2&gt;

&lt;p&gt;For web or Node.js applications, you can use libraries like &lt;code&gt;bitcoinjs-lib&lt;/code&gt; to create and broadcast transactions. Here is an example of generating a testnet address:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bitcoin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bitcoinjs-lib&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;network&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bitcoin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;networks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;testnet&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;keyPair&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bitcoin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ECPair&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;makeRandom&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;network&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;address&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bitcoin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;payments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;p2pkh&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;pubkey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;keyPair&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;publicKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;network&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Testnet address:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To broadcast a transaction, you need to connect to a testnet node or RPC endpoint. You can use &lt;code&gt;bitcoin-cli&lt;/code&gt; or a library like &lt;code&gt;bitcoin-rpc&lt;/code&gt; to send raw transactions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Pitfalls and Troubleshooting
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Faucet Not Sending Coins
&lt;/h3&gt;

&lt;p&gt;Faucets may be temporarily out of funds or require a delay between requests. Try a different faucet or wait a few minutes.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Transaction Not Confirming
&lt;/h3&gt;

&lt;p&gt;Testnet blocks are mined every ~10 minutes, but sometimes the network is slow. Check the mempool on a testnet explorer like &lt;a href="https://mempool.space/testnet" rel="noopener noreferrer"&gt;mempool.space/testnet&lt;/a&gt; to see if your transaction is pending. You may need to increase the fee.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Wrong Network Address
&lt;/h3&gt;

&lt;p&gt;Ensure you are using testnet addresses. Sending to a mainnet address will result in lost funds (even though they are testnet coins).&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Node Sync Issues
&lt;/h3&gt;

&lt;p&gt;If your node is not syncing, check your internet connection and disk space. You can also use &lt;code&gt;bitcoin-cli -testnet getblockcount&lt;/code&gt; to see the current block height and compare it with the explorer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Monitoring Your Testnet Node
&lt;/h2&gt;

&lt;p&gt;If you run your own node, you should monitor its health. Use &lt;code&gt;bitcoin-cli&lt;/code&gt; to check sync status and network connections:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bitcoin-cli &lt;span class="nt"&gt;-testnet&lt;/span&gt; getnetworkinfo
bitcoin-cli &lt;span class="nt"&gt;-testnet&lt;/span&gt; getpeerinfo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For production-grade monitoring, consider using a managed RPC service that handles uptime and scaling. OnFinality provides dedicated nodes with monitoring and failover, as described on our &lt;a href="https://onfinality.io/dedicated-node" rel="noopener noreferrer"&gt;dedicated node&lt;/a&gt; page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Bitcoin Testnet is a public test network with valueless coins, ideal for integration testing.&lt;/li&gt;
&lt;li&gt;Regtest is better for unit tests and CI due to its deterministic nature.&lt;/li&gt;
&lt;li&gt;Use faucets to get tBTC, but be mindful of network abuse.&lt;/li&gt;
&lt;li&gt;You can run your own node or use a managed RPC provider like OnFinality.&lt;/li&gt;
&lt;li&gt;Always verify you are using testnet addresses and correct RPC endpoints.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is the difference between Bitcoin Testnet and Regtest?
&lt;/h3&gt;

&lt;p&gt;Testnet is a public network with real peers and blocks, while regtest is a private network where you control block creation. Regtest is faster and more predictable for development.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I get testnet Bitcoin?
&lt;/h3&gt;

&lt;p&gt;You can get tBTC from public faucets. Search for "Bitcoin testnet faucet" and enter your testnet address to receive free coins.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use Bitcoin Testnet for production?
&lt;/h3&gt;

&lt;p&gt;No, testnet is only for testing. Coins have no value, and the network may be reset or experience issues. Use mainnet for production.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does OnFinality support Bitcoin Testnet RPC?
&lt;/h3&gt;

&lt;p&gt;Yes, OnFinality provides Bitcoin Testnet RPC endpoints. Check our &lt;a href="https://onfinality.io/networks/bitcoin-testnet" rel="noopener noreferrer"&gt;network page&lt;/a&gt; for details and endpoint URLs.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I switch from testnet to mainnet?
&lt;/h3&gt;

&lt;p&gt;In your configuration, change &lt;code&gt;testnet=1&lt;/code&gt; to &lt;code&gt;testnet=0&lt;/code&gt; or remove the line. You will need to sync the mainnet blockchain, which is much larger.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC Pricing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;Supported Networks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/rpc-assistant/testnet-rpc-guide" rel="noopener noreferrer"&gt;Testnet RPC Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Originally published at &lt;a href="https://onfinality.io/en/rpc-assistant/testnet-bitcoin" rel="noopener noreferrer"&gt;OnFinality&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>web3</category>
      <category>blockchain</category>
      <category>devops</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Kusama Migration: Update Your RPC Endpoints Now</title>
      <dc:creator>OnFinality</dc:creator>
      <pubDate>Mon, 24 Aug 2026 04:29:08 +0000</pubDate>
      <link>https://dev.to/onfinality/kusama-migration-update-your-rpc-endpoints-now-4foh</link>
      <guid>https://dev.to/onfinality/kusama-migration-update-your-rpc-endpoints-now-4foh</guid>
      <description>&lt;h2&gt;
  
  
  Quick Migration Checkpoints
&lt;/h2&gt;

&lt;p&gt;If you are a developer or infrastructure operator on Kusama, the migration to Asset Hub changes where you send certain RPC calls. Here is a quick checklist to get your endpoints updated:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Identify which chain your dApp depends on.&lt;/strong&gt; If you were using Relay Chain RPC for balance transfers, staking, or governance, you likely need to switch to Asset Hub Kusama.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Update your network configuration.&lt;/strong&gt; Change the RPC endpoint and chain ID to Asset Hub Kusama. See the &lt;a href="https://onfinality.io/networks/assethub-kusama" rel="noopener noreferrer"&gt;Asset Hub Kusama network page&lt;/a&gt; for the official endpoint.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test with a small transaction.&lt;/strong&gt; Before going live, send a test transfer to confirm your wallet and backend are using the correct chain.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor for errors.&lt;/strong&gt; Watch for &lt;code&gt;InvalidTransaction&lt;/code&gt; or &lt;code&gt;UnknownConnection&lt;/code&gt; errors that indicate you are still pointing to the old chain.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are unsure which chain your use case requires, the next section breaks down the migration and its impact.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Kusama Migration Actually Changed
&lt;/h2&gt;

&lt;p&gt;The Kusama migration, executed on October 7, 2025, moved core functionality from the Kusama Relay Chain to Asset Hub Kusama. This is part of a broader roadmap to make the network more scalable and accessible. The migration was completed in about 3 hours and 13 minutes, moving all assets, pallets, accounts, and proxies.&lt;/p&gt;

&lt;p&gt;For developers, the key change is that &lt;strong&gt;Asset Hub Kusama is now the primary chain for asset transfers and management&lt;/strong&gt;. The Relay Chain still exists but is no longer the place to send KSM transfers or interact with assets. This means your RPC endpoints must be updated to point to Asset Hub Kusama for these operations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters for Your dApp
&lt;/h2&gt;

&lt;p&gt;If your dApp handles KSM transfers, queries balances, or interacts with assets, it must now talk to Asset Hub Kusama. Using the old Relay Chain endpoint will result in errors or stale data. The migration also brought several improvements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lower minimum balance&lt;/strong&gt;: reduced from 0.00003 KSM to 0.000003 KSM.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lower transaction fees&lt;/strong&gt;: reduced from 0.00053 KSM to 0.00009 KSM.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;More token support&lt;/strong&gt;: USDT, USDC, DOT, and other ecosystem tokens.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unified access&lt;/strong&gt;: KSM, assets, staking, and governance in one place.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fee payment in any token&lt;/strong&gt;: pay transaction fees with any supported asset.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These changes are beneficial, but they require you to update your infrastructure to take advantage of them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chain Settings at a Glance
&lt;/h2&gt;

&lt;p&gt;Here are the key settings for Asset Hub Kusama. Use these to update your network configuration.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setting&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Network Name&lt;/td&gt;
&lt;td&gt;Asset Hub Kusama&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chain ID&lt;/td&gt;
&lt;td&gt;1000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RPC Endpoint&lt;/td&gt;
&lt;td&gt;See &lt;a href="https://onfinality.io/networks/assethub-kusama" rel="noopener noreferrer"&gt;Asset Hub Kusama network page&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Explorer&lt;/td&gt;
&lt;td&gt;&lt;a href="https://assethub-kusama.subscan.io" rel="noopener noreferrer"&gt;https://assethub-kusama.subscan.io&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Token Symbol&lt;/td&gt;
&lt;td&gt;KSM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Token Decimals&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Note: The RPC endpoint is not hardcoded here because it may vary by provider. Use the official OnFinality public endpoint listed on the network page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Updating Your RPC Endpoint
&lt;/h2&gt;

&lt;p&gt;To update your dApp, you need to change the RPC endpoint in your configuration. Here is an example using a common JavaScript library like &lt;code&gt;polkadot-js&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ApiPromise&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;WsProvider&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@polkadot/api&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Replace with the official Asset Hub Kusama endpoint&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;wsProvider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;WsProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;wss://assethub-kusama-rpc.polkadot.io&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;ApiPromise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;wsProvider&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Connected to chain: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rpc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;system&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;chain&lt;/span&gt;&lt;span class="p"&gt;()}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you are using a REST API or a different library, the same principle applies: update the endpoint URL and ensure your chain ID matches.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Pitfalls and How to Avoid Them
&lt;/h2&gt;

&lt;p&gt;Here are the most common issues developers face after the migration and how to avoid them:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pitfall&lt;/th&gt;
&lt;th&gt;Symptom&lt;/th&gt;
&lt;th&gt;Fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Using Relay Chain endpoint for transfers&lt;/td&gt;
&lt;td&gt;Transaction fails with &lt;code&gt;InvalidTransaction&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Switch to Asset Hub Kusama endpoint&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wrong chain ID in wallet config&lt;/td&gt;
&lt;td&gt;Wallet shows wrong network or fails to connect&lt;/td&gt;
&lt;td&gt;Set chain ID to 1000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Not updating backend services&lt;/td&gt;
&lt;td&gt;Balance queries return stale data&lt;/td&gt;
&lt;td&gt;Update all RPC URLs in your backend&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Forgetting to update indexers&lt;/td&gt;
&lt;td&gt;Indexer misses new blocks&lt;/td&gt;
&lt;td&gt;Reconfigure indexer to use Asset Hub Kusama&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Migration Checklist for Production Apps
&lt;/h2&gt;

&lt;p&gt;Before you deploy, run through this checklist to ensure a smooth transition:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Update all RPC endpoints to Asset Hub Kusama.&lt;/li&gt;
&lt;li&gt;[ ] Update chain ID in all configurations.&lt;/li&gt;
&lt;li&gt;[ ] Test with a small transfer on the new chain.&lt;/li&gt;
&lt;li&gt;[ ] Verify balance queries return correct data.&lt;/li&gt;
&lt;li&gt;[ ] Monitor logs for errors after deployment.&lt;/li&gt;
&lt;li&gt;[ ] Communicate changes to your users if they use your app for KSM transfers.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Choosing the Right RPC Provider
&lt;/h2&gt;

&lt;p&gt;When updating your endpoints, you may also want to evaluate your RPC provider. The migration is a good time to ensure your provider supports Asset Hub Kusama and offers the reliability you need. Consider the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Network coverage&lt;/strong&gt;: Does the provider support Asset Hub Kusama and other Kusama parachains?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transport options&lt;/strong&gt;: Do you need WebSocket, HTTPS, or both?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate limits&lt;/strong&gt;: Are there limits that could affect your traffic?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Support&lt;/strong&gt;: Is there a dedicated support channel for issues?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;OnFinality offers RPC services for Asset Hub Kusama and many other networks. You can check &lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;supported RPC networks&lt;/a&gt; and &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC pricing&lt;/a&gt; to see if it fits your needs. OnFinality also provides &lt;a href="https://onfinality.io/dedicated-node" rel="noopener noreferrer"&gt;dedicated nodes&lt;/a&gt; for high-traffic applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The Kusama migration moved core functionality to Asset Hub Kusama.&lt;/li&gt;
&lt;li&gt;Update your RPC endpoints to Asset Hub Kusama for asset transfers and balance queries.&lt;/li&gt;
&lt;li&gt;Use the correct chain ID (1000) and test before going live.&lt;/li&gt;
&lt;li&gt;Monitor for common errors like &lt;code&gt;InvalidTransaction&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Evaluate your RPC provider to ensure it supports the new chain.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Do I need to migrate my KSM tokens?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No. The migration was automatic. Your KSM tokens moved to Asset Hub Kusama without any action on your part.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What happens to my old transaction history?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Old transaction history remains on the Kusama Relay Chain. You can still query it, but new transactions will be on Asset Hub Kusama.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I still use the Relay Chain for staking?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Staking functionality has moved to Asset Hub Kusama. You should update your staking dApp or wallet to use the new chain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I find the official RPC endpoint?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Check the &lt;a href="https://onfinality.io/networks/assethub-kusama" rel="noopener noreferrer"&gt;Asset Hub Kusama network page&lt;/a&gt; for the official OnFinality public endpoint.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What if I use a wallet that doesn't support Asset Hub Kusama?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You may need to switch to a wallet that supports the migration. Many wallets have updated, but some like Trust Wallet had issues. Check your wallet's documentation for migration support.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/networks/assethub-kusama" rel="noopener noreferrer"&gt;Asset Hub Kusama RPC Endpoints&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/networks/kusama" rel="noopener noreferrer"&gt;Kusama API Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/networks/polkadot" rel="noopener noreferrer"&gt;Polkadot Migration Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Originally published at &lt;a href="https://onfinality.io/en/rpc-assistant/kusama-migration" rel="noopener noreferrer"&gt;OnFinality&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>web3</category>
      <category>blockchain</category>
      <category>devops</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Composable RPC: Endpoints, Dedicated Nodes &amp; Integration</title>
      <dc:creator>OnFinality</dc:creator>
      <pubDate>Mon, 24 Aug 2026 04:28:35 +0000</pubDate>
      <link>https://dev.to/onfinality/composable-rpc-endpoints-dedicated-nodes-integration-11l1</link>
      <guid>https://dev.to/onfinality/composable-rpc-endpoints-dedicated-nodes-integration-11l1</guid>
      <description>&lt;h2&gt;
  
  
  Quick Recommendation: Public Endpoint or Dedicated Node?
&lt;/h2&gt;

&lt;p&gt;Before diving into the technical details, decide which Composable RPC setup fits your stage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Prototyping or light testing&lt;/strong&gt;: Use the public Composable Finance RPC endpoint. It is fine for lightweight checks, prototypes, and quick integration tests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production dApp or backend&lt;/strong&gt;: Move to authenticated endpoints or a dedicated node when you need clearer limits, analytics, and operational visibility.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High-throughput or custom needs&lt;/strong&gt;: A dedicated Composable Finance node gives you isolated resources, custom configuration, and predictable capacity.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are unsure, start with the public endpoint, measure your traffic, and then scale to authenticated or dedicated infrastructure as your usage grows. OnFinality offers both paths, so you can migrate without changing your application code.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is Composable Finance?
&lt;/h2&gt;

&lt;p&gt;Composable Finance is a cross-chain DeFi infrastructure project focused on improving the accessibility, efficiency, and security of the blockchain industry. Its technology stack enables trustless interoperability across ecosystems such as Ethereum, Polkadot, Kusama, Cosmos, and NEAR, powered by the first cross-ecosystem implementation of IBC (Inter-Blockchain Communication).&lt;/p&gt;

&lt;p&gt;For developers, this means Composable is not just a single chain but a network of connected chains. When you interact with Composable, you are typically querying its relay chain or one of its connected parachains. The RPC endpoints you use must reflect the specific chain you are targeting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Composable RPC Endpoints
&lt;/h2&gt;

&lt;p&gt;OnFinality provides public RPC endpoints for Composable Finance that you can use to connect wallets, dApps, dashboards, bots, and backend services without operating your own node from day one.&lt;/p&gt;

&lt;h3&gt;
  
  
  Public Endpoint Testing
&lt;/h3&gt;

&lt;p&gt;Start with the public Composable Finance RPC endpoint for lightweight checks, prototypes, and quick integration tests. The public endpoint is rate-limited and shared, so it is not suitable for production workloads.&lt;/p&gt;

&lt;h3&gt;
  
  
  Authenticated API Access
&lt;/h3&gt;

&lt;p&gt;Move production traffic to authenticated endpoints when you need clearer limits, analytics, and operational visibility. Authenticated endpoints are available through OnFinality's &lt;a href="https://onfinality.io/api-service" rel="noopener noreferrer"&gt;API service&lt;/a&gt; and provide a more stable foundation for production apps.&lt;/p&gt;

&lt;h3&gt;
  
  
  Standard RPC Methods
&lt;/h3&gt;

&lt;p&gt;Composable Finance supports standard JSON-RPC methods for querying blocks, transactions, balances, events, and chain state. You can use HTTP and WebSocket transports, depending on your needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connecting to Composable RPC
&lt;/h2&gt;

&lt;p&gt;Here is a basic example of how to make a JSON-RPC call to a Composable RPC endpoint using &lt;code&gt;curl&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"id":1, "jsonrpc":"2.0", "method":"system_health", "params":[]}'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  https://composable.api.onfinality.io/public
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace the URL with the actual public endpoint from the &lt;a href="https://onfinality.io/networks/composable" rel="noopener noreferrer"&gt;Composable network page&lt;/a&gt; if it differs. For production, use your authenticated endpoint URL.&lt;/p&gt;

&lt;p&gt;For WebSocket subscriptions, you can use libraries like &lt;code&gt;wscat&lt;/code&gt; or &lt;code&gt;ethers.js&lt;/code&gt; to listen to new blocks or events.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to Use Dedicated Composable Nodes
&lt;/h2&gt;

&lt;p&gt;Production teams need more than an endpoint URL. They need observability, predictable capacity, and a path from shared RPC access to isolated infrastructure.&lt;/p&gt;

&lt;h3&gt;
  
  
  Request Visibility
&lt;/h3&gt;

&lt;p&gt;Track usage patterns and response activity so your team can understand traffic growth before it becomes an incident. OnFinality provides analytics for authenticated endpoints, and dedicated nodes give you full visibility into your requests.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dedicated Node Path
&lt;/h3&gt;

&lt;p&gt;Use dedicated Composable Finance nodes when your workload needs isolated resources, custom configuration, and operational control. Dedicated nodes are ideal for high-throughput applications, indexers, and services that require consistent performance.&lt;/p&gt;

&lt;h3&gt;
  
  
  Archive and Historical Data
&lt;/h3&gt;

&lt;p&gt;If your application needs historical state, consider an archive node. Archive nodes store the full history of the chain, enabling queries like &lt;code&gt;eth_getLogs&lt;/code&gt; over long ranges. OnFinality offers archive support for many networks, including Composable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Composable RPC vs. Other Networks
&lt;/h2&gt;

&lt;p&gt;Composable Finance is unique because it bridges multiple ecosystems. When you work with Composable, you might need to interact with different chains that use different RPC standards. For example, Ethereum-based chains use &lt;code&gt;eth_*&lt;/code&gt; methods, while Substrate-based chains use &lt;code&gt;system_*&lt;/code&gt; and &lt;code&gt;state_*&lt;/code&gt; methods.&lt;/p&gt;

&lt;p&gt;Here is a quick comparison of typical RPC methods across the ecosystems Composable touches:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Ecosystem&lt;/th&gt;
&lt;th&gt;Common RPC Methods&lt;/th&gt;
&lt;th&gt;Transport&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ethereum&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;eth_blockNumber&lt;/code&gt;, &lt;code&gt;eth_getBalance&lt;/code&gt;, &lt;code&gt;eth_call&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;HTTP, WebSocket&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Polkadot&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;chain_getBlock&lt;/code&gt;, &lt;code&gt;system_health&lt;/code&gt;, &lt;code&gt;state_getStorage&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;HTTP, WebSocket&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cosmos&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;cosmos_tx&lt;/code&gt;, &lt;code&gt;abci_query&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;HTTP, gRPC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NEAR&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;near_block&lt;/code&gt;, &lt;code&gt;query&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;HTTP&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;When integrating with Composable, ensure your client library matches the chain you are querying.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integration Examples
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Using ethers.js with Composable (Ethereum-compatible)
&lt;/h3&gt;

&lt;p&gt;If you are interacting with an Ethereum-compatible chain within the Composable ecosystem, you can use &lt;code&gt;ethers.js&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ethers&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ethers&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;ethers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;JsonRpcProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://composable.api.onfinality.io/public&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getBlockNumber&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;blockNumber&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getBlockNumber&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Current block number:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;blockNumber&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;getBlockNumber&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Using Polkadot.js with Composable (Substrate-based)
&lt;/h3&gt;

&lt;p&gt;For Substrate-based chains, use &lt;code&gt;@polkadot/api&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ApiPromise&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;WsProvider&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@polkadot/api&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;wsProvider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;WsProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;wss://composable.api.onfinality.io/public-ws&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;ApiPromise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;wsProvider&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;health&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rpc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;system&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;health&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Health:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;health&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toHuman&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;disconnect&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note: The WebSocket URL is an example; use the actual endpoint from the &lt;a href="https://onfinality.io/networks/composable" rel="noopener noreferrer"&gt;Composable network page&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Pitfalls and Troubleshooting
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Wrong RPC Method for the Chain
&lt;/h3&gt;

&lt;p&gt;Using &lt;code&gt;eth_*&lt;/code&gt; methods on a Substrate chain will fail. Always check the chain type and use the appropriate JSON-RPC namespace.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Rate Limiting on Public Endpoints
&lt;/h3&gt;

&lt;p&gt;Public endpoints are shared and rate-limited. If you see &lt;code&gt;429 Too Many Requests&lt;/code&gt;, switch to an authenticated endpoint or a dedicated node.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. WebSocket Connection Drops
&lt;/h3&gt;

&lt;p&gt;WebSocket connections can drop due to network issues or server restarts. Implement reconnection logic in your client.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Historical Data Gaps
&lt;/h3&gt;

&lt;p&gt;If you need historical data, ensure you are using an archive node. Regular nodes may not have full history.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing the Right Composable RPC Setup
&lt;/h2&gt;

&lt;p&gt;Here is a decision matrix to help you choose:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Workload&lt;/th&gt;
&lt;th&gt;Recommended Setup&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Prototype / hackathon&lt;/td&gt;
&lt;td&gt;Public endpoint&lt;/td&gt;
&lt;td&gt;Free, quick to start&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Production dApp&lt;/td&gt;
&lt;td&gt;Authenticated endpoint&lt;/td&gt;
&lt;td&gt;Better limits, analytics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;High-throughput / indexing&lt;/td&gt;
&lt;td&gt;Dedicated node&lt;/td&gt;
&lt;td&gt;Isolated resources, custom config&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Historical queries&lt;/td&gt;
&lt;td&gt;Archive node&lt;/td&gt;
&lt;td&gt;Full chain history&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;OnFinality offers all these options, so you can start small and scale as needed. For pricing details, see &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC pricing&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Composable Finance is a cross-chain DeFi project, and its RPC endpoints vary by the underlying chain.&lt;/li&gt;
&lt;li&gt;Start with the public endpoint for testing, but move to authenticated or dedicated nodes for production.&lt;/li&gt;
&lt;li&gt;Use the correct JSON-RPC methods for the chain you are querying (Ethereum vs. Substrate).&lt;/li&gt;
&lt;li&gt;Dedicated nodes provide isolation, observability, and custom configuration for demanding workloads.&lt;/li&gt;
&lt;li&gt;OnFinality supports Composable Finance with public, authenticated, and dedicated node options.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is Composable RPC?
&lt;/h3&gt;

&lt;p&gt;Composable RPC refers to the Remote Procedure Call endpoints used to interact with the Composable Finance network. These endpoints allow developers to query chain data, submit transactions, and subscribe to events.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I get a Composable RPC endpoint?
&lt;/h3&gt;

&lt;p&gt;You can use the public endpoint from OnFinality's &lt;a href="https://onfinality.io/networks/composable" rel="noopener noreferrer"&gt;Composable network page&lt;/a&gt; for testing, or sign up for an API key to get authenticated endpoints.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is the public Composable RPC endpoint free?
&lt;/h3&gt;

&lt;p&gt;Yes, the public endpoint is free to use for testing and light usage. For production, consider authenticated endpoints or dedicated nodes.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the difference between public and dedicated nodes?
&lt;/h3&gt;

&lt;p&gt;Public nodes are shared and rate-limited, while dedicated nodes provide isolated resources, custom configuration, and better performance for production workloads.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does OnFinality support archive nodes for Composable?
&lt;/h3&gt;

&lt;p&gt;OnFinality offers archive node support for many networks. Check the &lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;supported networks&lt;/a&gt; page for the latest availability.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I choose between HTTP and WebSocket?
&lt;/h3&gt;

&lt;p&gt;Use HTTP for simple queries and WebSocket for real-time subscriptions, such as new block notifications or event listening.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use Composable RPC for Ethereum-based chains?
&lt;/h3&gt;

&lt;p&gt;Yes, if the chain is Ethereum-compatible, you can use standard &lt;code&gt;eth_*&lt;/code&gt; methods. For Substrate-based chains, use the appropriate Substrate methods.&lt;/p&gt;

&lt;h3&gt;
  
  
  What should I do if I get rate-limited?
&lt;/h3&gt;

&lt;p&gt;If you hit rate limits on the public endpoint, upgrade to an authenticated endpoint or a dedicated node to get higher limits and better performance.&lt;/p&gt;

&lt;p&gt;For more guidance on selecting an RPC provider, see our &lt;a href="https://onfinality.io/rpc-assistant/how-to-choose-an-rpc-provider" rel="noopener noreferrer"&gt;How to Choose an RPC Provider&lt;/a&gt; guide.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/networks/composable" rel="noopener noreferrer"&gt;Composable Finance Network Page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/rpc-assistant/how-to-choose-an-rpc-provider" rel="noopener noreferrer"&gt;How to Choose an RPC Provider&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/dedicated-node" rel="noopener noreferrer"&gt;Dedicated Nodes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC Pricing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;Supported Networks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Originally published at &lt;a href="https://onfinality.io/en/rpc-assistant/composable-rpc" rel="noopener noreferrer"&gt;OnFinality&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>web3</category>
      <category>blockchain</category>
      <category>devops</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Sonic Network RPC: Chain Settings, Endpoints &amp; Providers</title>
      <dc:creator>OnFinality</dc:creator>
      <pubDate>Mon, 24 Aug 2026 04:28:02 +0000</pubDate>
      <link>https://dev.to/onfinality/sonic-network-rpc-chain-settings-endpoints-providers-4l75</link>
      <guid>https://dev.to/onfinality/sonic-network-rpc-chain-settings-endpoints-providers-4l75</guid>
      <description>&lt;h2&gt;
  
  
  Quick decision guide: which Sonic RPC should you use?
&lt;/h2&gt;

&lt;p&gt;Before diving into the chain settings, decide which type of Sonic RPC fits your use case. The right choice depends on your workload, not just the lowest latency.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Prototyping or wallet setup&lt;/strong&gt;: Use the official public endpoint &lt;code&gt;https://rpc.soniclabs.com&lt;/code&gt; or the OnFinality public endpoint &lt;code&gt;https://sonic.api.onfinality.io/public&lt;/code&gt;. These are fine for testing, adding the network to a wallet, or low-volume requests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production dApp or indexer&lt;/strong&gt;: A managed RPC provider with a dedicated endpoint is safer. Public endpoints can throttle or rate-limit heavy usage, and they rarely offer archive data or WebSocket reliability guarantees.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High-throughput or data-heavy workloads&lt;/strong&gt;: If you need &lt;code&gt;eth_getLogs&lt;/code&gt; over large ranges, trace methods, or consistent WebSocket streams, consider a dedicated Sonic node. Dedicated nodes give you isolated resources and predictable performance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compliance or data retention&lt;/strong&gt;: If you need historical state or trace data, check whether the provider offers archive nodes. Not all Sonic RPC endpoints provide archive data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a deeper look at provider evaluation, see our &lt;a href="https://onfinality.io/rpc-assistant/how-to-choose-an-rpc-provider" rel="noopener noreferrer"&gt;guide on choosing an RPC provider&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sonic network at a glance
&lt;/h2&gt;

&lt;p&gt;Sonic is an EVM-compatible Layer-1 blockchain designed for high throughput and sub-second finality. It is the successor to Fantom and uses the S token for gas, staking, and governance. For developers, the key takeaway is that Sonic is fully EVM-compatible, so existing Ethereum tooling works with minimal changes.&lt;/p&gt;

&lt;p&gt;The official chain settings are:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setting&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Network name&lt;/td&gt;
&lt;td&gt;Sonic Mainnet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RPC URL&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://rpc.soniclabs.com&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chain ID&lt;/td&gt;
&lt;td&gt;146 (0x92)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Currency symbol&lt;/td&gt;
&lt;td&gt;S&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Block explorer&lt;/td&gt;
&lt;td&gt;&lt;a href="https://sonicscan.org" rel="noopener noreferrer"&gt;https://sonicscan.org&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These settings are what you need to add Sonic to a wallet or configure a dApp. The OnFinality public endpoint &lt;code&gt;https://sonic.api.onfinality.io/public&lt;/code&gt; is also available and can be used as an alternative.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adding Sonic to MetaMask or other wallets
&lt;/h2&gt;

&lt;p&gt;Most wallets let you add a custom network manually. The process is similar across MetaMask, Rabby, and other EVM wallets.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open your wallet and go to the network selection dropdown.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Add Network&lt;/strong&gt; or &lt;strong&gt;Add a network manually&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Enter the following details:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Network name&lt;/strong&gt;: Sonic&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;New RPC URL&lt;/strong&gt;: &lt;code&gt;https://rpc.soniclabs.com&lt;/code&gt; or &lt;code&gt;https://sonic.api.onfinality.io/public&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chain ID&lt;/strong&gt;: 146&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Currency symbol&lt;/strong&gt;: S&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Block explorer URL&lt;/strong&gt;: &lt;code&gt;https://sonicscan.org&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Save the network and switch to it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you are using a wallet that supports WalletConnect or chainlist, you can also use a one-click add. However, manually entering the details ensures you control which RPC endpoint you use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connecting a dApp with ethers or viem
&lt;/h2&gt;

&lt;p&gt;For developers, connecting to Sonic is straightforward. Here is an example using ethers.js:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ethers&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ethers&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;ethers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;JsonRpcProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://sonic.api.onfinality.io/public&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;network&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getNetwork&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Chain ID:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;network&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;chainId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 146&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;blockNumber&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getBlockNumber&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Latest block:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;blockNumber&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With viem:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createPublicClient&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;http&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;viem&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createPublicClient&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;chain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;146&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sonic&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;nativeCurrency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sonic&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;S&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;decimals&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;rpcUrls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://sonic.api.onfinality.io/public&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;transport&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;http&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;blockNumber&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getBlockNumber&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Latest block:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;blockNumber&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Making JSON-RPC calls with curl
&lt;/h2&gt;

&lt;p&gt;If you are debugging or testing, a simple curl request can verify connectivity:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://sonic.api.onfinality.io/public &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--data&lt;/span&gt; &lt;span class="s1"&gt;'{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A successful response returns the latest block number in hexadecimal format.&lt;/p&gt;

&lt;h2&gt;
  
  
  WebSocket support and real-time data
&lt;/h2&gt;

&lt;p&gt;For applications that need real-time updates, such as transaction monitoring or order books, WebSocket endpoints are essential. The official Sonic RPC supports WebSocket, and many providers offer WSS endpoints.&lt;/p&gt;

&lt;p&gt;A WebSocket subscription example using viem:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createPublicClient&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;webSocket&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;viem&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createPublicClient&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;chain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;146&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sonic&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;nativeCurrency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sonic&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;S&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;decimals&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;rpcUrls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;webSocket&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;wss://sonic-rpc.publicnode.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;transport&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;webSocket&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;unwatch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;watchBlockNumber&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;onBlockNumber&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;blockNumber&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;New block:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;blockNumber&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note that public WebSocket endpoints may have connection limits. For production, a dedicated WebSocket endpoint is recommended.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sonic RPC provider comparison
&lt;/h2&gt;

&lt;p&gt;When evaluating Sonic RPC providers, consider the following criteria. The table below compares typical offerings, but always verify current details on each provider's site.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Endpoint type&lt;/th&gt;
&lt;th&gt;Archive data&lt;/th&gt;
&lt;th&gt;WebSocket&lt;/th&gt;
&lt;th&gt;Dedicated nodes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OnFinality&lt;/td&gt;
&lt;td&gt;Public, managed, dedicated&lt;/td&gt;
&lt;td&gt;Yes (on request)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;dRPC&lt;/td&gt;
&lt;td&gt;Public, premium&lt;/td&gt;
&lt;td&gt;Yes (premium)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dwellir&lt;/td&gt;
&lt;td&gt;Public, dedicated&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ankr&lt;/td&gt;
&lt;td&gt;Public, premium&lt;/td&gt;
&lt;td&gt;Yes (premium)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;OnFinality offers both a public endpoint and dedicated Sonic nodes. Dedicated nodes give you isolated resources, which is important for high-throughput applications. You can see the full list of supported networks on our &lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;networks page&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to choose a dedicated Sonic node
&lt;/h2&gt;

&lt;p&gt;A dedicated node is a single-tenant RPC endpoint that is not shared with other users. This is useful when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your application generates a high volume of requests and you need consistent performance.&lt;/li&gt;
&lt;li&gt;You need archive data or trace methods that are not available on public endpoints.&lt;/li&gt;
&lt;li&gt;You want to avoid rate limits and throttling.&lt;/li&gt;
&lt;li&gt;You need a private WebSocket endpoint for real-time data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;OnFinality's &lt;a href="https://onfinality.io/dedicated-node" rel="noopener noreferrer"&gt;dedicated node service&lt;/a&gt; provides Sonic nodes with isolated resources. You can choose the node size and configuration that matches your workload.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common pitfalls and troubleshooting
&lt;/h2&gt;

&lt;p&gt;Even with the right endpoint, you may run into issues. Here are common problems and how to fix them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Wrong chain ID&lt;/strong&gt;: Ensure your wallet or dApp uses chain ID 146. A mismatch causes transaction signing errors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate limiting&lt;/strong&gt;: Public endpoints often limit requests per second. If you hit limits, switch to a managed or dedicated endpoint.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Missing archive data&lt;/strong&gt;: Some RPC methods like &lt;code&gt;eth_getLogs&lt;/code&gt; with large ranges require archive nodes. If you get errors, check if your provider offers archive data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WebSocket disconnects&lt;/strong&gt;: Public WebSocket endpoints may drop connections. Use a dedicated WebSocket endpoint for production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Block explorer discrepancies&lt;/strong&gt;: If the explorer shows a different block height than your RPC, it may be a sync issue. Verify with multiple sources.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Monitoring your Sonic RPC health
&lt;/h2&gt;

&lt;p&gt;To ensure your application stays healthy, monitor your RPC endpoint. A simple health check script can alert you to issues:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;

&lt;span class="nv"&gt;RPC_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"https://sonic.api.onfinality.io/public"&lt;/span&gt;

&lt;span class="nv"&gt;response&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="nv"&gt;$RPC_URL&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--data&lt;/span&gt; &lt;span class="s1"&gt;'{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$response&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-q&lt;/span&gt; &lt;span class="s2"&gt;"result"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
  &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"RPC is healthy"&lt;/span&gt;
&lt;span class="k"&gt;else
  &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"RPC is down"&lt;/span&gt;
&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For production, consider using a monitoring service that tracks latency, error rates, and block height lag.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Sonic is an EVM Layer-1 with chain ID 146 and the S token.&lt;/li&gt;
&lt;li&gt;The official RPC is &lt;code&gt;https://rpc.soniclabs.com&lt;/code&gt;; OnFinality also provides a public endpoint at &lt;code&gt;https://sonic.api.onfinality.io/public&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;For production, evaluate managed or dedicated RPC providers to avoid rate limits and get archive data.&lt;/li&gt;
&lt;li&gt;Dedicated Sonic nodes are ideal for high-throughput or data-heavy workloads.&lt;/li&gt;
&lt;li&gt;Always monitor your RPC endpoint health to ensure reliability.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is the Sonic network RPC URL?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The official Sonic mainnet RPC URL is &lt;code&gt;https://rpc.soniclabs.com&lt;/code&gt;. OnFinality also provides a public endpoint at &lt;code&gt;https://sonic.api.onfinality.io/public&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the Sonic chain ID?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Sonic mainnet chain ID is 146 (0x92).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does Sonic support WebSocket?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes, Sonic supports WebSocket RPC. Public WSS endpoints are available, but for production, a dedicated WebSocket endpoint is recommended.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I use Sonic with MetaMask?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes, you can add Sonic as a custom network in MetaMask using the chain settings above.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does OnFinality offer Sonic RPC?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes, OnFinality provides a public Sonic endpoint and dedicated Sonic nodes. See our &lt;a href="https://onfinality.io/networks/sonic" rel="noopener noreferrer"&gt;Sonic network page&lt;/a&gt; for details.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the Sonic block explorer?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The official Sonic block explorer is &lt;a href="https://sonicscan.org" rel="noopener noreferrer"&gt;https://sonicscan.org&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is Sonic an EVM-compatible chain?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes, Sonic is fully EVM-compatible, so you can deploy Ethereum smart contracts without modification.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I get Sonic testnet tokens?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sonic testnet is separate from mainnet. You can get testnet tokens from the Sonic faucet, which is available in the Sonic documentation.&lt;/p&gt;

&lt;p&gt;For more information on RPC pricing and supported networks, visit our &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC pricing page&lt;/a&gt; and &lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;networks page&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/networks/sonic" rel="noopener noreferrer"&gt;Sonic Network Page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC Pricing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;Supported RPC Networks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Originally published at &lt;a href="https://onfinality.io/en/rpc-assistant/sonic-network-rpc" rel="noopener noreferrer"&gt;OnFinality&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>web3</category>
      <category>blockchain</category>
      <category>devops</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Polygon MATIC API: RPC, SDKs, and Endpoints</title>
      <dc:creator>OnFinality</dc:creator>
      <pubDate>Mon, 24 Aug 2026 04:27:29 +0000</pubDate>
      <link>https://dev.to/onfinality/polygon-matic-api-rpc-sdks-and-endpoints-5fpo</link>
      <guid>https://dev.to/onfinality/polygon-matic-api-rpc-sdks-and-endpoints-5fpo</guid>
      <description>&lt;h2&gt;
  
  
  Quick Decision Guide: Which Polygon API Do You Need?
&lt;/h2&gt;

&lt;p&gt;Before diving into endpoints and SDKs, it helps to map the Polygon API landscape. The term "Polygon MATIC API" can mean several different things, and picking the wrong one wastes engineering time.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;If you need to...&lt;/th&gt;
&lt;th&gt;Use this&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Read balances, send transactions, call contracts&lt;/td&gt;
&lt;td&gt;JSON-RPC endpoint&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;eth_getBalance&lt;/code&gt;, &lt;code&gt;eth_sendRawTransaction&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interact with the Polygon bridge (legacy)&lt;/td&gt;
&lt;td&gt;Matic.js SDK&lt;/td&gt;
&lt;td&gt;&lt;code&gt;posClient.erc20(...)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Query historical balances, token holders, or complex analytics&lt;/td&gt;
&lt;td&gt;Indexing API (e.g., Bitquery)&lt;/td&gt;
&lt;td&gt;GraphQL query for balances&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Move stablecoins or build payment flows&lt;/td&gt;
&lt;td&gt;Payments API (e.g., Chaingateway)&lt;/td&gt;
&lt;td&gt;REST call to send USDC&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;For most dApp developers&lt;/strong&gt;, the raw JSON-RPC endpoint is the foundation. It gives you full control and works with any Ethereum tooling (ethers, viem, web3.js). If you need indexed data or payment-specific features, you'll add a specialized API on top.&lt;/p&gt;

&lt;p&gt;If you're building a production app, you'll want a reliable RPC provider. OnFinality offers &lt;a href="https://onfinality.io/networks/polygon" rel="noopener noreferrer"&gt;managed Polygon RPC endpoints&lt;/a&gt; with HTTP and WebSocket support, and you can &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;compare pricing&lt;/a&gt; to see if a dedicated node fits your workload.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is the Polygon MATIC API?
&lt;/h2&gt;

&lt;p&gt;Polygon (formerly Matic Network) is an Ethereum-compatible proof-of-stake chain. The "Polygon MATIC API" generally refers to the interfaces for interacting with this chain. The core is the &lt;strong&gt;JSON-RPC API&lt;/strong&gt;, which is identical to Ethereum's, so any Ethereum library works out of the box.&lt;/p&gt;

&lt;p&gt;Historically, MATIC was the native token used for gas. After the POL upgrade, &lt;strong&gt;POL&lt;/strong&gt; is now the native token, but many docs and tools still reference MATIC. The API itself is unchanged—you're still sending transactions and querying state.&lt;/p&gt;

&lt;p&gt;There are also higher-level APIs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Matic.js&lt;/strong&gt;: a legacy SDK for interacting with the Polygon bridge contracts. It's still in the docs but is being phased out.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Indexing APIs&lt;/strong&gt;: services like Bitquery that provide GraphQL or REST endpoints for historical data, token balances, and analytics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Payments APIs&lt;/strong&gt;: services like Chaingateway that abstract away node management and provide webhooks for deposits.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Polygon Chain Settings at a Glance
&lt;/h2&gt;

&lt;p&gt;When configuring your app, you need the correct chain ID and RPC URL. Here are the official settings for Polygon mainnet:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Chain ID&lt;/td&gt;
&lt;td&gt;137&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Native currency&lt;/td&gt;
&lt;td&gt;POL (formerly MATIC)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Symbol&lt;/td&gt;
&lt;td&gt;POL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Decimals&lt;/td&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Block explorer&lt;/td&gt;
&lt;td&gt;&lt;a href="https://polygonscan.com" rel="noopener noreferrer"&gt;https://polygonscan.com&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Public RPC URL&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://polygon.api.onfinality.io/public&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WebSocket support&lt;/td&gt;
&lt;td&gt;Yes (via OnFinality)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For testnet, the &lt;strong&gt;Polygon Amoy&lt;/strong&gt; testnet uses chain ID 80002 and the public RPC URL &lt;code&gt;https://polygon-amoy.api.onfinality.io/public&lt;/code&gt;. You can find more details on the &lt;a href="https://onfinality.io/networks/polygon" rel="noopener noreferrer"&gt;Polygon network page&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Connect to Polygon with JSON-RPC
&lt;/h2&gt;

&lt;p&gt;You can use any Ethereum-compatible library. Here's an example using ethers.js to read a balance and send a transaction:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ethers&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ethers&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;ethers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;JsonRpcProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://polygon.api.onfinality.io/public&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getBalance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;balance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getBalance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;address&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Balance: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;ethers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;formatEther&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;balance&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt; POL`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;sendTransaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;signer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;signer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sendTransaction&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ethers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parseEther&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;wait&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Tx hash: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;tx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For raw JSON-RPC calls, you can use curl:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://polygon.api.onfinality.io/public &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This returns the latest block number, confirming your endpoint is live.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using Matic.js for Bridge Operations
&lt;/h2&gt;

&lt;p&gt;Matic.js is the legacy SDK for interacting with the Polygon bridge. It's still documented, but Polygon Labs recommends newer alternatives for moving money. If you're maintaining existing code, here's a quick example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;POSClient&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;use&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@maticnetwork/maticjs&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Web3ClientPlugin&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@maticnetwork/maticjs-web3&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;HDWalletProvider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@truffle/hdwallet-provider&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Web3ClientPlugin&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;posClient&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;POSClient&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;posClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;network&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;mainnet&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;v1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;parent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;HDWalletProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;privateKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://ethereum-rpc.example.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="na"&gt;defaultConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;userAddress&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;child&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;HDWalletProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;privateKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://polygon.api.onfinality.io/public&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="na"&gt;defaultConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;userAddress&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;erc20&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;posClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;erc20&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;token-address&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;balance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;erc20&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getBalance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;userAddress&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note that Matic.js is deprecated for new projects. For modern bridge interactions, consider using the official Polygon bridge UI or a payments API.&lt;/p&gt;

&lt;h2&gt;
  
  
  Indexing APIs for Balances and History
&lt;/h2&gt;

&lt;p&gt;If you need to query historical balances or token holders, an indexing API like Bitquery can be more efficient than scanning blocks yourself. For example, to get the native POL balance of an address:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight graphql"&gt;&lt;code&gt;&lt;span class="k"&gt;query&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;EVM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;network&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;matic&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;combined&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="n"&gt;Balances&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="n"&gt;where&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="n"&gt;Balance&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="n"&gt;Address&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;is&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0x..."&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="n"&gt;Currency&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Symbol&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="n"&gt;Balance&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Amount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These APIs are useful for analytics dashboards, audit trails, and wallet apps. They typically require an API key and have usage limits.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing Between Public, Managed, and Dedicated RPC
&lt;/h2&gt;

&lt;p&gt;For production apps, the public endpoint is not reliable enough. You have three main options:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;Pros&lt;/th&gt;
&lt;th&gt;Cons&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Public RPC&lt;/td&gt;
&lt;td&gt;Free, no signup&lt;/td&gt;
&lt;td&gt;Rate limits, unreliable, no SLA&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Managed RPC (e.g., OnFinality)&lt;/td&gt;
&lt;td&gt;Reliable, scalable, WebSocket support, free tier&lt;/td&gt;
&lt;td&gt;Requires API key, usage-based pricing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dedicated node&lt;/td&gt;
&lt;td&gt;Full control, no shared limits, archive data&lt;/td&gt;
&lt;td&gt;Higher cost, requires maintenance&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;OnFinality provides &lt;a href="https://onfinality.io/networks/polygon" rel="noopener noreferrer"&gt;managed Polygon RPC&lt;/a&gt; that handles infrastructure concerns like load balancing and failover. For high-throughput or archive needs, a &lt;a href="https://onfinality.io/dedicated-node" rel="noopener noreferrer"&gt;dedicated node&lt;/a&gt; might be worth the cost.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Pitfalls and Troubleshooting
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Chain ID mismatch&lt;/strong&gt;: Ensure your wallet uses chain ID 137 for mainnet, not 80001 (old Mumbai testnet) or 80002 (Amoy).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate limiting&lt;/strong&gt;: Public endpoints often throttle. If you see &lt;code&gt;429&lt;/code&gt; errors, switch to a managed provider.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WebSocket disconnects&lt;/strong&gt;: For real-time updates, use WebSocket but implement reconnection logic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MATIC vs POL&lt;/strong&gt;: Some tools still expect MATIC. Check your library's documentation for the correct symbol.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The Polygon MATIC API is primarily JSON-RPC, compatible with Ethereum tools.&lt;/li&gt;
&lt;li&gt;Choose the right API layer: raw RPC for control, indexing APIs for analytics, payments APIs for stablecoin flows.&lt;/li&gt;
&lt;li&gt;Use the correct chain ID (137) and a reliable RPC provider for production.&lt;/li&gt;
&lt;li&gt;OnFinality offers &lt;a href="https://onfinality.io/networks/polygon" rel="noopener noreferrer"&gt;managed Polygon RPC&lt;/a&gt; with HTTP and WebSocket support.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is the difference between MATIC and POL?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;MATIC was the original native token. In 2024, Polygon upgraded to POL, which now serves as the gas token and staking token. The API and chain ID remain the same.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I use Ethereum libraries with Polygon?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes, Polygon is EVM-compatible, so ethers.js, viem, and web3.js work without modification. Just point them to a Polygon RPC endpoint.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is the public Polygon RPC endpoint free?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes, the public endpoint &lt;code&gt;https://polygon.api.onfinality.io/public&lt;/code&gt; is free to use, but it has rate limits. For production, consider a &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;managed RPC plan&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I get testnet POL for Amoy?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can use the Amoy faucet, which is linked from the &lt;a href="https://onfinality.io/networks/polygon" rel="noopener noreferrer"&gt;Polygon network page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is Matic.js used for?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Matic.js is a legacy SDK for interacting with the Polygon bridge. It's deprecated for new projects, but existing code may still use it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does OnFinality support WebSocket for Polygon?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes, OnFinality's Polygon endpoint supports both HTTP and WebSocket. Check the &lt;a href="https://onfinality.io/networks/polygon" rel="noopener noreferrer"&gt;network page&lt;/a&gt; for details.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I choose between a managed RPC and a dedicated node?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you need high throughput, archive data, or custom configuration, a dedicated node may be better. For most apps, a managed RPC offers a good balance of cost and reliability. See our &lt;a href="https://onfinality.io/rpc-assistant/how-to-choose-an-rpc-provider" rel="noopener noreferrer"&gt;RPC provider selection guide&lt;/a&gt; for more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What are the rate limits for the public endpoint?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Public endpoints are subject to rate limits to ensure fair usage. For higher limits, sign up for a free API key on OnFinality.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I use Polygon with viem?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes, viem supports Polygon out of the box. You can create a client with &lt;code&gt;createPublicClient({ chain: polygon, transport: http("https://polygon.api.onfinality.io/public") })&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where can I find the full list of supported networks?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Visit the &lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;supported networks page&lt;/a&gt; to see all chains OnFinality supports.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/networks/polygon" rel="noopener noreferrer"&gt;Polygon RPC Endpoints&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC Pricing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;Supported Networks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Originally published at &lt;a href="https://onfinality.io/en/rpc-assistant/polygon-matic-api" rel="noopener noreferrer"&gt;OnFinality&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>web3</category>
      <category>blockchain</category>
      <category>devops</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Crust Network Staking: GPoS, Validators, and RPC Monitoring</title>
      <dc:creator>OnFinality</dc:creator>
      <pubDate>Mon, 24 Aug 2026 04:26:57 +0000</pubDate>
      <link>https://dev.to/onfinality/crust-network-staking-gpos-validators-and-rpc-monitoring-d16</link>
      <guid>https://dev.to/onfinality/crust-network-staking-gpos-validators-and-rpc-monitoring-d16</guid>
      <description>&lt;h2&gt;
  
  
  Quick decision guide: what to check before staking CRU
&lt;/h2&gt;

&lt;p&gt;Before you stake CRU, you need to decide whether you want to run a validator, become a guarantor, or simply delegate to an existing validator. Each role has different requirements and risk profiles. Use this checklist to evaluate your options:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Decision point&lt;/th&gt;
&lt;th&gt;What to check&lt;/th&gt;
&lt;th&gt;Why it matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Role&lt;/td&gt;
&lt;td&gt;Validator, guarantor, or nominator&lt;/td&gt;
&lt;td&gt;Validators need storage resources and a node; guarantors only stake CRU to back a validator&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Validator reputation&lt;/td&gt;
&lt;td&gt;Historical rewards, commission, era points&lt;/td&gt;
&lt;td&gt;Low commission and consistent block production indicate reliability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Staking limits&lt;/td&gt;
&lt;td&gt;Minimum stake, upper limit per validator&lt;/td&gt;
&lt;td&gt;Crust has a staking upper limit of 1000 CRU per validator; exceeding it may reduce rewards&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lock-up and unbonding&lt;/td&gt;
&lt;td&gt;Unbonding period and conditions&lt;/td&gt;
&lt;td&gt;You cannot withdraw immediately; plan your liquidity needs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RPC access&lt;/td&gt;
&lt;td&gt;Reliable endpoint for monitoring and transactions&lt;/td&gt;
&lt;td&gt;A stable RPC provider helps you track rewards and submit extrinsics without downtime&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If you are building an application that needs to read staking data or submit staking transactions, you will need a reliable Crust RPC endpoint. OnFinality offers &lt;a href="https://onfinality.io/networks/crust" rel="noopener noreferrer"&gt;Crust RPC services&lt;/a&gt; that can support your staking workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Crust Network staking?
&lt;/h2&gt;

&lt;p&gt;Crust Network is a Substrate-based layer-1 blockchain that provides decentralized storage over IPFS. Its consensus mechanism, GPoS (Guaranteed Proof of Stake), is a proof-of-stake algorithm that defines staking power based on storage resources. In GPoS, validators and candidates are elected based on their effective stake, which is a combination of their own staked CRU and the CRU staked by guarantors. This design aligns economic incentives with the network's storage capacity.&lt;/p&gt;

&lt;p&gt;Staking on Crust involves locking CRU tokens to support the network's security and, in return, earning rewards. There are two main roles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Validators&lt;/strong&gt;: Run nodes that produce blocks and validate transactions. They need to provide storage resources and stake CRU. Validators earn authoring rewards (for block production) and staking rewards.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Guarantors&lt;/strong&gt;: Stake CRU to back a specific validator. They do not run nodes but share in the validator's staking rewards (minus commission). Guarantors are essential for increasing a validator's effective stake and helping them get elected.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How GPoS works: staking power tied to storage
&lt;/h2&gt;

&lt;p&gt;GPoS is designed to bind staking quotas to storage resources. The network uses two layers:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;MPoW (Meaningful Proof of Work)&lt;/strong&gt;: Storage nodes report their storage workload, which is verified using TEE (Trusted Execution Environment). This provides a verifiable measure of how much storage a node contributes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPoS&lt;/strong&gt;: Based on the workload report, each node gets a staking quota. The quota determines how much CRU can be staked to that node and its influence in the consensus process.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In practice, this means that a validator's effective stake is not just the CRU they own but also the CRU that guarantors delegate to them. The more storage a node provides, the higher its staking quota, and the more CRU it can attract. This creates a market where validators compete for guarantors' CRU by offering competitive commissions and reliable performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Staking rewards and slashing: what to expect
&lt;/h2&gt;

&lt;p&gt;Validators earn two types of rewards:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Authoring rewards&lt;/strong&gt;: Earned by validators who produce blocks. The amount depends on the number of blocks produced and the validator's points.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Staking rewards&lt;/strong&gt;: Earned by validators and candidates based on their effective stake. Guarantors receive a share of these rewards proportional to their stake, minus the validator's commission.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rewards are distributed each era (approximately 6 hours on Crust mainnet). The total reward pool decreases over time according to the economic whitepaper.&lt;/p&gt;

&lt;p&gt;Slashing is a risk in any PoS network. If a validator misbehaves (e.g., goes offline or acts maliciously), a portion of the staked CRU may be slashed. Guarantors should be aware that they share this risk with the validator they back. Always research a validator's track record before staking.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to stake CRU: step-by-step
&lt;/h2&gt;

&lt;p&gt;Staking on Crust can be done through the official Crust Apps UI or via the Substrate API. Here is a general workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Get CRU tokens&lt;/strong&gt;: You need CRU to stake. You can obtain it from exchanges or through other means.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Choose a validator&lt;/strong&gt;: Evaluate validators based on commission, era points, and total stake. You can use the Crust Apps UI to browse validators.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bond your CRU&lt;/strong&gt;: Use the staking pallet to bond your CRU. This locks your tokens for staking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nominate or guarantee&lt;/strong&gt;: If you are a guarantor, you need to select a validator to back. This is done by nominating a validator (in Substrate terms) or using the guarantee mechanism.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor your rewards&lt;/strong&gt;: Check your rewards regularly and adjust your strategy if needed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For developers who want to automate staking operations, you can use the Substrate RPC API. Here is an example of how to query staking information using a Crust RPC endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"id":1,"jsonrpc":"2.0","method":"state_getStorage","params":["0x..."]}'&lt;/span&gt; https://crust-rpc.onfinality.io
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace the storage key with the appropriate key for the staking module. You can find the storage keys in the Crust chain metadata.&lt;/p&gt;

&lt;h2&gt;
  
  
  Monitoring your stake with RPC
&lt;/h2&gt;

&lt;p&gt;To keep track of your staking rewards and validator performance, you can query the chain via RPC. Common RPC methods include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;state_getStorage&lt;/code&gt; to read staking storage items&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;chain_getBlock&lt;/code&gt; to inspect recent blocks&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;system_health&lt;/code&gt; to check node health&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, to get the current era and staking info, you might use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"id":1,"jsonrpc":"2.0","method":"state_getStorage","params":["0x..."]}'&lt;/span&gt; https://crust-rpc.onfinality.io
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using a reliable RPC provider like OnFinality ensures that your monitoring scripts have consistent access to the network. OnFinality provides &lt;a href="https://onfinality.io/networks/crust" rel="noopener noreferrer"&gt;Crust RPC endpoints&lt;/a&gt; that you can use for both mainnet and testnet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common pitfalls and troubleshooting
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Staking upper limit&lt;/strong&gt;: Each validator has a staking upper limit (1000 CRU). If a validator reaches this limit, additional stake may not earn rewards. Check the validator's current stake before bonding.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unbonding period&lt;/strong&gt;: When you unbond your CRU, there is a waiting period before you can withdraw. Plan accordingly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RPC endpoint reliability&lt;/strong&gt;: Public RPC endpoints can be rate-limited or unavailable. For production applications, consider using a dedicated RPC service to avoid interruptions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validator offline&lt;/strong&gt;: If your validator goes offline, you may miss rewards. Monitor your validator's era points and consider switching if performance drops.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Crust Network uses GPoS, a proof-of-stake mechanism that ties staking power to storage resources.&lt;/li&gt;
&lt;li&gt;Staking involves validators and guarantors; guarantors stake CRU to back validators and share rewards.&lt;/li&gt;
&lt;li&gt;Before staking, evaluate validator reputation, commission, and staking limits.&lt;/li&gt;
&lt;li&gt;Use a reliable RPC provider to monitor your stake and submit transactions.&lt;/li&gt;
&lt;li&gt;OnFinality offers &lt;a href="https://onfinality.io/networks/crust" rel="noopener noreferrer"&gt;Crust RPC services&lt;/a&gt; that can support your staking workflow.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is the minimum amount to stake on Crust?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The minimum stake can vary. Check the Crust Wiki or the staking UI for current requirements. Typically, you need enough CRU to cover the existential deposit and any minimum stake thresholds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I stake CRU from an exchange?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most exchanges do not support Crust staking directly. You will need to withdraw CRU to a wallet that supports staking, such as the Crust Wallet or a Substrate-based wallet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the unbonding period on Crust?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The unbonding period is typically 7 days on Crust mainnet, but it can change. Check the network parameters for the exact duration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I choose a good validator?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Look for validators with low commission, high era points, and a good track record. You can also check their total stake and whether they are close to the staking upper limit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I use OnFinality's RPC for Crust staking?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes, OnFinality provides &lt;a href="https://onfinality.io/networks/crust" rel="noopener noreferrer"&gt;Crust RPC endpoints&lt;/a&gt; that you can use to interact with the Crust network, including staking operations. For production use, consider a &lt;a href="https://onfinality.io/dedicated-node" rel="noopener noreferrer"&gt;dedicated node&lt;/a&gt; for higher reliability.&lt;/p&gt;

&lt;p&gt;For more information about RPC providers and how to choose one, see our &lt;a href="https://onfinality.io/rpc-assistant/how-to-choose-an-rpc-provider" rel="noopener noreferrer"&gt;guide on choosing an RPC provider&lt;/a&gt;. You can also explore all &lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;supported networks&lt;/a&gt; and &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC pricing&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/networks/crust" rel="noopener noreferrer"&gt;Crust Network RPC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC Pricing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;Supported Networks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Originally published at &lt;a href="https://onfinality.io/en/rpc-assistant/crust-network-staking" rel="noopener noreferrer"&gt;OnFinality&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>web3</category>
      <category>blockchain</category>
      <category>devops</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Acala RPC Endpoints: Chain Settings, EVM+ &amp; Dedicated Nodes</title>
      <dc:creator>OnFinality</dc:creator>
      <pubDate>Mon, 24 Aug 2026 04:26:24 +0000</pubDate>
      <link>https://dev.to/onfinality/acala-rpc-endpoints-chain-settings-evm-dedicated-nodes-5ih</link>
      <guid>https://dev.to/onfinality/acala-rpc-endpoints-chain-settings-evm-dedicated-nodes-5ih</guid>
      <description>&lt;h2&gt;
  
  
  Quick Decision Guide: Which Acala RPC Setup Should You Use?
&lt;/h2&gt;

&lt;p&gt;Before diving into endpoint lists, decide what your workload actually needs. The right Acala RPC setup depends on your stage and traffic pattern:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Prototyping or light testing&lt;/strong&gt;: Use the public Acala RPC endpoint for quick checks, script debugging, and initial integration tests. It is fine for low-volume requests and does not require an API key.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production dApp or backend service&lt;/strong&gt;: Move to an authenticated endpoint. You get clearer rate limits, analytics, and operational visibility, which helps you plan capacity and avoid surprise throttling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High-throughput, archive, or custom node needs&lt;/strong&gt;: Consider a dedicated Acala node. This gives you isolated resources, the ability to run archive nodes, and control over node configuration—important for collators, indexers, or applications that need consistent performance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are unsure, start with the public endpoint, measure your request volume, and then upgrade to authenticated or dedicated infrastructure as your traffic grows. For a deeper comparison of RPC providers, see our &lt;a href="https://onfinality.io/rpc-assistant/how-to-choose-an-rpc-provider" rel="noopener noreferrer"&gt;guide on choosing an RPC provider&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Acala at a Glance: Substrate and EVM+ in One Network
&lt;/h2&gt;

&lt;p&gt;Acala is a Polkadot parachain built for DeFi. It provides a full Substrate runtime with pallets for stablecoins, liquid staking, and DEX functionality. On top of that, Acala offers an EVM+ environment, which is compatible with Ethereum tooling while still allowing access to Substrate-specific features.&lt;/p&gt;

&lt;p&gt;This dual nature means that when you search for "Acala RPC", you are likely looking for one of two things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Substrate RPC endpoints&lt;/strong&gt; for querying chain state, submitting transactions, or interacting with Acala's custom pallets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EVM RPC endpoints&lt;/strong&gt; for deploying and interacting with Solidity smart contracts using tools like MetaMask, ethers.js, or viem.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Both are important, and the endpoint you choose depends on the type of application you are building.&lt;/p&gt;

&lt;h2&gt;
  
  
  Acala Chain Settings at a Glance
&lt;/h2&gt;

&lt;p&gt;If you are connecting a wallet or an EVM-based tool, you need the correct chain configuration. Here are the key settings for Acala Mainnet:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setting&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Network Name&lt;/td&gt;
&lt;td&gt;Acala&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chain ID&lt;/td&gt;
&lt;td&gt;787 (0x313)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Currency Symbol&lt;/td&gt;
&lt;td&gt;ACA&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Block Explorer&lt;/td&gt;
&lt;td&gt;&lt;a href="https://blockscout.acala.network" rel="noopener noreferrer"&gt;https://blockscout.acala.network&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RPC URL (HTTPS)&lt;/td&gt;
&lt;td&gt;&lt;a href="https://eth-rpc-acala.aca-api.network" rel="noopener noreferrer"&gt;https://eth-rpc-acala.aca-api.network&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RPC URL (WSS)&lt;/td&gt;
&lt;td&gt;wss://eth-rpc-acala.aca-api.network&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These settings are commonly listed on chain registries like ChainList. Always verify the chain ID and RPC URL with the official Acala documentation before connecting your wallet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Acala RPC Endpoint Options
&lt;/h2&gt;

&lt;p&gt;Acala offers several public RPC endpoints, each with different characteristics. Here is a summary of what you will commonly find:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Endpoint (HTTPS)&lt;/th&gt;
&lt;th&gt;Endpoint (WSS)&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Acala Foundation&lt;/td&gt;
&lt;td&gt;&lt;a href="https://acala-rpc.aca-api.network" rel="noopener noreferrer"&gt;https://acala-rpc.aca-api.network&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;wss://acala-rpc.aca-api.network&lt;/td&gt;
&lt;td&gt;Official endpoint, may have rate limits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dwellir&lt;/td&gt;
&lt;td&gt;&lt;a href="https://acala-rpc.n.dwellir.com" rel="noopener noreferrer"&gt;https://acala-rpc.n.dwellir.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;wss://acala-rpc.n.dwellir.com&lt;/td&gt;
&lt;td&gt;Independent provider&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LuckyFriday&lt;/td&gt;
&lt;td&gt;&lt;a href="https://rpc-acala.luckyfriday.io" rel="noopener noreferrer"&gt;https://rpc-acala.luckyfriday.io&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;wss://rpc-acala.luckyfriday.io&lt;/td&gt;
&lt;td&gt;Community provider&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OnFinality&lt;/td&gt;
&lt;td&gt;&lt;a href="https://acala-polkadot.api.onfinality.io/public" rel="noopener noreferrer"&gt;https://acala-polkadot.api.onfinality.io/public&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;wss://acala-polkadot.api.onfinality.io/public-ws&lt;/td&gt;
&lt;td&gt;Public endpoint for testing; authenticated access for production&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Public endpoints are shared and can be rate-limited or experience downtime. For production applications, you should use an authenticated endpoint or a dedicated node.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Connecting to Acala EVM+ with MetaMask
&lt;/h2&gt;

&lt;p&gt;If you are building a dApp that uses the EVM+ side of Acala, you can add Acala as a custom network in MetaMask. Here is a sample configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"chainId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0x313"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"chainName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Acala"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"nativeCurrency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Acala"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"symbol"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ACA"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"decimals"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"rpcUrls"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"https://eth-rpc-acala.aca-api.network"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"blockExplorerUrls"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"https://blockscout.acala.network"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also use the &lt;code&gt;window.ethereum.request&lt;/code&gt; method to programmatically add the network:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ethereum&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;request&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;wallet_addEthereumChain&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;params&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;
    &lt;span class="na"&gt;chainId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0x313&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;chainName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Acala&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;nativeCurrency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Acala&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ACA&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;decimals&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;rpcUrls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://eth-rpc-acala.aca-api.network&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;blockExplorerUrls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://blockscout.acala.network&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="p"&gt;}]&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Using Acala RPC with ethers.js or viem
&lt;/h2&gt;

&lt;p&gt;For EVM+ development, you can use standard Ethereum libraries. Here is an example using ethers.js:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ethers&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ethers&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;ethers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;JsonRpcProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://eth-rpc-acala.aca-api.network&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;blockNumber&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getBlockNumber&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Acala block number:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;blockNumber&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And with viem:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createPublicClient&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;http&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;viem&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createPublicClient&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;chain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;787&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Acala&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;network&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;acala&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;nativeCurrency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Acala&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;symbol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ACA&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;decimals&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;rpcUrls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;default&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://eth-rpc-acala.aca-api.network&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;transport&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;http&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;blockNumber&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getBlockNumber&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Acala block number:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;blockNumber&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Substrate RPC: Querying Chain State
&lt;/h2&gt;

&lt;p&gt;For Substrate-specific operations, you can use the JSON-RPC interface directly. Here is a curl example to get the latest finalized head:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"id":1,"jsonrpc":"2.0","method":"chain_getFinalizedHead","params":[]}'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  https://acala-polkadot.api.onfinality.io/public
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also subscribe to new blocks using WebSocket:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;WebSocket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ws&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ws&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;WebSocket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;wss://acala-polkadot.api.onfinality.io/public-ws&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;ws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;open&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;ws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;jsonrpc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2.0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;chain_subscribeNewHeads&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;params&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
  &lt;span class="p"&gt;}));&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;ws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;message&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;New head:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Acala RPC Methods and Limits
&lt;/h2&gt;

&lt;p&gt;Acala RPC endpoints support standard Substrate and Ethereum JSON-RPC methods. Common methods include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;chain_getBlock&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;chain_getFinalizedHead&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;state_getStorage&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;eth_blockNumber&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;eth_getBalance&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;eth_call&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Public endpoints often have rate limits to protect the infrastructure. If you need higher throughput or more consistent performance, consider an authenticated endpoint or a dedicated node. OnFinality's &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC pricing&lt;/a&gt; page provides details on plans and limits.&lt;/p&gt;

&lt;h2&gt;
  
  
  Troubleshooting Common Acala RPC Issues
&lt;/h2&gt;

&lt;p&gt;Here are some common issues you might encounter when using Acala RPC:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Connection timeouts&lt;/strong&gt;: Public endpoints can be slow or overloaded. Try a different endpoint or use a WebSocket connection for real-time data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate limiting&lt;/strong&gt;: If you receive HTTP 429 responses, you are hitting rate limits. Reduce request frequency or upgrade to an authenticated endpoint.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wrong chain ID&lt;/strong&gt;: Ensure your wallet or dApp is configured with chain ID 787. Using the wrong chain ID can cause transaction failures.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EVM vs Substrate confusion&lt;/strong&gt;: If you are trying to call an EVM method on a Substrate endpoint, it will fail. Use the appropriate endpoint for your use case.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  When to Consider a Dedicated Acala Node
&lt;/h2&gt;

&lt;p&gt;A dedicated Acala node gives you full control over the node environment. This is useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;High-traffic applications&lt;/strong&gt; that need consistent performance and clear rate limits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Archive nodes&lt;/strong&gt; that need to query historical state.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Collators&lt;/strong&gt; who need to run a node for block production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom node configurations&lt;/strong&gt; that require specific flags or patches.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;OnFinality offers &lt;a href="https://onfinality.io/networks/acala-polkadot" rel="noopener noreferrer"&gt;dedicated Acala nodes&lt;/a&gt; with managed operations, monitoring, and isolated resources. You can also explore our &lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;supported networks&lt;/a&gt; to see other chains we support.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Acala is a Polkadot parachain with both Substrate and EVM+ interfaces.&lt;/li&gt;
&lt;li&gt;Use the public RPC endpoint for testing, but switch to authenticated or dedicated infrastructure for production.&lt;/li&gt;
&lt;li&gt;Configure your wallet with the correct chain ID (787) and RPC URL.&lt;/li&gt;
&lt;li&gt;Use standard Ethereum libraries like ethers.js or viem for EVM+ development.&lt;/li&gt;
&lt;li&gt;For Substrate-specific queries, use the JSON-RPC interface directly.&lt;/li&gt;
&lt;li&gt;Monitor your usage and plan for scaling to avoid rate limits and downtime.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is the Acala RPC endpoint?
&lt;/h3&gt;

&lt;p&gt;Acala provides several public RPC endpoints, including &lt;code&gt;https://acala-rpc.aca-api.network&lt;/code&gt; and &lt;code&gt;https://acala-polkadot.api.onfinality.io/public&lt;/code&gt;. For production, use an authenticated endpoint or a dedicated node.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the Acala chain ID?
&lt;/h3&gt;

&lt;p&gt;The Acala chain ID is 787 (0x313).&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use MetaMask with Acala?
&lt;/h3&gt;

&lt;p&gt;Yes, you can add Acala as a custom network in MetaMask using the chain ID 787 and the EVM RPC URL.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the difference between Substrate and EVM RPC on Acala?
&lt;/h3&gt;

&lt;p&gt;Substrate RPC is used for chain state and transactions, while EVM RPC is used for smart contract interactions. Use the appropriate endpoint for your use case.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I get a dedicated Acala node?
&lt;/h3&gt;

&lt;p&gt;You can get a dedicated Acala node through OnFinality's &lt;a href="https://onfinality.io/dedicated-node" rel="noopener noreferrer"&gt;dedicated node service&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/networks/acala-polkadot" rel="noopener noreferrer"&gt;Acala Network Page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC Pricing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;Supported Networks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Originally published at &lt;a href="https://onfinality.io/en/rpc-assistant/acala-rpc" rel="noopener noreferrer"&gt;OnFinality&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>web3</category>
      <category>blockchain</category>
      <category>devops</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>SORA Network Blockchain: RPC Setup and Best Practices</title>
      <dc:creator>OnFinality</dc:creator>
      <pubDate>Thu, 20 Aug 2026 03:04:05 +0000</pubDate>
      <link>https://dev.to/onfinality/sora-network-blockchain-rpc-setup-and-best-practices-566n</link>
      <guid>https://dev.to/onfinality/sora-network-blockchain-rpc-setup-and-best-practices-566n</guid>
      <description>&lt;h2&gt;
  
  
  Quick Recommendation: How to Decide on SORA Infrastructure
&lt;/h2&gt;

&lt;p&gt;Before you write a line of code, decide how you will access the SORA Network. The choice depends on your workload, not on the network itself.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;For prototyping or a hackathon:&lt;/strong&gt; Use a public endpoint. It is fine for a few requests, but do not build a product on it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;For a production dApp or backend service:&lt;/strong&gt; Use a managed RPC provider or run your own node. Managed services handle uptime, scaling, and maintenance, so you can focus on your application.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;For real-time features like order books or price feeds:&lt;/strong&gt; You need WebSocket (WSS) support. Confirm your provider offers it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;For historical data or analytics:&lt;/strong&gt; You may need archive node access. Check that your provider supports archive queries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;For high traffic or strict latency requirements:&lt;/strong&gt; Consider a dedicated node to avoid noisy neighbors and rate limits.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are unsure, start with a managed RPC provider that offers a free tier, test your workload, and upgrade as you grow.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is the SORA Network Blockchain?
&lt;/h2&gt;

&lt;p&gt;SORA is a Substrate-based blockchain network designed to create a decentralized autonomous economy (DAE). It uses the XOR token and a token bonding curve to manage an elastic money supply that responds to economic demand. The network powers Polkaswap, a decentralized exchange, and supports democratic governance through the SORA Parliament.&lt;/p&gt;

&lt;p&gt;SORA is built on Substrate, the same framework that powers Polkadot, which gives it enterprise-grade security and the flexibility to evolve. It is not an EVM chain, so developers interact with it using Substrate's JSON-RPC interface rather than Ethereum-style JSON-RPC.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why RPC Endpoints Matter for SORA Developers
&lt;/h2&gt;

&lt;p&gt;To build on SORA, your application needs to read chain state, submit transactions, and listen for events. RPC endpoints provide that interface. The quality of your RPC infrastructure directly affects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reliability:&lt;/strong&gt; A public endpoint can go down or rate-limit you, breaking your app.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latency:&lt;/strong&gt; For real-time features, a slow endpoint makes your UI feel sluggish.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data completeness:&lt;/strong&gt; Archive nodes are required for historical queries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security:&lt;/strong&gt; A malicious endpoint could return incorrect data or censor your transactions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Connect to SORA: Endpoints and Setup
&lt;/h2&gt;

&lt;p&gt;To connect to SORA, you need an RPC endpoint. OnFinality provides a public endpoint for SORA, which you can find on the &lt;a href="https://onfinality.io/networks/sora" rel="noopener noreferrer"&gt;SORA network page&lt;/a&gt;. For production, consider using a managed RPC provider like OnFinality, which offers dedicated nodes and shared RPC services.&lt;/p&gt;

&lt;p&gt;Here is a basic example of connecting to SORA using the Polkadot.js API in JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ApiPromise&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;WsProvider&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@polkadot/api&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;wsProvider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;WsProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;wss://sora.api.onfinality.io/public-ws&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;ApiPromise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;wsProvider&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="c1"&gt;// Get the chain name&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;chain&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rpc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;system&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;chain&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Connected to:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;chain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

  &lt;span class="c1"&gt;// Get the latest block number&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;lastHeader&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rpc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;chain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getHeader&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Latest block:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;lastHeader&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toNumber&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;disconnect&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note: The endpoint above is a placeholder. Always check the &lt;a href="https://onfinality.io/networks/sora" rel="noopener noreferrer"&gt;SORA network page&lt;/a&gt; for the current public endpoint URL.&lt;/p&gt;

&lt;h2&gt;
  
  
  Evaluating RPC Providers for SORA
&lt;/h2&gt;

&lt;p&gt;When choosing an RPC provider for SORA, consider the following criteria:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;What to Check&lt;/th&gt;
&lt;th&gt;Why It Matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Uptime&lt;/td&gt;
&lt;td&gt;Historical uptime and SLA&lt;/td&gt;
&lt;td&gt;Downtime breaks your app and loses users&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Latency&lt;/td&gt;
&lt;td&gt;Response time from your region&lt;/td&gt;
&lt;td&gt;Slow responses hurt user experience&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rate limits&lt;/td&gt;
&lt;td&gt;Requests per second and daily limits&lt;/td&gt;
&lt;td&gt;Limits can throttle your app under load&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WebSocket support&lt;/td&gt;
&lt;td&gt;WSS availability for subscriptions&lt;/td&gt;
&lt;td&gt;Needed for real-time features&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Archive data&lt;/td&gt;
&lt;td&gt;Access to historical state&lt;/td&gt;
&lt;td&gt;Required for analytics and some queries&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dedicated nodes&lt;/td&gt;
&lt;td&gt;Option for exclusive infrastructure&lt;/td&gt;
&lt;td&gt;Avoids noisy neighbors and rate limits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pricing&lt;/td&gt;
&lt;td&gt;Transparent, predictable costs&lt;/td&gt;
&lt;td&gt;Helps you budget and scale&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;OnFinality offers a managed RPC service for SORA with shared and dedicated options. You can compare plans on the &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC pricing page&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Pitfalls When Using SORA RPC
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Using public endpoints in production:&lt;/strong&gt; Public endpoints are often rate-limited and can go down. They are fine for testing but not for production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ignoring WebSocket support:&lt;/strong&gt; If your app needs real-time updates, you must use WSS. Not all providers offer it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not checking archive support:&lt;/strong&gt; If you need historical data, ensure your provider has archive nodes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Assuming EVM compatibility:&lt;/strong&gt; SORA is Substrate-based, so Ethereum tools like ethers.js won't work directly. Use Polkadot.js or Substrate-compatible libraries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Overlooking rate limits:&lt;/strong&gt; Even managed providers have limits. Understand your usage and choose a plan that fits.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Troubleshooting SORA RPC Issues
&lt;/h2&gt;

&lt;p&gt;If you encounter issues, follow this debug path:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Check the endpoint URL:&lt;/strong&gt; Ensure you are using the correct URL from the &lt;a href="https://onfinality.io/networks/sora" rel="noopener noreferrer"&gt;SORA network page&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test with a simple request:&lt;/strong&gt; Use curl to verify connectivity.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"id":1,"jsonrpc":"2.0","method":"system_chain","params":[]}'&lt;/span&gt; https://sora.api.onfinality.io/public
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Check rate limits:&lt;/strong&gt; If you get 429 responses, you are hitting limits. Consider upgrading your plan.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verify WebSocket connectivity:&lt;/strong&gt; Use a tool like wscat to test WSS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review your code:&lt;/strong&gt; Ensure you are using the correct library and method names for Substrate.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;SORA is a Substrate-based blockchain for a decentralized autonomous economy, using XOR and a token bonding curve.&lt;/li&gt;
&lt;li&gt;RPC endpoints are critical for building reliable applications on SORA.&lt;/li&gt;
&lt;li&gt;Choose infrastructure based on your workload: public for testing, managed for production, dedicated for high traffic.&lt;/li&gt;
&lt;li&gt;Evaluate providers on uptime, latency, rate limits, WebSocket support, archive data, and pricing.&lt;/li&gt;
&lt;li&gt;Avoid common pitfalls like using public endpoints in production and ignoring WebSocket support.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is the SORA network?&lt;/strong&gt;&lt;br&gt;
SORA is a Substrate-based blockchain network designed as a decentralized autonomous economy, using the XOR token and a token bonding curve.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is SORA an EVM chain?&lt;/strong&gt;&lt;br&gt;
No, SORA is Substrate-based, so it uses Substrate's JSON-RPC, not Ethereum's.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I get a SORA RPC endpoint?&lt;/strong&gt;&lt;br&gt;
You can use OnFinality's public endpoint or sign up for a managed RPC service. See the &lt;a href="https://onfinality.io/networks/sora" rel="noopener noreferrer"&gt;SORA network page&lt;/a&gt; for details.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I use ethers.js with SORA?&lt;/strong&gt;&lt;br&gt;
No, ethers.js is for EVM chains. Use Polkadot.js or other Substrate-compatible libraries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the XOR token?&lt;/strong&gt;&lt;br&gt;
XOR is the native token of the SORA network, used for governance, fees, and as a medium of exchange.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does OnFinality support SORA?&lt;/strong&gt;&lt;br&gt;
Yes, OnFinality provides RPC services for SORA. Check the &lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;supported networks page&lt;/a&gt; for more information.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/networks/sora" rel="noopener noreferrer"&gt;SORA Network RPC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;Supported Networks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC Pricing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Originally published at &lt;a href="https://onfinality.io/en/rpc-assistant/sora-network-blockchain" rel="noopener noreferrer"&gt;OnFinality&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>web3</category>
      <category>blockchain</category>
      <category>devops</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
