[Alphanet] v1.32.0-alpha
Pre-releaseProtocol
This release introduces protocol version 35
On alphanet, this protocol version can be enabled no earlier than 2026-09-12 01:03 UTC (start of epoch 141). Please ensure that you update your validators before this epoch change. Otherwise, if the upgrade threshold is reached, the protocol will remove you from the committee, and both you and your delegators will lose rewards.
#12850: Move-based sponsor account authentication is disabled on mainnet from protocol version 34.
#12564: MakeMoveVec size limits are relaxed for elements without copy, with clearer error messages; gated behind max_ptb_value_size_v2 (protocol version 33).
#12672: objects created or mutated by system transactions are no longer bounded by the max object size limit, gated by the allow_unbounded_system_objects feature flag (enabled at protocol version 33).
#12876: Enable the optimistic commit rule (StarfishSpeed) in Starfish consensus on mainnet.
#12842: Protocol version 35 adds max_meter_ticks_regex_reference_safety and sets the meter tick limits to 2.2M on all chains, and enables pcool_verifier_limits_from_protocol_config on all chains, where it takes effect only under the P-COOL flow (devnet today). With the flag set, post-consensus validation meters published packages with these limits instead of each validator's verifier-signing-config.
#12861: Enable package metadata with dynamic module metadata (Move view functions) on Mainnet.
#12888: Enable the redesigned leader schedule (sliding-window reputation scoring and absolute-score bad-node selection) in Starfish consensus on mainnet.
#12883: Enabled Move-based sponsor account authentication on all networks and runs every MoveAuthenticator pre-consensus again, not just the sponsor's.
Nodes (Validators and Full nodes)
#12796: Cap p2p request frames at 1 MiB and response frames at 128 MiB (previously 1 GiB for both), and reduce the default QUIC idle timeout on the p2p network from 30s to 10s so stale peer connections are detected and replaced faster.
#12337: - client-threshold now specifies a sustained rate per second. The limiter permits a burst of client-threshold * window-size-secs tallies. This behavior replaces the sliding-window average.
- The
channel-capacity,update-interval-secs, andsketch-*settings are removed. - If
policy-configis not specified, the node now keeps blocked IP addresses for 60 seconds. Previously,connection-blocklist-ttl-secdefaulted to 0 seconds. - The
tally_channel_overflowandhighest_*_ratemetrics are removed. - The
firewall_delegation_overflowandrate_limiter_evictionsmetrics are added. - An Admin API threshold change clears the rate-limit state for all clients. Setting the threshold to its current value keeps the existing state.
- The
proxy-blocklist-ttl-secdefault changes from 0 to 60 seconds, same asconnection-blocklist-ttl-sec.
#12752: a config that sets firewall-config while policy-config is null is now rejected at startup instead of starting with the firewall silently ignored.
#12354: the shared_object_assignments_size metric is removed together with the in-memory table it measured.
#12823: The fullnode setup templates now set db-path: /opt/iota/db/authorities_db (the validator layout). Existing fullnodes should keep their current db-path or move data/db/live into data/db/authorities_db/ before adopting the new template; otherwise the node starts an empty resync.
#12471: added max_view_function_call_batch_size config (default 20) bounding the gRPC view-function-call batch size.
#12836: Sync from peers now pauses while the synced watermark is more than max-checkpoints-ahead-of-execution (default 100,000) checkpoints ahead of the executed watermark, bounding the disk held by checkpoints that are synced but not yet executed. The setting moved from checkpoint-archive-config to the state-sync section of p2p-config, and now governs sync from peers and from the archive alike.
#12838: max-checkpoints-ahead-of-execution now bounds checkpoint summaries as well as contents, so a node that syncs faster than it executes no longer stores summaries for checkpoints it has declined to fetch contents for. The bound also applies before the node has executed its first checkpoint.
#12848: Updated the bundled RocksDB engine from 10.4.2 to 11.8.1.
#12858: the checkpoint progress log line now reports how far behind the chain a node is, and estimates when it will finish the current epoch and when it will catch up
#12842: Under the P-COOL flow, a validator's verifier-signing-config no longer affects which package publishes the network accepts. It still applies to signing, admission, dry-run, and simulation on that node.
#12862: A storage failure while initializing a shared object's next version now stops the node instead of being ignored and leaving that node assigning shared object versions that differ from the rest of the committee.
Indexer
#12823: iota-indexer restore run now defaults to logical cores - 1 parallel downloads, capped at 8.
#12643: Clever error messages now include the error code of the abort, if the abort constant declares one, and the command ordinal no longer renders as 11st/12nd/13rd.
#12789: redesiged the objects_backward_history indexes to be value-leading (~60% smaller, lighter ingestion) and drop two large checkpointed_objects indexes -
JSON-RPC
#12832: Fixed iotax_getDynamicFields and iotax_getOwnedObjects pagination that could permanently skip an unchanged row when the field or object referenced by the cursor was removed, transferred or otherwise left the index between pages.
#12643: Clever error messages now include the error code of the abort, if the abort constant declares one, and the command ordinal no longer renders as 11st/12nd/13rd.
#12857: Fixed gas selection in the unsafe_* methods dropping one owned object at every page boundary, which could make transaction building fail to find a suitable gas coin for accounts with more than 50 coins.
GraphQL
#12766: the packageAtVersion(version:) argument now uses UInt53. Schema only change, data format on the wire is unchanged.
#12643: Added TransactionBlockEffects.abortCode; clever error messages now include the error code of the abort, if the abort constant declares one, and the command ordinal no longer renders as 11st/12nd/13rd.
#12789: faster consistent object and balance queries
CLI
#12337: iota-localnet genesis no longer writes node config files; start --write-config <DIR> writes runnable ones; a config directory from an older version is rejected with a re-genesis message.
#12626: --json transaction output no longer includes checkpoint or timestampMs, and now reports the on-chain failure reason in errors for failed transactions.
#12753: - iota-localnet start --node-config-override [scope:]<path>=<value> sets any node config field for one run, scoped to all, fullnode, validator or validator-<N> and repeatable, and each run logs which fields the overrides set per node.
- A validator's
network-address,p2p-addressandprimary-addresscannot be overridden because they are committee metadata ingenesis.blob; the key pairs,genesisandmigration-tx-data-pathcannot be overridden on any node, andconsensus-configcannot be added or removed. --with-grpcis deprecated in favour of the new flag.
#12755: iota-localnet genesis no longer writes node config files; start --write-config <DIR> writes runnable ones; a config directory from an older version is rejected with a re-genesis message.
#12756: iota-localnet start reports a port clash before launching, naming the node, the config field and the override that moves it. --with-graphql now serves its metrics on the port after the GraphQL port (9126 by default) instead of on the fullnode's metrics port.
#12830: iota move build --dump-bytecode-as-base64 no longer mixes git's output into its JSON when a dependency is cloned during the build.
#12823: iota-tool download-formal-snapshot and backfill-checkpoint-summaries now default to logical cores - 1 parallel downloads, capped at 8; the docs no longer recommend --num-parallel-downloads 50.
#12653: new iota move coverage lcov subcommand emits LCOV data from Move unit test traces; move-package override resolution reworked, which changes the wording of conflicting-dependency errors; builds using override = true that previously failed with a spurious conflicting dependencies found now succeed.
Rust SDK
#12626: transaction execution forwards the request type to the node instead of imitating it client-side, removing a round trip when the node honors it. WaitForLocalExecution responses no longer carry checkpoint or timestampMs; errors now carries the on-chain failure reason; exhausting the client-side poll budget returns the node's response instead of FailToConfirmTransactionStatus.
gRPC
#12471: added new execution service endpoint to call move functions annotated with #[view] attribute.
#12832: Fixed ListOwnedObjects and ListDynamicFields pagination that could permanently skip an unchanged row when the index row referenced by the page token vanished between pages (e.g. the cursor coin's balance changed, or the cursor field was removed).