From 68064b14690c6a943d53bc906c4daf794641c74d Mon Sep 17 00:00:00 2001 From: Ulf Wiger Date: Thu, 20 Mar 2025 22:48:27 +0100 Subject: [PATCH] Handle monitor clients --- src/gmmpp_msgs.erl | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/gmmpp_msgs.erl b/src/gmmpp_msgs.erl index e93707b..5eb0f21 100644 --- a/src/gmmpp_msgs.erl +++ b/src/gmmpp_msgs.erl @@ -60,6 +60,7 @@ validate(#{ connect := #{ pubkey := PK , versions := Versions , pool_id := PoolId , extra_pubkeys := Extra + , type := Type , nonces := Nonces }} = Msg, _Vsn) -> valid({list, protocol}, Protocols), @@ -68,6 +69,7 @@ validate(#{ connect := #{ pubkey := PK valid(contract, PoolId), valid(pubkey, PK), valid({list, pubkey}, Extra), + valid(type, Type), valid(pos_int, Nonces), Msg; validate(#{ connect_ack := #{ protocol := Protocol @@ -113,11 +115,13 @@ validate(#{ no_solution := #{ seq := Seq validate(#{ stop_mining := #{} } = Msg, _Vsn) -> Msg. -encode_connect(#{ protocols := _Protocols - , versions := _Versions - , pool_id := _PoolId - , pubkey := _Pubkey - , signature := _Sig } = Params, Id) -> +encode_connect(#{ protocols := _Protocols + , versions := _Versions + , pool_id := _PoolId + , pubkey := _Pubkey + , extra_pubkeys := _Extra + , type := _Type + , signature := _Sig } = Params, Id) -> encode_request(#{connect => Params}, Id, connect_protocol(), connect_version()). decode_connect(MsgBin) -> @@ -241,12 +245,14 @@ decode_msg_(<<"connect">>, #{ <<"protocols">> := Protos , <<"pool_id">> := PoolId , <<"pubkey">> := PK , <<"extra_pubkeys">> := Extra + , <<"type">> := Type , <<"nonces">> := Nonces }) -> #{connect => #{ protocols => Protos , versions => Vsns , pool_id => PoolId , pubkey => PK , extra_pubkeys => Extra + , type => Type , nonces => Nonces }}; decode_msg_(<<"get_nonces">>, #{ <<"seq">> := Seq @@ -291,6 +297,7 @@ valid_(target, T) -> pos_integer(T); valid_(edge_bits, E) -> pos_integer(E); valid_(pos_int, I) -> pos_integer(I); valid_(contract, Id) -> ok_tuple(gmser_api_encoder:safe_defode(contract_pubkey, Id)); +valid_(type, T) -> lists:member(T, [miner, monitor]); valid_(nonces, Ns) -> case Ns of [N] -> pos_integer(N);