Handle monitor clients

This commit is contained in:
Ulf Wiger 2025-03-20 22:48:27 +01:00
parent d2880b475b
commit 68064b1469

View File

@ -60,6 +60,7 @@ validate(#{ connect := #{ pubkey := PK
, versions := Versions , versions := Versions
, pool_id := PoolId , pool_id := PoolId
, extra_pubkeys := Extra , extra_pubkeys := Extra
, type := Type
, nonces := Nonces , nonces := Nonces
}} = Msg, _Vsn) -> }} = Msg, _Vsn) ->
valid({list, protocol}, Protocols), valid({list, protocol}, Protocols),
@ -68,6 +69,7 @@ validate(#{ connect := #{ pubkey := PK
valid(contract, PoolId), valid(contract, PoolId),
valid(pubkey, PK), valid(pubkey, PK),
valid({list, pubkey}, Extra), valid({list, pubkey}, Extra),
valid(type, Type),
valid(pos_int, Nonces), valid(pos_int, Nonces),
Msg; Msg;
validate(#{ connect_ack := #{ protocol := Protocol validate(#{ connect_ack := #{ protocol := Protocol
@ -113,11 +115,13 @@ validate(#{ no_solution := #{ seq := Seq
validate(#{ stop_mining := #{} } = Msg, _Vsn) -> validate(#{ stop_mining := #{} } = Msg, _Vsn) ->
Msg. Msg.
encode_connect(#{ protocols := _Protocols encode_connect(#{ protocols := _Protocols
, versions := _Versions , versions := _Versions
, pool_id := _PoolId , pool_id := _PoolId
, pubkey := _Pubkey , pubkey := _Pubkey
, signature := _Sig } = Params, Id) -> , extra_pubkeys := _Extra
, type := _Type
, signature := _Sig } = Params, Id) ->
encode_request(#{connect => Params}, Id, connect_protocol(), connect_version()). encode_request(#{connect => Params}, Id, connect_protocol(), connect_version()).
decode_connect(MsgBin) -> decode_connect(MsgBin) ->
@ -241,12 +245,14 @@ decode_msg_(<<"connect">>, #{ <<"protocols">> := Protos
, <<"pool_id">> := PoolId , <<"pool_id">> := PoolId
, <<"pubkey">> := PK , <<"pubkey">> := PK
, <<"extra_pubkeys">> := Extra , <<"extra_pubkeys">> := Extra
, <<"type">> := Type
, <<"nonces">> := Nonces }) -> , <<"nonces">> := Nonces }) ->
#{connect => #{ protocols => Protos #{connect => #{ protocols => Protos
, versions => Vsns , versions => Vsns
, pool_id => PoolId , pool_id => PoolId
, pubkey => PK , pubkey => PK
, extra_pubkeys => Extra , extra_pubkeys => Extra
, type => Type
, nonces => Nonces , nonces => Nonces
}}; }};
decode_msg_(<<"get_nonces">>, #{ <<"seq">> := Seq decode_msg_(<<"get_nonces">>, #{ <<"seq">> := Seq
@ -291,6 +297,7 @@ valid_(target, T) -> pos_integer(T);
valid_(edge_bits, E) -> pos_integer(E); valid_(edge_bits, E) -> pos_integer(E);
valid_(pos_int, I) -> pos_integer(I); valid_(pos_int, I) -> pos_integer(I);
valid_(contract, Id) -> ok_tuple(gmser_api_encoder:safe_defode(contract_pubkey, Id)); valid_(contract, Id) -> ok_tuple(gmser_api_encoder:safe_defode(contract_pubkey, Id));
valid_(type, T) -> lists:member(T, [miner, monitor]);
valid_(nonces, Ns) -> valid_(nonces, Ns) ->
case Ns of case Ns of
[N] -> pos_integer(N); [N] -> pos_integer(N);