Exemplo n.º 1
0
    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
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
    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))