On this page
Persist records. Retrieve system state.

Independent access to network history

A Paxeer X relay/archive follows an existing LayerX network, stores complete canonical history and serves public reads. It forwards the user's original signed activities to explicitly configured submission endpoints. Its role is distribution and durable history: ordering, state execution and finality quorum participation belong to the sequencer and guarantors.

RoleResponsibilityAuthority
Relay/archiveVerify and retain canonical history, answer queries, forward signed activitiesPinned network and sequencer identity; no sequencer signing key
SequencerOrder activities and sign batch historyAuthorized sequencer key and batch range
GuarantorReplay transitions and attest matching resultsConfigured guarantor membership and bonds
Hosted gatewayProvide authenticated RPC and receipt subscriptionsAPI credentials, scopes and verified upstream evidence

Pin trust before synchronization

Configure network_id, the SHA-256 of the exact signed genesis manifest, the sequencer identifier and its Ed25519 public key. Optionally restrict the sequencer's first and last authorized batch. Obtain these values independently of synchronization servers.

GET /v1/sync/network provides discovery metadata. The archive checks every fetched manifest, snapshot and batch against its pins and native canonical codecs, refusing changed network identity, invalid signatures, batch gaps, predecessor mismatches and incorrect section roots.

Install and run

The release bundle contains layerxd, layerx-archive-codec, the Python runtime modules, a service unit and manifest.sha256. Verify the release manifest through an independent channel. The installer creates an unprivileged service account and enables layerx-relay-archive.service; non-loopback listeners require TLS.

layerxd --relay-archive /etc/layerx/relay-archive.json

The daemon starts the installed standard-library Python runtime and uses layerx-archive-codec for signed bootstrap and batch verification. Configure durable storage through data_dir, read origins through upstreams and submission destinations through submission_upstreams.

SettingPurpose
listen, public_urlListener and advertised origin
poll_interval_seconds, request_timeout_secondsSynchronization cadence and bounded upstream waits
max_activity_bytes, max_batch_bytes, max_response_bytesBound incoming and fetched data
history_page_limit, max_history_page_limitDefault and maximum history page sizes
peer_discoveryCompatible, bounded and expiring read-peer advertisements
source_lni_socket, source_submission_token_fileOptional local native submission integration; never publicly advertised

Use credential-free URLs without query strings or fragments. Explicit allow_loopback_dev and a literal loopback endpoint enable local HTTP development. Loopback peers remain excluded from public advertisements.

Durable history and restart

The archive atomically stores raw genesis, snapshot, batches, activities, receipts and maintenance records before advancing its head. Restart resumes at the durable next-batch position. Conflicting bytes and gaps are refused rather than concealed by advancing the cursor.

This is durable history recovery. Execution replay is a separate operation performed by nodes and guarantors using authenticated batch data. An archive's inclusion label means native verification proved a record belongs to its committed batch.

Synchronization endpoints

GET routeResult
/v1/sync/networkNetwork, genesis, snapshot and sequencer discovery metadata
/v1/sync/genesisExact signed genesis-manifest bytes
/v1/sync/snapshotExact canonical genesis-snapshot bytes
/v1/sync/headHead batch, its identifiers and the next batch
/v1/sync/batches/NVerified, durably committed canonical batch bytes
/v1/peersBounded compatible-peer advertisements
/healthz, /readyzProcess liveness and pinned-bootstrap/durable-sync readiness

Raw responses include Content-Length, a quoted SHA-256 ETag and X-Content-SHA256; batches also include X-LayerX-Batch. Synchronization clients refuse redirects.

Query canonical history

# Replace this example origin with your archive's HTTPS origin.
curl -sS 'https://archive.example.net/v1/history/activities?limit=100'
curl -sS 'https://archive.example.net/v1/history/receipts?limit=100&batch=12'
curl -sS 'https://archive.example.net/v1/history/batches/12'

List routes return {version:1, items:[...], next_cursor:string|null}. Continue using the returned cursor until it is null. Activity and receipt details include canonical_hex for exact-byte verification.

CollectionList filtersDetail selector
/v1/history/activitiescursor, limit, actor, account, module, batchActivity ID
/v1/history/receiptscursor, limit, batchActivity ID
/v1/history/batchescursor, limitBatch number
/v1/history/maintenancecursor, limit, batchMaintenance cursor

Append the detail selector to the collection route. IDs and digests use 64 lowercase hexadecimal characters; batch numbers use canonical unsigned decimal.

Forward original signed activities

POST /v1/activities accepts bounded original signed activity bytes and an optional Idempotency-Key. The relay preserves the exact bytes. Incoming Authorization or LayerX-Key credentials go only to configured submission endpoints.

Peer discovery extends read synchronization and never changes submission failover. A newly discovered archive cannot become a destination for private credentials or signed submissions.

Archive JSON-RPC subset

POST /rpc serves lx_getNodeInfo, lx_getArchiveNetwork, lx_getArchiveHead, lx_getActivityStatus, lx_getReceipt, lx_getBatchHeader, lx_listActivities and lx_listBatches, and forwards lx_sendActivity.

Receipt subscriptions and durable reconciliation

Receipt WebSocket subscriptions belong to the hosted gateway at GET /rpc/ws. Authenticate with LayerX-Key and receipt:read; checkpoint and account topics require state:read. Use the archive's history queries for durable reconciliation beyond the subscription resume window.

{"jsonrpc":"2.0","id":1,"method":"lx_subscribe","params":["receipts","41"]}

On the WebSocket, this resumes receipts after cursor 41. Persist each delivered params.cursor with the event your application accepts. The resume window is 16 positions: a wider gap returns -32005, an ahead-of-head cursor returns -32602, and an unavailable feed returns -32001. Reconcile through reads and create a fresh subscription when resume is refused. Sending subscription methods to HTTPS POST /rpc returns -32004.

See Receipts & Proofs, Data Availability and External Mirrors for independent verification and historical evidence.

Paxeer X · System documentationBack to top ↑

Ask Paxeer X Docs

Answers from the documentation.

What would you like to know?

Ask a question, find a guide, or get help with your next step.

Enter to send · Shift+Enter for a new line