예제 #1
0
def generate_execution(num_validators, num_rounds, network_delay_func, get_creators):
    execution_string = ''
    commands_on_round = {r: [] for r in range(num_rounds)}
    sent_from = {v: set() for v in range(num_validators)}

    for curr_round in range(num_rounds):
        creators = get_creators()

        for creator in creators:
            msg_name = get_random_str(10)
            commands_on_round[curr_round].append(make_com('M', creator, msg_name))

            for receiver in range(num_validators):
                delivery_round = curr_round + network_delay_func(creator, receiver, curr_round)
                if delivery_round >= num_rounds:
                    continue

                if receiver not in sent_from[creator]:
                    send_command = 'SJ'
                    sent_from[creator].add(receiver)
                else:
                    send_command = 'S'

                commands_on_round[delivery_round].append(
                    make_com(send_command, receiver, msg_name)
                )

        # sort so all make commands during a round happen first
        for command in sorted(commands_on_round[curr_round]):
            execution_string += command + ' '

    return execution_string
예제 #2
0
    def set_initial_messages(self, initial_estimates):
        for validator in self.global_validator_set:
            initial_message = Bet(initial_estimates[validator.name], dict(),
                                  validator, 0, 0)

            self.register_message(initial_message, get_random_str(10))
            validator.initialize_view([initial_message])
예제 #3
0
    def set_initial_messages(self):
        initial_message = Block(
            None, dict(), self.global_validator_set.get_validator_by_name(0),
            -1, 0)
        self.register_message(initial_message, get_random_str(10))

        for validator in self.global_validator_set:
            validator.initialize_view([initial_message])
예제 #4
0
    def set_initial_messages(self, genesis_estimate, create_name):
        validator = self.global_validator_set.get_validator_by_name(0)

        blocks = set([None])
        inputs = set([int(i) for i in genesis_estimate])
        outputs = self.create_rules[create_name](inputs, len(inputs))
        estimate = {'blocks': blocks, 'inputs': inputs, 'outputs': outputs}

        initial_message = Block(estimate, dict(), validator, -1, 0)
        self.register_message(initial_message, get_random_str(10))

        for validator in self.global_validator_set:
            validator.initialize_view([initial_message])
예제 #5
0
    def set_initial_messages(self, num_shards):
        shards = 0
        genesis_blocks = set()
        shard_id_gen = self.get_shard_id_gen()

        for validator in self.global_validator_set:
            if shards == num_shards:
                break

            shard_id = shard_id_gen()
            estimate = {
                'prev_blocks': set([None]),
                'shard_ids': set([shard_id])
            }
            genesis = Block(estimate, dict(), validator, -1, 0)
            genesis_blocks.add(genesis)
            shards += 1

            self.register_message(genesis, get_random_str(10))

        for validator in self.global_validator_set:
            validator.initialize_view(genesis_blocks)