Evolution of Move
Move was created at Diem to manage digital assets, and its original storage model reflected the design of that blockchain. Storage was account-based: every piece of data - called a resource - lived under an account address, and a module could store, read, and remove resources only under the accounts that interacted with it. In its original form, Move had dedicated global storage operators for this, and a resource could only be placed under an account if that account agreed to it by signing a transaction.
This model had practical consequences that made everyday asset operations surprisingly hard:
- There was no built-in transfer operation. If Alice wanted to send an asset X to Bob, the module defining X had to implement transfer logic itself: Bob first had to publish an "empty" resource under his account (agreeing to receive the asset), and only then could Alice's transaction move the balance into it. Every module reinvented this dance.
- Assets were stored per-type, per-account. Managing a heterogeneous collection - say, a single account holding many different kinds of items - required significant effort and preparation for each new type.
- Because data lived under accounts, an asset did not have an identity of its own: there was no way to point at "this specific item" and follow it across owners.
Sui addressed these challenges by redesigning the storage model around the assets themselves. In Sui, the unit of storage is not an account but an object - a typed value with its own unique identifier and an owner recorded by the system. Ownership and transfer became native operations: Alice can directly transfer asset X to Bob, without Bob preparing anything in advance, and Bob can hold any number of assets of any types. The global storage operators of the original Move are absent in Move on Sui - in the Using Objects chapter, we will see that they are replaced by functions operating on objects.
These changes laid the foundation for the Object Model, which we describe in the next section.
Summary
- Original Move used account-based global storage: resources lived under account addresses, there was no native transfer operation, and heterogeneous collections were hard to manage.
- Sui redesigned storage around objects - typed values with their own identity and system-tracked ownership - making transfer a native operation.
- Move on Sui removes the global storage operators, replacing them with object storage functions.
Further Reading
- Why We Created Sui Move by Sam Blackshear