Skip to content

Commit 2055e78

Browse files
committed
Small cleanup of the Validator.Setup
1 parent b9423e1 commit 2055e78

File tree

2 files changed

+43
-36
lines changed

2 files changed

+43
-36
lines changed

lib/lambda_ethereum_consensus/validator/setup.ex

Lines changed: 39 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,16 @@ defmodule LambdaEthereumConsensus.Validator.Setup do
1818
defp setup_validators(_s, _r, keystore_dir, keystore_pass_dir)
1919
when is_nil(keystore_dir) or is_nil(keystore_pass_dir) do
2020
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."
2222
)
2323

24-
%{}
24+
[]
2525
end
2626

2727
defp setup_validators(slot, head_root, keystore_dir, keystore_pass_dir) do
2828
validator_keys = decode_validator_keys(keystore_dir, keystore_pass_dir)
2929

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}))
3631

3732
Logger.info("[Validator] Initialized #{Enum.count(validators)} validators")
3833

@@ -49,34 +44,46 @@ defmodule LambdaEthereumConsensus.Validator.Setup do
4944
list({Bls.pubkey(), Bls.privkey()})
5045
def decode_validator_keys(keystore_dir, keystore_pass_dir)
5146
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
5652

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+
)
5962

60-
{keystore_file, keystore_pass_file}
61-
else
62-
Logger.warning("[Validator] Skipping file: #{filename}. Not a keystore file.")
6363
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]
6486
end
6587
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)
8188
end
8289
end

lib/libp2p_port.ex

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -771,11 +771,11 @@ defmodule LambdaEthereumConsensus.Libp2pPort do
771771
updated_validators
772772
end
773773

774-
defp notify_validator({pubkey, validator}, {:on_tick, slot_data}),
775-
do: {pubkey, Validator.handle_tick(slot_data, validator)}
774+
defp notify_validator(validator, {:on_tick, slot_data}),
775+
do: Validator.handle_tick(slot_data, validator)
776776

777-
defp notify_validator({pubkey, validator}, {:new_block, slot, head_root}),
778-
do: {pubkey, Validator.handle_new_block(slot, head_root, validator)}
777+
defp notify_validator(validator, {:new_block, slot, head_root}),
778+
do: Validator.handle_new_block(slot, head_root, validator)
779779

780780
defp schedule_next_tick() do
781781
# For millisecond precision

0 commit comments

Comments
 (0)