## script ```` const rpc = require("./utils/rpc"); const model = require("./models/blocks.model"); let block; const start = async () => { // SYNCRONIZE THE BLOCKCHAIN // 1. Récupérer le dernier bloc enregistré en base de données let dbBlock = await model.getCurrent(); let lastHash; if(dbBlock === null) { // Genesis block lastHash = "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f" } else { lastHash = dbBlock.hash; } // Genesis block if(dbBlock === null) { block = await rpc.call({ jsonrpc: "1.0", method: "getblock", id: "curltext", params: [lastHash], }); // coinbasevalue block.coinbasevalue = 50.00000000; await model.saveBlock(block); } else { block = await rpc.call({ jsonrpc: "1.0", method: "getblock", id: "curltext", params: [lastHash], }); } // 2. Récupérer les dernier bloc connus while (block.nextblockhash !== undefined) { block = await registerBlock(block.nextblockhash); lastHash = block.hash; } // PULL 1S BLOCKCHAIN // 3. Une fois la syncro terminée, on récupère le dernier bloc connu chaque minute. Si le dernier block contient block.nextblockhash !== undefined setInterval(async () => { block = await rpc.call({ jsonrpc: "1.0", method: "getblock", id: "curltext", params: [lastHash], }); // Si on a une autre TX à dépiler if(block.nextblockhash !== undefined) { while (block.nextblockhash !== undefined) { block = await registerBlock(block.nextblockhash); } } else { // Si on a une seule TX à dépiler, vérifier qu'on l'a pas déjà faite let dbBlock = await model.getCurrent(); if(dbBlock.hash === block.previousblockhash) { console.log('New height') block = await registerBlock(block.nextblockhash); } } }, 1000); } const registerBlock = async(blockhash) => { // Get the bloc block = await rpc.call({ jsonrpc: "1.0", method: "getblock", id: "curltext", params: [blockhash,2], }); // If TX is not empty if(block.tx.length !== 0) { block.coinbasevalue = block.tx[0].vout.reduce((partialSum, vout) => partialSum + vout.value, 0) } // Add a YYYY-MM-DD date block.date = new Date(block.time*1000).toISOString().split('T')[0]; // save the block await model.saveBlock(block); return block; } start() ````