def sequence_block_recursive(self, parent_block_data, parent_sequenced_block_data=None): harvester = PolkascanHarvesterService(self.session, type_registry=TYPE_REGISTRY) harvester.metadata_store = self.metadata_store for nr in range(0, 10): if not parent_sequenced_block_data: # No block ever sequenced, check if chain is at genesis state block = Block.query(self.session).order_by('id').first() if block.id == 1: # Add genesis block block = harvester.add_block(block.parent_hash) if block.id != 0: return {'error': 'Chain not at genesis'} harvester.process_genesis(block) block_id = 0 else: block_id = parent_sequenced_block_data['id'] + 1 block = Block.query(self.session).get(block_id) if block: try: sequenced_block = harvester.sequence_block( block, parent_block_data, parent_sequenced_block_data) self.session.commit() parent_block_data = block.asdict() parent_sequenced_block_data = sequenced_block.asdict() if nr == 9 or not sequenced_block: if sequenced_block: if nr == 9: sequence_block_recursive.delay( parent_block_data, parent_sequenced_block_data) return {'processedBlockId': block.id, 'amount': nr + 1} except IntegrityError as e: return { 'error': 'Sequencer already started', 'exception': str(e) } else: return {'error': 'Block {} not found'.format(block_id)}
def on_post(self, req, resp): harvester = PolkascanHarvesterService(self.session, type_registry=TYPE_REGISTRY) block = Block.query(self.session).get(1) if block: result = harvester.process_genesis(block=block) else: result = 'Block #1 required to process genesis' self.session.commit() resp.media = {'result': result}