Part 2 — Memahami Struktur Direktori Ignite (Cosmos SDK)
--
Pada Part 1, kita telah mempelajari cara instalasi Ignite CLI di Linux hingga berhasil melakukan scaffold blockchain pertama. Di bagian ini, kita akan melangkah lebih dalam dengan memahami struktur direktori Ignite.
Memulai Project
Pertama, buat blockchain baru dengan perintah berikut:
ignite scaffold chain mychainKemudian masuk ke direktori project:
cd mychainSetelah itu, akan terlihat banyak folder dan file yang mungkin terasa membingungkan di awal. Namun semuanya memiliki peran yang jelas dan mengikuti arsitektur yang rapi.
Artikel ini akan membahas struktur direktori Ignite secara menyeluruh, sekaligus bagaimana setiap bagian saling terhubung dalam sebuah sistem blockchain.
Gambaran Besar
Ignite dibangun di atas Cosmos SDK, sehingga arsitekturnya mengikuti pola:
Blockchain = kumpulan modul + wiring + interface
Secara sederhana:
x/→ logika bisnis (modul)app/→ penghubung semua modulcmd/→ interface untuk user (CLI)
Memahami tiga bagian ini sudah cukup memberikan gambaran besar cara kerja blockchain di Ignite.
Struktur Direktori
Setelah scaffold, secara sederhana struktur project akan terlihat seperti ini:
mychain/
├── app/
├── cmd/
├── docs/
├── proto/
├── testutil/
├── x/
├── config.yml
└── readme.mdMari kita bahas satu per satu secara lebih dalam.
1. app/ — Pusat Konfigurasi Blockchain
File utama: app/app.go
Folder ini adalah tempat semua komponen blockchain disatukan.
Fungsi utama:
- Menginisialisasi semua modul (bank, staking, dan custom module)
- Mengatur routing untuk transaksi (Msg) dan query
- Menghubungkan keeper antar modul
- Mengatur penyimpanan state (store)
Insight penting:
app.go bisa dianggap sebagai main function dari blockchain. Jika module baru ditambahkan di x/ tetapi tidak didaftarkan di sini, maka module tersebut tidak akan pernah digunakan oleh sistem.
2. cmd/ — Entry Point & CLI
Folder ini berisi command-line interface (CLI) untuk menjalankan blockchain.
Contoh penggunaan:
mychaind start
mychaind tx ...
mychaind query ...Isi utama:
- Root command (menggunakan Cobra CLI)
- Inisialisasi aplikasi (
app)
Insight Penting:
Semua interaksi user melalui terminal terjadi lewat sini. Jika diperlukan command custom, maka bagian ini yang perlu diedit.
3. proto/ — Kontrak API Blockchain
Folder ini berisi file .proto yang menggunakan Protocol Buffers. Di sinilah semua transaksi (Msg), query, dan response didefinisikan.
Contoh:
message MsgCreatePost {
string creator = 1;
string title = 2;
}Insight Penting
Semua transaksi ke blockchain berasal dari definisi disini, dan secara otomatils di generate menjadi :
- REST API
- gRPC
- CLI
Folder ini adalah interface publik blockchain. Perubahan disini akan mempengaruhi cara client (ftontend, CLI, API) berinteraksi dengan blockchain.
4. x/ — Jantung Logika Bisnis
Folder ini berisi semua modul yang menjalankan logika bisnis blockchain.
Contoh stuktur :
x/mychain/
├── keeper/ ← Logic baca/tulis state blockchain
├── module/ ← Registrasi modul ke chain
├── types/ ← Definisi tipe data & pesan
└── README.mdSetiap folder memiliki peran spesifik.
a. keeper/ — Akses State (Database Layer)
Keeper adalah layer yang bertugas membaca dan menulis data ke blockchain.
Contoh:
func (k Keeper) SetPost(ctx sdk.Context, post Post)Insight Penting :
- Semua akses state harus melalui keeper
- Tidak diperbolehkan akses langsung ke store
- KOnsepnya mirip seperti repository pada backend
Keeper adalah gerbang resmi ke database blockchain.
b. module/ — Integrasi Modul ke Sistem
Bagian ini menghubungkan module ke sistem blockchain. Isi utamanya meliputiAppModule , MsgServer(handler transaksi), handler querydan genesis(init & export state).
Insight Penting :
Bagian ini adalah “lem” yang menghubungkan semua layer :
proto → module → keeper → stateTanpa module, definisi di proto tidak akan pernah dieksekusi.
c. types/ — Definisi Data & Struktur
Contoh:
type Post struct {
Id uint64
Title string
}Bagian ini bisa dianggap sebagai schema data dalam blockchain.
5. config.yml — Konfigurasi Development
Digunakan saat menjalankan:
ignite chain serve⚠️ 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.
Isi :
- Akun awal (alice, bob)
- Saldo token
- Validator
- Faucet
Insight Penting :
File ini hanya digunakan untuk keperluan development, mempermudah testing tanpa setup manual, dan tidak digunakan di production.
Contoh :
Edit config.yml — tambah akun baru dan ubah jumlah token:
Save, kemudian chain akan otomatis restart karena ignite punya live reload.
Selanjutnya verifikasi akun charlie berhasil dibuat :
mychaind keys listVerifikasi sukses, akun charlie berhasil di tambahkan.
6. testutil/ — Tools untuk Testing
Digunakan untuk unit testing, mock context, dan helper function. Bagian ini sangat penting untuk memastikan logika berjalan dengan benar sebelum di-deploy.
7. docs/ — Dokumentasi API
Berisi file OpenAPI (Swagger) yang digunakan untuk dokumentasi endpoint dan integrasi dengan frontend atau service lain.
Bagaimana Semuanya Terhubung?
Memahami alur berikut sangat penting untuk mengerti cara kerja blockchain secara keseluruhan.
Alur Transaksi (Tx)
┌─────────────────────────────┐
│ User (CLI / API) │
└──────────────┬──────────────┘
│ mengirim transaksi
▼
┌─────────────────────────────┐
│ Proto (Msg) │
│ mendefinisikan struktur │
└──────────────┬──────────────┘
│ diteruskan ke
▼
┌─────────────────────────────┐
│ Module (Msg Server) │
│ memproses logika bisnis │
└──────────────┬──────────────┘
│ menulis data via
▼
┌─────────────────────────────┐
│ Keeper │
│ gerbang akses ke state │
└──────────────┬──────────────┘
│ menyimpan ke
▼
┌─────────────────────────────┐
│ State (Store) │
│ penyimpanan data on-chain │
└─────────────────────────────┘Alur Query
┌─────────────────────────────┐
│ User │
└──────────────┬──────────────┘
│ mengirim permintaan
▼
┌─────────────────────────────┐
│ Proto (Query) │
│ mendefinisikan struktur │
└──────────────┬──────────────┘
│ diteruskan ke
▼
┌─────────────────────────────┐
│ Keeper │
│ membaca data dari state │
└──────────────┬──────────────┘
│ mengambil dari
▼
┌─────────────────────────────┐
│ State (Store) │
│ penyimpanan data on-chain │
└─────────────────────────────┘Mental Model Sederhana
┌──────────────┬──────────────────────────────────────────┐
│ Komponen │ Peran │
├──────────────┼──────────────────────────────────────────┤
│ proto/ │ 📡 API / kontrak komunikasi │
├──────────────┼──────────────────────────────────────────┤
│ types/ │ 🗂️ Struktur data │
├──────────────┼──────────────────────────────────────────┤
│ keeper/ │ 🗄️ Akses state (database) │
├──────────────┼──────────────────────────────────────────┤
│ module/ │ ⚙️ Logic handler │
├──────────────┼──────────────────────────────────────────┤
│ app/ │ 🔗 Penggabung semua modul │
├──────────────┼──────────────────────────────────────────┤
│ cmd/ │ 💻 Interface CLI │
└──────────────┴──────────────────────────────────────────┘Kesimpulan
Dengan memahami struktur direktori ini, tidak hanya diketahui “di mana harus menulis kode”, tetapi juga bagaimana data mengalir di dalam blockchain, bagaimana modul saling berinteraksi, dan bagaimana sistem bekerja secara keseluruhan.
Ini adalah fondasi penting sebelum mulai membangun fitur yang lebih kompleks di atas Ignite.
📌 Artikel ini adalah bagian dari seri “Building Blockchain with Ignite CLI”. Jika menemukan kendala atau ada pertanyaan, jangan ragu untuk meninggalkan komentar di bawah.