Structs

  • Normalized version of a FieldDefinition. The name is included even though it is metadata that it is ignored by the VM. The reason: names are important to clients. We would want a change from Account { bal: u64, seq: u64 } to Account { seq: u64, bal: u64 } to be marked as incompatible. Not safe to compare without an enclosing Struct.
  • Normalized version of a FunctionDefinition. Not safe to compare without an associated ModuleId or Module.
  • Normalized version of a CompiledModule: its address, name, struct declarations, and public function declarations.
  • Normalized version of a StructDefinition. Not safe to compare without an associated ModuleId or Module.

Enums

  • Defines normalized representations of Move types, fields, kinds, structs, functions, and modules. These representations are useful in situations that require require comparing functions, resources, and types across modules. This arises in linking, compatibility checks (e.g., “is it safe to deploy this new module without updating its dependents and/or restarting genesis?”), defining schemas for resources stored on-chain, and (possibly in the future) allowing module updates transactions. A normalized version of SignatureToken, a type expression appearing in struct or function declarations. Unlike SignatureTokens, normalized::Types from different modules can safely be compared.