/// <summary>Nel caso in cui la catena fosse vuota, si occupa di generare un primo blocco</summary> /// <returns>Il primo blocco della blockchain</returns> #endregion public Blocco CreaBloccoIniziale() { TransazioniInAttesa = new List <Transazione>(); var blocco = new Blocco(DateTime.Now, null, TransazioniInAttesa); blocco.Mina(Difficoltà); return(blocco); }
/// <summary>Genera un nuovo blocco e lo aggiunge alla catena al fine di validare una delle transazioni che devono essere ancora minate</summary> /// <param name="miner">Prende un oggetto di tipo utente (miner)</param> #endregion public void MinaTransazioni(Utente miner) { TransazioniInAttesa = new List <Transazione>(); CreaTransazione(new Transazione(null, miner, Ricompensa)); var blocco = new Blocco(DateTime.Now, GetUltimoBlocco().HashBloccoCorrente, TransazioniInAttesa); AggiungiBlocco(blocco); Difficoltà++; SmartContract.RicompensaMiner(miner); AggiornaSaldoUtenti(); }
/// <summary>Si aggancia all'ultimo blocco disponibile e genera tutto il necessario per inserire in coda il blocco che si sta creando.</summary> /// <param name="blocco">Blocco della catena generato dal costruttore</param> #endregion public void AggiungiBlocco(Blocco blocco) { // prende i dati inerenti al blocco precedente rispetto a quello da aggiungere var ultimoBlocco = GetUltimoBlocco(); // aumenta l'indice del blocco +1 rispetto a precedente blocco.Indice = ultimoBlocco.Indice + 1; // calcola il suo hash partendo da quello del precedente blocco.HashPrecedente = ultimoBlocco.HashBloccoCorrente; // dopo aver inserito difficoltà posso effettuare il mining blocco.Mina(Difficoltà); // aggiunge il blocco alla catena Catena.Add(blocco); }