Skip to content

v4.11.0

Choose a tag to compare

@github-actions github-actions released this 06 Oct 16:40
· 429 commits to main since this release
123c4ff

Nuthatch 4.11.0 is the release the subgraph stopgap needed: a nest that answers a subgraph's own
client queries can now be run from release downloads alone. It also carries four scaled-mode,
/sql and publishing fixes from the previous two days. There is no storage migration.

New: a graph build on every release

Each release now attaches nuthatch-graph-<target>.tar.gz for Linux and macOS, built with
--features graph and attested like the others (#1957). It serves a nest's Graph-dialect GraphQL at
/graphql and /subgraphs/id/<deployment>. The default binary is unchanged and still has no GraphQL
route. The first nest that needs it is
betswirl-bnb-nest, seedable from
the mirror; docs/subgraph-stopgap.md
has the programme.

GraphQL answers more client shapes, and refuses by name

  • A to-one relation below another (gameToken { token { symbol } }), a single @derivedFrom field
    and a stored scalar list now answer. A [BigInt!] list answers its elements as strings, as
    graph-node sends them (#1949).
  • An unsupplied nullable variable is an absent argument, as graph-node reads it; a missing non-null
    one is still refused. orderBy breaks ties on the id, so paging over equal values is stable (#1949).
  • A schema whose field descriptions contain a colon or a # no longer panics the request, and
    malformed schema input is an error rather than a panic (#1958, #1948).
  • __schema { queryType { fields } } answers instead of returning null, and an unknown
    introspection field is refused by name (#1958).
  • A collection with no view is refused as `tokens` is not served by this nest rather than a
    raw engine error (#1958).

Ingestion

  • A factory nest asks for logs by factory and child addresses until 500 children, in the default
    backfill, the tip loop and the runtime cursor, not by topic0 alone from the first window. An
    endpoint that refuses a topic0-only fetch switches the cursor to addresses (#1954).
  • An endpoint that refuses too many addresses in one eth_getLogs (publicnode on BSC and Polygon:
    10 or more) is no longer read as a credentials refusal. The address list is halved until accepted,
    and an archive refusal stops a backfill at once with a hint to supply an archive endpoint (#1954).
  • "eth_getLogs is limited to 0 - 50 blocks range" narrows the window (#1954).
  • init --from-subgraph no longer turns a block-handler-only source into a contract that indexes
    every event in its ABI (#1954).

Porting

port-emit with no mapping source (a deployment CID alone: IPFS holds compiled WASM) now says
nothing was classified and exits non-zero, instead of reporting 100% coverage. @derivedFrom
fields count as answered only when both views exist, and fields of a view with no id column do
not count. Templates get their factory rule from Template.create(...), and the classifier now
sees writes in class methods, +=, getOrCreate helpers and bound-contract reads (#1953, #1947).

/sql and publishing

  • The SQL answer cache keys on the rows and segments a statement reads, not on every cursor poll, so
    a quiet nest at the tip answers a repeated statement from the cache (#1955). On the BetSwirl nest a
    repeated SDK bets query went from 10.4 s to 3 ms; the first one is still slow (#1951 stays open).
  • A cold-only /sql answer reports provenance.source as sealed, not hot+sealed, and a mount
    that conflicts with another NID names the route to move it rather than a removed command (#1938).
  • nuthatch_publish_lag_blocks counts final segments the mirror lacks, rather than the seal watermark
    less the mirror's highest block, which read millions on quiet nests (#1932).

Scaled mode

A worker that loses a cursor's lease stops ingesting it on that tick, rather than carrying on with
only the fence refusing its writes (#1939).

init's unknown-chain remedy lists every built-in chain, monad and robinhood included (#1931).

Compatibility and upgrade

Replace the binary and restart. No re-index. To serve GraphQL, use the nuthatch-graph download.