Protocol
This release introduces protocol version 29
#11854: Enable fast commit sync, median-based commit timestamps with checkpoint enforcement and consensus block restrictions on Mainnet.
#11953: updated iota-system advance_epoch to reset safe_mode_computation_charges_burned to 0 at each epoch advance.
Nodes (Validators and Full nodes)
#10379: Transaction driver, validator client monitor, new gRPC submission endpoints for post-consensus conflict resolution.
#10812: ValidatorHealthResponse now returns real in-flight transaction counts, last committed leader round, and last locally built checkpoint sequence number
#11813: Fix a rare panic during validator shutdown.
#11873: TLS now required to connect to validator gRPC interface.
Indexer
#11809: ⚠️ Includes a migration that removes the objects_history table (expected duration: a few seconds). Action required for operators: remove any objects_history = <epochs> entry from your pruning configuration TOML before upgrading, from now on indexer will treat it as unknown table.
#11846: added --pruning-delay-ms and --pruning-batch-size arguments (also configurable via PRUNING_DELAY_MS and PRUNING_BATCH_SIZE env vars). The already deprecated --optimistic-pruner-batch-size argument will be removed in v1.29.0.
#11879: Fixes the CLI doc for the indexer subcommand which was marked DEPRECATED erroneously.
#11967: Fixed resolution of the pruning threshold in the JSON-RPC filtered queries.
JSON-RPC
#11821: Fixed iotax_getValidatorsApy reporting 0% APY for ~8 epochs after a zero-reward epoch, caused by floating-point rounding producing a spurious negative single-epoch APY.
#11851: upgradedVersion in linkageTable of raw move package object responses keeps its documented u64 number encoding (an unreleased regression from the SDK serialization alignment would have changed it to a string).
GraphQL
#11835: 🪛 Fixes a bug in the consistent resolution of object owners
#11845: ⚠️ Removes the WRAPPED_OR_DELETED variant of ObjectKind. This kind of objects are now treated as non-existent.
CLI
#11826: iota-localnet start --with-indexer now accepts --pruning-config-path to configure indexer data retention (the DB no longer grows without bound).
Rust SDK
#11718: iota-types::object::ObjectInner is now a re-export of
iota_sdk_types::Object. The Object wrapper (Arc<ObjectInner>) is
unchanged, and its accessor methods now live on Object itself rather than
on ObjectInner. Code that called these methods on a bare ObjectInner
value must go through Object, and the redundant
TryFrom<iota_sdk_types::Object> for Object conversion is replaced by the
infallible From. The BCS wire format is unchanged.