Skip to content

dipaadipati/web3-pemilu-backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

2 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Web3 Pemilu Backend

Sistem voting berbasis blockchain yang dibangun dengan Hardhat dan Solidity. Proyek ini mengimplementasikan sistem pemilihan menggunakan pengenalan wajah untuk autentikasi pemilih pada smart contract Ethereum.

πŸ—οΈ Arsitektur

Backend ini menyediakan fungsionalitas smart contract untuk sistem voting terdesentralisasi yang menggunakan pengenalan wajah untuk autentikasi pemilih. Sistem ini mencegah voting ganda dan memastikan transparansi melalui teknologi blockchain.

πŸ“‹ Prasyarat

  • Node.js (v18 atau lebih tinggi)
  • Bun (opsional, untuk manajemen package yang lebih cepat)
  • Git

πŸš€ Mulai Cepat

1. Clone Repository

git clone https://github.com/dipaadipati/web3-pemilu-backend.git
cd web3-pemilu-backend

2. Install Dependencies

Menggunakan npm:

npm install

Atau menggunakan Bun:

bun install

3. Jalankan Local Hardhat Network

npm run node
# atau
bun run node

Ini akan memulai jaringan Ethereum lokal di http://localhost:8545 dengan 20 akun testing.

4. Deploy Smart Contracts

Di terminal baru:

npm run deploy
# atau
bun run deploy

5. Verifikasi Deployment

Periksa akun admin:

npm run check-deployed-admin
# atau
bun run check-deployed-admin

πŸ“œ Smart Contract

Kontrak FaceVoting

Kontrak utama contracts/Voting.sol mencakup:

  • Autentikasi Pengenalan Wajah: Menggunakan hash wajah untuk identifikasi pemilih
  • Manajemen Proposal: Admin dapat menambahkan proposal voting
  • Pelacakan Vote: Mencegah voting ganda dan melacak jumlah suara
  • Kontrol Admin: Hanya admin yang dapat menambahkan proposal

Fungsi Utama:

  • addProposal(string memory _description): Menambah proposal voting baru (khusus admin)
  • vote(string memory _faceHash, uint256 _proposalId): Memberikan suara menggunakan hash wajah
  • getAllProposals(): Mendapatkan semua proposal yang tersedia
  • voters(string faceHash): Memeriksa status pemilih

πŸ› οΈ Script yang Tersedia

Script Deskripsi
npm run node Menjalankan jaringan Hardhat lokal
npm run deploy Deploy kontrak ke localhost
npm run check-admin Memeriksa konfigurasi admin
npm run check-deployed-admin Memverifikasi admin kontrak yang telah di-deploy
npm run init Inisialisasi proyek Hardhat baru

πŸ”§ Development

Struktur Proyek

web3-pemilu-backend/
β”œβ”€β”€ contracts/           # Smart contract Solidity
β”‚   β”œβ”€β”€ Lock.sol        # Contoh kontrak
β”‚   └── Voting.sol      # Kontrak voting utama
β”œβ”€β”€ scripts/            # Script deployment dan utilitas
β”‚   β”œβ”€β”€ deploy.js       # Deployment kontrak
β”‚   β”œβ”€β”€ check-admin.js  # Verifikasi admin
β”‚   └── check-deployed-admin.js
β”œβ”€β”€ test/               # Test kontrak
β”œβ”€β”€ artifacts/          # Kontrak yang telah dikompilasi
β”œβ”€β”€ cache/              # Cache Hardhat
└── ignition/           # Modul deployment

Menambahkan Proposal Baru

Setelah deployment, Anda dapat menambahkan proposal melalui akun admin:

// Contoh: Menambahkan proposal secara programatis
const contract = await ethers.getContractAt("FaceVoting", contractAddress);
await contract.addProposal("Kandidat A");
await contract.addProposal("Kandidat B");

Testing

Jalankan test kontrak:

npx hardhat test

🌐 Repository Terkait

Aplikasi Frontend

  • Repository: web3-pemilu
  • Teknologi: React.js / Next.js dengan integrasi Web3
  • Fitur:
    • Interface pengenalan wajah
    • Interface voting
    • Hasil real-time

πŸ” Fitur Keamanan

  • Autentikasi Hash Wajah: Menggunakan hash kriptografi dari encoding wajah
  • Penegakan Suara Tunggal: Blockchain mencegah voting ganda
  • Kontrol Admin: Hanya admin yang berwenang dapat mengelola proposal
  • Hasil Transparan: Semua suara dicatat di blockchain
  • Rekaman Tidak Dapat Diubah: Riwayat voting tidak dapat dimodifikasi

🌍 Konfigurasi Network

Development Lokal

Deployment Testnet

Untuk deploy di testnet, update hardhat.config.cjs:

module.exports = {
  solidity: "0.8.28",
  networks: {
    sepolia: {
      url: "https://sepolia.infura.io/v3/YOUR_INFURA_KEY",
      accounts: ["YOUR_PRIVATE_KEY"]
    }
  }
};

🀝 Panduan Integrasi

Integrasi Frontend

  1. Install Library Web3:

    npm install ethers web3
  2. Koneksi ke Kontrak:

    import { ethers } from 'ethers';
    
    const provider = new ethers.providers.JsonRpcProvider('http://localhost:8545');
    const contract = new ethers.Contract(contractAddress, abi, provider);
  3. ABI Kontrak: Gunakan ABI yang dihasilkan dari artifacts/contracts/Voting.sol/FaceVoting.json

Endpoint API

Smart contract berfungsi sebagai API melalui panggilan Web3:

  • GET Proposals: contract.getAllProposals()
  • POST Vote: contract.vote(faceHash, proposalId)
  • GET Status Voter: contract.voters(faceHash)

πŸ“Š Monitoring & Analytics

  • Blockchain Explorer: Gunakan block explorer lokal atau Etherscan untuk mainnet
  • Event Logs: Monitor event kontrak untuk update real-time
  • Penggunaan Gas: Lacak biaya transaksi dan optimisasi

🚨 Troubleshooting

Masalah Umum

  1. "Artifact for contract 'Voting' not found"

    • Nama kontrak adalah FaceVoting, bukan Voting
    • Update script deploy untuk menggunakan nama yang benar
  2. Masalah Koneksi Network

    • Pastikan Hardhat node sedang berjalan
    • Periksa RPC URL di konfigurasi frontend
  3. Transaksi Gagal

    • Periksa apakah pemilih sudah voting
    • Verifikasi ID proposal ada
    • Pastikan gas cukup

Informasi Admin Account

Untuk memeriksa dan mendapatkan informasi admin account:

# Periksa admin yang telah di-deploy
npm run check-deployed-admin

# Output akan menampilkan:
# - Alamat admin kontrak
# - Semua akun Hardhat yang tersedia
# - Private key admin account

Contoh Output Admin Check:

=== CHECKING DEPLOYED CONTRACT ADMIN ===
Contract admin address: 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
Your current address: 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
Match? true

=== ALL HARDHAT ACCOUNTS ===
Account 0: 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 πŸ‘‘ ADMIN πŸ“ CURRENT
Account 1: 0x70997970C51812dc3A010C7d01b50e0d17dc79C8
...

=== ADMIN ACCOUNT INFO ===
Admin is Account 0
Admin private key: 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80

πŸ“ Lisensi

Proyek ini dilisensikan di bawah Lisensi MIT. Lihat file LICENSE untuk detail.

🀝 Kontribusi

  1. Fork repository
  2. Buat branch fitur
  3. Commit perubahan Anda
  4. Push ke branch
  5. Buka Pull Request

πŸ“ž Dukungan

Untuk dukungan dan pertanyaan:

  • Buat issue di repository ini
  • Hubungi tim development

πŸ”§ Konfigurasi Tambahan

Gas Optimization

Untuk optimisasi gas di production:

// Di hardhat.config.cjs
module.exports = {
  solidity: {
    version: "0.8.28",
    settings: {
      optimizer: {
        enabled: true,
        runs: 200
      }
    }
  }
};

πŸ‘₯ Team

  • Developer: M. Adipati Rezkya
  • Blockchain: Hardhat + Solidity
  • Frontend: Next.js + TypeScript

Catatan: Ini adalah proyek demo untuk tujuan edukasi. Pastikan audit keamanan yang tepat sebelum penggunaan produksi.

About

Sistem voting berbasis blockchain yang dibangun dengan Hardhat dan Solidity. Proyek ini mengimplementasikan sistem pemilihan menggunakan pengenalan wajah untuk autentikasi pemilih pada smart contract Ethereum.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors