@@ -13,20 +13,28 @@ defmodule LambdaEthereumConsensus.Validator.ValidatorManager do
13
13
@ impl true
14
14
def init ( { slot , head_root } ) do
15
15
config = Application . get_env ( :lambda_ethereum_consensus , __MODULE__ , [ ] )
16
-
17
16
keystore_dir = Keyword . get ( config , :keystore_dir )
18
17
keystore_pass_dir = Keyword . get ( config , :keystore_pass_dir )
19
- validator_keys = decode_validator_keys ( keystore_dir , keystore_pass_dir )
20
18
21
- children =
22
- validator_keys
23
- |> Enum . map ( fn { pubkey , privkey } ->
24
- Supervisor . child_spec ( { Validator , { slot , head_root , { pubkey , privkey } } } ,
25
- id: pubkey
26
- )
27
- end )
19
+ if is_nil ( keystore_dir ) or is_nil ( keystore_pass_dir ) do
20
+ Logger . warning (
21
+ "[Validator Manager] No keystore_dir or keystore_pass_dir provided. Validator will not start."
22
+ )
23
+
24
+ :ignore
25
+ else
26
+ validator_keys = decode_validator_keys ( keystore_dir , keystore_pass_dir )
27
+
28
+ children =
29
+ validator_keys
30
+ |> Enum . map ( fn { pubkey , privkey } ->
31
+ Supervisor . child_spec ( { Validator , { slot , head_root , { pubkey , privkey } } } ,
32
+ id: pubkey
33
+ )
34
+ end )
28
35
29
- Supervisor . init ( children , strategy: :one_for_one )
36
+ Supervisor . init ( children , strategy: :one_for_one )
37
+ end
30
38
end
31
39
32
40
def notify_new_block ( slot , head_root ) do
@@ -38,9 +46,15 @@ defmodule LambdaEthereumConsensus.Validator.ValidatorManager do
38
46
end
39
47
40
48
defp cast_to_children ( msg ) do
41
- __MODULE__
42
- |> Supervisor . which_children ( )
43
- |> Enum . each ( fn { _ , pid , _ , _ } -> GenServer . cast ( pid , msg ) end )
49
+ case Process . whereis ( __MODULE__ ) do
50
+ nil ->
51
+ # No active validators
52
+ nil
53
+
54
+ pid ->
55
+ Supervisor . which_children ( pid )
56
+ |> Enum . each ( fn { _ , pid , _ , _ } -> GenServer . cast ( pid , msg ) end )
57
+ end
44
58
end
45
59
46
60
@ doc """
@@ -49,8 +63,10 @@ defmodule LambdaEthereumConsensus.Validator.ValidatorManager do
49
63
- <keystore_dir>/<public_key>.json
50
64
- <keystore_pass_dir>/<public_key>.txt
51
65
"""
52
- @ spec decode_validator_keys ( binary ( ) , binary ( ) ) :: list ( { Bls . pubkey ( ) , Bls . privkey ( ) } )
53
- def decode_validator_keys ( keystore_dir , keystore_pass_dir ) do
66
+ @ spec decode_validator_keys ( binary ( ) , binary ( ) ) ::
67
+ list ( { Bls . pubkey ( ) , Bls . privkey ( ) } )
68
+ def decode_validator_keys ( keystore_dir , keystore_pass_dir )
69
+ when is_binary ( keystore_dir ) and is_binary ( keystore_pass_dir ) do
54
70
File . ls! ( keystore_dir )
55
71
|> Enum . map ( fn filename ->
56
72
if String . ends_with? ( filename , ".json" ) do
0 commit comments