diff --git a/bandwidthSim.py b/bandwidthSim.py index 840f783..6eb15c1 100644 --- a/bandwidthSim.py +++ b/bandwidthSim.py @@ -2,38 +2,47 @@ import random import time class Config: - def __init__(self): self.networkSize = 100 self.networkDegree = 8 self.badBoy = 66 - self.builders = [12, 26] + self.builders = [12, 26, 54, 78, 98] self.nbSlots = 10 class Node: - def __init__(self, config): self.peers = [] + self.poisoned = 0 self.speed = random.randint(0, 10) self.networkDegree = config.networkDegree self.networkSize = config.networkSize for i in range(self.networkDegree): self.peers.append(random.randint(0, self.networkSize-1)) -def executeSlot(config, nodes): +def pickBuilder(config): + nbBuilders = len(config.builders) + builder = random.randint(0, nbBuilders-1) + return builder + +def executeSlot(config, nodes): pastBorder = [] currentBorder = [] - for b in config.builders: - currentBorder.append(b) + currentBorder.append(pickBuilder(config)) while(True): #print("Current border size: " + str(len(currentBorder))) #print("Past border size: " + str(len(pastBorder))) #print("Nodes size: " + str(len(nodes))) for nodeID in currentBorder: + if nodeID == config.badBoy: + nodes[nodeID].poisoned = 1 for peer in nodes[nodeID].peers: if peer not in pastBorder and peer not in currentBorder: currentBorder.append(peer) + if nodeID == config.badBoy: + print("Badboy") + if nodes[nodeID].poisoned == 1: + nodes[peer].poisoned = 1 pastBorder.append(nodeID) currentBorder.remove(nodeID) if len(pastBorder) == len(nodes): @@ -49,11 +58,27 @@ def sim(): for i in range(config.networkSize): nodes.append(Node(config)) - for i in range(config.networkSize): - print("My speed is "+ str(nodes[i].speed)) - print("My peers are "+ str(nodes[i].peers)) - for slot in range(config.nbSlots): + # Slot starts with noone poisoned + for n in range(config.networkSize): + nodes[n].poisoned = 0 + + # Execute slot executeSlot(config, nodes) - print("Slot finished: "+ str(slot)) + + # Coubnt poisoned nodes + pois = 0 + for n in range(config.networkSize): + pois += nodes[n].poisoned + + # Print results + print("Slot finished: "+ str(slot)+" posoned: "+ str(pois)) + + for i in range(config.networkSize): + print("Node ID " + str(i), end="") + print(" spped "+ str(nodes[i].speed), end="") + print(" poison: "+ str(nodes[i].poisoned), end="") + print(" My peers are "+ str(nodes[i].peers)) + + sim()