Hiero Block Node Configuration Document

July 24, 2026 · View on GitHub

Overview

This document outlines configuration options for the Hiero Block Node. Most settings are controlled via environment variables for flexible deployment.

Each plugin has its own properties, but this focuses on core options and core plugins.

Core Configuration Options

ENV VariableDescriptionDefault
BLOCK_NODE_EARLIEST_MANAGED_BLOCKEarliest block managed by this node. Older blocks may exist but won’t be fetched or stored.0

Server Configuration

ENV VariableDescriptionDefault
SERVER_MAX_MESSAGE_SIZE_BYTESMax message size (bytes) for HTTP/2.131,072,000
SERVER_SOCKET_SEND_BUFFER_SIZE_BYTESSend buffer size (bytes).131,072
SERVER_SOCKET_RECEIVE_BUFFER_SIZE_BYTESReceive buffer size (bytes). Override to 131072 for memory-constrained deployments (see values-overrides/nano.yaml).8,388,608
SERVER_PORTDefault port for all services. Individual plugins may bind to a different port via their own config.40840
SERVER_SHUTDOWN_DELAY_MILLISDelay before shutdown (ms).500
SERVER_MAX_TCP_CONNECTIONSMax TCP connections allowed.1000
SERVER_IDLE_CONNECTION_PERIOD_MINUTESPeriod for idle connections check (minutes).5
SERVER_IDLE_CONNECTION_TIMEOUT_MINUTESTimeout for idle connections (minutes).30
SERVER_TCP_NO_DELAYDisable Nagle's algorithm (TCP_NODELAY). Reduces latency for small, frequent writes.true
SERVER_BACKLOG_SIZEMaximum length of the queue of incoming connections on the server socket.8,192
SERVER_WRITE_QUEUE_LENGTHNumber of write buffers queued for write operations.8,192

WebServerHttp2 Configuration

ENV VariableDescriptionDefault
SERVER_HTTP2_FLOW_CONTROL_TIMEOUTOutbound flow control blocking timeout (ms).500
SERVER_HTTP2_INITIAL_WINDOW_SIZESender's maximum window size (bytes) for stream-level flow control.8,388,608
SERVER_HTTP2_MAX_CONCURRENT_STREAMSMax concurrent streams the server will allow.8
SERVER_HTTP2_MAX_EMPTY_FRAMESMax consecutive empty frames allowed on connection.10
SERVER_HTTP2_MAX_FRAME_SIZELargest frame payload size (bytes) the sender is willing to receive.8,388,608
SERVER_HTTP2_MAX_HEADER_LIST_SIZEMax field section size (bytes) the sender is prepared to accept.8,192
SERVER_HTTP2_MAX_RAPID_RESETSMax rapid resets (stream RST sent by client before any data sent by server).50
SERVER_HTTP2_RAPID_RESET_CHECK_PERIODPeriod for counting rapid resets (ms).10,000

Application State Configuration

ENV VariableDescriptionDefault
APP_STATE_TSS_BOOTSTRAP_FILE_PATHPath where TSS data (ledger ID, current roster, WRAPS VK) is persisted across restarts./opt/hiero/block-node/application-state/tss-bootstrap-roster.json
APP_STATE_RSA_BOOTSTRAP_FILE_PATHPath where the single current RSA node address book is persisted across restarts. Used by single-book deployments that have not yet migrated to the address book history file./opt/hiero/block-node/application-state/rsa-bootstrap-roster.json
APP_STATE_RSA_ADDRESS_BOOK_HISTORY_FILE_PATHPath to the block-number-keyed RSA address book history file (JSON-encoded RangedAddressBookHistory). When present, this file takes precedence over APP_STATE_RSA_BOOTSTRAP_FILE_PATH and enables verification of historical WRBs against the address book that was in effect per block./opt/hiero/block-node/application-state/rsa-address-book-history.json
APP_STATE_BLOCK_RANGES_FILE_PATHPath where the set of available and stored block ranges is persisted. Written every 1,000 blocks received./opt/hiero/block-node/application-state/block-ranges.json
KNOWN_PUBLISHERS_FILE_PATHPath where connections for known publisher are persisted. Read only on start./opt/hiero/block-node/application-state/known-publishers.json
INBOUND_PARTNERS_FILE_PATHPath where connections for designated inbound partners are persisted. Read only on start./opt/hiero/block-node/application-state/inbound-partners.json
OUTBOUND_PARTNERS_FILE_PATHPath where connections for designated outbound partners are persisted. Read only on start./opt/hiero/block-node/application-state/outbound-partners.json
APP_STATE_UPDATE_SCAN_INTERVALHow often (ms) the application state facility checks for pending TSS data updates. Minimum 100.500
APP_STATE_UPDATE_INITIAL_DELAYDelay (ms) before the application state facility begins its first scan.0

Stored blocks are all blocks reported as persisted by any plugin. Block availability is derived from HistoricalBlockFacility at query time and is not persisted separately. The stored block range set is loaded at startup and persisted to disk automatically.

RSA address book history vs. single-book file

The BN supports two modes for RSA key material:

  • Single-book mode (APP_STATE_RSA_BOOTSTRAP_FILE_PATH): the original mode — one NodeAddressBook covering the current network state. Sufficient for deployments that only handle live blocks.
  • History mode (APP_STATE_RSA_ADDRESS_BOOK_HISTORY_FILE_PATH): a RangedAddressBookHistory containing one entry per address book era, each scoped to a [startBlock, endBlock] range. Required for verifying historical Wrapped Record Blocks (WRBs) against the keys that were in effect when those blocks were produced.

When the history file is present at startup it takes precedence. When only the single-book file is present, the BN wraps it into a single open-ended era (covering all block numbers) so verification behaviour is unchanged.

Metrics Endpoint Configuration

The metrics HTTP server is provided by the hiero-metrics library and exposes Prometheus-format metrics. Its properties are prefixed with metrics.exporter.openmetrics.http. and can be set via:

  • app.properties (classpath, lowest priority)
  • JVM system properties (-D flags via JAVA_TOOL_OPTIONS, highest priority)
  • Helm chart blockNode.metrics.* values (which inject -D flags automatically)
Chart ValueJVM PropertyDescriptionDefault
blockNode.metrics.hostnamemetrics.exporter.openmetrics.http.hostnameBind address for the metrics server0.0.0.0
blockNode.metrics.portmetrics.exporter.openmetrics.http.portPrometheus endpoint port16007
blockNode.metrics.pathmetrics.exporter.openmetrics.http.pathHTTP path for metrics endpoint/metrics

Note: These properties come from the hiero-metrics library, not from a Block Node @ConfigData record. They cannot be set via environment variable mapping (AutomaticEnvironmentVariableConfigSource). The chart injects them as JVM system properties through JAVA_TOOL_OPTIONS.

Plugin Management

The Block Node is composed of plugins. The Helm chart determines which plugins are loaded into the running pod from the plugins.* values block. The next section (Configurations By Plugin) covers the per-plugin environment-variable settings; this section covers how plugins themselves are selected and added. For the design rationale, see Deployment with Selected Plugins.

Default Hiero plugins

A base Block Node deployment ships with no plugins; the Helm chart downloads them into the container at pod start. The chart's default plugin set is focused on a Tier 1 Local Full History (LFH) profile, enabled via plugins.names. The value is a comma-separated string of plugin identifiers:

plugins:
  names: "facility-messaging,block-access-service,health,server-status,stream-publisher,stream-subscriber,block-verification,blocks-file-historic,blocks-file-recent,backfill"

Note: All Tier 2 Block Nodes should drop stream-publisher from plugins.names. The presence of stream-publisher is the main difference between a Tier 1 and a Tier 2 deployment.

To change which plugins load, edit the list. Adding a name causes that plugin to be downloaded and loaded on the next pod start. Removing a name skips it on the next start, but the previously-installed JAR remains in the plugins folder unless the folder is cleared between runs (for example, by recreating the PVC or the volume backing the plugins directory). Operators do not need to rebuild the Block Node image — the chart resolves plugins from configured sources at pod start.

Plugin sources

The chart supports two sources for downloading plugins; both are configurable:

  • plugins.repositories (recommended for production): Maven repositories the init container queries to resolve plugin artifacts. Defaults to Maven Central and Sonatype Snapshots. Operators running at scale should add a local mirror to plugins.repositories to reduce dependency on public infrastructure.
  • plugins.mavenImage (intended for local and Solo testing): a container image with plugin JARs pre-built into it. Used as a fallback when network-based resolution from plugins.repositories isn't appropriate.
Chart valuePurposeDefault
plugins.namesComma-separated list of plugin identifiers to loadfacility-messaging,block-access-service,health,server-status,stream-publisher,stream-subscriber,block-verification,blocks-file-historic,blocks-file-recent,backfill
plugins.repositoriesMaven repositories used to resolve plugin artifactscentral (https://repo1.maven.org/maven2), sonatype-snapshots (https://central.sonatype.com/repository/maven-snapshots)
plugins.mavenImageContainer image used as a fallback plugin sourcemaven:3-eclipse-temurin-25-alpine

Third-party plugins (Maven-resolvable)

To add a plugin published to a Maven repository, list its full coordinates under plugins.thirdParty:

plugins:
  thirdParty:
    - "com.example:my-custom-plugin:1.0.0"

Third-party plugins are resolved alongside the default Hiero set using the repositories listed in plugins.repositories. To pull from a private repository, append it to plugins.repositories with the appropriate id and url.

Non-Maven plugins (manual JAR placement)

For plugins not published to a Maven repository, add an init container under blockNode.initContainers that places the JAR (and its transitive dependencies) into the plugin directory at pod start. The chart's values.yaml carries a commented example using wget to download a JAR. Dependencies are not auto-resolved on this path — the operator must supply every JAR the plugin needs.

A more robust pattern for fully operator-managed plugins is to mount a pre-populated PVC containing the JAR set; the chart supports this through standard Kubernetes volume mounts. See Deployment with Selected Plugins for the design boundary on what the chart resolves versus what the operator supplies.

Configurations By Plugin

Cloud Storage Archive Plugin Configuration

ENV VariableDescriptionDefault
CLOUD_STORAGE_ARCHIVE_GROUPING_LEVELFiles per archive in powers of ten (1=10, 2=100, …, 6=1,000,000).5
CLOUD_STORAGE_ARCHIVE_PART_SIZE_MBThe size of each multi-part upload part in megabytes. Minimum value is 5, maximum value is 204710
CLOUD_STORAGE_ARCHIVE_ENDPOINT_URLEndpoint URL for the cloud archive service (e.g., https://s3.amazonaws.com/).""
CLOUD_STORAGE_ARCHIVE_BUCKET_NAMEBucket name where cloud archive files are stored.""
CLOUD_STORAGE_ARCHIVE_OBJECT_KEY_PREFIXOptional prefix prepended to every S3 object key (e.g. blocks). When set, the full key format is {prefix}/AAAA/BBBB/CCCC/DDDD/EEE.tar. Leave empty for no prefix.""
CLOUD_STORAGE_ARCHIVE_STORAGE_CLASSStorage class (e.g., STANDARD, INTELLIGENT_TIERING, GLACIER, DEEP_ARCHIVE). Values available at AWS S3 storage classes"STANDARD"
CLOUD_STORAGE_ARCHIVE_REGION_NAMERegion for the cloud archive service (e.g., us-east-1).""
CLOUD_STORAGE_ARCHIVE_ACCESS_KEYAccess key for the archive service.""
CLOUD_STORAGE_ARCHIVE_SECRET_KEYSecret key for the archive service.""
CLOUD_STORAGE_ARCHIVE_MAX_CONCURRENT_TEMP_ARCHIVESMaximum number of temporary archive uploads that may run in parallel. Must be between 1 and 16.4
CLOUD_STORAGE_ARCHIVE_GAP_BUFFER_SIZENumber of blocks to buffer when a gap is detected before triggering recovery. Must be between 1 and 10.5

Backfill Plugin Configuration

ENV VariableDescriptionDefault
BACKFILL_START_BLOCKFirst block this BN deploy wants.0
BACKFILL_END_BLOCKMax block number, -1 means no limit.-1
BACKFILL_BLOCK_NODE_SOURCES_PATHFile path for BN sources (PBJ JSON block-nodes.json).""
BACKFILL_SCAN_INTERVALScan interval for gap detection (ms).60000
BACKFILL_MAX_RETRIESMax retries to fetch a block.3
BACKFILL_INITIAL_RETRY_DELAYInitial retry delay (ms), grows linearly.5000
BACKFILL_FETCH_BATCH_SIZENumber of blocks per gRPC call.10
BACKFILL_DELAY_BETWEEN_BATCHESDelay (ms) between block batches.1000
BACKFILL_INITIAL_DELAYInitial delay (ms) before starting backfill.15000
BACKFILL_PER_BLOCK_PROCESSING_TIMEOUTTimeout (ms) to wait for a block batch.1000
BACKFILL_GRPC_OVERALL_TIMEOUTOverall gRPC timeout (connect, read, poll) in ms.60000
BACKFILL_MAX_INCOMING_BUFFER_SIZEMax gRPC incoming buffer size in bytes (min 10 MB, max 300 MB).104857600
BACKFILL_ENABLE_TLSEnable TLS if supported by block-node client.false
BACKFILL_MAX_PROTOBUF_MESSAGE_SIZE_BYTESMax protobuf message size (bytes) accepted when parsing a block fetched over the wire during backfill.131072000
BACKFILL_GREEDYWhen true, searches and retrieves blocks beyond latestAcknowledged to prevent the BN from falling too far behind live.false
BACKFILL_HISTORICAL_QUEUE_CAPACITYBounded queue capacity for historical block fetch tasks (min 1, max 1000).20
BACKFILL_LIVE_TAIL_QUEUE_CAPACITYBounded queue capacity for live-tail block fetch tasks (min 1, max 100).10
BACKFILL_HEALTH_PENALTY_PER_FAILUREHealth score penalty applied per failed fetch attempt to a peer node.1000.0
BACKFILL_MAX_BACKOFF_MSMaximum backoff (ms) before retrying a failed peer node (minimum: 30,000).300,000

Note: The following can be configured in the JSON file at BACKFILL_BLOCK_NODE_SOURCES_PATH:

  • Per-node gRPC timeout overrides: grpc_connect_timeout, grpc_read_timeout, grpc_poll_wait_time
  • Advanced HTTP/2 tuning: grpc_webclient_tuning

See Backfill Plugin Design for the JSON schema.

Block Access Plugin Configuration

ENV VariableDescriptionDefault
BLOCK_ACCESS_PORTDedicated port for the block-access gRPC service. When unset, the service shares SERVER_PORT.(unset)

Files Historic Plugin Configuration

ENV VariableDescriptionDefault
FILES_HISTORIC_ROOT_PATHRoot path for saving historic blocks./opt/hiero/block-node/data/historic
FILES_HISTORIC_COMPRESSIONCompression type (e.g., ZSTD).ZSTD
FILES_HISTORIC_POWERS_OF_TEN_PER_ZIP_FILE_CONTENTSFiles per zip in powers of ten (1=10, 2=100, …, 6=1,000,000).4
FILES_HISTORIC_BLOCK_RETENTION_THRESHOLDNumber of zips to retain. 0 means keep indefinitely.0
FILES_HISTORIC_MAX_FILES_PER_DIRMax files per directory, as a number of digits, to avoid filesystem issues.3

Retention arithmetic: Effective blocks retained = FILES_HISTORIC_BLOCK_RETENTION_THRESHOLD$ \times 10^$FILES_HISTORIC_POWERS_OF_TEN_PER_ZIP_FILE_CONTENTS. Example: FILES_HISTORIC_BLOCK_RETENTION_THRESHOLD=5 with FILES_HISTORIC_POWERS_OF_TEN_PER_ZIP_FILE_CONTENTS=4 retains 50,000 blocks. A value of 0 for FILES_HISTORIC_BLOCK_RETENTION_THRESHOLD keeps blocks indefinitely.

Files Recent Plugin Configuration

ENV VariableDescriptionDefault
FILES_RECENT_LIVE_ROOT_PATHRoot path for saving live blocks./opt/hiero/block-node/data/live
FILES_RECENT_COMPRESSIONCompression type (e.g., ZSTD).ZSTD
FILES_RECENT_MAX_FILES_PER_DIRMax files per directory to avoid filesystem issues.3
FILES_RECENT_BLOCK_RETENTION_THRESHOLDBlock retention count. 0 means keep indefinitely.96,000

Health Plugin Configuration

ENV VariableDescriptionDefault
HEALTH_PORTDedicated port for the health HTTP endpoints. When unset, the service shares SERVER_PORT.(unset)

Messaging Plugin Configuration

ENV VariableDescriptionDefault
MESSAGING_BLOCK_ITEM_QUEUE_SIZEMax messages in block item queue. Each batch ~100 items. Must be power of 2.512
MESSAGING_BLOCK_NOTIFICATION_QUEUE_SIZEMax block notifications queued. Each may hold a full block in memory. Must be power of 2.32

Archive Plugin Configuration (S3 Archive)

ENV VariableDescriptionDefault
ARCHIVE_BLOCKS_PER_FILENumber of blocks per archive file. Must be a positive power of 10.100000
ARCHIVE_ENDPOINT_URLEndpoint URL for the archive service (e.g., https://s3.amazonaws.com/).""
ARCHIVE_BUCKET_NAMEBucket name where archive files are stored.block-node-archive
ARCHIVE_BASE_PATHBase path inside the bucket for archive files.blocks
ARCHIVE_STORAGE_CLASSStorage class (e.g., STANDARD, INTELLIGENT_TIERING, GLACIER, DEEP_ARCHIVE).STANDARD
ARCHIVE_REGION_NAMERegion for the archive service (e.g., us-east-1).us-east-1
ARCHIVE_ACCESS_KEYAccess key for the archive service.""
ARCHIVE_SECRET_KEYSecret key for the archive service.""

Server Status Plugin Configuration

ENV VariableDescriptionDefault
SERVER_STATUS_PORTDedicated port for the server-status gRPC service. When unset, the service shares SERVER_PORT.(unset)

Publisher Plugin Configuration

ENV VariableDescriptionDefault
PRODUCER_BATCH_FORWARD_LIMITMax number of blocks to forward in a batch. Must be ≥ 100,000.9,223,372,036,854,775,807
PRODUCER_PUBLISHER_UNAVAILABILITY_TIMEOUTThe time in seconds to wait when we have no active publishers before sending a publisher unavailability timeout status update. Must be ≥ 0.300
PRODUCER_STALE_RESEND_PRUNE_BUFFERNumber of blocks behind lastPersistedBlockNumber that a blocksToResend entry may sit before handlePersisted prunes it. Entries within the buffer are still considered fillable by a publisher; entries older than the buffer are dropped (the gap is owned by backfill at that point). Set to ~CN block-history depth. Must be 0 ≤ value ≤ 200.100
PRODUCER_FLOW_CONTROL_REFRESH_INTERVAL_NANOSDuration (ns) between flow-control refresh cycles. The manager resets per-handler message budgets and checks aggregate consumption at this cadence. Must be 100,000 ≤ value ≤ 100,000,000.10,000,000
PRODUCER_DUPLICATE_BLOCK_SKIP_WINDOWNumber of blocks behind lastPersistedBlockNumber for which a duplicate block header is answered with SkipBlock instead of EndOfStream(DUPLICATE_BLOCK). A publisher only slightly behind can fast-forward without reconnecting; duplicates further behind than the window still close the stream so the publisher reconnects. Must be 1 ≤ value ≤ 10.5
PRODUCER_PORTDedicated port for the publisher gRPC service. When unset, the service shares SERVER_PORT.(unset)

RSA Bootstrap Plugin Configuration

ENV VariableDescriptionDefault
ROSTER_BOOTSTRAP_RSA_MIRROR_NODE_BASE_URLThe URL of the mirror node from which to request the node address book.""
ROSTER_BOOTSTRAP_RSA_MN_INITIAL_QUERY_INTERVAL_MILLISThe initial period between queries to the mirror node until a node address book is found.5000
ROSTER_BOOTSTRAP_RSA_MN_SUBSEQUENT_QUERY_INTERVAL_MILLISThe subsequent period between queries to the mirror node after a node address book is found.60000
ROSTER_BOOTSTRAP_RSA_MIRROR_NODE_CONNECT_TIMEOUT_SECONDSTCP connect timeout when calling the Mirror Node.5
ROSTER_BOOTSTRAP_RSA_MIRROR_NODE_READ_TIMEOUT_SECONDSPer-request read timeout when calling the Mirror Node.10
ROSTER_BOOTSTRAP_RSA_MIRROR_NODE_PAGE_SIZENumber of nodes requested per paginated Mirror Node call.100
ROSTER_BOOTSTRAP_RSA_BLOCK_NODE_SOURCES_PATHFile path to the JSON file containing a list of block node servers to query for RSA data.""
ROSTER_BOOTSTRAP_RSA_BN_INITIAL_QUERY_INTERVAL_MILLISThe initial period between queries to the block node until a node address book is found.5000
ROSTER_BOOTSTRAP_RSA_BN_SUBSEQUENT_QUERY_INTERVAL_MILLISThe subsequent period between queries to the block node after a node address book is found.60000
ROSTER_BOOTSTRAP_RSA_GRPC_OVERALL_TIMEOUTOverall gRPC timeout (connect, read, poll) in ms.60000
ROSTER_BOOTSTRAP_RSA_MAX_INCOMING_BUFFER_SIZEMaximum block size used for the BlockNode Client104857600
ROSTER_BOOTSTRAP_RSA_ENABLE_TLSFlag indicating whether TLS should be enabled for the BlockNode client.false

Subscriber Plugin Configuration

ENV VariableDescriptionDefault
SUBSCRIBER_LIVE_QUEUE_SIZEQueue size (in batches) for transferring live data between messaging and client threads. Must be ≥100.4000
SUBSCRIBER_MAXIMUM_FUTURE_REQUESTMax blocks ahead of latest "live" block a request can start from. Must be ≥10.4000
SUBSCRIBER_MINIMUM_LIVE_QUEUE_CAPACITYMinimum free capacity in the live queue before dropping oldest blocks. Typically ~10% of queue size.400
SUBSCRIBER_MAX_PROTOBUF_MESSAGE_SIZE_BYTESMax protobuf message size (bytes) accepted when parsing a block to stream to a subscriber.131072000
SUBSCRIBER_PORTDedicated port for the subscriber gRPC service. When unset, the service shares SERVER_PORT.(unset)

TSS Bootstrap Plugin Configuration

ENV VariableDescriptionDefault
ROSTER_BOOTSTRAP_TSS_BLOCK_NODE_SOURCES_PATHFile path to the JSON file containing a list of block node servers to query for TSS data.""
ROSTER_BOOTSTRAP_TSS_QUERY_PEER_INTERVALThe amount of time in milliseconds between queries to the Peer Block Nodes for TSS data.60000
ROSTER_GRPC_OVERALL_TIMEOUTOverall gRPC timeout (connect, read, poll) in ms.60000
ROSTER_BOOTSTRAP_TSS_MAX_INCOMING_BUFFER_SIZEMaximum block size used for the BlockNode Client104857600
ROSTER_BOOTSTRAP_TSS_ENABLE_TLSFlag indicating whether TLS should be enabled for the BlockNode client.false

Verification Plugin Configuration

ENV VariableDescriptionDefault
VERIFICATION_RECENTLY_VERIFIED_BLOCKS_BUFFER_SIZESize of recently verified blocks buffer. Affects informational failures.100
VERIFICATION_ACTIVE_SESSIONS_BUFFER_SIZESize of active active sessions allowed simultaneously.100
VERIFICATION_FIRST_ORDERED_BLOCKThe first block number that requires the strict ordering guarantee. All blocks below this number will report immediate success.0
VERIFICATION_ALL_SOURCES_REQUIRE_ORDERINGFlag, indicating if all sources require the strict ordering guarantee on the last verified block high watermark.true
VERIFICATION_DUMP_ENABLEDFlag, indicating if the bad block dumper is enabled. (Write blocks that failed verification to disk)false
VERIFICATION_DUMP_DIRECTORY_PATHRoot path to be used by the bad block dumper./opt/hiero/block-node/verification/dumps
VERIFICATION_DUMP_RETENTION_DAYSHow many days dumped blocks will be retained for.7

NOTE the VERIFICATION_ALL_SOURCES_REQUIRE_ORDERING value should remain true in all "Tier 1" Block Nodes.

NOTE even if the VERIFICATION_ALL_SOURCES_REQUIRE_ORDERING value is set to false, strict ordering will always be imposed for the PUBLISHER source. In that scenario, it is possible that gaps can happen, because sources, other than PUBLISHER, can supply a valid block, much higher than last verified. This concern is understood and accepted.

Verification Plugin Configuration (DEPRECATED)

ENV VariableDescriptionDefault
VERIFICATION_ALL_BLOCKS_HASHER_ENABLEDEnable the all-blocks hasher to compute and verify a rolling root hash.false
VERIFICATION_ALL_BLOCKS_HASHER_FILE_PATHPath to the persisted root hash file for all previous blocks./opt/hiero/block-node/application-state/rootHashOfAllPreviousBlocks.bin
VERIFICATION_ALL_BLOCKS_HASHER_PERSISTENCE_INTERVALHow often (in blocks) the hasher persists its state to disk.10
VERIFICATION_TSS_PARAMETERS_FILE_PATHPath to the persisted TSS parameters file (ledger ID, address book, WRAPS VK)./opt/hiero/block-node/application-state/tss-parameters.bin
VERIFICATION_DUMP_ENABLEDWrite failing block bytes and metadata to disk for post-incident diagnostics.false
VERIFICATION_DUMP_DIRECTORY_PATHDirectory where bad-block dump files are written./opt/hiero/block-node/verification/dumps
VERIFICATION_DUMP_RETENTION_DAYSNumber of days to retain dump files before the daily purge removes them.7

Note: VERIFICATION_ALL_BLOCKS_HASHER_ENABLED must remain false (the default). The all-blocks hasher requires a strictly sequential block stream; out-of-order or forward-arriving blocks will cause it to fall out of sync and produce incorrect root hashes.

Cloud Storage Expanded Plugin Configuration

Uploads each verified block as a single ZSTD-compressed .blk.zstd object to any S3-compatible store (AWS S3, GCS S3-interop, MinIO, etc.). The plugin is disabled by default — setting CLOUD_EXPANDED_ENDPOINT_URL to a non-empty value activates it.

ENV VariableDescriptionDefault
CLOUD_STORAGE_EXPANDED_ENDPOINT_URLS3-compatible endpoint URL. Blank disables the plugin.""
CLOUD_STORAGE_EXPANDED_BUCKET_NAMEName of the S3 bucket where blocks are stored. Required; must not be blank.""
CLOUD_STORAGE_EXPANDED_OBJECT_KEY_PREFIXPrefix prepended to every object key (e.g. blocks). Set to "" for no prefix.""
CLOUD_STORAGE_EXPANDED_STORAGE_CLASSS3 storage class for uploaded objects. Must be STANDARD for the current bucky-client version.STANDARD
CLOUD_STORAGE_EXPANDED_REGION_NAMEAWS / S3-compatible region name. Required; must not be blank.""
CLOUD_STORAGE_EXPANDED_ACCESS_KEYS3 access key (not logged).""
CLOUD_STORAGE_EXPANDED_SECRET_KEYS3 secret key (not logged).""
CLOUD_STORAGE_EXPANDED_UPLOAD_TIMEOUT_SECONDSMax seconds per block upload before treating the upload as failed.60

Object keys follow the format {prefix}/AAAA/BBBB/CCCC/DDDD/EEE.blk.zstd, where the 19-digit zero-padded block number is split into a 4/4/4/4/3 folder hierarchy:

Block numberObject key
1blocks/0000/0000/0000/0000/001.blk.zstd
1 234 567blocks/0000/0000/0000/1234/567.blk.zstd
108 273 182blocks/0000/0000/0010/8273/182.blk.zstd