IOTA Protocol Weekly - May 19, 2026

May 19, 2026: Testnet release v1.23.2-rc introduces protocol version 26, runtime feature flag queries, and node pruning improvements.

IOTA Staking Team 3 min read
IOTA protocol update
Share:

Testnet release v1.23.2-rc is live with protocol version 26. This update focuses on runtime feature flag queries, node pruning, and several fixes across the stack. Not for mainnetβ€”testnet only.

Protocol Changes

  • Protocol version bumped to 26.
  • Added is_feature_enabled() to iota::protocol_config. This enables Move code to query protocol feature flags dynamically at runtime. Useful for conditionally enabling features based on protocol version.

Node Updates

  • Debug format for ObjectId changed from 0x... to ObjectId("0x...").
  • Periodic checkpoint progress status messages added. Log spam reduced.
  • Removed epoch-db-pruning-period-secs config parameter. Pruning now happens automatically during every epoch transition, fixing a memory leak and ensuring consistent pruning during sync.
  • Improved state sync peer tracking:
    • Handshake protocol added to prevent race conditions during peer registration.
    • Stale peers are now handled properly.
    • Periodic cleanup added to avoid memory bloat during long syncs.

Indexer Enhancements

  • JSON-RPC now supports fetching objects from fallback KV storage when the indexer database lacks the requested version (due to pruning).
  • Heads-up: the old IOTA Indexer CLI will be removed in v1.24. It was deprecated in v1.3.1. Update any scripts or workflows still relying on it.

JSON-RPC Adjustments

  • Removed schemars/JsonSchema dependencies from iota-types. JSON schema generation now handled exclusively in iota-json-rpc-types.
  • Sequence numbers in error messages now display in decimal format.
  • Error strings for IotaExecutionStatus::Failure are now derived from ExecutionError variants. Field names in messages updated (e.g., arg_idx β†’ argument).
  • Fixed "Could not find the referenced object" errors in balance/object changes for concurrent shared-object transactions.

GraphQL Optimization

  • Improved performance of Mutation.executeTransactionBlock.

CLI Tweaks

  • Owner now uses the SDK's Display implementation for output formatting (e.g., Address(<addr>) instead of Account Address ( <addr> )).
  • Argument::GasCoin now displays as Gas in CLI output and PTB snapshots.

Rust SDK Updates

  • SequenceNumber methods removed due to externalization. Use iota-sdk-types::Version instead. Some methods like next, increment, and decrement are now fallible.
  • IotaAddress methods also moved to iota-sdk-types::Address. Key changes: random_for_testing_only renamed to random, to_inner replaced by into_bytes, and Default is no longer derived (use IotaAddress::ZERO).
  • ObjectID methods removed and replaced by iota-rust-sdk::ObjectId equivalents.
  • Digest types (TransactionDigest, CheckpointDigest, etc.) now use iota_sdk_types::Digest. Changes include new method names (to_base58 replaces base58_encode) and updated tombstone constants (OBJECT_DIGEST_DELETED β†’ OBJECT_DELETED).
  • GasCostSummary now re-exported from iota_sdk_types::gas. new_from_txn_effects removed; use the colocated free function in iota-core::checkpoints instead.
  • Identifier, StructTag, and TypeTag re-exported from iota_sdk_types. Public APIs updated: struct fields are private, accessed via methods like address() and name().

This release is still in RC, so test thoroughly before integrating into production workflows. For full details, see the release notes.

Sources: v1.23.2-rc

I

Written by IOTA Staking Team

Expert in IOTA staking, blockchain technology, and DeFi strategies. Providing actionable insights to help you maximize your staking rewards.

Share this article:

Related Articles

```