fix(proxy): gate submit algo forwarding

Co-Authored-By: Virgil <virgil@lethean.io>
This commit is contained in:
Virgil 2026-04-04 13:10:38 +00:00
parent 0ab02e9e4b
commit 75de9000f0
2 changed files with 53 additions and 2 deletions

View file

@ -294,6 +294,11 @@ func (m *Miner) handleSubmit(request minerRequest) {
return
}
submitAlgo := ""
if m.algoExtension && m.extAlgo {
submitAlgo = params.Algo
}
m.Touch()
if m.events != nil {
m.events.Dispatch(Event{
@ -302,7 +307,7 @@ func (m *Miner) handleSubmit(request minerRequest) {
JobID: params.JobID,
Nonce: params.Nonce,
Result: params.Result,
Algo: params.Algo,
Algo: submitAlgo,
RequestID: request.ID,
})
return
@ -314,7 +319,7 @@ func (m *Miner) handleSubmit(request minerRequest) {
JobID: params.JobID,
Nonce: params.Nonce,
Result: params.Result,
Algo: params.Algo,
Algo: submitAlgo,
RequestID: request.ID,
})
}

View file

@ -240,6 +240,8 @@ func TestMiner_Submit_Good(t *testing.T) {
miner := NewMiner(serverConn, 3333, nil)
miner.events = NewEventBus()
miner.algoExtension = true
miner.extAlgo = true
miner.SetRPCID("session")
miner.SetState(MinerStateReady)
@ -292,3 +294,47 @@ func TestMiner_Submit_Good(t *testing.T) {
t.Fatalf("unexpected submit response: %#v", response)
}
}
func TestMiner_Submit_AlgoExtension_Bad(t *testing.T) {
serverConn, clientConn := net.Pipe()
defer clientConn.Close()
miner := NewMiner(serverConn, 3333, nil)
miner.events = NewEventBus()
miner.SetRPCID("session")
miner.SetState(MinerStateReady)
submitSeen := make(chan Event, 1)
miner.events.Subscribe(EventSubmit, func(event Event) {
submitSeen <- event
miner.Success(event.RequestID, "OK")
})
miner.Start()
defer miner.Close()
encoder := json.NewEncoder(clientConn)
if err := encoder.Encode(map[string]interface{}{
"id": 7,
"jsonrpc": "2.0",
"method": "submit",
"params": map[string]interface{}{
"id": "session",
"job_id": "job-1",
"nonce": "deadbeef",
"result": "abc",
"algo": "cn/r",
},
}); err != nil {
t.Fatal(err)
}
select {
case event := <-submitSeen:
if event.Algo != "" {
t.Fatalf("expected algo to be suppressed when extension is disabled, got %+v", event)
}
case <-time.After(time.Second):
t.Fatal("expected submit event to be dispatched")
}
}