docs/content/references/release-notes.mdx
✅ Mainnet | Source: GitHub Release
115#25795: Adds a new protocol version 115 to normalize representation of some structures within the VM.
#25556: Enables the address aliases feature on mainnet.
#25585: Add a new protocol version to support some refactoring in execution.
#25364: test only changes, no user impact
#25261: Error field is no longer available in simulateResult and ExecutionResult. They will be propagated in GraphQL errors
#25074: sui move build --dump (the short version of --dump-bytecode-as-base64) now correctly outputs bytecode with the 0 address.
#25587: Fixed a bug to re-enable pretty printing of sui client ptb output.
#25434: Fixes an issue where the ingestion client allowed configuring multiple sources but all but one source was ignored, based on an implicit precedence order. Now exactly one source must be supplied.
#25593: Reducing ingestion concurrency and channel size. Testing showed this eliminated OOM issues when processing large checkpoints without bottlenecking a 16 cpu machine.
✅ Mainnet | Source: GitHub Release
113#25588: Bump protocol version
#25361: in version 111 error from dev inspect, dry run and execution are more consistent and the same for transaction data checks
#25321: Add Ristretto255 group operations to sui-framework on devnet.
#25257: Added multi-provider Ethereum RPC support to the bridge node.
Operators can now configure multiple Ethereum RPC endpoints with quorum-based consensus for improved redundancy and fault tolerance.
New optional YAML config fields (in sui bridge config):
eth-rpc-urls (list of RPC URLs),eth-rpc-quorum (quorum size, defaults to 1)eth-health-check-interval-secs (health check interval, defaults to 300s).The existing eth-rpc-url field continues to work for backward compatibility. When a single URL is configured, the multi-provider layer operates as a zero-overhead passthrough with no quorum, health-check, or locking machinery.
#25191: Read the new BigTable schema and per-pipeline watermarks.
#25109: Partial error will be properly supported in GraphQL. Invalid fields will have error messages and valid fields will still be displayed normally
#25110: Partial error will be properly supported in GraphQL. Invalid fields will have error messages and valid fields will still be displayed normally
#25186: chainIdentifier query now returns full Base58-encoded 32 byte digest
#24788: add bloom filter pipelines for scanning APIs
#25191: Read the new BigTable schema and per-pipeline watermarks.
#24469: Sui CLI now supports auto-complete via clap-complete.
sui completion --generate bash
sui completion --generate elvish
sui completion --generate fish
sui completion --generate powershell
sui completion --generate zsh
Put the output in a file in the right directory for your shell (e.g., for fish in ~/.config/fish/completions/sui.fish) and restart your shell. Use double TAB to trigger the auto completion menu.
#25226: sui move test now uses Sui's gas meter and limits.
#25405: Fix an issue where the CLI would fail to infer the type of a primitive argument to a Move call if that argument was accessed by reference or by mutable reference.
#25082: You can now do sui move build --dump-bytecode-as-base64 --pubfile-path <file> to use ephemeral addresses for dumped bytecode.
The --dump flag can be used as a shorthand for --dump-bytecode-as-base64.
The full flag for -e has been changed to --build-env (the shorthand -e remains the same)
Fixed a bug when --pubfile-path is used with -p
#25592: Fixed a bug to re-enable pretty printing of sui client ptb output.
#25324: Disable object_store crate internal retries to make errors immediately visible to framework.
#25325: Fix memory leak in ingestion stream.
#25334: Enable ingestion backpressure for concurrent pipelines
✅ Mainnet | Source: GitHub Release
111#25366: 111 makes more consistent check across execution mode and transaction data
#24957: Enable custom nonzero pcrs parsing for mainnet in version 109.
#25392: Fixes a bug that was introduced in #24797 that could lead to the balance index being incorrect if a fullnode restored indexes with the 1.64 release.
#24963: Balance.totalBalance now returns the sum of balances from owned coins and from the accumulator object. The individual coin or address balances can be retrieved through Balance.coinBalance and Balance.addressBalance respectively. For the previous behavior, select the Balance.coinBalance field for coin balances only.
#25108: Partial error will be properly supported in GraphQL. Invalid fields will have error messages and valid fields will still be displayed normally
#25016: The --sender flag is now correctly respected in sui client publish and sui client upgrade commands when used with --serialize-unsigned-transaction. Previously, the sender was incorrectly inferred from gas objects, ignoring the --sender flag.
#24066: Ingest zstd-compressed proto files rather than BCS files
#24991: remote_client::RemoteIngestionClient becomes store_client::StoreIngestionClient and supports any valid implementation of object_store::ObjectStore as a checkpoint source.
✅ Mainnet | Source: GitHub Release
109#25147: fix(sui-http): use explicit rustls::CryptoProvider
✅ Mainnet | Source: GitHub Release
109#24802:
TxContext arguments can now appear in any position and still be callable in the PTB layer.
#24835: Signature check for entry functions is disabled. Move compiler changes will follow
#24895: Enables address alias feature on testnet.
#24879: poseidon_bn254 is enabled on all networks.
#24794:
Return an error when balance_changes is requested but the transactions have not been indexed yet.
#24782:
Introduce Query.node(id: ID!): Node, part of the GraphQL Global Identification Specification, to the schema, to support Relay's @refetchable annotation.
#24781:
Epoch.totalTransactions now returns a value for the latest epoch as of the checkpoint being viewed, rather than null.
#24750:
Add effectsJson on TransactionEffects and transactionJson on Transaction, that supports returning effects and transactions as JSON blob
#24865: GraphQL requests are now subject to a single "rich query" limit, which enforces a budget on the number of dedicated requests to the database can be made by a single request.
#24836: Add balanceChangeEffectJson on TransactionEffects, that supports returning balance changes as JSON blob
#24876: Added BalanceWithdraw type to TransactionInput union
#24770:
Introduces MoveValue.extract for extracting a sub-slice from a MoveValue using a Display v2 expression.
#24771:
Introduce MoveValue.asAddress and IAddressable.addressAt for coercing a MoveValue to a GraphQL Address and viewing an address at a difference checkpoint.
#24772:
Adds DynamicFieldName.literal for providing a dynamic field name as a Display v2 literal.
#24774:
Add MoveValue.format to evaluate a single format string against a Move value.
#24775:
PTB Inputs are represented as MoveValue-s, if their types can be inferred.
#24776:
Remove fields related to the system state from Epoch, in favour of exposing the whole system state as Epoch.systemState: MoveValue. Similarly replace most fields on ValidatorSet with ValidatorSet.contents: MoveValue, and Validator with Validator.contents: MoveValue.
#24779:
Replace Query.suinsName(name: ...) with Query.address(name: ...), replace IAddressable.defaultSuinsName with IAddressable.defaultNameRecord.target, and add Query.nameRecord for fetching the SuiNS NameRecord for a given SuiNS name.
#25025:
Balance.totalBalance now returns the sum of balances from owned coins and from the accumulator object. The individual coin or address balances can be retrieved through Balance.coinBalance and Balance.addressBalance respectively. For the previous behavior, select the Balance.coinBalance field for coin balances only.
#24822:
Fixed the issue for sui client publish | upgrade around using various flags (e.g., dry-run).
#24844:
Added --no-tree-shaking flag that can only be used with --dump-bytecode-as-base64. This will ensure that all dependencies will be kept in the list of dependencies in the json output, regardless if they're used or not used in the source code. In contrast, by default, the CLI will remove any unused dependencies from the dependency list on publication/upgrade and when --no-tree-shaking flag is false.
#24925: Adding optional jitter to watermark update interval.
✅ Mainnet | Source: GitHub Release
This release contains a performance fix and does not require a protocol version bump
107#24974: Restore the environment variable to enable write sync
✅ Mainnet | Source: GitHub Release
107#24856: [consensus] improve direct finalization #24943: Fix a consensus issue where validators do not agree on transactions that need to be rejected.
#24742: Disable validator RPC handlers for signing transactions and submitting transactions with aggregated validator signatures. Transaction submission using Quorum Driver or similar logic will no longer work. Transaction Driver and its related validator RPC handlers are the only way to submit transaction to Sui now.
#24820: Return an error when balance_changes is requested but the transactions have not been indexed yet.
#24595: Partial error will be properly supported in GraphQL. Invalid fields will have error messages and valid fields will still be displayed normally
#24679: Add support for checks_enabled and do_gas_selection argument for query.simulateTransaction
#24681: Partial error will be properly supported in GraphQL. Invalid fields will have error messages and valid fields will still be displayed normally
#24911: Add effectsJson, balanceChangesJson on TransactionEffects and transactionJson on Transaction, that supports returning effects and transactions as JSON blob
#24508: Removes --verify-compatibility and adds --skip-verify-compatibility defaulting to checking locally for upgrade compatibility errors.
#24896: Several changes to the new package management system:
--no-tree-shaking flag allows offline dump-bytecode-as-base64move-analyzertest-publish command: the Pub.localnet.toml
files can now be shared between dependencies more easily.
test-upgrade commandtest-publish --publish-unpublished-deps command for
push-button local deployment of a package and its dependencies
#24503: The indexer, ingestion service, and metrics service all now return a Service instead of a JoinHandle<()> when run. Use Service::main to wait for the service to exit cleanly or with an error, or respond to a termination signal with a graceful shutdown. Service also exposes wait_for_shutdown, join, and shutdown functions to customise various aspects of the shutdown process.
#24523: Fix pruning for concurrent pipelines when indexer is initialized with --first-checkpoint.
✅ Mainnet | Source: GitHub Release
<details> <summary>Sui v1.62 Gas Schedule Updates (and what to expect)</summary>Sui v1.62 includes targeted gas schedule and metering fixes to more accurately account for the true execution cost and introduce a few new gas changes to reduce over-charging.
Dynamic field changes (largest behavioral impact)
Dynamic field operations now charge differently depending on cache status:
Additional execution-level adjustments
The following execution-level adjustments are being introduced:
MoveLoc is cheaper: We previously (incorrectly) charged proportionally to value size, even though no value is created. We now charge a constant amount.ReadRef is slightly more expensive: This creates value copies, which we now account for.We backtested several million transactions when examining these gas changes. Across a few million sampled transactions:
Looking at the distribution among affected transactions:
For most workloads, you will notice no change (only 5.7% are affected from several million transactions). If you do, it is more likely to be a cost decrease.
Your transactions may be more expensive if they do some or all of the following:
This is because first-time loads of uncached dynamic fields are now more expensive.
Your transactions should get cheaper if they do any of the following:
These now benefit from the cache-aware and “created in-transaction” discounts.
Most other instruction and stack-metering changes are modest, paving a path toward optimization in compilation. Over time, compiler work to prefer moving locals over copies wherever possible should allow the compiler to be able to take advantage of the reduced cost for MoveLoc that is introduced in these changes.
In the next release (v1.62), there will be a new set of verification rules for arguments to non-public (either private or public(package)) entry functions. These rules will fully replace the existing rules, and in most cases will allow for more expressivity! This means that you can do more with entry functions than previously possible.
While we have received the feedback that most people do not understand the existing rules around entry functions, this post will not explain them since they are going away. Instead we'll focus on the new entry function rules going forward.
For a brief overview, arguments to a non-public entry function cannot be entangled with a hot potato.
For example with the following code
module ex::m;
public struct HotPotato()
public fun hot<T>(x: &mut Coin<T>): HotPotato { ... }
entry fun spend<T>(x: &mut Coin<T>) { ... }
public fun cool(h: HotPotato) { ... }
With an example PTB, this is invalid since the input coin to spend has an entangled hot potato when it is used with the spend function
// Invalid PTB
0: ex::m::hot(Input(0));
1: ex::m::spend(Input(0)); // INVALID, Input(0) still hot via Result(0)
2: ex::m::cool(Result(0));
However, it is valid if the hot potato is destroyed before spend is called.
// Valid PTB
0: ex::m::hot(Input(0));
1: ex::m::cool(Result(0));
2: ex::m::spend(Input(0)); // Valid! Input(0) is not hot
Below we will dig deeper into why these rules exist and how the rules are defined.
You might wonder why have any rules for the usage of values with entry functions? The original motivation was to ensure that package developers had a way of ensuring a certain sense of “atomicity” for the arguments to their entry functions. Meaning a way of ensuring that the arguments would behave the same if the specific entry function was the only command in the PTB. A canonical example for this is flash loans—a developer might want to ensure that a given Coin is not from a flash loan and is ostensibly “owned” by the sender of the transaction.
In Move, flash loans (and similar paradigms) use “hot potato” patterns to force behavior. For example
module flash::loan;
use sui::balance::Balance;
use sui::sui::SUI;
public struct Bank has key {
id: UID,
holdings: Balance<SUI>,
}
// This is a hot potato because it does not have `store` and does not have `drop`
public struct Loan {
amount: u64,
}
public fun issue(bank: &mut Bank, amount: u64): (Balance<SUI>, Loan) {
assert!(bank.holdings.value() >= amount);
let loaned = bank.holdings.split(amount);
(loaned, Loan { amount })
}
public fun repay(bank: &mut Bank, loan: Loan, repayment: Balance<SUI>) {
let Loan { amount } = loan;
assert!(repayment.value() == amount);
bank.holdings.join(repayment);
}
In this example, when issue is called, a Loan hot potato is created. In the PTB if issue is called, the transaction will not succeed unless the created Loan hot potato is destroyed by calling repay.
Our goal with non-public entry functions is to ensure that no argument is involved in such a flash loan (or similar hot potato) scenario. In other words, the arguments to a non-public entry function cannot be entangled in such a way to forces behavior in the PTB after the entry function is called. We will track this with an algorithm that tries to count how many hot potato values are active and what values they can influence.
Some brief terminology before looking at the rules and their defining algorithm.
Argument. These can be Inputs, Results, NestedResults, or the GasCoin (already smashed).Result and NestedResult.& or &mut) or by-value (either copied or moved).store nor drop.copykeykey and copy since sui::object::UID does not have copyentry function, the count of the arguments’ merged clique must be zero at this point.
entry function can take hot values! They must just be the last hot values in their clique.Walking through the example from the overview more carefully with the algorithm. In these examples, we will walk through the algorithm, showing each clique and its count between each command.
// Invalid PTB
// Input 0: Coin<SUI>
// cliques: { Input(0) } => 0
0: ex::m::hot(Input(0));
// cliques: { Input(0), Result(0) } = 1
1: ex::m::spend(Input(0)); // INVALID, Input(0)'s clique has a count > 0
2: ex::m::cool(Result(0));
// Valid PTB
// Input 0: Coin<SUI>
// cliques: { Input(0) } => 0
0: ex::m::hot(Input(0));
// cliques: { Input(0), Result(0) } = 1
1: ex::m::cool(Result(0));
// cliques: { Input(0) } => 0
2: ex::m::spend(Input(0)); // Valid! Input(0)'s clique has a count of 0
Using the flash::loan module from above, we can construct more involved examples
// Invalid PTB
// Input 0: flash::loan::Bank
// Input 1: u64
// cliques: { Input(0) } => 0, { Input(1) } => 0,
0: flash::loan::issue(Input(0), Input(1))
// cliques: { Input(0), NestedResult(0,0), NestedResult(0,1) } => 1,
1: sui::coin::from_balance(NestedResult(0,0));
// cliques: { Input(0), NestedResult(0,1), Result(1) } => 1,
2: ex::m::spend(Result(1)); // INVALID, Result(1)'s clique has count > 0
3: sui::coin::into_balance(Result(1));
4: flash::loan::repay(Result(3), NestedResult(0,1));
Even though the Coin created in command 1 was not directly involved in the flash loan in command 0, its a part of a clique with a hot value NestedResult(0,1). As such, it cannot be used in the private entry function ex::m::spend.
If the loan was repaid with flash::loan::repay before ex::m::spend was called, then this would be permitted (like we saw with the earlier example).
As mentioned above, a clique with a shared object by-value is always hot. In other words, a non-public entry function can take a shared object by-value, but it cannot take a value in a clique that previously interacted with a shared object by value.
Why? This rule is needed since shared objects cannot be wrapped—they either have to be re-shared or deleted. This means that a shared-object could be used to force behavior in a way similar to a hot potato. But unlike a hot potato, we cannot tell from signature of the function if it is used properly.
If this algorithm was “dynamic” rather than “static”, it could be more precise at the cost of clarity. That is, a static set of rules is typically easier to describe and follow as compared to a dynamic set of rules. However, party objects will fall under this restriction under more narrow cases than with shared objects. As such, we think that this restriction will be acceptable long term without having to sacrifice the clarity of the static system.
In a later version, we will remove the signature restrictions for entry functions. This means that any Move function can become entry!
104#24239: 104 - update CoinMetadata post updates in Coin in 103
#24420: Disable using Quorum Driver for transaction submission. Setting TRANSACTION_DRIVER env var is now a no-op.
#23737: This PR, in tandem with [#24192](#24192), unifies how indexers determine their ingestion starting point and introduce watermark-gated backfill tasks.
--skip-watermark is removed, and the previous ability to bypass
watermark safety checks for concurrent pipelines is no longer supported.--first-checkpoint no longer forces the indexer to start ingesting
from the configured checkpoint. The indexer now always determines its
starting ingestion point as the minimum next checkpoint across all
pipelines to resume processing from. From this release,
--first-checkpoint now only applies to pipelines that do not yet have
a committer watermark. These pipelines will resume processing from the
configured value. Pipelines with existing watermarks will always resume
processing from their own next checkpoint.--task and --reader-interval-ms, enable this mechanism.
These flags create a tasked indexer whose pipelines commit checkpoint
data as long as the checkpoint is not below the reader_lo watermark of
their corresponding main pipelines. The indexer controls how frequently
these tasked pipelines poll the main pipelines' watermarks
per --reader-interval-ms.Migration guidance:
--first-checkpoint only for initial ingestion of a
fresh pipeline, no further action is needed.--first-checkpoint and
optionally --skip-watermark to backfill existing tables, you can
achieve the same workflow by starting a new indexer instance with a
configured --task, --reader-interval-ms, and --first-checkpoint.--skip-watermark, --task cannot be used to run sequential
pipelines.#24319: Fixes a bug where the transaction payloads that were part of simulateTransaction calls were incorrectly classified as part of the query payload (and therefore subject to a lower payload size limit).
#23928: Removed events field from SimulationResult. Events are now only accessible via effects.events() to eliminate redundancy.
#23929: Returns null for simulated/executed transactions timestamp as they are not included in a checkpoint.
#24486: Validate types and fields passed into AvailableRange queries.
sui validator commands to use a shared
TxProcessingArgs
struct for transaction arguments, improving consistency with sui client. Updated serialize_unsigned_transaction help text to provide
clearer instructions for offline signing.✅ Mainnet | Source: GitHub Release
103#24343: framework changes to coin.move
#24244: Return "Not Found" for new checkpoints that haven't been fully stored yet instead of "Internal Error."
#24202: Fixes a bug related to paginating object versions for an object that has been deleted/wrapped at some point.
#24325: Fixes a bug where the transaction payloads that were part of simulateTransaction calls were incorrectly classified as part of the query payload (and therefore subject to a lower payload size limit).
✅ Mainnet | Source: GitHub Release
101#24073: Coin registry patch
#24010: Use Mysticeti 2.0 and TransactionDriver for transaction processing by default.
#24133: Adds the ability to talk to an existing, remote postgress database when running the indexer and/or GraphQL for a local network.
✅ Mainnet | Source: GitHub Release
100#24108: Simplify private generics check
#23851: Fix a bug where live object set queries would include historical data.
#23417: Adds AvailableRange API for querying the checkpoint ranges we have data available for types, fields, and filters.
✅ Mainnet | Source: GitHub Release
98#23866: Fix issue in bytecode verifier
#23766: Fix wrong iter bounds that cause missing results in get_transactions_by_move_function
#23689: Adds Validator.operationCap that displays address that the operation ability was delegated to if it exists.
#23697: Adds Validator.exchangeRatesTable that displays a mapping of epoch number to exchange rate. The exchange rate is used to determine the amount of SUI tokens that each past SUI staker can withdraw in the future.
✅ Mainnet | Source: GitHub Release
97#23858: Adds a new protocol version that fixes an issue in the bytecode verifier.
#23766: Fix wrong iter bounds that cause missing results in get_transactions_by_move_function
#23689: Adds Validator.operationCap that displays address that the operation ability was delegated to if it exists.
#23697: Adds Validator.exchangeRatesTable that displays a mapping of epoch number to exchange rate. The exchange rate is used to determine the amount of SUI tokens that each past SUI staker can withdraw in the future.
✅ Mainnet | Source: GitHub Release
96#23650: Mysticeti v2 (Mysticeti fastpath) support is enabled on mainnet.
#23492: Adds CheckpointArtifacts digest to the summary. Currently enabled in Devnet for testing.
#22874: Integrating GetCoinInfo with the new CoinRegistry system object.
#22903: Integrating coin metadata and total supply APIs with the CoinRegistry system object.
#23597: Adds support for Coin Registry to GraphQL's Query.coinMetadata API.
#23636: Fix a bug where queries would fail if they used a variable to populate a nullable parameter, and then did not supply the variable (which is a valid thing to do).
#23433: Fixed a bug where an upgrade command would terminate early if the CLI binary is not at the same protocol version or newer than the network.
#23533: Transaction replay now has its own command in Sui CLI: sui replay
✅ Mainnet | Source: GitHub Release
#23472: Fixed a bug where an upgrade command would terminate early if the CLI binary is not at the same protocol version or newer than the network.
✅ Mainnet | Source: GitHub Release
94#23220: Protocol bump to version 94
#23074: Delta to CheckpointSignatures sent to consensus, now including Digest as part of dedup key.
#23036: (linux, macos) Ensure that sui.keystore files are flagged with 0600 flags. This is a defense-in-depth measure to defend Sui wallets running on shared multi-user hosts.
✅ Mainnet | Source: GitHub Release
92#22675: Minor patch in Sui Framework.
#23041: Shared object deletion rules are now more granular and per-command, rather than per-transaction.
#22924: now supports transfer of party objects via client transfer command
✅ Mainnet | Source: GitHub Release
90#20957: updates to protocol version 89, standard library changes
#22798: Enable passkey and passkey inside multisig for mainnet in protocol version 89.
#22940: Shifts protocol version 89 to 90.
#22842: ObjectNotFound and DependencyPackageNotFound errors from transaction processing now get retried in QuorumDriver by default.
#22914: Fixes a bug around global value mutation tracking in generated traces for debugger
✅ Mainnet | Source: GitHub Release
89#22937: Adds a new protocol version to enable the latest checks.
✅ Mainnet | Source: GitHub Release
88#22580: Adds calculate_rewards function to Sui System
#22611: Improve error messages around type resolution.
#22572: support path-based remote-store options for fullnode state sync fallback
#22594: No noticeable impact to users
#22435: Implementing GetPackage, GetModule, GetFunction, and GetDatatype APIs
#22525: Implementing ListPackageVersions API for MovePackageService
#22560: Speeding up index initialization by accumulating batches of balance updates in memory.
#22619: Tune rocksdb for index initialization.
#22530: sui keytool export to show the alias field correctly.
#22528: sui move build --dump-bytecode-as-base64 is now working correctly due to a bug in the logic when a Move.lock file existed with the published address.
#22622: Updates to the transaction replay-transaction and replay-batch client subcommands to use the new transaction replay infrastructure.
#22644: Remove profile-transaction and replay-checkpoint commands from the sui client commands.
#22595: Adds support for custom user-defined headers in the SuiClientBuilder. Custom headers can be defined through the SuiClientBuilder::custom_headers function and should be added right before building.
✅ Mainnet | Source: GitHub Release
87#22244: Changes to using type tags in the object runtime. No user-visible impacts.
#22419: Adds an existing hardcoded bound to the protocol config for clarity.
#19439: Added epoch-stable sequence numbers for read-only per-epoch configs accessed in the transaction.
#22474: enables Party objects (and associated party_transfer functions) in testnet
#21877: TLS is now required to connect to the validator gRPC interface.
#22540: The default bucket for state sync archive fallback now uses a requester pays policy. Update the sui node's state-archive-read-config section according to the docs
#22241: Implementing GetBalance and ListBalances APIs for LiveDataService.
Co-authored-by: Brandon Williams <[email protected]>
#21877: TLS is now required to connect to the validator gRPC interface.
#22332: Update test names used for filtering in Move unit tests so the fully-qualified name is used to match against (i.e., testing::a::test_name instead of a::test_name). Also, add support for regexes to be used for test filtering rather than just substring matching.
#22303: Update the package summary generation to make it more portable.
#22350: Improved initial clone times for Move packages that are git dependencies.
✅ Mainnet | Source: GitHub Release
87#22244: Changes to using type tags in the object runtime. No user-visible impacts.
#22419: Adds an existing hardcoded bound to the protocol config for clarity.
#19439: Added epoch-stable sequence numbers for read-only per-epoch configs accessed in the transaction.
#22474: enables Party objects (and associated party_transfer functions) in testnet
#21877: TLS is now required to connect to the validator gRPC interface.
#22540: The default bucket for state sync archive fallback now uses a requester pays policy. Update sui node's state-archive-read-config section according to the docs
#21877: TLS is now required to connect to the validator gRPC interface.
#22332: Update test names used for filtering in Move unit tests so the fully-qualified name is used to match against (i.e., testing::a::test_name instead of a::test_name). Also, add support for regexes to be used for test filtering rather than just substring matching.
#22303: Update the package summary generation to make it more portable.
#22350: Improved initial clone times for Move packages that are git dependencies.
✅ Mainnet | Source: GitHub Release
85#22173: Allow larger objects to be created by system transactions
#22353: Congestion control settings have been adjusted
#22143: DoS protection is enabled in dryRun mode by default for validators
#22197: Enables TLS on connections to validators over the gRPC interface.
#21932: returns additional error information when an abort error occurs.
#22166:
Added the -c short flag for the sui client upgrade
command to pass the upgrade capability.
#22139: Add default TLS to sui-tool with optional --no-tls flag
#22293:
Added a new --sender argument for transactions to set the
sender to a specific address.
✅ Mainnet | Source: GitHub Release
84#22081: Normalize all type inputs to be defining ID-based when converting from TypeInputs in the adapter.
#22113: Enables ExecutionTimeEstimate mode for congestion control on mainnet.
#22120: update Nitro attestation parsing logic and enable for mainnet in version 83.
#22092: add a new feature flag that switches the object runtime to using TypeTags instead of VM runtime types.
#22258: upgrade to allow recovery of stolen funds in accordance with community vote
#21955: Switches Sui archive mechanism for state sync from the existing format to the checkpoint data ingestion bucket. The state-archive-read-config section of the full node config needs to be updated to include the ingestion-url field. For possible bucket options, see: https://docs.sui.io/guides/developer/advanced/custom-indexer#remote-reader.
#21983: Add --client.env flag to client and move subcommands to allow for selecting a specific environment for a single CLI command.
#21893: Added new merge_coins and smash_coins functions to ProgrammableTransactionBuilder
#21983: Update arguments to WalletContext::new so it only takes the path to the config. Additional configurations (timeout, max concurrent connections, etc) can then be set on the context after it has been created.
✅ Mainnet | Source: GitHub Release
83#22259: upgrade to allow recovery of stolen funds in accordance with a community vote
✅ Mainnet | Source: GitHub Release
82#21760: version 82, cleanup and minor patches to Sui System
#21837: Enables TLS on connections to validators over the gRPC interface.
#20851: Change in generated Move trace representation to be compressed. Existing Move test traces will need to be regenerated in order to be used.
#21837: Enables TLS on connections to validators over the gRPC interface.
#21790: Compiler might generate slightly different errors as a result of the compilation process being more permissive with respect to parsing errors.
#21876: Bug fix
#21912: Added the sui client remove-address command to the CLI.
✅ Mainnet | Source: GitHub Release
81#21303: Implements SIP-39 in Sui System
#21704: Enable consensus median-based timestamp for mainnet in v81
#21802: Increase threshold for bad nodes that won't be considered leaders in consensus in mainnet v47
#21605: internal minor log change, no impact on users
#21622: minor internal metrics & logging change, no user impact
#21609: The sui client ptb now supports passing MVR name registered packages for package IDs and type tags.
#21685: Bug fix - transitive dependencies of externally resolved dependencies are fetched before reading
#21671: DeepBook is no longer included as an implicit dependency.
#21742: remove spurious error message for external resolvers
#21710: bug fix for sui move disassemble with implicit dependencies
✅ Mainnet | Source: GitHub Release
80#21815: Adds a fix that bounds the size of PTB values
✅ Mainnet | Source: GitHub Release
‼️# Private Release Notice‼️ This release includes a private fix for an issue effecting fullnodes and validators. Changes will be made public once applied to mainnet after an epoch change tomorrow.
Private Commit: 3c894a0ab474fca8d4880606f919ab9af91f4529
Private release install instructions: https://bit.ly/sui-private-release-install
Do not use the attached binaries and download them from https://sui-releases.s3-accelerate.amazonaws.com/3c894a0ab474fca8d4880606f919ab9af91f4529/sui-node instead until 4/10 after the epoch change
79#21530: Enable consensus commit median based timestamp calculation for testnet.
#21562: v79 Increase threshold for bad nodes that won't be considered leaders in consensus in testnet
#21621: Enable consensus garbage collection and new linearizer logic in mainnet
#21715: Fixes an issue that could cause end-of-epoch crash loops on validators.
#21489: dependency change, should not have user-noticeable impact internal minor log change, no impact on users minor internal metrics & logging change, no user impact
#21462: improved error response when publishing an empty package
#21633: Fixes Move Analyzer issues around macros. Move now supports type annotations on lambdas.
#21649: The sui client ptb now supports passing MVR name registered packages for package IDs and type tags.
#21693: package management bug fixes
✅ Mainnet | Source: GitHub Release
78#21444: enable group ops uncompressed in mainnet.
#21420: Enable consensus garbage collection and new commit rule for testnet.
#21460: Add a new protocol version to support native transaction contexts and sponsor.
#21492: Enables new ExecutionTimeEstimate mode for congestion control in testnet.
#21563: Upgrade to a new version required for validators. Fullnodes are unaffected.
#21375: return error source information in dry run transactions
#21474: fixed a partition advance flakiness bug, no impact on the JSON-RPC interface
#21474: fixed a partition advance flakiness bug, no impact on the GraphQL interface.
#21204: Implicitly added dependencies on system packages (MoveStdLib, Sui, System, DeepBook, and Bridge) if they are not included in Move.toml.
#21491: Starting with v1.45.0, the sui console command is not available anymore.
✅ Mainnet | Source: GitHub Release
77#21108: upgrade protocol version to enable passkey for testnet
#21192: Changes to the Sui framework, deprecate Deepbook V2 with exception of cancel and withdrawal
#21364: Enable consensus garbage collection and new commit rule.
#18820: add feature flag to allow passkey inside multisig. Enable for devnet and testnet.
#21445: enable uncompressed group ops in mainnet for protocol version 77
#21449: Enable consensus garbage collection and new commit rule for testnet.
#21359: Ordering of enum variants in Move enum types are now returned in declaration order as opposed to lexicographic order.
#21032: Removed the objectKeys field from ObjectFilter as per the previous deprecation notice. Use multiGetObjects instead to fetch multiple objects.
#21211: sui client publish/upgrade will now by default remove dependencies that are not referenced in source code from being published on-chain.
#21331: Adds support to sui client ptb to create transactions with sui::object::ID values as pure inputs. ID inputs are specified like addresses (hexadecimal numbers with a leading @) and their type is inferred from usage.