Standard Library
The Move Standard Library provides functionality for native types and operations. It is a standard collection of modules that do not interact with storage, but provide basic tools for working with and manipulating data. It is the only dependency of the Sui Framework, and is imported together with it.
Most Common Modules
In this book we go into detail about most of the modules in the Standard Library, however, it is also helpful to give an overview of the features, so that you can get a sense of what is available and which module implements it.
| Module | Description | Chapter |
|---|---|---|
| std::string | Provides basic string operations | String |
| std::ascii | Provides basic ASCII operations | - |
| std::option | Implements Option<T> | Option |
| std::vector | Native operations on the vector type | Vector |
| std::internal | Provides the Permit<T> type for module-authorized calls | Internal Permit |
| std::bcs | Contains the bcs::to_bytes() function | BCS |
| std::address | Contains a single address::length function | Address |
| std::type_name | Allows runtime type reflection | Type Reflection |
| std::hash | Hashing functions: sha2_256 and sha3_256 | - |
| std::debug | Contains debugging functions, which are available in only in test mode | - |
| std::unit_test | The assert_eq! and assert_ref_eq! macros for test code | Testing |
| std::bit_vector | Provides operations on bit vectors | - |
| std::uq32_32 | Fixed-point arithmetic: the UQ32_32 type | - |
| std::uq64_64 | Fixed-point arithmetic: the UQ64_64 type | - |
| std::fixed_point32 | The FixedPoint32 type; deprecated in favor of std::uq32_32 | - |
Integer Modules
The Move Standard Library provides a set of functions associated with integer types. These functions are split into multiple modules, each associated with a specific integer type. The modules should not be imported directly, as their functions are available on every integer value.
All of the modules provide the same set of functions: min, max, diff, divide_and_round_up, sqrt, pow, and to_string; checked conversions to smaller types - try_as_u8, try_as_u16, and so on; and macros, such as max_value! and the iteration helpers do! and range_do!.
| Module | Description |
|---|---|
| std::u8 | Functions for the u8 type |
| std::u16 | Functions for the u16 type |
| std::u32 | Functions for the u32 type |
| std::u64 | Functions for the u64 type |
| std::u128 | Functions for the u128 type |
| std::u256 | Functions for the u256 type |
Exported Addresses
The Standard Library exports a single named address - std = 0x1. This is where the std alias used throughout the book is defined.
Implicit Imports
Some modules are imported implicitly and are available in the module without the explicit use import. For the Standard Library, these modules and types include:
- std::vector
- std::option
- std::option::Option
- std::internal
Note that std::internal is imported as a module, not a member: its members keep the module prefix, as in internal::Permit<T> and internal::permit<T>() - no use statement required. See the Internal Permit section for how it is used.
Importing std without Sui Framework
The Move Standard Library can be imported to the package directly. However, std alone is not enough to build a meaningful application, as it does not provide any storage capabilities and can't interact with the onchain state.
MoveStdlib = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/move-stdlib", rev = "framework/mainnet" }
Source Code
The source code of the Move Standard Library is available in the Sui repository.