diff --git a/miner_runtime.go b/miner_runtime.go index f14c945..6090cf5 100644 --- a/miner_runtime.go +++ b/miner_runtime.go @@ -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, }) } diff --git a/miner_runtime_test.go b/miner_runtime_test.go index b6d48b5..c30289d 100644 --- a/miner_runtime_test.go +++ b/miner_runtime_test.go @@ -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") + } +}