From b16ebc1a2809a7395608d100c7ebf6de7a477538 Mon Sep 17 00:00:00 2001 From: Virgil Date: Sat, 4 Apr 2026 19:59:01 +0000 Subject: [PATCH] feat(proxy): store miner login algo list Co-Authored-By: Virgil --- miner.go | 3 ++- miner_login_test.go | 3 +++ state_impl.go | 9 ++++++++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/miner.go b/miner.go index d8384fe..3cf6413 100644 --- a/miner.go +++ b/miner.go @@ -28,7 +28,8 @@ type Miner struct { id int64 // monotonically increasing per-process; atomic assignment rpcID string // UUID v4 sent to miner as session id state MinerState - extAlgo bool // miner sent algo list in login params + extAlgo bool // miner sent algo list in login params + loginAlgos []string extNH bool // NiceHash mode active (fixed byte splitting) algoEnabled bool // proxy is configured to negotiate the algo extension ip string // remote IP (without port, for logging) diff --git a/miner_login_test.go b/miner_login_test.go index 17dbc9f..cb184d6 100644 --- a/miner_login_test.go +++ b/miner_login_test.go @@ -70,6 +70,9 @@ func TestMiner_HandleLogin_Good(t *testing.T) { if len(payload.Result.Extensions) != 1 || payload.Result.Extensions[0] != "algo" { t.Fatalf("expected algo extension, got %#v", payload.Result.Extensions) } + if got := miner.LoginAlgos(); len(got) != 1 || got[0] != "cn/r" { + t.Fatalf("expected login algo list to be stored, got %#v", got) + } if got := payload.Result.Job["job_id"]; got != "job-1" { t.Fatalf("expected embedded job, got %#v", got) } diff --git a/state_impl.go b/state_impl.go index 3b4eb54..f388095 100644 --- a/state_impl.go +++ b/state_impl.go @@ -638,6 +638,12 @@ func (m *Miner) SetCurrentJob(job Job) { func (m *Miner) CurrentJob() Job { return m.currentJob } +func (m *Miner) LoginAlgos() []string { + if m == nil || len(m.loginAlgos) == 0 { + return nil + } + return append([]string(nil), m.loginAlgos...) +} func (m *Miner) FixedByte() uint8 { return m.fixedByte } @@ -777,7 +783,8 @@ func (m *Miner) handleLogin(req stratumRequest) { m.password = params.Pass m.agent = params.Agent m.rigID = params.RigID - m.extAlgo = len(params.Algo) > 0 + m.loginAlgos = append([]string(nil), params.Algo...) + m.extAlgo = len(m.loginAlgos) > 0 m.rpcID = generateUUID() m.state = MinerStateWaitReady if m.onLogin != nil {