Drakon è una rete blockchain peer-to-peer progettata per essere scalabile, sicura e facile da usare. Questo repository contiene il codice sorgente per un nodo Drakon, che può essere eseguito su qualsiasi sistema che supporti Node.js.
- Struttura blockchain completa con supporto per transazioni
- Rete peer-to-peer basata su libp2p
- Scoperta automatica dei nodi attraverso bootstrap nodes e DHT
- API REST per interagire con il nodo
- Gestione di wallet integrata
- Sincronizzazione della blockchain tra nodi
- Node.js v14 o superiore
- NPM v6 o superiore
# Clona il repository
git clone https://github.com/tuoUsername/drakon.git
cd drakon
# Installa le dipendenze
npm installPer avviare un nodo con la configurazione predefinita:
node src/index.jsIl nodo creerà automaticamente una directory .drakon-node nella home dell'utente, dove verranno salvati tutti i dati del nodo, inclusi blockchain, wallet e configurazioni.
Il nodo supporta diverse opzioni di configurazione che possono essere specificate tramite variabili d'ambiente:
API_PORT: Porta per l'API REST (default: 7001)P2P_PORT: Porta per la comunicazione P2P (default: 6001)DATA_DIR: Directory per i dati (default: ~/.drakon-node)MINING_ENABLED: Abilita il mining (default: false)BOOTSTRAP_NODES: Lista di nodi bootstrap in formato JSONIS_BOOTSTRAP: Imposta il nodo come bootstrap node (default: false)
Esempio:
API_PORT=8080 P2P_PORT=9000 MINING_ENABLED=true node src/index.jsPer far comunicare i nodi tra loro su macchine diverse, è necessario configurare i bootstrap nodes. Drakon utilizza un sistema di discovery distribuito che permette ai nodi di trovarsi automaticamente una volta connessi alla rete.
-
Avvio del primo nodo
node src/index.js
Dai log, prendi nota dell'indirizzo IP e del PeerId (una stringa come
12D3KooWXXX...) -
Avvio del secondo nodo
BOOTSTRAP_NODES='[{"host":"IP-DEL-PRIMO-NODO","port":6001,"id":"PEER-ID-DEL-PRIMO-NODO"}]' node src/index.jsSostituisci
IP-DEL-PRIMO-NODOePEER-ID-DEL-PRIMO-NODOcon i valori ottenuti dal primo nodo. -
Aggiornamento del primo nodo (opzionale, ma consigliato) Riavvia il primo nodo con la conoscenza del secondo:
BOOTSTRAP_NODES='[{"host":"IP-DEL-SECONDO-NODO","port":6001,"id":"PEER-ID-DEL-SECONDO-NODO"}]' node src/index.js
La rete Drakon include due nodi bootstrap predefiniti attivi che facilitano l'ingresso nella rete:
Server 1: 51.89.148.92:6001 (ID: 12D3KooWMrCy57meFXrLRjJQgNT1civBXRASsRBLnMDP5aGdQW3F)
Server 2: 135.125.232.233:6001 (ID: 12D3KooWGa15XBTP5i1JWMBo4N6sG9Wd3XfY76KYBE9KAiSS1sdK)
Questi nodi sono configurati nella rete per impostazione predefinita, quindi i nuovi nodi dovrebbero essere in grado di connettersi automaticamente alla rete senza configurazione aggiuntiva.
Per connettersi manualmente a questi nodi, è possibile utilizzare:
BOOTSTRAP_NODES='[{"host":"51.89.148.92","port":6001,"id":"12D3KooWMrCy57meFXrLRjJQgNT1civBXRASsRBLnMDP5aGdQW3F"},{"host":"135.125.232.233","port":6001,"id":"12D3KooWGa15XBTP5i1JWMBo4N6sG9Wd3XfY76KYBE9KAiSS1sdK"}]' node src/index.jsUna volta avviato, il nodo espone un'API REST sulla porta specificata (default: 7001).
Endpoint principali:
GET /status: Restituisce lo stato del nodoGET /blocks: Elenco dei blocchi nella blockchainGET /peers: Elenco dei peer connessiPOST /transactions: Crea una nuova transazione
Tutti i dati vengono salvati nella directory .drakon-node nella home dell'utente, che contiene:
data/: Database blockchainwallet/: File del walletpeer-id/: Identificativo permanente del nodoknown-peers.json: Cache dei peer conosciuti
- Verifica che le porte necessarie (6001 per P2P, 7001 per API) siano aperte nel firewall
- Controlla che l'indirizzo IP fornito come bootstrap node sia raggiungibile
- Verifica che il formato del PeerId sia corretto nel parametro BOOTSTRAP_NODES
Questo errore può verificarsi se:
- La porta è già in uso: prova a cambiare porta con P2P_PORT
- Non ci sono permessi sufficienti: verifica i permessi dell'utente
Per contribuire al progetto:
- Forka il repository
- Crea un branch per la tua feature (
git checkout -b feature/amazing-feature) - Committa i tuoi cambiamenti (
git commit -m 'Aggiungi una feature fantastica') - Pusha al branch (
git push origin feature/amazing-feature) - Apri una Pull Request
Per assistenza o per entrare in contatto con gli sviluppatori:
- Francesco Guarino - [email protected]
Questo progetto è sotto licenza MIT - vedi il file LICENSE per i dettagli.