65 lines
1.9 KiB
Go
65 lines
1.9 KiB
Go
package protocol
|
|
|
|
import (
|
|
"hash-of-wisdom/internal/pow/challenge"
|
|
"hash-of-wisdom/internal/quotes"
|
|
)
|
|
|
|
// MessageType represents the type of protocol message
|
|
type MessageType byte
|
|
|
|
const (
|
|
ChallengeRequest MessageType = 0x01
|
|
ChallengeResponse MessageType = 0x02
|
|
SolutionRequest MessageType = 0x03
|
|
QuoteResponse MessageType = 0x04
|
|
ErrorResponse MessageType = 0x05
|
|
)
|
|
|
|
// Message represents a protocol message with type and payload
|
|
type Message struct {
|
|
Type MessageType
|
|
Payload []byte
|
|
}
|
|
|
|
// ChallengeRequestPayload is empty (no payload for challenge requests)
|
|
type ChallengeRequestPayload struct{}
|
|
|
|
// ChallengeResponsePayload is the direct challenge object (not wrapped)
|
|
type ChallengeResponsePayload challenge.Challenge
|
|
|
|
// SolutionRequestPayload contains the client's solution attempt
|
|
type SolutionRequestPayload struct {
|
|
Challenge challenge.Challenge `json:"challenge"`
|
|
Nonce uint64 `json:"nonce"`
|
|
}
|
|
|
|
// QuoteResponsePayload is the direct quote object (not wrapped)
|
|
type QuoteResponsePayload quotes.Quote
|
|
|
|
// ErrorResponsePayload contains error information
|
|
type ErrorResponsePayload struct {
|
|
Code string `json:"code"`
|
|
Message string `json:"message"`
|
|
RetryAfter int `json:"retry_after,omitempty"`
|
|
Details map[string]string `json:"details,omitempty"`
|
|
}
|
|
|
|
// Error codes as defined in protocol specification
|
|
const (
|
|
ErrMalformedMessage = "MALFORMED_MESSAGE"
|
|
ErrInvalidChallenge = "INVALID_CHALLENGE"
|
|
ErrInvalidSolution = "INVALID_SOLUTION"
|
|
ErrExpiredChallenge = "EXPIRED_CHALLENGE"
|
|
ErrRateLimited = "RATE_LIMITED"
|
|
ErrServerError = "SERVER_ERROR"
|
|
ErrTooManyConnections = "TOO_MANY_CONNECTIONS"
|
|
ErrDifficultyTooHigh = "DIFFICULTY_TOO_HIGH"
|
|
)
|
|
|
|
// Protocol constants
|
|
const (
|
|
MaxPayloadSize = 8 * 1024 // 8KB maximum payload size
|
|
HeaderSize = 5 // 1 byte type + 4 bytes length
|
|
)
|