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
- Address-owned
- Dynamic fields
- Immutable
- Shared
- 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:
- Gunakan
transferjika kamu ingin kebijakan khusus (objek hanyakeytanpastore). - Gunakan
public_transferbila objek punyastore.
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:
- Field objek statis setelah module dipublish.
- Membungkus banyak objek dapat menambah gas dan dibatasi ukuran.
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.