Fungsi ini adalah gerbang utama DApp ke dunia Blockchain.
- Modern DApp Browsers (MetaMask): Kode pertama-tama mengecek keberadaan
window.ethereum. Jika ada, itu berarti user menggunakan dApp browser modern (MetaMask, dll.). Kita menggunakanwindow.ethereum.enable()untuk meminta izin kepada pengguna agar DApp dapat mengakses akun mereka. - Fallback (Legacy & Ganache): Jika MetaMask tidak ditemukan, DApp akan mencoba mencari
window.web3(untuk browser lama). Jika semuanya gagal, DApp akan secara otomatis terhubung ke node Ganache lokal padahttp://localhost:7545, yang ideal untuk pengembangan.
Ini adalah bagian yang menghubungkan front-end dengan back-end Smart Contract.
- Artifacts (
Adoption.json): Truffle menghasilkan fileAdoption.jsonsetelah kompilasi. File ini berisi ABI (Application Binary Interface) yang memberitahu JavaScript fungsi apa saja yang ada di kontrak, dan Bytecode kontrak yang sudah di-deploy. TruffleContract(): Kita menggunakan pustaka@truffle/contractuntuk "mewujudkan" kontrak di JavaScript, lalu menyetel provider agar kontrak tahu di jaringan mana dia harus berinteraksi (App.contracts.Adoption.setProvider(App.web3Provider)).
Fungsi ini adalah contoh Membaca Data dari Blockchain (Call).
getAdopters.call(): Kita memanggil fungsigetAdoptersdari Smart Contract. Karena kita hanya membaca data dan tidak mengubah state blockchain, kita menggunakan.call(). Ini adalah transaksi gratis (tidak perlu gas).- Logika UI: Kontrak mengembalikan daftar alamat adopter. Jika alamat pada indeks tertentu (sesuai ID hewan) bukan alamat nol (
0x0...), maka hewan tersebut sudah diadopsi, dan kita menonaktifkan tombol adopsi di UI.
Fungsi ini adalah contoh Menulis Data ke Blockchain (Transaction).
- Mendapatkan Akun: Pertama, kita mengambil akun pengguna saat ini (
web3.eth.getAccounts). - Mengirim Transaksi: Kita memanggil
adoptionInstance.adopt(petId, {from: account}). Perintah ini akan:- Memicu MetaMask untuk meminta tanda tangan transaksi dari pengguna.
- Mengirim transaksi ke jaringan (Ganache).
- Mengubah state di Smart Contract (yaitu, menetapkan alamat pengadopsi untuk ID hewan tersebut).
Berbeda dengan
.call(), operasi ini memerlukan biaya Gas.
Untuk visualisasi proses interaksi ini, Anda dapat membayangkan alur seperti ini:
Berikut adalah content lengkap yang dapat Anda simpan sebagai file README.md di root proyek Anda:
# πΆ Pet Shop Adoption DApp
Sebuah aplikasi terdesentralisasi (DApp) yang dibangun menggunakan Truffle untuk mengelola adopsi hewan peliharaan di jaringan Ethereum lokal (Ganache).
## π Fitur Utama
* **Pendaftaran Hewan:** Menampilkan daftar 16 hewan peliharaan yang tersedia untuk diadopsi.
* **Adopsi On-Chain:** Mengirim transaksi ke Smart Contract untuk mencatat adopsi.
* **Integrasi Web3:** Interaksi penuh dengan MetaMask/Wallet Connect melalui `app.js`.
* **Status Real-time:** Membaca status adopsi dari Blockchain dan memperbarui antarmuka pengguna (UI).
## π οΈ Persyaratan Sistem
Pastikan Anda telah menginstal versi terbaru dari perangkat lunak berikut:
1. **Node.js & npm:** Lingkungan runtime dan manajer paket.
2. **Truffle:** Kerangka kerja pengembangan Smart Contract.
```bash
npm install -g truffle
```
3. **Ganache:** Blockchain pribadi untuk pengembangan lokal.
4. **MetaMask:** Ekstensi browser yang terhubung ke jaringan Ganache.
## βοΈ Setup Proyek
Ikuti langkah-langkah ini di terminal proyek Anda:
### 1. Instal Dependensi
Instal semua paket yang dibutuhkan, termasuk `lite-server` untuk menjalankan front-end.
```bash
npm installPastikan Ganache telah berjalan sebelum langkah ini.
- Kompilasi Kontrak: Membuat file JSON artifacts (
Adoption.json).truffle compile
- Migrasi (Deploy): Mengirim kontrak ke jaringan Ganache.
truffle migrate --reset
Perintah ini akan menjalankan lite-server dan membuka DApp di browser Anda.
npm run dev- Pastikan MetaMask terhubung ke Custom RPC/Localhost 7545.
- Impor beberapa akun dari Ganache ke MetaMask untuk digunakan sebagai pengadopsi.
Logika inti yang menghubungkan UI dan Blockchain:
- Mendeteksi
window.ethereum(MetaMask modern). - Jika tidak ada, fallback ke
window.web3atau Ganache HTTP Provider (http://localhost:7545).
- Memuat
Adoption.jsonartifact. - Menginisialisasi objek kontrak menggunakan
TruffleContract(). - Memanggil
App.markAdopted()setelah kontrak diinisialisasi untuk memuat data awal.
return adoptionInstance.getAdopters.call();- Memanggil fungsi
getAdopters()di Smart Contract untuk mengambil array alamat pengadopsi. - Karena ini adalah panggilan
.call(), tidak ada biaya Gas. - Memperbarui UI: Jika alamat pengadopsi tidak nol (
0x0...), tombol diubah menjadi "Success" dan dinonaktifkan.
return adoptionInstance.adopt(petId, {from: account});- Mengambil akun pengguna saat ini (
web3.eth.getAccounts). - Mengirim transaksi
adopt()ke Smart Contract, menyertakan ID hewan dan alamat pengirim. - Ini adalah operasi Write yang memerlukan biaya Gas dan memicu pop-up konfirmasi di MetaMask.







