30
30
31
31
32
32
def get_min_empty_validator_index (validators : Sequence [ValidatorRecord ],
33
+ validator_balances : Sequence [int ],
33
34
current_slot : int ,
34
35
zero_balance_validator_ttl : int ) -> int :
35
- for index , validator in enumerate (validators ):
36
+ for index , ( validator , balance ) in enumerate (zip ( validators , validator_balances ) ):
36
37
is_empty = (
37
- validator . balance == 0 and
38
+ balance == 0 and
38
39
validator .latest_status_change_slot + zero_balance_validator_ttl <= current_slot
39
40
)
40
41
if is_empty :
@@ -74,6 +75,7 @@ def validate_proof_of_possession(state: BeaconState,
74
75
75
76
def add_pending_validator (state : BeaconState ,
76
77
validator : ValidatorRecord ,
78
+ deposit : int ,
77
79
zero_balance_validator_ttl : int ) -> Tuple [BeaconState , int ]:
78
80
"""
79
81
Add a validator to the existing minimum empty validator index or
@@ -83,6 +85,7 @@ def add_pending_validator(state: BeaconState,
83
85
try :
84
86
index = get_min_empty_validator_index (
85
87
state .validator_registry ,
88
+ state .validator_balances ,
86
89
state .slot ,
87
90
zero_balance_validator_ttl ,
88
91
)
@@ -93,11 +96,12 @@ def add_pending_validator(state: BeaconState,
93
96
validator_registry = state .validator_registry + (validator ,)
94
97
state = state .copy (
95
98
validator_registry = validator_registry ,
99
+ validator_balances = state .validator_balances + (deposit , )
96
100
)
97
101
index = len (state .validator_registry ) - 1
98
102
else :
99
103
# Use the empty validator index
100
- state = state .update_validator (index , validator )
104
+ state = state .update_validator (index , validator , deposit )
101
105
102
106
return state , index
103
107
@@ -127,13 +131,13 @@ def process_deposit(*,
127
131
pubkey = pubkey ,
128
132
withdrawal_credentials = withdrawal_credentials ,
129
133
randao_commitment = randao_commitment ,
130
- balance = deposit ,
131
134
latest_status_change_slot = state .slot ,
132
135
)
133
136
134
137
state , index = add_pending_validator (
135
138
state ,
136
139
validator ,
140
+ deposit ,
137
141
zero_balance_validator_ttl ,
138
142
)
139
143
else :
@@ -151,9 +155,10 @@ def process_deposit(*,
151
155
)
152
156
153
157
# Update validator's balance and state
154
- validator = validator .copy (
155
- balance = validator .balance + deposit ,
158
+ state = state .update_validator (
159
+ validator_index = index ,
160
+ validator = validator ,
161
+ balance = state .validator_balances [index ] + deposit ,
156
162
)
157
- state = state .update_validator (index , validator )
158
163
159
164
return state , index
0 commit comments