Part 4 — Token & Governance (Cosmos SDK)
--
Saat membangun blockchain menggunakan Ignite CLI, kita sebenarnya sudah mendapatkan banyak fitur powerful secara “gratis” dari Cosmos SDK.
Dua modul paling penting yang wajib dipahami di awal adalah:
- Bank module → untuk mengelola token
- Governance module (gov) → untuk voting & pengambilan keputusan on-chain
Di artikel ini, kita akan langsung praktik:
- Transfer token antar akun
- Membuat dan voting proposal governance
Menjalankan Blockchain
Saat menjalankan perintah berikut:
ignite chain serveBeberapa service otomatis berjalan:
- Tendermint RPC →
localhost:26657 - REST API →
localhost:1317 - Faucet →
localhost:4500
💡 Semua interaksi blockchain sebenarnya bisa dilakukan lewat API juga, tidak hanya melalui CLI.
⚠️ Peringatan: Saat menjalankan
ignite chain serve, Ignite akan men-generate akun beserta mnemonic/phrase untuk keperluan development. Pastikan mnemonic tersebut tidak disebarkan atau di-commit ke repository publik seperti GitHub. mnemonic yang bocor dapat disalahgunakan oleh pihak yang tidak bertanggung jawab.
Bagian A: Token
Konsep
Di dalam Cosmos SDK, semua transaksi token di-handle oleh bank module. Beberapa hal penting yang perlu dipahami:
- Setiap akun (seperti
alice,bob) sudah memiliki saldo awal yang dikonfigurasi diconfig.yml - Token disebut denom (misalnya:
token,stake, dll) - Semua transfer akan tercatat sebagai transaksi di blockchain
Step 1 — Cek Address & Saldo
Cek address Alice:
firstChaind keys show alice -aCek saldo Alice:
firstChaind query bank balances $(firstChaind keys show alice -a)Cek saldo Bob:
firstChaind query bank balances $(firstChaind keys show bob -a)Address adalah identitas akun di blockchain, sedangkan saldo disimpan dalam bentuk list karena satu akun bisa memiliki banyak denom.
Step 2 — Transfer Token
firstChaind tx bank send alice $(firstChaind keys show bob -a) 1000token \
--chain-id firstChain -yPenjelasan perintah di atas:
tx bank send→ memanggil modul bankalice→ pengirimbob→ penerima1000token→ jumlah dan denom-y→ auto confirm transaksi
Di balik layar, transaksi ditandatangani oleh private key Alice, masuk ke mempool, diproses oleh validator, lalu dimasukkan ke dalam blok.
Step 3 — Verifikasi Saldo
firstChaind query bank balances $(firstChaind keys show alice -a)
firstChaind query bank balances $(firstChaind keys show bob -a)Transaksi berhasil, saldo Alice berkurang 1000 dan saldo Bob bertambah 1000.
Step 4 — Cek Total Supply
firstChaind query bank totalInsight
Total supply tidak berubah saat transfer berlangsung. Token hanya berpindah dari satu akun ke akun lain, tidak dibuat maupun dihapus.
Bagian B: Governance
Konsep
Modul gov memungkinkan holder token untuk mengajukan proposal, melakukan voting, dan mengubah parameter blockchain.
Pemilik token bisa ikut menentukan arah blockchain
Tanpa governance, semua keputusan bersifat terpusat (centalized). Dengan governance, semua holder token dapat ikut berpartisipasi dalam pengambilan keputusan. Inilah fondasi dari blockchain yang terdesentralisasi.
Alur Governance: Dari Ide Menjadi Keputusan
Sebelum mulai praktik, penting untuk memahami bagaimana sebuah proposal bergerak di dalam sistem governance. Tidak seperti keputusan terpusat yang bisa berubah sewaktu-waktu, setiap perubahan di blockchain harus melewati alur yang transparan dan terstruktur:
[1] Submit Proposal
Siapa pun yang memiliki token dapat mengajukan proposal.
Mulai dari perubahan parameter hingga upgrade chain.
↓
[2] Deposit Period
Proposal membutuhkan deposit minimum agar dinyatakan valid.
Ini mencegah proposal spam yang tidak serius.
↓
[3] Voting Period
Semua holder token berhak memberikan suara.
Pilihan: YES / NO / ABSTAIN / NO WITH VETO
↓
[4] Tally
Suara dihitung secara otomatis dan transparan.
Tidak ada pihak yang bisa memanipulasi hasil.
↓
[5] Executed
Jika proposal lolos, perubahan langsung dijalankan
oleh sistem — tanpa perlu campur tangan siapapun.Step 1 — Cek Parameter Governance
bash
firstChaind query gov paramsPerhatikan dua parameter utama:
voting_period→ durasi periode votingmin_deposit→ jumlah deposit minimum agar proposal masuk ke fase voting
Step 2 — Buat Proposal
Buat sebuah text proposal untuk simulasi governance sederhana:
firstChaind tx gov submit-legacy-proposal \
--title="Proposal Pertama" \
--description="Ini adalah simulasi proposal governance on-chain" \
--type="Text" \
--deposit="10000000stake" \
--from alice \
--chain-id firstChain -y💡 Catatan: Text proposal tidak mengubah state blockchain. Ini hanya digunakan untuk simulasi alur governance. Pada implementasi nyata, proposal bisa berupa upgrade chain, perubahan parameter, dan lain sebagainya.
Step 3 — Cek Proposal
Lihat semua proposal:
firstChaind query gov proposalsLihat proposal berdasarkan id:
firstChaind query gov proposal 1Jika proposal berhasil dibuat, status yang di tampilkan adalah :
PROPOSAL_STATUS_VOTING_PERIODStep 4 — Voting
Alice vote YES:
firstChaind tx gov vote 1 yes \
--from alice --chain-id firstChain -yBob vote NO:
firstChaind tx gov vote 1 no \
--from bob --chain-id firstChain -yStep 5 — Cek Hasil Voting
firstChaind query gov tally 1Hasil voting (tally) menunjukkan seluruh voting power berada pada pilihan YES sebesar 100000000, sementara pilihan lainnya bernilai 0.
Meskipun terdapat dua suara, yaitu Alice (YES) dan Bob (NO), hanya suara Alice yang dihitung. Hal ini terjadi karena governance tidak menggunakan sistem “1 orang = 1 suara”, melainkan berdasarkan voting power. Voting power sendiri berasal dari token yang di-stake (delegated), bukan sekadar saldo.
Bisa dilihat di config.yml default, meskipun Bob memiliki 100000000 stake, Bob bukan validator dan tidak terlihat melakukan delegasi ke validator mana pun.
Dalam sistem Cosmos SDK: Voting power hanya dimiliki oleh validator atau token yang di-delegasikan ke validator
💡 Catatan: Delegasi adalah proses menitipkan (mengunci) token
stakeke validator agar ikut berpartisipasi dalam jaringan
Dampaknya ke Governance
Alice memiliki voting power karena menjadi validator. Sedangkan Bob tidak memiliki voting power karena tidak melakukan staking (delegation). Validator lain (validator1, validator2) juga memiliki voting power, tetapi tidak ikut voting
Maka saat voting, hanya Alice yang dihitung hingga hasil voting(tally) menjadi:
yes_count: 100000000Solusinya
Agar Bob dapat ikut voting, ia harus memiliki voting power. Dalam Cosmos SDK, voting power berasal dari token yang di-stake, bukan hanya dari saldo.
Langkah pertama, Bob perlu mendelegasikan token stake ke validator, misalnya ke Alice:
firstChaind tx staking delegate \
$(firstChaind keys show alice --bech val -a) \
50000000stake \
--from bob \
--chain-id firstChain \
-y💡 Catatan: gunakan
--bech valuntuk mendapatkan alamat validator.
Setelah melakukan delegasi, Bob akan memperoleh voting power sesuai jumlah stake yang didelegasikan. Selanjutnya, Bob dapat melakukan voting pada proposal baru:
firstChaind tx gov vote 2 no \
--from bob \
--chain-id firstChain \
-y💡 Catatan: proposal id = 2, karena setiap proposal medapatkan id yang bertambah (increment).
Kemudian cek kembali hasil voting:
firstChaind query gov tally 1Setelah Bob melakukan delegasi, ia akhirnya memiliki voting power sehingga suaranya mulai dihitung dalam governance. Hal ini terlihat dari hasil tally, di mana nilai YES dan NO sama-sama sebesar 100000000.
Artinya, sebelumnya hanya Alice yang menentukan hasil voting, tetapi setelah Bob melakukan staking, keduanya memiliki kekuatan suara yang seimbang. Ini menunjukkan bahwa voting power bergantung pada token yang di-stake, bukan hanya saldo yang dimiliki.
Latihan Tambahan
Sebagai latihan, coba tambahkan akun baru dan lakukan transfer token kepadanya.
Buat akun baru bernama dave:
firstChaind keys add daveKirim token ke dave:
firstChaind tx bank send alice $(firstChaind keys show dave -a) 500token \
--chain-id firstChain -yVerifikasi saldo dave:
firstChaind query bank balances $(firstChaind keys show dave -a)Insight Penting
Ada beberapa hal mendasar yang sering terlewat oleh pemula:
1. Tidak ada fitur yang ditulis dari nol : Semua yang dipraktikkan di artikel ini — transfer token dan governance — sudah disediakan secara default oleh Cosmos SDK.
2. Blockchain adalah kumpulan modul : Setiap modul memiliki tanggung jawabnya masing-masing: bank untuk token, gov untuk pengambilan keputusan, staking untuk validator, dan seterusnya. Ignite hanya membantu men-generate dan menjalankan semuanya.
3. CLI hanyalah interface, bukan sistem utama : firstChaind adalah alat untuk mengirim transaksi dan melakukan query. Backend sesungguhnya adalah blockchain node yang berjalan di belakang layar.
Kesimpulan
Dengan Ignite, kita langsung mendapatkan sistem token yang lengkap dan sistem governance on-chain tanpa menulis satu baris kode pun. Yang lebih penting, melalui praktik langsung ini, kita tidak sekadar memahami teori — melainkan melihat sendiri bagaimana blockchain nyata bekerja dari dalam.
📌 Artikel ini adalah bagian dari seri “Building Blockchain with Ignite CLI”. Jika menemukan kendala atau ada pertanyaan, jangan ragu untuk meninggalkan komentar di bawah.