Smart Contract Counter
🚀 Panduan Lengkap: Membuat Smart Contract Counter di Cedra
🔧 Kontrak ini akan menyimpan angka, menambahkannya, menguranginya, mengatur ulang, dan melihat nilainya — cocok untuk belajar dasar Move!
📦 1. Persiapan Awal
Pastikan kamu sudah:
✅ Menginstall Cedra CLI
✅ Melakukan cedra init dan punya account address & private key
✅ Paham dasar CLI dan konsep akun di blockchain
🏗️ 2. Buat Proyek Move Baru
mkdir counter-project
cd counter-project
cedra move init --name counterStruktur proyek akan seperti ini:
counter/
├── Move.toml
└── sources/✍️ 3. Update Move.toml
Move.tomlEdit bagian [addresses] dan tambahkan address kamu:
[addresses]
counter = "0xYOUR_ACCOUNT_ADDRESS"Ganti 0xYOUR_ACCOUNT_ADDRESS dengan address dari hasil cedra init.
🧱 4. Buat File Smart Contract
Buat file baru:
nano sources/counter.moveTempel kode berikut:
module counter::simple_counter {
use std::signer;
struct Counter has key {
value: u64,
}
const E_COUNTER_NOT_EXISTS: u64 = 1;
public entry fun initialize(account: &signer) {
let counter = Counter { value: 0 };
move_to(account, counter);
}
public entry fun increment(account: &signer) acquires Counter {
let addr = signer::address_of(account);
assert!(exists<Counter>(addr), E_COUNTER_NOT_EXISTS);
let counter = borrow_global_mut<Counter>(addr);
counter.value = counter.value + 1;
}
public entry fun decrement(account: &signer) acquires Counter {
let addr = signer::address_of(account);
assert!(exists<Counter>(addr), E_COUNTER_NOT_EXISTS);
let counter = borrow_global_mut<Counter>(addr);
if (counter.value > 0) {
counter.value = counter.value - 1;
};
}
public entry fun reset(account: &signer) acquires Counter {
let addr = signer::address_of(account);
assert!(exists<Counter>(addr), E_COUNTER_NOT_EXISTS);
let counter = borrow_global_mut<Counter>(addr);
counter.value = 0;
}
#[view]
public fun get_count(addr: address): u64 acquires Counter {
assert!(exists<Counter>(addr), E_COUNTER_NOT_EXISTS);
let counter = borrow_global<Counter>(addr);
counter.value
}
}🧪 5. Tambahkan Unit Test (Opsional tapi Disarankan)
Di file yang sama (counter.move), tambahkan di bawah:
#[test_only]
module counter::counter_tests {
use std::signer;
use counter::simple_counter;
#[test(account = @0x1)]
public fun test_initialize_and_get_count(account: &signer) {
simple_counter::initialize(account);
let count = simple_counter::get_count(signer::address_of(account));
assert!(count == 0, 1);
}
#[test(account = @0x1)]
public fun test_increment(account: &signer) {
simple_counter::initialize(account);
simple_counter::increment(account);
simple_counter::increment(account);
let count = simple_counter::get_count(signer::address_of(account));
assert!(count == 2, 2);
}
#[test(account = @0x1)]
public fun test_decrement(account: &signer) {
simple_counter::initialize(account);
simple_counter::increment(account);
simple_counter::decrement(account);
let count = simple_counter::get_count(signer::address_of(account));
assert!(count == 0, 3);
}
#[test(account = @0x1)]
public fun test_reset(account: &signer) {
simple_counter::initialize(account);
simple_counter::increment(account);
simple_counter::reset(account);
let count = simple_counter::get_count(signer::address_of(account));
assert!(count == 0, 4);
}
}⚙️ 6. Compile & Jalankan Tes
cedra move compile
cedra move test✅ Semua test harus berhasil
🚀 7. Deploy ke Cedra Testnet
cedra move publishKetik yes saat diminta konfirmasi.
Modul akan dipublikasikan ke akun kamu di testnet.
🎮 8. Interaksi dengan Smart Contract
🧱 Inisialisasi Counter
cedra move run --function-id default::simple_counter::initialize🔼 Tambah Nilai Counter
cedra move run --function-id default::simple_counter::increment🔍 Cek Nilai Counter
cedra move view --function-id default::simple_counter::get_count --args address:default🔄 Tambah & Cek Lagi
cedra move run --function-id default::simple_counter::increment
cedra move view --function-id default::simple_counter::get_count --args address:defaultKamu akan melihat nilai counter bertambah!
💡 Tips Lanjut:
Ganti
default::...jika kamu pakai profil atau address lainGunakan
--profile <nama_profile>jika ada lebih dari satu akunKamu bisa melihat hasil deploy dengan:
cedra account list --query modules --account <alamat>
🎉 Selesai!
Kamu baru saja: ✅ Membuat ✅ Menguji ✅ Mendeploy ✅ Menggunakan smart contract pertamamu di Cedra.
Last updated