def plot(self): """Builds relevant edges to display and creates next viegraph using them""" if self.first_time: self._update_first_message_labels() self.first_time = False edgelist = [] edgelist.append(utils.edge(self.communications, 1, 'black', 'solid')) edgelist.append( utils.edge(self.self_communications, 1, 'black', 'solid')) self.next_viewgraph(self.view, self.validator_set, edges=edgelist, message_colors=self.bet_fault_tolerance, message_labels=self.message_labels)
def get_validator_chains(self): """Returns a list of edges main from validators current forkchoice to genesis""" vals_chain_edges = [] for validator in self.validator_set: chain = utils.build_schedule(set([validator.my_latest_message()])) vals_chain_edges.append(utils.edge(chain, 2, 'blue', 'solid')) return vals_chain_edges
def plot(self): """Builds relevant edges to display and creates next viewgraph using them""" if self.first_time: self._update_first_message_labels() self.first_time = False edgelist = [] edgelist.append(utils.edge(self.communications, 1, 'black', 'solid')) edgelist.append(utils.edge(self.self_communications, 1, 'black', 'solid')) self.next_viewgraph( self.view, self.validator_set, edges=edgelist, message_colors=self.bet_fault_tolerance, message_labels=self.message_labels )
def plot(self): """Builds relevant edges to display and creates next viegraph using them""" best_chain_edge = self.get_best_chain() validator_chain_edges = self.get_validator_chains() edgelist = [] edgelist.append(utils.edge(self.blockchain, 2, 'grey', 'solid')) edgelist.append(utils.edge(self.communications, 1, 'black', 'dotted')) edgelist.append(best_chain_edge) edgelist.extend(validator_chain_edges) self.next_viewgraph(self.view, self.validator_set, edges=edgelist, message_colors=self.block_fault_tolerance, message_labels=self.message_labels)
def plot(self): """Builds relevant edges to display and creates next viewgraph using them""" best_chain_edge = self.get_best_chain() validator_chain_edges = self.get_validator_chains() edgelist = [] edgelist.append(utils.edge(self.blockchain, 2, 'grey', 'solid')) edgelist.append(utils.edge(self.communications, 1, 'black', 'dotted')) edgelist.append(best_chain_edge) edgelist.extend(validator_chain_edges) self.next_viewgraph( self.view, self.validator_set, edges=edgelist, message_colors=self.block_fault_tolerance, message_labels=self.message_labels )
def report(self, num, name): """Display the view graph of the current global_view""" assert num == name and num == '', "...no validator or number needed to report!" if not self.display: return # Update the safe blocks! tip = self.network.global_view.estimate() while tip and self.block_fault_tolerance.get( tip, 0) != len(self.validator_set) - 1: oracle = CliqueOracle(tip, self.network.global_view, self.validator_set) fault_tolerance, num_node_ft = oracle.check_estimate_safety() if fault_tolerance > 0: self.block_fault_tolerance[tip] = num_node_ft tip = tip.estimate edgelist = [] best_chain = utils.build_chain(self.network.global_view.estimate(), None) edgelist.append(utils.edge(best_chain, 5, 'red', 'solid')) for validator in self.validator_set: chain = utils.build_chain(validator.my_latest_message(), None) edgelist.append(utils.edge(chain, 2, 'blue', 'solid')) edgelist.append(utils.edge(self.blockchain, 2, 'grey', 'solid')) edgelist.append(utils.edge(self.communications, 1, 'black', 'dotted')) message_labels = {} for block in self.network.global_view.messages: message_labels[block] = block.sequence_number self.plot_tool.next_viewgraph( self.network.global_view, self.validator_set, edges=edgelist, message_colors=self.block_fault_tolerance, message_labels=message_labels)
def get_best_schedule(self): """Returns an edge made of the global forkchoice to genesis""" best_messages = self.view.estimate()['blocks'] best_schedule = utils.build_schedule(best_messages) return utils.edge(best_schedule, 5, 'red', 'solid')
def get_best_chain(self): """Returns an edge made of the global forkchoice to genesis""" best_message = self.view.estimate() best_chain = utils.build_chain(best_message, None)[:-1] return utils.edge(best_chain, 5, 'red', 'solid')