@@ -5,7 +5,7 @@ defmodule LambdaEthereumConsensus.ValidatorSet do
5
5
simplify the delegation of work.
6
6
"""
7
7
8
- defstruct head_root: nil , duties: % { } , validators: [ ]
8
+ defstruct head_root: nil , duties: % { } , validators: % { }
9
9
10
10
require Logger
11
11
@@ -54,10 +54,11 @@ defmodule LambdaEthereumConsensus.ValidatorSet do
54
54
defp setup_validators ( slot , head_root , keystore_dir , keystore_pass_dir ) do
55
55
validator_keystores = decode_validator_keystores ( keystore_dir , keystore_pass_dir )
56
56
epoch = Misc . compute_epoch_at_slot ( slot )
57
+ beacon = Validator . fetch_target_state_and_go_to_slot ( epoch , slot , head_root )
57
58
58
59
validators =
59
60
Map . new ( validator_keystores , fn keystore ->
60
- validator = Validator . new ( keystore , slot , head_root )
61
+ validator = Validator . new ( keystore , beacon )
61
62
{ validator . index , validator }
62
63
end )
63
64
@@ -71,22 +72,28 @@ defmodule LambdaEthereumConsensus.ValidatorSet do
71
72
Notify all validators of a new head.
72
73
"""
73
74
@ spec notify_head ( t ( ) , Types . slot ( ) , Types . root ( ) ) :: t ( )
75
+ def notify_head ( % { validators: validators } = state , _slot , _head_root ) when validators == % { } ,
76
+ do: state
77
+
74
78
def notify_head ( set , slot , head_root ) do
75
79
Logger . debug ( "[ValidatorSet] New Head" , root: head_root , slot: slot )
76
80
epoch = Misc . compute_epoch_at_slot ( slot )
77
81
78
82
# TODO: this doesn't take into account reorgs
79
83
set
80
84
|> update_state ( epoch , slot , head_root )
81
- |> attests ( epoch , slot , head_root )
82
- |> build_payload ( slot + 1 , head_root )
85
+ |> maybe_attests ( epoch , slot , head_root )
86
+ |> maybe_build_payload ( slot + 1 , head_root )
83
87
|> sync_committee_broadcasts ( epoch , slot , head_root )
84
88
end
85
89
86
90
@ doc """
87
91
Notify all validators of a new tick.
88
92
"""
89
93
@ spec notify_tick ( t ( ) , tuple ( ) ) :: t ( )
94
+ def notify_tick ( % { validators: validators } = state , _slot_data ) when validators == % { } ,
95
+ do: state
96
+
90
97
def notify_tick ( % { head_root: head_root } = set , { slot , third } = slot_data ) do
91
98
Logger . debug ( "[ValidatorSet] Tick #{ inspect ( third ) } " , root: head_root , slot: slot )
92
99
epoch = Misc . compute_epoch_at_slot ( slot )
@@ -97,18 +104,18 @@ defmodule LambdaEthereumConsensus.ValidatorSet do
97
104
end
98
105
99
106
defp process_tick ( % { head_root: head_root } = set , epoch , { slot , :first_third } ) do
100
- propose ( set , epoch , slot , head_root )
107
+ maybe_propose ( set , epoch , slot , head_root )
101
108
end
102
109
103
110
defp process_tick ( % { head_root: head_root } = set , epoch , { slot , :second_third } ) do
104
111
set
105
- |> attests ( epoch , slot , head_root )
106
- |> build_payload ( slot + 1 , head_root )
112
+ |> maybe_attests ( epoch , slot , head_root )
113
+ |> maybe_build_payload ( slot + 1 , head_root )
107
114
|> sync_committee_broadcasts ( epoch , slot , head_root )
108
115
end
109
116
110
117
defp process_tick ( set , epoch , { slot , :last_third } ) do
111
- publish_aggregates ( set , epoch , slot )
118
+ maybe_publish_aggregates ( set , epoch , slot )
112
119
end
113
120
114
121
##############################
@@ -148,7 +155,7 @@ defmodule LambdaEthereumConsensus.ValidatorSet do
148
155
##############################
149
156
# Block proposal
150
157
151
- defp build_payload ( % { validators: validators } = set , slot , head_root ) do
158
+ defp maybe_build_payload ( % { validators: validators } = set , slot , head_root ) do
152
159
# We calculate payloads from a previous slot, we need to recompute the epoch
153
160
epoch = Misc . compute_epoch_at_slot ( slot )
154
161
@@ -163,7 +170,7 @@ defmodule LambdaEthereumConsensus.ValidatorSet do
163
170
end
164
171
end
165
172
166
- defp propose ( % { validators: validators } = set , epoch , slot , head_root ) do
173
+ defp maybe_propose ( % { validators: validators } = set , epoch , slot , head_root ) do
167
174
case Duties . current_proposer ( set . duties , epoch , slot ) do
168
175
nil ->
169
176
set
@@ -203,7 +210,7 @@ defmodule LambdaEthereumConsensus.ValidatorSet do
203
210
##############################
204
211
# Attestation
205
212
206
- defp attests ( set , epoch , slot , head_root ) do
213
+ defp maybe_attests ( set , epoch , slot , head_root ) do
207
214
case Duties . current_attesters ( set . duties , epoch , slot ) do
208
215
[ ] ->
209
216
set
@@ -215,7 +222,7 @@ defmodule LambdaEthereumConsensus.ValidatorSet do
215
222
end
216
223
end
217
224
218
- defp publish_aggregates ( set , epoch , slot ) do
225
+ defp maybe_publish_aggregates ( set , epoch , slot ) do
219
226
case Duties . current_aggregators ( set . duties , epoch , slot ) do
220
227
[ ] ->
221
228
set
0 commit comments