Releases: graphprotocol/graph-node
v0.34.0-rc.0
$ docker pull graphprotocol/graph-node:v0.34.0-rc.0
What's New
- Substreams as Source of Triggers for Subgraphs - This update significantly enhances subgraph functionality by enabling substreams to act as a source of triggers for running subgraph mappings. Developers can now directly run subgraph mappings on the data output from substreams, facilitating a more integrated and efficient workflow.(#4887) (#4916)
indexerHints
in Manifest for Automated Pruning - This update introduces the ability for subgraph authors to specifyindexerHints
with a fieldprune
in their manifest, indicating the desired extent of historical block data retention. This feature enables graph-node to automatically prune subgraphs when the stored history exceeds the specified limit, significantly improving query performance. This automated process eliminates the need for manual action by indexers for each subgraph. Indexers can also override user-set historyBlocks with the environment variableGRAPH_HISTORY_BLOCKS_OVERRIDE
(#5032 (#5117)- Initial Starknet Support - Introducing initial Starknet support for graph-node, expanding indexing capabilities to the Starknet ecosystem. The current integration is in its early stages, with notable areas for development including the implementation of trigger filters and data source template support. Future updates will also bring substream support. (#4895)
endBlock
Feature in Data Sources - This update adds theendBlock
field for dataSources in subgraph manifest. By setting anendBlock
, subgraph authors can define the exact block at which a data source will cease processing, ensuring no further triggers are processed beyond this point. (#4787- Autogenerated
Int8
IDs in graph-node - Introduced support for usingInt8
as the ID type for entities, with the added capability to auto-generate these IDs, enhancing flexibility and functionality in entity management. (#5029) - GraphiQL V2 Update - Updated GraphiQL query interface of graph-node to version 2. (#4677)
- Sharding Guide for Graph-Node - A new guide has been added to graph-node documentation, explaining how to scale graph-node installations using sharding with multiple Postgres instances. Sharding Guide
- Per-chain polling interval configuration for RPC Block Ingestors (#5066)
- Metrics Enhancements(#5055) (#4937)
- graph-node now avoids creating GIN indexes on array attributes to enhance database write performance, addressing the issue of expensive updates and underutilization in queries. (#4933)
- The
subgraphFeatures
endpoint in graph-node has been updated to load features from subgraphs prior to their deployment. (#4864) - Improved log filtering performance in blockstream. (#5015)
- Enhanced GraphQL error reporting by including
__schema
and__type
fields in the results during indexing errors (#4968)
Bug fixes
- Addressed a bug in the deduplication logic for Cosmos events, ensuring all distinct events are properly indexed and handled, especially when similar but not identical events occur within the same block. (#5112)
- Fixed compatibility issues with ElasticSearch 8.X, ensuring proper log functionality. (#5013)
- Resolved an issue when rewinding data sources across multiple blocks. In rare cases, when a subgraph had been rewound by multiple blocks, data sources 'from the future' could have been left behind. This release adds a database migration that fixes that. With very unlucky timing this migration might miss some subgraphs, which will later lead to an error
assertion failed: self.hosts.last().and_then(|h| h.creation_block_number()) <= data_source.creation_block()
. Should that happen, the migration script should be rerun against the affected shard. (#5083) - Increased the base backoff time for RPC, enhancing stability and reliability under load. (#4984)
- Resolved an issue related to spawning offchain data sources from existing offchain data source mappings. (#5051)(#5092)
- Resolved an issue where eth-call results for reverted calls were being cached in call cache. (#4879)
- Fixed a bug in graphman's index creation to ensure entire String and Bytes columns are indexed rather than just their prefixes, resulting in optimized query performance and accuracy. (#4995)
- Adjusted
SubstreamsBlockIngestor
to initiate at the chain's head block instead of starting at block zero when no cursor exists. (#4951) - Fixed a bug that caused incorrect progress reporting when copying subgraphs, ensuring accurate status updates. (#5075)
Graphman
- Graphman Deploy Command - A new
graphman deploy
command has been introduced, simplifying the process of deploying subgraphs to graph-node. (#4930)
v0.33.0
What's New
- Arweave file data sources - Arweave file data sources allow subgraph developers to access offchain data from Arweave from within the subgraph mappings.(#4789)
- Major performance boost for substreams-based subgraphs - Significant performance improvements have been achieved for substreams-based subgraphs by moving substreams processing to the block stream.(#4851)
- Polling block handler - A new block handler filter
polling
forethereum
data sources which enables subgraph developers to run a block handler at defined block intervals. This is useful for use cases such as taking periodic snapshots of the contract state.(#4725) - Initialization handler - A new block handler filter
once
forethereum
data sources which enables subgraph developers to create a handler which will be called only once before all other handlers run. This configuration allows the subgraph to use the handler as an initialization handler, performing specific tasks at the start of indexing. (#4725) - DataSourceContext in manifest -
DataSourceContext
in Manifest - DataSourceContext can now be defined in the subgraph manifest. It's a free-form map accessible from the mapping. This feature is useful for templating chain-specific data in subgraphs that use the same codebase across multiple chains.(#4848) graph-node
version in index node API - The Index Node API now features a new query, Version, which can be used to query the current graph-node version and commit. (#4852)- Added a '
paused
' field to Index Node API, a boolean indicating the subgraph’s pause status. (#4779) - Proof of Indexing logs now include block number (#4798)
subgraph_features
table now tracks details about handlers used in a subgraph (#4820)- Configurable SSL for Postgres in Dockerfile - ssl-mode for Postgres can now be configured via the connection string when deploying through Docker, offering enhanced flexibility in database security settings.(#4840)
- Introspection Schema Update - The introspection schema has been updated to align with the October 2021 GraphQL specification update.(#4676)
trace_id
Added to Substreams Logger (#4868)- New apiVersion for Mapping Validation - The latest apiVersion 0.0.8 validates that fields set in entities from the mappings are actually defined in the schema. This fixes a source of non-deterministic PoI. Subgraphs using this new API version will fail if they try to set undefined schema fields in the mappings. Its strongly recommended updating to 0.0.8 to avoid these issues. (#4894)
- Substreams Block Ingestor Support - Added the ability to run a pure substreams chain by introducing a block ingestor for substreams-only chains. This feature allows users to run a chain with just a single substreams endpoint, enhancing support beyond RPC and firehose. Prior to this, a pure substreams chain couldn’t be synced.(#4839)
Bug fixes
- Fix for rewinding dynamic data source - Resolved an issue where a rewind would fail to properly remove dynamic data sources when using
graphman rewind
. This has been fixed to ensure correct behavior.(#4810) - Improved Deployment Reliability with Retry Mechanism - A retry feature has been added to the block_pointer_from_number function to enhance the robustness of subgraph deployments. This resolves occasional failures encountered during deployment processes.(#4812)
- Fixed Cross-Shard Grafting Issue - Addressed a bug that prevented cross-shard grafting from starting, causing the copy operation to stall at 0% progress. This issue occurred when a new shard was added after the primary shard had already been configured. The fix ensures that foreign tables and schemas are correctly set up in new shards. For existing installations experiencing this issue, it can be resolved by running
graphman database remap
.(#4845) - Fixed a Full-text search regression - Reverted a previous commit (ad1c6ea) that inadvertently limited the number of populated search indexes per entity.(#4808)
- Attestable Error for Nested Child Filters - Nested child filter queries now return an attestable
ChildFilterNestingNotSupportedError
, improving error reporting for users.(#4828)
Graphman
- Index on prefixed fields - The graphman index create command now correctly indexes prefixed fields of type String and Bytes for more query-efficient combined indexes. Note: For fields that are references to entities, the behavior may differ. The command may create an index using left(..) when it should index the column directly.
- Partial Indexing for Recent Blocks - The graphman index create command now includes a
--after $recent_block
flag for creating partial indexes focused on recent blocks. This enhances query performance similar to the effects of pruning. Queries using these partial indexes must include a specific clause for optimal performance.(#4830)
Full Changelog: incrypto32/v0.32.0...v0.33.0
v0.33.0-rc.0
$ docker pull graphprotocol/graph-node:v0.33.0-rc.0
What's New
- Arweave file data sources - Arweave file data sources allow subgraph developers to access offchain data from Arweave from within the subgraph mappings.(#4789)
- Major performance boost for substreams-based subgraphs - Significant performance improvements have been achieved for substreams-based subgraphs by moving substreams processing to the block stream.(#4851)
- Polling block handler - A new block handler filter
polling
forethereum
data sources which enables subgraph developers to run a block handler at defined block intervals. This is useful for use cases such as taking periodic snapshots of the contract state.(#4725) - Initialization handler - A new block handler filter
once
forethereum
data sources which enables subgraph developers to create a handle which will be called only once before all other handlers run. This configuration allows the subgraph to use the handler as an initialization handler, performing specific tasks at the start of indexing. (#4725) - DataSourceContext in manifest -
DataSourceContext
in Manifest - DataSourceContext can now be defined in the subgraph manifest. It's a free-form map accessible from the mapping. This feature is useful for templating chain-specific data in subgraphs that use the same codebase across multiple chains.(#4848) graph-node
version in index node API - The Index Node API now features a new query, Version, which can be used to query the current graph-node version and commit. (#4852)- Added a '
paused
' field to Index Node API, a boolean indicating the subgraph’s pause status. (#4779) - Proof of Indexing logs now include block number (#4798)
subgraph_features
table now tracks details about handlers used in a subgraph (#4820)- Configurable SSL for Postgres in Dockerfile - ssl-mode for Postgres can now be configured via the connection string when deploying through Docker, offering enhanced flexibility in database security settings.(#4840)
- Introspection Schema Update - The introspection schema has been updated to align with the October 2021 GraphQL specification update.(#4676)
trace_id
Added to Substreams Logger (#4868)- New apiVersion for Mapping Validation - The latest apiVersion 0.0.8 now validates that fields set in entities from the mappings are actually defined in the schema. Subgraphs using this new API version will fail if they try to set undefined schema fields in the mappings. (#4894)
- Substreams Block Ingestor Support - Added the ability to run a pure substreams chain by introducing a block ingestor for substreams-only chains. This feature allows users to run a chain with just a single substreams endpoint, enhancing support beyond RPC and firehose. Prior to this, a pure substreams chain couldn’t be synced.(#4839)
Bug fixes
- Fix for rewinding dynamic data source - Resolved an issue where a rewind would fail to properly remove dynamic data sources when using
graphman rewind
. This has been fixed to ensure correct behavior.(#4810) - Improved Deployment Reliability with Retry Mechanism - A retry feature has been added to the block_pointer_from_number function to enhance the robustness of subgraph deployments. This resolves occasional failures encountered during deployment processes.(#4812)
- Fixed Cross-Shard Grafting Issue - Addressed a bug that prevented cross-shard grafting from starting, causing the copy operation to stall at 0% progress. This issue occurred when a new shard was added after the primary shard had already been configured. The fix ensures that foreign tables and schemas are correctly set up in new shards.(#4845)
- Fixed a Full-text search regression - Reverted a previous commit (ad1c6ea) that inadvertently limited the number of populated search indexes per entity.(#4808)
- Attestable Error for Nested Child Filters - Nested child filter queries now return an attestable
ChildFilterNestingNotSupportedError
, improving error reporting for users.(#4828)
Graphman
- Index on prefixed fields - The graphman index create command now correctly indexes prefixed fields of type String and Bytes, making combined indexes more query-efficient.
- Partial Indexing for Recent Blocks - The graphman index create command now includes a
--after $recent_block
flag for creating partial indexes focused on recent blocks. This enhances query performance similar to the effects of pruning. Queries using these partial indexes must include a specific clause for optimal performance.(#4830)
Full Changelog: v0.32.0...b1502a4
v0.32.0
$ docker pull graphprotocol/graph-node:v0.32.0
What's New
- Derived fields getter: Derived fields can now be accessed from within the mapping code during indexing. (#4434)
- Sorting interfaces by child entity: Interfaces can now be sorted by non-derived child entities. (#4058)
- File data sources can now be spawned from handlers of other file data sources: This enables the use of file data sources for scenarios where a file data source needs to be spawned from another one. One practical application of this feature is in handling NFT metadata. In such cases, the metadata itself is stored as a file on IPFS and contains embedded IPFS CID for the actual file for the NFT. (#4713)
- Allow redeployment of grafted subgraphs even when graft_base is not available: This will allow renaming of already synced grafted subgraphs even when the graft base is not available, which previously failed due to
graft-base
validation errors. (#4695) history_blocks
is now available in the index-node API. (#4662)- Added a new
subgraph features
table inprimary
to easily track information likeapiVersion
,specVersion
,features
, and data source kinds used by subgraphs. (#4679) subgraphFeatures
endpoint now includes data fromsubgraph_features
table.ens_name_by_hash
is now undeprecated: This reintroduces support for fetching ENS names by their hash, dependent on the availability of the underlying Rainbow Table (#4751).- Deterministically failed subgraphs now return valid POIs for subsequent blocks after the block at which it failed. (#4774)
eth-call
logs now include block hash and block number: This enables easier debugging of eth-call issues. (#4718)- Enabled support for substreams on already supported networks. (#4767)
- Add new GraphQL scalar type
Int8
. This new scalar type allows subgraph developers to represent 8-bit signed integers. (#4511) - Add support for overriding module params for substreams-based subgraphs when params are provided in the subgraph manifest. (#4759)
Breaking changes
- Duplicate provider labels are not allowed in graph-node config anymore
Bug fixes
- Fixed
PublicProofsOfIndexing
returning the errorNull value resolved for non-null field proofOfIndexing
when fetching POIs for blocks that are not in the cache (#4768) - Fixed an issue where Block stream would fail when switching back to an RPC-based block ingestor from a Firehose ingestor. (#4790)
- Fixed an issue where derived loaders were not working with entities with Bytes as IDs (#4773)
- Firehose connection test now retries for 30 secs before setting the provider status to
Broken
(#4754) - Fixed the
nonFatalErrors
field not populating in the index node API. (#4615) - Fixed
graph-node
panicking on the first startup when both Firehose and RPC providers are configured together. (#4680) - Fixed block ingestor failing to startup with the error
net version for chain mainnet has changed from 0 to 1
when switching from Firehose to an RPC provider. (#4692) - Fixed Firehose endpoints getting rate-limited due to duplicated providers during connection pool initialization. (#4778)
- Fixed a determinism issue where stale entities where being returned when using
get_many
andget_derived
([#4801]#4801)
Graphman
- Added two new
graphman
commandspause
andresume
: Instead of reassigning to a non-existent node these commands can now be used for pausing and resuming subgraphs. (#4642) - Added a new
graphman
commandrestart
to restart a subgraph. (#4742)
Full Changelog: v0.31.0...2891a76
v0.32.0-rc.0
v0.32.0-rc.0
is the first release candidate of the upcoming v0.32.0
. This release candidate is intended for testnet use only.
$ docker pull graphprotocol/graph-node:v0.32.0-rc.0
What's New
- Derived fields getter: Derived fields can now be accessed from within the mapping code during indexing. (#4434)
- Sorting interfaces by child entity: Interfaces can now be sorted by non-derived child entities. (#4058)
- File data sources can now be spawned from handlers of other file data sources: This enables the use of file data sources for scenarios where a file data source needs to be spawned from another one. One practical application of this feature is in handling NFT metadata. In such cases, the metadata itself is stored as a file on IPFS and contains embedded IPFS CID for the actual file for the NFT. (#4713)
- Allow redeployment of grafted subgraphs even when graft_base is not available: This will allow renaming of already synced grafted subgraphs even when the graft base is not available, which previously failed due to
graft-base
validation errors. (#4695) history_blocks
is now available in the index-node API. (#4662)- Added a new
subgraph features
table inprimary
to easily track information likeapiVersion
,specVersion
,features
, and data source kinds used by subgraphs. (#4679) subgraphFeatures
endpoint now includes data fromsubgraph_features
table.ens_name_by_hash
is now undeprecated: This reintroduces support for fetching ENS names by their hash, dependent on the availability of the underlying Rainbow Table (#4751).- Deterministically failed subgraphs now return valid POIs for subsequent blocks after the block at which it failed. (#4774)
eth-call
logs now include block hash and block number: This enables easier debugging of eth-call issues. (#4718)- Enabled support for substreams on already supported networks. (#4767)
- Add new GraphQL scalar type
Int8
. This new scalar type allows subgraph developers to represent 8-bit signed integers. (#4511) - Add support for overriding module params for substreams-based subgraphs when params are provided in the subgraph manifest. (#4759)
Bug fixes
- Fixed
PublicProofsOfIndexing
returning the errorNull value resolved for non-null field proofOfIndexing
when fetching POIs for blocks that are not in the cache (#4768) - Fixed an issue where Block stream would fail when switching back to an RPC-based block ingestor from a Firehose ingestor. (#4790)
- Fixed an issue where derived loaders were not working with entities with Bytes as IDs (#4773)
- Firehose connection test now retries for 30 secs before setting the provider status to
Broken
(#4754) - Fixed the
nonFatalErrors
field not populating in the index node API. (#4615) - Fixed
graph-node
panicking on the first startup when both Firehose and RPC providers are configured together. (#4680) - Fixed block ingestor failing to startup with the error
net version for chain mainnet has changed from 0 to 1
when switching from Firehose to an RPC provider. (#4692) - Fixed Firehose endpoints getting rate-limited due to duplicated providers during connection pool initialization. (#4778)
Graphman
- Added two new
graphman
commandspause
andresume
: Instead of reassigning to a non-existent node these commands can now be used for pausing and resuming subgraphs. (#4642) - Added a new
graphman
commandrestart
to restart a subgraph. (#4742)
Full Changelog: v0.31.0...c350e4f
v0.31.0-rc.1
v0.31.0-rc.1
is the second release candidate of the upcoming v0.31.0
.
$ docker pull graphprotocol/graph-node:v0.31.0-rc.1
Edit 2023-06-08: v0.31.0-rc.1
has been promoted to v0.31.0
.
v0.31.0
$ docker pull graphprotocol/graph-node:v0.31.0
What's new
- Fulltext searches can now be combined with
where
filtering, further narrowing down search results. #4442 - Derived fields loader support. This feature requires subgraph authors to upgrade
graph-cli
to v0.51.0. #4434,graph-cli
release notes - Tweaked how RPC provider limiting rules are interpreted from configurations. In particular, node IDs that don't match any rules of a provider won't have access to said provider instead of having access to it for an unlimited number of subgraphs. Read the docs for more information. #4353
- Introduced WASM host function
store.get_in_block
, which is a much faster variant ofstore.get
limited to entities created or updated in the current block. #4540 - The
subgraph_deploy
JSON-RPC method now accepts ahistory_blocks
parameter, which indexers can use to set default amounts of history to keep. #4564 - IPFS requests for polling file data sources are not throttled anymore (also known as concurrency or burst limiting), only rate-limited. #4570, #4649
- Exponential requests backoff when retrying failed subgraphs is now "jittered", smoothing out request spikes. #4476
- Indexers can use thee new feature
GRAPH_EXPERIMENTAL_SUBGRAPH_SETTINGS
to define matching rules on subgraph names for reducing amounts of history stored. #4633 - RPC provider responses that decrease the chain head block number (non-monotonic) are now ignored, increasing resiliency against inconsistent provider data. #4354
- It's now possible to to have a Firehose-only chain with no RPC provider at all in the configuration. #4508, #4553
- The materialized views in the
info
schema (table_sizes
,subgraph_sizes
, andchain_sizes
) that provide information about the size of various database objects are now automatically refreshed every 6 hours. #4461 - Subgraph error logs now contain the transaction hash when available. #4635
- Adapter selection now takes error rates into account, preferring adapters with lower error rates. #4468
- Removed support for
GRAPH_ETHEREUM_IS_FIREHOSE_PREFERRED
,REVERSIBLE_ORDER_BY_OFF
, andGRAPH_STORE_CONNECTION_TRY_ALWAYS
env. variables. #4375, #4436 - New env. var.
GRAPH_ETH_CALL_NO_GAS
which is a comma-separated list of chains'net_version
for which to disableeth_call
gas limits. The default value (421613
) disables gas limits for Arbitrum Goerli. #4609
Performance improvements
- Batched writes: write operations to the database when indexing subgraphs are now accumulated into in-memory batches before persisting them, resulting in noticeably faster indexing and lower database CPU load. In case of unexpected issues, this feature can be turned off setting
GRAPH_STORE_WRITE_BATCH_SIZE=0
. #4606, #4632 - The entity cache that
graph-node
keeps around is much more efficient, meaning more cache entries fit in the same amount of memory resulting in a performance increase under a wide range of workloads. #4485, #4624 - Indexing speed improvements for subgraphs with more than 10k data sources. #4631
- BRIN indexes in PostgreSQL now use
..._minmax_multi_ops
instead of_minmax_ops
if available (PostgreSQL 14+), often resulting in more selective indexes. #4629 - GIN indexes are not created anymore for numeric arrays. #4628
Substreams
- The substreams protocol has been updated to
sf.substreams.rpc.v2.Stream/Blocks
. #4556 - Added support for adapter balancing a.k.a. provider failover to substreams. #4578
- Fixed faulty
startBlock
selection logic in substreams. #4463 - Several bug fixes were applied after breakage caused by an internal refactor of how entities are stored in-memory. #4604, #4572, #4612, #4664
Bug fixes
- Fixed a bug that would cause subgraphs to fail with a
subgraph writer poisoned by previous error
message following certain database errors. #4533 - Fixed a bug that would cause subgraphs to fail with a
store error: no connection to the server
message when database connection e.g. gets killed. #4435 - The
subgraph_reassign
JSON-RPC method doesn't fail anymore when multiple deployment copies are found: only the active copy is reassigned, the others are ignored. #4395 - Fixed a bug that would cause
on_sync
handlers on copied deployments to fail with the messageSubgraph instance failed to run: deployment not found [...]
. #4396 - Fixed a bug that would cause the copying or grafting of a subgraph while pruning it to incorrectly set
earliest_block
in the destination deployment. #4502 - Handler timeouts would sometimes be reported as deterministic errors with the error message
Subgraph instance failed to run: Failed to call 'asc_type_id' with [...] wasm backtrace [...]
; this error is now nondeterministic and recoverable. #4475 - Fixed faulty exponential request backoff behavior after many minutes of failed requests, caused by an overflow. #4421
json.fromBytes
and allBigInt
operations now require more gas, protecting against malicious subgraphs. #4594, #4595- Fixed a Rust panic on program startup when mixing Firehose and RPC providers. #4680
Graphman
graphman rewind
now requiresblock-number
andblock-hash
to be passed as flags instead of arguments. #4400- You can now use the new flag
--start-block
ingraphman rewind
to rewind a subgraph to thestartBlock
set in manifest, or to the genesis block if nostartBlock
is set. #4400 - The behavior for
graphman prune
has changed: running justgraphman prune
will mark the subgraph for ongoing pruning in addition to performing an initial pruning. To avoid ongoing pruning, usegraphman prune --once
(docs). #4429 - The env. var.
GRAPH_STORE_HISTORY_COPY_THRESHOLD
–which serves as a configuration setting forgraphman prune
– has been renamed toGRAPH_STORE_HISTORY_REBUILD_THRESHOLD
. #4505 - You can now list all existing deployments via
graphman info --all
. #4347 - The command
graphman chain call-cache remove
now requires--remove-entire-cache
as an explicit flag, protecting against accidental destructive command invocations. #4397 graphman copy create
accepts two new flags,--activate
and--replace
, which make moving of subgraphs across shards much easier. #4374- The log level for
graphman
is now set viaGRAPHMAN_LOG
or command line instead ofGRAPH_LOG
. #4462 graphman reassign
now emits a warning when it suspects a typo in node IDs. #4377
Metrics and logging
v0.31.0-rc.0
v0.31.0-rc.0
is the first release candidate of the upcoming v0.31.0
. This release candidate is intended for testnet use only.
$ docker pull graphprotocol/graph-node:v0.31.0-rc.0
Edit 2023-06-08: v0.31.0-rc.0
is obsolete; v0.31.0-rc.1
is the latest release candidate.
v0.30.0-rc.0
v0.30.0-rc.0 is the first release candidate for the upcoming v0.30.0. This release candidate is intended for testnet use only.
$ docker pull graphprotocol/graph-node:v0.30.0-rc.0
Edit 2023-03-01: v0.30.0-rc.0
has been promoted to v0.30.0
.
v0.30.0
$ docker pull graphprotocol/graph-node:v0.30.0
Database locale change
New graph-node
installations now mandate PostgreSQL to use C locale and UTF-8 encoding. The official docker-compose.yml
template has been updated accordingly. Pre-existing graph-node
installations are not concerned with this change, but local development scripts and CI pipelines may have to adjust database initialization parameters. This can be done with initdb -E UTF8 --locale=C
. #4163, #4151, #4201, #4340
What's new
- AND/OR filters. AND/OR logical operators in
where
filters have been one ofgraph-node
's most awaited features. They do exactly what you would expect them to do, and are very powerful. #579, #4080, #4171 - IPFS file data sources. IPFS file data sources allow subgraph developers to query offchain information from IPFS directly in mappings. This feature is the culmination of much community and development efforts (GIP here). A future iteration of this feature will also include a so-called "Availability Chain", allowing IPFS file data sources to contribute to Proofs of Indexing. At the moment, entity updates that originate from these data sources' handlers do not contribute to PoIs. #4147, #4162, and many others!
- Sorting by child entities (a.k.a. nested sorting). You can now
orderBy
properties of child entities. #4058, #3737, #3096 - Added support for a Firehose-based block ingestor. Indexers that use the new Firehose-based block ingestor cannot automatically switch back to RPC. In order to downgrade, indexers must manually delete all blocks accumulated by Firehose in the database. For this reason, we suggest caution when switching over from RPC to Firehose. #4059, #4204, #4216
- Fields of type
Bytes
can now use less than and greater than filters. #4285 - "userinfo" is now allowed in IPFS URLs (e.g.
https://foo:bar@example.com:5001/
). #4252 - The default for
GRAPH_IPFS_TIMEOUT
is now 60 seconds instead of 30. #4324 - Forking options can now be set via env. vars. (
GRAPH_START_BLOCK
,GRAPH_FORK_BASE
,GRAPH_DEBUG_FORK
). #4308 - Allow retrieving GraphQL query tracing over HTTP if the env. var.
GRAPH_GRAPHQL_TRACE_TOKEN
is set and the headerX-GraphTraceQuery
is included. The query traces' JSON is the same as returned bygraphman query
. #4243 - Lots of visual and filtering improvements to #4232
- More aggressive in-memory caching of blocks close the chain head, potentially alleviating database load. #4215
- New counter Prometheus metric
query_validation_error_counter
, labelled by deployment ID and error code. #4230
graph_elasticsearch_logs_sent - Turned "Flushing logs to Elasticsearch" log into a Prometheus metric (
graph_elasticsearch_logs_sent
) to reduce log noise. #4333 - New materialized view
info.chain_sizes
, which works the same way as the already existinginfo.subgraph_sizes
andinfo.table_sizes
. #4318 - New
graphman stats
subcommandsset-target
andtarget
to manage statistics targets for specific deployments (i.e. how much data PostgreSQL samples when analyzing a table). #4092
Fixes
graph-node
now has PID=1 when running inside the official Docker image. #4217- More robust
ipfs.cat
logic during grafted subgraphs' manifest lookup. #4284 - Fixed a bug that caused some large multi-entity inserts to fail because of faulty chunk size calculation. #4250
- Subgraph pruning now automatically cancels ongoing autovacuum, to avoid getting stuck. #4167
ens.getNameByHash
now fails nondeterministically if ENS rainbow tables are not available locally. #4219- Some kinds of subgraph failures were previously wrongly treated as unattestable (value parsing,
enum
and scalar coercion), i.e. nondeterministic. These subgraph failure modes are now flagged as fully-deterministic. #4278