Releases: software-mansion/pathfinder
Release list
v0.24.0
Release highlights
Pathfinder 0.24.0 enables support for Starknet 0.14.4, improves RPC WebSocket reliability and limits, and hardens the feeder-gateway trace fallback against slow or untrusted responses.
Changed
- The
blockifierandstarknet_apicrates have been upgraded to 0.20.0-rc.0. - Class downloads no longer send
block_number=latestto the feeder gateway, as required by Starknet 0.14.4.
Added
--rpc.gateway-trace-timeoutCLI option (default 30s) bounding how longstarknet_traceTransactionandstarknet_traceBlockTransactionsmay spend on the feeder gateway fallback path.- BREAKING: The RPC server now pings websocket peers that have been quiet for
--rpc.websocket.ping-intervaland closes connections that leave--rpc.websocket.max-missed-pingspings unanswered. Clients are required to answer pings, which RFC 6455 mandates and which browsers and the mainstream websocket libraries handle for you, but only while the client is reading from the connection. A client that stops reading for longer than the ping interval times the missed ping limit is disconnected. The keepalive cannot be turned off, so--rpc.websocket.ping-interval,--rpc.websocket.initial-frame-timeoutand--rpc.websocket.max-missed-pingsall reject0. Raise the ping interval rather than trying to disable it. - Concurrently open RPC websocket connections are now limited to 1024 by default, configurable with the
--rpc.websocket.max-connectionsCLI option. Upgrade requests over the limit are rejected with HTTP 503. - RPC websocket connections that don't send anything after being established now time out, configurable with the
--rpc.websocket.initial-frame-timeoutCLI option. - New metrics:
rpc_websocket_connections(gauge),rpc_websocket_connections_rejected_totalandrpc_websocket_connections_closed_total(labelled withreason).
Fixed
--max-rpc-connectionsis now shared across all routes.- A batch request could open more subscriptions than
--rpc.websocket.max-subscriptionsallows, because the requests within a batch are handled concurrently and each of them checked the limit before any of them counted towards it. starknet_traceTransactionandstarknet_traceBlockTransactionsrequests that fall back to the feeder gateway could hang indefinitely on a slow or unresponsive sequencer (the gateway client retries transport errors with an unbounded exponential backoff), holding RPC tasks and letting a public-network client exhaust the RPC concurrency budget. These requests are now bounded by--rpc.gateway-trace-timeoutand bail out early on graceful shutdown.- Subscriptions are now torn down when their websocket connection closes, instead of when they next try to send.
- Hardened the feeder-gateway trace fallback path used by
starknet_traceTransactionandstarknet_traceBlockTransactionsfor the mainnet block range where local re-execution is impossible. Any public-network caller can force this path for the affected blocks, so a compromised or byzantine gateway response is untrusted authoritative input. The trace deserialiser now boundsinternal_callsnesting depth, caps the length of everyVec<Felt>/Vec<Event>/Vec<MsgToL1>field, and rejects unknown fields onFunctionInvocation; the trace mapper walksinternal_callsiteratively instead of recursively (preventing a stack-overflowSIGSEGVthat escapes the RPC layer'scatch_unwind); and the resource counters are summed with checked arithmetic instead of+/.unwrap()(preventing overflow panics). The gateway fallback path is also logged with atrace_sourcemarker.
v0.23.1
Release highlights
This release fixes the Internal error issue on some pre-Starknet 0.14.0 blocks and also includes minor RPC improvements.
Changed
- RPC WS subscriptions are now limited by the
--rpc.websocket.subscription-request-max-sizeoption (instead of--rpc.request-max-size, which is now used only for HTTP requests).
Added
- RPC HTTP connections that don't start a request now time out. The timeout is configurable with
--rpc.header-read-timeoutCLI option.
Fixed
- Retroactive
starknet_traceBlockTransactionson some pre-Starknet 0.14.0 blocks failed withInternal errordue toBlock max capacity reached on fields: proving_gas.
v0.23.0
Release highlights
This is a 0.22.8-beta.1 pre-release, with old JSON-RPC versions removal.
Added
- RPC metrics now carry a
block_targetlabel onrpc_method_calls_total(how a request targeted a block) and anerror_kindlabel onrpc_method_calls_failed_total(the error variant name). The bundled Grafana dashboard (utils/grafana/dashboard.json) gains an expanded JSON-RPC view, and Prometheus recording rules for RPC latency quantiles are provided inutils/prometheus/rpc-recording-rules.yml.
Changed
- JSON-RPC 0.8, 0.7 and 0.6 API support has been removed.
- JSON-RPC API version 0.9 is now served by default on the
/path. - RPC method-call latency is now exported as a Prometheus histogram in seconds,
rpc_method_calls_duration_seconds(_bucket/_sum/_count), replacing the summaryrpc_method_calls_duration_milliseconds. Update alerts and dashboards to the new name and derive quantiles withhistogram_quantile(...)over the_bucketseries; seedocs/docs/monitoring-and-metrics.md. - Preconfirmed blocks are now accumulated from the local commit head to the preconfirmed tip, improving RPC latency.
Fixed
- The default
--rpc.compiler.concurrency-limitnow respects the container's cgroup memory limit instead of the host's total RAM, so it no longer over-provisions compiler concurrency (risking OOM) when running in a memory-limited container. starknet_getMessagesStatusnow returnsfailure_reasonfrom the reverted execution status.
v0.22.8-beta.1
Release highlights
This is a pre-release version of Pathfinder aimed at improving preconfirmed RPC latency, and metrics.
Added
- RPC metrics now carry a
block_targetlabel onrpc_method_calls_total(how a request targeted a block) and anerror_kindlabel onrpc_method_calls_failed_total(the error variant name). The bundled Grafana dashboard (utils/grafana/dashboard.json) gains an expanded JSON-RPC view, and Prometheus recording rules for RPC latency quantiles are provided inutils/prometheus/rpc-recording-rules.yml.
Changed
- RPC method-call latency is now exported as a Prometheus histogram in seconds,
rpc_method_calls_duration_seconds(_bucket/_sum/_count), replacing the summaryrpc_method_calls_duration_milliseconds. Update alerts and dashboards to the new name and derive quantiles withhistogram_quantile(...)over the_bucketseries; seedocs/docs/monitoring-and-metrics.md. - Preconfirmed blocks are now accumulated from the local commit head to the preconfirmed tip, improving RPC latency.
Fixed
- The default
--rpc.compiler.concurrency-limitnow respects the container's cgroup memory limit instead of the host's total RAM, so it no longer over-provisions compiler concurrency (risking OOM) when running in a memory-limited container. starknet_getMessagesStatusnow returnsfailure_reasonfrom the reverted execution status on JSON-RPC v0.9 and later, while preserving the legacy rejected-status failure reason on older RPC versions.
v0.22.7
Fixed
- Missing versioned constants for 0.14.3 causing some
starknet_traceBlockTransactionscalls to fail.
v0.22.6
Added
- Pre-confirmed polling start threshold is now configurable with the
--sync.poll-pre-confirmed-thresholdCLI option.
Changed
CANDIDATEtransaction status is deprecated and will never be returned by gateway or pathfinder. Using it as a filter insubscribeNewTransactionswill fall back toPRE_CONFIRMEDwith a warning.- The
blockifierandstarknet_apicrates have been upgraded to 0.19.0-rc.2.
v0.22.5
Added
- Parallel Sierra to CASM compilation processes during RPC requests are now limited to the number of CPU cores available by default, configurable with
--rpc.compiler.concurrency-limitCLI option.
Fixed
- Pre-confirmed block polling re-fetching the full block on every poll due to a
block_identifierfield being deserialized under the wrong name.
v0.22.4
Release Highlights
Pathfinder 0.22.4 enables support for Starknet 0.14.3, among many other fixes and improvements
Changed
- The limit for bytecode size in compilation is now defaulting to 81920 bytes and configurable with the new
--max-bytecode-sizeCLI option. - Committed-block sync now fetches block, state update, and signature in a single feeder-gateway request. Requires a feeder gateway that supports
includeSignatureonget_state_update. - RPC request size and timeout limits are now configurable with
--rpc.request-max-sizeand--rpc.request-timeoutCLI options. - RPC request batch size is now configurable with
--rpc.batch-size-limitCLI option. - The
blockifierandstarknet_apicrates have been upgraded to 0.19.0-rc.0.
Added
- Parallel subscriptions on a single WS connection are now limited to 1024 by default, configurable with
--rpc.websocket.max-subscriptionsCLI option.
v0.22.3
Release Highlights
Pathfinder 0.22.3 fixes starknet_estimateFee and starknet_simulateTransactions rejecting transactions with a non-zero tip.
Changed
starknet_getEventsnow returnsblock_numberfor events from pre-confirmed and pre-latest blocks.
Fixed
starknet_estimateFeeandstarknet_simulateTransactionsrejecting transactions with a non-zero tip when the account balance could cover the fee. The maximum L2 gas bound now accounts for the tip, matching the blockifier's fee calculation (max_amount * (max_price_per_unit + tip)).
v0.22.2
Release Highlights
Pathfinder 0.22.2 upgrades the blockifier and related dependencies to the latest version.
Changed
- The
blockifierandstarknet_apicrates have been upgraded to 0.18.0-rc.1.
Added
- Blockifier libfunc list used for compilation verification is now defaulting to
auditedand configurable with the new--blockifier.libfunc-listCLI option.