public void AggiungiBlocco(Blocco blocco) { //prende i dati inerenti al blocco precedente rispetto a quello da aggiungere Blocco latestBlock = GetUltimoBlocco(); //aumenta l'indice del blocco +1 rispetto a precedente blocco.Indice = latestBlock.Indice + 1; // calcola il suo hash partendo da quello del precedente blocco.HashPrecedente = latestBlock.HashAttuale; //instruzione non necessaria quando si introduce il concetto di MINING //blocco.HashAttuale = blocco.CalcolaHash(); //dopo aver inserito difficoltà posso integrare operazioni di mining blocco.Mina(Difficoltà); //aggiunge il blocco alla catena Catena.Add(blocco); }
//verifica l'integrità della blockchain public bool IsValido() { //finché ci sono blocchi for (int pos = 1; pos < Catena.Count; pos++) { Blocco bloccoCorrente = Catena[pos]; Blocco bloccoPrecedente = Catena[pos - 1]; //ricalcola l'hash del blocco analizzato, se è diverso da quello memorizzato ritorna false (catena non valida) if (bloccoCorrente.HashAttuale != bloccoCorrente.CalcolaHash()) { return(false); } //ricalcola l'hash del blocco precedente, se è diverso da quello memorizzato ritorna false (catena non valida) if (bloccoCorrente.HashPrecedente != bloccoPrecedente.HashAttuale) { return(false); } } //se tutti i blocchi sono coerenti tra valore presente e valore aspetta, ritorna true (catena valida) return(true); }