@@ -45,6 +45,21 @@ defmodule Types.DepositTree do
45
45
}
46
46
end
47
47
48
+ @ spec get_snapshot ( t ( ) ) :: DepositTreeSnapshot . t ( )
49
+ def get_snapshot ( % __MODULE__ { } = tree ) do
50
+ finalized = get_finalized ( tree . inner )
51
+ deposit_root = get_root ( tree )
52
+ { el_hash , el_height } = tree . finalized_execution_block
53
+
54
+ % DepositTreeSnapshot {
55
+ finalized: finalized ,
56
+ deposit_root: deposit_root ,
57
+ deposit_count: tree . deposit_count ,
58
+ execution_block_hash: el_hash ,
59
+ execution_block_height: el_height
60
+ }
61
+ end
62
+
48
63
@ spec finalize ( t ( ) , Eth1Data . t ( ) , non_neg_integer ( ) ) :: t ( )
49
64
def finalize ( % __MODULE__ { } = tree , % Eth1Data { } = eth1_data , execution_block_height ) do
50
65
finalized_block = { eth1_data . block_hash , execution_block_height }
@@ -55,7 +70,7 @@ defmodule Types.DepositTree do
55
70
@ spec get_deposit ( t ( ) , non_neg_integer ( ) ) :: { :ok , Deposit . t ( ) } | { :error , String . t ( ) }
56
71
def get_deposit ( % __MODULE__ { } = tree , index ) do
57
72
cond do
58
- index < get_finalized ( tree . inner ) ->
73
+ index < count_finalized ( tree . inner ) ->
59
74
{ :error , "deposit already finalized" }
60
75
61
76
index >= tree . deposit_count ->
@@ -171,10 +186,15 @@ defmodule Types.DepositTree do
171
186
defp full? ( { :zero , _ } ) , do: false
172
187
defp full? ( _ ) , do: true
173
188
174
- defp get_finalized ( { :finalized , { _ , count } } ) , do: count
175
- defp get_finalized ( { :node , { left , right } } ) , do: get_finalized ( left ) + get_finalized ( right )
176
- defp get_finalized ( { :leaf , _ } ) , do: 0
177
- defp get_finalized ( { :zero , _ } ) , do: 0
189
+ defp count_finalized ( { :finalized , { _ , count } } ) , do: count
190
+ defp count_finalized ( { :node , { left , right } } ) , do: count_finalized ( left ) + count_finalized ( right )
191
+ defp count_finalized ( { :leaf , _ } ) , do: 0
192
+ defp count_finalized ( { :zero , _ } ) , do: 0
193
+
194
+ defp get_finalized ( { :finalized , { hash , _ } } ) , do: [ hash ]
195
+ defp get_finalized ( { :node , { left , right } } ) , do: get_finalized ( right ) ++ get_finalized ( left )
196
+ defp get_finalized ( { :leaf , _ } ) , do: [ ]
197
+ defp get_finalized ( { :zero , _ } ) , do: [ ]
178
198
179
199
defp mix_in_length ( % __MODULE__ { deposit_count: count } ) ,
180
200
do: SszEx . hash_tree_root! ( count , TypeAliases . uint64 ( ) )
0 commit comments