def __init__(self, process_id): self.chain = Blockchain(process_id) self.process_id = process_id self.message_queue = [] # bytes format self.transaction_queue = [] self.port = 5000 + process_id self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.server_socket.bind(('', self.port)) self.server_socket.listen(10) self.client_socket_list = [] # sending message self.connecting_socket_list = [] # receiving message self.link_status_list = [1] * 5 self.time_out = random.randint(time_out_a, time_out_b) self.timer = 0 self.leader_process_id = 0 self.ballot = Type.Ballot(0, process_id, 0) self.acceptNum = Type.Ballot(0, 0, 0) self.acceptVal = None self.first_count = 0 self.second_count = 0 self.success = False
def reset_protocol(self): self.ballot = Type.Ballot(0, self.process_id, 0) self.acceptNum = Type.Ballot(0, 0, 0) self.acceptVal = None self.first_count = 0 self.second_count = 0 self.success = False
def leader_accept_phase(self, promise): max_previous_ballot_num = Type.Ballot(0, 0, 0) self.first_count = self.first_count + 1 if promise.acceptVal != 0 and promise.acceptNum >= max_previous_ballot_num: self.acceptVal = promise.acceptVal max_previous_ballot_num = promise.acceptNum if self.first_count == 2: self.send_message_to_all_process( Type.Accept(self.ballot, self.chain.temp_block)) self.leader_process_id = self.process_id print("Leader Prepare Phase Complete!") print("Current leader is: " + str(self.leader_process_id))