Releases: MystenLabs/sui
Releases · MystenLabs/sui
mainnet-v1.1.0
Hightlights
- [API behavioral changes] - The
suix_getDynamicFields
cursor is now fixed. Note that although the cursor looks like an Object ID, it should be treated as an opaque handle. The cursor value has no relationship to the underlying data.
For more details, see #11789 - [New API method] - Added a
sui_getProtocolConfig
method that returns the protocol configs. If a valid protocol version is specified in the request, the protocol config at that version is returned, otherwise, the highest protocol config the node has synced to is returned. Note that a node might support a higher protocol config than what it has synced to. You can also see the highest (maxSupportedProtocolVersion
) and lowest (minSupportedProtocolVersion
) supported versions in all valid responses. #11510
Full Changelog: devnet-v1.1.0...mainnet-v1.1.0
devnet-v1.1.0
Highlights
- [API behavioral changes] - The
suix_getDynamicFields
cursor is now fixed. Note that although the cursor looks like an Object ID, it should be treated as an opaque handle. The cursor value has no relationship to the underlying data.
For more details, see #11789 - [New API method] - Added a
sui_getProtocolConfig
method that returns the protocol configs. If a valid protocol version is specified in the request, the protocol config at that version is returned, otherwise, the highest protocol config the node has synced to is returned. Note that a node might support a higher protocol config than what it has synced to. You can also see the highest (maxSupportedProtocolVersion
) and lowest (minSupportedProtocolVersion
) supported versions in all valid responses. #11510
Full Changelog: testnet-1.0.0...devnet-v1.1.0
sui-v1.0.0
What's Changed
- [API behavioural changes] - The
sui_getTransactionBlock
method now returns errors in theerrors
field instead of failing the request in the case where the objects needed to compute balance changes and object changes are pruned. For more details, see #11476 - [API behavioural changes] - The
sui_executeTransactionBlock
method no longer attempts to compute balance changes or object changes if local execution timeout (isExecutedLocally = false
). This previously returned anObjectNotFound ObjectSequenceNumberTooHigh
error, which masked the timeout. #11466 - [New API method] - Added a
suix_getValidatorsApy
method that returns APY values for all active validators, which are calculated using the validator’s staking pool exchange rate. #11293 - [New API method] - Added a
suix_subscribeTransaction
method that enables subscription to the transaction effects stream usingTransactionFilter
. #11432
Full Changelog
https://github.com/MystenLabs/sui/commits/sui-v1.0.0
testnet-1.0.0
devnet-0.33.0
Highlights
- [Breaking Change] - You can no longer use package upgrade to add new abilities to a type in a package if you used the type in a previous version of the package.
- This release adds support to override transitive dependencies of a package to avoid conflicts that could otherwise arise.
Full log
testnet-0.32.1
Highlights
- getDynamicFieldObject has been updated with a performance enhancement for faster retrieval time
- [Major Breaking Change] The protocol version is upgraded with this release. All full nodes must be updated or they will cease to interoperate with the network.
- [Update] Reduce gas charges for bytes read. It was causing significant increase in gas charges which should now be back to normal.
Full log
devnet-0.32.0
Highlights
- [New Feature] Adding the DeepBook package to the Sui Framework. This will allow Sui programmers to begin building on top of DeepBook.
- [New Feature] This release adds a new secondary index for
getBalances/Coins
family endpoints to improve query efficiency. To serve the data correctly, the full node must be wiped the DB and re-sync from Genesis to re-populate the index. We are working on snapshot restoration for secondary indices to help with this process. - [New Feature] This release adds two names service-related RPC methods:
resolveNameSpaceAddress
andresolveNameServiceNames
. TheresolveNameSpaceAddress
method takes in a nameString
and returns the mappedSuiAddress
. TheresolveNameServiceNames
method takes aSuiAddress
and returns aPage
of names. It currently returns only a primary name in this release. - [Update] New cost table for computation gas charges will be enabled in protocol version 5. Transactions may see larger computation charges due to this change.
Full log
devnet-0.31.0
HighLights
- [JSONRPC Major Breaking Change] - We have replaced all uint64 and uint128 numbers with BigInt in all jsonrpc responses to preserve precision. This is a major breaking change, please update TS-SDK and Rust SDK to the latest version. #10129
- [Major Breaking Change] This release introduces some changes to how Sui calculates gas charges. For details see Gas Changes
- [New Feature] You can now upgrade Move packages using the Sui Client CLI command
sui client upgrade
. Read how to use it in our docs. - [Minor breaking change] - The format of proofs used by module
sui::ecvrf
were modified (see related crypto code in MystenLabs/fastcrypto#542, #10332). - [Minor breaking change] - The display field of
SuiObjectData
was replaced by aSuiDisplayFieldResponse
that has data and an error field to return the best effort rendition of display. (see related code in #10321) - [Minor breaking change] - syntax and semantic changes of
getOwnedObjects
- The syntax change simplifies the type of
cursor
argument fromOption<CheckpointedObjectID>
toOption<ObjectID>
, which also simplifies the type ofnextCursor
in the returnedObjectPage
the same way. - The semantic change is that
getOwnedObjects
now returns all latest object changes, including objects changes that are not yet included in a checkpoint. As a result, iteratingObjectPage
s viagetOwnedObjects
might return object data from “objects snapshot” across different checkpoints. This is especially notable for addresses with many, and constantly changing, objects. If you still want to read owned objects from “objects snapshot” at certain checkpoints like the latest checkpoint, useQueryObjects
with a checkpoint query instead. (See related code in #10275)
- The syntax change simplifies the type of
- [Performance improvement] - Offloading jsonrpc request to Tokio blocking thread to prevent slow request from blocking other requests #10438
Full log
https://github.com/MystenLabs/sui/commits/devnet-0.31.0
https://github.com/MystenLabs/sui/commits/devnet-0.30.0
devnet-0.29.0
Highlights
- [Major breaking change] -
SuiAddress
andObjectID
are now 32 bytes long instead of 20 bytes (in hex, the len increases from 40 to 64). If your software interacts with anyObjectID
andSuiAddress
, you must update it to use updated addresses and redeploy it. (#8542) - [Major breaking change] - Modules
sui::digest
,sui::safe
,sui::typed_id
,sui::immutable_external_resource
,sui::locked_coin
,sui::epoch_time_lock
- [Breaking change] - entry function
sui::coin::burn_
removed (sui::coin::burn
is nowentry
) - [Major breaking change] -
SuiAddress
is now calculated as the first 32 bytes of the Blake2b hash offlag || pubkey
instead of the SHA3_256 hash. (#9262) - Move smart contracts can now access the blockchain timestamp. To access the timestamp, your smart contract should read a shared object,
Clock
, at the address0x6
and useClock::timestamp_ms(&Clock)
to read the timestamp. You should always reference theClock
object withObjectArg::SharedObject::mutable
set tofalse
. See usage in https://github.com/MystenLabs/sui/blob/main/doc/in-progress/time.md - Move smart contracts can now also access the coarse epoch start timestamp (updated every 24 hours) without referencing the
Clock
object. To do so, callTxContext::epoch_timestamp
. The current epoch number is also available viaTxContext::epoch
. - This release integrates the Sui Object Display into Sui Full node. The new Object Query API supports the Sui Object Display Standard. The main document explaining the feature and the reasons behind it is here: https://forums.sui.io/t/nft-object-display-proposal-accepted/4872 and the examples of Display use are now located in the Sui by Example book: https://examples.sui.io/basics/display.html. Effective with this release, Sui Explorer and Sui Wallet support the Sui Object Display Standard. NFTs that use a previous implementation might not render as expected.
- [Minor breaking change] - Removed
bulletproofs
andelliptic_curve
from the Sui Framework. https://github.com/MystenLabs/sui/pull/8660/files - [Breaking change] -
ecdsa_k1::ecrecover
andecdsa_k1::secp256k1_verify
now require you to input the raw message instead of a hashed message. You must also include the u8 that represents the hash function. See #7773) for more details. - Adds an RPC method routing for backward compatibility support #8334
- [API breaking change] - This release replaces
SuiCertifiedTransaction
withSuiTransaction
inSuiTransactionResponse
. This is because validators can no longer guarantee to return a transaction certificate. This release also unifiesSuiTransactionResponse
andSuiExecuteTransactionResponse
to simplify the API. See #8369 for more information. - [API breaking change] - Updated the structure for dynamic field names to make it easier to use in
sui_getDynamicFieldObject
. For more details, see #7318 - [Transaction Format breaking change] - Added a new
expiration
field toTransactionData
to allow for users to specify a time that a transaction should expire, meaning it is no longer eligible to sign and execute by validators. In this release, the only supported value for theexpiration field is
epoch`. If not provided, no expiration is set for the associated transaction. - [API breaking change] - This release removes the
request_switch_delegation
function from the Transaction Builder API. It also removes thepending_delegation_switches
field from the validator set type in the Sui SDK. #8435 - [Minor breaking change] - This release modifies the format for
ConsensusCommitPrologue
transactions. This is a system-generated transaction that updates timestamp on theClock
object, allowing Sui Move smart contracts to read up-to-date timestamps from the blockchain. - [Major breaking change] - This release replaces the
sui_getValidators
andsui_getSuiSystemState
functions with a newsui_getLatestSuiSystemState
function. The new function returns a flattened type that contains all information from the latest SuiSystemState object on-chain with typeSuiSystemStateSummary
. It also contains a vector of typeSuiValidatorSummary
that summarizes information from each validator, including: metadata, staking pool, and other data. The release also adds ap2p_address
to each validator’s metadata. The value for the field is the address the validator used for p2p activities, such as state sync. - [API breaking change] As part of the effort to reduce the size of Sui Full node synchronization payload, this release removes events from
TransactionEffect
. The events are still included in theSuiTransactionResponse
returned bysui_getTransaction
andsui_submitTransaction
endpoints. #7822 - [Major breaking change] - Programmable Transaction Blocks is a new construct that replaces both batch transactions and normal transactions (with the exception of special system transactions). Programmable Transaction blocks allow for a series of transactions to be chained and executed atomically, where the results of one transaction can be used as input for the following transactions. For more information, see [Programmable Transaction blocks with the TS SDK](https://docs.sui.io/build/prog-trans-ts-sdk).
- [Breaking change] - Changes to Gas Budget to use SUI rather than gas units. This removes the concept of gas units from any user-related API operations. This does not change the format of
TransactionData
(u64). This is not a breaking change in the sense that the current format no longer works, but rather requires you to reconsider how you use gas budgets. - [Breaking change] - Changes to gas metering logic within the VM. This removes the per-bytecode costs, and instead replaces it with a tiered costing schedule based on the number of instructions executed, bytes allocated on the stack, and maximal stack height. Metering for native functions is defined as before on a per-native basis. This is not a breaking change in the sense that current format will no longer work, but may require you to reconsider your gas budgets for certain transactions.
- [Breaking change] - Currently, transactions require a single coin to pay for gas. This sometimes results in users needing to make separate transactions (such as
PaySui
) to merge coins before completing a transaction, which can also increase the cost of the transaction.
This release changes the field inTransactionData
fromgas_payment: ObjectRef
togas_payment: Vec<ObjectRef>
, where ObjectRef is a non-empty vector of owned SUI objects. This combines all of the coins into a single coin, using theObjectID
of the first coin in the vector. - [API breaking change] - The
StakedSui
object now includes the ID of the staking pool,pool_id
. ****For more information, see #8371 - [Major breaking change] The
sui_getObject
endpoint now takes an additional configuration parameter of typeSuiObjectDataOptions
to control which fields the endpoint retrieves. By default, the endpoint retrieves only object references unless the client request explicitly specifies other data, such astype
,owner
, orbcs
. To learn more, see (#8817) - [Major API breaking change] The previous
sui_getObjectsOwnedByAddress
has been renamed tosui_getOwnedObjects
. In addition the response has been standardized across the object related APIs to returnSuiObjectResponse
which has changed from its original implementation to instead have a data field and an error field. To learn more see #9668. - [Major breaking change] - The ID leak verifier that governs usage of
UID
s in Sui Move code has been rewritten and flipped. New objects must now get “fresh”UID
s created in the function where the object is made, but when the object’s struct destroyed, theUID
can be stored as if the object was wrapped (but without it's contents). In contrast, the previous rules stated that theUID
could come from anywhere, but must have been destroyed when the object was unpacked. We have made this change to make using dynamic fields a bit more ergonomic, so you do not always need aBag
orTable
if you want to retain access to dynamic fields after unpacking an object into its constituent fields. See #8026 for details and a migration example. - [Major breaking change] - This release changes the serialization format of Sui object types. Sui now uses a more compact serialization format for common types such as Coin, Coin, and StakedSui, reducing object size by up to 40%. This lowers storage gas costs for objects of these types. This doesn’t effect clients using JSON-RPC API read functions, but clients that read raw Sui objects directly need to understand the new type encoding. Note that the encoding of Sui Move structs remains unchanged. See #9055 for more details.
- [Major API breaking changes] -
GetTransaction
API refactoring- [RPC] `sui_getT...
devnet-0.27.0
Highlights
- Sui now accepts weighted multi-scheme Multisig signatures. [enum GenericSignature] replaces all [enum Signature] for user signature verification logic. The [Sui Keytool](https://docs.sui.io/devnet/build/json-rpc#sign-a-transaction-using-the-sui-keytool) command supports 1) Generating Multisig addresses 2) Combining a single signature into a Multisig.
- [Sponsored Transaction](#8273)
- Breaking Change - You can now use a different account than the account used for a transaction to pay gas fees for a transaction.
TransactionData
now containsGasData
to consolidate gas-related info, includinggas_owner
. Whengas_owner
is different from the transaction sender, the transaction is a Sponsored Transaction.SenderSignedData
now contains a list of user signatures. A Sponsored transaction must include both the sender’s and the sponsor’s signatures. Duplicated or third-party signatures are not valid. The order of signatures does not matter.- No
Sui
transactions, such asPaySui
,PayAllSui
,TransferSui
can be sponsored transactions because they involve transferring thegas
object. - The Transaction execution APIs now take a list of signatures.
- Breaking Change - You can now use a different account than the account used for a transaction to pay gas fees for a transaction.
- RPC Data Structure changes
TransactionEffects
now contain anexecuted_epoch
field that indicates which epoch this transaction was executed in.TransactionEffects
now contain anunwrapped_then_deleted
field that containsObjectRefs
that are deleted from the wrapped state. These objects are no longer accounted for within thedeleted
field.TransactionResponse
, the response when you call theget_transaction
RPC interface, now contains acheckpoint
field that indicates which checkpoint includes the transaction.
- Bugfix for Source Verification on Publish which was incorrectly suggested that dependencies on-chain differed from dependencies built from source (move-language/move#904)
Full Changelog: https://github.com/MystenLabs/sui/commits/devnet-0.27.0