---
title: Paxeer EVM JSON-RPC API Reference
sidebarTitle: RPC Reference
description: >-
  Explore Paxeer's EVM JSON-RPC API reference, covering standard Ethereum
  methods, support statuses, network endpoints, and usage limits.
keywords:
  - json-rpc
  - api reference
  - evm endpoints
  - blockchain api
  - paxeer development
---

> **For AI agents:** the complete documentation index is at [llms.txt](/llms.txt). Append `.md` to any page URL for its markdown version.

import { RPCMethodsViewer } from '/snippets/rpc-methods-viewer.jsx';

Paxeer fully supports the standard Ethereum JSON-RPC API, so existing EVM tooling (ethers.js, viem, Hardhat, Foundry, etc.) works out of the box. Use the explorer below to browse every method Paxeer exposes, inspect parameters, run requests against a live endpoint, and copy ready-to-use snippets in a range of popular languages.

<RPCMethodsViewer />


<Note>
By default the explorer lists only the available, current methods. Each is labelled with one of three statuses:

- **Supported** - registered with a full implementation and standard Ethereum behavior.
- **Limited** - callable, but returns a static value or has a Paxeer-specific caveat (shown in the method's **Paxeer-specific behavior** note).
- **Unavailable** - not registered, explicitly errors, or not applicable to Paxeer's architecture. This includes blob methods (`eth_blobBaseFee`), proof-of-work and uncle methods, and the `admin`/`miner`/`clique`/`engine`/`les`/`personal` namespaces.
</Note>

## Overview

Paxeer supports the [Ethereum JSON-RPC API](https://ethereum.org/en/developers/docs/apis/json-rpc/). Because Paxeer has instant finality, the `safe`, `finalized`, and `latest` block tags all resolve to the same (latest committed) block.

All endpoints follow the standard JSON-RPC format:

<Accordion title="JSON-RPC Request/Response Format">
**Request Format**

- HTTP method: always "`POST`"
- Header: `accept: application/json`
- Header: `content-type: application/json`
- Body (JSON):
  - `id`: an arbitrary string identifier
  - `jsonrpc`: always "2.0"
  - `method`: endpoint name (e.g. "eth_sendRawTransaction")
  - `params`: an array that differs from endpoint to endpoint

**Response Format**

- Body (JSON):
  - `id`: the same identifier in request
  - `jsonrpc`: always "2.0"
  - `result`: an object that differs from endpoint to endpoint
  - `error` (if applicable): error details

</Accordion>

### Network endpoints

| Network | Chain ID | HTTP endpoint |
| --- | --- | --- |
| Mainnet | `125` (`0x7d`) | `https://public-rpc.paxeer.app/evm/reference` |

For additional public and commercial endpoints, see [RPC providers](/learn/dev-chains) and [Chains & endpoints](/learn/dev-chains).

### Filter and subscription limits

<Info>
Log filters (`eth_getLogs`, `eth_getFilterLogs`) are subject to the following limits by default:

- **Open-ended block range:** up to 10,000 logs in one response
- **Close-ended block range:** up to 2,000 blocks to query over

Real-time subscriptions (`eth_subscribe` for `newHeads` and `logs`) are available over WebSocket only.
</Info>

## Standard Ethereum endpoints

Every method below is also browsable interactively in the explorer above; this section is the static, copy-friendly reference. Methods are grouped by purpose and labelled with their Paxeer support status. Block parameters accept a hex number or one of the tags `latest`, `earliest`, `pending`, `safe`, or `finalized` - on Paxeer, `safe`, `finalized`, and `latest` all resolve to the latest committed block due to instant finality.

<Accordion title="Send transactions">
### `eth_sendRawTransaction`

**Supported.** Submits a signed, RLP-encoded raw EVM transaction to the network and returns its hash.

**Parameters:**

| # | Name | Type | Description |
| :- | :- | :- | :- |
| 1 | `data` | DATA | Signed, RLP-encoded transaction bytes (0x-prefixed). |

**Example request:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_sendRawTransaction",
  "params": [
    "0x02f8b101808459682f00..."
  ]
}
```

### `eth_sendTransaction`

**Limited.** Signs (with a node-hosted key) and submits a transaction in one call.

**Paxeer-specific behavior:** Requires the 'from' address's private key in the node's local test keyring; production/public RPC nodes hold no hosted keys. Sign client-side and use eth_sendRawTransaction instead.

**Parameters:**

| # | Name | Type | Description |
| :- | :- | :- | :- |
| 1 | `args` | object | Transaction object (from, to, value, data, gas, nonce, etc.). |

**Example request:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_sendTransaction",
  "params": [
    {
      "from": "0xDa52B9E673d1f48FcD9916b3F606A136a8eA5e55",
      "to": "0x7507454444fa193d39f1392076bc784b77a7a8ff",
      "value": "0x1"
    }
  ]
}
```

### `eth_signTransaction`

**Limited.** Signs a transaction with a node-hosted key and returns the signed payload without broadcasting.

**Paxeer-specific behavior:** Requires a node-hosted key for the from address; not usable on public RPC nodes that hold no keys.

**Parameters:**

| # | Name | Type | Description |
| :- | :- | :- | :- |
| 1 | `args` | object | SendTxArgs transaction object to sign (from, to, gas, gasPrice, value, nonce, data). |

**Example request:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_signTransaction",
  "params": [
    {
      "from": "0xDa52B9E673d1f48FcD9916b3F606A136a8eA5e55",
      "to": "0x7507454444fa193d39f1392076bc784b77a7a8ff",
      "value": "0x1",
      "nonce": "0x0",
      "gas": "0x5208",
      "gasPrice": "0x3b9aca00"
    }
  ]
}
```

### `eth_sign`

**Limited.** Signs an EIP-191 personal message with a node-hosted key for the given address.

**Paxeer-specific behavior:** Only works for addresses in the node's local test keyring; production/public RPC nodes hold no hosted keys.

**Parameters:**

| # | Name | Type | Description |
| :- | :- | :- | :- |
| 1 | `address` | DATA, 20 bytes | Address whose hosted key signs the data. |
| 2 | `data` | DATA | Message bytes to sign. |

**Example request:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_sign",
  "params": [
    "0xDa52B9E673d1f48FcD9916b3F606A136a8eA5e55",
    "0xdeadbeef"
  ]
}
```

</Accordion>

<Accordion title="Transaction lookup">
### `eth_getTransactionByHash`

**Supported.** Returns the EVM transaction matching the given hash, or null if not found.

**Parameters:**

| # | Name | Type | Description |
| :- | :- | :- | :- |
| 1 | `hash` | DATA, 32 bytes | Transaction hash. |

**Example request:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_getTransactionByHash",
  "params": [
    "0x828c91592453fe7c5bf743204495a35bf02b67b579b8f59ee7eea8af031d7c14"
  ]
}
```

### `eth_getTransactionReceipt`

**Supported.** Returns the receipt of a transaction by hash, or null if not found.

**Parameters:**

| # | Name | Type | Description |
| :- | :- | :- | :- |
| 1 | `hash` | DATA, 32 bytes | Transaction hash. |

**Example request:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_getTransactionReceipt",
  "params": [
    "0x828c91592453fe7c5bf743204495a35bf02b67b579b8f59ee7eea8af031d7c14"
  ]
}
```

### `eth_getTransactionByBlockNumberAndIndex`

**Supported.** Returns the EVM transaction at the given index within the block at the specified number.

**Parameters:**

| # | Name | Type | Description |
| :- | :- | :- | :- |
| 1 | `blockNr` | BLOCKNUMBER | Block number or tag. |
| 2 | `index` | QUANTITY | Transaction index within the block. |

**Example request:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_getTransactionByBlockNumberAndIndex",
  "params": [
    "latest",
    "0x0"
  ]
}
```

### `eth_getTransactionByBlockHashAndIndex`

**Supported.** Returns the EVM transaction at the given index within the block identified by hash.

**Parameters:**

| # | Name | Type | Description |
| :- | :- | :- | :- |
| 1 | `blockHash` | DATA, 32 bytes | Block hash. |
| 2 | `index` | QUANTITY | Transaction index within the block. |

**Example request:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_getTransactionByBlockHashAndIndex",
  "params": [
    "0x5620c15afd9a1d0ab19d7560043df6e038d731c6205974dca7a55900071e3864",
    "0x0"
  ]
}
```

### `eth_getTransactionCount`

**Supported.** Returns the number of transactions sent from an address (nonce) at a given block.

**Paxeer-specific behavior:** safe/finalized/latest are equivalent due to instant finality.

**Parameters:**

| # | Name | Type | Description |
| :- | :- | :- | :- |
| 1 | `address` | DATA, 20 bytes | Account address. |
| 2 | `blockNrOrHash` | BLOCKNUMBER or DATA | Block number, tag, or hash; 'pending' returns the next pending nonce. |

**Example request:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_getTransactionCount",
  "params": [
    "0xDa52B9E673d1f48FcD9916b3F606A136a8eA5e55",
    "latest"
  ]
}
```

</Accordion>

<Accordion title="Account information">
### `eth_getBalance`

**Supported.** Returns the wei balance of an account at a given block.

**Paxeer-specific behavior:** Balance reflects the account's HPX bank balance (18-decimal wei representation). Height is resolved with a state-version guard.

**Parameters:**

| # | Name | Type | Description |
| :- | :- | :- | :- |
| 1 | `address` | DATA, 20 bytes | Account address. |
| 2 | `blockNrOrHash` | BLOCKNUMBER or DATA | Block number, tag (latest/earliest/pending/safe/finalized), or hash. |

**Example request:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_getBalance",
  "params": [
    "0xDa52B9E673d1f48FcD9916b3F606A136a8eA5e55",
    "latest"
  ]
}
```

### `eth_getCode`

**Supported.** Returns the contract bytecode at an address for a given block.

**Parameters:**

| # | Name | Type | Description |
| :- | :- | :- | :- |
| 1 | `address` | DATA, 20 bytes | Contract address. |
| 2 | `blockNrOrHash` | BLOCKNUMBER or DATA | Block number, tag, or hash. |

**Example request:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_getCode",
  "params": [
    "0xE30feDd158A2e3b13e9badaeABaFc5516e95e8C7",
    "latest"
  ]
}
```

### `eth_getStorageAt`

**Supported.** Returns the value stored at a storage slot of an address at a given block.

**Parameters:**

| # | Name | Type | Description |
| :- | :- | :- | :- |
| 1 | `address` | DATA, 20 bytes | Contract address. |
| 2 | `key` | DATA, 32 bytes | Storage slot key (hex, up to 32 bytes). |
| 3 | `blockNrOrHash` | BLOCKNUMBER or DATA | Block number, tag, or hash. |

**Example request:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_getStorageAt",
  "params": [
    "0xE30feDd158A2e3b13e9badaeABaFc5516e95e8C7",
    "0x0",
    "latest"
  ]
}
```

### `eth_accounts`

**Limited.** Returns the list of addresses for which the node holds hosted keys.

**Paxeer-specific behavior:** Sourced from the node's local test keyring only; production/public RPC nodes hold no hosted keys, so this returns an empty list. Sign client-side and use eth_sendRawTransaction.

**Parameters:** none.

</Accordion>

<Accordion title="Block information">
### `eth_getBlockByNumber`

**Supported.** Returns block information by number or tag, with full transactions when fullTx is true.

**Paxeer-specific behavior:** Block number 0 returns a synthetic genesis block; future/non-existent numeric blocks return null. Uncle/PoW header fields are placeholders and the uncles array is always empty. safe/finalized/latest are equivalent due to instant finality.

**Parameters:**

| # | Name | Type | Description |
| :- | :- | :- | :- |
| 1 | `number` | BLOCKNUMBER | Block number (hex) or tag (latest/safe/finalized/pending/earliest). |
| 2 | `fullTx` | boolean | If true include full transaction objects, else only hashes. |

**Example request:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_getBlockByNumber",
  "params": [
    "latest",
    true
  ]
}
```

### `eth_getBlockByHash`

**Supported.** Returns block information by block hash, with full transactions when fullTx is true.

**Parameters:**

| # | Name | Type | Description |
| :- | :- | :- | :- |
| 1 | `blockHash` | DATA, 32 bytes | Block hash. |
| 2 | `fullTx` | boolean | If true include full transaction objects, else only hashes. |

**Example request:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_getBlockByHash",
  "params": [
    "0x5620c15afd9a1d0ab19d7560043df6e038d731c6205974dca7a55900071e3864",
    false
  ]
}
```

### `eth_getBlockTransactionCountByNumber`

**Supported.** Returns the number of EVM transactions in a block by number, as a hex quantity.

**Parameters:**

| # | Name | Type | Description |
| :- | :- | :- | :- |
| 1 | `number` | BLOCKNUMBER | Block number or tag. |

**Example request:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_getBlockTransactionCountByNumber",
  "params": [
    "latest"
  ]
}
```

### `eth_getBlockTransactionCountByHash`

**Supported.** Returns the number of EVM transactions in a block by hash, as a hex quantity.

**Parameters:**

| # | Name | Type | Description |
| :- | :- | :- | :- |
| 1 | `blockHash` | DATA, 32 bytes | Block hash. |

**Example request:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_getBlockTransactionCountByHash",
  "params": [
    "0x5620c15afd9a1d0ab19d7560043df6e038d731c6205974dca7a55900071e3864"
  ]
}
```

### `eth_getBlockReceipts`

**Supported.** Returns all EVM transaction receipts for a given block.

**Parameters:**

| # | Name | Type | Description |
| :- | :- | :- | :- |
| 1 | `blockNrOrHash` | BLOCKNUMBER or DATA | Block number, tag, or hash. |

**Example request:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_getBlockReceipts",
  "params": [
    "latest"
  ]
}
```

</Accordion>

<Accordion title="Blockchain information">
### `eth_blockNumber`

**Supported.** Returns the number of the most recent committed EVM block as a hex uint64.

**Paxeer-specific behavior:** The latest committed block is already final on Paxeer (instant finality, so latest == safe == finalized).

**Parameters:** none.

### `eth_chainId`

**Supported.** Returns the EVM chain ID as a hex big int.

**Paxeer-specific behavior:** Mainnet = 125 (0x7d).

**Parameters:** none.

### `eth_coinbase`

**Limited.** Returns the block reward beneficiary (coinbase) address.

**Parameters:** none.

### `eth_gasPrice`

**Supported.** Returns a suggested gas price in wei (hex).

**Parameters:** none.

### `eth_maxPriorityFeePerGas`

**Supported.** Returns a suggested priority fee (tip) per gas in wei (hex).

**Parameters:** none.

### `eth_feeHistory`

**Supported.** Returns base fees, gas-used ratios, and reward percentile data over a range of blocks.

**Parameters:**

| # | Name | Type | Description |
| :- | :- | :- | :- |
| 1 | `blockCount` | QUANTITY | Number of blocks in the requested range. |
| 2 | `newestBlock` | BLOCKNUMBER | Highest block of the range (number or tag). |
| 3 | `rewardPercentiles` | array of float | Monotonically increasing percentiles to sample for priority-fee rewards. |

**Example request:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_feeHistory",
  "params": [
    "0x5",
    "latest",
    [
      25,
      50,
      75
    ]
  ]
}
```

### `net_version`

**Supported.** Returns the network/chain ID as a decimal string.

**Paxeer-specific behavior:** Returns '125' on mainnet.

**Parameters:** none.

### `web3_clientVersion`

**Supported.** Returns the client version string.

**Parameters:** none.

</Accordion>

<Accordion title="Filters & subscriptions">
### `eth_newFilter`

**Supported.** Creates a log filter for the given criteria and returns a filter ID for later polling.

**Parameters:**

| # | Name | Type | Description |
| :- | :- | :- | :- |
| 1 | `crit` | object | Filter criteria: fromBlock, toBlock (or blockHash), address(es), and topics. |

**Example request:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_newFilter",
  "params": [
    {
      "fromBlock": "latest",
      "address": "0xE30feDd158A2e3b13e9badaeABaFc5516e95e8C7",
      "topics": []
    }
  ]
}
```

### `eth_newBlockFilter`

**Supported.** Creates a filter that tracks newly arrived block hashes and returns its ID.

**Parameters:** none.

### `eth_getFilterChanges`

**Supported.** Polls a filter and returns new logs (log filters) or block hashes (block filters) since the last poll.

**Parameters:**

| # | Name | Type | Description |
| :- | :- | :- | :- |
| 1 | `filterID` | QUANTITY/ID | Filter ID from a New*Filter call. |

**Example request:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_getFilterChanges",
  "params": [
    "0x1"
  ]
}
```

### `eth_getFilterLogs`

**Supported.** Returns all logs matching a previously created log filter, including historical logs.

**Parameters:**

| # | Name | Type | Description |
| :- | :- | :- | :- |
| 1 | `filterID` | QUANTITY/ID | Filter ID from a NewFilter call. |

**Example request:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_getFilterLogs",
  "params": [
    "0x1"
  ]
}
```

### `eth_getLogs`

**Supported.** Returns logs matching the given filter criteria.

**Parameters:**

| # | Name | Type | Description |
| :- | :- | :- | :- |
| 1 | `crit` | object | Filter criteria: fromBlock, toBlock (or blockHash), address(es), topics. |

**Example request:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_getLogs",
  "params": [
    {
      "fromBlock": "0x0",
      "toBlock": "latest",
      "address": "0xE30feDd158A2e3b13e9badaeABaFc5516e95e8C7",
      "topics": []
    }
  ]
}
```

### `eth_uninstallFilter`

**Supported.** Removes a previously installed filter by ID; returns true if it existed and was removed.

**Parameters:**

| # | Name | Type | Description |
| :- | :- | :- | :- |
| 1 | `filterID` | QUANTITY/ID | Filter ID to remove. |

**Example request:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_uninstallFilter",
  "params": [
    "0x1"
  ]
}
```

### `eth_subscribe`

**Limited.** Opens a WebSocket-only push subscription for newHeads or logs notifications.

**Paxeer-specific behavior:** WebSocket-only. Only 'newHeads' and 'logs' are implemented.

**Parameters:**

| # | Name | Type | Description |
| :- | :- | :- | :- |
| 1 | `subscriptionType` | string | Subscription name: 'newHeads' or 'logs'. |
| 2 | `filter` | object | Optional filter criteria (address/topics) for the 'logs' subscription. |

**Example request:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_subscribe",
  "params": [
    "logs",
    {
      "address": "0xE30feDd158A2e3b13e9badaeABaFc5516e95e8C7",
      "topics": []
    }
  ]
}
```

### `eth_unsubscribe`

**Supported.** Cancels an existing WebSocket subscription by ID; returns true on success.

**Parameters:**

| # | Name | Type | Description |
| :- | :- | :- | :- |
| 1 | `subscriptionID` | string | The subscription ID returned by a prior eth_subscribe call. |

**Example request:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_unsubscribe",
  "params": [
    "0x9cef478923ff08bf67fde6c64013158d"
  ]
}
```

</Accordion>

<Accordion title="Simulation">
### `eth_call`

**Supported.** Executes a read-only message call against state without creating a transaction; supports state and block overrides.

**Parameters:**

| # | Name | Type | Description |
| :- | :- | :- | :- |
| 1 | `args` | object | Call object (to, from, data/input, gas, gasPrice/maxFeePerGas, value). |
| 2 | `blockNrOrHash` | BLOCKNUMBER or DATA | Block number, tag, or hash. Defaults to latest. |
| 3 | `overrides` | object | Optional per-account state overrides (balance, code, nonce, state). |
| 4 | `blockOverrides` | object | Optional block-context overrides (number, time, coinbase). |

**Example request:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_call",
  "params": [
    {
      "to": "0xE30feDd158A2e3b13e9badaeABaFc5516e95e8C7",
      "data": "0x18160ddd"
    },
    "latest"
  ]
}
```

### `eth_estimateGas`

**Supported.** Estimates the gas needed to execute a transaction.

**Parameters:**

| # | Name | Type | Description |
| :- | :- | :- | :- |
| 1 | `args` | object | Transaction call object. |
| 2 | `blockNrOrHash` | BLOCKNUMBER or DATA | Optional block number, tag, or hash; defaults to latest. |
| 3 | `overrides` | object | Optional state overrides. |

**Example request:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_estimateGas",
  "params": [
    {
      "to": "0xE30feDd158A2e3b13e9badaeABaFc5516e95e8C7",
      "data": "0x18160ddd"
    },
    "latest"
  ]
}
```

### `eth_createAccessList`

**Supported.** Generates an EIP-2930 access list (and gas used) for a transaction.

**Parameters:**

| # | Name | Type | Description |
| :- | :- | :- | :- |
| 1 | `args` | object | Transaction call object. |
| 2 | `blockNrOrHash` | BLOCKNUMBER or DATA | Optional block number, tag, or hash; defaults to pending. |

**Example request:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_createAccessList",
  "params": [
    {
      "to": "0xE30feDd158A2e3b13e9badaeABaFc5516e95e8C7",
      "data": "0x"
    },
    "pending"
  ]
}
```

</Accordion>

<Accordion title="Debugging & tracing">
### `debug_traceTransaction`

**Supported.** Replays a transaction by hash and returns an execution trace using the configured tracer.

**Parameters:**

| # | Name | Type | Description |
| :- | :- | :- | :- |
| 1 | `hash` | DATA, 32 bytes | Transaction hash to trace. |
| 2 | `config` | object | Optional tracer config (tracer name, tracerConfig, timeout, reexec, disableStorage/Stack/Memory). |

**Example request:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "debug_traceTransaction",
  "params": [
    "0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060",
    {
      "tracer": "callTracer"
    }
  ]
}
```

### `debug_traceBlockByNumber`

**Supported.** Traces all transactions in a block by number and returns per-transaction execution traces.

**Parameters:**

| # | Name | Type | Description |
| :- | :- | :- | :- |
| 1 | `number` | BLOCKNUMBER | Block number or tag. |
| 2 | `config` | object | Optional tracer config. |

**Example request:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "debug_traceBlockByNumber",
  "params": [
    "latest",
    {
      "tracer": "callTracer"
    }
  ]
}
```

### `debug_traceBlockByHash`

**Supported.** Traces all transactions in a block by hash and returns per-transaction execution traces.

**Parameters:**

| # | Name | Type | Description |
| :- | :- | :- | :- |
| 1 | `hash` | DATA, 32 bytes | Block hash. |
| 2 | `config` | object | Optional tracer config. |

**Example request:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "debug_traceBlockByHash",
  "params": [
    "0x5620c15afd9a1d0ab19d7560043df6e038d731c6205974dca7a55900071e3864",
    {
      "tracer": "callTracer"
    }
  ]
}
```

### `debug_traceCall`

**Supported.** Executes and traces a call against a block's state without creating a transaction.

**Parameters:**

| # | Name | Type | Description |
| :- | :- | :- | :- |
| 1 | `args` | object | Transaction call object. |
| 2 | `blockNrOrHash` | BLOCKNUMBER or DATA | Block number, tag, or hash. |
| 3 | `config` | object | Optional trace-call config (tracer name, state overrides, block overrides). |

**Example request:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "debug_traceCall",
  "params": [
    {
      "to": "0xE30feDd158A2e3b13e9badaeABaFc5516e95e8C7",
      "data": "0x70a08231"
    },
    "latest",
    {
      "tracer": "callTracer"
    }
  ]
}
```

</Accordion>

## Address Resolution

For resolving the EVM (`0x…`) ↔ Paxeer (`pax1…`) address pair, use the **`addr` precompile at `0x0000000000000000000000000000000000001004`** via a standard `eth_call`.

```bash
# EVM → Paxeer (getPaxeerAddr(address), selector 0x0c3c20ed)
curl -X POST $PAXEER_RPC -H "Content-Type: application/json" -d '{
  "jsonrpc": "2.0",
  "method": "eth_call",
  "params": [{
    "to": "0x0000000000000000000000000000000000001004",
    "data": "0x0c3c20ed000000000000000000000000<evmAddressWithout0x>"
  }, "latest"],
  "id": 1
}'
```

In TypeScript with viem:

```ts
import { createPublicClient, http } from 'viem';

const ADDR_PRECOMPILE = '0x0000000000000000000000000000000000001004';
const ADDR_ABI = [
  { name: 'getPaxeerAddr', type: 'function', stateMutability: 'view',
    inputs: [{ name: 'addr', type: 'address' }],
    outputs: [{ name: 'response', type: 'string' }] },
  { name: 'getEvmAddr', type: 'function', stateMutability: 'view',
    inputs: [{ name: 'addr', type: 'string' }],
    outputs: [{ name: 'response', type: 'address' }] },
] as const;

const paxeerChain = {
  id: 125,
  name: 'Paxeer',
  nativeCurrency: { name: 'Paxeer', symbol: 'HPX', decimals: 18 },
  rpcUrls: { default: { http: ['https://public-rpc.paxeer.app/evm/reference'] } },
};

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

const paxeerAddr = await client.readContract({
  address: ADDR_PRECOMPILE, abi: ADDR_ABI, functionName: 'getPaxeerAddr', args: ['0x…'],
});

const evmAddr = await client.readContract({
  address: ADDR_PRECOMPILE, abi: ADDR_ABI, functionName: 'getEvmAddr', args: ['pax1…'],
});
```

The call reverts when the input address is not yet associated. See [Accounts](/learn/accounts) for the full association lifecycle and how the bidirectional mapping is established.
