All notable changes to this project will be documented in this file.
More expansive patch notes and explanations may be found in the specific pathfinder release notes.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- The v10 JSON-RPC endpoint now supports final JSON-RPC v0.10.1 spec.
starknet_traceBlockTransactionsparametertrace_flagsis not optional (as required by the spec).- Starknet 0.14.2 blocks are now using the correct versioned constants.
- The
--ethereum.urloption now requires a WebSocket URL (ws://orwss://). HTTP/HTTPS URLs are no longer automatically converted to WebSocket and will result in an error. - The Pathfinder binary now has two subcommands:
node- runs the Pathfinder node as before, serving JSON-RPC and syncing with the network. This is the default subcommand and will run if no subcommand is passed.compile- compile a Sierra class (passed viastdin) to CASM (output tostdout).
- Forwarding gateway HTTP error 413 when handling
starknet_addDeclareTransaction,starknet_addDeployAccountTransactionandstarknet_addInvokeTransaction. - Two new CLI options for the
nodesubcommand:compiler.max-memory-usage-mib- maximum memory usage for the compiler process, in MiB.compiler.max-cpu-time-secs- maximum (active) CPU time for the compiler process, in seconds.
- Pathfinder is now polling for DNS changes for the feeder gateway and gateway host name. By default the host names are resolved every 60s and the HTTP client connection pool is re-created to force reconnecting to the new address. The interval is configurable with the new
--gateway.check-for-dns-updates-intervalCLI option. starknet_getStorageAtnow returns the last update block (in addition to storage value) if theINCLUDE_LAST_UPDATE_BLOCKflag was set in its input.starknet_getStateUpdatenow supports an address filter.
- JSON-RPC serialization of
INITIAL_READSis not compliant with the specification. Pathfinder returnsstorage_keyproperties for storage reads instead of thekeyproperty required by the spec. starknet_addInvokeTransactionis not forwardingproof_factsproperty to the Starknet gateway.
-
Added support for the "return initial reads" feature introduced in JSON-RPC version 0.10.1:
- Added
RETURN_INITIAL_READSflag tostarknet_simulateTransactionsinput simulation flags. Only supported if JSON-RPC version is 0.10.0 or higher. - Added a
trace_flagsfield tostarknet_traceBlockTransactionsinput. Currently the only available flag isRETURN_INITIAL_READS. Only supported if JSON-RPC version is V10 or higher.
- Added
-
Preliminary support for JSON-RPC 0.10.1
proof_factsandprooftransaction properties.
-
starknet_simulateTransactionsnow has a different response format based on whether or not theRETURN_INITIAL_READSflag was set in the input:- If the flag was not set, the response is identical to previous RPC versions (an array of transaction simulations).
- If the flag was set, the response is an object with two fields:
- "simulated_transactions" - an array of transaction simulations (previous RPC version output).
- "initial_reads" - an
INITIAL_READSobject, containing an aggregate of all initial reads for the simulated transactions.
-
starknet_traceBlockTransactionsnow has a different response format based on whether or not theRETURN_INITIAL_READSflag was set in the input:- If the flag was not set, the response is identical to previous RPC versions (an array of transaction traces).
- If the flag was set, the response is an object with two fields:
- "traces" - an array of transaction traces (previous RPC version output).
- "initial_reads" - an
INITIAL_READSobject, containing an aggregate of all initial reads for the traced transactions.
- Support for
deflate-compressed responses from the feeder gateway.
- Pathfinder stops syncing on networks where response compression has been enabled on the feeder gateway.
- Support for gzip-compressed responses from the feeder gateway.
- The new
--rpc.native-execution-force-use-for-incompatible-classesCLI option can be used to force use of native execution even for pre-1.7.0 Sierra classes (where fee calculation is known to be inaccurate). Use this flag at your own risk.
blockifierhas been upgraded to 0.16.0-rc.3.
- The new histogram metric
rpc_method_calls_duration_millisecondshas been added to expose JSON-RPC method call latency data.
blockifierhas been upgraded to 0.16.0-rc.2.- Pathfinder no longer returns
event_commitmentandtransaction_commitmentvalues for Starknet blocks older than Starknet version 0.13.2.
starknet_traceTransactiontimes out for some transactions because fetching transaction traces from the feeder gateway fails due to some unknown fields in the response.
- Pathfinder now serves the JSON-RPC 0.10.0 API on the
v0_10routes. - The size of the block trace cache is now configurable by the new
--rpc.block-trace-cache-sizeCLI argument.
- Pathfinder exits after receiving an internal server error from the feeder gateway.
starknet_estimateFeeandstarknet_simulateTransactionsfails if one of the transactions is using a class that has been declared by a simulated DECLARE transaction in the batch.- Cairo Native is not working correctly with Docker images published on Docker Hub due to a linker error.
- Support for Starknet 0.14.1 networks.
- Inconsistent state updates when using "pre_confirmed" block identifier with
starknet_call,starknet_estimateFeeandstarknet_simulateTransactionsJSON-RPC methods.
starknet_estimateFeefails if the validate entry point runs ouf of gas during L2 fee binary search.- Pathfinder stops syncing for a minute after logging an "L2 sync process terminated with: Download block from sequencer" error.
starknet_simulateTransactionssometimes fails forDEPLOY_ACCOUNTtransactions if theSKIP_FEE_CHARGEsimulation flag is not set. This happens even though the account address has the sufficient funds to execute the transaction.
- Pathfinder panics with "Block number Z is not in the range X..=Y" after starting up from an old Sepolia testnet database snapshot.
- Pathfinder returns internal errors for some
starknet_getTransactionStatus/starknet_getTransactionReceiptqueries for transactions in the pre-confirmed block. - L2 sync stalls for a while after logging an "L2 sync process terminated with: Fetch signature for BlockNumber(XXX) from sequencer" error.
- Polling of pre-confirmed data has been improved to reduce end-to-end latency. Pathfinder now polls both the pre-latest and pre-confirmed data from the feeder gateway.
- reorg notifications for
starknet_subscribeNewTransactionsandstarknet_subscribeNewTransactionReceipts
blockifierhas been upgraded to version 0.15.0-rc.4.
starknet_subscribeNewTransactionsdoesn't accept theRECEIVEDfinality status filter.- Pathfinder gets stuck in a loop and prints "State root mismatch" errors after starting up from a database with current state that has been re-orged.
starknet_traceTransactionandstarknet_traceBlockTransactionsfalls back to fetching transaction traces for Starknet mainnet block range 1943704-1952704 (inclusive). Local re-execution would lead to a different result due to a sequencer issue that was present when these blocks were produced.- Pathfinder gets stuck syncing and stops responding to JSON-RPC requests.
--rpc.disable-batch-requestsCLI option, for instances not wishing to support batch requests.
- Pathfinder cannot recover after a reorg involving more than 1000 blocks. L2 reorg fails with error "Reorg exceeded local blockchain cache".
blockifierhas been upgraded to version 0.15.0-rc.3.
- JSON-RPC response reflects an inconsistent state after receiving a notification over a Websocket subscription.
starknet_getClassAtnow returnsDEPRECATED_CAIRO_ENTRY_POINT.offsetas a hex string instead of an integer. This change aligns the response format with the specification, which expectsNUM_AS_HEXfor this field.- Make dialing procedure of bootnodes more permissive.
- Pathfinder now implements the final JSON-RPC 0.9.0 specification.
blockifierhas been upgraded to version 0.15.0-rc.2.- The default JSON-RPC listen address has been changed to the IPv6 wildcard address in our Docker images. This avoids problems on IPv6-enabled hosts where
localhostresolves to::1. - The default JSON-RPC version (served on the '/' route) has been changed to v08.
- JSON-RPC
starknet_estimateFeeandstarknet_simulateTransactionsnow use non-strict nonce checking when using theSKIP_VALIDATEflag. That is, the nonce value needs to be larger than the last used value but no exact match is required. starknet_getTransactionStatusnow returns ACCEPTED_* only when that status is known locally, not when it's received from the gateway for an otherwise-unknown transaction.- value of the
--sync.poll-intervalcommand-line option can now specify fractional seconds
starknet_getEventsreturns an incomplete result set if the block range includes empty blocks.
pathfinder_lastL1AcceptedBlockHashAndNumber, a pathfinder extension analogous tostarknet_blockHashAndNumber- Pathfinder now accepts the
l1_acceptedBLOCK_TAGon the JSON-RPC interface. This can be used to reference the latest L1 accepted block known by the node.
- All WebSocket API routes (served on
/ws) are now deprecated and will be removed on the next release. Additionally, Pathfinder no longer supportspathfinder_subscribeandpathfinder_unsubscribemethods on these routes. - Some of the CLI options that are no longer needed have also been removed:
rpc.websocket.buffer-capacityrpc.websocket.topic-capacity
- The default value of L2 gas price for historical blocks has been changed from 0 to 1 (for both WEI and FRI), to agree with the feeder gateway default.
- Trying to enable blockchain pruning on an archive database does indeed enable pruning in the database despite printing an error that pruning cannot be enabled.
- When running on Starknet < 0.14.0 and querying for the "pre_confirmed" block header Pathfinder returns a non-conformant response that has "parent_hash" instead of "block_number".
- Transaction execution errors and contract errors are returning unstructured error information on the JSON-RPC 0.9.0 API.
-
Pathfinder now supports syncing from Starknet 0.14.0. Support is still incomplete, execution and compilation of new classes will likely fail for new classes until a further upgrade.
-
Pathfinder now supports storing only the latest state of the blockchain history. This can be configured with the '--storage.blockchain-history' CLI option.
-
Accepted values are:
- "archive" (default) – Full history of the blockchain is stored.
- "N" – An integer specifying the number of historical blocks to store, in addition to the latest block (N + 1 blocks will be stored).
-
Affected JSON-RPC methods are:
starknet_callstarknet_estimateFeestarknet_estimateMessageFeestarknet_getBlockTransactionCountstarknet_getBlockWithTxHashesstarknet_getBlockWithTxsstarknet_getBlockWithReceiptsstarknet_getClassstarknet_getClassAtstarknet_getClassHashAtstarknet_getEventsstarknet_getNoncestarknet_getStateUpdatestarknet_getStorageAtstarknet_getStorageProofstarknet_getTransactionByBlockIdAndIndexstarknet_simulateTransactionsstarknet_traceBlockTransactions
-
With pruning enabled, affected JSON-RPC method requests will only succeed if the requested block is within the last N + 1 blocks.
-
The choice between
archiveandprunedmode is made once, when creating the database. Once chosen, it cannot be changed without creating a new database. -
It is possible to change the number of blocks stored in pruned mode between runs, using the same CLI option with a different value for N.
-
Note that the number of blocks stored is relative to: a. The latest L1 checkpoint if it exists and the latest L2 block is ahead of it b. The latest L2 block if it is behind the latest L1 checkpoint or no L1 checkpoints have been received by the node (practically unreachable)
-
-
starknet_getTransactionStatusnow returns RECEIVED even when the gateway cannot find the transaction, provided the transaction was successfully sent by the responding node within the last 5 minutes. -
Pathfinder now allows the users to configure the number of historical messages to be streamed via the webscoket API. This can be done using the
--rpc.websocket.max-historyCLI option.-
Accepted values are:
- "unlimited" - All historical messages will be streamed.
- "N" - An integer specifying the number of historical messages to be streamed.
-
This option defaults to N = 1024 if not specified.
-
starknet_unsubscribedoes not accept subscription IDs as strings.starknet_estimateFeeis failing for Braavos DEPLOY_ACCOUNT transactions involving a new Sierra 1.7.0 class.starknet_traceBlockTransactionsfails for blocks <= 2687.- JSON-RPC v0.8.1
starknet_estimateFeemethod call fails if the account balance is zero. - Websockets can be used even when
--rpc.websocket.enabledisn't set.
--rpc.get-events-max-uncached-event-filters-to-loadCLI option has been replaced withrpc.get-events-event-filter-block-range-limit. The new option serves the same purpose of preventing queries from taking too long, but it should be clearer in its intent.blockifierhas been upgraded to version 0.15.0-rc.1, adding initial support for Starknet 0.14.0 execution.- The default value of the
--sync.poll-intervalconfiguration parameter has been changed to 1 seconds. Pathfinder is now polling both the latest block information and the pending/pre-confirmed block every second by default.
pathfinder_getProof,pathfinder_getClassProofandpathfinder_getTransactionStatus(obsoleted by standardizedstarknet_*APIs).
starknet_estimateFeeis failing for Braavos DEPLOY_ACCOUNT transactions involving a new Sierra 1.7.0 class.starknet_unsubscribedoes not accept subscription IDs as strings.starknet_traceBlockTransactionsfails for blocks <= 2687.
starknet_simulateTransactionsreturns an error instead of the trace of the reverted transaction if the L2 gas cap is insufficient.starknet_traceTransactionandstarknet_traceBlockTransactionsreturns an internal error with no details upon encountering a transaction execution error.starknet_getEventsreturns an incomplete set of events for some queries over a block range larger than 106k blocks.
- The JSON-RPC 0.8.0 API can now be accessed under
/ws/rpc/v0_8as well if Websockets are enabled. This is equivalent to the/rpc/v0_8path and is provided only as a convenience feature.
starknet_subscribeEventssubscriptions stop sending notifications.- Broken aggregate bloom filter migration has been updated to work properly. If you migrated from a database running in archived mode, please re-download our latest snapshot and re-run the migrations.
starknet_getStateUpdatehasnew_rootandold_rootswapped.
- JSON-RPC 0.8
subscription_idis now a string. - Pathfinder now supports the JSON-RPC 0.8.1 specification. In this new version, the Websocket
subscription_idtype has been changed tostring.
- Support for custom versioned constants for multiple Starknet versions.
- Support for Starknet 0.13.5.
starknet_estimateFeereturns an internal error for v3 transactions with L2 gasmax_price_per_unitset to zero.starknet_getCompiledCasmreturns CASM wrapped in acasmproperty.starknet_traceBlockTransactionsfails on Starknet 0.13.4 when a fallback to fetching from the feeder gateway is required.- Websocket subscriptions to the
latestblock do not send notifications for the current latest block. starknet_subscribeEventssubscriptions send matching events only from thelatestblock, not as soon as those show up inpending.- Pathfinder stops receiving L1 state updates.
- Pathfinder does not return
transaction_hashinstarknet_getBlockWithTxnsresponse. - Custom networks cannot be configured for pre-0.13.4 Starknet versions,
- Support for Starknet 0.13.4.
- Support for the JSON-RPC 0.8.0-rc3 API, including Websocket subscriptions.
- Graceful shutdown upon SIGINT and SIGTERM with a default grace period of 10 seconds, configurable via
--shutdown.grace-period.
storage_commitmentandclass_commitmentfields from thepathfinder_subscribe_newHeadsmethod response.
pathfinder_getProof,pathfinder_getClassProofreturnProofMissing(10001) when Pathfinder is inarchivemode and queried block's tries are empty.starknet_syncingreturnsu64::MAXas the starting block number when starting from scratch.
- Use aggregate Bloom filters for
starknet_getEventsto improve performance.
- Cairo 0 class definition size is now capped at 4 MiB.
- Pathfinder fails to properly do a reorg due to a SQL statement referring a table that does not exist.
--rpc.get-events-max-uncached-bloom-filters-to-loadsetting is ineffective.
starknet_getBlockWithReceiptsreturnstransaction_hashwithin thetransactionobject making the response not strictly spec compliant. Fixed on the JSON-RPC 0.8 interface.- JSON-RPC 0.7 methods returning block headers are including the
l2_gasproperty.
- Pathfinder is now compiled with arithmetic overflow checks enabled in release mode to mitigate potential issues.
- Pathfinder now fetches data concurrently from the feeder gateway when catching up. The
--gateway.fetch-concurrencyCLI option can be used to limit how many blocks are fetched concurrently (the default is 8). --disable-version-update-checkCLI option has been added to disable the periodic checking for a new version.- Add
pathfinder_getClassProofendpoint to retrieve the Merkle proof of any class hash in the class trie. - add
process_start_time_secondsmetric showing the unix timestamp when the process started. --log-output-jsonCLI option has been added to output the Pathfinder log in line-delimited JSON.- Preliminary support has been added for the new JSON-RPC 0.8.0-rc1 specification.
- Ethereum RPC API now requires Websocket endpoints (prev. HTTP). If an HTTP url is provided instead, Pathfinder will attempt to connect vía Websocket protocol at that same url.
- JSON-RPC 0.4.0 and 0.5.0 API support has been removed.
- JSON-RPC API version 0.7 is now served by default on the
/path.
starknet_getBlockWithTxsworks with empty blocks`
- Pathfinder is now compiled with arithmetic overflow checks enabled in release mode to mitigate potential issues.
- Pathfinder stops syncing Sepolia testnet at block 218484 because of a block hash mismatch.
- Pathfinder occasionally corrupts its Merkle trie storage during reorgs and then stops later with a "Node X at height Y is missing" or "Stored node's hash is missing" error.
- Pathfinder sometimes returns an INVALID_CONTINUATION_TOKEN error when requesting events from the pending block and providing a continuation token.
starknet_getEventsincorrectly returns pending events iffrom_blockis greater than latest_block_number + 1.starknet_getEventsincorrectly does not return pending events iffrom_blockispendingandto_blockis missing.
--sync.l1-poll-intervalCLI option has been added to set the poll interval for L1 state. Defaults to 30s.- Support for Starknet 0.13.2.1.
- Pathfinder does not properly limit the number of concurrent executors when using the
--rpc.execution-concurrencyCLI option. - Pathfinder returns non-conforming
STRUCT_ABI_ENTRYobjects in response tostarknet_getClassrequests. - Pathfinder returns
starknet_getStateUpdateresponses that are non-conformant with the specification if there are replaced classes in the response.
- Support for Starknet v0.13.2.
- Pathfinder now creates a new directory if the database path specified does not exist.
- Pathfinder now has a CLI option (
--rpc.custom-versioned-constants-json-path) to allow loading a custom versioned constants JSON file. When specified the contents of the file is then used instead of the latest constants built into the blockifier crate during execution of Cairo code.
- Pathfinder exits with an error when detecting a one-block reorg if
--storage.state-triesis set to0. - Pathfinder returns an internal error for
starknet_getTransactionReceiptrequests wherestepswould be zero in COMPUTATION_RESOURCES.
starknet_getTransactionReceiptresponses are missing thepayloadproperty inMSG_TO_L1objects on the JSON-RPC 0.7 interface.starknet_traceTransactionandstarknet_traceBlockTransactionsreturns L2 to L1 messages from inner calls duplicated.
starknet_getTransactionReceiptresponses are not compliant with the JSON-RPC specification:- L1 handler receipts throw an internal error
execution_statusandrevert_reasonproperties are missing
starknet_getBlockWithTxHashesandstarknet_getBlockWithTxsreturns the pending block with astatusproperty that's not in the JSON-RPC specification. This has been fixed for the JSON-RPC 0.7 API endpoint.starknet_traceBlockTransactionsandstarknet_traceTransactionnow falls back to fetching the trace from the feeder gateway for all blocks before Starknet 0.13.1.1.
/ready/syncedendpoint to check if the JSON RPC API is ready and also check if the node is synced. Useful for Docker nodes which only want to be available after syncing.- Websocket endpoints now serve all JSON-RPC methods, not just
pathfinder_subscribeandpathfinder_unsubscribe. Version-specific endpoints have been added for the 0.6 and 0.7 JSON-RPC API and the Pathfinder extension API. - Websocket endpoint for subscribing to events and transaction status changes.
- Improved compactness of transaction and nonce data, resulting in noticeable storage savings.
- Pathfinder now supports storing only the latest state of the Merkle tries. This can be enabled by specifying '--storage.prune-state-tries true' on the command line when creating a new database.
- When enabled, storage proofs can be generated only for the latest block.
- Pruned merkle tries take significantly less disk space than full ones.
- Pathfinder stores this setting in its database and defaults to using that.
- Once set pruning cannot be enabled/disabled for non-empty databases.
- Pruning achieves a ~75% reduction in overall storage compared to archive.
- Support for Goerli testnet
- Improved compactness of state diff and transaction data, resulting in noticeable storage savings.
- Roughly a 20% reduction for a state trie archive node, or a 45% reduction for a pruned variant.
- blockifier has been upgraded to version 0.6.0-rc.2.
- blockifier has been upgraded to version 0.6.0-rc.1.
- Support for Starknet v0.13.1.1 (lowered declare transaction fees).
starknet_estimateFeeandstarknet_simulateTransactionscan return fee estimates below the minimum fee expected by the sequencer for trivial transactions.
starknet_estimateFeeandstarknet_simulateTransactionsalways uses CALLDATA L1 DA mode if there is no pending block.starknet_getTransactionStatusreports gateway errors asTxnNotFound. These are now reported as internal errors.starknet_addXXXrequests to the gateway use the configured gateway timeout, often causing these to timeout while waiting for a gateway response. These instead now use a much longer timeout.
starknet_getTransactionStatusreports gateway errors asTxnNotFound. These are now reported as internal errors.- Sync process leaves a zombie task behind each time it restarts, wasting resources.
starknet_getEventsdoes not return a continuation token if not all events from the last block fit into the result page.starknet_addXXXrequests to the gateway use the configured gateway timeout, often causing these to timeout while waiting for a gateway response. These instead now use a much longer timeout.
- Default sync poll reduced from 5s to 2s. This is more appropriate given the lower block times on mainnet.
- Transaction hash calculation for transactions using the "query version" flag is broken for
starknet_estimateFeeandstarknet_simulateTransactions.
starknet_getEventsimplementation is now using a much simpler implementation that no longer relies on SQLite queries. In general this leads to more consistent query times and a roughly 20% smaller database.- The migration step involves computing Bloom filters for all blocks and dropping database tables no longer needed. This takes more than one hour for a mainnet database.
- The new
storage.event-bloom-filter-cache-size,rpc.get-events-max-blocks-to-scanandrpc.get-events-max-bloom-filters-to-loadarguments control some aspects of the algorithm.
- The memory allocator used by pathfinder has been changed to jemalloc, leading to improved JSON-RPC performance.
- Improved poseidon hash performance.
- Default RPC version changed to v0.6.
- Support for Starknet v0.13.1.
- Support for RPC v0.7.
- The request timeout for gateway and feeder-gateway queries is now configurable using
gateway.request-timeout("PATHFINDER_GATEWAY_REQUEST_TIMEOUT").
- Websocket control frames aren't handled.
- Performance improvements for
starknet_traceTransactionandstarknet_traceBlockTransactionsvia caching - Performance improvements for the sync process's interaction with the feeder gateway
- more aggressive timeouts and retry strategy
- polling pending and latest blocks concurrently
- using combined requests where possible
YANKED
This release accidentally contained a mixture of unreleased code and performance improvements, including a somewhat broken database migration.
Users should not use this version.
starknet_getEventsincorrectly evaluates empty sub-lists in key filters for pending events- The RPC error UNEXPECTED_ERROR is an object not a string
- RPC parsing failures now include the error reason when its an invalid JSON-RPC request (invalid request params already include the error reason).
gateway-api-key API_KEYconfiguration option. If enabled, each time a request is sent to the Starknet gateway or the feeder gateway aX-Throttling-Bypass: API_KEYheader will be set.
- Fee estimations are now compatible with starknet v0.13 and incompatible with starknet v0.12.3.
- Added
x-request-idheader to RPC responses. If the request does not have the header set then an ID is generated. This can be used to identify a specific caller's request/response within the node's logs. Duplicate IDs are possible since they can be set by the caller, so we recommend making your's identifiable with a prefix or using a GUID. - Improved tracing for RPC requests. These are all logged on
tracelevel under thepathfinder_rpcmodule. Additional information can also be obtained fromtower_httpmodule. These can be enabled by appendingpathfinder_rpc=trace,tower_http=tracetoRUST_LOGenvironment variable.- Request payload is now logged before execution begins.
- Logs now include
x-request-idheader value which can be used to correlate with client requests/responses. - Batch logs also include the index within a batch.
- RPC parsing errors now expose the failure reason as part of the errors
datafield.
- v0.5
starknet_simulateTransactionsreturns internal error instead ofContractErrorfor reverted transactions. - v0.6
starknet_getTransactionReceiptEXECUTION_RESOURCESfields are hex-strings instead of integerssegment_arena_builtinresource is missing- v3 transaction price unit type is
STRKinstead ofFRI
- v0.6
starknet_estimateFee,starknet_simulateTransactions- v3 transaction hashes are computed incorrectly when using the "query" flag, causing validation errors
unitfield is missing from fee estimation results
- v0.6
starknet_addDeployAccountTransaction- the gateway does not properly return address information for v3 transactions, we now compute the address ourselves
starknet_getEvents- query strategy selection for some events involving a filter on very common keys is slow
- Execution performance for calls involving the
pendingblocks is much better for trivial calls (likebalanceOf).
- JSON-RPC v0.6 now serves
0.6.0forstarknet_specVersion.
- Execution errors are opaque and don't always include the root cause.
- Pathfinder uses incorrect fee token gas price for
gas_consumedcalculation for v3 transactions. starknet_traceTransactionsometimes returns an "Invalid order number for L2-to-L1 message" error.starknet_getTransactionByHashandstarknet_getTransactionByBlockIdAndIndexreturn v3 transactions mapped to v1.
- JSON-RPC v0.6 support has been updated to v0.6.0-rc5 of the specification.
- Support for RPC v0.6.0-rc4 via the
/rpc/v0_6endpoint. Note that this does not include the/rpc/v0.6endpoint as the underscore is now the standard across node implementations. - Configuration options to selectively enable/disable parts of the node. This can be useful to run tests or benchmarks with isolated components e.g. test RPC methods without the sync process updating the database.
rpc.enableconfiguration option to enable/disable the RPC server. Defaults to enabled.sync.enableconfiguration option to enable/disable the sync process. Defaults to enabled.
- Support for Sepolia testnet via
--network testnet-sepolia - Support for Sepolia integration via
--network integration-sepolia - Support for Starknet 0.13.0.
- Default RPC version is now v0.5 (was v0.4). This can be manually configured to any version.
- Goerli testnet network selection is now
--network testnet-goerli, removed--network testnet - Goerli integration network selection is now
--network integration-goerli, removed--network testnet - Reworked
newHeadssubscription output to more accurately represent header data.
- Support for
testnet2 - Support for RPC v0.3
--poll-pendingconfiguration option. This is now always enabled and set to 2s.--python-subprocessesconfiguration option. This is superseded by--rpc.execution-concurrency.
get_block_hashsyscall returns0x0for the latest available block (current - 10) when executingstarknet_trace*methods
- RPC v0.5 incorrectly has a status field in pending
starknet_getBlockWithXXXresponses. - Error details for many execution-related issues were not properly sent back to the JSON client and were logged on WARN level instead.
- Host JSON-RPC on
/rpc/v0_xin addition to the existing/rpc/v0.xendpoints. This applies to all supported JSON-RPC versions.
- RPC errors now only include the root cause if white-listed as non-sensitive
- RPC v0.5 updated from v0.5.0 to v0.5.1
- JSON-RPC v0.5 transaction traces now have the required
typeproperty. - JSON-RPC v0.5 L1 Handler receipt is missing the
message_hashproperty. - JSON-RPC v0.5 use wrong field names in ExecutionResources
- RPC methods now use an empty block for pending data if no viable pending data is present. Requests for pending data will no longer fail with
BlockNotFoundif there is no pending data available, but rather use an empty block on-top of the latest local block.
- RPC errors do not always include the root cause. For example, some gateway error messages are not output when pathfinder forwards the request.
- RPC trace object uses wrong property
reverted_reasoninstead ofrevert_reason. - RPC execution steps limits have been updated to match the setup of the Starknet sequencer.
- RPC query version bit is now correctly passed through to the blockifier.
- RPC v0.5.0 support
- Added the ability to concurrently process RPC batches, see the
rpc.batch-concurrency-limitCLI argument. - The
pathfinder_build_infometric havingversionlabel to report current version of Pathfinder.
- RPC server does not accept
charset=utf-8in theContent-Typeheader - Out-of-memory crash caused by rare execution queries
- RPC server does not set
content-type: application/json - Restored the Websocket subscription features with new configuration keys:
rpc.websocket.enabledrpc.websocket.buffer-capacity,rpc.websocket.topic-capacity
- A storage regression causing reorgs to be slow has been fixed.
- State tree updates are slow on disks with low disk IO or high latency (e.g. network attached storage).
- Pathfinder now exits with a non-zero exit status if any of the service tasks (sync/RPC/monitoring) terminates.
- Rare edge case where duplicate blocks caused the sync process to halt due to a
A PRIMARY KEY constraint failederror. - Querying a descync'd feeder gateway causes sync process to end due to missing classes.
starknet_getStorageAtno longer returns ContractNotFound when querying for non-existent keys for contracts deployed in the pending block.starknet_getNonceno longer returns ContractNotFound when querying for nonce of contracts deployed in the pending block.
- Reworked state tree storage schema. This is not backwards compatible and requires a re-sync.
- Switched to a custom JSON-RPC framework to more easily support multiple specification versions. This may lead to some unexpected changes in behaviour.
- JSON-RPC subscription support (
pathfinder_newHeads). This is temporary while we re-add support to our new JSON-RPC framework.
- JSON-RPC requests containing a Cairo 0 class definition were requiring the
debug_infoproperty to be present in the input program. This was a regression caused by the execution engine change. - Performance for the
starknet_getEventsJSON-RPC method has been improved for queries involving the pending block.
-
--sync.verify_tree_node_datawhich enables verifies state tree nodes as they are loaded from disk. This is a debugging tool to identify disk corruption impacting tree node data. This should only be enabled when debugging a state root mismatch. -
RPC v0.4 methods:
starknet_traceTransactionstarknet_traceBlockTransactions
-
Class cache for execution queries which provides a modest increase in performance speed.
starknet_getEventscontinuation token formatting. The new format is incompatible with the previous format used v0.8.1 and older.
- JSON-RPC requests with unknown parameters are rejected (unknown params were previously ignored)
- Execution is backed by a Rust-based VM improving performance. We no longer depend on Python code in pathfinder.
cairo-langupgraded to 0.12.2- Cairo compiler upgraded to 2.1.1
- default RPC API version changed from v0.3 to v0.4
- RPC v0.3
starknet_estimateFeeexample - RPC method names could be prefixed with API version
starknet_getNoncereturns invalid values when queried by hash
- Added the
rpc.root-versioncommand-line option (and the corresponding PATHFINDER_RPC_ROOT_VERSION environment variable) to control the version of the JSON-RPC API pathfinder serves on the/path
- RPC v0.4
starknet_getTransactionByHashuses the wrong error code forTXN_HASH_NOT_FOUND - Querying
starknet_getClassAtandstarknet_getClassHashAtby block hash incorrectly returns contract not found - On Starknet 0.12.2 pathfinder now provides consistent pending data
- RPC v0.4 Declare v0 and Invoke v0 contain the nonce field
- RPC v0.4
starknet_getTransactionReceiptincorrect execution and finality status names pathfinder_getTransactionStatusfails to parse v0.12.1 gateway replies
- RPC v0.4.0 support (previously supported v0.4.0-rc3)
- RPC v0.4 support on
/rpc/v0.4/ - control log color output via
--color auto|always|never - if Sierra to CASM compilation fails we now fall back to fetching CASM from the gateway
- Negate bot spam on response metrics by returning
Ok(200)on/RPC queries. Web crawlers and bots often poke this endpoint which previously skewed response failure metrics when these were rejected.
- system contract updates are not correctly stored
starknet_simulateTransactionfails for transactions sending L2->L1 messages- deprecated error code 21
INVALID_MESSAGE_SELECTORis used in RPC v0.3
cairo-langupgraded to 12.2.1a0- Cairo compiler upgraded from 2.0.2 to 2.1.0-rc1
- support for RPC v0.2
- some cairo 0 classes are not downloaded which can cause execution methods to fail
- this bug was introduced in v0.6.4 and requires a resync to fix
- gateway error messages are not passed through for
add_xxx_transactionmethods - fee estimation is under-estimating most declare transactions by factor 2
pathfinder_getTransactionStatusstill returnsPENDINGinstead ofACCEPTED_ON_L2
cairo-langupgraded to 0.12.0
- stack overflow while compiling Sierra to CASM
- pending data from the gateway is inconsistent
- this could exhibit as RPC data changing status between
pending | L2 accepted | not found, especially noticeable for transactions.
- this could exhibit as RPC data changing status between
- substantially increase the character limit of execution errors
- previously, the RPC would return a highly truncated error message from the execution vm
- Pending data is not polled for starknet v0.12 due to an HTTP error code change from the gateway.
- Transaction receipts missing
from_addressinMSG_TO_L1.
- Sierra class hash not in declared classes sync bug
- use all libfunc list instead of experimental for sierra compilation
starknet_estimateMessageFeefor JSON-RPC v0.3.1 to estimate message fee from L1 handler.- sync-related metrics
current_block: the currently sync'd block height of the nodehighest_block: the height of the block chainblock_time: timestamp difference between the current block and its parentblock_latency: delay between current block being published and sync'd locallyblock_download: time taken to download current block's data excluding classesblock_processing: time taken to process and store the current block
- configuration for new block polling interval:
--sync.poll-interval <seconds> - Starknet v0.12.0 support
- sierra v2.0.0 support
cairo-langupgraded to 0.12.0a0
- reorgs fail if a class declaration is included in the reorg
- sync can fail if db connection pool is held saturated by rpc queries
- uses
finalized(reorg-safe) L1 state instead oflatest starknet_getEventstimes out for queries involving a large block range
- dropped upgrade support for pathfinder v0.4 and earlier
- separate db connection pools rpc, sync and storage
- increased the number of rpc db connections
- class hash mismatch for cairo 0 classes with non-ascii text
starknet_simulateTransactionrequirestransactionsinstead oftransactionas input field.- gateway's error message is hidden when submitting a failed transaction
starknet_getEventsis very slow for certain filter combinations
- default RPC API version changed from v0.2 to v0.3
- disallow JSON-RPC notification-style requests
-
Starknet v0.11.2 support
- Sierra compiler v1.1.0-rc0
cairo-langupgraded to 0.11.2a0
-
Subscription to
newHeadevents via websocket using the methodpathfinder_subscribe_newHeads, which can be managed by the following command line optionsrpc.websocket, which enables websocket transportrpc.websocket.capacity, which sets the maximum number of websocket subscriptions per subscription type
Authors: Shramee Srivastav and Matthieu Auger
cairo-langupgraded to 0.11.1.1
- RPC emits connection logs and warnings
- Fee estimate mismatch between gateway and pathfinder
- Gateway uses a new gas price sampling algorithm which was incompatible with pathfinders.
- Fee estimate returns error when submitting Cairo 1.0.0-rc0 classes.
- Historic L1 handler transactions are served as Invoke V0
- Older databases contain L1 handler transactions from before L1 handler was a specific transaction type. These were stored as Invoke V0. These are now correctly identified as being L1 Handler transactions.
- RPC emits connection logs and warnings
- Fee estimate mismatch between gateway and pathfinder
- Gateway uses a new gas price sampling algorithm which was incompatible with pathfinders.
- Historic L1 handler transactions are served as Invoke V0
- Older databases contain L1 handler transactions from before L1 handler was a specific transaction type. These were stored as Invoke V0. These are now correctly identified as being L1 Handler transactions.
- Starknet v0.11.1 support
- Sierra compiler v1.0.0.rc0 (while keeping previous compiler for older contracts)
- new block hash calculation
- new L1 contract
- CORS support for the RPC server, enabled via the
rpc.cors-domainscommand line argument - transaction hash verification, excluding older L1 handler transactions, i.e. in blocks older than
- 4400 for mainnet
- 306008 for testnet
- rpc server panic for unprefixed unregistered method names
- remove a small time window where data which is transitioning from pending to latest block was not available for RPC queries.
- this was commonly seen when rapidly monitoring a new transaction, which would go from
PENDINGtoTXN_HASH_NOT_FOUNDtoACCEPTED_ON_L2.
- this was commonly seen when rapidly monitoring a new transaction, which would go from
max-rpc-connectionscommand-line argumentcairo-langupgraded to 0.11.0.2
starknet_simulateTransactiondata model inconsistencypoll-pendingdefault value restored tofalse- handling of invalid JSON-RPC requests
- support for
BROADCASTEDtransactions version 0
- support
starknet_estimateFeein the JSON-RPC v0.3 API- supports estimating multiple transactions
- this includes declaring and immediately using a class (not currently possible via the gateway)
- support
starknet_simulateTransactionfor JSON-RPC v0.3- supports simulating multiple transactions
- this includes declaring and immediately using a class (not currently possible via the gateway)
- support
pathfinder_getTransactionStatuswhich is exposed on all RPC routes- this enables querying a transactions current status, including whether the gateway has received or rejected it
- RPC returns int for entrypoint offsets instead of hex
- RPC rejects Fee values with more than 32 digits
- RPC does not expose
pathfinder_getProofon v0.3 route
- pathfinder can spam nethermind L1 nodes
- pathfinder stops syncing testnet2 at block 95220 due to a Sierra class compilation issue
- support for state commitment and class commitment in pathfinder_getProof
- support for starknet v0.11
- partial support for RPC specification v0.3
- exposed on
/rpc/v0.3/route - missing support for
starknet_estimateFeeandstarknet_simulate
- exposed on
starknet_callandstarknet_estimateFeeJSON-RPC methods return more detailed error messagespythonversion requirement has changed to3.9or3.10(was3.8or3.9)
- RPC accepts hex inputs for Felt without '0x' prefix. This led to confusion especially when passing in a decimal string which would get silently interpreted as hex.
- using a Nethermind Ethereum endpoint occasionally causes errors such as
<block-number> could not be foundto be logged. - sync can miss new block events by getting stuck waiting for pending data.
--configconfiguration option (deprecated in v0.4.1)--integrationconfiguration option (deprecated in v0.4.1)--sequencer-urlconfiguration option (deprecated in v0.4.1)--testnet2configuration option (deprecated in v0.4.1)starknet_addDeployTransactionas this is no longer an allowed transaction- RPC api version
0.1, which used to be served on path/rpc/v0.1
- added Newton FAQ links to readme (thanks @SecurityQQ)
- node fails to sync really old blocks
- storage proofs via pathfinder_getProof by @pscott
- improved performance for starknet_call and starknet_estimateFee by caching classes
- improved performance for starknet_call and starknet_estimateFee by using Rust for hashing
- starknet_getEvents returns all events when from_block="latest"
- v0.1 starknet_getStateUpdate does not contain nonces
- updated to cairo-lang 0.10.3
- testnet2 and integration flags are ignored
- starknet_estimateFee uses wrong chain ID for testnet2
- document that --chain-id expects text as input
- testnet2 and integration L1 addresses are swopped (bug introduced in v0.4.1)
- proxy network setups can't sync historical blocks (bug introduced in v0.4.1)
- ABI serialization for starknet_estimateFee for declare transactions
- custom Starknet support (see above for details)
- pathfinder specific RPC extensions hosted at /rpc/pathfinder/v0.1. Currently this only contains pathfinder_version which returns the pathfinder version of the node.
- The following configuration options are now marked as deprecated: --testnet2, --integration, --config, --sequencer-url
- Optimised starknet_events for queries with both a block range and a from address
- block timestamps for pending in starknet_call and starknet_estimateFee were using the latest timestamp instead of the pending one. This meant contracts relying on accurate timestamps could sometimes fail unexpectedly.
- support for Starknet v0.10.2
- default RPC API version changed from v0.1 to v0.2
Older history may be found in the pathfinder release notes.