fix(proxy): classify low difficulty rejects

Co-Authored-By: Virgil <virgil@lethean.io>
This commit is contained in:
Virgil 2026-04-05 01:26:24 +00:00
parent 264479d57b
commit fefae4b3e5
3 changed files with 31 additions and 3 deletions

View file

@ -109,5 +109,14 @@ func (b *CustomDiffBuckets) bucketLocked(diff uint64) *CustomDiffBucketStats {
func isInvalidShareReason(reason string) bool {
reason = strings.ToLower(reason)
return strings.Contains(reason, "difficulty") || strings.Contains(reason, "invalid") || strings.Contains(reason, "nonce")
if reason == "" {
return false
}
return strings.Contains(reason, "low diff") ||
strings.Contains(reason, "lowdifficulty") ||
strings.Contains(reason, "low difficulty") ||
strings.Contains(reason, "malformed") ||
strings.Contains(reason, "difficulty") ||
strings.Contains(reason, "invalid") ||
strings.Contains(reason, "nonce")
}

View file

@ -42,14 +42,15 @@ func TestProxy_CustomDiffStats_Bad(t *testing.T) {
}
miner := &Miner{customDiff: 10000}
p.events.Dispatch(Event{Type: EventReject, Miner: miner, Error: "Invalid nonce"})
p.events.Dispatch(Event{Type: EventReject, Miner: miner, Error: "Low difficulty share"})
p.events.Dispatch(Event{Type: EventReject, Miner: miner, Error: "Malformed share"})
summary := p.Summary()
bucket, ok := summary.CustomDiffStats[10000]
if !ok {
t.Fatalf("expected custom diff bucket 10000 to be present")
}
if bucket.Rejected != 1 || bucket.Invalid != 1 {
if bucket.Rejected != 2 || bucket.Invalid != 2 {
t.Fatalf("unexpected bucket totals: %+v", bucket)
}
}

18
stats_test.go Normal file
View file

@ -0,0 +1,18 @@
package proxy
import "testing"
func TestProxy_Stats_InvalidRejectReasons_Good(t *testing.T) {
stats := NewStats()
stats.OnReject(Event{Error: "Low difficulty share"})
stats.OnReject(Event{Error: "Malformed share"})
summary := stats.Summary()
if summary.Rejected != 2 {
t.Fatalf("expected two rejected shares, got %d", summary.Rejected)
}
if summary.Invalid != 2 {
t.Fatalf("expected two invalid shares, got %d", summary.Invalid)
}
}