Thesettlementlayerforthemachineeconomy.

Interface

Eight reads across both domains

px_* cross-domain read namespace

Join identity, balances, assets, network head and history on one JSON-RPC endpoint.

You call eight px_* read methods on the same endpoint that relays eth_* and answers lx_*. They resolve an account across the Paxeer EVM base layer and the LayerX agent domain, then join balances, the asset map, the network head and merged history tagged by side. The gateway reads the joins from native precompiles and the indexer, so a domain it cannot read answers -32001 instead of a fabricated zero. The hosted gateway's limited beta has not opened yet.

What it does

The px_* namespace is served by the Paxeer X network gateway on the same JSON-RPC endpoint that relays the EVM eth_ namespace and answers the LayerX lx_ methods. Eight read methods resolve one account across the Paxeer EVM base layer and the LayerX agent domain, then join its balances, the asset map, the network head and its transaction history. The gateway resolves the joins by calling three native precompiles on the chain (addr at 0x0000000000000000000000000000000000001004, layerxCustody at 0x0000000000000000000000000000000000001013 and layerxAnchor at 0x0000000000000000000000000000000000001014) and reads history from the indexer's read API. A domain that cannot be read returns an explicit error, never a fabricated zero.

Key capabilities

  • px_resolveAccount maps an EVM address, a did:layerx: DID or a bare DID public key to both halves.
  • px_getAccount and px_getBalances return balance, nonce and per-asset amounts from both domains together.
  • px_listAssets joins each LayerX asset with its custody record: pointer, caps, custodied, released and pending.
  • px_getNetwork returns the network id, EVM chain id, latest block and the anchor's finalized batch and status.
  • px_getUnifiedHistory merges both sides' indexer pages newest first, tagging every row with its side.
  • px_getCapabilities probes the exchange, bridge and launchpad precompiles for code at one block height.

Who it's for

Wallet, explorer and dashboard developers who need one account view across both domains.

Why it matters

A wallet or explorer reads an account's EVM half and its agent-domain half in one call against one endpoint, instead of running two clients and reconciling identities itself. Absent data stays absent: an unreadable domain answers -32001 rather than a zero balance, so a client never shows a balance the network did not state.

Differentiators

One endpoint serves the EVM eth_ relay, the LayerX lx_ methods and the joined px_ reads, and a single batch may mix EVM and LayerX calls. The joins resolve through native precompiles on the chain rather than an off-chain mapping table. px_getCapabilities lets a client discover which fork surfaces the chain answers for at a stated height instead of assuming they are live.

Outcomes

  • One account view instead of two clients and reconciliation
  • Absent data stays absent, never a zero the network did not state
  • Discover which fork surfaces answer at a stated block height

Technical notes

  • Read-only: there is no px_ write method. Writes go through eth_sendRawTransaction or lx_sendActivity on the same endpoint. The TypeScript and Python PxClient classes expose the seven join and history methods; px_getCapabilities is served by the gateway and called directly.
  • MAX_JOINED_ASSETS = 16 bounds both joins: at most 16 assets per px_getBalances or px_listAssets answer, reported back as joined_limit, and at most 16 resolved account sides per unified history. The SDK decoders accept up to 1024 asset rows.
  • History pages default to 50 rows and cap at 100. Cursors are the indexer's opaque row cursors, passed through unchanged; both domains share one row sequence, so a unified page is the exact merge of every side's page at the same cursor. Every row carries chain, and unified rows also carry side, each "layerx" or "paxeer".
  • Refusals are typed: an unconfigured Paxeer endpoint is -32001 with data.code = paxeer_rpc_not_configured, and history without an indexer is -32001 with indexer_not_configured. The anchor status ladder is 0 unknown, 1 submitted, 2 final.
  • px_getCapabilities caches its probe for LAYERX_GATEWAY_CAPABILITIES_TTL_SECONDS, default 15 and maximum 300. While a surface reads false, transactions addressed to its precompile are refused with -32003 surface_unavailable; reads and history are never gated.
  • Reachable only through the network gateway, whose limited beta has not opened yet. Runtime floors are Node.js 22 or newer and Python 3.11 or newer.
import { PxClient } from "paxeer-xdk";

const px = new PxClient({ endpoint: process.env.PAXEER_RPC_URL! });
const account = await px.resolveAccount("0x1111111111111111111111111111111111111111");
const balances = await px.getBalances(account.evmAddress!);
const page = await px.getUnifiedHistory(account.evmAddress!, { limit: 50 });

console.log(account.layerxDid, balances.joinedLimit);
for (const row of page.items) {
  console.log(row.side, row.kind, row.asset, row.amount);
}

More in Interface

Build on Paxeer.

Give your agent a wallet, set its policy, and settle your first call on LayerX.