@peer_required
@api_request
async def respond_signage_point(self, request: full_node_protocol.RespondSignagePoint, peer: ws.WSChiaConnection) -> Optional[Message]:
    if self.full_node.sync_store.get_sync_mode():
        return None
    async with self.full_node.timelord_lock:
        if self.full_node.full_node_store.have_newer_signage_point(request.challenge_chain_vdf.challenge, request.index_from_challenge, request.reward_chain_vdf.challenge):
            return None
        existing_sp = self.full_node.full_node_store.get_signage_point(request.challenge_chain_vdf.output.get_hash())
        if ((existing_sp is not None) and (existing_sp.rc_vdf == request.reward_chain_vdf)):
            return None
        peak = self.full_node.blockchain.get_peak()
        if ((peak is not None) and (peak.height > self.full_node.constants.MAX_SUB_SLOT_BLOCKS)):
            next_sub_slot_iters = self.full_node.blockchain.get_next_slot_iters(peak.header_hash, True)
            sub_slots_for_peak = (await self.full_node.blockchain.get_sp_and_ip_sub_slots(peak.header_hash))
            assert (sub_slots_for_peak is not None)
            ip_sub_slot: Optional[EndOfSubSlotBundle] = sub_slots_for_peak[1]
        else:
            sub_slot_iters = self.full_node.constants.SUB_SLOT_ITERS_STARTING
            next_sub_slot_iters = sub_slot_iters
            ip_sub_slot = None
        added = self.full_node.full_node_store.new_signage_point(request.index_from_challenge, self.full_node.blockchain, self.full_node.blockchain.get_peak(), next_sub_slot_iters, SignagePoint(request.challenge_chain_vdf, request.challenge_chain_proof, request.reward_chain_vdf, request.reward_chain_proof))
        if added:
            (await self.full_node.signage_point_post_processing(request, peer, ip_sub_slot))
        else:
            self.log.debug(f'Signage point {request.index_from_challenge} not added, CC challenge: {request.challenge_chain_vdf.challenge}, RC challenge: {request.reward_chain_vdf.challenge}')
        return None
@peer_required
@api_request
async def respond_signage_point(self, request: full_node_protocol.RespondSignagePoint, peer: ws.WSChiaConnection) -> Optional[Message]:
    if self.full_node.sync_store.get_sync_mode():
        return None
    async with self.full_node.timelord_lock:
        if self.full_node.full_node_store.have_newer_signage_point(request.challenge_chain_vdf.challenge, request.index_from_challenge, request.reward_chain_vdf.challenge):
            return None
        existing_sp = self.full_node.full_node_store.get_signage_point(request.challenge_chain_vdf.output.get_hash())
        if ((existing_sp is not None) and (existing_sp.rc_vdf == request.reward_chain_vdf)):
            return None
        peak = self.full_node.blockchain.get_peak()
        if ((peak is not None) and (peak.height > self.full_node.constants.MAX_SUB_SLOT_BLOCKS)):
            next_sub_slot_iters = self.full_node.blockchain.get_next_slot_iters(peak.header_hash, True)
            sub_slots_for_peak = (await self.full_node.blockchain.get_sp_and_ip_sub_slots(peak.header_hash))
            assert (sub_slots_for_peak is not None)
            ip_sub_slot: Optional[EndOfSubSlotBundle] = sub_slots_for_peak[1]
        else:
            sub_slot_iters = self.full_node.constants.SUB_SLOT_ITERS_STARTING
            next_sub_slot_iters = sub_slot_iters
            ip_sub_slot = None
        added = self.full_node.full_node_store.new_signage_point(request.index_from_challenge, self.full_node.blockchain, self.full_node.blockchain.get_peak(), next_sub_slot_iters, SignagePoint(request.challenge_chain_vdf, request.challenge_chain_proof, request.reward_chain_vdf, request.reward_chain_proof))
        if added:
            (await self.full_node.signage_point_post_processing(request, peer, ip_sub_slot))
        else:
            self.log.debug(f'Signage point {request.index_from_challenge} not added, CC challenge: {request.challenge_chain_vdf.challenge}, RC challenge: {request.reward_chain_vdf.challenge}')
        return None