@@ -18,21 +18,16 @@ defmodule LambdaEthereumConsensus.Validator.Setup do
18
18
defp setup_validators ( _s , _r , keystore_dir , keystore_pass_dir )
19
19
when is_nil ( keystore_dir ) or is_nil ( keystore_pass_dir ) do
20
20
Logger . warning (
21
- "[Validator] No keystore_dir or keystore_pass_dir provided. Validator will not start."
21
+ "[Validator] No keystore_dir or keystore_pass_dir provided. Validators won't start."
22
22
)
23
23
24
- % { }
24
+ [ ]
25
25
end
26
26
27
27
defp setup_validators ( slot , head_root , keystore_dir , keystore_pass_dir ) do
28
28
validator_keys = decode_validator_keys ( keystore_dir , keystore_pass_dir )
29
29
30
- validators =
31
- validator_keys
32
- |> Enum . map ( fn { pubkey , privkey } ->
33
- { pubkey , Validator . new ( { slot , head_root , { pubkey , privkey } } ) }
34
- end )
35
- |> Map . new ( )
30
+ validators = Enum . map ( validator_keys , & Validator . new ( { slot , head_root , & 1 } ) )
36
31
37
32
Logger . info ( "[Validator] Initialized #{ Enum . count ( validators ) } validators" )
38
33
@@ -49,34 +44,46 @@ defmodule LambdaEthereumConsensus.Validator.Setup do
49
44
list ( { Bls . pubkey ( ) , Bls . privkey ( ) } )
50
45
def decode_validator_keys ( keystore_dir , keystore_pass_dir )
51
46
when is_binary ( keystore_dir ) and is_binary ( keystore_pass_dir ) do
52
- File . ls! ( keystore_dir )
53
- |> Enum . map ( fn filename ->
54
- if String . ends_with? ( filename , ".json" ) do
55
- base_name = String . trim_trailing ( filename , ".json" )
47
+ keystore_dir
48
+ |> File . ls! ( )
49
+ |> map_rejecting_nils ( & paths_from_filename ( keystore_dir , keystore_pass_dir , & 1 , Path . extname ( & 1 ) ) )
50
+ |> map_rejecting_nils ( & decode_key / 1 )
51
+ end
56
52
57
- keystore_file = Path . join ( keystore_dir , "#{ base_name } .json" )
58
- keystore_pass_file = Path . join ( keystore_pass_dir , "#{ base_name } .txt" )
53
+ defp decode_key ( { keystore_file , keystore_pass_file } ) do
54
+ # TODO: remove `try` and handle errors properly
55
+ try do
56
+ Keystore . decode_from_files! ( keystore_file , keystore_pass_file )
57
+ rescue
58
+ error ->
59
+ Logger . error (
60
+ "[Validator] Failed to decode keystore file: #{ keystore_file } . Pass file: #{ keystore_pass_file } Error: #{ inspect ( error ) } "
61
+ )
59
62
60
- { keystore_file , keystore_pass_file }
61
- else
62
- Logger . warning ( "[Validator] Skipping file: #{ filename } . Not a keystore file." )
63
63
nil
64
+ end
65
+ end
66
+
67
+ defp paths_from_filename ( keystore_dir , keystore_pass_dir , filename , ".json" ) do
68
+ basename = Path . basename ( filename , ".json" )
69
+
70
+ keystore_file = Path . join ( keystore_dir , "#{ basename } .json" )
71
+ keystore_pass_file = Path . join ( keystore_pass_dir , "#{ basename } .txt" )
72
+
73
+ { keystore_file , keystore_pass_file }
74
+ end
75
+
76
+ defp paths_from_filename ( _keystore_dir , _keystore_pass_dir , basename , _ext ) do
77
+ Logger . warning ( "[Validator] Skipping file: #{ basename } . Not a json keystore file." )
78
+ nil
79
+ end
80
+
81
+ defp map_rejecting_nils ( enumerable , fun ) do
82
+ Enum . reduce ( enumerable , [ ] , fn elem , acc ->
83
+ case fun . ( elem ) do
84
+ nil -> acc
85
+ result -> [ result | acc ]
64
86
end
65
87
end )
66
- |> Enum . reject ( & is_nil / 1 )
67
- |> Enum . map ( fn { keystore_file , keystore_pass_file } ->
68
- # TODO: remove `try` and handle errors properly
69
- try do
70
- Keystore . decode_from_files! ( keystore_file , keystore_pass_file )
71
- rescue
72
- error ->
73
- Logger . error (
74
- "[Validator] Failed to decode keystore file: #{ keystore_file } . Pass file: #{ keystore_pass_file } Error: #{ inspect ( error ) } "
75
- )
76
-
77
- nil
78
- end
79
- end )
80
- |> Enum . reject ( & is_nil / 1 )
81
88
end
82
89
end
0 commit comments