Protocol
Sui Protocol Version in this release: 138
#27049: gas model changes, implementation related no user impact
#27975: Adds new memory invariant check for reference/value usage in PTBs.
#28034: Enable check_object_funds_withdraw_in_execution on testnet in protocol version 138.
#27943: On devnet and testnet at protocol 138, transaction effects no longer report transaction dependencies. The effects encoding retains an empty dependency vector; object versions and per-object previous-transaction metadata are unchanged.
#28131: In protocol version 138, colliding deferred-transaction keys in the consensus handler merge their entries instead of overwriting, so re-deferred transactions can no longer displace previously deferred ones.
Nodes (Validators and Full nodes)
#27936: Adds optional execution-time-observer-config.object-utilization-metric-tracked-ids, a map from object ID to name. Utilization of listed objects is reported in the new epoch_execution_time_observer_tracked_object_utilization metric with object_id and name labels. No action required; default behavior is unchanged.
#28037: Fullnodes no longer restrict simulated transactions to their preferred proposers by default. Operators who want the previous behavior must set enable-simulate-allowed-proposers: true in the node config.
#28076: Validators now pull transactions from a consensus-side pool at block proposal time instead of the admission queue pushing them. To keep the previous behavior, set consensus-transaction-pool.enabled: false in the node config; authority-overload-config.admission-queue-enabled only applies when the pool is disabled.
gRPC
#28022: Rosetta now fetches latest checkpoint data in one request, preventing transient Checkpoint N not found failures when fullnodes behind a load balancer have different heights. No user action is required.
GraphQL
#27721: Adds derivedObject and multiGetDerivedObjects to IAddressable.
#27743: Adds Query.multiGetDynamicFields for fetching multiple dynamic fields across different parent objects.
#27758: Adds the nullable Balance.coinMetadata field.
#28010: Transaction.effects.checkpoint now resolves for transactions delivered over a subscription; it was previously always null.
CLI
#27351: sui client ptb now accepts withdrawal(amount) and withdrawal<T>(amount) inputs for address balance withdrawals.
#28048: In sui move test, test_scenario now tracks address and object funds across transactions. balance::withdraw_funds_from_object succeeds only up to the funds actually sent to the object, and otherwise aborts with sui::funds_accumulator error 5 (previously every object withdrawal succeeded in unit tests). Two new test-only functions: test_scenario::withdraw_balance_from_address creates a withdrawal from an address, reserved against its settled balance, and test_scenario::settled_balance reads an address's or object's settled balance.