Ownership Types
Every object in Sui has one of four ownership types:Owned
Owned by a single address
Shared
Shared among all users
Frozen
Immutable and permanently read-only
Wrapped
Contained within another object
Owned Objects
Objects owned by a single address can be used in transactions without consensus, enabling fast-path execution.Creating Owned Objects
Transferring Ownership
Sui provides two transfer functions based on visibility requirements:- Module-Private
- Public Transfer
Use
transfer::transfer for objects defined in your module:The distinction between
transfer and public_transfer allows module authors to control how their objects can be transferred, enabling custom transfer logic and restrictions.Fast-Path Execution
Owned objects enable Sui’s fastest transaction mode:- No consensus required - Validators process independently
- Sub-second finality - Transactions complete in ~400ms
- Parallel execution - Multiple transactions can process simultaneously
Shared Objects
Shared objects are accessible by anyone but require consensus for modifications.Creating Shared Objects
Shared Object Restrictions
From the source code:- Wrapped inside other objects
- Frozen
- Converted to owned objects
Transaction Arguments
Shared objects require special handling in transactions:Frozen Objects
Frozen objects are permanently immutable and can be read by anyone.Freezing Objects
Use Cases for Frozen Objects
Metadata Objects
Metadata Objects
Perfect for NFT metadata or token information that should never change:
Configuration Constants
Configuration Constants
Store protocol parameters or constants that should be globally readable but never modified.
Permanent Records
Permanent Records
Create immutable historical records or certificates.
Wrapped Objects
Wrapped objects exist inside other objects and are invisible to the outside world.Wrapping and Unwrapping
Characteristics of Wrapped Objects
Not Directly Accessible
Cannot be used as transaction inputs
Version Unchanged
Version number doesn’t increment while wrapped
Storage Efficient
Counted as part of parent object’s storage
Secure Encapsulation
Only accessible through parent object’s API
Party Transfer (Advanced)
Sui supports party-based transfers for fine-grained access control:Receiving Objects
Sui supports receiving objects sent to other objects:Ownership and Abilities
Thestore ability determines transferability:
- With store
- Without store
Objects with
store can be:- Transferred with
public_transfer - Stored in other objects
- Freely moved around
Best Practices
Choose the right ownership type
Choose the right ownership type
- Owned: For user-specific assets (NFTs, personal tokens)
- Shared: For multi-user protocols (DEX pools, governance)
- Frozen: For immutable configuration or metadata
- Wrapped: For composition and encapsulation
Be careful with irreversible operations
Be careful with irreversible operations
These operations cannot be undone:
- Sharing an object
- Freezing an object
- Deleting an object
Related Topics
Objects
Understand Sui’s object model
Dynamic Fields
Extend objects dynamically
Transactions
Learn about transaction structure