diff --git a/cmd/main.go b/cmd/main.go index 18914e0..f8f5c7a 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -23,7 +23,7 @@ import ( func main() { // Load config cfg := config.LoadConfig() - logger.Info("Loaded e config: network=%s, beaconEndpoint=%s, web3SignerEndpoint=%s", + logger.Info("Loaded config: network=%s, beaconEndpoint=%s, web3SignerEndpoint=%s", cfg.Network, cfg.BeaconEndpoint, cfg.Web3SignerEndpoint) // Initialize adapters diff --git a/internal/adapters/web3signer/web3signer.go b/internal/adapters/web3signer/web3signer.go index c8cbf18..1e300ad 100644 --- a/internal/adapters/web3signer/web3signer.go +++ b/internal/adapters/web3signer/web3signer.go @@ -3,6 +3,7 @@ package web3signer import ( "encoding/json" "fmt" + "io" "net/http" "time" @@ -14,6 +15,7 @@ type Web3SignerAdapter struct { Endpoint string } +// KeystoreResponse models the expected JSON from /eth/v1/keystores type KeystoreResponse struct { Data []struct { ValidatingPubkey string `json:"validating_pubkey"` @@ -25,19 +27,31 @@ func NewWeb3SignerAdapter(endpoint string) ports.Web3SignerAdapter { } func (w *Web3SignerAdapter) GetValidatorPubkeys() ([]string, error) { + url := fmt.Sprintf("%s/eth/v1/keystores", w.Endpoint) client := &http.Client{Timeout: 30 * time.Second} - resp, err := client.Get(fmt.Sprintf("%s/eth/v1/keystores", w.Endpoint)) + + req, err := http.NewRequest("GET", url, nil) + if err != nil { + return nil, fmt.Errorf("creating Web3Signer request: %w", err) + } + + resp, err := client.Do(req) if err != nil { - return nil, fmt.Errorf("failed to fetch keystores: %w", err) + return nil, fmt.Errorf("error sending Web3Signer request: %w", err) } defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + body, _ := io.ReadAll(resp.Body) + return nil, fmt.Errorf("unexpected Web3Signer status %d: %s", resp.StatusCode, string(body)) + } + var keystoreResp KeystoreResponse if err := json.NewDecoder(resp.Body).Decode(&keystoreResp); err != nil { - return nil, fmt.Errorf("failed to parse keystores: %w", err) + return nil, fmt.Errorf("error decoding Web3Signer response: %w", err) } - var pubkeys []string + pubkeys := make([]string, 0, len(keystoreResp.Data)) for _, item := range keystoreResp.Data { pubkeys = append(pubkeys, item.ValidatingPubkey) } diff --git a/internal/application/services/dutieschecker_service.go b/internal/application/services/dutieschecker_service.go index 4df93e4..d236067 100644 --- a/internal/application/services/dutieschecker_service.go +++ b/internal/application/services/dutieschecker_service.go @@ -162,8 +162,10 @@ func (a *DutiesChecker) checkLiveness( if !ok || !isLive { offline = append(offline, idx) allLive = false + logger.Warn("❌ Validator %d was not seen in epoch %d", idx, epochToTrack) } else { online = append(online, idx) + logger.Info("✅ Validator %d seen in epoch %d", idx, epochToTrack) } } return offline, online, allLive, nil