Sistem blockchain berbasis Hyperledger Fabric untuk traceability dan transparansi rantai pasok ekspor kopi Indonesia. Sistem ini melibatkan 5 organisasi yang berperan dalam proses dari panen hingga ekspor ke importir internasional.
- Fitur Utama
- Arsitektur Sistem
- Organisasi & Peran
- Alur Proses (Supply Chain Flow)
- Struktur Data
- Prasyarat
- Instalasi
- Menjalankan Jaringan
- API Endpoints
- Fungsi Smart Contract
- Mekanisme Keuangan
- Contoh Penggunaan
- Troubleshooting
- β Full Traceability - Lacak perjalanan kopi dari kebun petani hingga gudang importir
- β Multi-Organization - 5 organisasi dengan peran dan akses berbeda
- β Smart Contract - Otomatisasi proses bisnis dengan chaincode Go
- β Digital Wallet - Sistem pembayaran terintegrasi di blockchain
- β Quality Control - Pencatatan skor cupping dan tes residu
- β Geo-Tracking - Checkpoint dengan koordinat GPS
- β Endorsement Policy - Minimal 3 dari 5 organisasi untuk validasi
- β Event-Driven - Notifikasi real-time untuk transfer bank
- β Penalty System - Denda otomatis untuk pelanggaran suhu dan kualitas
- β Commission Split - Pembagian hasil 80% petani, 20% koperasi
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Frontend / Client App β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β REST API Server (Express.js) β
β Port: 3001 β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Hyperledger Fabric Network β
β βββββββββββ βββββββββββ βββββββββββ βββββββββββ βββββββββββ β
β β Petani β βLogistik β βKoperasi β βRegulatorβ βImportir β β
β β Peer0 β β Peer0 β β Peer0 β β Peer0 β β Peer0 β β
β ββββββ¬βββββ ββββββ¬βββββ ββββββ¬βββββ ββββββ¬βββββ ββββββ¬βββββ β
β β β β β β β
β ββββββββββββββ΄βββββββββββββ΄βββββββββββββ΄βββββββββββββ β
β mychannel β
β β β
β βββββββββββββ΄ββββββββββββ β
β β Chaincode: "kopi" β β
β β (Golang) β β
β βββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| No | Organisasi | MSP ID | Domain | Peran |
|---|---|---|---|---|
| 1 | Petani | PetaniMSP |
petani.co.id | Mendaftarkan panen baru, menerima pembayaran |
| 2 | Logistik | LogistikMSP |
logistik.co.id | Transportasi lokal & ekspor internasional |
| 3 | Koperasi | KoperasiMSP |
koperasi.co.id | Gudang, QC, pascapanen, menanggung risiko |
| 4 | Regulator | RegulatorMSP |
regulator.co.id | Inspeksi & persetujuan dokumen ekspor |
| 5 | Importir | ImportirMSP |
importir.co.id | Pembeli akhir, verifikasi kualitas tiba |
ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ
β PETANI β β LOGISTIK β β KOPERASI β β LOGISTIK β
β β β LOKAL β β (GUDANG) β β EKSPOR β
β CreateBatch ββββββΆβ Transport ββββββΆβ Receive + ββββββΆβ Start β
β (Panen) β β ToWarehouse β β ProcessQC β β Shipment β
β β β β β β β β
β DP 5% Cair β β Checkpoint β β Skor Cupping β β Loading β
β β β GPS Track β β Tes Residu β β Kontainer β
ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ
β β
ββββββββββββββββ β β
β REGULATOR βββββββββββββ β
β β β
β Approve/ β β
β Reject β β
β Export β β
ββββββββββββββββ β
βΌ
ββββββββββββββββββββββββββββββββββββ
β IMPORTIR β
β β
β ConfirmImport β
β (QC Final + Settlement) β
β β
β β Diterima β Pelunasan 95% β
β β Ditolak β Refund DP β
ββββββββββββββββββββββββββββββββββββ
| Status | Deskripsi |
|---|---|
PANEN_PETANI |
Batch baru didaftarkan petani |
MENUJU_GUDANG |
Dalam transportasi ke gudang koperasi |
DITERIMA_GUDANG_KOPERASI |
Tiba di gudang |
GAGAL_QC |
Kualitas tidak memenuhi standar |
SIAP_EKSPOR |
Lolos QC, siap diajukan ke regulator |
LOLOS_INSPEKSI_REGULATOR |
Dokumen ekspor disetujui |
DITOLAK_REGULATOR |
Ditolak regulator |
DALAM_PERJALANAN_EKSPOR |
Dalam pengiriman ke importir |
DITERIMA_IMPORTIR |
Diterima dengan baik di tujuan |
DITOLAK_IMPORTIR |
Ditolak karena kualitas menurun |
type KopiBatch struct {
BatchID string // ID unik batch
Status string // Status saat ini
Petani string // Nama petani
KebunGeo string // Koordinat GPS kebun
NamaLokasi string // Nama lokasi/desa
JenisKopi string // Arabica/Robusta
TanggalPanen string // Timestamp panen
// Logistik Lokal
SupirTruk string // Nama supir
PlatNomor string // Plat kendaraan
SuhuTrukLokal float64 // Suhu saat transportasi (Β°C)
BiayaLogistikLokal float64 // Biaya transportasi
// Organisasi/Koperasi
LokasiGudang string // Nama & kota gudang
MetodePascapanen string // Honey/Washed/Natural
TglTibaGudang string // Timestamp tiba
SkorCupping int // Skor QC awal (0-100)
SkorCuppingFinal int // Skor QC di importir
TesResidu string // BERSIH/TERKONTAMINASI
BeratBersih float64 // Berat setelah sortir (kg)
TglProsesQC string // Timestamp QC
// Ekspor
DokumenEkspor string // Nomor dokumen
StatusIzin string // APPROVED/REJECTED
TglIzinEkspor string // Timestamp izin
NamaKapal string // Nama kapal/vessel
NoKontainer string // Nomor kontainer
SuhuKontainer float64 // Suhu kontainer (Β°C)
TglBerangkat string // Timestamp keberangkatan
TglTerima string // Timestamp diterima importir
Importir string // Nama perusahaan importir
// Keuangan
NilaiKontrakEkspor float64 // Total nilai kontrak (IDR)
UangMuka float64 // DP 5%
PotonganDenda float64 // Total denda
BonusKualitas float64 // Bonus skor > 85
SisaTagihan float64 // Sisa yang harus dibayar
TotalDibayar float64 // Total yang sudah dibayar
FinalPayout float64 // Transfer terakhir
StatusPembayaran string // Status pembayaran
CatatanMasalah string // Catatan denda/masalah
JourneyHistory []Checkpoint // Riwayat perjalanan
}type Checkpoint struct {
Timestamp string // Waktu checkpoint
Location string // Nama lokasi
Coordinates string // Koordinat GPS
Activity string // Aktivitas yang dilakukan
Actor string // Pelaku/organisasi
}type Wallet struct {
MSPID string // ID organisasi
Balance float64 // Saldo (IDR)
}Pastikan sistem Anda sudah terinstall:
- Docker & Docker Compose (untuk Fabric network)
- Node.js v14+ (untuk REST API)
- Go 1.16+ (untuk chaincode development)
- Fablo (Hyperledger Fabric deployment tool)
# Install Fablo
npm install -g fablo
# Verifikasi instalasi
fablo versiongit clone <repository-url>
cd chaincode-supplychain-coffee-exportnpm installFile fablo-config.json sudah dikonfigurasi dengan 5 organisasi. Review jika perlu.
# Generate konfigurasi jaringan
fablo generate
# Start jaringan Fabric
fablo upnode enrollUp.jsOutput yang diharapkan:
--- Processing Organization: Petani (PetaniMSP) ---
β
Sukses Enroll Admin: admin-petani
β
Sukses Enroll User (Registered): PetaniUser
--- Processing Organization: Logistik (LogistikMSP) ---
β
Sukses Enroll Admin: admin-logistik
β
Sukses Enroll User (Registered): LogistikUser
... (dan seterusnya untuk 5 organisasi)
SELESAI. Semua 5 Organisasi Siap!
npm start
# atau
node server.jsServer berjalan di http://localhost:3001
curl -X POST http://localhost:3001/api/init-walletIni akan membuat:
- Wallet Importir: IDR 10.000.000.000
- Wallet Koperasi: IDR 5.000.000.000
- Wallet Petani: IDR 0
| Method | Endpoint | Organisasi | Deskripsi |
|---|---|---|---|
POST |
/api/create |
Petani | Buat batch baru (panen) |
POST |
/api/transport-lokal |
Logistik | Mulai transportasi ke gudang |
POST |
/api/add-checkpoint |
Logistik | Tambah checkpoint perjalanan |
POST |
/api/receive-warehouse |
Koperasi | Terima barang di gudang |
POST |
/api/process-qc |
Koperasi | Proses QC & pascapanen |
POST |
/api/approve-export |
Regulator | Approve/reject dokumen ekspor |
POST |
/api/start-shipment |
Logistik | Mulai pengiriman ekspor |
POST |
/api/confirm-import |
Importir | Konfirmasi penerimaan & QC final |
| Method | Endpoint | Deskripsi |
|---|---|---|
POST |
/api/init-wallet |
Inisialisasi saldo awal |
GET |
/api/wallet/:mspId |
Cek saldo organisasi |
| Method | Endpoint | Deskripsi |
|---|---|---|
GET |
/api/all-batches |
Ambil semua batch |
GET |
/api/batch/:id |
Ambil detail batch |
| Fungsi | MSP Required | Deskripsi |
|---|---|---|
InitWallet() |
Any | Inisialisasi wallet semua organisasi |
CreateBatch() |
PetaniMSP | Daftarkan panen baru + DP 5% |
TransportToWarehouse() |
LogistikMSP | Transportasi lokal |
AddCheckpoint() |
LogistikMSP | Tambah titik tracking |
ReceiveAtWarehouse() |
KoperasiMSP | Terima di gudang |
ProcessAndQC() |
KoperasiMSP | Quality control |
ApproveExport() |
RegulatorMSP | Approve/reject ekspor |
StartExportShipment() |
LogistikMSP | Mulai shipping |
ConfirmImport() |
ImportirMSP | Konfirmasi & settlement |
| Fungsi | Deskripsi |
|---|---|
ReadBatch() |
Baca detail batch |
BatchExists() |
Cek keberadaan batch |
GetAllBatches() |
Ambil semua batch |
GetWalletBalance() |
Cek saldo wallet |
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ALUR PEMBAYARAN β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β 1. CREATE BATCH β
β βββ Importir β Petani: DP 5% dari nilai kontrak β
β β
β 2. CONFIRM IMPORT (Sukses) β
β βββ Importir β Koperasi: 20% dari sisa (95%) β
β βββ Importir β Petani: 80% dari sisa (95%) β
β β
β 3. GAGAL QC / DITOLAK REGULATOR / DITOLAK IMPORTIR β
β βββ Koperasi β Importir: Refund DP 5% β
β (Koperasi menanggung risiko) β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Kondisi | Denda |
|---|---|
| Suhu truk lokal > 30Β°C | IDR 500.000 |
| Suhu kontainer ekspor > 25Β°C | 5% dari nilai kontrak |
| Penurunan skor cupping | 1% per poin penurunan |
| Kondisi | Bonus |
|---|---|
| Skor cupping > 85 | 10% dari nilai kontrak |
curl -X POST http://localhost:3001/api/create \
-H "Content-Type: application/json" \
-d '{
"id": "BATCH001",
"petani": "Pak Budi",
"geo": "-6.914744, 107.609810",
"namaLokasi": "Desa Pangalengan, Bandung",
"jenis": "Arabica",
"harga": 50000000
}'curl -X POST http://localhost:3001/api/transport-lokal \
-H "Content-Type: application/json" \
-d '{
"id": "BATCH001",
"supir": "Ahmad",
"plat": "D 1234 ABC",
"suhu": 28.5,
"currentGeo": "-6.914744, 107.609810"
}'curl -X POST http://localhost:3001/api/receive-warehouse \
-H "Content-Type: application/json" \
-d '{
"id": "BATCH001",
"nama": "Gudang Koperasi Maju",
"kota": "Bandung",
"geo": "-6.905977, 107.613144"
}'curl -X POST http://localhost:3001/api/process-qc \
-H "Content-Type: application/json" \
-d '{
"id": "BATCH001",
"metode": "Honey Process",
"skor": 87,
"residu": "BERSIH",
"berat": 950
}'curl -X POST http://localhost:3001/api/approve-export \
-H "Content-Type: application/json" \
-d '{
"id": "BATCH001",
"dokumen": "EXP/2024/001234",
"keputusan": "APPROVED"
}'curl -X POST http://localhost:3001/api/start-shipment \
-H "Content-Type: application/json" \
-d '{
"id": "BATCH001",
"kapal": "MV Pacific Star",
"kontainer": "MSKU1234567",
"suhu": 22.0,
"originGeo": "-6.102, 106.880"
}'curl -X POST http://localhost:3001/api/confirm-import \
-H "Content-Type: application/json" \
-d '{
"id": "BATCH001",
"importir": "Tokyo Coffee Co.",
"destGeo": "35.689, 139.691",
"skorAkhir": 85
}'curl http://localhost:3001/api/batch/BATCH001# Cek saldo petani
curl http://localhost:3001/api/wallet/PetaniMSP
# Cek saldo importir
curl http://localhost:3001/api/wallet/ImportirMSP
# Cek saldo koperasi
curl http://localhost:3001/api/wallet/KoperasiMSP# Restart jaringan
fablo down
fablo up
# Prune jaringan & buat ulang
fablo prune
fablo up# Hapus wallet & enroll ulang
rm -rf wallet/
node enrollUp.js# Upgrade chaincode
fablo chaincode upgrade kopi 1.1Pastikan folder fablo-target sudah ada setelah menjalankan fablo up.
Jika ingin reset saldo wallet:
curl -X POST http://localhost:3001/api/init-walletchaincode-supplychain-coffee-export/
βββ enrollUp.js # Script enroll user 5 organisasi
βββ server.js # REST API server
βββ package.json # Dependencies Node.js
βββ fablo-config.json # Konfigurasi Fablo (5 org)
βββ fablo # Fablo executable
βββ kopi/ # Chaincode folder
β βββ kopi.go # Smart contract (Go)
β βββ go.mod # Go module
β βββ vendor/ # Go dependencies
βββ wallet/ # Identitas user (generated)
βββ fablo-target/ # Network config (generated)
MIT License - Silakan gunakan dan modifikasi sesuai kebutuhan.
- Fork repository
- Buat branch fitur (
git checkout -b feature/AmazingFeature) - Commit perubahan (
git commit -m 'Add some AmazingFeature') - Push ke branch (
git push origin feature/AmazingFeature) - Buat Pull Request
Untuk pertanyaan atau dukungan, silakan buat issue di repository ini.
Made with β€οΈ for Indonesian Coffee Supply Chain