# SYD - TD/TP Blockchain [Github](https://github.com/dreimert/BuildYourBlockChain) ###### tags: `SYD` `TD` ## Etape 0 Modifications à apporter au code : ```javascript= socket.on('set', function (field, value, callback) { if (field in db) { // Si la clef est dans la base de donnée if(db[field].value != value){ const error = new Error(`set error : Field ${field} exists.`) console.info(error) callback(error.message) } callback() } else { console.info(`set ${field} : ${value}`) db[field] = { value, date: Date.now() // on sauvegarde la date de création } callback() } }) ``` On rajoute une condition pour que la fonction ne renvoie pas une erreur quand on veut affecter à une clé la valeur qu'elle possède déjà. ## Etape 1 [Github](https://github.com/dreimert/BuildYourBlockChain/tree/etape-1) ### Confiance et défaillance Commandes pour définir le port où lancer le serveur (ici le port 1234) ```bash node serveur.js --port=1234 node serveur.js -p=1234 ``` [Tip : Différence entre - et --](https://stackoverflow.com/questions/28279812/bash-difference-between-and-options) ### Jouer avec des inconnus Ajout de la commande ```peers``` qui retourne la liste des ports utilisés : ```javascript= socket.on('peers', function (callback) { console.info('peers') callback(undefined, neighbors) }) ``` Résultat : ```bash qbordignon@2D-LINUX-060:~/Documents/4TC/SYD/Blockchain/BuildYourBlockChain$ node cli.js peers Connection établie peers => a,b,c Disconnect ``` Ajout de la commande ```addPeers``` qui ajoute un voisin à la liste : ```javascript= socket.on('addPeer', function(portNumber, callback) { if(neighbors.includes(portNumber)){ const error = new Error(`addPeer error : neighbor ${portNumber} exists`) console.info(error) callback(error.message) } else { console.info(`addPeer ${portNumber}`) neighbors.push(portNumber) callback() } }) ``` Résultat : ```bash qbordignon@2D-LINUX-098:~/Documents/4TC/SYD/Blockchain/BuildYourBlockChain$ node cli.js addPeer 3002 Connection établie addPeer 3002 => OK Disconnect qbordignon@2D-LINUX-098:~/Documents/4TC/SYD/Blockchain/BuildYourBlockChain$ node cli.js peers Connection établie peers => 3002 Disconnect qbordignon@2D-LINUX-098:~/Documents/4TC/SYD/Blockchain/BuildYourBlockChain$ node cli.js addPeer 3002 Connection établie addPeer 3002 => addPeer error : neighbor 3002 exists Disconnect qbordignon@2D-LINUX-098:~/Documents/4TC/SYD/Blockchain/BuildYourBlockChain$ node cli.js addPeer 3001 Connection établie addPeer 3001 => OK Disconnect qbordignon@2D-LINUX-098:~/Documents/4TC/SYD/Blockchain/BuildYourBlockChain$ node cli.js peers Connection établie peers => 3002,3001 Disconnect ``` Modification de la commande ```addPeer``` pour qu'elle crée une connexion avec le noeud voisin ```javascript= socket.on('addPeer', function(portNumber, callback) { if(neighbors.includes(portNumber)){ const error = new Error(`addPeer error : neighbor ${portNumber} exists`) console.info(error) callback(error.message) } else { console.info(`addPeer ${portNumber}`) neighbors.push(portNumber) const socket = ioClient(`http://localhost:${portNumber}`, { path: '/byc' }); callback() } }) ``` Modification de la commande ```addPeer``` pour qu'elle envoie une commande ```auth``` avec son propre port en paramètre à l'autre serveur. ```javascript= socket.on('addPeer', function(portNumber, callback) { if(neighbors.includes(portNumber)){ const error = new Error(`addPeer error : neighbor ${portNumber} exists`) console.info(error) callback(error.message) } else { console.info(`addPeer ${portNumber}`) neighbors.push(portNumber) const socket = ioClient(`http://localhost:${portNumber}`, { path: '/byc' }); socket.on('connect', () => { console.info('Connection établie') socket.emit('auth', argv.port, (error) => { if(error){ console.error(error) } else { console.info('OK') } }) }) callback() } }) ``` Résultat : ```bash qbordignon@2D-LINUX-098:~/Documents/4TC/SYD/Blockchain/BuildYourBlockChain$ node cli.js addPeer 3002 Connection établie addPeer 3002 => OK Disconnect qbordignon@2D-LINUX-098:~/Documents/4TC/SYD/Blockchain/BuildYourBlockChain$ node cli.js addPeer 3001 Connection établie addPeer 3001 => OK Disconnect qbordignon@2D-LINUX-098:~/Documents/4TC/SYD/Blockchain/BuildYourBlockChain$ node cli.js peers Connection établie peers => 3002,3001 Disconnect qbordignon@2D-LINUX-098:~/Documents/4TC/SYD/Blockchain/BuildYourBlockChain$ node cli.js -p=3001 peers Connection établie peers => 3000 Disconnect qbordignon@2D-LINUX-098:~/Documents/4TC/SYD/Blockchain/BuildYourBlockChain$ node cli.js -p=3002 peers Connection établie peers => 3000 Disconnect qbordignon@2D-LINUX-098:~/Documents/4TC/SYD/Blockchain/BuildYourBlockChain$ node cli.js -p=3002 addPeer 3001 Connection établie addPeer 3001 => OK Disconnect qbordignon@2D-LINUX-098:~/Documents/4TC/SYD/Blockchain/BuildYourBlockChain$ node cli.js -p=3002 peers Connection établie peers => 3000,3001 Disconnect qbordignon@2D-LINUX-098:~/Documents/4TC/SYD/Blockchain/BuildYourBlockChain$ node cli.js -p=3001 peers Connection établie peers => 3000,3002 Disconnect ```