In the fourth video of Encode Club’s Sui series, we describe two very useful features, dynamic fields and collections. These features add considerable flexibility to Sui’s object data model.

The Sui Foundation partnered with Encode Club to offer a series of six developer-focused videos. This series will range from the basics of Sui to tutorials about building smart contracts and working with objects in Sui.

Learning Highlights

Although Sui’s object data model is a great strength, manipulating and architecting how those objects fit in a programming framework has its own challenges. Two features, dynamic fields and collections, create much more flexibility when defining objects on Sui.

Review: Object Wrapping

Objects can own other objects in Sui, but an object wrapping another object is a different concept.

struct A has key {
id: UID,
b: B
}

struct B has key, store { id: UID }

In the example above, an object of type B is wrapped into an object of type A. With object wrapping, the wrapped object (in our example, object B), is not stored as a top-level object. As such, it is not accessible via its object ID, and as a result any API interacting with this object (i.e. via a frontend) will not be able to access object B directly.

There are a few shortcomings with this approach:

  • Objects have a finite number of fields. These are the fields in the struct declarations.
  • Objects wrapping other objects can become very large, resulting in higher gas fees. There is also an upper limit on an object’s size.
  • It is impossible to store a collection of heterogeneous objects (objects of varying types) via object wrapping. Because the Move vector type must be instantiated with a single type T, heterogeneous collections are not supported using vectors.

Dynamic Fields

Dynamic fields solve the aforementioned problems. Dynamic fields have arbitrary names, and are added and removed ad hoc. With regards to gas, you only pay for what you access, not what you could access. Dynamic fields also support heterogeneous types, making it possible to store un-like types within a certain object.

Dynamic fields come in two different varieties: fields and object fields. Fields can store any value with store. These Fields are not stand-alone objects, and cannot be accessed through their IDs from an external API. Object fields, on the other hand, must have key,store following their struct declaration. The advantage to the latter is that the objects keep their same object ID, and can still be read from external APIs.

Read the Sui documentation on dynamic fields for a more thorough description.

Collections

Dynamic fields introduced a way to extend existing objects, and collections take this a step further. Collections are built on top of dynamic fields, and they enable additional support to count the number of entries they contain, as well as protecting against accidental non-empty deletion.

Collections support both homogeneous and heterogeneous values. The homogeneous collection type is Table. All values stored in Table must be of the same type. The heterogeneous collection type is Bag. Values stored in Bag can be of any type. Similar to dynamic fields and dynamic object fields, table and bag also offer an object-only version: object_table and object_bag. Where all values for table and bag must only have store, all values for object_table and object_bag must have key,store.

Read the Sui documentation on collections for a more thorough description.

Join Us at the Vietnam Builder House

Learn more about Sui and network with its founders and other developers! The Sui Foundation is hosting our next Builder House in Vietnam, from March 18 to 19, 2023. Expect educational presentations, a challenge featuring prizes, and other fun activities.

Register today before we hit capacity!

Watch the Whole Series

  1. What's Sui?
  2. Smart Contracts
  3. Creating Objects and NFTs
  4. Dynamic Fields and Collections
  5. RPG Building Basics
  6. Deploy a Game to the Blockchain
Author

Sam Blackshear

Co-Founder, CTO, Mysten Labs, Creator of Move Language

CTO of Mysten Labs and inventor of Move language. Former Principal Engineer at Meta.

Read more like this

Chirp Untangles the Messy World of IoT

With Chirp’s decentralized infrastructure, IoT devices from different manufacturers can finally work together, streamlining real-world applications.

5min read
Sui Foundation

SuiNS Retroactive Rewards Airdrop

SuiNS is recognizing its earliest active community members with a new retroactive airdrop of staked NS.

2min read
Abhinav Garg

Top 10 Most Popular Sui Articles of 2023

Reviewing the Sui Foundation blog's most read articles in 2023.

3min read
Sui Foundation

Announcing APAC Office Hours for Builders

Builders ready to take the next step with their business are invited to Office Hours with Sui Foundation's Growth team.

2min read
Sui Foundation

Announcing Sui Wallet

The open-sourced Sui Wallet gives Sui users the ability to create an address, view and manage assets on the Sui network, and interact with dApps.

1min read
Sui Foundation

21shares Lists 2x Leveraged SUI ETF (TXXS) on Nasdaq

The first leveraged SUI ETF brings investors a new option for exposure to SUI

2min read
Sui Foundation