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))
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("==========================================================")
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))
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
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]))
def bloqueGenesis(self, trs): """ Crea el primer bloque en la cadena. Es el bloque seminal. """ self.nuevoBloque(2, Bloque.generarBloqueHash(0), trs.copy())