Skip to content

Releases: iotaledger/iota

[Testnet] v1.25.0-rc

10 Jun 10:26
6f6c00e

Choose a tag to compare

[Testnet] v1.25.0-rc Pre-release
Pre-release

Protocol

This release introduces protocol version 28

#11626: Move authenticator contracts can now inspect which authenticator function the sender and sponsor used during transaction execution via two new AuthContext accessors: sender_authenticator_function_info_v1() and sponsor_authenticator_function_info_v1().

#11708: Enable Move-based account authentication in mainnet Enable Move-based sponsor account authentication in testnet. The max_auth_gas parameter is set to 0.00002 IOTA in testnet and mainnet.

Nodes (Validators and Full nodes)

#11598: - DoS protection is enabled in dryRun mode by default for validators.

  • A new admin API endpoint allows hot-reconfiguration of the traffic control policy without clearing blocklists.
  • A new metric exposes whether dry-run is enabled, and the blocked-requests / blocklist-length metrics are now accurate.

#11680: Removed the unused PassthroughCache execution cache. WritebackCache is now the only supported implementation. The execution-cache config field and DISABLE_WRITEBACK_CACHE env var are no longer recognized and can be dropped from node configs.

#11569: Two new RocksDB column families are auto-created on epoch store open — scoring_metrics (on the starfish store) and received_reports_state (on AuthorityEpochTables) — used to persist Starfish misbehavior counts and per-validator received-reports tallies across restarts. No migration or operator action required.

Indexer

#11692: --epochs-to-keep scheduled for removal in v1.28, please migrate to --pruning-config-path

#11709: Removed the objects_snapshot ingestion pipeline; The CLI flags --objects-snapshot-min-checkpoint-lag and --objects-snapshot-sleep-duration, and the OBJECTS_SNAPSHOT_MIN_CHECKPOINT_LAG env var, are deprecated and will be removed in v1.31.0. They are now no-ops and will log a warning if set.

JSON-RPC

#11702: The following IotaValidatorSummary fields were incorrectly serialized as byte arrays and are now correctly serialized as Base64: next_epoch_authority_pubkey_bytes, next_epoch_proof_of_possession, next_epoch_network_pubkey_bytes, next_epoch_protocol_pubkey_bytes

GraphQL

#11635: Add Subscription support for Event and TransactionBlock.It does accept an optional startAfter
transaction digest to resume receiving transactions and events from a specific point. For more detailed information consult the graphql schema.

#11655: Includes the current epoch for validator APY calculation in consistency with the JSON-RPC API.

#11595: ⚠️ Removed TransactionBlockFilter.signAddress in favor of TransactionBlockFilter.sentAddress which behaves identically. Similarly AddressTransactionBlockRelationship.SIGN is removed in favor of AddressTransactionBlockRelationship.SENT.

CLI

#11684: Enable the creation of MoveAuthenticators for accounts where the authenticator function requires no additional args.

Rust SDK

#11633: iota_types::effects::TransactionEvents is now a re-export of
iota_sdk_types::events::TransactionEvents. The type is now a tuple struct
TransactionEvents(Vec<Event>) rather than a struct with a public data
field, so call sites that accessed events.data need to switch to
events.0, and constructors switch from
TransactionEvents { data: vec![..] } to TransactionEvents(vec![..]).
The BCS wire format is unchanged.

#11556: iota_types::transfer::Receiving::{struct_tag, type_tag} now take a TypeTag argument (the value's inner type). The dead MoveTypeTagTrait for Config impl is removed.

#11505: iota-types::multisig::MultiSig and MultiSigPublicKey are now re-exports of iota_sdk_types::crypto::MultisigAggregatedSignature and MultisigCommittee. Constructors and accessors changed: use MultiSigPublicKey::new(members: Vec<MultisigMember>, threshold) (instead of separate pks and weights vectors), MultiSig::new(...) (instead of MultiSig::combine(...)), and committee().members() / signatures() / get_indices() instead of pk_map / get_sigs() / get_pk().


Full Log: v1.24.0-rc...v1.25.0-rc

[Devnet] v1.25.0-beta

08 Jun 07:24
69d654b

Choose a tag to compare

[Devnet] v1.25.0-beta Pre-release
Pre-release

Protocol

This release introduces protocol version 28

#11626: Move authenticator contracts can now inspect which authenticator function the sender and sponsor used during transaction execution via two new AuthContext accessors: sender_authenticator_function_info_v1() and sponsor_authenticator_function_info_v1().

#11708: Enable Move-based account authentication in mainnet Enable Move-based sponsor account authentication in testnet. The max_auth_gas parameter is set to 0.00002 IOTA in testnet and mainnet.

Nodes (Validators and Full nodes)

#11598: - DoS protection is enabled in dryRun mode by default for validators.

  • A new admin API endpoint allows hot-reconfiguration of the traffic control policy without clearing blocklists.
  • A new metric exposes whether dry-run is enabled, and the blocked-requests / blocklist-length metrics are now accurate.

#11680: Removed the unused PassthroughCache execution cache. WritebackCache is now the only supported implementation. The execution-cache config field and DISABLE_WRITEBACK_CACHE env var are no longer recognized and can be dropped from node configs.

#11569: Two new RocksDB column families are auto-created on epoch store open — scoring_metrics (on the starfish store) and received_reports_state (on AuthorityEpochTables) — used to persist Starfish misbehavior counts and per-validator received-reports tallies across restarts. No migration or operator action required.

Indexer

#11692: --epochs-to-keep scheduled for removal in v1.28, please migrate to --pruning-config-path

#11709: Removed the objects_snapshot ingestion pipeline; The CLI flags --objects-snapshot-min-checkpoint-lag and --objects-snapshot-sleep-duration, and the OBJECTS_SNAPSHOT_MIN_CHECKPOINT_LAG env var, are deprecated and will be removed in v1.31.0. They are now no-ops and will log a warning if set.

JSON-RPC

#11702: The following IotaValidatorSummary fields were incorrectly serialized as byte arrays and are now correctly serialized as Base64: next_epoch_authority_pubkey_bytes, next_epoch_proof_of_possession, next_epoch_network_pubkey_bytes, next_epoch_protocol_pubkey_bytes

GraphQL

#11635: Add Subscription support for Event and TransactionBlock.It does accept an optional startAfter
transaction digest to resume receiving transactions and events from a specific point. For more detailed information consult the graphql schema.

#11655: Includes the current epoch for validator APY calculation in consistency with the JSON-RPC API.

#11595: ⚠️ Removed TransactionBlockFilter.signAddress in favor of TransactionBlockFilter.sentAddress which behaves identically. Similarly AddressTransactionBlockRelationship.SIGN is removed in favor of AddressTransactionBlockRelationship.SENT.

CLI

#11684: Enable the creation of MoveAuthenticators for accounts where the authenticator function requires no additional args.

Rust SDK

#11633: iota_types::effects::TransactionEvents is now a re-export of
iota_sdk_types::events::TransactionEvents. The type is now a tuple struct
TransactionEvents(Vec<Event>) rather than a struct with a public data
field, so call sites that accessed events.data need to switch to
events.0, and constructors switch from
TransactionEvents { data: vec![..] } to TransactionEvents(vec![..]).
The BCS wire format is unchanged.

#11556: iota_types::transfer::Receiving::{struct_tag, type_tag} now take a TypeTag argument (the value's inner type). The dead MoveTypeTagTrait for Config impl is removed.

#11505: iota-types::multisig::MultiSig and MultiSigPublicKey are now re-exports of iota_sdk_types::crypto::MultisigAggregatedSignature and MultisigCommittee. Constructors and accessors changed: use MultiSigPublicKey::new(members: Vec<MultisigMember>, threshold) (instead of separate pks and weights vectors), MultiSig::new(...) (instead of MultiSig::combine(...)), and committee().members() / signatures() / get_indices() instead of pk_map / get_sigs() / get_pk().


Full Log: v1.24.0-beta...v1.25.0-beta

[Alphanet] v1.25.0-alpha

05 Jun 12:03
a408a3b

Choose a tag to compare

Pre-release

Protocol

This release introduces protocol version 28

#11626: Move authenticator contracts can now inspect which authenticator function the sender and sponsor used during transaction execution via two new AuthContext accessors: sender_authenticator_function_info_v1() and sponsor_authenticator_function_info_v1().

#11708: Enable Move-based account authentication in mainnet Enable Move-based sponsor account authentication in testnet. The max_auth_gas parameter is set to 0.00002 IOTA in testnet and mainnet.

Nodes (Validators and Full nodes)

#11598: - DoS protection is enabled in dryRun mode by default for validators.

  • A new admin API endpoint allows hot-reconfiguration of the traffic control policy without clearing blocklists.
  • A new metric exposes whether dry-run is enabled, and the blocked-requests / blocklist-length metrics are now accurate.

#11680: Removed the unused PassthroughCache execution cache. WritebackCache is now the only supported implementation. The execution-cache config field and DISABLE_WRITEBACK_CACHE env var are no longer recognized and can be dropped from node configs.

#11569: Two new RocksDB column families are auto-created on epoch store open — scoring_metrics (on the starfish store) and received_reports_state (on AuthorityEpochTables) — used to persist Starfish misbehavior counts and per-validator received-reports tallies across restarts. No migration or operator action required.

Indexer

#11692: --epochs-to-keep scheduled for removal in v1.28, please migrate to --pruning-config-path

#11709: Removed the objects_snapshot ingestion pipeline; The CLI flags --objects-snapshot-min-checkpoint-lag and --objects-snapshot-sleep-duration, and the OBJECTS_SNAPSHOT_MIN_CHECKPOINT_LAG env var, are deprecated and will be removed in v1.31.0. They are now no-ops and will log a warning if set.

JSON-RPC

#11702: The following IotaValidatorSummary fields were incorrectly serialized as byte arrays and are now correctly serialized as Base64: next_epoch_authority_pubkey_bytes, next_epoch_proof_of_possession, next_epoch_network_pubkey_bytes, next_epoch_protocol_pubkey_bytes

GraphQL

#11635: Add Subscription support for Event and TransactionBlock.It does accept an optional startAfter
transaction digest to resume receiving transactions and events from a specific point. For more detailed information consult the graphql schema.

#11655: Includes the current epoch for validator APY calculation in consistency with the JSON-RPC API.

#11595: ⚠️ Removed TransactionBlockFilter.signAddress in favor of TransactionBlockFilter.sentAddress which behaves identically. Similarly AddressTransactionBlockRelationship.SIGN is removed in favor of AddressTransactionBlockRelationship.SENT.

CLI

#11684: Enable the creation of MoveAuthenticators for accounts where the authenticator function requires no additional args.

Rust SDK

#11633: iota_types::effects::TransactionEvents is now a re-export of
iota_sdk_types::events::TransactionEvents. The type is now a tuple struct
TransactionEvents(Vec<Event>) rather than a struct with a public data
field, so call sites that accessed events.data need to switch to
events.0, and constructors switch from
TransactionEvents { data: vec![..] } to TransactionEvents(vec![..]).
The BCS wire format is unchanged.

#11556: iota_types::transfer::Receiving::{struct_tag, type_tag} now take a TypeTag argument (the value's inner type). The dead MoveTypeTagTrait for Config impl is removed.

#11505: iota-types::multisig::MultiSig and MultiSigPublicKey are now re-exports of iota_sdk_types::crypto::MultisigAggregatedSignature and MultisigCommittee. Constructors and accessors changed: use MultiSigPublicKey::new(members: Vec<MultisigMember>, threshold) (instead of separate pks and weights vectors), MultiSig::new(...) (instead of MultiSig::combine(...)), and committee().members() / signatures() / get_indices() instead of pk_map / get_sigs() / get_pk().


Full Log: v1.24.0-alpha...v1.25.0-alpha

[Mainnet] v1.24.0

03 Jun 07:22
2afd70d

Choose a tag to compare

Protocol

This release introduces protocol version 27

#11382: Introduces the consensus_block_restrictions feature flag. When enabled, the block verifier and proposer enforce per-block caps and round-gap constraints on block-header fields so that block-header size is bounded for a given committee size.

#11508: Enables a flow in which, if a transaction has both a MoveAuthenticator for a sender and a sponsor, then during the pre-consensus phase only the sponsor Authenticator Function is executed. Two new fields are added to the AuthContext, namely sender_auth_digest and sponsor_auth_digest, representing the digests of both signature fields.

Indexer

#11511: The deprecated iota-indexer CLI is removed. The old worker flags (--fullnode-sync-worker, --rpc-server-worker, --analytical-worker) don't work anymore — use the corresponding subcommands (indexer, json-rpc-service, analytical-worker) instead.

#11105: 🛠️ Added checkpointed_objects table to improve consistent views support. The migration copies all rows from objects, which may take several minutes on large databases. Operators should plan for downtime accordingly. ⚠️

#11573: iota-data-ingestion-core: support filtered checkpoints for fullnode remote source (RemoteUrl::Fullnode). Filters can be provided through the CheckpointReaderConfigExt::with_fullnode_transaction_filter. For more information consult the iota-data-ingestion-core::{config, reader::filters} module documentation.

#11563: 🛠️ Added pruning support for objects_backward_history; retention follows the configured epochs_to_keep.

GraphQL

#11563: Consistent views now use objects_backward_history. The size of the consistent-views window is configurable via --backward-history-max-lookback / BACKWARD_HISTORY_MAX_LOOKBACK on iota-graphql-rpc start-server (default 9000 checkpoints, ≈ 30 minutes). A pagination cursor stays valid for as long as its checkpoint falls within this window.
Given that the objects_backward_history table is not backfilled during migration, pagination cursors created before the migration will not work. For full support of such cursors operators should run a separate old instance for 30 minutes before shifting traffic to the new one.

#11583: Fixes an issue where passing txMeta input in Query.dryRunTransactionBlock could lead to errors due to query limit checks.

#11620: ⚠️ Deprecates WRAPPED_OR_DELETED variant of ObjectKind. This kind of objects will be treated as non-existent. The variant will be removed with the v1.26 release.

⚠️ Next release (v1.25) will mark the removal of TransactionBlockFilter.signAddress in favor of TransactionBlockFilter.sentAddress which behaves identically. Similarly AddressTransactionBlockRelationship.SIGN will be removed in favor of AddressTransactionBlockRelationship.SENT. Last call to refactor dependent client logic accordingly.

CLI

#11306: support Move authenticator as gas sponsor

#10714: allow fine grained upgrade control in iota client ptb

gRPC

#11157: Moved iota-grpc-types and iota-grpc-client crates to https://github.com/iotaledger/iota-rust-sdk

#11621: fix execute_transactions waiting the full checkpoint_inclusion_timeout_ms after the transaction was already checkpointed


Full Log: v1.23.2...v1.24.0

[Testnet] v1.24.0-rc

27 May 07:17
2605dfe

Choose a tag to compare

[Testnet] v1.24.0-rc Pre-release
Pre-release

Protocol

This release introduces protocol version 27

#11382: Introduces the consensus_block_restrictions feature flag. When enabled, the block verifier and proposer enforce per-block caps and round-gap constraints on block-header fields so that block-header size is bounded for a given committee size.

#11508: Enables a flow in which, if a transaction has both a MoveAuthenticator for a sender and a sponsor, then during the pre-consensus phase only the sponsor Authenticator Function is executed. Two new fields are added to the AuthContext, namely sender_auth_digest and sponsor_auth_digest, representing the digests of both signature fields.

Indexer

#11511: The deprecated iota-indexer CLI is removed. The old worker flags (--fullnode-sync-worker, --rpc-server-worker, --analytical-worker) don't work anymore — use the corresponding subcommands (indexer, json-rpc-service, analytical-worker) instead.

#11105: 🛠️ Added checkpointed_objects table to improve consistent views support. The migration copies all rows from objects, which may take several minutes on large databases. Operators should plan for downtime accordingly. ⚠️

#11573: iota-data-ingestion-core: support filtered checkpoints for fullnode remote source (RemoteUrl::Fullnode). Filters can be provided through the CheckpointReaderConfigExt::with_fullnode_transaction_filter. For more information consult the iota-data-ingestion-core::{config, reader::filters} module documentation.

#11563: 🛠️ Added pruning support for objects_backward_history; retention follows the configured epochs_to_keep.

GraphQL

#11563: Consistent views now use objects_backward_history. The size of the consistent-views window is configurable via --backward-history-max-lookback / BACKWARD_HISTORY_MAX_LOOKBACK on iota-graphql-rpc start-server (default 9000 checkpoints, ≈ 30 minutes). A pagination cursor stays valid for as long as its checkpoint falls within this window.
Given that the objects_backward_history table is not backfilled during migration, pagination cursors created before the migration will not work. For full support of such cursors operators should run a separate old instance for 30 minutes before shifting traffic to the new one.

#11583: Fixes an issue where passing txMeta input in Query.dryRunTransactionBlock could lead to errors due to query limit checks.

#11620: ⚠️ Deprecates WRAPPED_OR_DELETED variant of ObjectKind. This kind of objects will be treated as non-existent. The variant will be removed with the v1.26 release.

⚠️ Next release (v1.25) will mark the removal of TransactionBlockFilter.signAddress in favor of TransactionBlockFilter.sentAddress which behaves identically. Similarly AddressTransactionBlockRelationship.SIGN will be removed in favor of AddressTransactionBlockRelationship.SENT. Last call to refactor dependent client logic accordingly.

CLI

#11306: support Move authenticator as gas sponsor

#10714: allow fine grained upgrade control in iota client ptb

gRPC

#11157: Moved iota-grpc-types and iota-grpc-client crates to https://github.com/iotaledger/iota-rust-sdk

#11621: fix execute_transactions waiting the full checkpoint_inclusion_timeout_ms after the transaction was already checkpointed


Full Log: v1.23.2-rc...v1.24.0-rc

[Devnet] v1.24.0-beta

25 May 07:29
1c4da91

Choose a tag to compare

[Devnet] v1.24.0-beta Pre-release
Pre-release

Protocol

This release introduces protocol version 27

#11382: Introduces the consensus_block_restrictions feature flag. When enabled, the block verifier and proposer enforce per-block caps and round-gap constraints on block-header fields so that block-header size is bounded for a given committee size.

#11508: Enables a flow in which, if a transaction has both a MoveAuthenticator for a sender and a sponsor, then during the pre-consensus phase only the sponsor Authenticator Function is executed. Two new fields are added to the AuthContext, namely sender_auth_digest and sponsor_auth_digest, representing the digests of both signature fields.

Indexer

#11511: The deprecated iota-indexer CLI is removed. The old worker flags (--fullnode-sync-worker, --rpc-server-worker, --analytical-worker) don't work anymore — use the corresponding subcommands (indexer, json-rpc-service, analytical-worker) instead.

#11105: 🛠️ Added checkpointed_objects table to improve consistent views support. The migration copies all rows from objects, which may take several minutes on large databases. Operators should plan for downtime accordingly. ⚠️

#11573: iota-data-ingestion-core: support filtered checkpoints for fullnode remote source (RemoteUrl::Fullnode). Filters can be provided through the CheckpointReaderConfigExt::with_fullnode_transaction_filter. For more information consult the iota-data-ingestion-core::{config, reader::filters} module documentation.

#11563: 🛠️ Added pruning support for objects_backward_history; retention follows the configured epochs_to_keep.

GraphQL

#11563: Consistent views now use objects_backward_history. The size of the consistent-views window is configurable via --backward-history-max-lookback / BACKWARD_HISTORY_MAX_LOOKBACK on iota-graphql-rpc start-server (default 9000 checkpoints, ≈ 30 minutes). A pagination cursor stays valid for as long as its checkpoint falls within this window.
Given that the objects_backward_history table is not backfilled during migration, pagination cursors created before the migration will not work. For full support of such cursors operators should run a separate old instance for 30 minutes before shifting traffic to the new one.

#11583: Fixes an issue where passing txMeta input in Query.dryRunTransactionBlock could lead to errors due to query limit checks.

#11620: ⚠️ Deprecates WRAPPED_OR_DELETED variant of ObjectKind. This kind of objects will be treated as non-existent. The variant will be removed with the v1.26 release.

⚠️ Next release (v1.25) will mark the removal of TransactionBlockFilter.signAddress in favor of TransactionBlockFilter.sentAddress which behaves identically. Similarly AddressTransactionBlockRelationship.SIGN will be removed in favor of AddressTransactionBlockRelationship.SENT. Last call to refactor dependent client logic accordingly.

CLI

#11306: support Move authenticator as gas sponsor

#10714: allow fine grained upgrade control in iota client ptb

gRPC

#11157: Moved iota-grpc-types and iota-grpc-client crates to https://github.com/iotaledger/iota-rust-sdk

#11621: fix execute_transactions waiting the full checkpoint_inclusion_timeout_ms after the transaction was already checkpointed


Full Log: v1.23.1-beta...v1.24.0-beta

[Alphanet] v1.24.0-alpha

22 May 11:33
d535200

Choose a tag to compare

Pre-release

Protocol

This release introduces protocol version 27

#11382: Introduces the consensus_block_restrictions feature flag. When enabled, the block verifier and proposer enforce per-block caps and round-gap constraints on block-header fields so that block-header size is bounded for a given committee size.

#11508: Enables a flow in which, if a transaction has both a MoveAuthenticator for a sender and a sponsor, then during the pre-consensus phase only the sponsor Authenticator Function is executed. Two new fields are added to the AuthContext, namely sender_auth_digest and sponsor_auth_digest, representing the digests of both signature fields.

Indexer

#11511: The deprecated iota-indexer CLI is removed. The old worker flags (--fullnode-sync-worker, --rpc-server-worker, --analytical-worker) don't work anymore — use the corresponding subcommands (indexer, json-rpc-service, analytical-worker) instead.

#11105: 🛠️ Added checkpointed_objects table to improve consistent views support. The migration copies all rows from objects, which may take several minutes on large databases. Operators should plan for downtime accordingly. ⚠️

#11573: iota-data-ingestion-core: support filtered checkpoints for fullnode remote source (RemoteUrl::Fullnode). Filters can be provided through the CheckpointReaderConfigExt::with_fullnode_transaction_filter. For more information consult the iota-data-ingestion-core::{config, reader::filters} module documentation.

#11563: 🛠️ Added pruning support for objects_backward_history; retention follows the configured epochs_to_keep.

GraphQL

#11563: Consistent views now use objects_backward_history. The size of the consistent-views window is configurable via --backward-history-max-lookback / BACKWARD_HISTORY_MAX_LOOKBACK on iota-graphql-rpc start-server (default 9000 checkpoints, ≈ 30 minutes). A pagination cursor stays valid for as long as its checkpoint falls within this window.
Given that the objects_backward_history table is not backfilled during migration, pagination cursors created before the migration will not work. For full support of such cursors operators should run a separate old instance for 30 minutes before shifting traffic to the new one.

#11583: Fixes an issue where passing txMeta input in Query.dryRunTransactionBlock could lead to errors due to query limit checks.

#11620: ⚠️ Deprecates WRAPPED_OR_DELETED variant of ObjectKind. This kind of objects will be treated as non-existent. The variant will be removed with the v1.26 release.

⚠️ Next release (v1.25) will mark the removal of TransactionBlockFilter.signAddress in favor of TransactionBlockFilter.sentAddress which behaves identically. Similarly AddressTransactionBlockRelationship.SIGN will be removed in favor of AddressTransactionBlockRelationship.SENT. Last call to refactor dependent client logic accordingly.

CLI

#11306: support Move authenticator as gas sponsor

#10714: allow fine grained upgrade control in iota client ptb

gRPC

#11157: Moved iota-grpc-types and iota-grpc-client crates to https://github.com/iotaledger/iota-rust-sdk

#11621: fix execute_transactions waiting the full checkpoint_inclusion_timeout_ms after the transaction was already checkpointed


Full Log: v1.23.0-alpha...v1.24.0-alpha

[Mainnet] v1.23.2

20 May 07:25
0ede760

Choose a tag to compare

Protocol

This release introduces protocol version 26

#11443: Add iota::protocol_config::is_feature_enabled() to allow Move code to query protocol feature flags at runtime.

Nodes (Validators and Full nodes)

#11331: Debug format of ObjectId was changed from 0x... to ObjectId("0x...")

#11450: Added periodic checkpoint progress status message and reduced log spam

#11463: Removed the epoch-db-pruning-period-secs node config parameter. Pruning is now automatically triggered during every epoch transition. This fixes a potential memory leak and ensures consistent pruning behavior during node synchronization.

#11451: Hardened state sync peer tracking:

  • added a handshake protocol to eliminate race conditions during peer registration
  • fixed stale peer handling
  • added periodic cleanup to prevent memory growth during long syncs

Indexer

#11312: JSON-RPC supports fetching objects before a requested version from the fallback KV storage when the indexer database does not contain the requested version due to pruning.

⚠️ The next release v1.24 will mark the removal of the old IOTA Indexer CLI which was deprecated in v1.3.1. Last call to refactor dependent scripts accordingly.

JSON-RPC

#10508: Remove all schemars / JsonSchema dependencies from iota-types (the core domain crate) and re-implement JSON schema generation exclusively within iota-json-rpc-types

#11326: Sequence numbers are now displayed in decimal format in error messages

#11331: Debug format of ObjectId was changed from 0x... to ObjectId("0x...")

#11395: IotaExecutionStatus::Failure error strings are produced
from the SDK's ExecutionError variants. Wording is the same for existing
cases, but field names quoted in the message have changed in line with the
variant/field renames listed above (e.g. arg_idxargument).

#11397: Fixed "Could not find the referenced object" errors in balance/object changes for concurrent shared-object transactions.

GraphQL

#11439: Optimize Mutation.executeTransactionBlock.

CLI

#11390: Owner is now displayed using the SDK's Display impl
(Address(<addr>), Object(<id>), Shared(<v>), Immutable) instead of
the previous Account Address ( <addr> ) / Object ID: ( <id> ) /
Shared( <v> ) formatting.

#11393: The Argument::GasCoin PTB argument now displays as Gas instead
of GasCoin in CLI output and PTB snapshots.

Rust SDK

#11326: Some methods have been removed from SequenceNumber due to
crate externalization (iota-sdk-types::Version is replacing
iota-types::SequenceNumber). Constructors and arithmetic helpers
(next, increment, decrement, lamport_increment,
new_congested_with_suggested_gas_price) are now fallible on the SDK type.

#11330: Some methods have been removed from IotaAddress due to
crate externalization (iota-sdk-types::Address is replacing
iota-types::IotaAddress). Notably, random_for_testing_only is renamed
to random, to_inner / tuple-field access is replaced by into_bytes,
try_from(&[u8]) / try_from(Vec<u8>) are replaced by
from_bytes(&[u8]), the blanket From<&IotaPublicKey> impl is replaced
by the address_from_iota_pub_key free function, and Default is no
longer derived (use IotaAddress::ZERO).

#11331: Some methods have been removed from ObjectID due to crate externalization (iota-rust-sdk::ObjectId is replacing iota-types::ObjectID).

#11338: The Digest type and the per-domain digest wrappers
(TransactionDigest, CheckpointDigest, ObjectDigest, etc.) are now
re-exports/aliases of iota_sdk_types::Digest rather than locally defined
newtypes. Surface changes: genesis_marker() is replaced by the
GENESIS_MARKER associated constant; base58_encode() is replaced by
to_base58(); try_from(Vec<u8>) / try_from(&[u8]) are replaced by
from_bytes(...); next_lexicographical(&self) -> Self now wraps at
all-FF (use next_lexicographical_opt for the previous
Option-returning behavior); the ObjectDigest tombstone constants are
renamed (OBJECT_DIGEST_DELETEDOBJECT_DELETED,
OBJECT_DIGEST_WRAPPEDOBJECT_WRAPPED,
OBJECT_DIGEST_CANCELLEDOBJECT_CANCELLED); the matching predicates
are renamed (is_deletedis_object_deleted,
is_wrappedis_object_wrapped); the Debug representation is
unified as Digest("<base58>").

#11337: iota-types::gas::GasCostSummary is now a re-export of iota_sdk_types::gas::GasCostSummary. The new_from_txn_effects associated function has been removed; its single caller now uses a free function colocated in iota-core::checkpoints. GasCostSummary::sender_rebate was not ported over to the external SDK.

#11355: Identifier, StructTag and TypeTag exported from iota-types are now re-exports of iota_sdk_types::{Identifier, StructTag, TypeTag}. Their public API differs from the previous move-core-types types: struct fields are private and accessed via methods (address(), module(), name(), type_params()), constructors like StructTag::new_coin(...) / StructTag::new_balance(...) / StructTag::new_gas() replace the manual StructTag { … } literals and the per-type T::type_() helpers, and MoveObjectType::address() now returns IotaAddress while module() / name() return owned Identifier.

#11376: iota-types::event::Event is now a re-export of
iota_sdk_types::Event. The transaction_module field has been renamed
to module; the Event::new constructor and
Event::move_event_to_move_value associated function have been removed.
DisplayVersionUpdatedEvent::inner_type / try_from_event and the unused
DisplayCreatedEvent have been removed from iota-types::display.

#11380: ObjectRef (previously a tuple alias
(ObjectID, SequenceNumber, ObjectDigest) in iota-types) is now a
re-export of iota_sdk_types::ObjectReference. Code that destructured it
positionally or built it with tuple syntax must switch to the struct's
named fields (object_id, version, digest) and
ObjectReference::new(...) / ObjectReference::into_parts().

#11388: RandomnessStateUpdate and RandomnessRound are now defined
in iota-sdk-types and re-exported from iota-types. RandomnessRound is
no longer a tuple struct — use RandomnessRound::new(n) to construct and
round.value() to access the inner u64 instead of RandomnessRound(n) /
round.0.

#11390: iota_types::object::Owner is now a re-export of
iota_sdk_types::Owner. Variant names and shapes changed
(AddressOwner/ObjectOwner/Shared { .. }
Address/Object/Shared(..)), helper methods were renamed
(is_address_ownedis_address, is_child_objectis_object,
get_owner_addressaddress_or_object), and the enum is now
#[non_exhaustive].

#11393: iota_types::transaction::Argument is now a re-export of
iota_sdk_types::Argument. The GasCoin variant has been renamed to Gas
to match the SDK definition.

#11395: iota_types::execution_status::{ExecutionStatus, ExecutionFailureStatus, MoveLocation, CommandArgumentError, PackageUpgradeError, TypeArgumentError} are now re-exports of their
iota-sdk-types counterparts. Most call sites are unaffected, but
consumers relying on the previous tuple-variant layouts (MoveAbort(_, _),
MovePrimitiveRuntimeError(MoveLocationOpt)), the CongestedObjects
newtype, the is_ok/is_err helpers, or the previous field names on
these enums will need to update accordingly. CommandIndex is now u64
instead of usize.

#11408: MovePackage, TypeOrigin and UpgradeInfo are now defined
in iota-sdk-types and re-exported from iota-types. Direct field access
on MovePackage (module_map, type_origin_table, linkage_table) is
replaced by the SDK shape (modules keyed by Identifier, identifier
fields on TypeOrigin). Constructors and helpers that depend on
CompiledModule / ProtocolConfig (new_initial, new_upgraded,
new_system, from_module_iter_with_type_origin_table,
original_package_id, deserialize_module, normalize) now live on the
MovePackageExt trait in iota-types.

#11409: Input gains constants (IOTA_SYSTEM_MUTABLE,
CLOCK_IMMUTABLE, CLOCK_MUTABLE, AUTHENTICATOR_STATE_MUTABLE),
a pure() constructor and *_opt accessors. Input::Shared now wraps
the new SharedObjectReference struct, and Input::Pure is a tuple
variant.

#11410: EndOfEpochTransactionKind gains new_change_epoch*
constructors, a `shared_input_ob...

Read more

[Testnet] v1.23.2-rc

13 May 07:14
64ee7d2

Choose a tag to compare

[Testnet] v1.23.2-rc Pre-release
Pre-release

Protocol

This release introduces protocol version 26

#11443: Add iota::protocol_config::is_feature_enabled() to allow Move code to query protocol feature flags at runtime.

Nodes (Validators and Full nodes)

#11331: Debug format of ObjectId was changed from 0x... to ObjectId("0x...")

#11450: Added periodic checkpoint progress status message and reduced log spam

#11463: Removed the epoch-db-pruning-period-secs node config parameter. Pruning is now automatically triggered during every epoch transition. This fixes a potential memory leak and ensures consistent pruning behavior during node synchronization.

#11451: Hardened state sync peer tracking:

  • added a handshake protocol to eliminate race conditions during peer registration
  • fixed stale peer handling
  • added periodic cleanup to prevent memory growth during long syncs

Indexer

#11312: JSON-RPC supports fetching objects before a requested version from the fallback KV storage when the indexer database does not contain the requested version due to pruning.

⚠️ The next release v1.24 will mark the removal of the old IOTA Indexer CLI which was deprecated in v1.3.1. Last call to refactor dependent scripts accordingly.

JSON-RPC

#10508: Remove all schemars / JsonSchema dependencies from iota-types (the core domain crate) and re-implement JSON schema generation exclusively within iota-json-rpc-types

#11326: Sequence numbers are now displayed in decimal format in error messages

#11331: Debug format of ObjectId was changed from 0x... to ObjectId("0x...")

#11395: IotaExecutionStatus::Failure error strings are produced
from the SDK's ExecutionError variants. Wording is the same for existing
cases, but field names quoted in the message have changed in line with the
variant/field renames listed above (e.g. arg_idxargument).

#11397: Fixed "Could not find the referenced object" errors in balance/object changes for concurrent shared-object transactions.

GraphQL

#11439: Optimize Mutation.executeTransactionBlock.

CLI

#11390: Owner is now displayed using the SDK's Display impl
(Address(<addr>), Object(<id>), Shared(<v>), Immutable) instead of
the previous Account Address ( <addr> ) / Object ID: ( <id> ) /
Shared( <v> ) formatting.

#11393: The Argument::GasCoin PTB argument now displays as Gas instead
of GasCoin in CLI output and PTB snapshots.

Rust SDK

#11326: Some methods have been removed from SequenceNumber due to
crate externalization (iota-sdk-types::Version is replacing
iota-types::SequenceNumber). Constructors and arithmetic helpers
(next, increment, decrement, lamport_increment,
new_congested_with_suggested_gas_price) are now fallible on the SDK type.

#11330: Some methods have been removed from IotaAddress due to
crate externalization (iota-sdk-types::Address is replacing
iota-types::IotaAddress). Notably, random_for_testing_only is renamed
to random, to_inner / tuple-field access is replaced by into_bytes,
try_from(&[u8]) / try_from(Vec<u8>) are replaced by
from_bytes(&[u8]), the blanket From<&IotaPublicKey> impl is replaced
by the address_from_iota_pub_key free function, and Default is no
longer derived (use IotaAddress::ZERO).

#11331: Some methods have been removed from ObjectID due to crate externalization (iota-rust-sdk::ObjectId is replacing iota-types::ObjectID).

#11338: The Digest type and the per-domain digest wrappers
(TransactionDigest, CheckpointDigest, ObjectDigest, etc.) are now
re-exports/aliases of iota_sdk_types::Digest rather than locally defined
newtypes. Surface changes: genesis_marker() is replaced by the
GENESIS_MARKER associated constant; base58_encode() is replaced by
to_base58(); try_from(Vec<u8>) / try_from(&[u8]) are replaced by
from_bytes(...); next_lexicographical(&self) -> Self now wraps at
all-FF (use next_lexicographical_opt for the previous
Option-returning behavior); the ObjectDigest tombstone constants are
renamed (OBJECT_DIGEST_DELETEDOBJECT_DELETED,
OBJECT_DIGEST_WRAPPEDOBJECT_WRAPPED,
OBJECT_DIGEST_CANCELLEDOBJECT_CANCELLED); the matching predicates
are renamed (is_deletedis_object_deleted,
is_wrappedis_object_wrapped); the Debug representation is
unified as Digest("<base58>").

#11337: iota-types::gas::GasCostSummary is now a re-export of iota_sdk_types::gas::GasCostSummary. The new_from_txn_effects associated function has been removed; its single caller now uses a free function colocated in iota-core::checkpoints. GasCostSummary::sender_rebate was not ported over to the external SDK.

#11355: Identifier, StructTag and TypeTag exported from iota-types are now re-exports of iota_sdk_types::{Identifier, StructTag, TypeTag}. Their public API differs from the previous move-core-types types: struct fields are private and accessed via methods (address(), module(), name(), type_params()), constructors like StructTag::new_coin(...) / StructTag::new_balance(...) / StructTag::new_gas() replace the manual StructTag { … } literals and the per-type T::type_() helpers, and MoveObjectType::address() now returns IotaAddress while module() / name() return owned Identifier.

#11376: iota-types::event::Event is now a re-export of
iota_sdk_types::Event. The transaction_module field has been renamed
to module; the Event::new constructor and
Event::move_event_to_move_value associated function have been removed.
DisplayVersionUpdatedEvent::inner_type / try_from_event and the unused
DisplayCreatedEvent have been removed from iota-types::display.

#11380: ObjectRef (previously a tuple alias
(ObjectID, SequenceNumber, ObjectDigest) in iota-types) is now a
re-export of iota_sdk_types::ObjectReference. Code that destructured it
positionally or built it with tuple syntax must switch to the struct's
named fields (object_id, version, digest) and
ObjectReference::new(...) / ObjectReference::into_parts().

#11388: RandomnessStateUpdate and RandomnessRound are now defined
in iota-sdk-types and re-exported from iota-types. RandomnessRound is
no longer a tuple struct — use RandomnessRound::new(n) to construct and
round.value() to access the inner u64 instead of RandomnessRound(n) /
round.0.

#11390: iota_types::object::Owner is now a re-export of
iota_sdk_types::Owner. Variant names and shapes changed
(AddressOwner/ObjectOwner/Shared { .. }
Address/Object/Shared(..)), helper methods were renamed
(is_address_ownedis_address, is_child_objectis_object,
get_owner_addressaddress_or_object), and the enum is now
#[non_exhaustive].

#11393: iota_types::transaction::Argument is now a re-export of
iota_sdk_types::Argument. The GasCoin variant has been renamed to Gas
to match the SDK definition.

#11395: iota_types::execution_status::{ExecutionStatus, ExecutionFailureStatus, MoveLocation, CommandArgumentError, PackageUpgradeError, TypeArgumentError} are now re-exports of their
iota-sdk-types counterparts. Most call sites are unaffected, but
consumers relying on the previous tuple-variant layouts (MoveAbort(_, _),
MovePrimitiveRuntimeError(MoveLocationOpt)), the CongestedObjects
newtype, the is_ok/is_err helpers, or the previous field names on
these enums will need to update accordingly. CommandIndex is now u64
instead of usize.

#11408: MovePackage, TypeOrigin and UpgradeInfo are now defined
in iota-sdk-types and re-exported from iota-types. Direct field access
on MovePackage (module_map, type_origin_table, linkage_table) is
replaced by the SDK shape (modules keyed by Identifier, identifier
fields on TypeOrigin). Constructors and helpers that depend on
CompiledModule / ProtocolConfig (new_initial, new_upgraded,
new_system, from_module_iter_with_type_origin_table,
original_package_id, deserialize_module, normalize) now live on the
MovePackageExt trait in iota-types.

#11409: Input gains constants (IOTA_SYSTEM_MUTABLE,
CLOCK_IMMUTABLE, CLOCK_MUTABLE, AUTHENTICATOR_STATE_MUTABLE),
a pure() constructor and *_opt accessors. Input::Shared now wraps
the new SharedObjectReference struct, and Input::Pure is a tuple
variant.

#11410: EndOfEpochTransactionKind gains new_change_epoch*
constructors, a `shared_input_ob...

Read more

[Devnet] v1.23.1-beta

11 May 09:12
6bddc59

Choose a tag to compare

[Devnet] v1.23.1-beta Pre-release
Pre-release

Protocol

This release introduces protocol version 26

#11443: Add iota::protocol_config::is_feature_enabled() to allow Move code to query protocol feature flags at runtime.

Nodes (Validators and Full nodes)

#11331: Debug format of ObjectId was changed from 0x... to ObjectId("0x...")

#11450: Added periodic checkpoint progress status message and reduced log spam

#11463: Removed the epoch-db-pruning-period-secs node config parameter. Pruning is now automatically triggered during every epoch transition. This fixes a potential memory leak and ensures consistent pruning behavior during node synchronization.

#11451: Hardened state sync peer tracking:

  • added a handshake protocol to eliminate race conditions during peer registration
  • fixed stale peer handling
  • added periodic cleanup to prevent memory growth during long syncs

Indexer

#11312: JSON-RPC supports fetching objects before a requested version from the fallback KV storage when the indexer database does not contain the requested version due to pruning.

⚠️ The next release v1.24 will mark the removal of the old IOTA Indexer CLI which was deprecated in v1.3.1. Last call to refactor dependent scripts accordingly.

JSON-RPC

#10508: Remove all schemars / JsonSchema dependencies from iota-types (the core domain crate) and re-implement JSON schema generation exclusively within iota-json-rpc-types

#11326: Sequence numbers are now displayed in decimal format in error messages

#11331: Debug format of ObjectId was changed from 0x... to ObjectId("0x...")

#11395: IotaExecutionStatus::Failure error strings are produced
from the SDK's ExecutionError variants. Wording is the same for existing
cases, but field names quoted in the message have changed in line with the
variant/field renames listed above (e.g. arg_idxargument).

#11397: Fixed "Could not find the referenced object" errors in balance/object changes for concurrent shared-object transactions.

GraphQL

#11439: Optimize Mutation.executeTransactionBlock.

CLI

#11390: Owner is now displayed using the SDK's Display impl
(Address(<addr>), Object(<id>), Shared(<v>), Immutable) instead of
the previous Account Address ( <addr> ) / Object ID: ( <id> ) /
Shared( <v> ) formatting.

#11393: The Argument::GasCoin PTB argument now displays as Gas instead
of GasCoin in CLI output and PTB snapshots.

Rust SDK

#11326: Some methods have been removed from SequenceNumber due to
crate externalization (iota-sdk-types::Version is replacing
iota-types::SequenceNumber). Constructors and arithmetic helpers
(next, increment, decrement, lamport_increment,
new_congested_with_suggested_gas_price) are now fallible on the SDK type.

#11330: Some methods have been removed from IotaAddress due to
crate externalization (iota-sdk-types::Address is replacing
iota-types::IotaAddress). Notably, random_for_testing_only is renamed
to random, to_inner / tuple-field access is replaced by into_bytes,
try_from(&[u8]) / try_from(Vec<u8>) are replaced by
from_bytes(&[u8]), the blanket From<&IotaPublicKey> impl is replaced
by the address_from_iota_pub_key free function, and Default is no
longer derived (use IotaAddress::ZERO).

#11331: Some methods have been removed from ObjectID due to crate externalization (iota-rust-sdk::ObjectId is replacing iota-types::ObjectID).

#11338: The Digest type and the per-domain digest wrappers
(TransactionDigest, CheckpointDigest, ObjectDigest, etc.) are now
re-exports/aliases of iota_sdk_types::Digest rather than locally defined
newtypes. Surface changes: genesis_marker() is replaced by the
GENESIS_MARKER associated constant; base58_encode() is replaced by
to_base58(); try_from(Vec<u8>) / try_from(&[u8]) are replaced by
from_bytes(...); next_lexicographical(&self) -> Self now wraps at
all-FF (use next_lexicographical_opt for the previous
Option-returning behavior); the ObjectDigest tombstone constants are
renamed (OBJECT_DIGEST_DELETEDOBJECT_DELETED,
OBJECT_DIGEST_WRAPPEDOBJECT_WRAPPED,
OBJECT_DIGEST_CANCELLEDOBJECT_CANCELLED); the matching predicates
are renamed (is_deletedis_object_deleted,
is_wrappedis_object_wrapped); the Debug representation is
unified as Digest("<base58>").

#11337: iota-types::gas::GasCostSummary is now a re-export of iota_sdk_types::gas::GasCostSummary. The new_from_txn_effects associated function has been removed; its single caller now uses a free function colocated in iota-core::checkpoints. GasCostSummary::sender_rebate was not ported over to the external SDK.

#11355: Identifier, StructTag and TypeTag exported from iota-types are now re-exports of iota_sdk_types::{Identifier, StructTag, TypeTag}. Their public API differs from the previous move-core-types types: struct fields are private and accessed via methods (address(), module(), name(), type_params()), constructors like StructTag::new_coin(...) / StructTag::new_balance(...) / StructTag::new_gas() replace the manual StructTag { … } literals and the per-type T::type_() helpers, and MoveObjectType::address() now returns IotaAddress while module() / name() return owned Identifier.

#11376: iota-types::event::Event is now a re-export of
iota_sdk_types::Event. The transaction_module field has been renamed
to module; the Event::new constructor and
Event::move_event_to_move_value associated function have been removed.
DisplayVersionUpdatedEvent::inner_type / try_from_event and the unused
DisplayCreatedEvent have been removed from iota-types::display.

#11380: ObjectRef (previously a tuple alias
(ObjectID, SequenceNumber, ObjectDigest) in iota-types) is now a
re-export of iota_sdk_types::ObjectReference. Code that destructured it
positionally or built it with tuple syntax must switch to the struct's
named fields (object_id, version, digest) and
ObjectReference::new(...) / ObjectReference::into_parts().

#11388: RandomnessStateUpdate and RandomnessRound are now defined
in iota-sdk-types and re-exported from iota-types. RandomnessRound is
no longer a tuple struct — use RandomnessRound::new(n) to construct and
round.value() to access the inner u64 instead of RandomnessRound(n) /
round.0.

#11390: iota_types::object::Owner is now a re-export of
iota_sdk_types::Owner. Variant names and shapes changed
(AddressOwner/ObjectOwner/Shared { .. }
Address/Object/Shared(..)), helper methods were renamed
(is_address_ownedis_address, is_child_objectis_object,
get_owner_addressaddress_or_object), and the enum is now
#[non_exhaustive].

#11393: iota_types::transaction::Argument is now a re-export of
iota_sdk_types::Argument. The GasCoin variant has been renamed to Gas
to match the SDK definition.

#11395: iota_types::execution_status::{ExecutionStatus, ExecutionFailureStatus, MoveLocation, CommandArgumentError, PackageUpgradeError, TypeArgumentError} are now re-exports of their
iota-sdk-types counterparts. Most call sites are unaffected, but
consumers relying on the previous tuple-variant layouts (MoveAbort(_, _),
MovePrimitiveRuntimeError(MoveLocationOpt)), the CongestedObjects
newtype, the is_ok/is_err helpers, or the previous field names on
these enums will need to update accordingly. CommandIndex is now u64
instead of usize.

#11408: MovePackage, TypeOrigin and UpgradeInfo are now defined
in iota-sdk-types and re-exported from iota-types. Direct field access
on MovePackage (module_map, type_origin_table, linkage_table) is
replaced by the SDK shape (modules keyed by Identifier, identifier
fields on TypeOrigin). Constructors and helpers that depend on
CompiledModule / ProtocolConfig (new_initial, new_upgraded,
new_system, from_module_iter_with_type_origin_table,
original_package_id, deserialize_module, normalize) now live on the
MovePackageExt trait in iota-types.

#11409: Input gains constants (IOTA_SYSTEM_MUTABLE,
CLOCK_IMMUTABLE, CLOCK_MUTABLE, AUTHENTICATOR_STATE_MUTABLE),
a pure() constructor and *_opt accessors. Input::Shared now wraps
the new SharedObjectReference struct, and Input::Pure is a tuple
variant.

#11410: EndOfEpochTransactionKind gains new_change_epoch*
constructors, a `shared_input_ob...

Read more