OilChain è un progetto universitario sviluppato per il corso di "Sicurezza dei Dati" presso l'Università di Salerno. Utilizza la tecnologia blockchain (Ethereum) per garantire trasparenza, tracciabilità e autenticità della produzione di olio d'oliva.
👨🌾 Produttori e Amministratori creano lotti di olio e registrano ogni fase di produzione sulla blockchain (raccolta, pulizia, pressatura, filtraggio, confezionamento).
👥 Consumatori scansionano il codice QR sulla bottiglia per verificare istantaneamente l'origine e la storia completa del loro olio - direttamente dalla blockchain, senza intermediari.
- 🔒 Immutabilità on-chain: Tutte le informazioni del lotto sono registrate permanentemente su Ethereum
- 📱 Verifica tramite QR: Scansiona il codice sulla bottiglia e accedi ai dettagli completi della produzione
- 📊 Tracciabilità completa: Segui il percorso dell'olio da raccolta a confezionamento
- 👨💼 Gestione Admin: Dashboard intuitiva per creare, modificare e monitorare lotti
- 🔐 Autenticazione sicura: Sistema di login integrato con Better-auth
- ✨ Interfaccia moderna: UI responsiva costruita con Nuxt, TailwindCSS e NuxtUI v3
- Accedi al dashboard admin (
/admin) - Crea un nuovo lotto d'olio
- Genera il QR code per il lotto (scaricabile)
- Aggiungi le informazioni di produzione (varietà di oliva, provenienza, ecc)
- Aggiorna le fasi di produzione man mano che il lotto progredisce
- Il codice viene applicato sulla bottiglia di olio
- Scansiona il QR code sulla bottiglia di olio
- Visualizza istantaneamente:
- Nome e varietà dell'olio
- Data di inizio produzione
- Fase attuale di lavorazione
- Cronologia completa delle fasi (raccolta → confezionamento)
- Verifica l'autenticità del prodotto direttamente dalla blockchain
- Nuxt 3: Framework Vue.js moderno con SSR e API server integrato
- TailwindCSS: Utility-first CSS per styling rapido e responsivo
- NuxtUI v3: Libreria di componenti UI pre-stilizzati
- Vue Qrcode Reader: Lettore di codici QR per browser
- Better-auth: Autenticazione leggera e sicura con SQLite
- SQLite: Database locale per utenti e sessioni
- Ethereum (Polygon/Hardhat): Blockchain Ethereum per la tracciabilità
- Hardhat: Ambiente di sviluppo per smart contract
- Ethers.js: Libreria JavaScript per interagire con Ethereum
- Solidity: Linguaggio per smart contract
- Node.js (v18+)
- pnpm (package manager)
- Git
-
Clona il Repository
git clone https://github.com/tuousername/oilchain.git cd oilchain -
Installa le Dipendenze
pnpm install
pnpm run hardhat:compileCompila i contratti Solidity utilizzando Hardhat.
pnpm run hardhat:startAvvia una rete Ethereum locale. Il terminale mostrerà:
- RPC URL (es.
http://127.0.0.1:8545) - Account di test con chiavi private
- Gas price e altre configurazioni
Mantieni questo terminale aperto!
In un nuovo terminale:
pnpm run hardhat:deployDistribuisce lo smart contract sulla blockchain locale e salva l'indirizzo del contratto.
Crea un file .env nella root del progetto:
# Blockchain (dai risultati di hardhat:start e hardhat:deploy)
NUXT_PUBLIC_BC_URL=http://127.0.0.1:8545
NUXT_PUBLIC_BC_CONTRACT_ADDRESS=0x...(indirizzo del contratto)
NUXT_BC_PRIVATE_KEY=0x...(chiave privata admin)pnpm run db:migrateCrea le tabelle del database SQLite.
pnpm run db:seed-userCrea un account admin predefinito:
- Email:
admin@oilchain.com - Password:
admin123
pnpm run devAvvia il server Nuxt (normalmente su https://localhost:3000).
oilchain/
├── app/ # Applicazione Nuxt
│ ├── pages/
│ │ ├── index.vue # Home pubblica + scanner QR
│ │ ├── batch/ # Pagina dettagli lotto
│ │ └── admin/ # Dashboard amministratore
│ ├── components/
│ │ └── Oil/ # Componenti specifici olio
│ ├── composables/
│ │ └── useOilChain.ts # Composable per blockchain
│ └── layouts/
├── contracts/
│ └── OilChain.sol # Smart contract principale
├── server/
│ ├── api/
│ │ ├── batches/ # API gestione lotti
│ │ ├── oil/ # API olio
│ │ └── auth/ # API autenticazione
│ └── utils/
│ └── auth.ts # Configurazione Better-auth
├── shared/
│ └── types.ts # Tipi TypeScript condivisi
└── hardhat.config.js # Configurazione Hardhat
Il contratto OilChain.sol implementa:
- ✅ Creazione di nuovi lotti
- ✅ Memorizzazione immutabile delle fasi di produzione
- ✅ Funzioni di lettura pubblica (verifiche senza gas)
- ✅ Controlli di accesso (solo admin può modificare)
