Docs

Acala RPC with Dwellir

Production-ready Acala parachain RPC endpoints, quick start guides, Substrate JSON-RPC coverage, and best practices for building on Acala with Dwellir.

Acala RPC

With Dwellir, you get access to our global Acala network which always routes your API requests to the nearest available location, ensuring low latency and the fastest speeds.

Get your API key

Why Build on Acala?

Acala is a DeFi-focused parachain on the Polkadot relay chain that provides a stablecoin (aUSD), liquid staking (LDOT), and EVM+Substrate interoperability. Built on Substrate, Acala exposes the standard JSON‑RPC namespaces developers rely on for production‑grade integrations.

DeFi Primitives Out of the Box

  • aUSD stablecoin, LDOT liquid staking, DEX and more, available through standard pallets and EVM.
  • Seamless cross‑chain asset routing via XCM to and from Polkadot ecosystems.

Familiar Tooling

  • Works with polkadot.js, Subxt (Rust), and py‑substrate‑interface (Python).
  • Dwellir provides globally anycasted endpoints with low‑latency routing and high availability.

Security Inherited from Polkadot

  • As parachain 2000 on Polkadot, Acala benefits from shared security and fast finality.

Quick Start

Connect to Acala’s production endpoints.

Acala RPC Endpoints
HTTPS
WSS
curl -sS -X POST https://api-acala.n.dwellir.com/<API_Keys_Are_Not_Made_for_Bots> \  -H 'Content-Type: application/json' \  -d '{"jsonrpc":"2.0","method":"chain_getBlockHash","params":[0],"id":1}'
import { ApiPromise, WsProvider } from '@polkadot/api';const provider = new WsProvider('wss://api-acala.n.dwellir.com/<API_Keys_Are_Not_Made_for_Bots>');const api = await ApiPromise.create({ provider });const hash = await api.rpc.chain.getBlockHash(0);console.log(hash.toHex());
from substrateinterface import SubstrateInterfacesubstrate = SubstrateInterface(url='wss://api-acala.n.dwellir.com/<API_Keys_Are_Not_Made_for_Bots>')block_hash = substrate.get_block_hash(block_id=0)print(block_hash)
package mainimport (  "bytes"  "fmt"  "io"  "net/http")func main() {  url := "https://api-acala.n.dwellir.com/<API_Keys_Are_Not_Made_for_Bots>"  payload := []byte(`{"jsonrpc":"2.0","id":1,"method":"chain_getBlockHash","params":[0]}`)  resp, err := http.Post(url, "application/json",    bytes.NewBuffer(payload))  if err != nil { panic(err) }  defer resp.Body.Close()  body, _ := io.ReadAll(resp.Body)  fmt.Println(string(body))}

Installation & Setup

Network Information

ParameterValueDetails
Genesis Hash0xfc41b9bd…ba64cVerified via chain_getBlockHash(0)
Native TokenACA12 decimals
SS58 Prefix10Address format
Runtime Spec Version2300state_getRuntimeVersion (Oct 9, 2025)
Transaction Version3state_getRuntimeVersion
ExplorerSubscanacala.subscan.io

Acala runs as Polkadot parachain 2000. Token properties and address prefix were verified using system_properties; genesis hash via chain_getBlockHash(0); runtime versions via state_getRuntimeVersion on October 9, 2025.

API Reference

Acala exposes the core Substrate RPC namespaces for node telemetry, block production, storage access, and transaction submission.

Common Integration Patterns

Subscribe to Finality and New Heads

TypeScript
const unsubFinal = await api.rpc.chain.subscribeFinalizedHeads((h) =>
  console.log(`Finalized #${h.number} ${h.hash.toHex()}`)
);
const unsubNew = await api.rpc.chain.subscribeNewHeads((h) =>
  console.log(`New #${h.number}`)
);

Paginate Large Storage Scans

TypeScript
const keys = await api.rpc.state.getKeysPaged(
  // System.Account prefix
  '0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9',
  100,
  '0x',
  null
);
console.log('Fetched', keys.length, 'keys');

Estimate Fees Before Broadcasting

TypeScript
const ext = api.tx.balances.transferAllowDeath('ADDRESS', 1_000_000_000_000);
const info = await api.rpc.payment.queryInfo(ext.toHex());
console.log(`PartialFee: ${info.partialFee.toHuman()}`);

Performance Best Practices

  • Prefer WebSocket connections for subscriptions and multi‑round queries.
  • Cache runtime metadata and type bundles; reuse ApiPromise across requests.
  • Use state_getKeysPaged for large map scans; avoid full‑chain scans.
  • Implement reconnection/backoff and share a connection pool across services.

Troubleshooting

  • Connection refused: ensure your API key is appended and outbound TCP/443 is allowed.
  • Invalid SS58: addresses must use prefix 10 for Acala.
  • Type errors: refresh metadata after runtime upgrades (api.runtimeVersion).
  • Extrinsic failed: decode dispatch error via api.registry.findMetaError.

Smoke Tests

Run these minimal checks against production endpoints (captured Oct 9, 2025):

Bash
# Node health (peers ≈ 15, isSyncing false)
curl -s https://api-acala.n.dwellir.com/YOUR_API_KEY \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"system_health","params":[]}'

# Latest block header (e.g. number ~ 9617916)
curl -s https://api-acala.n.dwellir.com/YOUR_API_KEY \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"chain_getHeader","params":[]}'

# Finalized head hash (e.g. 0xdcdcc29c…f13e7)
curl -s https://api-acala.n.dwellir.com/YOUR_API_KEY \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"chain_getFinalizedHead","params":[]}'

# Runtime versions (specVersion 2300, transactionVersion 3)
curl -s https://api-acala.n.dwellir.com/YOUR_API_KEY \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"state_getRuntimeVersion","params":[]}'

Migration Guide (from Polkadot/Kusama)

  • Endpoints: replace with https://api-acala.n.dwellir.com/YOUR_API_KEY or wss://api-acala.n.dwellir.com/YOUR_API_KEY.
  • Addresses: re‑encode SS58 addresses with prefix 10.
  • Types: include Acala custom types where applicable; refresh metadata after upgrades.
  • Fees: re‑calibrate using payment_queryInfo; fee multipliers differ across chains.

Resources & Tools