Skip to content

v1.25.0

Latest

Choose a tag to compare

@UlysseCorbeil UlysseCorbeil released this 08 Oct 23:30
a6dde0a

Docs

  • Document the per-store size limit on StreamingFast-hosted endpoints is now 3.5GiB (up from 1GiB), following
    the move to the mmap stores backend. The binary default remains 1GiB, overridable with the tier1
    --substreams-tier1-store-size-limit flag.

Server

  • Tier1 accepts a forkable hub from the process through Tier1Modules.ForkableHub instead of building its own, so an app running next to tier1 (firehose in firecore) can share it and hold live blocks in memory once. NewLiveHub builds that hub and HubKeepFinalBlocks gives how many final blocks it keeps.

  • Tier1 now handles Ethereum partial blocks about 20x faster, with almost no allocations. It reads the
    transaction traces straight from the encoded block and drops the ones already sent by copying bytes,
    instead of decoding and re-encoding the whole block for every partial.

  • Add the external_calls_<kind> metering metrics (for example external_calls_eth_call), counting the calls
    made by WASM extensions. A batch counts for as many calls as it contains. Extensions report them with
    metering.AddExternalCalls.

CLI

  • Breaking for Rust modules: substreams build and substreams protogen generate buffa bindings for a
    project whose Cargo.toml depends on buffa, using buf.build/anthropics/buffa:v0.9.2. This pairs with
    substreams 0.8.0, which replaced prost with buffa as its protobuf implementation. See Migrating from prost to buffa.

    A project that depends on prost, or that names neither implementation, gets
    buf.build/community/neoeinstein-prost output. Generating buffa bindings for code written against prost
    does not compile, so buffa is used only where the manifest asks for it. Add buffa to [dependencies]
    before building against substreams 0.8.0.

    The on-the-wire protobuf encoding is unchanged. Existing packages keep streaming, cached module outputs
    stay valid, and sinks read the same bytes.

  • substreams build and substreams protogen warn when an existing buf.gen.yaml generates for a different
    protobuf implementation than Cargo.toml depends on, a combination that does not compile.

  • substreams build and substreams protogen write the mod.rs tying buffa's generated files together,
    which no buffa plugin produces, where buf.gen.yaml generates them. A prost project is unaffected: the
    prost-crate plugin writes its own. The file starts with // @generated by substreams, and one without
    that line is left alone, so a hand-written mod.rs is never overwritten; a mod.rs that has gone missing
    is written back without regenerating the bindings.

  • Fixed substreams build and substreams protogen skipping generation as already up to date when the code on
    disk was generated for a different target. The cache key now covers the buf.gen.yaml plugins and their
    out: paths, so repointing it at another plugin regenerates instead of leaving stale code in place, and a
    project whose buf.gen.yaml was deleted, which is what the stack-mismatch warning above tells the reader to
    do, always regenerates. The search for a buf.gen.yaml now stops at the repository root, so a project nested
    in a repository that configures buf for something else at its root is no longer generated with that
    configuration.

  • Fixed substreams build and substreams protogen failing with two definitions of the same type when a
    package carries its own copy of a protobuf that later became a system one. System protobufs are now matched
    by the fully qualified types they declare rather than by file name, and the package's copy is the one that
    stays, since it is what its modules were built against. substreams-sink-sql's services.proto holds the
    messages this project now ships as deprecated.proto.

  • substreams protogen --output-path now overrides the output directory only when it is given on the
    command line. Without it, an existing buf.gen.yaml that generates somewhere other than src/pb is
    followed, so mod.rs lands beside the files it includes instead of in a directory those files were
    never written to. The out: path written into a generated buf.gen.yaml is now resolved relative to
    that file rather than to the manifest, which is the same directory in a project whose buf.gen.yaml
    sits beside its manifest.

Dependencies

  • Bumped github.com/streamingfast/bstream to pick up two fixes: a stream can skip the partial blocks of a
    forkable hub it shares with another app, and blockstream detects a dead relayer in about 40s instead of
    5 minutes.