Docs

Ink RPC and API Documentation

Complete guide to Ink RPC and API integration with Dwellir. Build DeFi applications on Kraken's OP Stack Ethereum L2 with fast, EVM-compatible infrastructure.

Ink RPC

With Dwellir, you get access to our global Ink 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 Ink?

Ink is an Ethereum Layer 2 built on the OP Stack and designed as a DeFi-focused home in the Optimism Superchain. It uses ETH for gas, supports standard EVM tooling, and gives Solidity developers a familiar path to deploy low-fee applications with fast confirmations.

DeFi-First L2

  • Built for DeFi - Designed for liquidity, trading, and onchain financial applications
  • Kraken-backed ecosystem - Launched by Kraken with builder support and DeFi distribution in mind
  • Superchain alignment - Built on the OP Stack for Optimism ecosystem interoperability

EVM-Compatible Infrastructure

  • Standard JSON-RPC - Use Ethereum RPC methods with existing tools and SDKs
  • Solidity support - Deploy contracts built for Ethereum and other EVM L2s
  • ETH gas - Keep familiar wallet and fee flows for users

Fast, Low-Fee Execution

  • Chain ID 57073 - Ink mainnet
  • Fast blocks - 1 second block times at launch
  • Lower fees - OP Stack scaling with Ethereum settlement

Quick Start with Ink

Ink RPC Endpoints
HTTPS
curl -sS -X POST https://api-ink-mainnet.n.dwellir.com/<API_Keys_Are_Not_Made_for_Bots> \  -H 'Content-Type: application/json' \  -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
import { JsonRpcProvider } from 'ethers';const provider = new JsonRpcProvider(  'https://api-ink-mainnet.n.dwellir.com/<API_Keys_Are_Not_Made_for_Bots>');const latest = await provider.getBlockNumber();console.log('block', latest);
import requestsurl = 'https://api-ink-mainnet.n.dwellir.com/<API_Keys_Are_Not_Made_for_Bots>'payload = {  'jsonrpc': '2.0', 'id': 1,  'method': 'eth_blockNumber', 'params': []}resp = requests.post(url, json=payload)print(resp.json())
package mainimport (  "bytes"  "fmt"  "io"  "net/http")func main() {  url := "https://api-ink-mainnet.n.dwellir.com/<API_Keys_Are_Not_Made_for_Bots>"  payload := []byte(`{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}`)  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))}

Network Specifications

ParameterValueDetails
Chain ID57073Mainnet
CurrencyETHNative gas token
StackOP StackOptimism Superchain
Explorerexplorer.inkonchain.comMainnet explorer

API Methods

Core Ethereum Methods

Ink supports standard Ethereum JSON-RPC methods:

  • Transaction methods (eth_sendRawTransaction, eth_getTransactionReceipt)
  • Block methods (eth_getBlockByNumber, eth_blockNumber)
  • Account methods (eth_getBalance, eth_getCode)
  • Event methods (eth_getLogs, eth_newFilter)

Debug & Trace Methods

Dwellir's Ink endpoint exposes reth-backed debug and trace namespaces:

  • debug_traceTransaction - Inspect transaction execution
  • debug_traceBlockByNumber - Trace full blocks
  • trace_call and trace_filter - Parity-style tracing workflows

Developer Resources

Ethers.js Example

JavaScript
import { ethers } from 'ethers';

const provider = new ethers.JsonRpcProvider(
  'https://api-ink-mainnet.n.dwellir.com/YOUR_API_KEY'
);

const network = await provider.getNetwork();
console.log('Connected to Ink:', network.chainId === 57073n);

const blockNumber = await provider.getBlockNumber();
console.log('Latest Ink block:', blockNumber);

viem Example

TypeScript
import { createPublicClient, http } from 'viem';
import { defineChain } from 'viem';

const ink = defineChain({
  id: 57073,
  name: 'Ink',
  nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },
  rpcUrls: {
    default: {
      http: ['https://api-ink-mainnet.n.dwellir.com/YOUR_API_KEY'],
    },
  },
});

const client = createPublicClient({
  chain: ink,
  transport: http(),
});

const blockNumber = await client.getBlockNumber();

Resources & Support