Пример #1
0
    def main():
        pool = PoolMinado()
        transacciones = []
        blockchain = CadenaBloques()
        #Se construye una transacción aleatoria para bloque genésis
        emisor = Bloque.generarBloqueHash(random())
        receptor = Bloque.generarBloqueHash(random())
        cantidad = uniform(2.5, 1000.0)
        transacciones.append(Transaccion(emisor, receptor, cantidad))
        blockchain.bloqueGenesis(transacciones)

        print("Agregando nodos mineros para la blockchain ...")
        totalUsuarios = 25
        totalMineros = 5

        usuarios = {}
        for i in range(totalUsuarios):
            temp = Usuario(i)
            temp.setHashUsuario()
            usuarios[temp.gethashUsuario] = temp

        #Se construye una conjunto aleatorio de nodos mineros
        usuariosNodo = []
        usuariosMineros = {}
        contador = totalUsuarios // totalMineros - 1
        aux = 0
        for key in usuarios:
            usuariosMineros[key] = usuarios[key]
            if (aux < contador):
                aux += 1
            else:
                usuariosNodo.append(copy.copy(usuariosMineros))
                aux = 0
                usuariosMineros = {}

        mineros = []
        for i in range(len(usuariosNodo)):
            address = "127.0.0." + str(1 + randrange(253))
            puerto = 1025 + randrange(60000)
            descripcion = "nodo minero número " + str(i)
            nodo = NodoMinador(address, puerto, descripcion, usuariosNodo[i])
            nodo.actualizarCadena(blockchain)
            mineros.append(nodo)

        #Se construye una cadena de bloques con 10 bloques
        for i in range(1, 10):
            transacciones = []
            #Se construye una conjunto aleatorio de transacciones
            for tr in range(1 + randrange(3)):
                emisor = Bloque.generarBloqueHash(random())
                receptor = Bloque.generarBloqueHash(random())
                cantidad = uniform(2.5, 1000.0)
                transacciones.append(Transaccion(emisor, receptor, cantidad))

            pool.torneoPorNuevoBloque(transacciones)
            print("Iteracion " + str(i) + " La cadena es válida? " +
                  str(blockchain.validarBlockchain()) + " ahora tiene " +
                  str(len(blockchain._cadena)) + " bloques")

        pprint.pprint(jsonpickle.pickler.Pickler().flatten(blockchain))
    def main():
        transacciones = []
        #Se construye una conjunto aleatorio de transacciones
        for i in range(5):
            emisor = Bloque.generarBloqueHash(random())
            receptor = Bloque.generarBloqueHash(random())
            cantidad = uniform(2.5, 1000.0)
            transacciones.append(Transaccion(emisor, receptor, cantidad))

        print("CONJUNTO ALEATORIO DE TRANSACCIONES")
        pprint.pprint(jsonpickle.pickler.Pickler().flatten(transacciones))
Пример #3
0
    def main():
       transacciones = [];
       blockchain = CadenaBloques()
       #Se construye una transacción aleatoria para bloque genésis
       emisor = Bloque.generarBloqueHash(random())
       receptor = Bloque.generarBloqueHash(random())
       cantidad = uniform(2.5, 1000.0) 
       transacciones.append(Transaccion(emisor, receptor,cantidad));
       blockchain.bloqueGenesis(transacciones)
       
       totalUsuarios = 25;
       totalMineros = 5;
    
       usuarios = {};
       for i in range(totalUsuarios):
           temp = Usuario(i);
           temp.setHashUsuario();
           usuarios[temp.gethashUsuario] = temp;
       
       #Se construye una conjunto aleatorio de nodos mineros
       usuariosNodo = [];
       usuariosMineros = {};
       contador = totalUsuarios//totalMineros - 1;
       aux = 0;
       for key in usuarios:
           usuariosMineros[key] = usuarios[key];
           if(aux < contador):
              aux += 1;
           else:
               usuariosNodo.append(copy.copy(usuariosMineros));
               aux = 0;
               usuariosMineros = {};

       mineros = [];
       for i in range(len(usuariosNodo)):
           address = "127.0.0." + str(1+randrange(253))
           puerto = 1025+randrange(60000)
           descripcion = "nodo minero número " + str(i)
           nodo = NodoMinador(address, puerto,descripcion,usuariosNodo[i])
           nodo.actualizarCadena(blockchain)
           mineros.append(nodo);
       
       print("CONJUNTO ALEATORIO DE NODOS MINEROS")
       #pprint.pprint(jsonpickle.pickler.Pickler().flatten(mineros))
       for i in mineros:
           print(i);
           print("Usuarios Mineros en el Nodo");
           for key in i._usuariosMineros:
               print(i._usuariosMineros[key]);
           print("==========================================================")
Пример #4
0
    def main():
       #Cada bloque de prueba se ha creado con un conjunto aleatorio transacciones
       transacciones = [];
       #Se construye una conjunto aleatorio de transacciones para bloque genésis
       emisor = Bloque.generarBloqueHash(random())
       receptor = Bloque.generarBloqueHash(random())
       cantidad = uniform(2.5, 1000.0) 
       transacciones.append(Transaccion(emisor, receptor,cantidad));
       #0 para indicar que el bloque no ha sido minado
       genesis = Bloque(0,0,Bloque.generarBloqueHash(0),transacciones);
       cadena = [genesis];
       
        #Se construye una pseudocadena con 5 bloques
       for i in range(1,5):
              transacciones = [];
              #Se construye una conjunto aleatorio de transacciones
              for t in range(1+randrange(3)):
                  emisor = Bloque.generarBloqueHash(random())
                  receptor = Bloque.generarBloqueHash(random())
                  cantidad = uniform(2.5, 1000.0) 
                  transacciones.append(Transaccion(emisor, receptor,cantidad));
                  
              cadena.append(Bloque(i,0,Bloque.generarBloqueHash(cadena[i-1].gethashBloque()) , transacciones));
 
       pprint.pprint(jsonpickle.pickler.Pickler().flatten(cadena))
Пример #5
0
 def nuevoBloque(self, minado, hashBloque, trans):
     """
     Construye e inserta el siguiente bloque de la cadena
     :param minado Método de minado del bloque
     :param hashBloque Hash generado para el bloque
     :return Bloque nuevo bloque generado
     """
     bloque = Bloque(indice=len(self._cadena),
                     minado=minado,
                     hashBloque=hashBloque,
                     transacciones=trans.copy())
     self._cadena.append(bloque)
     return bloque
Пример #6
0
    def main():
        pool = PoolMinado()
        transacciones = []
        blockchain = CadenaBloques()
        #Se construye una transacción aleatoria para bloque genésis
        emisor = Bloque.generarBloqueHash(random())
        receptor = Bloque.generarBloqueHash(random())
        cantidad = uniform(2.5, 1000.0)
        transacciones.append(Transaccion(emisor, receptor, cantidad))
        blockchain.bloqueGenesis(transacciones)
        print("La cadena tiene un " + str(len(blockchain._cadena)) +
              " Bloque, el genésis")
        print("Agregando nodos mineros para la blockchain ...")

        maxUsuarios = 25
        maxMineros = 5
        maxTransaccionesPorBloque = 10
        totalBloquesCaena = 100

        usuarios = {}
        for i in range(maxUsuarios):
            temp = Usuario(i)
            temp.setHashUsuario()
            usuarios[temp.gethashUsuario] = temp

        #Se construye una conjunto aleatorio de nodos mineros
        usuariosNodo = []
        usuariosMineros = {}
        contador = maxUsuarios // maxMineros - 1
        aux = 0
        for key in usuarios:
            usuariosMineros[key] = usuarios[key]
            if (aux < contador):
                aux += 1
            else:
                usuariosNodo.append(usuariosMineros)
                aux = 0
                usuariosMineros = {}

        for i in range(len(usuariosNodo)):
            address = "127.0.0." + str(1 + randrange(253))
            puerto = 1025 + randrange(60000)
            descripcion = "nodo minero " + str(i)
            minerito = NodoMinador(address, puerto, descripcion,
                                   usuariosNodo[i])
            minerito.actualizarCadena(blockchain)
            pool.adicionarMinero(minerito)

        print("agregados " + str(len(usuariosNodo)) + " mineros ...")
        print("Iniciando la simulación de crecimiento de la blockchain")
        #Se construye una cadena de bloques con 10 bloques
        for i in range(1, totalBloquesCaena):
            transacciones = []
            #Se construye una conjunto aleatorio de transacciones
            for tr in range(1 + randrange(maxTransaccionesPorBloque)):
                emisor = Bloque.generarBloqueHash(random())
                receptor = Bloque.generarBloqueHash(random())
                cantidad = uniform(2.5, 1000.0)
                transacciones.append(Transaccion(emisor, receptor, cantidad))
            #print("Bloque de transacciones: " + str(i) + " , Agregadas " + str(tr+1) + " transacciones ...");
            pool.torneoPorNuevoBloque(transacciones)
            #print("La cadena tiene ahora " + str(len(blockchain._cadena)) + " Bloques")
        print("Fin de la simulación")
        print(
            "{Descripcion} , {Dirección} , {Puerto} , {Utilidad} , {#Bloques}, {#Minadores}"
        )
        print(pool)
        print("id\t hash \t saldo")
        for key in usuarios:
            print(str(usuarios[key]))
Пример #7
0
 def bloqueGenesis(self, trs):
     """
     Crea el primer bloque en la cadena. Es el bloque seminal.
     """
     self.nuevoBloque(2, Bloque.generarBloqueHash(0), trs.copy())