January 26, 2023

🌊SUI MOVE, 5 Differences that Core Move cannot resist?

Hey guys, hi, you’re on Mr. Atlanta. Atlanta. And with you is your unique and just friendly Atlant. So, in this article we will continue to study the SUI project. If you want more specifics, then you will find a lot of interesting and useful information that will relate to the following question:

💧How does SUI move differ from CORE move? 5 features that Core move cannot resist? Let’s go!

Before we start, let’s clarify that

💎Move is a language and Sui is a platform.

And now, moving on…

🌊5 DIFFERENCES of SUI MOVE from CORE move?

💎_Difference 1_💎 Sui uses its own object-oriented global storage

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

💦Explanation:

💧Firstly, what I would like to point out is that on the basic Move system, global storage is part of the programming model, and it can be accessed using special operations such as move_to , move_from and many other global storage operators .

💧Second, resources and modules are stored in the main global Move repository. If you publish a module, it is stored in the newly generated module address in Move, and in the case when you create a new object, it is usually also stored at some address.

💧 Thirdly, I would like to emphasize an important aspect that will concern the limitation and cost. Based on this, blockchains cannot scale to handle applications that take up a large amount of memory, such as marketplaces and social applications.

Based on our speculations, statements… I want to summarize it all in the conclusion. So…

☯️Conclusion:

👉That’s why looking at all the problems I mentioned above, Sui Move does not have a global storage. And none of the global storage related operations are allowed in Sui Move.

💎_Difference 2_💎 Addresses represent object identifiers

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

💦Explanation:

To begin with, the fact that Move has a special type of address (at some point it is a burden) This type is used to represent addresses in the basic Move.

💧As a vivid example, I will give on Core move. When working with global storage, Core Move needs to know the account address. The address type is 16 bytes, which is enough for the basic Move security model.

☯️Conclusion:

👉Taking a look at Sui… Sui does not support global storage in Move because we do not need an address type to represent user accounts. Instead, we use the address type to represent the object ID. Refer to the object.move file in the Sui framework to understand the use of address.

💎_Difference 3_💎 Sui objects have globally unique identifiers

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

☯️Why do we need Move?

It’s very simple, because SUI needs a way to distinguish between objects that are internal to Move and objects that can be transferred across the Move-Sui boundary (i.e. objects that can be stored in Sui storage).

💧Why, I put such emphasis on this because?

👉This is important, we need to be able to serialize/deserialize objects within Move-Sui and this process makes assumptions about the shape of the objects.

💦Explanation:

The SUI team takes advantage of a key feature in Move to annotate a Sui object.

💧To make it more clear, the following example will do:

👉In basic Move, the key feature is used to say that a type can be used as a key for global storage. Since we don’t touch global storage in Sui Move, we can repurpose this ability. We require that any structure with a key capability starts with an identifier field with an identifier type (this is to make sure that the identifier field is immutable and cannot be passed to other objects) because each object must have a unique identifier.

💎_Difference 4_💎 Sui has module initializers (init)

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

💧If we go back to the description of the Object Oriented Global Repository , we will notice that Move modules are published to the Sui repository.

💦Explanation:

👉A special initializer function, not necessarily defined in the module, is executed (once) when the module is published by the Sui runtime in order to pre-initialize module-specific data (e.g. create single objects). The initializer function must have the following properties to be executed during publication:
👉- Name: init👉- Single parameter &mut TxContext of type👉- No returned values👉- Private

And….

💎_Difference 5_💎 Sui entry points accept object references as input

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

💦I will have only one explanation for this difference.

💧So, Sui offers login functions that can be called directly from Sui, in addition to functions that can be called from other functions.

And now, I propose to summarize everything we have said above. So…

🌊SUMMARY:

💦I believe we have clearly analyzed all the points that CORE MOVE cannot be next to SUI MOVE.

👉Because Sui takes advantage of the security and flexibility of Move and enhances it with the features we described above to significantly increase throughput, reduce latency and make Move easier to program.

💎I have made my choice and it is SUI. I will continue to support this project in every possible way, by all possible methods. I advise you, my subscribers, to subscribe to all the social networks of the Sui project in order not to miss a lot of interesting information and opportunities to earn extra money by doing testnet or participating in other activities (showing interest in the project in every possible way):)

So, that’s all I have to say. I was glad to be useful for you, see you in the next issue. Bye!

💎 About SUI:

Website |Developer | Documentation| Github| Discord

💎Mysten Labs:

Website| Twitter| Medium