package oracle import ( "fmt" "math" "time" ) // ValidateMajority recebe múltiplas leituras e tenta achar um consenso baseado na maioria simples. func ValidateMajority(data []*OracleData, tolerance float64) (*OracleData, error) { if len(data) == 0 { return nil, fmt.Errorf("nenhum dado recebido para validar") } count := make(map[float64]int) latest := make(map[float64]time.Time) for _, d := range data { rounded := math.Round(d.Value/tolerance) * tolerance // agrupar valores similares count[rounded]++ if d.Time.After(latest[rounded]) { latest[rounded] = d.Time } } // Encontrar o valor com mais votos var maxVal float64 var maxCount int for val, c := range count { if c > maxCount { maxVal = val maxCount = c } } // Retornar o OracleData mais recente com esse valor for _, d := range data { rounded := math.Round(d.Value/tolerance) * tolerance if rounded == maxVal && d.Time.Equal(latest[maxVal]) { return d, nil } } return nil, fmt.Errorf("nenhum consenso válido encontrado") }