sui-move-object

Enforce Suit Move object-struct definitions, ownership behavior, and dynamic field usage.

4|Updated Feb 13, 2026
One-click install
npx skills add https://github.com/widnyana/eyay-toolkits --skill sui-move-object
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: sui-move-object
Source: https://github.com/widnyana/eyay-toolkits/tree/main/plugins/sui-dev-tools/skills/sui-move-object
Command: npx skills add https://github.com/widnyana/eyay-toolkits --skill sui-move-object

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve?

Building Sui Move packages often fails due to subtle object-model mistakes like incorrect abilities, invalid field ordering, or unsafe UID construction, which can break ownership, transfers, and interoperability.

Core Features & Use Cases

  • Correct struct and ability declarations: Enforces public structs, capability field placement rules, and consistent ability usage (key, store, copy, drop) to align with the Sui object system.
  • Object ownership and transfer guidance: Clarifies which transfer functions are allowed in-module vs public variants, covering owned objects, shared objects, and frozen objects.
  • Dynamic field patterns: Provides canonical approaches for dynamic field and dynamic object field storage and access when keys are extensible or unknown at compile time.
  • Naming conventions for clarity and safety: Standardizes capability suffixing (Cap), error constant casing (EPascalCase), events’ past-tense naming, and dynamic field key struct patterns.

Quick Start

Use the skill’s rules to define your public struct types with the correct abilities (including id: UID as the first field for key structs), then route ownership changes using the appropriate transfer functions and store extensible state via dynamic fields.

Frequently Asked Questions about sui-move-object

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I define a Sui Move struct with the correct key and store capabilities?

To define a Sui Move struct with key capabilities, declare it as a public struct and place `id: UID` as the first field. You must construct this UID using `object::new` and apply consistent ability usage like `store` to ensure safe on-chain semantics.

Why does my Sui Move package fail compilation when transferring object ownership?

Sui Move packages fail compilation due to invalid object ownership transfers when using incorrect transfer function scoping. You must use in-module transfer functions for owned objects, and apply public variants correctly for shared or frozen objects to prevent unsafe semantics.

What naming conventions should I follow for Sui Move capabilities and events?

Sui Move naming conventions require standardizing capability suffixes with `Cap`, error constants in `EPascalCase`, and events using past-tense naming. Following these rules ensures clarity and safety, preventing semantic errors in dynamic field key struct patterns.

When should I use dynamic fields instead of standard struct fields in Sui Move?

Use dynamic fields in Sui Move when extensible storage is needed and keys are unknown at compile time. They provide canonical access patterns via `sui::dynamic_field` without requiring changes to existing public struct definitions, avoiding compilation errors.

What are the limitations of using shared objects versus owned objects in Sui Move?

Shared objects in Sui Move require specific public transfer function scoping, whereas owned objects are restricted to in-module transfers. Misapplying these transfer flows breaks ownership semantics and causes unsafe on-chain behavior or compilation failures.