package protocol import ( "encoding/json" "io" "hash-of-wisdom/internal/pow/challenge" ) // ChallengeRequest is empty (no payload for challenge requests) type ChallengeRequest struct{} // Decode reads a challenge request from the payload stream func (r *ChallengeRequest) Decode(stream io.Reader) error { // Challenge requests have no payload to decode return nil } // Encode writes a challenge request to the writer func (r *ChallengeRequest) Encode(w io.Writer) error { return encode(w, ChallengeRequestType, nil) } // SolutionRequest contains the client's solution attempt type SolutionRequest struct { Challenge challenge.Challenge `json:"challenge"` Nonce uint64 `json:"nonce"` } // Decode reads a solution request from the payload stream func (r *SolutionRequest) Decode(stream io.Reader) error { if stream == nil { // json.NewDecoder panics on nil reader return io.EOF } // Parse JSON directly from stream decoder := json.NewDecoder(stream) return decoder.Decode(r) } // Encode writes a solution request to the writer func (r *SolutionRequest) Encode(w io.Writer) error { return encode(w, SolutionRequestType, r) }