From 00c15e87ae0e88e7f3c45589fe5222896108b3f4 Mon Sep 17 00:00:00 2001 From: "Oleksandr (Shev) Shevchuk" Date: Thu, 29 Jan 2026 16:37:32 +0100 Subject: [PATCH] feat: mining-subscribe-extranonce passthrough --- .../proxy/stratumv1_message/mining.go | 3 ++ .../mining_subscribe_extnanonce.go | 38 +++++++++++++++++++ .../mining_subscribe_extranonce_test.go | 26 +++++++++++++ 3 files changed, 67 insertions(+) create mode 100644 internal/resources/hashrate/proxy/stratumv1_message/mining_subscribe_extnanonce.go create mode 100644 internal/resources/hashrate/proxy/stratumv1_message/mining_subscribe_extranonce_test.go diff --git a/internal/resources/hashrate/proxy/stratumv1_message/mining.go b/internal/resources/hashrate/proxy/stratumv1_message/mining.go index 66e63f9..46a6b35 100644 --- a/internal/resources/hashrate/proxy/stratumv1_message/mining.go +++ b/internal/resources/hashrate/proxy/stratumv1_message/mining.go @@ -51,6 +51,9 @@ func ParseStratumMessage(raw []byte) (interfaces.MiningMessageGeneric, error) { case MethodMiningSetExtranonce: return ParseMiningSetExtranonce(raw) + case MethodExtranonceSubscribe: + return ParseMiningExtranonceSubscribe(raw) + default: if msg.Result != nil { return ParseMiningResult(raw) diff --git a/internal/resources/hashrate/proxy/stratumv1_message/mining_subscribe_extnanonce.go b/internal/resources/hashrate/proxy/stratumv1_message/mining_subscribe_extnanonce.go new file mode 100644 index 0000000..5b80d46 --- /dev/null +++ b/internal/resources/hashrate/proxy/stratumv1_message/mining_subscribe_extnanonce.go @@ -0,0 +1,38 @@ +package stratumv1_message + +import ( + "encoding/json" + + "github.com/Lumerin-protocol/proxy-router/internal/resources/hashrate/proxy/interfaces" +) + +// Message: {"id":null,"method":"mining.extranonce.subscribe","params":[]} +const MethodExtranonceSubscribe = "mining.extranonce.subscribe" + +type MiningExtranonceSubscribe struct { + ID *int `json:"id"` + Method string `json:"method,omitempty"` + Params *MiningExtranonceSubscribeParams `json:"params"` +} + +type MiningExtranonceSubscribeParams = []interface{} + +func NewMiningExtranonceSubscribe(ID int) *MiningExtranonceSubscribe { + return &MiningExtranonceSubscribe{ + ID: &ID, + Method: MethodExtranonceSubscribe, + Params: &MiningExtranonceSubscribeParams{}, + } +} + +func ParseMiningExtranonceSubscribe(b []byte) (*MiningExtranonceSubscribe, error) { + m := &MiningExtranonceSubscribe{} + return m, json.Unmarshal(b, m) +} + +func (m *MiningExtranonceSubscribe) Serialize() []byte { + b, _ := json.Marshal(m) + return b +} + +var _ interfaces.MiningMessageGeneric = new(MiningExtranonceSubscribe) diff --git a/internal/resources/hashrate/proxy/stratumv1_message/mining_subscribe_extranonce_test.go b/internal/resources/hashrate/proxy/stratumv1_message/mining_subscribe_extranonce_test.go new file mode 100644 index 0000000..6387dcc --- /dev/null +++ b/internal/resources/hashrate/proxy/stratumv1_message/mining_subscribe_extranonce_test.go @@ -0,0 +1,26 @@ +package stratumv1_message + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestMiningExtranonceSubscribe(t *testing.T) { + msg := NewMiningExtranonceSubscribe(1) + b := msg.Serialize() + t.Logf("msg: %s", string(b)) + require.NotNil(t, b) + require.Equal(t, MethodExtranonceSubscribe, msg.Method) + require.Nil(t, msg.Params) +} + +func TestMiningExtranonceSubscribeParse(t *testing.T) { + msg := NewMiningExtranonceSubscribe(1) + b := msg.Serialize() + parsed, err := ParseMiningExtranonceSubscribe(b) + require.NoError(t, err) + require.Equal(t, msg.Method, parsed.Method) + require.Equal(t, msg.Params, parsed.Params) + require.Equal(t, msg.ID, parsed.ID) +}