示例#1
0
        /// <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);
        }
示例#2
0
        /// <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();
        }
示例#3
0
        /// <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);
        }