Skip to content

Commit 9230397

Browse files
authored
Merge pull request #16014 from MinaProtocol/sai/refactor-transition-handler-validator
refactor transition handler validator
2 parents d0e14d5 + e9f02df commit 9230397

File tree

3 files changed

+44
-35
lines changed

3 files changed

+44
-35
lines changed

src/lib/ledger_catchup/normal_catchup.ml

+1-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ let verify_transition ~context:(module Context : CONTEXT) ~trust_system
7777
Envelope.Incoming.map enveloped_transition
7878
~f:(Fn.const initially_validated_transition)
7979
in
80-
Transition_handler.Validator.validate_transition
80+
Transition_handler.Validator.validate_transition_is_relevant
8181
~context:(module Context)
8282
~frontier ~unprocessed_transition_cache ~slot_tx_end ~slot_chain_end
8383
enveloped_initially_validated_transition

src/lib/ledger_catchup/super_catchup.ml

+40-31
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ open Cache_lib
66
open Pipe_lib
77
open Mina_numbers
88
open Mina_base
9-
open Mina_block
109
open Network_peer
1110

1211
module type CONTEXT = sig
@@ -138,6 +137,7 @@ let verify_transition ~context:(module Context : CONTEXT) ~trust_system
138137
let transition_with_hash = Envelope.Incoming.data enveloped_transition in
139138
let cached_initially_validated_transition_result =
140139
let open Result.Let_syntax in
140+
let open Mina_block in
141141
let%bind initially_validated_transition =
142142
transition_with_hash
143143
|> Validation.skip_time_received_validation
@@ -150,20 +150,20 @@ let verify_transition ~context:(module Context : CONTEXT) ~trust_system
150150
Envelope.Incoming.map enveloped_transition
151151
~f:(Fn.const initially_validated_transition)
152152
in
153-
Transition_handler.Validator.validate_transition
153+
Transition_handler.Validator.validate_transition_is_relevant
154154
~context:(module Context)
155155
~frontier ~unprocessed_transition_cache ~slot_tx_end ~slot_chain_end
156156
enveloped_initially_validated_transition
157157
in
158158
let state_hash =
159-
Validation.block_with_hash transition_with_hash
159+
Mina_block.Validation.block_with_hash transition_with_hash
160160
|> State_hash.With_state_hashes.state_hash |> State_hash.to_yojson
161161
in
162162
let open Deferred.Let_syntax in
163163
match cached_initially_validated_transition_result with
164164
| Ok x ->
165165
Internal_tracing.with_state_hash
166-
( Validation.block_with_hash transition_with_hash
166+
( Mina_block.Validation.block_with_hash transition_with_hash
167167
|> State_hash.With_state_hashes.state_hash )
168168
@@ fun () ->
169169
[%log internal] "Validate_transition_done" ;
@@ -237,20 +237,20 @@ let verify_transition ~context:(module Context : CONTEXT) ~trust_system
237237
[%log warn]
238238
~metadata:[ ("state_hash", state_hash) ]
239239
"initial_validate: invalid protocol version" ;
240-
let transition = Validation.block transition_with_hash in
240+
let transition = Mina_block.Validation.block transition_with_hash in
241241
let%map () =
242242
Trust_system.record_envelope_sender trust_system logger sender
243243
( Trust_system.Actions.Sent_invalid_protocol_version
244244
, Some
245245
( "Invalid current or proposed protocol version in catchup block"
246246
, [ ( "current_protocol_version"
247247
, `String
248-
( Header.current_protocol_version
248+
( Mina_block.Header.current_protocol_version
249249
(Mina_block.header transition)
250250
|> Protocol_version.to_string ) )
251251
; ( "proposed_protocol_version"
252252
, `String
253-
( Header.proposed_protocol_version_opt
253+
( Mina_block.Header.proposed_protocol_version_opt
254254
(Mina_block.header transition)
255255
|> Option.value_map ~default:"<None>"
256256
~f:Protocol_version.to_string ) )
@@ -261,7 +261,7 @@ let verify_transition ~context:(module Context : CONTEXT) ~trust_system
261261
[%log warn]
262262
~metadata:[ ("state_hash", state_hash) ]
263263
"initial_validate: mismatch protocol version" ;
264-
let transition = Validation.block transition_with_hash in
264+
let transition = Mina_block.Validation.block transition_with_hash in
265265
let%map () =
266266
Trust_system.record_envelope_sender trust_system logger sender
267267
( Trust_system.Actions.Sent_mismatched_protocol_version
@@ -270,7 +270,7 @@ let verify_transition ~context:(module Context : CONTEXT) ~trust_system
270270
daemon protocol version"
271271
, [ ( "block_current_protocol_version"
272272
, `String
273-
( Header.current_protocol_version
273+
( Mina_block.Header.current_protocol_version
274274
(Mina_block.header transition)
275275
|> Protocol_version.to_string ) )
276276
; ( "daemon_current_protocol_version"
@@ -407,7 +407,7 @@ module Downloader = struct
407407
type t = Mina_block.t
408408

409409
let key (t : t) =
410-
( ( Mina_block.header t |> Header.protocol_state
410+
( ( Mina_block.header t |> Mina_block.Header.protocol_state
411411
|> Mina_state.Protocol_state.hashes )
412412
.state_hash
413413
, Mina_block.blockchain_length t )
@@ -520,8 +520,8 @@ module Initial_validate_batcher = struct
520520
{ State_hash.State_hashes.state_hash
521521
; state_body_hash = None
522522
} )
523-
|> Validation.wrap )
524-
|> Validation.validate_proofs ~verifier ~genesis_state_hash
523+
|> Mina_block.Validation.wrap )
524+
|> Mina_block.Validation.validate_proofs ~verifier ~genesis_state_hash
525525
>>| function
526526
| Ok tvs ->
527527
Ok (List.map tvs ~f:(fun x -> `Valid x))
@@ -543,7 +543,7 @@ module Verify_work_batcher = struct
543543
let create ~verifier : _ t =
544544
let works (x : input) =
545545
let wh, _ = x.data in
546-
Body.staged_ledger_diff (Mina_block.body wh.data)
546+
Mina_block.Body.staged_ledger_diff (Mina_block.body wh.data)
547547
|> Staged_ledger_diff.completed_works
548548
in
549549
create
@@ -555,7 +555,7 @@ module Verify_work_batcher = struct
555555
~max_weight_per_call:1000 ~how_to_add:`Insert
556556
~compare_init:(fun e1 e2 ->
557557
let len (x : input) =
558-
Validation.block x.data |> Mina_block.blockchain_length
558+
Mina_block.Validation.block x.data |> Mina_block.blockchain_length
559559
in
560560
match Length.compare (len e1) (len e2) with
561561
| 0 ->
@@ -710,11 +710,11 @@ let create_node ~logger ~downloader t x =
710710
| `Initial_validated (b, valid_cb) ->
711711
let t = (Cached.peek b).Envelope.Incoming.data in
712712
let state_hash =
713-
Validation.block_with_hash t
713+
Mina_block.Validation.block_with_hash t
714714
|> State_hash.With_state_hashes.state_hash
715715
in
716716
let blockchain_length =
717-
Validation.block t |> Mina_block.blockchain_length
717+
Mina_block.Validation.block t |> Mina_block.blockchain_length
718718
in
719719
Internal_tracing.with_state_hash state_hash
720720
@@ fun () ->
@@ -726,9 +726,9 @@ let create_node ~logger ~downloader t x =
726726
[%log internal] "To_verify" ;
727727
( Node.State.To_verify (b, valid_cb)
728728
, state_hash
729-
, Validation.block t |> Mina_block.blockchain_length
730-
, Validation.block t |> Mina_block.header
731-
|> Mina_block.Header.protocol_state
729+
, Mina_block.Validation.block t |> Mina_block.blockchain_length
730+
, Mina_block.Validation.block t
731+
|> Mina_block.header |> Mina_block.Header.protocol_state
732732
|> Mina_state.Protocol_state.previous_state_hash
733733
, Ivar.create () )
734734
in
@@ -954,7 +954,8 @@ let setup_state_machine_runner ~context:(module Context : CONTEXT) ~t ~verifier
954954
let av =
955955
{ av with
956956
data =
957-
Validation.skip_frontier_dependencies_validation
957+
Mina_block.Validation
958+
.skip_frontier_dependencies_validation
958959
`This_block_belongs_to_a_detached_subtree av.data
959960
}
960961
in
@@ -1105,7 +1106,9 @@ let run_catchup ~context:(module Context : CONTEXT) ~trust_system ~verifier
11051106
combine !best
11061107
(Some
11071108
(With_hash.map
1108-
~f:(Fn.compose Header.protocol_state Mina_block.header)
1109+
~f:
1110+
(Fn.compose Mina_block.Header.protocol_state
1111+
Mina_block.header )
11091112
x ) ) ) ;
11101113
!best
11111114
in
@@ -1203,15 +1206,16 @@ let run_catchup ~context:(module Context : CONTEXT) ~trust_system ~verifier
12031206
let target_length =
12041207
let len =
12051208
forest_pick forest |> Tuple2.get1 |> Cached.peek
1206-
|> Envelope.Incoming.data |> Validation.block
1209+
|> Envelope.Incoming.data |> Mina_block.Validation.block
12071210
|> Mina_block.blockchain_length
12081211
in
12091212
Option.value_exn (Length.sub len (Length.of_int 1))
12101213
in
12111214
let blockchain_length_of_target_hash =
12121215
let blockchain_length_of_dangling_block =
12131216
List.hd_exn forest |> Rose_tree.root |> Tuple2.get1
1214-
|> Cached.peek |> Envelope.Incoming.data |> Validation.block
1217+
|> Cached.peek |> Envelope.Incoming.data
1218+
|> Mina_block.Validation.block
12151219
|> Mina_block.blockchain_length
12161220
in
12171221
Unsigned.UInt32.pred blockchain_length_of_dangling_block
@@ -1222,7 +1226,8 @@ let run_catchup ~context:(module Context : CONTEXT) ~trust_system ~verifier
12221226
~f:(fun (c, _vc) ->
12231227
let h =
12241228
State_hash.With_state_hashes.state_hash
1225-
(Validation.block_with_hash (Cached.peek c).data)
1229+
(Mina_block.Validation.block_with_hash
1230+
(Cached.peek c).data )
12261231
in
12271232
( match (Cached.peek c).sender with
12281233
| Local ->
@@ -1236,7 +1241,8 @@ let run_catchup ~context:(module Context : CONTEXT) ~trust_system ~verifier
12361241
let%bind.Option p =
12371242
Transition_chain_verifier.verify ~target_hash:h
12381243
~transition_chain_proof:
1239-
( ( Mina_block.header root |> Header.protocol_state
1244+
( ( Mina_block.header root
1245+
|> Mina_block.Header.protocol_state
12401246
|> Mina_state.Protocol_state.hashes )
12411247
.state_hash
12421248
, path )
@@ -1288,7 +1294,7 @@ let run_catchup ~context:(module Context : CONTEXT) ~trust_system ~verifier
12881294
~f:(fun (cached_transition, _vc) ->
12891295
Cached.peek cached_transition
12901296
|> Envelope.Incoming.data
1291-
|> Validation.block_with_hash
1297+
|> Mina_block.Validation.block_with_hash
12921298
|> State_hash.With_state_hashes.state_hash )
12931299
in
12941300
[%log error]
@@ -1299,16 +1305,18 @@ let run_catchup ~context:(module Context : CONTEXT) ~trust_system ~verifier
12991305
~f:State_hash.to_yojson ) )
13001306
; ( "state_hash"
13011307
, State_hash.to_yojson
1302-
( Validation.block_with_hash transition
1308+
( Mina_block.Validation.block_with_hash
1309+
transition
13031310
|> State_hash.With_state_hashes.state_hash )
13041311
)
13051312
; ( "reason"
13061313
, `String
13071314
"no common ancestor with our transition \
13081315
frontier" )
13091316
; ( "protocol_state"
1310-
, Validation.block transition
1311-
|> Mina_block.header |> Header.protocol_state
1317+
, Mina_block.Validation.block transition
1318+
|> Mina_block.header
1319+
|> Mina_block.Header.protocol_state
13121320
|> Mina_state.Protocol_state.value_to_yojson )
13131321
]
13141322
"Validation error: external transition with state \
@@ -1449,9 +1457,10 @@ let%test_module "Ledger_catchup tests" =
14491457
~pids:(Child_processes.Termination.create_pid_table ())) *)
14501458

14511459
let downcast_transition transition =
1460+
let open Mina_block.Validation in
14521461
let transition =
1453-
transition |> Validation.reset_frontier_dependencies_validation
1454-
|> Validation.reset_staged_ledger_diff_validation
1462+
transition |> reset_frontier_dependencies_validation
1463+
|> reset_staged_ledger_diff_validation
14551464
in
14561465
Envelope.Incoming.wrap ~data:transition ~sender:Envelope.Sender.Local
14571466

src/lib/transition_handler/validator.ml

+3-3
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ module type CONTEXT = sig
1717
val consensus_constants : Consensus.Constants.t
1818
end
1919

20-
let validate_transition ~context:(module Context : CONTEXT) ~frontier
21-
~unprocessed_transition_cache ~slot_tx_end ~slot_chain_end
20+
let validate_transition_is_relevant ~context:(module Context : CONTEXT)
21+
~frontier ~unprocessed_transition_cache ~slot_tx_end ~slot_chain_end
2222
enveloped_transition =
2323
let logger = Context.logger in
2424
let open Result.Let_syntax in
@@ -144,7 +144,7 @@ let run ~context:(module Context : CONTEXT) ~trust_system ~time_controller
144144
Runtime_config.slot_chain_end precomputed_values.runtime_config
145145
in
146146
match
147-
validate_transition
147+
validate_transition_is_relevant
148148
~context:(module Context)
149149
~frontier ~unprocessed_transition_cache ~slot_tx_end
150150
~slot_chain_end transition_env

0 commit comments

Comments
 (0)