github iotaledger/iota v1.28.0-alpha
[Alphanet] v1.28.0-alpha

pre-release7 hours ago

Protocol

This release introduces protocol version 31

On alphanet, this protocol version can be enabled no earlier than 2026-07-17 13:03 UTC (start of epoch 28).

#12162: Fixed an issue where committee selection could produce an empty committee when validator removals or low-stake departures emptied the eligible-validator set, aborting the epoch transition. Thanks to @Najnomics for reporting this issue.

#12118: Adds a new protocol parameter checkpoint_rate_window_size, enabled on devnet, which amortizes the minimum checkpoint interval over a sliding window of checkpoints so the sustained checkpoint rate holds at its ceiling instead of sagging.

#11582: Adds the package_metadata_with_dynamic_module_metadata feature
flag; package metadata can now store module metadata, including view functions, as a dynamic field.

#12211: Report a failed Move-based account authentication as a distinct MoveAuthenticationError execution error, without the authenticator's internal command index, so it can be distinguished from a failure of the programmable transaction. Gated at protocol version 31.

Nodes (Validators and Full nodes)

#12132: Object/checkpoint pruning is now paced against on-chain checkpoint timestamps instead of wall-clock time, keeping on-disk database size bounded during catch-up sync. The authority-store-pruning-config.smooth option has been removed and no longer has any effect (it is safely ignored if still present in the config).

#12183: Full node gRPC API can now derive and return per-transaction balance and object changes.

#12186: Database pruning is now driven by
checkpoint execution rather than a background timer: after each executed
checkpoint the node prunes data that has aged past the retention window, pacing
the work against on-chain checkpoint timestamps so it no longer stalls execution
in bursts. Execution is throttled if pruning falls behind, keeping on-disk size
bounded. The authority-store-pruning-config options pruning-run-delay-seconds,
max-checkpoints-in-batch, and max-transactions-in-batch have been removed and
are safely ignored if still present.

#12146: Replace the on-disk full_checkpoint_content table with a size-bounded in-memory cache for serving checkpoint contents to state-sync peers; validators populate it from the checkpoint builder. Adds an optional node config full-checkpoint-contents-cache-size-mb (default 1024; set 0 to disable). The full_checkpoint_content and checkpoint_sequence_by_contents_digest RocksDB column families are dropped automatically on first start.

#12218: New metrics pruning_chain_time_lag_ms, last_pruned_checkpoint_timestamp_ms and last_pruned_effects_checkpoint_timestamp_ms expose pruning progress, with a warning logged when pruning lags execution by more than one hour of chain time.

#12105: - Prometheus metrics now carry verbosity levels and can be trimmed per group via the metrics.groups node config section or the METRICS_FILTER env var.

  • ⚠️ By default the /metrics output (and metrics push) now contains only the metrics used by the shipped Grafana dashboards plus info-tagged operational metrics; operators with custom dashboards or alerts on other metrics must raise the relevant group's level (e.g. debug) via the config or the METRICS_FILTER keep them exposed.
  • The METRICS_FILTER boolean aliases (on/off/true/false/1/0) are replaced by off/warn/info/debug/trace.

#12199: Validators now apply the consensus gRPC per-peer admission control and inbound resource bounds by default (full nodes are unaffected — they run no consensus server). Set CONSENSUS_GRPC_PROTECTIVE_LIMITS=0 (or false) to opt out.

#12282: Consensus synchronization metrics (last_commit_index, commit_sync_fetched_commits, synchronizer_fetched_block_headers_by_peer, transaction_synchronizer_fetched_transactions_by_peer) are exposed in /metrics by default again.

Indexer

#12196: the deprecated --epochs-to-keep CLI arg and EPOCHS_TO_KEEP env var were removed. Use --pruning-config-path with epochs_to_keep set in the TOML config file instead.

#12209: total_epoch_committed metric renamed to last_committed_epoch, now it always points at the last committed epoch and doesn't start from 0 on every restart

JSON-RPC

#12211: The execution error for a failed Move authentication now reads as a Move authentication failure with no command index.

#12275: iota_view now validates that the called function is declared with the #[view] attribute, and is no longer restricted to non-production networks.

GraphQL

#12211: The transaction effects error for a failed Move authentication now reads as a Move authentication failure with no command index.

CLI

#12034: signatures in transaction output are shown as base64 (e.g. Ed25519Signature("...")) rather than raw byte arrays.

#12050: The iota move build command is now aware of the flag related to enabling the view function in the protocol config of the target network. Same for iota client publish, iota client verify-bytecode-meter and iota client verify-source. The check at build time for view functions can be override by users in iota move build using --allow-view-function

Rust SDK

#12211: Add the MoveAuthenticationError variant to ExecutionError.

gRPC

#12183: ExecutedTransaction responses can include opt-in balance_changes and object_changes (via the read mask) on get_transactions, execute_transactions, simulate_transactions and the checkpoint endpoints. get_transactions now returns FAILED_PRECONDITION when a requested input_objects / output_objects / balance_changes / object_changes field needs an object the node has pruned, instead of silently omitting it from the response.

#12211: The structured execution error for a failed Move authentication is now MoveAuthenticationError and carries no command index.


Full Log: v1.27.0-alpha...v1.28.0-alpha

Don't miss a new iota release

NewReleases is sending notifications on new releases.