Smart Contract Counter
๐ Panduan Lengkap: Membuat Smart Contract Counter di Cedra
Last updated
๐ Panduan Lengkap: Membuat Smart Contract Counter di Cedra
Last updated
๐ง Kontrak ini akan menyimpan angka, menambahkannya, menguranginya, mengatur ulang, dan melihat nilainya โ cocok untuk belajar dasar Move!
Pastikan kamu sudah:
โ
Menginstall Cedra CLI
โ
Melakukan cedra init
dan punya account address & private key
โ
Paham dasar CLI dan konsep akun di blockchain
mkdir counter-project
cd counter-project
cedra move init --name counter
Struktur proyek akan seperti ini:
counter/
โโโ Move.toml
โโโ sources/
Move.toml
Edit bagian [addresses]
dan tambahkan address kamu:
[addresses]
counter = "0xYOUR_ACCOUNT_ADDRESS"
Ganti 0xYOUR_ACCOUNT_ADDRESS
dengan address dari hasil cedra init
.
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
}
}
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);
}
}
cedra move compile
cedra move test
โ Semua test harus berhasil
cedra move publish
Ketik yes
saat diminta konfirmasi.
Modul akan dipublikasikan ke akun kamu di testnet.
๐งฑ 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!
Ganti default::...
jika kamu pakai profil atau address lain
Gunakan --profile <nama_profile>
jika ada lebih dari satu akun
Kamu bisa melihat hasil deploy dengan:
cedra account list --query modules --account <alamat>
Kamu baru saja: โ Membuat โ Menguji โ Mendeploy โ Menggunakan smart contract pertamamu di Cedra.