Skip to main content

Kepemilikan Object (Objects Ownership)

Setelah memahami dasar object dan cara menggunakannya, sekarang kita lihat model kepemilikan (ownership) yang mempengaruhi siapa boleh mengakses dan bagaimana keamanan objek diatur.

Tipe Kepemilikan

  1. Address-owned
  2. Dynamic fields
  3. Immutable
  4. Shared
  5. Wrapped

Kita bahas inti-intinya.

Address-owned

Dimiliki oleh satu alamat (32-byte address). Hanya pemilik yang bisa memodifikasi / mengoperasikannya.

transfer::transfer(obj: T, recipient: address)
transfer::public_transfer(obj: T, recipient: address)

Panduan:

  1. Gunakan transfer jika kamu ingin kebijakan khusus (objek hanya key tanpa store).
  2. Gunakan public_transfer bila objek punya store.

Immutable Object

Tidak punya owner, tidak bisa dipindah atau dihapus.

public native fun public_freeze_object(obj: T)

Setelah dibekukan jadi immutable, tidak bisa kembali mutable. Namun masih bisa dipakai sebagai parameter referensi read-only.

Shared Object

Objek yang dapat diakses siapa saja di jaringan.

transfer::share_object(obj: T)

Wrapped Objects

Menaruh struct di dalam struct lain:

public struct Foo has key { id: UID, bar: Bar }
public struct Bar has store { value: u64 }

Foo adalah Sui object (punya key), Bar bukan (tidak ada key). Jika ingin Bar juga menjadi Sui object, tambahkan key dan id.

Dynamic Object Fields (Gambaran Singkat)

Keterbatasan:

  1. Field objek statis setelah module dipublish.
  2. Membungkus banyak objek dapat menambah gas dan dibatasi ukuran.
  3. vector<T> mensyaratkan satu tipe homogen—tidak bisa campur tipe berbeda.

Dynamic fields menawarkan cara menyimpan pasangan key-value atau deretan objek heterogen secara lebih fleksibel (akan dibahas lebih lanjut bila diperlukan).

Penutup

Sekarang kamu memahami model kepemilikan: address-owned, immutable, shared, wrapped, dan motivasi dynamic fields. Berikutnya kita akan kembali meninjau program “Hello World” dan menyiapkan assessment membangun kontrakmu sendiri.