feat(proxy): store miner login algo list

Co-Authored-By: Virgil <virgil@lethean.io>
This commit is contained in:
Virgil 2026-04-04 19:59:01 +00:00
parent 2f59714cce
commit b16ebc1a28
3 changed files with 13 additions and 2 deletions

View file

@ -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)

View file

@ -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)
}

View file

@ -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 {