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 counter
Struktur proyek akan seperti ini:
counter/
โโโ Move.toml
โโโ sources/
โ๏ธ 3. Update Move.toml
Move.toml
Edit 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.move
Tempel 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 publish
Ketik 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:default
Kamu 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