sui/docs-move-objects

docs-move-objects

suidocs🏛️ Officialconfidence highhealth 100%
v1.0.0·by Sui Foundation·Updated 3/20/2026

Sui Object Model | Sui Documentation

Skip to main content

Sui Documentation

Guides Concepts Standards References

Ask Sui AI

Search

Overview

Getting Started

Install Sui

Install from Source

Install from Binaries

Connecting to a Local Network

Configure a Sui Client

Create a Sui Address

Get SUI from Faucet

Hello, World!

Connect a Frontend

Next Steps

Objects

Sui Object Model

Types of Object Ownership

Transfering Objects

Object Display

Derived Objects

Dynamic Fields

Object and Package Versioning

Object-Based Local Fee Markets

Simulating References

Packages

Transactions

Accessing Data

Currencies and Tokens

NFTs

Wallets

On-Chain Primitives

Cryptography

Nautilus

App Examples

Operator Guides

SuiPlay0X1

Dev Cheat Sheet

Move Best Practices

Troubleshooting Common Errors

🗳️ Book Office Hours →

💬 Join Discord →

Objects

Sui Object Model

On this page

Sui Object Model

An

object is a fundamental unit of storage on the network. Every resource, asset, or piece of data on-chain is an

object . Many other blockchains structure storage around accounts containing key-value stores. Sui's storage is structured around objects addressable by unique IDs on-chain.

Every

object has the following components:

A globally unique ID.

An owner, which might be an

address or an

object .

A version number that increments every time a change is made to the

object .

Metadata, such as the digest of the last

transaction that used the

object .

Object types ​

There are 3 types of objects:

Sui

object : Every resource, asset, or piece of data. Sui objects are what transactions interact with, and are the building blocks for all on-chain state.

Sui

Move

object : An

object defined using the

Move language. To create a

Move

object , you must use sui::object::new to create a struct. This struct must have the key ability and include a field id: UID as the first defined field. The struct can also contain primitive types, such as integers and

addresses , other objects, and non - object structs. This struct can be stored on-chain as a Sui

object .

Sui

Move package : A smart contract that can manipulate other objects. Each

Move package is a set of Sui

Move bytecode

modules . The

modules within the

package each have a name that's unique within the containing

package . The combination of the

package 's on-chain ID and the name of a

module uniquely identifies the

module . When you publish smart contracts to Sui, a

package is the unit of publishing. After you publish a

package

object , it is immutable and can never be changed or removed. A

package

object can depend on other

package objects that were previously published to Sui.

Referring to objects ​

You can refer to objects by their:

ID: The globally unique ID of the

object . It is a stable identifier for the

object that does not change and is useful for querying the current state of an

object or describing which

object was transferred between two

addresses .

Versioned ID: An (ID, version) pair. It describes the state of the

object at a particular point in the

object 's history and is useful for asking what the value of the

object was at some point in the past or determining how recently an

object was updated.

Object reference: An (ID, version,

object digest) triple. The

object digest is the hash of the

object 's contents and metadata. An

object reference provides an authenticated view of the

object at a particular point in the

object 's history. Transactions require

object inputs to be specified through

object references to ensure the

transaction 's sender and a

validator processing the

transaction agree on the contents and metadata of the

object .

Object ownership ​

Every

object has an owner field that dictates who can use it in transactions. This field can contain one of the following options:

Address owned : Owned by a specific 32-byte

address that is either an account

address derived from a particular signature scheme or an

object ID.

Immutable : Not owned by anyone, so anyone can use it. It cannot be mutated, transferred, or deleted.

Party : Transferred using the

sui::transfer::party_transfer

or

sui::transfer::public_party_transfer

function and is accessible by the Party to which it is transferred. Party objects can be singly owned, but unlike

address -owned objects, they are versioned by

consensus .

Shared : Ownership is shared using the

sui::transfer::share_object

function and is accessible to everyone.

Wrapped : A data structure containing one struct type nested in another.

Object metadata ​

Every

object has the following metadata:

A 32-byte globally unique ID: Derived from the digest of the

transaction that created the

object and a counter encoding the number of IDs generated by the

transaction .

An 8-byte unsigned integer version: Monotonically increases with every

transaction that modifies it .

A 32-byte

transaction digest: Indicates the last

transaction that included this

object as an output.

A 32-byte owner field: Indicates how this

object can be accessed .

In addition to common metadata, objects have a category-specific, variable-sized contents field containing a Binary Canonical Serialization (BCS) -encoded payload:

Move objects contain their

Move type, whether the

object can be transferred using public_transfer , and its fields.

Move packages contain the bytecode

modules in the

package , a table identifying which versions of a

package introduced each of its types (type origin table), and a table mapping each of its transitive dependencies to a specific version of that

package to use (linkage table).

The

transaction - object DAG: Relating objects and transactions ​

Transactions take objects as input, read, write, or mutate these inputs, then produce mutated or freshly created objects as output. Each

object knows the hash of the last

transaction that produced it as an output. A natural way to represent the relationship between objects and transactions is a directed acyclic graph (DAG) where nodes are transactions and directed edges go from

transaction

A to

transaction

B if an output

object of A is an input

object of B . They are labeled by the reference of the

object in question, which specifies the exact version of the

object created by A and used by B .

The root of this DAG is a genesis

transaction that takes no inputs and produces the objects that exist in the system's initial state. You can extend the DAG by identifying mutable

transaction outputs that have not yet been consumed by any committed

transaction and sending a new

transaction that takes these outputs and optionally, immutable

transaction outputs as inputs.

Live objects are available as input for a

transaction . The global state maintained by Sui consists of the totality of such objects. The live objects for a particular Sui

address

A are all objects owned by A , along with all shared and immutable objects in the system.

When this DAG contains all committed transactions in the system, it forms a complete and cryptographically auditable view of the system's state and history. In addition, you can use the scheme above to construct a DAG of the relevant history for a subset of transactions or objects, for example, the objects owned by a single

address .

Limits on transactions, objects, and data ​

Sui has some limits on transactions and data used in transactions, such as a maximum size and number of objects used .

The ProtocolConfig struct in the

sui-protocol-config crate itemizes these limits:

Click to open

lib.rs

crates/sui-protocol-config/src/lib.rs

/// Constants that change the behavior of the protocol.

///

/// The value of each constant here must be fixed for a given protocol version. To change the value

/// of a constant, advance the protocol version, and add support for it in get_for_version under

/// the new version number.

/// (below).

///

/// To add a new field to this struct, use the following procedure:

/// - Advance the protocol version.

/// - Add the field as a private Option<T> to the struct.

/// - Initialize the field to None in prior protocol versions.

/// - Initialize the field to Some(val) for your new protocol version.

/// - Add a public getter that simply unwraps the field.

/// - Two public getters of the form field(&self) -> field_type

///

and field_as_option(&self) -> Option<field_type> will be automatically generated for you.

/// Example for a field: new_constant: Option<u64>

/// ```rust,ignore

///

pub fn new_constant(&self) -> u64 {

///

self.new_constant.expect(Self::CONSTANT_ERR_MSG)

///

}

///

pub fn new_constant_as_option(&self) -> Option<u64> {

///

self.new_constant.expect(Self::CONSTANT_ERR_MSG)

///

}

/// ```

/// With pub fn new_constant(&amp;self) -&gt; u64, if the constant is accessed in a protocol version

/// in which it is not defined, the validator will crash. (Crashing is necessary because

/// this type of error would almost always result in forking if not prevented here).

/// If you don't want the validator to crash, you can use the

/// pub fn new_constant_as_option(&amp;self) -&gt; Option&lt;u64&gt; getter, which will

/// return None if the field is not defined at that version.

/// - If you want a customized getter, you can add a method in the impl.

#[skip_serializing_none]

#[derive(Clone, Serialize, Debug, ProtocolConfigAccessors, ProtocolConfigOverride)]

pub

struct

ProtocolConfig

{

pub

version :

ProtocolVersion ,

feature_flags :

FeatureFlags ,

// ==== Transaction input limits ====

/// Maximum serialized size of a transaction (in bytes).

max_tx_size_bytes :

Option < u64 > ,

/// Maximum number of input objects to a transaction. Enforced by the transaction input checker

max_input_objects :

Option < u64 > ,

/// Max size of objects a transaction can write to disk after completion. Enforce by the Sui adapter.

/// This is the sum of the serialized size of all objects written to disk.

/// The max size of individual objects on the other hand is max_move_object_size.

max_size_written_objects :

Option < u64 > ,

/// Max size of objects a system transaction can write to disk after completion. Enforce by the Sui adapter.

/// Similar to max_size_written_objects but for system transactions.

max_size_written_objects_system_tx :

Option < u64 > ,

/// Maximum size of serialized transaction effects.

max_serialized_tx_effects_size_bytes :

Option < u64 > ,

/// Maximum size of serialized transaction effects for system transactions.

max_serialized_tx_effects_size_bytes_system_tx :

Option < u64 > ,

/// Maximum number of gas payment objects for a transaction.

max_gas_payment_objects :

Option < u32 > ,

/// Maximum number of modules in a Publish transaction.

max_modules_in_publish :

Option < u32 > ,

/// Maximum number of transitive dependencies in a package when publishing.

max_package_dependencies :

Option < u32 > ,

/// Maximum number of arguments in a move call or a ProgrammableTransaction's

/// TransferObjects command.

max_arguments :

Option < u32 > ,

/// Maximum number of total type arguments, computed recursively.

max_type_arguments :

Option < u32 > ,

/// Maximum depth of an individual type argument.

max_type_argument_depth :

Option < u32 > ,

/// Maximum size of a Pure CallArg.

max_pure_argument_size :

Option < u32 > ,

/// Maximum number of Commands in a ProgrammableTransaction.

max_programmable_tx_commands :

Option < u32 > ,

// ==== Move VM, Move bytecode verifier, and execution limits ===

/// Maximum Move bytecode version the VM understands. All older versions are accepted.

move_binary_format_version :

Option < u32 > ,

min_move_binary_format_version :

Option < u32 > ,

/// Configuration controlling binary tables size.

binary_module_handles :

Option < u16 > ,

binary_struct_handles :

Option < u16 > ,

binary_function_handles :

Option < u16 > ,

binary_function_instantiations :

Option < u16 > ,

binary_signatures :

Option < u16 > ,

binary_constant_pool :

Option < u16 > ,

binary_identifiers :

Option < u16 > ,

binary_address_identifiers :

Option < u16 > ,

binary_struct_defs :

Option < u16 > ,

binary_struct_def_instantiations :

Option < u16 > ,

binary_function_defs :

Option < u16 > ,

binary_field_handles :

Option < u16 > ,

binary_field_instantiations :

Option < u16 > ,

binary_friend_decls :

Option < u16 > ,

binary_enum_defs :

Option < u16 > ,

binary_enum_def_instantiations :

Option < u16 > ,

binary_variant_handles :

Option < u16 > ,

binary_variant_instantiation_handles :

Option < u16 > ,

/// Maximum size of the contents part of an object, in bytes. Enforced by the Sui adapter when effects are produced.

max_move_object_size :

Option < u64 > ,

// TODO: Option<increase to 500 KB. currently, publishing a package > 500 KB exceeds the max computation gas cost

/// Maximum size of a Move package object, in bytes. Enforced by the Sui adapter at the end of a publish transaction.

max_move_package_size :

Option < u64 > ,

/// Max number of publish or upgrade commands allowed in a programmable transaction block.

max_publish_or_upgrade_per_ptb :

Option < u64 > ,

/// Maximum gas budget in MIST that a transaction can use.

max_tx_gas :

Option < u64 > ,

/// Maximum amount of the proposed gas price in MIST (defined in the transaction).

max_gas_price :

Option < u64 > ,

/// For aborted txns, we cap the gas price at a factor of RGP. This lowers risk of setting higher priority gas price

/// if there's a chance the txn will abort.

max_gas_price_rgp_factor_for_aborted_transactions :

Option < u64 > ,

/// The max computation bucket for gas. This is the max that can be charged for computation.

max_gas_computation_bucket :

Option < u64 > ,

// Define the value used to round up computation gas charges

gas_rounding_step :

Option < u64 > ,

/// Maximum number of nested loops. Enforced by the Move bytecode verifier.

max_loop_depth :

Option < u64 > ,

/// Maximum number of type arguments that can be bound to generic type parameters. Enforced by the Move bytecode verifier.

max_generic_instantiation_length :

Option < u64 > ,

/// Maximum number of parameters that a Move function can have. Enforced by the Move bytecode verifier.

max_function_parameters :

Option < u64 > ,

/// Maximum number of basic blocks that a Move function can have. Enforced by the Move bytecode verifier.

max_basic_blocks :

Option < u64 > ,

/// Maximum stack size value. Enforced by the Move bytecode verifier.

max_value_stack_size :

Option < u64 > ,

/// Maximum number of "type nodes", a metric for how big a SignatureToken will be when expanded into a fully qualified type. Enforced by the Move bytecode verifier.

max_type_nodes :

Option < u64 > ,

/// Maximum number of push instructions in one function. Enforced by the Move bytecode verifier.

max_push_size :

Option < u64 > ,

/// Maximum number of struct definitions in a module. Enforced by the Move bytecode verifier.

max_struct_definitions :

Option < u64 > ,

/// Maximum number of function definitions in a module. Enforced by the Move bytecode verifier.

max_function_definitions :

Option < u64 > ,

/// Maximum number of fields allowed in a struct definition. Enforced by the Move bytecode verifier.

max_fields_in_struct :

Option < u64 > ,

/// Maximum dependency depth. Enforced by the Move linker when loading dependent modules.

max_dependency_depth :

Option < u64 > ,

/// Maximum number of Move events that a single transaction can emit. Enforced by the VM during execution.

max_num_event_emit :

Option < u64 > ,

/// Maximum number of new IDs that a single transaction can create. Enforced by the VM during execution.

max_num_new_move_object_ids :

Option < u64 > ,

/// Maximum number of new IDs that a single system transaction can create. Enforced by the VM during execution.

max_num_new_move_object_ids_system_tx :

Option < u64 > ,

/// Maximum number of IDs that a single transaction can delete. Enforced by the VM during execution.

max_num_deleted_move_object_ids :

Option < u64 > ,

/// Maximum number of IDs that a single system transaction can delete. Enforced by the VM during execution.

max_num_deleted_move_object_ids_system_tx :

Option < u64 > ,

/// Maximum number of IDs that a single transaction can transfer. Enforced by the VM during execution.

max_num_transferred_move_object_ids :

Option < u64 > ,

/// Maximum number of IDs that a single system transaction can transfer. Enforced by the VM during execution.

max_num_transferred_move_object_ids_system_tx :

Option < u64 > ,

/// Maximum size of a Move user event. Enforced by the VM during execution.

max_event_emit_size :

Option < u64 > ,

/// Maximum size of a Move user event. Enforced by the VM during execution.

max_event_emit_size_total :

Option < u64 > ,

/// Maximum length of a vector in Move. Enforced by the VM during execution, and for constants, by the verifier.

max_move_vector_len :

Option < u64 > ,

/// Maximum length of an Identifier in Move. Enforced by the bytecode verifier at signing.

max_move_identifier_len :

Option < u64 > ,

/// Maximum depth of a Move value within the VM.

max_move_value_depth :

Option < u64 > ,

/// Maximum number of variants in an enum. Enforced by the bytecode verifier at signing.

max_move_enum_variants :

Option < u64 > ,

/// Maximum number of back edges in Move function. Enforced by the bytecode verifier at signing.

max_back_edges_per_function :

Option < u64 > ,

/// Maximum number of back edges in Move module. Enforced by the bytecode verifier at signing.

max_back_edges_per_module :

Option < u64 > ,

/// Maximum number of meter ticks spent verifying a Move function. Enforced by the bytecode verifier at signing.

max_verifier_meter_ticks_per_function :

Option < u64 > ,

/// Maximum number of meter ticks spent verifying a Move module. Enforced by the bytecode verifier at signing.

max_meter_ticks_per_module :

Option < u64 > ,

/// Maximum number of meter ticks spent verifying a Move package. Enforced by the bytecode verifier at signing.

max_meter_ticks_per_package :

Option < u64 > ,

// === Object runtime internal operation limits ====

// These affect dynamic fields

/// Maximum number of cached objects in the object runtime ObjectStore. Enforced by object runtime during execution

object_runtime_max_num_cached_objects :

Option < u64 > ,

/// Maximum number of cached objects in the object runtime ObjectStore in system transaction. Enforced by object runtime during execution

object_runtime_max_num_cached_objects_system_tx :

Option < u64 > ,

/// Maximum number of stored objects accessed by object runtime ObjectStore. Enforced by object runtime during execution

object_runtime_max_num_store_entries :

Option < u64 > ,

/// Maximum number of stored objects accessed by object runtime ObjectStore in system transaction. Enforced by object runtime during execution

object_runtime_max_num_store_entries_system_tx :

Option < u64 > ,

// === Execution gas costs ====

/// Base cost for any Sui transaction

base_tx_cost_fixed :

Option < u64 > ,

/// Additional cost for a transaction that publishes a package

/// i.e., the base cost of such a transaction is base_tx_cost_fixed + package_publish_cost_fixed

package_publish_cost_fixed :

Option < u64 > ,

/// Cost per byte of a Move call transaction

/// i.e., the cost of such a transaction is base_cost + (base_tx_cost_per_byte * size)

base_tx_cost_per_byte :

Option < u64 > ,

/// Cost per byte for a transaction that publishes a package

package_publish_cost_per_byte :

Option < u64 > ,

// Per-byte cost of reading an object during transaction execution

obj_access_cost_read_per_byte :

Option < u64 > ,

// Per-byte cost of writing an object during transaction execution

obj_access_cost_mutate_per_byte :

Option < u64 > ,

// Per-byte cost of deleting an object during transaction execution

obj_access_cost_delete_per_byte :

Option < u64 > ,

/// Per-byte cost charged for each input object to a transaction.

/// Meant to approximate the cost of checking locks for each object

// TODO: Option<I'm not sure that this cost makes sense. Checking locks is "free"

// in the sense that an invalid tx that can never be committed/pay gas can

// force validators to check an arbitrary number of locks. If those checks are

// "free" for invalid transactions, why charge for them in valid transactions

// TODO: Option<if we keep this, I think we probably want it to be a fixed cost rather

// than a per-byte cost. checking an object lock should not require loading an

// entire object, just consulting an ID -> tx digest map

obj_access_cost_verify_per_byte :

Option < u64 > ,

// Maximal nodes which are allowed when converting to a type layout.

max_type_to_layout_nodes :

Option < u64 > ,

// Maximal size in bytes that a PTB value can be

max_ptb_value_size :

Option < u64 > ,

// === Gas version. gas model ===

/// Gas model version, what code we are using to charge gas

gas_model_version :

Option < u64 > ,

// === Storage gas costs ===

/// Per-byte cost of storing an object in the Sui global object store. Some of this cost may be refundable if the object is later freed

obj_data_cost_refundable :

Option < u64 > ,

// Per-byte cost of storing an object in the Sui transaction log (e.g., in CertifiedTransactionEffects)

// This depends on the size of various fields including the effects

// TODO: Option<I don't fully understand this^ and more details would be useful

obj_metadata_cost_non_refundable :

Option < u64 > ,

// === Tokenomics ===

// TODO: Option<this should be changed to u64.

/// Sender of a txn that touches an object will get this percent of the storage rebate back.

/// In basis point.

storage_rebate_rate :

Option < u64 > ,

/// 5% of the storage fund's share of rewards are reinvested into the storage fund.

/// In basis point.

storage_fund_reinvest_rate :

Option < u64 > ,

/// The share of rewards that will be slashed and redistributed is 50%.

/// In basis point.

reward_slashing_rate :

Option < u64 > ,

/// Unit gas price, Mist per internal gas unit.

storage_gas_price :

Option < u64 > ,

/// Per-object storage cost for accumulator objects, used during end-of-epoch accounting.

accumulator_object_storage_cost :

Option < u64 > ,

// === Core Protocol ===

/// Max number of transactions per checkpoint.

/// Note that this is a protocol constant and not a config as validators must have this set to

/// the same value, otherwise they will fork.

max_transactions_per_checkpoint :

Option < u64 > ,

/// Max size of a checkpoint in bytes.

/// Note that this is a protocol constant and not a config as validators must have this set to

/// the same value, otherwise they will fork.

max_checkpoint_size_bytes :

Option < u64 > ,

/// A protocol upgrade always requires 2f+1 stake to agree. We support a buffer of additional

/// stake (as a fraction of f, expressed in basis points) that is required before an upgrade

/// can happen automatically. 10000bps would indicate that complete unanimity is required (all

/// 3f+1 must vote), while 0bps would indicate that 2f+1 is sufficient.

buffer_stake_for_protocol_upgrade_bps :

Option < u64 > ,

// === Native Function Costs ===

// address module

// Cost params for the Move native function address::from_bytes(bytes: vector&lt;u8&gt;)

address_from_bytes_cost_base :

Option < u64 > ,

// Cost params for the Move native function address::to_u256(address): u256

address_to_u256_cost_base :

Option < u64 > ,

// Cost params for the Move native function address::from_u256(u256): address

address_from_u256_cost_base :

Option < u64 > ,

// config module

// Cost params for the Move native function `read_setting_impl<Name: copy + drop + store,

// SettingValue: key + store, SettingDataValue: store, Value: copy + drop + store,

// >(config: address, name: address, current_epoch: u64): Option<Value>`

config_read_setting_impl_cost_base :

Option < u64 > ,

config_read_setting_impl_cost_per_byte :

Option < u64 > ,

// dynamic_field module

// Cost params for the Move native function hash_type_and_key&lt;K: copy + drop + store&gt;(parent: address, k: K): address

dynamic_field_hash_type_and_key_cost_base :

Option < u64 > ,

dynamic_field_hash_type_and_key_type_cost_per_byte :

Option < u64 > ,

dynamic_field_hash_type_and_key_value_cost_per_byte :

Option < u64 > ,

dynamic_field_hash_type_and_key_type_tag_cost_per_byte :

Option < u64 > ,

// Cost params for the Move native function add_child_object&lt;Child: key&gt;(parent: address, child: Child)

dynamic_field_add_child_object_cost_base :

Option < u64 > ,

dynamic_field_add_child_object_type_cost_per_byte :

Option < u64 > ,

dynamic_field_add_child_object_value_cost_per_byte :

Option < u64 > ,

dynamic_field_add_child_object_struct_tag_cost_per_byte :

Option < u64 > ,

// Cost params for the Move native function borrow_child_object_mut&lt;Child: key&gt;(parent: &amp;mut UID, id: address): &amp;mut Child

dynamic_field_borrow_child_object_cost_base :

Option < u64 > ,

dynamic_field_borrow_child_object_child_ref_cost_per_byte :

Option < u64 > ,

dynamic_field_borrow_child_object_type_cost_per_byte :

Option < u64 > ,

// Cost params for the Move native function remove_child_object&lt;Child: key&gt;(parent: address, id: address): Child

dynamic_field_remove_child_object_cost_base :

Option < u64 > ,

dynamic_field_remove_child_object_child_cost_per_byte :

Option < u64 > ,

dynamic_field_remove_child_object_type_cost_per_byte :

Option < u64 > ,

// Cost params for the Move native function has_child_object(parent: address, id: address): bool

dynamic_field_has_child_object_cost_base :

Option < u64 > ,

// Cost params for the Move native function has_child_object_with_ty&lt;Child: key&gt;(parent: address, id: address): bool

dynamic_field_has_child_object_with_ty_cost_base :

Option < u64 > ,

dynamic_field_has_child_object_with_ty_type_cost_per_byte :

Option < u64 > ,

dynamic_field_has_child_object_with_ty_type_tag_cost_per_byte :

Option < u64 > ,

// event module

// Cost params for the Move native function event::emit&lt;T: copy + drop&gt;(event: T)

event_emit_cost_base :

Option < u64 > ,

event_emit_value_size_derivation_cost_per_byte :

Option < u64 > ,

event_emit_tag_size_derivation_cost_per_byte :

Option < u64 > ,

event_emit_output_cost_per_byte :

Option < u64 > ,

event_emit_auth_stream_cost :

Option < u64 > ,

// object module

// Cost params for the Move native function borrow_uid&lt;T: key&gt;(obj: &amp;T): &amp;UID

object_borrow_uid_cost_base :

Option < u64 > ,

// Cost params for the Move native function delete_impl(id: address)

object_delete_impl_cost_base :

Option < u64 > ,

// Cost params for the Move native function record_new_uid(id: address)

object_record_new_uid_cost_base :

Option < u64 > ,

// Transfer

// Cost params for the Move native function transfer_impl&lt;T: key&gt;(obj: T, recipient: address)

transfer_transfer_internal_cost_base :

Option < u64 > ,

// Cost params for the Move native function party_transfer_impl&lt;T: key&gt;(obj: T, party_members: vector&lt;address&gt;)

transfer_party_transfer_internal_cost_base :

Option < u64 > ,

// Cost params for the Move native function freeze_object&lt;T: key&gt;(obj: T)

transfer_freeze_object_cost_base :

Option < u64 > ,

// Cost params for the Move native function share_object&lt;T: key&gt;(obj: T)

transfer_share_object_cost_base :

Option < u64 > ,

// Cost params for the Move native function

// receive_object&lt;T: key&gt;(p: &amp;mut UID, recv: Receiving&lt;T&gt;T)

transfer_receive_object_cost_base :

Option < u64 > ,

// TxContext

// Cost params for the Move native function transfer_impl&lt;T: key&gt;(obj: T, recipient: address)

tx_context_derive_id_cost_base :

Option < u64 > ,

tx_context_fresh_id_cost_base :

Option < u64 > ,

tx_context_sender_cost_base :

Option < u64 > ,

tx_context_epoch_cost_base :

Option < u64 > ,

tx_context_epoch_timestamp_ms_cost_base :

Option < u64 > ,

tx_context_sponsor_cost_base :

Option < u64 > ,

tx_context_rgp_cost_base :

Option < u64 > ,

tx_context_gas_price_cost_base :

Option < u64 > ,

tx_context_gas_budget_cost_base :

Option < u64 > ,

tx_context_ids_created_cost_base :

Option < u64 > ,

tx_context_replace_cost_base :

Option < u64 > ,

// Types

// Cost params for the Move native function is_one_time_witness&lt;T: drop&gt;(_: &amp;T): bool

types_is_one_time_witness_cost_base :

Option < u64 > ,

types_is_one_time_witness_type_tag_cost_per_byte :

Option < u64 > ,

types_is_one_time_witness_type_cost_per_byte :

Option < u64 > ,

// Validator

// Cost params for the Move native function validate_metadata_bcs(metadata: vector&lt;u8&gt;)

validator_validate_metadata_cost_base :

Option < u64 > ,

validator_validate_metadata_data_cost_per_byte :

Option < u64 > ,

// Crypto natives

crypto_invalid_arguments_cost :

Option < u64 > ,

// bls12381::bls12381_min_sig_verify

bls12381_bls12381_min_sig_verify_cost_base :

Option < u64 > ,

bls12381_bls12381_min_sig_verify_msg_cost_per_byte :

Option < u64 > ,

bls12381_bls12381_min_sig_verify_msg_cost_per_block :

Option < u64 > ,

// bls12381::bls12381_min_pk_verify

bls12381_bls12381_min_pk_verify_cost_base :

Option < u64 > ,

bls12381_bls12381_min_pk_verify_msg_cost_per_byte :

Option < u64 > ,

bls12381_bls12381_min_pk_verify_msg_cost_per_block :

Option < u64 > ,

// ecdsa_k1::ecrecover

ecdsa_k1_ecrecover_keccak256_cost_base :

Option < u64 > ,

ecdsa_k1_ecrecover_keccak256_msg_cost_per_byte :

Option < u64 > ,

ecdsa_k1_ecrecover_keccak256_msg_cost_per_block :

Option < u64 > ,

ecdsa_k1_ecrecover_sha256_cost_base :

Option < u64 > ,

ecdsa_k1_ecrecover_sha256_msg_cost_per_byte :

Option < u64 > ,

ecdsa_k1_ecrecover_sha256_msg_cost_per_block :

Option < u64 > ,

// ecdsa_k1::decompress_pubkey

ecdsa_k1_decompress_pubkey_cost_base :

Option < u64 > ,

// ecdsa_k1::secp256k1_verify

ecdsa_k1_secp256k1_verify_keccak256_cost_base :

Option < u64 > ,

ecdsa_k1_secp256k1_verify_keccak256_msg_cost_per_byte :

Option < u64 > ,

ecdsa_k1_secp256k1_verify_keccak256_msg_cost_per_block :

Option < u64 > ,

ecdsa_k1_secp256k1_verify_sha256_cost_base :

Option < u64 > ,

ecdsa_k1_secp256k1_verify_sha256_msg_cost_per_byte :

Option < u64 > ,

ecdsa_k1_secp256k1_verify_sha256_msg_cost_per_block :

Option < u64 > ,

// ecdsa_r1::ecrecover

ecdsa_r1_ecrecover_keccak256_cost_base :

Option < u64 > ,

ecdsa_r1_ecrecover_keccak256_msg_cost_per_byte :

Option < u64 > ,

ecdsa_r1_ecrecover_keccak256_msg_cost_per_block :

Option < u64 > ,

ecdsa_r1_ecrecover_sha256_cost_base :

Option < u64 > ,

ecdsa_r1_ecrecover_sha256_msg_cost_per_byte :

Option < u64 > ,

ecdsa_r1_ecrecover_sha256_msg_cost_per_block :

Option < u64 > ,

// ecdsa_r1::secp256k1_verify

ecdsa_r1_secp256r1_verify_keccak256_cost_base :

Option < u64 > ,

ecdsa_r1_secp256r1_verify_keccak256_msg_cost_per_byte :

Option < u64 > ,

ecdsa_r1_secp256r1_verify_keccak256_msg_cost_per_block :

Option < u64 > ,

ecdsa_r1_secp256r1_verify_sha256_cost_base :

Option < u64 > ,

ecdsa_r1_secp256r1_verify_sha256_msg_cost_per_byte :

Option < u64 > ,

ecdsa_r1_secp256r1_verify_sha256_msg_cost_per_block :

Option < u64 > ,

// ecvrf::verify

ecvrf_ecvrf_verify_cost_base :

Option < u64 > ,

ecvrf_ecvrf_verify_alpha_string_cost_per_byte :

Option < u64 > ,

ecvrf_ecvrf_verify_alpha_string_cost_per_block :

Option < u64 > ,

// ed25519

ed25519_ed25519_verify_cost_base :

Option < u64 > ,

ed25519_ed25519_verify_msg_cost_per_byte :

Option < u64 > ,

ed25519_ed25519_verify_msg_cost_per_block :

Option < u64 > ,

// groth16::prepare_verifying_key

groth16_prepare_verifying_key_bls12381_cost_base :

Option < u64 > ,

groth16_prepare_verifying_key_bn254_cost_base :

Option < u64 > ,

// groth16::verify_groth16_proof_internal

groth16_verify_groth16_proof_internal_bls12381_cost_base :

Option < u64 > ,

groth16_verify_groth16_proof_internal_bls12381_cost_per_public_input :

Option < u64 > ,

groth16_verify_groth16_proof_internal_bn254_cost_base :

Option < u64 > ,

groth16_verify_groth16_proof_internal_bn254_cost_per_public_input :

Option < u64 > ,

groth16_verify_groth16_proof_internal_public_input_cost_per_byte :

Option < u64 > ,

// hash::blake2b256

hash_blake2b256_cost_base :

Option < u64 > ,

hash_blake2b256_data_cost_per_byte :

Option < u64 > ,

hash_blake2b256_data_cost_per_block :

Option < u64 > ,

// hash::keccak256

hash_keccak256_cost_base :

Option < u64 > ,

hash_keccak256_data_cost_per_byte :

Option < u64 > ,

hash_keccak256_data_cost_per_block :

Option < u64 > ,

// poseidon::poseidon_bn254

poseidon_bn254_cost_base :

Option < u64 > ,

poseidon_bn254_cost_per_block :

Option < u64 > ,

// group_ops

group_ops_bls12381_decode_scalar_cost :

Option < u64 > ,

group_ops_bls12381_decode_g1_cost :

Option < u64 > ,

group_ops_bls12381_decode_g2_cost :

Option < u64 > ,

group_ops_bls12381_decode_gt_cost :

Option < u64 > ,

group_ops_bls12381_scalar_add_cost :

Option < u64 > ,

group_ops_bls12381_g1_add_cost :

Option < u64 > ,

group_ops_bls12381_g2_add_cost :

Option < u64 > ,

group_ops_bls12381_gt_add_cost :

Option < u64 > ,

group_ops_bls12381_scalar_sub_cost :

Option < u64 > ,

group_ops_bls12381_g1_sub_cost :

Option < u64 > ,

group_ops_bls12381_g2_sub_cost :

Option < u64 > ,

group_ops_bls12381_gt_sub_cost :

Option < u64 > ,

group_ops_bls12381_scalar_mul_cost :

Option < u64 > ,

group_ops_bls12381_g1_mul_cost :

Option < u64 > ,

group_ops_bls12381_g2_mul_cost :

Option < u64 > ,

group_ops_bls12381_gt_mul_cost :

Option < u64 > ,

group_ops_bls12381_scalar_div_cost :

Option < u64 > ,

group_ops_bls12381_g1_div_cost :

Option < u64 > ,

group_ops_bls12381_g2_div_cost :

Option < u64 > ,

group_ops_bls12381_gt_div_cost :

Option < u64 > ,

group_ops_bls12381_g1_hash_to_base_cost :

Option < u64 > ,

group_ops_bls12381_g2_hash_to_base_cost :

Option < u64 > ,

group_ops_bls12381_g1_hash_to_cost_per_byte :

Option < u64 > ,

group_ops_bls12381_g2_hash_to_cost_per_byte :

Option < u64 > ,

group_ops_bls12381_g1_msm_base_cost :

Option < u64 > ,

group_ops_bls12381_g2_msm_base_cost :

Option < u64 > ,

group_ops_bls12381_g1_msm_base_cost_per_input :

Option < u64 > ,

group_ops_bls12381_g2_msm_base_cost_per_input :

Option < u64 > ,

group_ops_bls12381_msm_max_len :

Option < u32 > ,

group_ops_bls12381_pairing_cost :

Option < u64 > ,

group_ops_bls12381_g1_to_uncompressed_g1_cost :

Option < u64 > ,

group_ops_bls12381_uncompressed_g1_to_g1_cost :

Option < u64 > ,

group_ops_bls12381_uncompressed_g1_sum_base_cost :

Option < u64 > ,

group_ops_bls12381_uncompressed_g1_sum_cost_per_term :

Option < u64 > ,

group_ops_bls12381_uncompressed_g1_sum_max_terms :

Option < u64 > ,

group_ops_ristretto_decode_scalar_cost :

Option < u64 > ,

group_ops_ristretto_decode_point_cost :

Option < u64 > ,

group_ops_ristretto_scalar_add_cost :

Option < u64 > ,

group_ops_ristretto_point_add_cost :

Option < u64 > ,

group_ops_ristretto_scalar_sub_cost :

Option < u64 > ,

group_ops_ristretto_point_sub_cost :

Option < u64 > ,

group_ops_ristretto_scalar_mul_cost :

Option < u64 > ,

group_ops_ristretto_point_mul_cost :

Option < u64 > ,

group_ops_ristretto_scalar_div_cost :

Option < u64 > ,

group_ops_ristretto_point_div_cost :

Option < u64 > ,

// hmac::hmac_sha3_256

hmac_hmac_sha3_256_cost_base :

Option < u64 > ,

hmac_hmac_sha3_256_input_cost_per_byte :

Option < u64 > ,

hmac_hmac_sha3_256_input_cost_per_block :

Option < u64 > ,

// zklogin::check_zklogin_id

check_zklogin_id_cost_base :

Option < u64 > ,

// zklogin::check_zklogin_issuer

check_zklogin_issuer_cost_base :

Option < u64 > ,

vdf_verify_vdf_cost :

Option < u64 > ,

vdf_hash_to_input_cost :

Option < u64 > ,

// nitro_attestation::load_nitro_attestation

nitro_attestation_parse_base_cost :

Option < u64 > ,

nitro_attestation_parse_cost_per_byte :

Option < u64 > ,

nitro_attestation_verify_base_cost :

Option < u64 > ,

nitro_attestation_verify_cost_per_cert :

Option < u64 > ,

// Stdlib costs

bcs_per_byte_serialized_cost :

Option < u64 > ,

bcs_legacy_min_output_size_cost :

Option < u64 > ,

bcs_failure_cost :

Option < u64 > ,

hash_sha2_256_base_cost :

Option < u64 > ,

hash_sha2_256_per_byte_cost :

Option < u64 > ,

hash_sha2_256_legacy_min_input_len_cost :

Option < u64 > ,

hash_sha3_256_base_cost :

Option < u64 > ,

hash_sha3_256_per_byte_cost :

Option < u64 > ,

hash_sha3_256_legacy_min_input_len_cost :

Option < u64 > ,

type_name_get_base_cost :

Optio