Struct, Fungsi dan Deploy Smart Contract Pertamamu
Selamat datang di sesi paling praktis hari ini! Di sesi ini, kita akan menggabungkan semua konsep yang telah kita pelajari untuk membuat smart contract pertama kita di blockchain Sui.
Apa yang Akan Kita Pelajari Hari Ini?
- ✅ Membuat Blueprint Aset: Memahami
structdanabilitiesdi Move - ✅ Menulis Logika Smart Contract: Membuat
functionsyang dapat dijalankan - ✅ Mendeploy ke Blockchain: Membangun dan mempublikasikan smart contract kita
1. Membuat Blueprint Aset: Struct dan Abilities
Apa itu Struct?
Bayangkan struct seperti cetak biru (blueprint) untuk membuat objek di blockchain. Sama seperti cetak biru rumah yang mendefinisikan bagaimana rumah akan dibangun, struct mendefinisikan bagaimana aset digital kita akan terlihat dan berperilaku.
Contoh: Profile Object
Mari kita buat contoh sederhana: sebuah Profile object yang menggambarkan konsep object-centric di Sui.
use sui::object::UID;
use std::string::String;
// Blueprint untuk sebuah "Profile"
struct Profile has key, store {
id: UID,
name: String,
level: u64
}
Memahami Kode di Atas
Mari kita pecah kode ini bagian per bagian:
struct Profile has key, store {
// Field-field (properti) dari Profile
id: UID, // ID unik untuk setiap object
name: String, // Nama user
level: u64 // Level user (u64 = bilangan bulat positif)
}
Profile: Nama blueprint/struct kitaid: UID: Setiap object akan memiliki ID unik yang dihasilkan oleh sistemname: String: Nama user dalam bentuk stringlevel: u64: Level user yang dimulai dari 1
Apa itu "Abilities"?
Teks has key, store yang muncul setelah nama struct disebut Abilities. Abilities adalah "kekuatan super" yang memberikan kemampuan khusus kepada struct kita.
Ability key - Kunci Utama
key adalah ability paling penting di Sui!
- Apa fungsinya?: Memberi tahu blockchain bahwa "Ini adalah aset utama yang bisa disimpan secara global"
- Apa efeknya?:
- Memberikan ID unik (UID) otomatis kepada setiap objek
- Memungkinkan objek untuk dimiliki oleh alamat wallet
- Memungkinkan objek untuk ditransfer antar wallet
Aturan emas: Semua aset bernilai di Sui (seperti NFT, koin, tiket, dll) HARUS memiliki ability key.
Ability store - Kemampuan Penyimpanan
store memberikan kemampuan komposisi
- Apa fungsinya?: Memungkinkan struct ini disimpan di dalam struct lain
- Apa efeknya?:
- Kita bisa membuat "kotak harta karun" yang berisi banyak NFT
- Kita bisa membuat "karakter game" yang memiliki "pedang" dan "perisai"
- Memungkinkan pembuatan aset yang lebih kompleks
Abilities Lainnya (Hati-hati!)
Ada dua abilities lain yang perlu diketahui, tapi harus berhati-hati saat menggunakannya:
copy: Memungkinkan struct diduplikasi. ⚠️ JANGAN gunakan untuk aset bernilai!drop: Memungkinkan struct dihancurkan. ⚠️ JANGAN gunakan untuk aset bernilai!
2. Menulis Logika Smart Contract: Functions
Sekarang kita punya blueprint, tapi kita butuh cara untuk membuat dan menggunakan kartu peserta. Di sinilah functions berperan!
Apa itu Function?
Function adalah logika atau aksi yang bisa dilakukan oleh smart contract kita. Jika struct adalah cetak biru, maka function adalah pabrik yang memproduksi objek dari cetak biru tersebut.
Contoh: Fungsi untuk Membuat Profile
Mari kita buat fungsi yang akan membuat Profile object baru:
use sui::object::{Self, UID};
use sui::tx_context::{Self, TxContext};
use sui::transfer;
use std::string::String;
// ... struct Profile ...
// 'entry' berarti fungsi ini bisa dipanggil langsung sebagai transaksi
public entry fun create_profile(
name: String,
ctx: &mut TxContext
) {
// Langkah 1: Membuat instance dari struct
let profile = Profile {
id: object::new(ctx),
name,
level: 1 // Level awal adalah 1
};
// Langkah 2: Mengirim objek ke si pembuat transaksi
transfer::transfer(profile, tx_context::sender(ctx));
}
Memahami Kode di Atas
Mari kita pecah fungsi ini langkah demi langkah:
1. Deklarasi Fungsi
public entry fun create_profile(
name: String,
ctx: &mut TxContext
) {
public entry: Kata kunci yang berarti fungsi ini bisa dipanggil langsung sebagai transaksi oleh penggunacreate_profile: Nama fungsi kitaname: String: Parameter untuk nama userctx: &mut TxContext: Parameter khusus yang berisi informasi tentang transaksi (siapa pengirim, dll)
2. Membuat Objek
let profile = Profile {
id: object::new(ctx),
name,
level: 1
};
let profile = Profile { ... }: Membuat instance baru dari struct Profileid: object::new(ctx): Membuat ID unik untuk objek ininame: Menggunakan parameter name yang diberikanlevel: 1: Mengisi level dengan 1 (level awal)
3. Mengirim Objek
transfer::transfer(profile, tx_context::sender(ctx));
transfer::transfer: Fungsi bawaan Sui untuk mengirim owned object ke alamat tertentuprofile: Objek yang ingin kita kirimtx_context::sender(ctx): Alamat tujuan (dalam hal ini, alamat pengirim)
Jenis-jenis Fungsi di Move
Ada beberapa jenis fungsi di Move yang perlu diketahui:
entry fun: Fungsi yang bisa dipanggil langsung sebagai transaksipublic fun: Fungsi yang bisa dipanggil dari modul lainfun(tanpa kata kunci): Fungsi privat yang hanya bisa dipanggil di dalam modul yang sama
3. Menggabungkan Semua: Smart Contract Lengkap
Sekarang mari kita lihat bagaimana semua bagian ini digabungkan menjadi satu smart contract utuh. Ini adalah contract yang sama dengan yang kita buat di sesi sebelumnya:
// File: sources/profile.move
module latihan_pertama::profile {
use sui::object::{Self, UID};
use sui::transfer;
use sui::tx_context::{Self, TxContext};
use std::string::String;
// Blueprint untuk Profile
struct Profile has key, store {
id: UID,
name: String,
level: u64,
}
// Fungsi untuk membuat Profile baru
public entry fun create_profile(
name: String,
ctx: &mut TxContext
) {
// Membuat Profile object baru
let profile = Profile {
id: object::new(ctx),
name,
level: 1, // Level awal adalah 1
};
// Transfer object ke sender (pembuat)
transfer::transfer(profile, tx_context::sender(ctx));
}
// Function untuk meningkatkan level
public entry fun level_up(
profile: &mut Profile
) {
profile.level = profile.level + 1;
}
// View function untuk melihat level
public fun get_level(profile: &Profile): u64 {
profile.level
}
}
Penjelasan Struktur Smart Contract
module latihan_pertama::profile: Mendefinisikan modul dengan nama packagelatihan_pertamadan nama modulprofileuse ...: Mengimpor fungsi-fungsi yang kita butuhkan dari framework Suistruct Profile: Mendefinisikan blueprint untuk Profile object dengankeydanstoreabilitiespublic entry fun create_profile: Mendefinisikan fungsi untuk membuat Profile barupublic entry fun level_up: Mendefinisikan fungsi untuk meningkatkan levelpublic fun get_level: View function untuk membaca level tanpa mengubah object
4. Momen Puncak: Build & Deploy Smart Contract
Sekarang saatnya yang paling ditunggu-tunggu! Kita akan membangun dan mendeploy smart contract pertama kita ke blockchain Sui.
Langkah 1: Build Kode
Sebelum mendeploy, kita perlu memastikan kode kita tidak memiliki error.
- Buka terminal di folder proyek kamu (
latihan_pertama) - Jalankan perintah berikut:
sui move build
- Jika semuanya berjalan lancar, kamu akan melihat pesan seperti ini:
INCLUDING DEPENDENCY Sui
INCLUDING DEPENDENCY MoveStdlib
BUILDING latihan_pertama
Successfully built modules
Jika ada error, baca pesan error dengan teliti dan perbaiki kode kamu.
Langkah 2: Publish ke Testnet
Setelah kode berhasil dibangun, saatnya mendeploy ke blockchain Sui Testnet.
- Pastikan kamu sudah mengatur environment Sui Client dengan benar (jika belum, lihat panduan di sesi sebelumnya)
- Jalankan perintah berikut untuk mendeploy smart contract:
sui client publish
Memahami Perintah Publish
sui client publish: Perintah untuk mempublikasikan smart contract ke blockchain
Hasil yang Diharapkan
Jika berhasil, terminal akan menampilkan informasi penting seperti ini:
Successfully verified dependencies on-chain against source.
Transaction Digest: <Transaction_Digest_Here>
Object ID: <Package_ID_Here>
Owned Objects:
┌───┬──────────────────────────────┬──────────┬────────────────────────┐
│ # │ Object ID │ Version │ Struct Name │
├───┼──────────────────────────────┼──────────┼────────────────────────┤
│ 0 │ <Package_ID_Here> │ 1 │ UpgradeCap │
└───┴──────────────────────────────┴──────────┴────────────────────────┘
----- Events ----
Array [Event { ... }]
Informasi Penting dari Hasil Deploy
Dari output di atas, yang paling penting untuk dicatat adalah:
- Package ID: ID unik untuk smart contract kita (baris "Object ID:
<Package_ID_Here>") - Transaction Digest: Bukti bahwa transaksi kita berhasil diproses
Langkah 3: Verifikasi di Sui Explorer
Setelah berhasil mendeploy, mari kita verifikasi bahwa smart contract kita benar-benar ada di blockchain:
- Salin Package ID dari hasil deploy
- Buka Sui Explorer Testnet
- Paste Package ID di kolom pencarian
- Tekan Enter
Kamu seharusnya melihat informasi tentang smart contract yang baru saja kamu deploy!
Langkah 4: Menguji Smart Contract
Sekarang mari kita uji smart contract kita dengan memanggil fungsi create_profile:
sui client call \
--package <PACKAGE_ID> \
--module profile \
--function create_profile \
--args "Sui Developer" \
--gas-budget 10000000
Ganti <PACKAGE_ID> dengan Package ID yang kamu dapatkan dari hasil deploy.
Contoh dengan PackageID:
sui client call \
--package 0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890 \
--module profile \
--function create_profile \
--args "Sui Developer" \
--gas-budget 10000000
Jika berhasil, kamu akan melihat output yang menunjukkan bahwa sebuah objek Profile baru telah dibuat dan dikirim ke alamat kamu. Simpan ObjectID dari Profile yang baru dibuat!
Kamu juga bisa memanggil fungsi level_up untuk meningkatkan level:
sui client call \
--package <PACKAGE_ID> \
--module profile \
--function level_up \
--args <PROFILE_OBJECT_ID> \
--gas-budget 10000000
5. Kesimpulan dan Langkah Selanjutnya
Apa yang Sudah Kita Pelajari?
- ✅ Struct: Membuat cetak biru untuk aset digital
- ✅ Abilities: Memahami kemampuan khusus yang bisa dimiliki struct (
key,store,copy,drop) - ✅ Functions: Menulis logika untuk membuat dan memanipulasi objek
- ✅ Deploy: Membangun dan mempublikasikan smart contract ke blockchain Sui
Konsep Kunci yang Perlu Diingat
- Struct = Blueprint: Struct adalah cetak biru untuk membuat objek di blockchain
- Abilities = Superpowers: Abilities memberikan kemampuan khusus kepada struct
- Functions = Actions: Functions adalah logika atau aksi yang bisa dilakukan oleh smart contract
- Key Ability = Wajib: Semua aset bernilai di Sui HARUS memiliki ability
key - Testing is Important: Selalu uji smart contract kamu di testnet sebelum mainnet
Langkah Selanjutnya
Selamat! Kamu baru saja berhasil membuat dan mendeploy smart contract pertama kamu di blockchain Sui! 🎉
Di sesi berikutnya, kita akan mempelajari:
- Cara membuat fungsi yang lebih kompleks
- Cara berinteraksi dengan objek yang sudah ada
- Cara membuat NFT (Non-Fungible Token) yang lebih menarik
Teruslah bereksperimen dan jangan takut untuk mencoba hal baru!
6. Troubleshooting Umum
Error Saat Build
Jika kamu mendapatkan error saat menjalankan sui move build, periksa:
- Syntax Error: Pastikan semua kurung, koma, dan titik koma sudah benar
- Import Error: Pastikan semua modul yang dibutuhkan sudah diimpor dengan benar
- Type Error: Pastikan tipe data yang digunakan sudah benar
Error Saat Publish
Jika kamu mendapatkan error saat menjalankan sui client publish, periksa:
- Gas Budget: Coba tingkatkan nilai
--gas-budget - Connection: Pastikan kamu terhubung ke jaringan Sui Testnet
- Account Balance: Pastikan akun kamu memiliki cukup SUI untuk membayar gas
Error Saat Memanggil Fungsi
Jika kamu mendapatkan error saat memanggil fungsi, periksa:
- Package ID: Pastikan Package ID yang digunakan sudah benar
- Module Name: Pastikan nama modul sudah benar (case-sensitive)
- Function Name: Pastikan nama fungsi sudah benar (case-sensitive)
Jika kamu masih mengalami masalah, jangan ragu untuk bertanya di komunitas Sui Indonesia!