示例#1
0
    def validate_timestamp(self, blockchain):
        timestamp = self.timestamp
        validate_not_none(f'{self.humanized_class_name} timestamp', timestamp)
        validate_type(f'{self.humanized_class_name} timestamp', timestamp,
                      datetime)
        validate_is_none(f'{self.humanized_class_name} timestamp timezone',
                         timestamp.tzinfo)

        block_number = self.block_number
        assert block_number is not None

        if block_number > 0:
            prev_block_number = block_number - 1
            prev_block = blockchain.get_block_by_number(prev_block_number)
            if prev_block is None:
                logger.debug('Partial blockchain detected')
                blockchain_state = blockchain.get_closest_blockchain_state_snapshot(
                    block_number)
                validate_not_none('Closest blockchain state', blockchain_state)

                if blockchain_state.is_initial():
                    raise ValidationError(
                        'Unexpected initial account root file found')

                validate_exact_value('Blockchain state last block number',
                                     blockchain_state.last_block_number,
                                     prev_block_number)

                assert blockchain_state.last_block_timestamp
                min_timestamp = blockchain_state.last_block_timestamp
            else:
                min_timestamp = prev_block.message.timestamp

            validate_gt_value(f'{self.humanized_class_name} timestamp',
                              timestamp, min_timestamp)
示例#2
0
 def validate_next_block_identifier(self, is_initial):
     if is_initial:
         validate_is_none(
             f'Initial {self.humanized_class_name} next_block_identifier',
             self.next_block_identifier)
     else:
         validate_type(f'{self.humanized_class_name} next_block_identifier',
                       self.next_block_identifier, str)
示例#3
0
 def validate_last_block_number(self, is_initial):
     if is_initial:
         validate_is_none(
             f'Initial {self.humanized_class_name} last_block_number',
             self.last_block_number)
     else:
         validate_type(f'{self.humanized_class_name} last_block_number',
                       self.last_block_number, int)
         validate_gte_value(
             f'{self.humanized_class_name} last_block_number',
             self.last_block_number, 0)
示例#4
0
 def validate_last_block_timestamp(self, is_initial):
     timestamp = self.last_block_timestamp
     if is_initial:
         validate_is_none(
             f'Initial {self.humanized_class_name} last_block_timestamp',
             timestamp)
     else:
         validate_not_none(
             f'{self.humanized_class_name} last_block_timestamp', timestamp)
         validate_type(f'{self.humanized_class_name} last_block_timestamp',
                       timestamp, datetime)
         validate_is_none(
             f'{self.humanized_class_name} last_block_timestamp timezone',
             timestamp.tzinfo)