Skip to main content

Release Notes


v1.62.1​

βœ… Mainnet | Source: GitHub Release

Click to open
Sui v1.62 Gas Schedule Updates (and what to expect)

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.

Summary of gas schedule changes​

Dynamic field changes (largest behavioral impact)

Dynamic field operations now charge differently depending on cache status:

  • First load of a dynamic field (i.e., not in the runtime cache, and not created in the transaction) is more expensive.
  • Subsequent loads of the same dynamic field within the transaction are significantly cheaper.
  • Accessing dynamic fields created earlier in the same transaction are significantly cheaper.

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.
  • Execution stack tracking: More accurate stack-height metering reduces over-charging for some instructions.
  • Primitive size accounting tuning: The computed β€œsize” for several primitive types now better match their actual size, including some decreases and increases.

Observed impact from transaction sampling​

We backtested several million transactions when examining these gas changes. Across a few million sampled transactions:

  • 5.7% saw a change in gas usage. Of that:
    • 1.3% saw a gas increase
    • 4.4% saw a gas decrease
  • The mean change in gas costs across all transactions was βˆ’6.03%
  • The median change in gas costs was βˆ’21.52%

Looking at the distribution among affected transactions:

  • Up through about the 75th percentile, changes are net decreases in gas costs.
  • From the 76th percentile onward, changes shift to increases.
  • Extremes (0th/100th percentile) show larger swings, mostly explained by dynamic-field behavior interacting with size/caching.

What this means for developers​

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.

Costly patterns​

Your transactions may be more expensive if they do some or all of the following:

  • Read many unique dynamic fields
  • The fields read are large in size
  • Each field is read only a few times per transaction

This is because first-time loads of uncached dynamic fields are now more expensive.

Cheaper transactions​

Your transactions should get cheaper if they do any of the following:

  • Read a small set of dynamic fields repeatedly within the same transaction
  • Create dynamic fields and then access them again in-transaction

These now benefit from the cache-aware and β€œcreated in-transaction” discounts.

Secondary effects​

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.

Click to open
Changes to Non-public entry Functions in PTBs

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.

Overview​

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.

The New Rules​

Motivation​

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.

Terminology​

Some brief terminology before looking at the rules and their defining algorithm.

  • The rules apply to the PTB statically. This means that the verification happens before the PTB begins execution. In some cases (particularly around shared objects), this will result in the rules seeming more general and pessimistic than they otherwise would be if they were applied dynamically as the PTB was executed.
  • A value is any PTB Argument. These can be Inputs, Results, NestedResults, or the GasCoin (already smashed).
  • A result is a value that was returned from a PTB command. These are referred to via Result and NestedResult.
  • Arguments to a PTB command have two usage types: by-reference (& or &mut) or by-value (either copied or moved).
  • A value is considered hot if its type has neither store nor drop.
  • This means a hot value’s type can be in one of the following cases:
    • No abilities
    • copy
    • key
    • Note that a value cannot have both key and copy since sui::object::UID does not have copy
  • Each value belongs to a clique. A clique represents values that have been used together as arguments and their results.
  • Each clique has a count with the number of hot values. Meaning that the clique’s count is incremented when results are hot (once per result), and the clique’s count is decremented when a hot value is moved (taken by-value and not copied).
    • The count here is tracking how many hot potato (or similar) values are outstanding, and the clique is tracking which values they could restrict or otherwise influence.

The Algorithm​

  • Each input to the PTB starts off in its own clique with a count of zero.
  • When values are used (by reference or by-value) together in a command, their cliques are merged, adding together each clique’s count.
  • The count of the arguments’ merged clique is decremented for each hot value moved (taken by-value and not copied).
  • If the command is a Move call for a non-public entry function, the count of the arguments’ merged clique must be zero at this point.
    • Note that this means a non-public entry function can take hot values! They must just be the last hot values in their clique.
  • Results of each command are included in the arguments’ merged clique. The clique’s count is incremented for each hot result value.
  • NOTE: Shared objects taken by-value have a special rule in that during the accounting for the result values, the argument’s merged clique’s count is set to infinity.
    • See the β€œLimitations” section below for more detail

Examples​

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).

Limitations​

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.

Coming Soon (v1.63 or later)​

In a later version, we will remove the signature restrictions for entry functions. This means that any Move function can become entry!

Sui Protocol Version in this release: 104​

#24239: 104 - update CoinMetadata post updates in Coin in 103

Nodes (Validators and Full nodes)​

#24420: Disable using Quorum Driver for transaction submission. Setting TRANSACTION_DRIVER env var is now a no-op.

JSON-RPC​

#23737: This PR, in tandem withΒ [#24192](#24192), unifies how indexers determine their ingestion starting point and introduce watermark-gated backfill tasks.

  1. --skip-watermarkΒ is removed, and the previous ability to bypass watermark safety checks for concurrent pipelines is no longer supported.
  2. --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.
  3. A new mechanism, watermark tasks, allows operators to run the same pipelines on multiple indexer instances for historical backfilling. Two new flags,Β --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:

  1. If you useΒ --first-checkpointΒ only forΒ initialΒ ingestion of a fresh pipeline, no further action is needed.
  2. If you previously usedΒ --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.
  3. LikeΒ --skip-watermark,Β --taskΒ cannot be used to run sequential pipelines.

GraphQL​

#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.

CLI​

#24367:

  • Refactored 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.

Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.62.1​

v1.61.2​

βœ… Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 103​

#24343: framework changes to coin.move

gRPC​

#24244: Return "Not Found" for new checkpoints that haven't been fully stored yet instead of "Internal Error."

GraphQL​

#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).


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.61.2​

v1.60.1​

βœ… Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 101​

#24073: Coin registry patch

Nodes (Validators and Full nodes)​

#24010: Use Mysticeti 2.0 and TransactionDriver for transaction processing by default.

CLI​

#24133: Adds the ability to talk to an existing, remote postgress database when running the indexer and/or GraphQL for a local network.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.60.1​

v1.59.1​

βœ… Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 100​

#24108: Simplify private generics check

GraphQL​

#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.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.59.1​

v1.58.3​

βœ… Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 98​

#23866: Fix issue in bytecode verifier

JSON-RPC​

#23766: Fix wrong iter bounds that cause missing results in get_transactions_by_move_function

GraphQL​

#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.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.58.3​

v1.57.3​

βœ… Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 97​

#23858: Adds a new protocol version that fixes an issue in the bytecode verifier.

JSON-RPC​

#23766: Fix wrong iter bounds that cause missing results in get_transactions_by_move_function

GraphQL​

#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.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.57.3​

v1.57.2​

βœ… Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 96​

#23650: Mysticeti v2 (Mysticeti fastpath) support is enabled on mainnet.

Nodes (Validators and Full nodes)​

#23492: Adds CheckpointArtifacts digest to the summary. Currently enabled in Devnet for testing.

gRPC​

#22874: Integrating GetCoinInfo with the new CoinRegistry system object.

JSON-RPC​

#22903: Integrating coin metadata and total supply APIs with the CoinRegistry system object.

GraphQL​

#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).

CLI​

#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


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.57.2​

v1.56.2​

βœ… Mainnet | Source: GitHub Release

CLI​

#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.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.56.2​

v1.55.0​

βœ… Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 94​

#23220: Protocol bump to version 94

Nodes (Validators and Full nodes)​

#23074: Delta to CheckpointSignatures sent to consensus, now including Digest as part of dedup key.

CLI​

#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.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.55.0​

v1.54.2​

βœ… Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 92​

#22675: Minor patch in Sui Framework.

#23041: Shared object deletion rules are now more granular and per-command, rather than per-transaction.

CLI​

#22924: now supports transfer of party objects via client transfer command


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.54.2​

v1.53.2​

βœ… Mainnet | Source: GitHub Release

Sui Protocol Version in this 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.

Nodes (Validators and Full nodes)​

#22842: ObjectNotFound and DependencyPackageNotFound errors from transaction processing now get retried in QuorumDriver by default.

CLI​

#22914: Fixes a bug around global value mutation tracking in generated traces for debugger


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.53.2​

v1.52.3​

βœ… Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 89​

#22937: Adds a new protocol version to enable the latest checks.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.52.3​

v1.52.2​

βœ… Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 88​

#22580: Adds calculate_rewards function to Sui System

#22611: Improve error messages around type resolution.

Nodes (Validators and Full nodes)​

#22572: support path-based remote-store options for fullnode state sync fallback

#22594: No noticeable impact to users

gRPC​

#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.

CLI​

#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.

Rust SDK​

#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.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.52.2​

v1.51.5​

βœ… Mainnet | Source: GitHub Release

Sui Protocol Version in this 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

Nodes (Validators and Full nodes)​

#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

gRPC​

#22241: Implementing GetBalance and ListBalances APIs for LiveDataService.


Co-authored-by: Brandon Williams <brandon@mystenlabs.com>

#21877: TLS is now required to connect to the validator gRPC interface.

CLI​

#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.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.51.5​

v1.51.4​

βœ… Mainnet | Source: GitHub Release

Sui Protocol Version in this 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

Nodes (Validators and Full nodes)​

#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

gRPC​

#21877: TLS is now required to connect to the validator gRPC interface.

CLI​

#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.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.51.4​

v1.50.1​

βœ… Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 85​

#22173: Allow larger objects to be created by system transactions

#22353: Congestion control settings have been adjusted

Nodes (Validators and Full nodes)​

#22143: DoS protection is enabled in dryRun mode by default for validators

gRPC​

#21896:

#22197: Enables TLS on connections to validators over the gRPC interface.

JSON-RPC​

#21932: returns additional error information when an abort error occurs.

CLI​

#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.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.50.1​

v1.49.2​

βœ… Mainnet | Source: GitHub Release

Sui Protocol Version in this 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

Nodes (Validators and Full nodes)​

#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.

CLI​

#21983: Add --client.env flag to client and move subcommands to allow for selecting a specific environment for a single CLI command.

Rust SDK​

#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.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.49.2​

v1.48.4​

βœ… Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 83​

#22259: upgrade to allow recovery of stolen funds in accordance with a community vote


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.48.4​

v1.48.2​

βœ… Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 82​

#21760: version 82, cleanup and minor patches to Sui System

gRPC​

#21837: Enables TLS on connections to validators over the gRPC interface.

CLI​

#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.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.48.2​

v1.47.1​

βœ… Mainnet | Source: GitHub Release

Sui Protocol Version in this 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

JSON-RPC​

#21605: internal minor log change, no impact on users

#21622: minor internal metrics & logging change, no user impact

CLI​

#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


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.47.1​

v1.46.3​

βœ… Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 80​

#21815: Adds a fix that bounds the size of PTB values


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.46.3​

v1.46.2​

βœ… 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

Sui Protocol Version in this release: 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

Nodes (Validators and Full nodes)​

#21715: Fixes an issue that could cause end-of-epoch crash loops on validators.

JSON-RPC​

#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

CLI​

#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


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.46.2​

v1.45.3​

βœ… Mainnet | Source: GitHub Release

Sui Protocol Version in this 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.

Nodes (Validators and Full nodes)​

#21563: Upgrade to a new version required for validators. Fullnodes are unaffected.

JSON-RPC​

#21375: return error source information in dry run transactions

#21474: fixed a partition advance flakiness bug, no impact on the JSON-RPC interface

GraphQL​

#21474: fixed a partition advance flakiness bug, no impact on the GraphQL interface.

CLI​

#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.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.45.3​

v1.44.3​

βœ… Mainnet | Source: GitHub Release

Sui Protocol Version in this 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.

JSON-RPC​

#21359: Ordering of enum variants in Move enum types are now returned in declaration order as opposed to lexicographic order.

GraphQL​

#21032: Removed the objectKeys field from ObjectFilter as per the previous deprecation notice. Use multiGetObjects instead to fetch multiple objects.

CLI​

#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.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.44.3​

v1.43.1​

βœ… Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 74​

#20984: bumps protocol version to 74

#20870: Add a new native function to verify aws nitro enclave attestation in devnet.

#21177: Enable zstd compression for consensus tonic network in mainnet

#21208: Enables consensus garbage collection for testnet

JSON-RPC​

#21166: add new read api to verify zklogin signature

CLI​

#21116: Fixed the bug when the CLI cannot connect to the active environment leading to an error on most commands.

#20977: publication and upgrade will now warn that source verification will become opt-in in a future release; the warning can be disabled with either --skip-dependency-verification or the new --verify-deps flags

#21159: Source verification for publish/upgrade commands is now opt-in instead of opt-out.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.43.1​

v1.42.2​

βœ… Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 73​

#20258: Enables consensus garbage collection & new linearization logic for devnet

#20978: Enable zstd compression for consensus tonic network in testnet.

#21026: Enable smart ancestor selection & probing for accepted rounds

CLI​

#20342: added --verify-compatibility flag to client upgrade command, which checks upgrade compatibility locally before publishing upgrades

#20954: Fixed the CLI keytool update-alias command not to allow duplicate aliases.

#20961: The Move.toml file generated by sui move new now sets override = true for the framework dependency. This will prevent some source verification errors for new projects.

#21124: Fixed the bug when the CLI cannot connect to the active environment, leading to an error on most commands.

#21127: publication and upgrade will now warn that source verification will become opt-in in a future release; the warning can be disabled with either --skip-dependency-verification or the new --verify-deps flags


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.42.2​

v1.41.1​

βœ… Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 72​

#20250: [Consensus] Linearizer to use commit up to gc_round

CLI​

#20846: sui client faucet will now instruct users to use the Faucet Web App (faucet.sui.io) to request testnet tokens. For devnet/localhost, the behavior is unchanged.

#20865: Move docgen now uses named addresses. This will change some directory structures in the output format, which may break any tools targeting a rigid directory structure.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.41.1​

v1.40.3​

βœ… Mainnet | Source: GitHub Release

Sui Protocol Version in this release: 71​

#20738: [SIP-45] Metrics and protocol config changes

GraphQL​

#20694: Treat bytes and signature arguments to verifyZkloginSignature as part of the transaction payload for the purposes of imposing request payload size limits.

#20300: added a multiGetObjects top level query, which will replace the objectFilter in objects.

CLI​

#20599: Fixed sui client ptb --dev-inspect to correctly display the result of the dev inspect.

Rust SDK​

#20640: Added a build_mainnet function to the SuiClientBuilder.

Indexer​

#20517: Deepbook Ticker Endpoint #20558: Balance Manager Volume Endpoint in Pool Names (Deepbook Indexer) #20675: DEEP Supply Endpoint


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.40.3​

v1.39.4​

βœ… Mainnet | Source: GitHub Release

βš οΈβ€ΌοΈ Breaking change alert: Consistently encode binary data with Base64 in JSON-RPC βš οΈβ€ΌοΈ

Sui Protocol Version in this release: 70​

#20336: v70 Enable probing for accepted rounds in round prober in consensus.

#20528: Enable smart ancestor selection in testnet for v70

Indexer​

#20285: Deepbook indexer

#20349: A minor JSON RPC Read API fix to return package object properly.

#20467: Fix StructTag conversion for suix_queryEvents Indexer-RPC method

#20495: Switch DeepBook Indexer timestamp from on-chain timestamp to checkpoint timestamp.

#20453: Adds /all_historical_volume and /orderbook/:pool_name endpoints to the DeepBook Indexer API. /all_historical_volume retrieves the pools stored in the database and returns the volume for all pools within a time range. /orderbook/:pool_name retrieves the level and depth of the requested order book pool. The PR also updates the /get_historical_volume/:pool_id endpoint to read /historical_volume/pool_name.

#20504: Adds a get_net_deposits endpoint to the DeepBook Indexer API.

#20486: Adds coin_owner_kind column to coin balances tables.

GraphQL​

#20346: Fix a bug when reading a dynamic object field value from an Owner, where the value returned would not be the latest version when the owner was queried without a root/parent version supplied.

#20340: Checkpoint has now a bcs field that represents the Base64 encoded BCS serialization of the CheckpointSummary data.

#20523: graphql changes to enable pruning, mainly around watermark

CLI​

#20354: Fixed the sui validator display-metadata command bug for pending validators.

#20395: When issuing sui move new command, a .gitignore file will be added to the project's folder.

#20426: I added a warning when trying to publish/upgrade a package if the CLI falls behind more than two protocol versions than the network on which the package is about to be published/upgraded.

#20474: Support fully overriding the config directory during sui start.

#20472: Added the --data-ingestion-dir option to sui start to set a custom directory where to write the checkpoint files.

#20475: Added the flag --ignore-chain that works together with sui move build --dump-bytecode-as-base64 to bypass the need for a client.yaml file. This allows building to proceed without a network connection or active environment, but it will not be able to automatically determine the addresses of its dependencies. NB: --ignore-chain depends on --dump-bytecode-as-base64, so it cannot be used on its own.

#17115: Move will now lint against certain binary operations where the operands are identical, non-value expressions.

#20498: Compiler may generate slightly different errors as a result of the compilation process being more permissive with respect to parsing errors

#20511: Added the --committee-size argument to sui start and sui genesis to configure the number of validators to start with the local network / when generating a genesis.

#16479: Move will now lint against pairs of comparison operations that can be combined to a single comparison.

#19894: New Move module std::uq64_64 for larger-precision, fixed-point numbers

#20344: Add Conventions as comments to a new package when sui move new

JSON-RPC​

#20488: Binary data for SuiEvent.bcs and DynamicFieldInfo.bcs_name is now encoded in Base64.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.39.4​

v1.39.3​

βœ… Mainnet | Source: GitHub Release

βš οΈβ€ΌοΈ Breaking change alert: Consistently encode binary data with Base64 in JSON-RPC βš οΈβ€ΌοΈ

Sui Protocol Version in this release: 70​

#20336: v70 Enable probing for accepted rounds in round prober in consensus.

#20528: Enable smart ancestor selection in testnet for v70

Indexer​

#20285: Deepbook indexer

#20349: A minor JSON RPC Read API fix to return package object properly.

#20467: Fix StructTag conversion for suix_queryEvents Indexer-RPC method

#20495: Switch DeepBook Indexer timestamp from on-chain timestamp to checkpoint timestamp.

#20453: Adds /all_historical_volume and /orderbook/:pool_name endpoints to the DeepBook Indexer API. /all_historical_volume retrieves the pools stored in the database and returns the volume for all pools within a time range. /orderbook/:pool_name retrieves the level and depth of the requested order book pool. The PR also updates the /get_historical_volume/:pool_id endpoint to read /historical_volume/pool_name.

#20504: Adds a get_net_deposits endpoint to the DeepBook Indexer API.

#20486: Adds coin_owner_kind column to coin balances tables.

GraphQL​

#20346: Fix a bug when reading a dynamic object field value from an Owner, where the value returned would not be the latest version when the owner was queried without a root/parent version supplied.

#20340: Checkpoint has now a bcs field that represents the Base64 encoded BCS serialization of the CheckpointSummary data.

#20523: graphql changes to enable pruning, mainly around watermark

CLI​

#20354: Fixed the sui validator display-metadata command bug for pending validators.

#20395: When issuing sui move new command, a .gitignore file will be added to the project's folder.

#20426: I added a warning when trying to publish/upgrade a package if the CLI falls behind more than two protocol versions than the network on which the package is about to be published/upgraded.

#20474: Support fully overriding the config directory during sui start.

#20472: Added the --data-ingestion-dir option to sui start to set a custom directory where to write the checkpoint files.

#20475: Added the flag --ignore-chain that works together with sui move build --dump-bytecode-as-base64 to bypass the need for a client.yaml file. This allows building to proceed without a network connection or active environment, but it will not be able to automatically determine the addresses of its dependencies. NB: --ignore-chain depends on --dump-bytecode-as-base64, so it cannot be used on its own.

#17115: Move will now lint against certain binary operations where the operands are identical, non-value expressions.

#20498: Compiler may generate slightly different errors as a result of the compilation process being more permissive with respect to parsing errors

#20511: Added the --committee-size argument to sui start and sui genesis to configure the number of validators to start with the local network / when generating a genesis.

#16479: Move will now lint against pairs of comparison operations that can be combined to a single comparison.

#19894: New Move module std::uq64_64 for larger-precision, fixed-point numbers

#20344: Add Conventions as comments to a new package when sui move new

JSON-RPC​

#20488: Binary data for SuiEvent.bcs and DynamicFieldInfo.bcs_name is now encoded in Base64.


Full Log: https://github.com/MystenLabs/sui/commits/mainnet-v1.39.1​