text: from dataclasses import dataclass
  from typing import Optional
  
  from blspy import G2Element
  
  from mogua.types.blockchain_format.pool_target import PoolTarget
  from mogua.types.blockchain_format.proof_of_space import ProofOfSpace
  from mogua.types.blockchain_format.sized_bytes import bytes32
  from mogua.util.ints import uint8, uint32, uint64
  from mogua.util.streamable import Streamable, streamable
  
  """
  Protocol between farmer and full node.
  Note: When changing this file, also change protocol_message_types.py, and the protocol version in shared_protocol.py
  """
  
  
  @dataclass(frozen=True)
  @streamable
  class NewSignagePoint(Streamable):
      challenge_hash: bytes32
      challenge_chain_sp: bytes32
      reward_chain_sp: bytes32
      difficulty: uint64
      sub_slot_iters: uint64
      signage_point_index: uint8
  
  
  @dataclass(frozen=True)
  @streamable
  class DeclareProofOfSpace(Streamable):
      challenge_hash: bytes32
      challenge_chain_sp: bytes32
      signage_point_index: uint8
      reward_chain_sp: bytes32
      proof_of_space: ProofOfSpace
      challenge_chain_sp_signature: G2Element
      reward_chain_sp_signature: G2Element
      farmer_puzzle_hash: bytes32
      pool_target: Optional[PoolTarget]
      pool_signature: Optional[G2Element]
  
  
  @dataclass(frozen=True)
  @streamable
  class RequestSignedValues(Streamable):
      quality_string: bytes32
      foliage_block_data_hash: bytes32
      foliage_transaction_block_hash: bytes32
  
  
  @dataclass(frozen=True)
  @streamable
  class FarmingInfo(Streamable):
      challenge_hash: bytes32
      sp_hash: bytes32
      timestamp: uint64
      passed: uint32
      proofs: uint32
      total_plots: uint32
  
  
  @dataclass(frozen=True)
  @streamable
  class SignedValues(Streamable):
      quality_string: bytes32
      foliage_block_data_signature: G2Element
      foliage_transaction_block_signature: G2Element
  