<?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>BNB Smart Chain API: Endpoints, Methods, and Best Practices</title>
      <dc:creator>OnFinality</dc:creator>
      <pubDate>Wed, 05 Aug 2026 02:31:11 +0000</pubDate>
      <link>https://dev.to/onfinality/bnb-smart-chain-api-endpoints-methods-and-best-practices-7jl</link>
      <guid>https://dev.to/onfinality/bnb-smart-chain-api-endpoints-methods-and-best-practices-7jl</guid>
      <description>&lt;h2&gt;
  
  
  Quick Answer: What Is the BNB Smart Chain API?
&lt;/h2&gt;

&lt;p&gt;The BNB Smart Chain API is a set of JSON-RPC endpoints that let applications read and write data on BNB Smart Chain (BSC). It follows the Ethereum JSON-RPC standard, so if you've used &lt;code&gt;eth_getBalance&lt;/code&gt; or &lt;code&gt;eth_sendRawTransaction&lt;/code&gt; on Ethereum, you already know how to use BSC. The API is the bridge between your dApp and the chain—whether you're fetching a token balance, submitting a swap, or listening for new blocks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Decision Guide: Choosing the Right BNB Smart Chain API Access
&lt;/h2&gt;

&lt;p&gt;Before you start coding, decide how your app will connect to BSC. The choice affects latency, reliability, and cost. Here's a quick framework:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Prototyping or hackathon&lt;/strong&gt;: Use a public RPC endpoint. It's free and fine for light testing, but it may rate-limit or become unreliable under load.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production dApp with moderate traffic&lt;/strong&gt;: Use a managed RPC provider. You get stable endpoints, higher throughput, and support. OnFinality offers BNB Smart Chain RPC endpoints with predictable &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;pricing&lt;/a&gt; and a &lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;list of supported networks&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High-throughput or data-heavy workloads&lt;/strong&gt;: Consider a &lt;a href="https://onfinality.io/dedicated-node" rel="noopener noreferrer"&gt;dedicated node&lt;/a&gt;. You get exclusive access, no noisy neighbors, and the ability to run archive or trace queries without impacting other users.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Need WebSocket for real-time updates&lt;/strong&gt;: Ensure your provider supports WSS endpoints. Most managed providers do, but public endpoints often don't.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;When configuring your wallet or dApp, you'll need these BSC 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;Mainnet&lt;/th&gt;
&lt;th&gt;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;56&lt;/td&gt;
&lt;td&gt;97&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Currency&lt;/td&gt;
&lt;td&gt;BNB&lt;/td&gt;
&lt;td&gt;tBNB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RPC URL&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;https://bsc-dataseed.binance.org/&lt;/code&gt; (public)&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;https://data-seed-prebsc-1-s1.binance.org:8545/&lt;/code&gt; (public)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Block explorer&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://bscscan.com&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://testnet.bscscan.com&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For production, replace the public URL with a managed endpoint from a provider like OnFinality. You can find the official BSC endpoints in the &lt;a href="https://docs.bnbchain.org/bnb-smart-chain/developers/json_rpc/json-rpc-endpoints/" rel="noopener noreferrer"&gt;BNB Chain docs&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Essential JSON-RPC Methods for BSC
&lt;/h2&gt;

&lt;p&gt;Because BSC is EVM-compatible, the core methods are identical to Ethereum. Here are the ones you'll use most:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;eth_blockNumber&lt;/code&gt; – get the latest block number&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;eth_getBalance&lt;/code&gt; – get the balance of an address&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;eth_call&lt;/code&gt; – execute a read-only contract call&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;eth_sendRawTransaction&lt;/code&gt; – broadcast a signed transaction&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;eth_getTransactionReceipt&lt;/code&gt; – get the receipt of a transaction&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;eth_getLogs&lt;/code&gt; – fetch event logs&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;eth_estimateGas&lt;/code&gt; – estimate gas for a transaction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;BSC also has some BEP-specific methods, like &lt;code&gt;eth_getFinalizedBlock&lt;/code&gt; for fast finality (BEP-126). Check the &lt;a href="https://docs.bnbchain.org/bnb-smart-chain/developers/json_rpc/bsc-api-list/" rel="noopener noreferrer"&gt;official API list&lt;/a&gt; for the full reference.&lt;/p&gt;

&lt;h2&gt;
  
  
  Making Your First Request with cURL
&lt;/h2&gt;

&lt;p&gt;You can test any RPC endpoint with a simple cURL command. Replace &lt;code&gt;YOUR_RPC_URL&lt;/code&gt; with your 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;-X&lt;/span&gt; POST YOUR_RPC_URL &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;Expected response:&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;"jsonrpc"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"result"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0x1a2b3c"&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;The result is a hex-encoded block number. Convert it to decimal to get the human-readable number.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using the API with ethers.js or viem
&lt;/h2&gt;

&lt;p&gt;If you're building a JavaScript dApp, use a library like ethers or viem. Here's an example 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="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;bsc&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;bsc&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;YOUR_RPC_URL&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&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="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;client&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="na"&gt;address&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0x...&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;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;Balance (BNB):&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Number&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="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="nx"&gt;e18&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With ethers v6:&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;YOUR_RPC_URL&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;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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  WebSocket Subscriptions for Real-Time Data
&lt;/h2&gt;

&lt;p&gt;For live updates—like new blocks or pending transactions—use WebSocket. Most managed providers offer WSS endpoints.&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="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;bsc&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;bsc&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;wss://YOUR_WSS_URL&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;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="s1"&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;h2&gt;
  
  
  Common Pitfalls and How to Avoid Them
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rate limiting&lt;/strong&gt;: Public endpoints often throttle requests. If you hit &lt;code&gt;429&lt;/code&gt; errors, switch to a managed provider or implement retry logic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chain ID mismatch&lt;/strong&gt;: Ensure your app uses chain ID 56 for mainnet and 97 for testnet. A wrong chain ID will cause transaction failures.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gas estimation&lt;/strong&gt;: BSC gas prices can spike during congestion. Use &lt;code&gt;eth_estimateGas&lt;/code&gt; and set a reasonable gas limit to avoid failed transactions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Finality&lt;/strong&gt;: BSC has fast finality (BEP-126), but not all nodes support the new finality methods. If you rely on finality, check your provider's support.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WebSocket disconnects&lt;/strong&gt;: Implement reconnection logic to handle dropped connections.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Production Readiness Checklist
&lt;/h2&gt;

&lt;p&gt;Before you ship, verify these points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Use a managed RPC provider with a reliable SLA, not a public endpoint.&lt;/li&gt;
&lt;li&gt;[ ] Set up monitoring for RPC errors and latency.&lt;/li&gt;
&lt;li&gt;[ ] Implement fallback to a secondary provider in case of outage.&lt;/li&gt;
&lt;li&gt;[ ] Use WebSocket for real-time features, but with reconnection handling.&lt;/li&gt;
&lt;li&gt;[ ] Test on BNB testnet first.&lt;/li&gt;
&lt;li&gt;[ ] Review &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC pricing&lt;/a&gt; to choose the right plan for your traffic.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;The BNB Smart Chain API is EVM-compatible, so you can reuse Ethereum tooling.&lt;/li&gt;
&lt;li&gt;Choose your access method based on your workload: public for testing, managed for production, dedicated for high throughput.&lt;/li&gt;
&lt;li&gt;Use the correct chain ID and testnet endpoints during development.&lt;/li&gt;
&lt;li&gt;Monitor your RPC usage and plan for rate limits.&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 BNB Smart Chain and BNB Beacon Chain?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;BNB Smart Chain is an EVM-compatible blockchain for smart contracts and dApps, while BNB Beacon Chain handles staking and governance. The API for BSC is what you'll use for most development.&lt;/p&gt;

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

&lt;p&gt;Yes, because BSC is EVM-compatible, you can use ethers, viem, web3.js, and other Ethereum libraries with the BSC API.&lt;/p&gt;

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

&lt;p&gt;It's the same JSON-RPC API but on the testnet network (chain ID 97). Use it to test your dApp without real funds. OnFinality provides &lt;a href="https://onfinality.io/networks/bnb-testnet" rel="noopener noreferrer"&gt;BNB testnet RPC&lt;/a&gt; endpoints.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I get a BNB Smart Chain API key?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You don't need a key for public endpoints, but for production, you'll want a managed provider. OnFinality offers API keys through its &lt;a href="https://onfinality.io/api-service" rel="noopener noreferrer"&gt;API service&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the cost of using the BNB Smart Chain API?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Public endpoints are free but unreliable. Managed providers charge based on usage. Check &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC pricing&lt;/a&gt; for details.&lt;/p&gt;

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

&lt;p&gt;Shared nodes are cost-effective for most apps. Dedicated nodes are better for high traffic, data-intensive workloads, or when you need archive data. See &lt;a href="https://onfinality.io/dedicated-node" rel="noopener noreferrer"&gt;dedicated node&lt;/a&gt; options.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/networks/bnb" rel="noopener noreferrer"&gt;BNB Chain RPC Provider&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/networks/bnb-testnet" rel="noopener noreferrer"&gt;BNB Testnet 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/bnb-smart-chain-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>Blockchain API Service: What It Is and How to Choose</title>
      <dc:creator>OnFinality</dc:creator>
      <pubDate>Wed, 05 Aug 2026 02:30:38 +0000</pubDate>
      <link>https://dev.to/onfinality/blockchain-api-service-what-it-is-and-how-to-choose-1f5</link>
      <guid>https://dev.to/onfinality/blockchain-api-service-what-it-is-and-how-to-choose-1f5</guid>
      <description>&lt;h2&gt;
  
  
  Quick recommendation: what to look for first
&lt;/h2&gt;

&lt;p&gt;If you are evaluating a blockchain API service, start by mapping your workload to the type of access you need. A simple wallet or dApp that reads balances and sends transactions can often use a shared public endpoint. An analytics platform that replays historical state or a high-throughput trading bot usually needs archive data or a dedicated node.&lt;/p&gt;

&lt;p&gt;Before comparing vendors, write down your expected request volume, whether you need WebSocket subscriptions, and whether you need trace or archive methods. That short list will filter most options immediately. For a practical starting point, you can test any JSON-RPC endpoint with a single &lt;code&gt;curl&lt;/code&gt; command, as shown later in this article.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a blockchain API service actually does
&lt;/h2&gt;

&lt;p&gt;A blockchain API service is a hosted layer that lets your application interact with one or more blockchain networks without you operating nodes. Instead of syncing a full node and keeping it healthy, you send HTTP or WebSocket requests to a provider's endpoint, and the provider routes them to the underlying network.&lt;/p&gt;

&lt;p&gt;The most common interface is JSON-RPC, a stateless protocol where each request is a JSON object with a method and parameters. For example, &lt;code&gt;eth_blockNumber&lt;/code&gt; returns the latest block number on an Ethereum-compatible chain. Providers often also offer REST endpoints for higher-level data like token balances or transaction history, but the core is usually RPC.&lt;/p&gt;

&lt;p&gt;A blockchain API service is not the same as a block explorer API. Explorer APIs, like Blockchain.com's, give you access to indexed data such as blocks, transactions, and addresses for a specific chain. RPC services give you direct access to node methods, which is what you need to build a dApp that submits transactions or reads contract state.&lt;/p&gt;

&lt;h2&gt;
  
  
  Types of blockchain API services
&lt;/h2&gt;

&lt;p&gt;The market splits into a few broad categories. Knowing which one fits your project avoids paying for features you do not need or hitting limits you did not expect.&lt;/p&gt;

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

&lt;p&gt;Public endpoints are free and open, often run by the network foundation or community. They are fine for prototyping and low-volume testing. The tradeoff is reliability: they can rate-limit aggressively, go down during network congestion, or change without notice. You should not depend on them for a production app.&lt;/p&gt;

&lt;h3&gt;
  
  
  Shared RPC providers
&lt;/h3&gt;

&lt;p&gt;Shared providers operate clusters of nodes and expose them through a single API key or URL. Multiple customers share the same infrastructure, which keeps costs low. You get better reliability than public endpoints, but you are still subject to fair-use limits. This is the most common choice for early-stage dApps and developer tools.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dedicated nodes
&lt;/h3&gt;

&lt;p&gt;A dedicated node gives you exclusive access to a synchronized node instance. You can run heavy queries, use archive or trace methods, and avoid noisy-neighbor effects. This is the right choice for analytics platforms, indexers, and applications with sustained high request rates. Dedicated nodes cost more, but they offer predictable performance.&lt;/p&gt;

&lt;h3&gt;
  
  
  Data and indexer APIs
&lt;/h3&gt;

&lt;p&gt;Some services go beyond raw RPC and provide indexed, human-readable data. They might offer REST endpoints for token prices, NFT metadata, or transaction history. These are convenient, but they add a layer of abstraction. If you need raw on-chain state, you still need an RPC service.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to evaluate a blockchain API service
&lt;/h2&gt;

&lt;p&gt;Once you know the type you need, compare providers on a few concrete criteria. The table below summarizes what to check and why it matters.&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;Network coverage&lt;/td&gt;
&lt;td&gt;Which chains are supported, including testnets&lt;/td&gt;
&lt;td&gt;Avoids switching providers for each chain you add&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Method support&lt;/td&gt;
&lt;td&gt;Does it support archive, trace, or debug methods?&lt;/td&gt;
&lt;td&gt;Analytics and debugging need more than basic methods&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 caps&lt;/td&gt;
&lt;td&gt;Determines if your traffic fits a shared plan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WebSocket support&lt;/td&gt;
&lt;td&gt;Real-time subscriptions for pending transactions or logs&lt;/td&gt;
&lt;td&gt;Essential for dApps that need live updates&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reliability&lt;/td&gt;
&lt;td&gt;Historical uptime and redundancy&lt;/td&gt;
&lt;td&gt;Production apps need consistent availability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pricing model&lt;/td&gt;
&lt;td&gt;Pay-as-you-go vs. monthly subscription&lt;/td&gt;
&lt;td&gt;Aligns cost with your actual usage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Support&lt;/td&gt;
&lt;td&gt;Documentation, community, and SLAs&lt;/td&gt;
&lt;td&gt;Helps you resolve issues quickly&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For a deeper dive into provider selection, 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;
  
  
  Making your first JSON-RPC request
&lt;/h2&gt;

&lt;p&gt;Most blockchain API services follow the same JSON-RPC pattern. Here is a &lt;code&gt;curl&lt;/code&gt; example that fetches the latest block number from an Ethereum-compatible endpoint. Replace the URL with your provider's 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;-X&lt;/span&gt; POST https://your-provider.example/v1/your-api-key &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;The response will look like this:&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="nl"&gt;"jsonrpc"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"2.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&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="nl"&gt;"result"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"0x134c2b4"&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;The &lt;code&gt;result&lt;/code&gt; is a hex-encoded block number. You can convert it to decimal to see the current height.&lt;/p&gt;

&lt;p&gt;If you are using a JavaScript library like ethers or viem, the provider handles the JSON-RPC details for you. Here is a viem 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="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;mainnet&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;mainnet&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://your-provider.example/v1/your-api-key&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;
  
  
  Common use cases and which service fits
&lt;/h2&gt;

&lt;p&gt;Different applications have different needs. Here is a quick mapping to help you decide.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Wallet or simple dApp&lt;/strong&gt;: A shared RPC provider is usually enough. You need basic methods like &lt;code&gt;eth_getBalance&lt;/code&gt;, &lt;code&gt;eth_sendRawTransaction&lt;/code&gt;, and &lt;code&gt;eth_call&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DeFi dashboard&lt;/strong&gt;: You might need WebSocket subscriptions for price updates and pending transactions. A shared provider with WebSocket support works.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analytics platform&lt;/strong&gt;: You need archive data to query historical state. A dedicated node with archive access is the right choice.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High-frequency trading bot&lt;/strong&gt;: Low latency and high throughput are critical. A dedicated node with a private connection minimizes network overhead.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NFT marketplace&lt;/strong&gt;: You need to read token metadata and track transfers. A data API can simplify this, but you still need RPC for minting and trading.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Build versus buy: when to run your own node
&lt;/h2&gt;

&lt;p&gt;Running your own node gives you full control and avoids per-request fees. It is a good learning experience and can be cost-effective for a single chain with steady traffic. However, it comes with operational overhead: you need to handle sync, upgrades, monitoring, and failover. If you support multiple chains, the cost multiplies.&lt;/p&gt;

&lt;p&gt;A blockchain API service shifts that burden to the provider. You pay a subscription or usage fee, but you get redundancy, security patches, and support. For most teams, the tradeoff favors using a service, especially in the early stages. As you scale, you can revisit the decision and possibly run a hybrid setup.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started with OnFinality
&lt;/h2&gt;

&lt;p&gt;OnFinality offers a blockchain API service that covers a wide range of networks, including Ethereum, Solana, Polkadot, and many others. You can start with a free tier and upgrade as your needs grow. Our &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC pricing&lt;/a&gt; page explains the plans, and our &lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;supported networks&lt;/a&gt; page lists all available chains.&lt;/p&gt;

&lt;p&gt;To get started, create an API key, choose your network, and use the endpoint in your application. You can also request a &lt;a href="https://onfinality.io/dedicated-node" rel="noopener noreferrer"&gt;dedicated node&lt;/a&gt; if you need exclusive access or archive data.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;A blockchain API service lets you interact with blockchains without running your own nodes.&lt;/li&gt;
&lt;li&gt;Public endpoints are fine for testing, but production apps need a reliable provider.&lt;/li&gt;
&lt;li&gt;Choose between shared and dedicated nodes based on your workload and performance needs.&lt;/li&gt;
&lt;li&gt;Evaluate providers on network coverage, method support, rate limits, WebSocket support, and pricing.&lt;/li&gt;
&lt;li&gt;Start with a simple JSON-RPC request to test any service before committing.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  What is the difference between a blockchain API and an RPC?
&lt;/h3&gt;

&lt;p&gt;A blockchain API is a broad term for any interface that lets you interact with a blockchain. RPC (Remote Procedure Call) is a specific protocol, usually JSON-RPC, that is the standard for node communication. Most blockchain API services expose RPC endpoints.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do I need a blockchain API service to build a dApp?
&lt;/h3&gt;

&lt;p&gt;Yes, in most cases. Your dApp needs to read and write data on-chain, and a blockchain API service provides the connection. You could run your own node, but that adds significant operational overhead.&lt;/p&gt;

&lt;h3&gt;
  
  
  How much does a blockchain API service cost?
&lt;/h3&gt;

&lt;p&gt;Pricing varies widely. Some providers offer free tiers with rate limits, while dedicated nodes can cost hundreds of dollars per month. Check the provider's pricing page for details. OnFinality's &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC pricing&lt;/a&gt; is transparent and scales with usage.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use a blockchain API service for multiple chains?
&lt;/h3&gt;

&lt;p&gt;Yes, many providers support multiple networks. OnFinality, for example, supports dozens of chains through a single API key. This simplifies your infrastructure and reduces the number of vendors you need to manage.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is an archive node and why would I need it?
&lt;/h3&gt;

&lt;p&gt;An archive node stores the full historical state of a blockchain, allowing you to query past balances and contract states. It is essential for analytics platforms and applications that need to audit historical data. Not all API services offer archive access, so check before you commit.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I choose between a shared and a dedicated node?
&lt;/h3&gt;

&lt;p&gt;Start with a shared node if your traffic is moderate and you want to keep costs low. Move to a dedicated node when you need consistent performance, heavy queries, or archive/trace methods. Monitor your usage and upgrade when you hit limits.&lt;/p&gt;

&lt;h3&gt;
  
  
  What should I do if my requests are rate-limited?
&lt;/h3&gt;

&lt;p&gt;First, check your provider's rate limit policy. You can optimize your code to cache responses and reduce request frequency. If you still need more throughput, consider upgrading to a higher tier or a dedicated node. OnFinality's &lt;a href="https://onfinality.io/dedicated-node" rel="noopener noreferrer"&gt;dedicated node&lt;/a&gt; option gives you exclusive access without shared limits.&lt;/p&gt;

&lt;h3&gt;
  
  
  Are blockchain API services secure?
&lt;/h3&gt;

&lt;p&gt;Reputable providers implement security best practices, such as encryption, access controls, and monitoring. However, you should always protect your API keys and never expose them in client-side code. Use environment variables and server-side proxies when possible.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I switch providers later?
&lt;/h3&gt;

&lt;p&gt;Yes, most providers use standard JSON-RPC, so switching is usually straightforward. You update your endpoint URL and API key. However, if you rely on provider-specific features like webhooks or data APIs, you may need to adjust your code. Plan for portability from the start.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the best blockchain API service for beginners?
&lt;/h3&gt;

&lt;p&gt;For beginners, a provider with a generous free tier and good documentation is ideal. OnFinality offers a free tier and a simple onboarding process. You can start with a public endpoint and upgrade as your project grows.&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/how-to-choose-an-rpc-provider" rel="noopener noreferrer"&gt;How to choose an RPC provider&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Originally published at &lt;a href="https://onfinality.io/en/rpc-assistant/blockchain-api-service" 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>Bittensor TAO Mining: Hardware, Setup, and RPC Tips</title>
      <dc:creator>OnFinality</dc:creator>
      <pubDate>Wed, 05 Aug 2026 02:30:06 +0000</pubDate>
      <link>https://dev.to/onfinality/bittensor-tao-mining-hardware-setup-and-rpc-tips-22o0</link>
      <guid>https://dev.to/onfinality/bittensor-tao-mining-hardware-setup-and-rpc-tips-22o0</guid>
      <description>&lt;h2&gt;
  
  
  Quick Recommendation: Pick a Subnet Before You Buy Hardware
&lt;/h2&gt;

&lt;p&gt;Before you spend money on GPUs or start configuring a miner, decide which subnet you want to mine on. Bittensor is not a single mining algorithm. Each subnet defines its own work, scoring, and hardware requirements. The subnet you choose determines your hardware, your expected rewards, and your competition.&lt;/p&gt;

&lt;p&gt;For beginners, the best approach is to start with a subnet that matches your existing skills and hardware. If you have a gaming PC with a modern GPU, you can mine on subnets that require inference or compute. If you have storage capacity, look for storage-focused subnets. If you have no specialized hardware, you can still mine on subnets that reward lightweight tasks, but expect lower rewards.&lt;/p&gt;

&lt;p&gt;Check the subnet's emission rate and the number of registered miners. High-emission subnets attract more competition, while new subnets may offer easier entry but lower immediate rewards. Use a Bittensor explorer to compare subnets before committing.&lt;/p&gt;

&lt;p&gt;Once you pick a subnet, you need a reliable connection to the Bittensor chain. Your miner must register a hotkey and periodically send heartbeats and score updates. If your RPC endpoint is slow or unreliable, your miner may miss deadlines and get deregistered. Consider using a managed RPC provider like OnFinality to keep your miner connected without running your own archive node. See &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 RPC networks&lt;/a&gt; for options.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is TAO Mining on Bittensor?
&lt;/h2&gt;

&lt;p&gt;Bittensor is a decentralized machine intelligence network. Instead of solving hash puzzles, miners produce digital commodities—compute, inference, storage, prediction—that validators score. The network pays miners in TAO based on the value they contribute.&lt;/p&gt;

&lt;p&gt;Mining on Bittensor involves three roles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Miners&lt;/strong&gt; provide the commodity and are scored by validators.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validators&lt;/strong&gt; score miners and set weights.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Subnet creators&lt;/strong&gt; define the incentive mechanism for their subnet.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As a miner, you register a hotkey on a subnet and receive a UID. Your miner software then performs the subnet's task and submits results to the chain. Validators verify your work and assign scores. Your TAO rewards depend on your score relative to other miners and the subnet's emission rate.&lt;/p&gt;

&lt;p&gt;Unlike proof-of-work, there is no block reward for hashing. Instead, TAO is emitted continuously to subnets based on their stake and performance. This means your mining income is not fixed; it varies with your performance and the subnet's success.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hardware Requirements: What You Actually Need
&lt;/h2&gt;

&lt;p&gt;Hardware requirements vary by subnet. Some subnets require high-end GPUs, while others can run on a CPU or even a Raspberry Pi. Always check the subnet's documentation before buying hardware.&lt;/p&gt;

&lt;p&gt;Here is a general breakdown:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Subnet Type&lt;/th&gt;
&lt;th&gt;Example Tasks&lt;/th&gt;
&lt;th&gt;Typical Hardware&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Inference&lt;/td&gt;
&lt;td&gt;Text generation, image generation&lt;/td&gt;
&lt;td&gt;High-end GPU (e.g., NVIDIA A100, RTX 4090)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compute&lt;/td&gt;
&lt;td&gt;Machine learning training, data processing&lt;/td&gt;
&lt;td&gt;Multiple GPUs or TPUs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Storage&lt;/td&gt;
&lt;td&gt;Data storage and retrieval&lt;/td&gt;
&lt;td&gt;Large hard drives, decent CPU&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Prediction&lt;/td&gt;
&lt;td&gt;Market prediction, forecasting&lt;/td&gt;
&lt;td&gt;CPU with good RAM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lightweight&lt;/td&gt;
&lt;td&gt;Simple tasks, API calls&lt;/td&gt;
&lt;td&gt;CPU, low RAM&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For a gaming PC, you can start with subnets that require a single GPU. Many subnets have a minimum hardware requirement listed in their README. If you exceed the minimum, you may have an advantage, but competition is fierce.&lt;/p&gt;

&lt;p&gt;Keep in mind that mining on Bittensor is not passive. You need to keep your miner online and responsive. If your hardware fails or your internet drops, you may miss deadlines and lose your UID.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Register a Hotkey and Start Mining
&lt;/h2&gt;

&lt;p&gt;To mine on Bittensor, you need a wallet with a coldkey and a hotkey. The coldkey holds your TAO, and the hotkey is used for mining operations. You can create a wallet using the Bittensor CLI or the &lt;a href="https://www.bittensor.com/docs" rel="noopener noreferrer"&gt;Bittensor SDK&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here is a basic workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install the Bittensor SDK and CLI&lt;/strong&gt; using &lt;code&gt;uv&lt;/code&gt; or &lt;code&gt;pip&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create a wallet&lt;/strong&gt; with &lt;code&gt;btcli wallet create&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fund your coldkey&lt;/strong&gt; with TAO for registration fees and transaction costs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Register your hotkey&lt;/strong&gt; on your chosen subnet with &lt;code&gt;btcli subnet register&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run your miner&lt;/strong&gt; using the subnet's miner script.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Registration costs a small amount of TAO and may require a stake. The exact fee varies by subnet and network congestion.&lt;/p&gt;

&lt;p&gt;Here is an example of registering a hotkey using the CLI:&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;# Create a new wallet&lt;/span&gt;
btcli wallet create &lt;span class="nt"&gt;--wallet-name&lt;/span&gt; my_miner

&lt;span class="c"&gt;# Register your hotkey on subnet 1&lt;/span&gt;
btcli subnet register &lt;span class="nt"&gt;--netuid&lt;/span&gt; 1 &lt;span class="nt"&gt;--wallet-name&lt;/span&gt; my_miner &lt;span class="nt"&gt;--hotkey&lt;/span&gt; my_hotkey
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After registration, you will receive a UID. Your miner software will use this UID to submit work. Make sure your miner is configured with your wallet and hotkey.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing the Right RPC Endpoint for Your Miner
&lt;/h2&gt;

&lt;p&gt;Your miner needs to communicate with the Bittensor chain to register, submit scores, and stay active. The default endpoint may be a public RPC provided by the Bittensor team, but public endpoints can be rate-limited or unreliable.&lt;/p&gt;

&lt;p&gt;For production mining, you have two options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Run your own subtensor node&lt;/strong&gt; and use its RPC endpoint.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use a managed RPC provider&lt;/strong&gt; like OnFinality.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Running your own node gives you full control but requires storage, bandwidth, and maintenance. A managed RPC provider handles the infrastructure for you, offering reliable endpoints with failover and load balancing. This is especially useful if you run multiple miners or need high availability.&lt;/p&gt;

&lt;p&gt;OnFinality provides Bittensor RPC endpoints that you can use with your miner. Check the &lt;a href="https://onfinality.io/networks/bittensor-finney" rel="noopener noreferrer"&gt;Bittensor Finney network page&lt;/a&gt; for endpoint details. You can also compare &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC pricing&lt;/a&gt; to see if managed RPC fits your budget.&lt;/p&gt;

&lt;p&gt;Here is an example of setting your miner to use a custom RPC endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;bittensor&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;bt&lt;/span&gt;

&lt;span class="n"&gt;subtensor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;bt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;subtensor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;network&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;wss://your-endpoint.onfinality.io&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# Now use subtensor to query the chain
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Make sure your endpoint supports WebSocket connections, as many miner operations use WebSocket for real-time updates.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Failure Modes and How to Debug Them
&lt;/h2&gt;

&lt;p&gt;Mining on Bittensor can fail in several ways. Here are common issues and how to fix them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deregistration&lt;/strong&gt;: If your miner misses too many deadlines, you may be deregistered. Check your miner logs for errors and ensure your RPC endpoint is responsive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stale scores&lt;/strong&gt;: If your miner submits scores late, validators may ignore them. Use a low-latency RPC endpoint and ensure your miner is not overloaded.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connection errors&lt;/strong&gt;: If your RPC endpoint goes down, your miner cannot communicate with the chain. Use a provider with failover, or run your own node with monitoring.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Insufficient stake&lt;/strong&gt;: Some subnets require a minimum stake to stay registered. Check your subnet's requirements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hardware failure&lt;/strong&gt;: If your GPU overheats or your disk fills up, your miner may crash. Monitor your hardware and set up alerts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To debug, start by checking your miner logs. Look for error codes and messages. The Bittensor SDK provides machine-readable error codes that can help you identify the issue. If you are using a managed RPC provider, check their status page for outages.&lt;/p&gt;

&lt;p&gt;Here is a simple monitoring script that checks if your miner is still registered:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;bittensor&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;bt&lt;/span&gt;

&lt;span class="n"&gt;subtensor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;bt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;subtensor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;network&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;wss://your-endpoint.onfinality.io&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;wallet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;bt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;wallet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;my_miner&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;hotkey&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;my_hotkey&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;uid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;subtensor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_uid_for_hotkey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;wallet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hotkey&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ss58_address&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;netuid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;uid&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Miner is deregistered!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Miner is registered with UID &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;uid&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Monitoring Your Miner and Maximizing Rewards
&lt;/h2&gt;

&lt;p&gt;To maximize your TAO rewards, you need to monitor your miner's performance and adjust your strategy. Key metrics to track:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Score&lt;/strong&gt;: Your score relative to other miners on the subnet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Emission&lt;/strong&gt;: The amount of TAO your subnet receives.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uptime&lt;/strong&gt;: The percentage of time your miner is online and submitting work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latency&lt;/strong&gt;: The time it takes for your miner to submit results.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use a Bittensor explorer like Taostats to monitor your miner's status and the subnet's health. You can also set up alerts for deregistration or score drops.&lt;/p&gt;

&lt;p&gt;If your score is low, consider improving your hardware, optimizing your miner code, or switching to a less competitive subnet. If your subnet's emission is declining, you may want to migrate to a more promising subnet.&lt;/p&gt;

&lt;p&gt;Remember that mining is competitive. Even with the best hardware, you may not earn a profit if the subnet is oversaturated. Do your research and be prepared to adapt.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Bittensor TAO mining is not proof-of-work; it involves providing useful work that validators score.&lt;/li&gt;
&lt;li&gt;Choose a subnet that matches your hardware and skills before investing in equipment.&lt;/li&gt;
&lt;li&gt;Register a hotkey and fund your wallet with TAO for fees.&lt;/li&gt;
&lt;li&gt;Use a reliable RPC endpoint to keep your miner connected and avoid deregistration.&lt;/li&gt;
&lt;li&gt;Monitor your miner's score, uptime, and emission to maximize rewards.&lt;/li&gt;
&lt;li&gt;Consider managed RPC providers like OnFinality for high availability and failover.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;Can I mine Bittensor with a gaming PC?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes, many subnets require only a single GPU, which a gaming PC can provide. Check the subnet's hardware requirements before starting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the best subnet to mine on?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There is no single best subnet. It depends on your hardware, skills, and risk tolerance. High-emission subnets are competitive, while new subnets may offer easier entry.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How much does it cost to register a miner?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Registration costs a small amount of TAO, which varies by subnet and network congestion. You also need TAO for transaction fees.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need to run my own node to mine?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No, you can use a public RPC endpoint or a managed provider like OnFinality. Running your own node gives you more control but requires maintenance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What happens if my miner goes offline?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If your miner misses deadlines, you may be deregistered. Use monitoring and reliable RPC to minimize downtime.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I mine on multiple subnets?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes, you can register your hotkey on multiple subnets, but you need to run separate miner instances for each.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is TAO mining profitable?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Profitability depends on your hardware, electricity costs, subnet competition, and TAO price. Do your own research and start small.&lt;/p&gt;

&lt;p&gt;For more details on RPC endpoints and network support, visit our &lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;supported RPC networks&lt;/a&gt; page 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/rpc-assistant/bittensor-rpc-guide" rel="noopener noreferrer"&gt;Bittensor RPC Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/rpc-assistant/how-to-mine-bittensor" rel="noopener noreferrer"&gt;How to Mine Bittensor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/rpc-assistant/bittensor-node" rel="noopener noreferrer"&gt;Bittensor Node Setup&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/bittensor-tao-mining" 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>Best JSON-RPC API Provider for Blockchain Projects</title>
      <dc:creator>OnFinality</dc:creator>
      <pubDate>Wed, 05 Aug 2026 02:29:33 +0000</pubDate>
      <link>https://dev.to/onfinality/best-json-rpc-api-provider-for-blockchain-projects-3cdf</link>
      <guid>https://dev.to/onfinality/best-json-rpc-api-provider-for-blockchain-projects-3cdf</guid>
      <description>&lt;h2&gt;
  
  
  Decision Guide: How to Shortlist a JSON-RPC Provider
&lt;/h2&gt;

&lt;p&gt;Before comparing vendors, define the workload your project actually needs. A simple balance-checking dApp has different requirements than a high-throughput indexer or a trading bot. Start by answering these questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Which chains do you need?&lt;/strong&gt; Multi-chain projects should look for broad network coverage, while single-chain projects can prioritize depth on that chain.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What data access do you require?&lt;/strong&gt; Archive data, trace methods, and WebSocket subscriptions are not available from every provider.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What is your traffic pattern?&lt;/strong&gt; Spiky traffic needs flexible scaling, while steady traffic might benefit from predictable flat-rate pricing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What is your budget?&lt;/strong&gt; Compute-unit pricing can be unpredictable; request-based or flat-rate models are easier to forecast.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once you have these answers, you can filter providers by the criteria below. For a deeper dive into the general selection process, 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;
  
  
  What Is a JSON-RPC API Provider?
&lt;/h2&gt;

&lt;p&gt;A JSON-RPC API provider runs blockchain nodes and exposes them via the JSON-RPC protocol. This lets your application read blockchain state, submit transactions, and subscribe to events without running your own infrastructure. Providers handle node synchronization, uptime, and scaling, so you can focus on building.&lt;/p&gt;

&lt;p&gt;The protocol is standardized across most chains—Ethereum, BNB Chain, Polygon, and many others—but each chain has its own method set and quirks. A good provider abstracts these differences while giving you access to the full method surface.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Evaluation Criteria for JSON-RPC Providers
&lt;/h2&gt;

&lt;p&gt;When comparing providers, focus on these technical and operational factors:&lt;/p&gt;

&lt;h3&gt;
  
  
  Method Support
&lt;/h3&gt;

&lt;p&gt;Not all providers support every JSON-RPC method. For example, &lt;code&gt;trace_*&lt;/code&gt; methods (like &lt;code&gt;trace_block&lt;/code&gt; or &lt;code&gt;trace_transaction&lt;/code&gt;) are essential for debugging and analytics but are resource-intensive and often restricted. Similarly, &lt;code&gt;eth_getLogs&lt;/code&gt; with large block ranges can be limited. Check whether the provider supports the methods your application depends on.&lt;/p&gt;

&lt;h3&gt;
  
  
  Data Access: Archive vs. Full Nodes
&lt;/h3&gt;

&lt;p&gt;Archive nodes store the complete historical state, enabling queries like &lt;code&gt;eth_getBalance&lt;/code&gt; at any past block. Full nodes only keep recent state. If your project needs historical data, you need archive access. Some providers include archive data in higher tiers or as an add-on.&lt;/p&gt;

&lt;h3&gt;
  
  
  WebSocket Support
&lt;/h3&gt;

&lt;p&gt;Real-time applications—like DEXs, trading bots, or notification systems—need WebSocket subscriptions (&lt;code&gt;eth_subscribe&lt;/code&gt;) for push updates. Verify that the provider offers stable WebSocket endpoints and supports the subscription types you need.&lt;/p&gt;

&lt;h3&gt;
  
  
  Rate Limits and Fair Use
&lt;/h3&gt;

&lt;p&gt;Every provider has rate limits, but they vary in transparency. Some use compute units (CUs) that weight methods differently, making costs unpredictable. Others use simple request counts or flat-rate tiers. Understand the limits and how they align with your traffic.&lt;/p&gt;

&lt;h3&gt;
  
  
  Uptime and Reliability
&lt;/h3&gt;

&lt;p&gt;Look for providers with a track record of high availability, but be wary of absolute guarantees. Check if they offer multi-region redundancy and automatic failover. A provider that routes requests across multiple nodes can reduce the impact of individual node failures.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing Model
&lt;/h3&gt;

&lt;p&gt;Pricing models vary widely:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Compute-unit based&lt;/strong&gt;: Each method costs a certain number of CUs. This can be flexible but hard to predict.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Request-based&lt;/strong&gt;: Simple per-request pricing, easier to forecast.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flat-rate tiers&lt;/strong&gt;: Predictable monthly cost for a set of requests or capacity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free tiers&lt;/strong&gt;: Useful for testing and small projects, but often have strict limits.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Choose a model that matches your budget and traffic predictability. For a transparent, request-based approach, check our &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC pricing&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comparing Provider Types: Shared vs. Dedicated
&lt;/h2&gt;

&lt;p&gt;Providers offer two main access modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Shared nodes&lt;/strong&gt;: Multiple customers use the same node. This is cost-effective but can suffer from noisy neighbors and rate limiting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dedicated nodes&lt;/strong&gt;: You get a private node or cluster. This offers better performance, isolation, and customization, but at a higher cost.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For production workloads with high throughput or strict latency requirements, dedicated nodes are often worth the investment. For development or low-traffic apps, shared nodes may suffice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Workload-to-Provider Fit Table
&lt;/h2&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 Provider Type&lt;/th&gt;
&lt;th&gt;Key Requirements&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Simple dApp (balance, transactions)&lt;/td&gt;
&lt;td&gt;Shared node&lt;/td&gt;
&lt;td&gt;Basic methods, low latency&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;High-frequency trading bot&lt;/td&gt;
&lt;td&gt;Dedicated node&lt;/td&gt;
&lt;td&gt;WebSocket, low latency, high throughput&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Indexer / analytics&lt;/td&gt;
&lt;td&gt;Dedicated node&lt;/td&gt;
&lt;td&gt;Archive data, trace methods, high request volume&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-chain wallet&lt;/td&gt;
&lt;td&gt;Shared or dedicated&lt;/td&gt;
&lt;td&gt;Broad network coverage, WebSocket&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NFT marketplace&lt;/td&gt;
&lt;td&gt;Shared or dedicated&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;eth_getLogs&lt;/code&gt;, WebSocket for events&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  How to Test a JSON-RPC Provider Before Committing
&lt;/h2&gt;

&lt;p&gt;Before signing up, run a few practical tests:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Check method coverage&lt;/strong&gt;: Send a request for a method you need, like &lt;code&gt;trace_block&lt;/code&gt;, and see if it returns data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Measure latency&lt;/strong&gt;: Use a script to time requests from your deployment region.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test WebSocket&lt;/strong&gt;: Subscribe to a stream and see if it stays connected under load.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review documentation&lt;/strong&gt;: Clear docs and examples indicate a mature provider.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check support&lt;/strong&gt;: How responsive is their support team? Do they have a status page?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here's a simple curl example to test a JSON-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;-X&lt;/span&gt; POST https://rpc.example.com/v1/chain &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 a more comprehensive test, use a script that sends a mix of read and write calls.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Pitfalls When Choosing a Provider
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ignoring archive needs&lt;/strong&gt;: You might need historical data later; check if the provider offers it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Overlooking WebSocket&lt;/strong&gt;: If your app needs real-time updates, ensure WebSocket is supported.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Underestimating rate limits&lt;/strong&gt;: Read the fine print on rate limits and compute units.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not planning for failover&lt;/strong&gt;: Relying on a single provider is risky. Consider a multi-provider strategy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Choosing based on price alone&lt;/strong&gt;: The cheapest option may lack critical features or reliability.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why OnFinality for JSON-RPC Access?
&lt;/h2&gt;

&lt;p&gt;OnFinality provides a reliable JSON-RPC API service with a focus on transparency and developer experience. We support a wide range of networks—from Ethereum and BNB Chain to Polkadot and Solana—and offer both shared and dedicated node options. Our pricing is request-based, so you can predict your costs without worrying about compute-unit formulas. You can explore our &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;pricing&lt;/a&gt; to see if we fit your project.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;The best JSON-RPC provider depends on your specific workload, chain requirements, and budget.&lt;/li&gt;
&lt;li&gt;Evaluate method support, archive data, WebSocket, rate limits, and pricing model.&lt;/li&gt;
&lt;li&gt;Consider dedicated nodes for high-throughput or latency-sensitive applications.&lt;/li&gt;
&lt;li&gt;Test providers with real requests before committing.&lt;/li&gt;
&lt;li&gt;Plan for failover by using multiple providers or a provider with strong redundancy.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  What is the difference between a JSON-RPC provider and a data API provider?
&lt;/h3&gt;

&lt;p&gt;A JSON-RPC provider gives you raw access to blockchain nodes, allowing you to call any method. A data API provider (like Covalent or Moralis) offers higher-level, indexed data via REST endpoints, which is easier to consume but less flexible.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do I need archive node access?
&lt;/h3&gt;

&lt;p&gt;If your application queries historical state (e.g., balances at past blocks), you need archive access. Otherwise, a full node may suffice.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I handle rate limits?
&lt;/h3&gt;

&lt;p&gt;Understand the provider's rate limit policy and choose a plan that matches your traffic. For spiky traffic, consider a provider with flexible scaling or use multiple providers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use multiple RPC providers?
&lt;/h3&gt;

&lt;p&gt;Yes, many teams use a fallback strategy where a secondary provider handles requests if the primary fails. This improves reliability but requires careful configuration.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is a compute unit?
&lt;/h3&gt;

&lt;p&gt;A compute unit is a measure of the computational cost of a JSON-RPC method. Providers use CUs to price requests, but the exact formula is often opaque. Request-based pricing is more transparent.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I migrate to a new provider?
&lt;/h3&gt;

&lt;p&gt;Migration typically involves updating your RPC endpoint URL in your application configuration. Test thoroughly before switching to avoid downtime.&lt;/p&gt;

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

&lt;ul&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/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/best-json-rpc-api-provider-for-blockchain-projects" 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>Asset Hub Polkadot: RPC Endpoints, Assets, and Smart Contracts</title>
      <dc:creator>OnFinality</dc:creator>
      <pubDate>Wed, 05 Aug 2026 02:29:00 +0000</pubDate>
      <link>https://dev.to/onfinality/asset-hub-polkadot-rpc-endpoints-assets-and-smart-contracts-2jih</link>
      <guid>https://dev.to/onfinality/asset-hub-polkadot-rpc-endpoints-assets-and-smart-contracts-2jih</guid>
      <description>&lt;h2&gt;
  
  
  Quick Recommendation: How to Connect to Asset Hub Polkadot
&lt;/h2&gt;

&lt;p&gt;If you are building an application that needs to read balances, submit transactions, or query asset metadata on Asset Hub Polkadot, the fastest path is to use a managed RPC endpoint. You can start with the public endpoint &lt;code&gt;wss://asset-hub-polkadot-rpc.polkadot.io&lt;/code&gt; for testing, but for production workloads you should evaluate a dedicated or high-tier public RPC provider that offers consistent performance and reliability. OnFinality provides &lt;a href="https://onfinality.io/networks/polkadot" rel="noopener noreferrer"&gt;RPC endpoints for Asset Hub Polkadot&lt;/a&gt; and other Polkadot system chains, with options ranging from free public endpoints to dedicated nodes. Check the &lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;supported networks list&lt;/a&gt; to confirm availability and see &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC pricing&lt;/a&gt; for rate limits and plan details.&lt;/p&gt;

&lt;p&gt;For most developers, the decision comes down to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Prototyping or low-traffic apps&lt;/strong&gt;: Public endpoints are fine, but be aware of rate limits and potential downtime.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production dApps&lt;/strong&gt;: Use a managed provider with multiple endpoints, WebSocket support, and failover capabilities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High-throughput or archival needs&lt;/strong&gt;: Consider a dedicated node to avoid shared resource contention.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Is Asset Hub Polkadot?
&lt;/h2&gt;

&lt;p&gt;Asset Hub Polkadot (formerly known as Statemint) is a system parachain on the Polkadot network. It is designed to provide core functionality for issuing and managing on-chain assets, including fungible tokens, non-fungible tokens (NFTs), and, more recently, smart contracts. While the relay chain (Polkadot) handles security and consensus, Asset Hub focuses on asset logic—minting, burning, transferring, and metadata—efficiently and cost-effectively.&lt;/p&gt;

&lt;p&gt;Key features include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Native asset creation&lt;/strong&gt;: Create and manage tokens with configurable permissions and metadata.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NFT support&lt;/strong&gt;: Mint and transfer non-fungible assets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smart contracts&lt;/strong&gt;: Deploy and interact with smart contracts using the &lt;code&gt;pallet-revive&lt;/code&gt; (formerly &lt;code&gt;pallet-contracts&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;XCM integration&lt;/strong&gt;: Move assets across parachains using cross-consensus messaging.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Low fees&lt;/strong&gt;: Transactions on Asset Hub are typically cheaper than on the relay chain.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After the runtime upgrade to version 2.0.0, Asset Hub also hosts balances, staking, and governance features that previously lived on the relay chain, making it the primary network for everyday Polkadot activity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Use Asset Hub Polkadot?
&lt;/h2&gt;

&lt;p&gt;Asset Hub provides a standardized framework for asset management that is native to the Polkadot ecosystem. Here are the main reasons developers and projects choose it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cost efficiency&lt;/strong&gt;: Creating and transferring assets on Asset Hub is significantly cheaper than on the relay chain.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interoperability&lt;/strong&gt;: Assets issued on Asset Hub can be transferred to other parachains via XCM, enabling cross-chain applications.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smart contract support&lt;/strong&gt;: With the addition of smart contract capabilities, developers can build DeFi, gaming, and other applications directly on Asset Hub.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security&lt;/strong&gt;: As a system parachain, Asset Hub benefits from the same shared security as the relay chain.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;When connecting your application to Asset Hub Polkadot, you need the correct network configuration. Here are the essential details:&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 Polkadot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chain ID&lt;/td&gt;
&lt;td&gt;1000 (para ID)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RPC Endpoint (HTTPS)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://asset-hub-polkadot-rpc.polkadot.io&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RPC Endpoint (WSS)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;wss://asset-hub-polkadot-rpc.polkadot.io&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Token Symbol&lt;/td&gt;
&lt;td&gt;DOT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Token Decimals&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Block Explorer&lt;/td&gt;
&lt;td&gt;&lt;a href="https://assethub-polkadot.subscan.io/" rel="noopener noreferrer"&gt;Subscan&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Note: These are public endpoints. For production, consider using a managed provider like OnFinality, which offers dedicated endpoints with better reliability. Check the &lt;a href="https://onfinality.io/networks/polkadot" rel="noopener noreferrer"&gt;Polkadot network page&lt;/a&gt; for OnFinality's specific endpoints.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connecting to Asset Hub Polkadot with RPC
&lt;/h2&gt;

&lt;p&gt;To interact with Asset Hub Polkadot, you can use JSON-RPC calls. Here's a simple &lt;code&gt;curl&lt;/code&gt; 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;-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_getHeader", "params":[]}'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  https://asset-hub-polkadot-rpc.polkadot.io
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For WebSocket subscriptions (e.g., listening to new blocks), you can use a tool like &lt;code&gt;wscat&lt;/code&gt; or a JavaScript library. Here's an example using the &lt;code&gt;ws&lt;/code&gt; package in Node.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="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://asset-hub-polkadot-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="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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;open&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;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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;incoming&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;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;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;p&gt;For higher-level interaction, you can use the Polkadot.js API. Here's an example of querying the balance of an account:&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://asset-hub-polkadot-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="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;address&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_ADDRESS_HERE&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="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;free&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;}&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;query&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;account&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Free balance:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;free&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;h2&gt;
  
  
  Managing Assets on Asset Hub Polkadot
&lt;/h2&gt;

&lt;p&gt;Asset Hub supports both native and foreign assets. Native assets are issued directly on the parachain, while foreign assets are representations of assets from other chains, managed via XCM.&lt;/p&gt;

&lt;h3&gt;
  
  
  Creating a Fungible Asset
&lt;/h3&gt;

&lt;p&gt;To create a new fungible asset, you need to submit an extrinsic using the &lt;code&gt;assets&lt;/code&gt; pallet. Here's an example using Polkadot.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;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="nx"&gt;Keyring&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;createAsset&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://asset-hub-polkadot-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="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;keyring&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;Keyring&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;sr25519&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;alice&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;keyring&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addFromUri&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;//Alice&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;tx&lt;/span&gt; &lt;span class="o"&gt;=&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;tx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;assets&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="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// asset ID&lt;/span&gt;
    &lt;span class="nx"&gt;alice&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="c1"&gt;// admin&lt;/span&gt;
    &lt;span class="mi"&gt;1000000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// min balance&lt;/span&gt;
    &lt;span class="mi"&gt;100&lt;/span&gt; &lt;span class="c1"&gt;// decimals&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;hash&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;tx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;signAndSend&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;alice&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;Transaction hash:&lt;/span&gt;&lt;span class="dl"&gt;'&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="nf"&gt;toHex&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;createAsset&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;
  
  
  Transferring Assets
&lt;/h3&gt;

&lt;p&gt;Transferring a fungible asset is straightforward:&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;tx&lt;/span&gt; &lt;span class="o"&gt;=&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;tx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;assets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;transfer&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="c1"&gt;// asset ID&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;RECIPIENT_ADDRESS&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="mi"&gt;1000&lt;/span&gt; &lt;span class="c1"&gt;// amount&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  NFTs
&lt;/h3&gt;

&lt;p&gt;Asset Hub also supports NFTs through the &lt;code&gt;uniques&lt;/code&gt; and &lt;code&gt;nfts&lt;/code&gt; pallets. You can mint, transfer, and manage NFTs with similar extrinsics.&lt;/p&gt;

&lt;h2&gt;
  
  
  Smart Contracts on Asset Hub Polkadot
&lt;/h2&gt;

&lt;p&gt;With the introduction of smart contract support, Asset Hub allows developers to deploy Wasm-based smart contracts using the &lt;code&gt;pallet-revive&lt;/code&gt;. This opens up possibilities for building DeFi, gaming, and other applications directly on the network.&lt;/p&gt;

&lt;p&gt;To deploy a contract, you typically use the &lt;code&gt;polkadot.js&lt;/code&gt; UI or a development framework like &lt;code&gt;@polkadot/contracts&lt;/code&gt;. The process involves:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Compile&lt;/strong&gt; your contract to Wasm.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Upload&lt;/strong&gt; the code to the chain.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instantiate&lt;/strong&gt; the contract with initial parameters.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here's a simplified example of uploading contract code using Polkadot.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="nx"&gt;code&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;readFileSync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my_contract.wasm&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;tx&lt;/span&gt; &lt;span class="o"&gt;=&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;tx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;contracts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;upload&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;code&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&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 smart contract support is relatively new, so check the latest runtime documentation for exact APIs and requirements.&lt;/p&gt;

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

&lt;p&gt;When working with Asset Hub Polkadot, developers often encounter these issues:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Incorrect endpoint&lt;/strong&gt;: Using a relay chain endpoint instead of the Asset Hub endpoint. Make sure you are connecting to &lt;code&gt;asset-hub-polkadot&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate limiting&lt;/strong&gt;: Public endpoints may throttle requests. If you hit rate limits, consider upgrading to a paid plan or dedicated node.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WebSocket disconnects&lt;/strong&gt;: For long-running subscriptions, ensure your client handles reconnection logic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Asset ID conflicts&lt;/strong&gt;: When creating assets, choose a unique asset ID to avoid collisions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Existential deposit (ED)&lt;/strong&gt;: Accounts must maintain a minimum balance (ED) to remain active. If an account drops below ED, it may be reaped.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Monitoring and Production Readiness
&lt;/h2&gt;

&lt;p&gt;For production applications, you should monitor your RPC endpoints to ensure they are healthy. Here's a simple health check script 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;-s&lt;/span&gt; &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://asset-hub-polkadot-rpc.polkadot.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":"2.0","method":"system_health","params":[],"id":1}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A healthy response will include &lt;code&gt;"isSyncing": false&lt;/code&gt; and &lt;code&gt;"peers": &amp;gt;0&lt;/code&gt;. If you are using OnFinality, you can also set up uptime monitoring and alerts through your dashboard.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Asset Hub Polkadot is the system parachain for asset management, NFTs, and smart contracts in the Polkadot ecosystem.&lt;/li&gt;
&lt;li&gt;It offers low fees, XCM interoperability, and shared security with the relay chain.&lt;/li&gt;
&lt;li&gt;For development, use the public RPC endpoints; for production, consider a managed provider like OnFinality for reliability and support.&lt;/li&gt;
&lt;li&gt;Common operations include creating and transferring assets, minting NFTs, and deploying smart contracts.&lt;/li&gt;
&lt;li&gt;Always monitor your endpoints and handle rate limits and reconnections gracefully.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  What is the difference between Asset Hub Polkadot and the Polkadot relay chain?
&lt;/h3&gt;

&lt;p&gt;The relay chain provides security and consensus, while Asset Hub handles asset logic and smart contracts. After the migration, Asset Hub also hosts balances, staking, and governance.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I deploy ERC-20 style tokens on Asset Hub Polkadot?
&lt;/h3&gt;

&lt;p&gt;Yes, you can create fungible assets that behave similarly to ERC-20 tokens, but they are native to the Substrate runtime and use the &lt;code&gt;assets&lt;/code&gt; pallet.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I get DOT for transaction fees on Asset Hub?
&lt;/h3&gt;

&lt;p&gt;You need DOT to pay for transaction fees. You can acquire DOT from exchanges or faucets, and then transfer it to your Asset Hub account via XCM or a direct transfer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Asset Hub Polkadot compatible with Ethereum tools?
&lt;/h3&gt;

&lt;p&gt;No, Asset Hub is a Substrate-based chain, so it uses Polkadot.js and Substrate APIs. However, with smart contract support, you can use Wasm-based contracts, which are different from EVM contracts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where can I find the official documentation for Asset Hub?
&lt;/h3&gt;

&lt;p&gt;Refer to the &lt;a href="https://docs.polkadot.com/reference/polkadot-hub/assets/" rel="noopener noreferrer"&gt;Polkadot Developer Docs&lt;/a&gt; and the &lt;a href="https://wiki.polkadot.com/learn/learn-assets/" rel="noopener noreferrer"&gt;Polkadot Wiki&lt;/a&gt; for detailed information.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I choose between public and dedicated RPC endpoints?
&lt;/h3&gt;

&lt;p&gt;For production apps with high traffic, dedicated endpoints offer better performance and reliability. Evaluate your workload, rate limits, and budget. OnFinality offers flexible &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC pricing&lt;/a&gt; and &lt;a href="https://onfinality.io/dedicated-node" rel="noopener noreferrer"&gt;dedicated node&lt;/a&gt; options.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/networks/polkadot" rel="noopener noreferrer"&gt;Polkadot RPC Endpoints&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/rpc-assistant/kusama-asset-hub-guide" rel="noopener noreferrer"&gt;Kusama Asset Hub Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/rpc-assistant/polkadot-rpc-provider" rel="noopener noreferrer"&gt;Polkadot RPC Provider Selection&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;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/asset-hub-polkadot" rel="noopener noreferrer"&gt;OnFinality&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>web3</category>
      <category>blockchain</category>
      <category>polkadot</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Dedicated Web3 Servers: When to Rent Infrastructure Instead of Running It</title>
      <dc:creator>OnFinality</dc:creator>
      <pubDate>Wed, 05 Aug 2026 02:28:27 +0000</pubDate>
      <link>https://dev.to/onfinality/dedicated-web3-servers-when-to-rent-infrastructure-instead-of-running-it-2c5b</link>
      <guid>https://dev.to/onfinality/dedicated-web3-servers-when-to-rent-infrastructure-instead-of-running-it-2c5b</guid>
      <description>&lt;h2&gt;
  
  
  Decision guide: bare metal, cloud VM, or managed node service?
&lt;/h2&gt;

&lt;p&gt;Before you compare hardware specs, decide which operational model fits your team. The choice usually comes down to three options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bare metal dedicated servers&lt;/strong&gt; give you a physical machine with full root access, custom networking, and predictable performance. You handle OS updates, node software, monitoring, and failover yourself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud VMs&lt;/strong&gt; (AWS, GCP, etc.) offer flexible scaling and lower upfront cost, but shared hypervisors and variable network performance can affect node sync and RPC latency.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Managed node services&lt;/strong&gt; (like OnFinality's &lt;a href="https://onfinality.io/dedicated-node" rel="noopener noreferrer"&gt;dedicated node&lt;/a&gt; offering) abstract away server management, patching, and scaling. You get a dedicated RPC endpoint without operating the hardware.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A quick heuristic: if you're running a validator or need low-level hardware control, bare metal is often the right fit. If you're building a dApp and just need reliable RPC access, a managed service saves significant engineering time. If you need both, you can run your own infrastructure for critical components and use a managed service for public-facing RPC.&lt;/p&gt;

&lt;h2&gt;
  
  
  What counts as a dedicated Web3 server?
&lt;/h2&gt;

&lt;p&gt;A dedicated Web3 server is a single-tenant physical machine provisioned specifically for blockchain workloads. Unlike shared hosting, you get the entire CPU, RAM, storage, and network bandwidth. This matters for several reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Consistent performance&lt;/strong&gt;: No noisy neighbors competing for resources.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full control&lt;/strong&gt;: You can install custom kernels, tune network stacks, and configure firewalls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compliance and security&lt;/strong&gt;: Some teams need to keep validator keys in a specific jurisdiction or on hardware they control.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Typical workloads include running full nodes, validator clients, indexers, and RPC endpoints. The hardware requirements vary by chain. For example, a Solana validator needs high clock speeds and fast NVMe storage, while an Ethereum archive node requires terabytes of SSD and large RAM.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build-versus-buy tradeoffs
&lt;/h2&gt;

&lt;p&gt;Running your own dedicated server gives you maximum flexibility, but it comes with hidden costs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Time to maintain&lt;/strong&gt;: You're responsible for OS patches, node software upgrades, and security hardening.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scaling&lt;/strong&gt;: Adding capacity means ordering new hardware or provisioning new servers, which can take days.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Geographic distribution&lt;/strong&gt;: To reduce latency and improve decentralization, you may need servers in multiple regions, increasing complexity.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Managed services shift these burdens to a provider. OnFinality, for example, offers &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC pricing&lt;/a&gt; that includes free tier options and dedicated nodes that are provisioned quickly. You trade some control for operational simplicity.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to look for in a dedicated Web3 server provider
&lt;/h2&gt;

&lt;p&gt;If you decide to rent bare metal, evaluate providers on these 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;Network quality&lt;/td&gt;
&lt;td&gt;Bandwidth, peering, DDoS protection&lt;/td&gt;
&lt;td&gt;Node sync and RPC latency depend on network path&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hardware specs&lt;/td&gt;
&lt;td&gt;CPU generation, RAM, NVMe vs SATA&lt;/td&gt;
&lt;td&gt;Blockchain workloads are I/O and compute intensive&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Location&lt;/td&gt;
&lt;td&gt;Data center regions&lt;/td&gt;
&lt;td&gt;Proximity to other nodes and users reduces latency&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Support&lt;/td&gt;
&lt;td&gt;24/7 availability, response time&lt;/td&gt;
&lt;td&gt;Downtime during a chain fork can be costly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pricing model&lt;/td&gt;
&lt;td&gt;Flat vs metered bandwidth&lt;/td&gt;
&lt;td&gt;Predictable costs avoid egress surprises&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Some providers specialize in Web3 and offer pre-configured node images. Others are general-purpose hosting companies. The right choice depends on your technical expertise and operational needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  When a managed node service makes more sense
&lt;/h2&gt;

&lt;p&gt;For many teams, especially those building dApps or indexers, a managed node service is more practical than renting dedicated servers. Here's why:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Faster time to market&lt;/strong&gt;: You can get an RPC endpoint in minutes, not days.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatic scaling&lt;/strong&gt;: Providers handle traffic spikes without you provisioning new hardware.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in monitoring and failover&lt;/strong&gt;: You don't have to build your own alerting and redundancy.&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&lt;/a&gt; service gives you a private RPC endpoint with dedicated resources, while the &lt;a href="https://onfinality.io/api-service" rel="noopener noreferrer"&gt;public API service&lt;/a&gt; offers shared endpoints for testing and low-traffic apps. You can start with a free tier and upgrade as you grow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example: connecting to a dedicated RPC endpoint
&lt;/h2&gt;

&lt;p&gt;Once you have a dedicated RPC endpoint, you can use it like any other JSON-RPC URL. Here's a simple curl example to check the latest block number on an Ethereum-compatible chain:&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://your-dedicated-endpoint.example.com &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;In a JavaScript dApp using ethers.js, you can set the provider like this:&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://your-dedicated-endpoint.example.com&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;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;h2&gt;
  
  
  Common pitfalls when running your own node
&lt;/h2&gt;

&lt;p&gt;Even with dedicated hardware, you can run into issues:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Insufficient storage&lt;/strong&gt;: Archive nodes grow quickly. Plan for 2-3x the current chain size.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Network misconfiguration&lt;/strong&gt;: Firewall rules that block peer-to-peer ports can prevent sync.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Underpowered CPU&lt;/strong&gt;: Some chains require high single-thread performance for block validation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lack of monitoring&lt;/strong&gt;: Without alerts, you may not notice a stalled node until users complain.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Monitoring your dedicated server
&lt;/h2&gt;

&lt;p&gt;Set up basic monitoring to catch problems early. A simple script can check if your node is responding:&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;ENDPOINT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"http://localhost:8545"&lt;/span&gt;
&lt;span class="k"&gt;if &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;$ENDPOINT&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;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;"Node 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;"Node is down"&lt;/span&gt;
  &lt;span class="c"&gt;# Send alert via Slack, PagerDuty, etc.&lt;/span&gt;
&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;ul&gt;
&lt;li&gt;Dedicated Web3 servers provide predictable performance and control for blockchain workloads.&lt;/li&gt;
&lt;li&gt;Evaluate build-versus-buy tradeoffs: bare metal requires significant operational overhead.&lt;/li&gt;
&lt;li&gt;Managed node services like OnFinality can reduce time-to-market and simplify scaling.&lt;/li&gt;
&lt;li&gt;When choosing a provider, compare network quality, hardware specs, location, and support.&lt;/li&gt;
&lt;li&gt;Always monitor your node health and plan for storage growth.&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 a dedicated server and a cloud VM?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A dedicated server is a physical machine exclusively for your use, while a cloud VM shares underlying hardware with other tenants. Dedicated servers offer more consistent performance and control.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need a dedicated server to run a blockchain node?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not necessarily. Many nodes run fine on cloud VMs, but dedicated servers are recommended for validators or high-traffic RPC endpoints where performance and reliability are critical.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I use a managed node service instead of renting a dedicated server?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes. Managed services like OnFinality provide dedicated RPC endpoints without you having to manage hardware. This is often the best choice for dApp developers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How much does a dedicated Web3 server cost?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Costs vary widely based on hardware specs and provider. Entry-level servers start around $100-200 per month, while high-end configurations can exceed $1000. Managed node services often have usage-based pricing with free tiers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What chains can I run on a dedicated server?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most major blockchains can be run on dedicated hardware. OnFinality supports a wide range of networks; see the &lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;supported networks&lt;/a&gt; page for details.&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 RPC networks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/dedicated-node" rel="noopener noreferrer"&gt;Dedicated node service&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;/ul&gt;

&lt;p&gt;Originally published at &lt;a href="https://onfinality.io/en/rpc-assistant/dedicated-web3-servers" 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>Dedicated TON Node: When to Use One and How to Choose</title>
      <dc:creator>OnFinality</dc:creator>
      <pubDate>Wed, 05 Aug 2026 02:27:55 +0000</pubDate>
      <link>https://dev.to/onfinality/dedicated-ton-node-when-to-use-one-and-how-to-choose-mkg</link>
      <guid>https://dev.to/onfinality/dedicated-ton-node-when-to-use-one-and-how-to-choose-mkg</guid>
      <description>&lt;h2&gt;
  
  
  Quick recommendation: Do you need a dedicated TON node?
&lt;/h2&gt;

&lt;p&gt;Before diving into setup and provider details, decide whether a dedicated node is the right investment for your project. A dedicated TON node gives you a single-tenant instance with your own RPC endpoint, but it also means you take on more operational responsibility and cost.&lt;/p&gt;

&lt;p&gt;Consider a dedicated node if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your application has sustained traffic that regularly hits shared endpoint rate limits.&lt;/li&gt;
&lt;li&gt;You need low-latency access for time-sensitive operations like trading or gaming.&lt;/li&gt;
&lt;li&gt;You require custom node configuration, such as archive mode or specific ADNL settings.&lt;/li&gt;
&lt;li&gt;You want to avoid noisy-neighbor effects from other users on shared infrastructure.&lt;/li&gt;
&lt;li&gt;You need predictable performance for production SLAs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your project is still in development or has modest traffic, a shared RPC endpoint may be sufficient. OnFinality offers both shared and dedicated options, so you can start with a shared endpoint and upgrade as your needs grow. Check the &lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;supported RPC networks&lt;/a&gt; page to see TON availability.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a dedicated TON node?
&lt;/h2&gt;

&lt;p&gt;A dedicated TON node is a full node that runs exclusively for your project. Unlike shared nodes, where multiple users share the same compute resources, a dedicated node is isolated, giving you full control over the node's configuration and performance.&lt;/p&gt;

&lt;p&gt;TON nodes come in different modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Full node&lt;/strong&gt;: Stores the latest blockchain state and serves data to lite-clients. It prunes older blocks to manage storage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Archive node&lt;/strong&gt;: Stores the entire blockchain history, including old blocks and states. Required for explorers and analytics services.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validator node&lt;/strong&gt;: Participates in consensus and block production. Usually not needed for RPC purposes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For most RPC use cases, a full node or archive node is what you need. A dedicated node gives you a private endpoint that you can use for your dApp, wallet, or backend service.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dedicated vs shared TON nodes: What's the difference?
&lt;/h2&gt;

&lt;p&gt;The main difference between dedicated and shared nodes is resource isolation. With a shared node, you share CPU, memory, and network bandwidth with other users. This can lead to performance variability and rate limits. A dedicated node gives you exclusive access to the hardware, so you get consistent performance and clear rate limits (within the hardware's capacity).&lt;/p&gt;

&lt;p&gt;Here's a quick comparison:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;Shared Node&lt;/th&gt;
&lt;th&gt;Dedicated Node&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Resource isolation&lt;/td&gt;
&lt;td&gt;Shared with others&lt;/td&gt;
&lt;td&gt;Exclusive to you&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rate limits&lt;/td&gt;
&lt;td&gt;Common&lt;/td&gt;
&lt;td&gt;clear rate limits (hardware-bound)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performance&lt;/td&gt;
&lt;td&gt;Variable&lt;/td&gt;
&lt;td&gt;Consistent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Configuration&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;Full control&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost&lt;/td&gt;
&lt;td&gt;Lower&lt;/td&gt;
&lt;td&gt;Higher&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Operational effort&lt;/td&gt;
&lt;td&gt;Provider handles&lt;/td&gt;
&lt;td&gt;More responsibility&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  How to evaluate a dedicated TON node provider
&lt;/h2&gt;

&lt;p&gt;When choosing a provider for a dedicated TON node, consider the following criteria:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Node type&lt;/strong&gt;: Does the provider offer full, archive, and validator nodes? Do you need archive mode for historical data?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protocol support&lt;/strong&gt;: TON uses ADNL (Abstract Datagram Network Layer) for low-level communication. Does the provider support ADNL in addition to the standard HTTP API?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hardware specifications&lt;/strong&gt;: What CPU, RAM, and storage are allocated? NVMe storage is important for fast state access.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Geographic location&lt;/strong&gt;: Where are the data centers? Choose a location close to your users to reduce latency.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Support and maintenance&lt;/strong&gt;: Who handles node updates, monitoring, and troubleshooting? Direct engineering access can be valuable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pricing model&lt;/strong&gt;: Is it a flat monthly fee or usage-based? Are there overage charges?&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 isolated infrastructure with flexible configuration. You can also compare pricing on the &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC pricing&lt;/a&gt; page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting up a dedicated TON node: What to expect
&lt;/h2&gt;

&lt;p&gt;Setting up a dedicated TON node involves several steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Choose your node type&lt;/strong&gt;: Decide between full, archive, or validator.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Select a provider&lt;/strong&gt;: Pick a provider that meets your requirements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Provision the node&lt;/strong&gt;: The provider deploys the node on dedicated hardware.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sync the blockchain&lt;/strong&gt;: The node downloads and verifies the blockchain state. This can take hours or days depending on the mode.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Configure access&lt;/strong&gt;: Set up your RPC endpoint, API keys, and security settings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor and maintain&lt;/strong&gt;: Keep the node updated and monitor its health.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Many providers offer managed dedicated nodes, where they handle the setup and maintenance for you. This can save time and reduce operational overhead.&lt;/p&gt;

&lt;h2&gt;
  
  
  TON RPC endpoint example
&lt;/h2&gt;

&lt;p&gt;Once your dedicated node is running, you can interact with it using standard JSON-RPC calls. Here's an example using curl to get the latest block:&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://your-dedicated-endpoint.ton &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;'{
  "jsonrpc": "2.0",
  "method": "ton_getBlock",
  "params": [{"workchain": -1, "shard": -9223372036854775808, "seqno": 123}],
  "id": 1
}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note that TON's RPC methods differ from Ethereum's. You'll use methods like &lt;code&gt;ton_getBlock&lt;/code&gt;, &lt;code&gt;ton_getTransaction&lt;/code&gt;, and &lt;code&gt;ton_sendMessage&lt;/code&gt;. For a full list, refer to the TON documentation.&lt;/p&gt;

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

&lt;p&gt;Running a dedicated TON node comes with its own challenges:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sync issues&lt;/strong&gt;: If your node falls behind, it may take time to catch up. Ensure you have enough storage and bandwidth.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ADNL configuration&lt;/strong&gt;: ADNL is a low-level protocol that requires careful setup. If you're not familiar, consider using a provider that supports it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate limiting&lt;/strong&gt;: Even with a dedicated node, your provider may impose limits. Clarify this before signing up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintenance windows&lt;/strong&gt;: Providers may schedule maintenance that could affect availability. Ask about their policies.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you encounter issues, check the node logs and ensure your configuration matches the provider's recommendations.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;A dedicated TON node provides exclusive resources and a private RPC endpoint, ideal for production workloads.&lt;/li&gt;
&lt;li&gt;Choose between full, archive, and validator nodes based on your use case.&lt;/li&gt;
&lt;li&gt;Evaluate providers on hardware, protocol support, location, and support.&lt;/li&gt;
&lt;li&gt;Managed dedicated nodes can reduce operational burden.&lt;/li&gt;
&lt;li&gt;Always clarify rate limits and maintenance policies before committing.&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 a full node and an archive node on TON?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A full node stores the latest blockchain state and prunes older blocks, while an archive node stores the entire history. Archive nodes are needed for explorers and historical data queries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need a dedicated TON node for a small dApp?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Probably not. Shared endpoints are often sufficient for development and low-traffic applications. You can upgrade to a dedicated node when your traffic grows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I run a TON validator node as an RPC endpoint?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes, but validator nodes have additional responsibilities and may not be optimized for RPC serving. It's usually better to run a separate full node for RPC.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How long does it take to sync a TON archive node?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sync time varies based on hardware and network conditions. It can take several days for an archive node. Providers may offer snapshots to speed up the process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is ADNL and why is it important for TON?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ADNL (Abstract Datagram Network Layer) is a secure, low-level communication protocol used by TON. Some advanced use cases require ADNL support, so check if your provider offers it.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/networks/ton" rel="noopener noreferrer"&gt;TON Network RPC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/dedicated-node" rel="noopener noreferrer"&gt;Dedicated Node Service&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/dedicated-ton-node" rel="noopener noreferrer"&gt;OnFinality&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>web3</category>
      <category>blockchain</category>
      <category>ton</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Arbitrum RPC Endpoint: Chain Settings and How to Connect</title>
      <dc:creator>OnFinality</dc:creator>
      <pubDate>Wed, 05 Aug 2026 02:27:22 +0000</pubDate>
      <link>https://dev.to/onfinality/arbitrum-rpc-endpoint-chain-settings-and-how-to-connect-45m4</link>
      <guid>https://dev.to/onfinality/arbitrum-rpc-endpoint-chain-settings-and-how-to-connect-45m4</guid>
      <description>&lt;h2&gt;
  
  
  Quick reference: Arbitrum RPC endpoints and chain settings
&lt;/h2&gt;

&lt;p&gt;If you just need the endpoint and chain details to configure a wallet or start coding, here is the short version. The official public RPC endpoints are rate-limited and do not support WebSocket, so they are fine for prototyping but not for production traffic.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Network&lt;/th&gt;
&lt;th&gt;RPC URL&lt;/th&gt;
&lt;th&gt;Chain ID&lt;/th&gt;
&lt;th&gt;Explorer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Arbitrum One&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://arb1.arbitrum.io/rpc&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;42161&lt;/td&gt;
&lt;td&gt;&lt;a href="https://arbiscan.io" rel="noopener noreferrer"&gt;Arbiscan&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Arbitrum Nova&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://nova.arbitrum.io/rpc&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;42170&lt;/td&gt;
&lt;td&gt;&lt;a href="https://nova.arbiscan.io" rel="noopener noreferrer"&gt;Nova Explorer&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Arbitrum Sepolia (testnet)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://sepolia-rollup.arbitrum.io/rpc&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;421614&lt;/td&gt;
&lt;td&gt;&lt;a href="https://sepolia.arbiscan.io" rel="noopener noreferrer"&gt;Sepolia Arbiscan&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For production applications, you will typically use a managed RPC provider that offers higher rate limits, WebSocket support, and archive data. OnFinality provides &lt;a href="https://onfinality.io/networks/arbitrum" rel="noopener noreferrer"&gt;RPC endpoints for Arbitrum&lt;/a&gt; and other networks, with &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;pricing&lt;/a&gt; that scales with your usage.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to connect to Arbitrum with curl
&lt;/h2&gt;

&lt;p&gt;Arbitrum is EVM-compatible, so you can use standard JSON-RPC methods. Here is a quick &lt;code&gt;curl&lt;/code&gt; 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 https://arb1.arbitrum.io/rpc &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;You should get a response like:&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="nl"&gt;"jsonrpc"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"2.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&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="nl"&gt;"result"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"0x1d4c4b"&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;The result is a hex-encoded block number. Convert it to decimal to get the current block height.&lt;/p&gt;

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

&lt;p&gt;Most developers use a library like ethers.js or viem. Here is an example with ethers v6:&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://arb1.arbitrum.io/rpc&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="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, you can create a public client:&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="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;arbitrum&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/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;arbitrum&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="s2"&gt;https://arb1.arbitrum.io/rpc&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;
  
  
  Adding Arbitrum to MetaMask or other wallets
&lt;/h2&gt;

&lt;p&gt;If you want to add Arbitrum One to MetaMask manually, use these settings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Network Name&lt;/strong&gt;: Arbitrum One&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;New RPC URL&lt;/strong&gt;: &lt;code&gt;https://arb1.arbitrum.io/rpc&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chain ID&lt;/strong&gt;: &lt;code&gt;42161&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Currency Symbol&lt;/strong&gt;: &lt;code&gt;ETH&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Block Explorer URL&lt;/strong&gt;: &lt;code&gt;https://arbiscan.io&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For Arbitrum Nova, use chain ID &lt;code&gt;42170&lt;/code&gt; and explorer &lt;code&gt;https://nova.arbiscan.io&lt;/code&gt;. For Arbitrum Sepolia, use chain ID &lt;code&gt;421614&lt;/code&gt; and explorer &lt;code&gt;https://sepolia.arbiscan.io&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Official public endpoints vs. managed providers
&lt;/h2&gt;

&lt;p&gt;The official public RPC endpoints are operated by the Arbitrum team and are free to use. However, they have limitations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No WebSocket support&lt;/strong&gt;: The public endpoints do not support &lt;code&gt;wss://&lt;/code&gt; connections. If your dApp needs real-time updates, you need a provider that offers WebSocket.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate limits&lt;/strong&gt;: Public endpoints are shared and can be throttled under heavy load.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No archive data&lt;/strong&gt;: They only serve recent state. If you need historical state, you need an archive node.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sequencer endpoint&lt;/strong&gt;: The sequencer endpoint (&lt;code&gt;https://arb1-sequencer.arbitrum.io/rpc&lt;/code&gt;) only supports &lt;code&gt;eth_sendRawTransaction&lt;/code&gt; and &lt;code&gt;eth_sendRawTransactionConditional&lt;/code&gt;. It is not a general-purpose RPC endpoint.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For production, you should use a managed RPC provider that offers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Higher rate limits and dedicated throughput&lt;/li&gt;
&lt;li&gt;WebSocket support for subscriptions&lt;/li&gt;
&lt;li&gt;Archive data and trace methods&lt;/li&gt;
&lt;li&gt;Global edge caching for low latency&lt;/li&gt;
&lt;li&gt;Failover and redundancy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;OnFinality provides &lt;a href="https://onfinality.io/networks/arbitrum" rel="noopener noreferrer"&gt;Arbitrum RPC endpoints&lt;/a&gt; as part of its &lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;supported networks&lt;/a&gt;, with flexible &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;pricing&lt;/a&gt; for both shared and dedicated nodes.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to choose an Arbitrum RPC provider
&lt;/h2&gt;

&lt;p&gt;When evaluating an RPC provider for Arbitrum, consider these 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;Rate limits&lt;/td&gt;
&lt;td&gt;Requests per second (RPS) and daily quota&lt;/td&gt;
&lt;td&gt;Determines if your app can handle peak traffic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WebSocket support&lt;/td&gt;
&lt;td&gt;Does the provider offer &lt;code&gt;wss://&lt;/code&gt; endpoints?&lt;/td&gt;
&lt;td&gt;Needed for real-time data and subscriptions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Archive data&lt;/td&gt;
&lt;td&gt;Does the provider offer archive nodes?&lt;/td&gt;
&lt;td&gt;Required for historical queries and analytics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Trace methods&lt;/td&gt;
&lt;td&gt;Does the provider support &lt;code&gt;debug_traceTransaction&lt;/code&gt;?&lt;/td&gt;
&lt;td&gt;Needed for debugging and indexing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Global coverage&lt;/td&gt;
&lt;td&gt;Are there endpoints in multiple regions?&lt;/td&gt;
&lt;td&gt;Reduces latency for users worldwide&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Uptime SLA&lt;/td&gt;
&lt;td&gt;What is the reliability expectations?&lt;/td&gt;
&lt;td&gt;Ensures reliability for production apps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pricing model&lt;/td&gt;
&lt;td&gt;Pay-as-you-go vs. subscription&lt;/td&gt;
&lt;td&gt;Affects cost predictability&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For a deeper dive, see our guide on &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;/p&gt;

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

&lt;h3&gt;
  
  
  1. Using the sequencer endpoint for general queries
&lt;/h3&gt;

&lt;p&gt;The sequencer endpoint only accepts transaction submission. If you call &lt;code&gt;eth_call&lt;/code&gt; or &lt;code&gt;eth_getBalance&lt;/code&gt; on it, you will get an error. Use the regular RPC endpoint for reads.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. WebSocket not supported on public endpoint
&lt;/h3&gt;

&lt;p&gt;If you try to connect via &lt;code&gt;wss://arb1.arbitrum.io/rpc&lt;/code&gt;, it will fail. Use a provider that supports WebSocket, or poll the HTTP endpoint instead.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Rate limiting
&lt;/h3&gt;

&lt;p&gt;If you get &lt;code&gt;429 Too Many Requests&lt;/code&gt;, you are hitting the rate limit. Consider upgrading to a paid plan or using a dedicated node.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Chain ID mismatch
&lt;/h3&gt;

&lt;p&gt;Make sure your wallet or dApp uses the correct chain ID: &lt;code&gt;42161&lt;/code&gt; for Arbitrum One, &lt;code&gt;42170&lt;/code&gt; for Nova, &lt;code&gt;421614&lt;/code&gt; for Sepolia. A mismatch will cause transactions to be rejected.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Gas estimation issues
&lt;/h3&gt;

&lt;p&gt;Arbitrum uses a different gas model than Ethereum. Use &lt;code&gt;eth_estimateGas&lt;/code&gt; with the appropriate parameters, and be aware that L1 data fees are included in the gas price.&lt;/p&gt;

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

&lt;p&gt;To ensure your dApp stays healthy, monitor your RPC endpoint's latency and error rate. You can use a simple script to check the latest block number periodically:&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="k"&gt;while &lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
  &lt;/span&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://arb1.arbitrum.io/rpc &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="se"&gt;\&lt;/span&gt;
    | jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'.result'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    | xargs &lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s2"&gt;"Block: %d&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
  &lt;span class="nb"&gt;sleep &lt;/span&gt;10
&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the block number does not increase over time, your endpoint may be stale. Consider using a provider with failover.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;The official Arbitrum RPC endpoints are &lt;code&gt;https://arb1.arbitrum.io/rpc&lt;/code&gt; (One), &lt;code&gt;https://nova.arbitrum.io/rpc&lt;/code&gt; (Nova), and &lt;code&gt;https://sepolia-rollup.arbitrum.io/rpc&lt;/code&gt; (Sepolia).&lt;/li&gt;
&lt;li&gt;Public endpoints are rate-limited and do not support WebSocket, so they are not suitable for production.&lt;/li&gt;
&lt;li&gt;Use a managed provider like OnFinality for higher rate limits, WebSocket, archive data, and reliability.&lt;/li&gt;
&lt;li&gt;Always verify the chain ID and use the correct endpoint for the network you intend to interact with.&lt;/li&gt;
&lt;/ul&gt;

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

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

&lt;p&gt;The Arbitrum RPC endpoint is a URL that allows wallets and dApps to communicate with the Arbitrum blockchain via JSON-RPC. The mainnet endpoint is &lt;code&gt;https://arb1.arbitrum.io/rpc&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Arbitrum support WebSocket?
&lt;/h3&gt;

&lt;p&gt;The official public RPC does not support WebSocket. You need a third-party provider that offers WebSocket endpoints, such as OnFinality.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I get an Arbitrum RPC URL?
&lt;/h3&gt;

&lt;p&gt;You can use the public endpoint &lt;code&gt;https://arb1.arbitrum.io/rpc&lt;/code&gt; for testing, or sign up for a managed provider to get a private endpoint with higher limits.&lt;/p&gt;

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

&lt;p&gt;The chain ID for Arbitrum One is &lt;code&gt;42161&lt;/code&gt;. For Arbitrum Nova it is &lt;code&gt;42170&lt;/code&gt;, and for Arbitrum Sepolia it is &lt;code&gt;421614&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use the sequencer endpoint for general RPC calls?
&lt;/h3&gt;

&lt;p&gt;No, the sequencer endpoint only supports &lt;code&gt;eth_sendRawTransaction&lt;/code&gt; and &lt;code&gt;eth_sendRawTransactionConditional&lt;/code&gt;. Use the regular RPC endpoint for other methods.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/networks/arbitrum" rel="noopener noreferrer"&gt;Arbitrum 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/arbitrum-rpc-endpoint" rel="noopener noreferrer"&gt;OnFinality&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>web3</category>
      <category>blockchain</category>
      <category>arbitrum</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Abstract RPC Provider: How to Evaluate and Choose</title>
      <dc:creator>OnFinality</dc:creator>
      <pubDate>Wed, 05 Aug 2026 02:26:49 +0000</pubDate>
      <link>https://dev.to/onfinality/abstract-rpc-provider-how-to-evaluate-and-choose-1nlf</link>
      <guid>https://dev.to/onfinality/abstract-rpc-provider-how-to-evaluate-and-choose-1nlf</guid>
      <description>&lt;h2&gt;
  
  
  Quick recommendation: what to check before picking an Abstract RPC provider
&lt;/h2&gt;

&lt;p&gt;If you are evaluating an Abstract RPC provider, the first thing to decide is whether you need a shared public endpoint or a dedicated node. Public endpoints are fine for prototyping and light usage, but production apps usually need a provider that offers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reliable uptime&lt;/strong&gt; with load balancing across multiple nodes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Support for Ethereum JSON-RPC plus zkSync-specific methods&lt;/strong&gt; like &lt;code&gt;eth_sendRawTransaction&lt;/code&gt; with paymaster params.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WebSocket support&lt;/strong&gt; for real-time subscriptions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Archive data&lt;/strong&gt; if you need historical state or want to run indexers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clear rate limits and pricing&lt;/strong&gt; that match your traffic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Start by testing the provider's endpoint with your actual workload. Use the network page at &lt;a href="https://onfinality.io/networks/abstract" rel="noopener noreferrer"&gt;Abstract network&lt;/a&gt; to get an endpoint and run a few calls. Then compare providers on the criteria below.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Abstract and why does it need a special RPC provider?
&lt;/h2&gt;

&lt;p&gt;Abstract is a zero-knowledge rollup Layer 2 built on zkSync's ZK Stack, designed for consumer crypto applications. It inherits Ethereum's security while offering lower fees and faster transactions. It also features native account abstraction through the Abstract Global Wallet (AGW), letting users interact with apps using email or social logins.&lt;/p&gt;

&lt;p&gt;Because Abstract is an EVM-compatible rollup, it exposes the standard Ethereum JSON-RPC interface, but it also adds zkSync-specific methods for things like paymasters and transaction batching. A good Abstract RPC provider must support both sets of methods.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to evaluate an Abstract RPC provider
&lt;/h2&gt;

&lt;p&gt;When comparing providers, focus on 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;Network coverage&lt;/td&gt;
&lt;td&gt;Mainnet and testnet (Sepolia) support&lt;/td&gt;
&lt;td&gt;You need both for development and production&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API compatibility&lt;/td&gt;
&lt;td&gt;Full Ethereum JSON-RPC + zkSync methods&lt;/td&gt;
&lt;td&gt;Missing methods break your dApp&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performance&lt;/td&gt;
&lt;td&gt;Latency, throughput, and rate limits&lt;/td&gt;
&lt;td&gt;Slow or throttled endpoints degrade user experience&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reliability&lt;/td&gt;
&lt;td&gt;Uptime history, redundancy, failover&lt;/td&gt;
&lt;td&gt;Downtime means lost transactions and users&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data availability&lt;/td&gt;
&lt;td&gt;Archive data, trace support&lt;/td&gt;
&lt;td&gt;Needed for indexers, analytics, and debugging&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WebSocket support&lt;/td&gt;
&lt;td&gt;WSS endpoints for subscriptions&lt;/td&gt;
&lt;td&gt;Essential for real-time features&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pricing model&lt;/td&gt;
&lt;td&gt;Pay-as-you-go vs. subscription&lt;/td&gt;
&lt;td&gt;Must match your budget and traffic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Support&lt;/td&gt;
&lt;td&gt;Documentation, community, SLAs&lt;/td&gt;
&lt;td&gt;Helps you resolve issues quickly&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Abstract network details at a glance
&lt;/h2&gt;

&lt;p&gt;Here are the key network parameters you'll need to configure your wallet or dApp:&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;Mainnet&lt;/th&gt;
&lt;th&gt;Testnet&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;Abstract Mainnet&lt;/td&gt;
&lt;td&gt;Abstract Testnet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chain ID&lt;/td&gt;
&lt;td&gt;2741&lt;/td&gt;
&lt;td&gt;11124&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;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://abscan.org/" rel="noopener noreferrer"&gt;Abscan&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://explorer.testnet.abs.xyz/" rel="noopener noreferrer"&gt;Testnet explorer&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

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

&lt;p&gt;You can connect to Abstract using any Ethereum-compatible library. 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="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://rpc.example.com/abstract&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 WebSocket subscription, use:&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;wsProvider&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://rpc.example.com/abstract&lt;/span&gt;&lt;span class="dl"&gt;"&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="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;h2&gt;
  
  
  What methods does an Abstract RPC provider need to support?
&lt;/h2&gt;

&lt;p&gt;Beyond standard Ethereum methods, you should verify support for zkSync-specific methods:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;eth_sendRawTransaction&lt;/code&gt; with paymaster parameters&lt;/li&gt;
&lt;li&gt;&lt;code&gt;zks_getConfirmedTokens&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;zks_getBridgeContracts&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;zks_estimateFee&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check the provider's documentation to confirm they support these.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common pitfalls when using an Abstract RPC provider
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Using the wrong chain ID&lt;/strong&gt; – Double-check that you're using 2741 for mainnet and 11124 for testnet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ignoring rate limits&lt;/strong&gt; – Public endpoints often have strict limits; use a provider with higher limits for production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not handling WebSocket reconnections&lt;/strong&gt; – Implement reconnection logic to avoid missed events.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Assuming archive data is included&lt;/strong&gt; – Archive access is often a paid add-on.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to test an Abstract RPC provider
&lt;/h2&gt;

&lt;p&gt;Before committing, run a simple load test to see how the provider handles concurrent requests. You can use a tool like &lt;code&gt;hey&lt;/code&gt; or a custom script. Here's a basic curl example:&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://rpc.example.com/abstract &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;Monitor response times and error rates. Also test WebSocket connections for stability.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to consider a dedicated Abstract node
&lt;/h2&gt;

&lt;p&gt;If your application has high traffic, requires low latency, or needs custom configuration, a dedicated node might be better. Dedicated nodes offer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Isolated resources&lt;/strong&gt; – No noisy neighbors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom settings&lt;/strong&gt; – You can tune the node for your use case.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Higher rate limits&lt;/strong&gt; – No shared throttling.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;OnFinality offers &lt;a href="https://onfinality.io/dedicated-node" rel="noopener noreferrer"&gt;dedicated node&lt;/a&gt; options for teams that need this level of control.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to choose between free and paid Abstract RPC providers
&lt;/h2&gt;

&lt;p&gt;Free endpoints are great for development, but they often have rate limits and no uptime guarantees. For production, consider a paid provider that offers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Service level agreements&lt;/strong&gt; – reliability expectations (but verify the terms).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Priority support&lt;/strong&gt; – Faster resolution of issues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalable pricing&lt;/strong&gt; – Pay for what you use.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC pricing&lt;/a&gt; to see how OnFinality structures its plans.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Abstract is an EVM-compatible ZK rollup, so your RPC provider must support both Ethereum and zkSync methods.&lt;/li&gt;
&lt;li&gt;Evaluate providers on network coverage, API compatibility, performance, reliability, data availability, and pricing.&lt;/li&gt;
&lt;li&gt;Use the correct chain IDs: 2741 for mainnet, 11124 for testnet.&lt;/li&gt;
&lt;li&gt;Test your provider with real workloads before going to production.&lt;/li&gt;
&lt;li&gt;Consider a dedicated node if you need higher throughput or custom configuration.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;What is an Abstract RPC provider?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An Abstract RPC provider is a service that offers JSON-RPC endpoints to interact with the Abstract blockchain. It handles node infrastructure, so you don't have to run your own node.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I get an Abstract RPC endpoint?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can get a free endpoint from public providers or sign up for a paid service. OnFinality provides endpoints for Abstract on its &lt;a href="https://onfinality.io/networks/abstract" rel="noopener noreferrer"&gt;network page&lt;/a&gt;.&lt;/p&gt;

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

&lt;p&gt;The Abstract mainnet chain ID is 2741, and the testnet chain ID is 11124.&lt;/p&gt;

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

&lt;p&gt;Yes, most providers offer WSS endpoints for real-time subscriptions.&lt;/p&gt;

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

&lt;p&gt;Yes, because Abstract is EVM-compatible, you can use ethers.js, viem, web3.js, and other Ethereum tools.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What are zkSync-specific RPC methods?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Methods like &lt;code&gt;zks_estimateFee&lt;/code&gt; and &lt;code&gt;zks_getBridgeContracts&lt;/code&gt; that are unique to zkSync-based rollups.&lt;/p&gt;

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

&lt;p&gt;Shared endpoints are cost-effective for low to medium traffic. Dedicated nodes are better for high traffic, low latency, or custom needs.&lt;/p&gt;

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

&lt;p&gt;Yes, OnFinality provides Abstract RPC endpoints. Check the &lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;supported networks&lt;/a&gt; page for details.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/networks/abstract" rel="noopener noreferrer"&gt;Abstract 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/abstract-rpc-provider" 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>Sepolia Beacon RPC: Endpoints, Methods, and Setup</title>
      <dc:creator>OnFinality</dc:creator>
      <pubDate>Tue, 04 Aug 2026 01:29:59 +0000</pubDate>
      <link>https://dev.to/onfinality/sepolia-beacon-rpc-endpoints-methods-and-setup-1hgc</link>
      <guid>https://dev.to/onfinality/sepolia-beacon-rpc-endpoints-methods-and-setup-1hgc</guid>
      <description>&lt;h2&gt;
  
  
  Sepolia Beacon RPC Decision Checklist
&lt;/h2&gt;

&lt;p&gt;Before you start building on the Sepolia beacon chain, make sure you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A working Beacon RPC endpoint (public or private)&lt;/li&gt;
&lt;li&gt;An understanding of the consensus layer API structure (&lt;code&gt;/eth/v1/...&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;A way to authenticate if you're using a provider with API keys&lt;/li&gt;
&lt;li&gt;A block explorer for the beacon chain (e.g., Beaconcha.in) for debugging&lt;/li&gt;
&lt;li&gt;Awareness of rate limits on public endpoints&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Is the Sepolia Beacon RPC?
&lt;/h2&gt;

&lt;p&gt;The Sepolia Beacon RPC is the API endpoint for the consensus layer of the Sepolia testnet. While the standard Sepolia RPC (often called the execution RPC) lets you interact with smart contracts and transactions, the Beacon RPC exposes data about validators, attestations, beacon blocks, and finality. This is essential for staking applications, validator monitoring tools, and any dapp that needs to understand the state of the proof-of-stake chain.&lt;/p&gt;

&lt;p&gt;Sepolia is a permissioned testnet with a closed set of validators, which makes it more stable and predictable than other testnets. This makes it a good choice for testing staking-related features or any application that depends on consensus data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Beacon RPC Endpoints
&lt;/h2&gt;

&lt;p&gt;Beacon RPC endpoints follow the standard Ethereum consensus API specification. The base URL is typically &lt;code&gt;https://&amp;lt;provider&amp;gt;/eth/v1/&lt;/code&gt; or &lt;code&gt;https://&amp;lt;provider&amp;gt;/eth/v2/&lt;/code&gt;. Here are the most common paths:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/eth/v1/beacon/genesis&lt;/code&gt; – Get the genesis time and fork version&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/eth/v1/beacon/headers&lt;/code&gt; – Get beacon block headers&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/eth/v1/beacon/blocks/{block_id}&lt;/code&gt; – Get a specific beacon block&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/eth/v1/beacon/states/{state_id}/validators&lt;/code&gt; – Get validator information&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/eth/v1/beacon/states/{state_id}/finality_checkpoints&lt;/code&gt; – Get current finality checkpoints&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/eth/v1/validator/duties/attester/{epoch}&lt;/code&gt; – Get attester duties (requires authentication)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Common Beacon RPC Methods
&lt;/h2&gt;

&lt;p&gt;Here are a few examples of how to call these endpoints 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;&lt;span class="c"&gt;# Get the genesis information&lt;/span&gt;
curl https://your-provider.com/eth/v1/beacon/genesis

&lt;span class="c"&gt;# Get the latest beacon block header&lt;/span&gt;
curl https://your-provider.com/eth/v1/beacon/headers/head

&lt;span class="c"&gt;# Get validators for the current state&lt;/span&gt;
curl https://your-provider.com/eth/v1/beacon/states/head/validators
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These endpoints return JSON responses that include fields like &lt;code&gt;slot&lt;/code&gt;, &lt;code&gt;proposer_index&lt;/code&gt;, &lt;code&gt;state_root&lt;/code&gt;, and &lt;code&gt;body_root&lt;/code&gt;. You can use these to track the health of the beacon chain, monitor validator performance, or build dashboards.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sepolia Beacon RPC vs. Execution RPC
&lt;/h2&gt;

&lt;p&gt;It's important to understand the difference between the two RPC types:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;Beacon RPC&lt;/th&gt;
&lt;th&gt;Execution RPC&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Layer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Consensus layer&lt;/td&gt;
&lt;td&gt;Execution layer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Validators, blocks, finality&lt;/td&gt;
&lt;td&gt;Transactions, smart contracts, balances&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;API style&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;RESTful (&lt;code&gt;/eth/v1/...&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;JSON-RPC (&lt;code&gt;eth_*&lt;/code&gt; methods)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Use cases&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Staking, monitoring, consensus analysis&lt;/td&gt;
&lt;td&gt;dapps, DeFi, NFT, general Web3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Most applications need both. For example, a staking dashboard might use the Beacon RPC to show validator status and the execution RPC to show rewards in ETH.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Choose a Sepolia Beacon RPC Provider
&lt;/h2&gt;

&lt;p&gt;When selecting a provider for Sepolia Beacon RPC, 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;&lt;strong&gt;Endpoint support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Does the provider offer &lt;code&gt;/eth/v1&lt;/code&gt; and &lt;code&gt;/eth/v2&lt;/code&gt; endpoints?&lt;/td&gt;
&lt;td&gt;Ensures compatibility with your tooling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Rate limits&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;What are the request limits on free/public tiers?&lt;/td&gt;
&lt;td&gt;Public endpoints can throttle your app&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Uptime&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Does the provider publish status or uptime history?&lt;/td&gt;
&lt;td&gt;Testnet reliability affects your development flow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Authentication&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Is an API key required?&lt;/td&gt;
&lt;td&gt;Affects how you configure your app&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 there a WebSocket endpoint for real-time data?&lt;/td&gt;
&lt;td&gt;Useful for subscriptions and 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;Are there multiple regions?&lt;/td&gt;
&lt;td&gt;Reduces latency for global users&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For production-grade testnet development, you might want a provider that offers dedicated nodes or higher rate limits. OnFinality provides &lt;a href="https://onfinality.io/api-service" rel="noopener noreferrer"&gt;RPC services&lt;/a&gt; for Sepolia and many other networks, with options for &lt;a href="https://onfinality.io/dedicated-node" rel="noopener noreferrer"&gt;dedicated nodes&lt;/a&gt; if you need more control.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting Up Your Development Environment
&lt;/h2&gt;

&lt;p&gt;To start using the Sepolia Beacon RPC, you'll typically:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Get an endpoint&lt;/strong&gt; – Either use a public endpoint or sign up for a provider like OnFinality to get a private endpoint with an API key.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Configure your tool&lt;/strong&gt; – Many tools like &lt;code&gt;curl&lt;/code&gt;, Postman, or custom scripts can use the endpoint directly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test the connection&lt;/strong&gt; – Run a simple request like &lt;code&gt;/eth/v1/beacon/genesis&lt;/code&gt; to verify.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here's an example using JavaScript with &lt;code&gt;fetch&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="nx"&gt;endpoint&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://your-provider.com/eth/v1/beacon/genesis&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&amp;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;data&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;401 Unauthorized&lt;/strong&gt;: If you're using a provider with an API key, make sure you've included it in the request header or URL.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate limiting&lt;/strong&gt;: Public endpoints often have strict rate limits. If you hit them, consider upgrading to a paid plan or using a dedicated node.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Endpoint not found&lt;/strong&gt;: Double-check the URL path. The Beacon API uses &lt;code&gt;/eth/v1/&lt;/code&gt; and &lt;code&gt;/eth/v2/&lt;/code&gt; prefixes, not the JSON-RPC path.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data inconsistency&lt;/strong&gt;: If you see different results from different providers, it might be due to syncing delays. Check the &lt;code&gt;slot&lt;/code&gt; and &lt;code&gt;epoch&lt;/code&gt; in the response.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;The Sepolia Beacon RPC gives you access to consensus layer data, essential for staking and validator applications.&lt;/li&gt;
&lt;li&gt;Use the standard &lt;code&gt;/eth/v1/&lt;/code&gt; and &lt;code&gt;/eth/v2/&lt;/code&gt; endpoints for compatibility.&lt;/li&gt;
&lt;li&gt;Choose a provider that offers reliable uptime, reasonable rate limits, and the endpoints you need.&lt;/li&gt;
&lt;li&gt;OnFinality provides &lt;a href="https://onfinality.io/api-service" rel="noopener noreferrer"&gt;RPC services&lt;/a&gt; for Sepolia and many other networks, with &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;pricing&lt;/a&gt; that scales with your needs.&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 Sepolia Beacon RPC and Sepolia RPC?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Sepolia Beacon RPC is for the consensus layer, while the standard Sepolia RPC is for the execution layer. They serve different purposes and have different API styles.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I use the Sepolia Beacon RPC to send transactions?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No, the Beacon RPC is read-only for consensus data. To send transactions, you need the execution RPC.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is the Sepolia Beacon RPC free?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Many providers offer free public endpoints, but they may have rate limits. For higher limits, you may need a paid plan.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I get an API key for Sepolia Beacon RPC?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you use a provider like OnFinality, you can sign up and create an API key from the dashboard. The key is then used in your requests.&lt;/p&gt;

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

&lt;p&gt;The chain ID is 11155111, and the network ID is also 11155111.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;p&gt;Now that you understand the Sepolia Beacon RPC, you can start building your testnet application. If you need a reliable endpoint, check out &lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;OnFinality's supported networks&lt;/a&gt; and &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC pricing&lt;/a&gt; to find a plan that fits your needs.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/networks/ethereum-sepolia" rel="noopener noreferrer"&gt;Sepolia ETH RPC Endpoint&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;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/sepolia-beacon-rpc" 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>How to Choose a Kaia RPC Provider for Production Apps</title>
      <dc:creator>OnFinality</dc:creator>
      <pubDate>Tue, 04 Aug 2026 01:29:26 +0000</pubDate>
      <link>https://dev.to/onfinality/how-to-choose-a-kaia-rpc-provider-for-production-apps-2435</link>
      <guid>https://dev.to/onfinality/how-to-choose-a-kaia-rpc-provider-for-production-apps-2435</guid>
      <description>&lt;h2&gt;
  
  
  Kaia RPC Provider Decision Checklist
&lt;/h2&gt;

&lt;p&gt;Before you commit to a Kaia RPC provider, run through this checklist so you don't discover a blocker after you've built your app:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reliability:&lt;/strong&gt; Public endpoints can throttle or go down under load. For production, look for a provider with an uptime commitment and redundant infrastructure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latency:&lt;/strong&gt; Where are the provider's nodes located? If your users are in Asia, a provider with nodes in that region will give lower round-trip times.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data access:&lt;/strong&gt; Do you need archive data or trace methods? Not all providers offer them. Verify support for methods like &lt;code&gt;kaia_getLogs&lt;/code&gt;, &lt;code&gt;debug_traceTransaction&lt;/code&gt;, and &lt;code&gt;kaia_call&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WebSocket support:&lt;/strong&gt; For real-time subscriptions (e.g., pending transactions, new blocks), you need a WSS endpoint. Check if it's included and whether it has separate rate limits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate limits:&lt;/strong&gt; Public endpoints often cap requests per second. Read the fine print to avoid sudden 429s. Some providers offer higher limits on paid plans.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pricing model:&lt;/strong&gt; Compare pay-as-you-go, flat-rate, and dedicated node plans. Some providers have free tiers for low-volume testing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Support:&lt;/strong&gt; What happens when something breaks? Look for 24/7 support, a status page, and clear documentation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why the Right Kaia RPC Provider Matters
&lt;/h2&gt;

&lt;p&gt;Kaia (formerly Klaytn) is an enterprise-focused L1 blockchain designed for high throughput and low latency, particularly popular in Asia for fintech and consumer apps. If you're building a dApp on Kaia, your RPC provider is the bridge between your app and the chain. A slow or unreliable provider can cause timeouts, failed transactions, and a poor user experience.&lt;/p&gt;

&lt;p&gt;Public RPC endpoints are convenient for testing, but they're not built for production workloads. They can be rate-limited, have no uptime guarantee, and may not support advanced methods like tracing. That's why most production teams use a managed RPC provider or run their own node.&lt;/p&gt;

&lt;h2&gt;
  
  
  Public vs. Private Kaia RPC: What's the Difference?
&lt;/h2&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rate limits:&lt;/strong&gt; Public nodes often throttle requests to prevent abuse. You might hit a cap during traffic spikes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No SLA:&lt;/strong&gt; There's no guarantee of uptime. If the node goes down, your app goes down.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Limited data:&lt;/strong&gt; Some public endpoints don't serve archive data or support trace methods.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shared infrastructure:&lt;/strong&gt; You're sharing the node with many other users, so performance can be unpredictable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Private RPC providers (like OnFinality) offer dedicated or shared infrastructure with higher reliability, better performance, and more features. You get a dedicated endpoint URL, often with WebSocket support, archive data, and higher rate limits. The trade-off is cost, but for production apps, it's often worth it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Criteria for Evaluating a Kaia RPC Provider
&lt;/h2&gt;

&lt;p&gt;When comparing providers, focus on these 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;Reliability&lt;/td&gt;
&lt;td&gt;Uptime SLA, redundancy, status page&lt;/td&gt;
&lt;td&gt;Downtime means lost revenue and user trust.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Latency&lt;/td&gt;
&lt;td&gt;Node locations, p95 response times&lt;/td&gt;
&lt;td&gt;High latency slows your app and can cause timeouts.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data access&lt;/td&gt;
&lt;td&gt;Archive data, trace methods, &lt;code&gt;kaia_getLogs&lt;/code&gt; support&lt;/td&gt;
&lt;td&gt;Some dApps need historical data or debugging tools.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WebSocket support&lt;/td&gt;
&lt;td&gt;WSS endpoint, subscription methods&lt;/td&gt;
&lt;td&gt;Real-time features require WebSocket.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rate limits&lt;/td&gt;
&lt;td&gt;Requests per second, daily/monthly caps&lt;/td&gt;
&lt;td&gt;Hitting limits breaks your app.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pricing&lt;/td&gt;
&lt;td&gt;Cost per request, flat fees, free tier&lt;/td&gt;
&lt;td&gt;You need predictable costs as you scale.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Support&lt;/td&gt;
&lt;td&gt;24/7 support, documentation, community&lt;/td&gt;
&lt;td&gt;When something breaks, you need help fast.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  How to Test a Kaia RPC Provider Before Committing
&lt;/h2&gt;

&lt;p&gt;Before you sign up, test the provider's endpoint with a few basic calls. Here's a quick way to check if the endpoint is responsive and returns correct 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://your-provider-endpoint &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":"kaia_blockNumber","params":[],"id":1}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should get a response like:&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="nl"&gt;"jsonrpc"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"2.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&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="nl"&gt;"result"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"0x123456"&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;Also test a &lt;code&gt;kaia_getBlockByNumber&lt;/code&gt; call to see if you can retrieve block data. If you need WebSocket, try connecting with a tool like &lt;code&gt;wscat&lt;/code&gt; and subscribing to new heads.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Pitfalls When Choosing a Kaia RPC Provider
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ignoring rate limits:&lt;/strong&gt; You might not notice them during testing, but they'll hit you in production. Always check the provider's rate limit policy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not checking WebSocket support:&lt;/strong&gt; If your app needs real-time updates, a provider without WSS will be a dead end.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Assuming archive data is included:&lt;/strong&gt; Archive nodes are more expensive to run. Some providers charge extra or don't offer it at all.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Choosing based on price alone:&lt;/strong&gt; The cheapest provider might have poor reliability or support. Factor in the cost of downtime.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not testing from your target region:&lt;/strong&gt; Latency varies by location. Test from where your users are.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Migrate Between Kaia RPC Providers
&lt;/h2&gt;

&lt;p&gt;If you're already using a provider and want to switch, the process is usually straightforward:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Get a new endpoint:&lt;/strong&gt; Sign up with the new provider and get your RPC URL.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Update your config:&lt;/strong&gt; Change the RPC URL in your dApp's configuration. If you use a library like ethers.js or web3.js, you'll update the provider URL.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test thoroughly:&lt;/strong&gt; Run your test suite against the new endpoint. Check that all methods work, including WebSocket subscriptions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor for a while:&lt;/strong&gt; Run both endpoints in parallel for a few days to compare performance and reliability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Switch over:&lt;/strong&gt; Once you're confident, switch your production traffic to the new provider.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  OnFinality as a Kaia RPC Provider
&lt;/h2&gt;

&lt;p&gt;OnFinality offers managed Kaia RPC endpoints as part of its &lt;a href="https://onfinality.io/api-service" rel="noopener noreferrer"&gt;API service&lt;/a&gt;. You get a dedicated endpoint URL with support for both mainnet and testnet, WebSocket, and archive data. OnFinality's infrastructure is designed for high reliability and low latency, with nodes in multiple regions. You can start with a free tier and scale up as needed. Check the &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC pricing&lt;/a&gt; page for details.&lt;/p&gt;

&lt;p&gt;OnFinality also supports &lt;a href="https://onfinality.io/dedicated-node" rel="noopener noreferrer"&gt;dedicated nodes&lt;/a&gt; if you need a single-tenant infrastructure for maximum performance and isolation. This is useful for high-traffic apps or when you need custom configuration.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Public Kaia RPC endpoints are fine for testing but not for production.&lt;/li&gt;
&lt;li&gt;Evaluate providers on reliability, latency, data access, WebSocket support, rate limits, and pricing.&lt;/li&gt;
&lt;li&gt;Test endpoints with basic calls before committing.&lt;/li&gt;
&lt;li&gt;Watch out for hidden limitations like missing archive data or WebSocket.&lt;/li&gt;
&lt;li&gt;OnFinality offers managed Kaia RPC with flexible pricing and dedicated node options.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;What is the best Kaia RPC provider?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There's no single "best" provider; it depends on your needs. Evaluate providers based on the criteria in this guide. OnFinality is one option that offers managed Kaia RPC endpoints with a free tier.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I use public Kaia RPC endpoints for production?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It's not recommended. Public endpoints have rate limits and no uptime guarantee. For production, use a managed provider or run your own node.&lt;/p&gt;

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

&lt;p&gt;Yes, OnFinality supports both Kaia mainnet and testnet (Kairos). You can get endpoints for both through the &lt;a href="https://onfinality.io/api-service" rel="noopener noreferrer"&gt;API service&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I get a Kaia RPC URL from OnFinality?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sign up for an OnFinality account, go to the &lt;a href="https://onfinality.io/api-service" rel="noopener noreferrer"&gt;API service&lt;/a&gt;, and create a Kaia endpoint. You'll get a URL you can use in your dApp.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the difference between shared and dedicated Kaia RPC?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Shared RPC means you share infrastructure with other users, which is cheaper but can have variable performance. Dedicated RPC gives you a single-tenant node for consistent performance and more control. OnFinality offers both options.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I troubleshoot Kaia RPC errors?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Common errors include rate limiting (HTTP 429), timeouts, and method not supported. Check the provider's documentation and status page. For OnFinality, you can contact support for help.&lt;/p&gt;

&lt;p&gt;For more on choosing an RPC provider, see our &lt;a href="https://onfinality.io/rpc-assistant/how-to-choose-an-rpc-provider" rel="noopener noreferrer"&gt;guide on how to choose an RPC provider&lt;/a&gt;. Also, explore &lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;supported RPC networks&lt;/a&gt; to see if OnFinality covers other chains you need.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://onfinality.io/rpc-assistant/kaia-endpoint" rel="noopener noreferrer"&gt;Kaia Endpoint Guide&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/networks" rel="noopener noreferrer"&gt;Supported RPC 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/kaia-rpc-provider" 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 RPC: Endpoints, Setup, and Best Practices</title>
      <dc:creator>OnFinality</dc:creator>
      <pubDate>Tue, 04 Aug 2026 01:28:54 +0000</pubDate>
      <link>https://dev.to/onfinality/sora-network-rpc-endpoints-setup-and-best-practices-5178</link>
      <guid>https://dev.to/onfinality/sora-network-rpc-endpoints-setup-and-best-practices-5178</guid>
      <description>&lt;h2&gt;
  
  
  SORA Network decision checklist
&lt;/h2&gt;

&lt;p&gt;Before you build on SORA, make sure you have covered these points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Understand the network's purpose&lt;/strong&gt;: SORA is a Substrate-based chain focused on a decentralized economic system with the XOR token. It is not an EVM chain, so you will use Substrate RPC methods.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Choose the right endpoint&lt;/strong&gt;: For production, use a managed RPC provider or run your own node. Public endpoints are for testing only.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check WebSocket support&lt;/strong&gt;: For real-time updates, you need WSS. Ensure your provider supports it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verify archive data needs&lt;/strong&gt;: If you need historical state, confirm the provider offers archive nodes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plan for rate limits&lt;/strong&gt;: Free tiers have limits. Estimate your traffic and choose a plan that fits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secure your API key&lt;/strong&gt;: If using a managed service, keep your key secret and rotate it regularly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test with a simple call&lt;/strong&gt;: Use &lt;code&gt;chain_getBlockHash&lt;/code&gt; to verify connectivity before building.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor performance&lt;/strong&gt;: Set up alerts for latency and error rates to catch issues early.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What is the SORA Network?
&lt;/h2&gt;

&lt;p&gt;The SORA Network is a decentralized blockchain designed to create a sovereign economic system. It uses the XOR token as its native asset, managed by a token bonding curve to adjust supply based on demand. The network supports democratic governance, allowing token holders to propose and vote on funding for projects. SORA also integrates with Polkaswap, a decentralized exchange, and aims for interoperability with other chains like Ethereum and Polkadot.&lt;/p&gt;

&lt;p&gt;For developers, SORA offers a Substrate-based environment, meaning you can use standard Substrate RPC methods to interact with the chain. This includes querying balances, submitting transactions, and reading chain metadata.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why RPC endpoints matter for SORA developers
&lt;/h2&gt;

&lt;p&gt;RPC (Remote Procedure Call) endpoints are the gateway to the blockchain. They allow your dApp to read data and send transactions. Without a reliable endpoint, your application can experience downtime, slow responses, or failed transactions. For SORA, you need endpoints that support both HTTPS and WSS, as well as the specific methods required by Substrate.&lt;/p&gt;

&lt;p&gt;When choosing an RPC provider, consider factors like uptime, latency, rate limits, and whether they offer archive data. A managed provider can save you the operational overhead of running your own node, but you should evaluate their performance and pricing.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to connect to SORA: endpoints and setup
&lt;/h2&gt;

&lt;p&gt;To connect to the SORA Network, you need an RPC endpoint. Here are the typical formats:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;HTTPS&lt;/strong&gt;: &lt;code&gt;https://sora.api.onfinality.io/public&lt;/code&gt; (example, replace with actual)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WSS&lt;/strong&gt;: &lt;code&gt;wss://sora.api.onfinality.io/public&lt;/code&gt; (example, replace with actual)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can test connectivity with a simple &lt;code&gt;curl&lt;/code&gt; command:&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://sora.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":"chain_getBlockHash","params":[0],"id":1}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For JavaScript, use the &lt;code&gt;@polkadot/api&lt;/code&gt; library:&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="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&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="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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;When choosing an RPC provider for SORA, use this checklist:&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 stats&lt;/td&gt;
&lt;td&gt;Downtime breaks your app&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 UX&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rate limits&lt;/td&gt;
&lt;td&gt;Requests per second allowed&lt;/td&gt;
&lt;td&gt;Limits can throttle your app&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Archive data&lt;/td&gt;
&lt;td&gt;Availability of historical state&lt;/td&gt;
&lt;td&gt;Needed for analytics and debugging&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WebSocket support&lt;/td&gt;
&lt;td&gt;WSS endpoint availability&lt;/td&gt;
&lt;td&gt;Required for real-time subscriptions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security&lt;/td&gt;
&lt;td&gt;API key management and encryption&lt;/td&gt;
&lt;td&gt;Protects your data and access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pricing&lt;/td&gt;
&lt;td&gt;Cost per request or monthly fee&lt;/td&gt;
&lt;td&gt;Must fit your budget&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Support&lt;/td&gt;
&lt;td&gt;Documentation and response times&lt;/td&gt;
&lt;td&gt;Helps when issues arise&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;OnFinality offers RPC services for many networks, including SORA. 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; for details. For high-traffic or production workloads, consider a &lt;a href="https://onfinality.io/dedicated-node" rel="noopener noreferrer"&gt;dedicated node&lt;/a&gt; for more control and performance.&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 unreliable. Use a managed provider or your own node.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ignoring WebSocket for subscriptions&lt;/strong&gt;: If you need live updates, you must use WSS. HTTPS only supports request-response.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not handling rate limits&lt;/strong&gt;: Even with a provider, you may hit limits. Implement retry logic and backoff.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Assuming EVM compatibility&lt;/strong&gt;: SORA is Substrate-based, so use Substrate RPC methods, not Ethereum JSON-RPC.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Forgetting archive data&lt;/strong&gt;: For historical queries, you need an archive node. Not all providers offer this.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;If you encounter problems, try these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Check your endpoint&lt;/strong&gt;: Ensure the URL is correct and includes the right protocol (https/wss).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test with a simple call&lt;/strong&gt;: Use &lt;code&gt;chain_getBlockHash&lt;/code&gt; to verify connectivity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review rate limits&lt;/strong&gt;: If you get 429 errors, you are exceeding limits. Upgrade your plan or add caching.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check for network issues&lt;/strong&gt;: Use tools like &lt;code&gt;ping&lt;/code&gt; or &lt;code&gt;traceroute&lt;/code&gt; to diagnose latency.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contact support&lt;/strong&gt;: If using a provider, reach out for help. OnFinality offers support for its services.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ul&gt;
&lt;li&gt;The SORA Network is a Substrate-based blockchain focused on a decentralized economic system.&lt;/li&gt;
&lt;li&gt;RPC endpoints are essential for dApp development; choose a reliable provider.&lt;/li&gt;
&lt;li&gt;Evaluate providers based on uptime, latency, rate limits, archive data, and support.&lt;/li&gt;
&lt;li&gt;Use WebSocket for real-time data and handle rate limits gracefully.&lt;/li&gt;
&lt;li&gt;OnFinality provides RPC services for SORA and other networks; check &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;pricing&lt;/a&gt;.&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;/p&gt;

&lt;p&gt;The SORA Network is a decentralized blockchain platform that aims to create a sovereign economic system. It uses the XOR token and a token bonding curve to manage supply, and it supports democratic governance and cross-chain interoperability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I get a SORA RPC endpoint?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can use a public endpoint for testing, but for production, consider a managed RPC provider like OnFinality. Visit &lt;a href="https://onfinality.io/networks" rel="noopener noreferrer"&gt;supported networks&lt;/a&gt; to see if SORA is available and get your endpoint.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is SORA compatible with Ethereum?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No, SORA is Substrate-based, so it uses Substrate RPC methods. However, it can interoperate with Ethereum through bridges.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the XOR token?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;XOR is the native token of the SORA Network, used for governance, transaction fees, and as a medium of exchange. Its supply is managed by a bonding curve.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I run my own SORA node?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes, you can run a full node, but it requires technical expertise and maintenance. A managed provider can simplify this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What are the rate limits for SORA RPC?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Rate limits vary by provider. OnFinality offers different plans; check &lt;a href="https://onfinality.io/pricing/rpc" rel="noopener noreferrer"&gt;RPC pricing&lt;/a&gt; for details.&lt;/p&gt;

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

&lt;ul&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;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/dedicated-node" rel="noopener noreferrer"&gt;Dedicated Nodes&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" 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>
