Move is a safe and secure Web3 programming language that places a strong emphasis on access control and scarcity. Resources can be used to represent or store any assets in Move. Since structs cannot be mistakenly duplicated or discarded, scarcity is enforced by default. Only structs that have been expressly designated as copy or drop at the bytecode layer may be duplicated or dropped.
Accounts and module access privileges are both sources of access control. A library or a program that can produce, store, or transfer assets can both be considered modules in Move. Move makes sure that other modules can only access the public module functionalities. The only place a struct can be built is inside the module if it doesn’t have a public constructor.