Skip to content

Commit b90674b

Browse files
committed
move more constants to mock
1 parent 5dbda06 commit b90674b

1 file changed

Lines changed: 101 additions & 97 deletions

File tree

src/lib/network_pool/test_utils.ml renamed to src/lib/network_pool/transaction_pool_mock.ml

Lines changed: 101 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -27,49 +27,6 @@ let block_window_duration =
2727
let extra_keys =
2828
Array.init num_extra_keys ~f:(fun _ -> Signature_lib.Keypair.create ())
2929

30-
let precomputed_values = Lazy.force Precomputed_values.for_unit_tests
31-
32-
let consensus_constants = precomputed_values.consensus_constants
33-
34-
let constraint_constants = precomputed_values.constraint_constants
35-
36-
let compile_config = precomputed_values.compile_config
37-
38-
let proof_level = precomputed_values.proof_level
39-
40-
let genesis_constants = precomputed_values.genesis_constants
41-
42-
let minimum_fee =
43-
Currency.Fee.to_nanomina_int genesis_constants.minimum_user_command_fee
44-
45-
let logger = Logger.create ()
46-
47-
let time_controller = Block_time.Controller.basic ~logger
48-
49-
let `VK vk, `Prover prover = Transaction_snark.For_tests.create_trivial_snapp ()
50-
51-
let vk = Async.Thread_safe.block_on_async_exn (fun () -> vk)
52-
53-
let dummy_state_view =
54-
let state_body =
55-
let consensus_constants =
56-
Consensus.Constants.create ~constraint_constants
57-
~protocol_constants:genesis_constants.protocol
58-
in
59-
let compile_time_genesis =
60-
(*not using Precomputed_values.for_unit_test because of dependency cycle*)
61-
Mina_state.Genesis_protocol_state.t
62-
~genesis_ledger:Genesis_ledger.(Packed.t for_unit_tests)
63-
~genesis_epoch_data:Consensus.Genesis_epoch_data.for_unit_tests
64-
~constraint_constants ~consensus_constants
65-
~genesis_body_reference:Staged_ledger_diff.genesis_body_reference
66-
in
67-
compile_time_genesis.data |> Mina_state.Protocol_state.body
68-
in
69-
{ (Mina_state.Protocol_state.Body.view state_body) with
70-
global_slot_since_genesis = Mina_numbers.Global_slot_since_genesis.zero
71-
}
72-
7330
module Mock_transition_frontier = struct
7431
module Breadcrumb = struct
7532
type t = Mock_staged_ledger.t
@@ -85,7 +42,8 @@ module Mock_transition_frontier = struct
8542

8643
type t = best_tip_diff Broadcast_pipe.Reader.t * Breadcrumb.t ref
8744

88-
let create ?permissions : unit -> t * best_tip_diff Broadcast_pipe.Writer.t =
45+
let create ~vk ?permissions :
46+
unit -> t * best_tip_diff Broadcast_pipe.Writer.t =
8947
fun () ->
9048
let zkappify_account (account : Account.t) : Account.t =
9149
let zkapp =
@@ -132,16 +90,51 @@ end
13290
module Test =
13391
Make0 (Mock_base_ledger) (Mock_staged_ledger) (Mock_transition_frontier)
13492

135-
type test =
93+
type t =
13694
{ txn_pool : Test.Resource_pool.t
13795
; best_tip_diff_w :
13896
Mock_transition_frontier.best_tip_diff Broadcast_pipe.Writer.t
139-
; best_tip_ref : Mina_ledger.Ledger.t ref
97+
; best_tip_ref : Mock_staged_ledger.t ref
14098
; frontier_pipe_w : Mock_transition_frontier.t option Broadcast_pipe.Writer.t
99+
; verifier : Verifier.t
100+
; prover :
101+
?handler:
102+
( Snarky_backendless.Request.request
103+
-> Snarky_backendless.Request.response )
104+
-> Zkapp_statement.t
105+
-> ( unit
106+
* unit
107+
* (Pickles_types.Nat.N2.n, Pickles_types.Nat.N2.n) Pickles.Proof.t )
108+
Deferred.t
109+
; genesis_constants : Genesis_constants.t
110+
; consensus_constants : Consensus.Constants.t
111+
; constraint_constants : Genesis_constants.Constraint_constants.t
112+
; compile_config : Mina_compile_config.t
113+
; zkapp_vk : Verification_key_wire.t
141114
}
142115

143116
let pool_max_size = 25
144117

118+
let dummy_state_view t =
119+
let state_body =
120+
let consensus_constants =
121+
Consensus.Constants.create ~constraint_constants:t.constraint_constants
122+
~protocol_constants:t.genesis_constants.protocol
123+
in
124+
let compile_time_genesis =
125+
(*not using Precomputed_values.for_unit_test because of dependency cycle*)
126+
Mina_state.Genesis_protocol_state.t
127+
~genesis_ledger:Genesis_ledger.(Packed.t for_unit_tests)
128+
~genesis_epoch_data:Consensus.Genesis_epoch_data.for_unit_tests
129+
~constraint_constants:t.constraint_constants ~consensus_constants
130+
~genesis_body_reference:Staged_ledger_diff.genesis_body_reference
131+
in
132+
compile_time_genesis.data |> Mina_state.Protocol_state.body
133+
in
134+
{ (Mina_state.Protocol_state.Body.view state_body) with
135+
global_slot_since_genesis = Mina_numbers.Global_slot_since_genesis.zero
136+
}
137+
145138
let apply_initial_ledger_state t init_ledger_state =
146139
let new_ledger =
147140
Mina_ledger.Ledger.create_ephemeral
@@ -185,7 +178,7 @@ let assert_user_command_sets_equal cs1 cs2 =
185178
report_additional additional2 "expected" "actual" ) ;
186179
[%test_eq: Transaction_hash.Set.t] set1 set2
187180

188-
let replace_valid_zkapp_command_authorizations ~keymap ~ledger valid_cmds :
181+
let replace_valid_zkapp_command_authorizations t ~keymap ~ledger valid_cmds :
189182
User_command.Valid.t list Deferred.t =
190183
let open Deferred.Let_syntax in
191184
let%map zkapp_commands_fixed =
@@ -194,7 +187,8 @@ let replace_valid_zkapp_command_authorizations ~keymap ~ledger valid_cmds :
194187
~f:(function
195188
| Zkapp_command zkapp_command_dummy_auths ->
196189
let%map cmd =
197-
Zkapp_command_builder.replace_authorizations ~keymap ~prover
190+
Zkapp_command_builder.replace_authorizations ~keymap
191+
~prover:t.prover
198192
(Zkapp_command.Valid.forget zkapp_command_dummy_auths)
199193
in
200194
User_command.Zkapp_command cmd
@@ -220,10 +214,10 @@ let replace_valid_zkapp_command_authorizations ~keymap ~ledger valid_cmds :
220214
Error.raise @@ Error.tag ~tag:"Could not create Zkapp_command.Valid.t" err
221215

222216
(** Assert the invariants of the locally generated command tracking system. *)
223-
let assert_locally_generated (pool : Test.Resource_pool.t) =
217+
let assert_locally_generated t =
224218
ignore
225-
( Hashtbl.merge pool.locally_generated_committed
226-
pool.locally_generated_uncommitted ~f:(fun ~key -> function
219+
( Hashtbl.merge t.txn_pool.locally_generated_committed
220+
t.txn_pool.locally_generated_uncommitted ~f:(fun ~key -> function
227221
| `Both ((committed, _), (uncommitted, _)) ->
228222
failwithf
229223
!"Command \
@@ -239,15 +233,15 @@ let assert_locally_generated (pool : Test.Resource_pool.t) =
239233
(* Locally generated uncommitted transactions should be in the
240234
pool, so long as we're not in the middle of updating it. *)
241235
assert (
242-
Indexed_pool.member pool.pool
236+
Indexed_pool.member t.txn_pool.pool
243237
(Transaction_hash.User_command.of_checked key) ) ;
244238
Some cmd )
245239
: ( Transaction_hash.User_command_with_valid_signature.t
246240
, Time.t * [ `Batch of int ] )
247241
Hashtbl.t )
248242

249-
let assert_fee_wu_ordering (pool : Test.Resource_pool.t) =
250-
let txns = Test.Resource_pool.transactions pool |> Sequence.to_list in
243+
let assert_fee_wu_ordering t =
244+
let txns = Test.Resource_pool.transactions t.txn_pool |> Sequence.to_list in
251245
let compare txn1 txn2 =
252246
let open Transaction_hash.User_command_with_valid_signature in
253247
let cmd1 = command txn1 in
@@ -268,23 +262,25 @@ let assert_fee_wu_ordering (pool : Test.Resource_pool.t) =
268262
in
269263
assert (List.is_sorted txns ~compare)
270264

271-
let assert_pool_txs test txs =
272-
Indexed_pool.For_tests.assert_pool_consistency test.txn_pool.pool ;
273-
assert_locally_generated test.txn_pool ;
274-
assert_fee_wu_ordering test.txn_pool ;
265+
let assert_pool_txs t txs =
266+
Indexed_pool.For_tests.assert_pool_consistency t.txn_pool.pool ;
267+
assert_locally_generated t ;
268+
assert_fee_wu_ordering t ;
275269
assert_user_command_sets_equal
276270
( Sequence.to_list
277271
@@ Sequence.map ~f:Transaction_hash.User_command.of_checked
278-
@@ Test.Resource_pool.transactions test.txn_pool )
272+
@@ Test.Resource_pool.transactions t.txn_pool )
279273
(List.map
280274
~f:
281275
(Fn.compose Transaction_hash.User_command.create
282276
User_command.forget_check )
283277
txs )
284278

285-
let setup_test ~verifier ?permissions ?slot_tx_end () =
279+
let create ~verifier ~prover ~genesis_constants ~compile_config ~time_controller
280+
~consensus_constants ~constraint_constants ~vk ?permissions ?slot_tx_end ()
281+
=
286282
let frontier, best_tip_diff_w =
287-
Mock_transition_frontier.create ?permissions ()
283+
Mock_transition_frontier.create ~vk ?permissions ()
288284
in
289285
let _, best_tip_ref = frontier in
290286
let frontier_pipe_r, frontier_pipe_w =
@@ -303,7 +299,18 @@ let setup_test ~verifier ?permissions ?slot_tx_end () =
303299
in
304300
let txn_pool = Test.resource_pool pool_ in
305301
let%map () = Async.Scheduler.yield_until_no_jobs_remain () in
306-
{ txn_pool; best_tip_diff_w; best_tip_ref; frontier_pipe_w }
302+
{ txn_pool
303+
; best_tip_diff_w
304+
; best_tip_ref
305+
; frontier_pipe_w
306+
; verifier
307+
; prover
308+
; genesis_constants
309+
; consensus_constants
310+
; constraint_constants
311+
; compile_config
312+
; zkapp_vk = vk
313+
}
307314

308315
let independent_cmds : User_command.Valid.t list =
309316
let rec go n cmds =
@@ -322,8 +329,8 @@ let independent_cmds : User_command.Valid.t list =
322329
in
323330
Quickcheck.random_value ~seed:(`Deterministic "constant") (go 0 [])
324331

325-
let mk_zkapp_user_cmd (pool : Test.Resource_pool.t) zkapp_command =
326-
let best_tip_ledger = Option.value_exn pool.best_tip_ledger in
332+
let mk_zkapp_user_cmd t zkapp_command =
333+
let best_tip_ledger = Option.value_exn t.txn_pool.best_tip_ledger in
327334
let keymap =
328335
Array.fold (Array.append test_keys extra_keys)
329336
~init:Public_key.Compressed.Map.empty
@@ -343,7 +350,7 @@ let mk_zkapp_user_cmd (pool : Test.Resource_pool.t) zkapp_command =
343350
in
344351
let zkapp_command = User_command.Zkapp_command zkapp_command in
345352
let%bind zkapp_command =
346-
replace_valid_zkapp_command_authorizations ~keymap ~ledger:best_tip_ledger
353+
replace_valid_zkapp_command_authorizations t ~keymap ~ledger:best_tip_ledger
347354
[ zkapp_command ]
348355
in
349356
let zkapp_command = List.hd_exn zkapp_command in
@@ -400,7 +407,7 @@ let mk_payment' ?valid_until ~sender_idx ~receiver_idx ~fee ~nonce ~amount () =
400407
; amount = Currency.Amount.of_nanomina_int_exn amount
401408
} ) )
402409

403-
let mk_single_account_update ~chain ~fee_payer_idx ~zkapp_account_idx ~fee
410+
let mk_single_account_update t ~chain ~fee_payer_idx ~zkapp_account_idx ~fee
404411
~nonce ~ledger =
405412
let fee = Currency.Fee.of_nanomina_int_exn fee in
406413
let fee_payer_kp = test_keys.(fee_payer_idx) in
@@ -419,7 +426,7 @@ let mk_single_account_update ~chain ~fee_payer_idx ~zkapp_account_idx ~fee
419426
in
420427
let%map zkapp_command =
421428
Transaction_snark.For_tests.single_account_update ~chain spec
422-
~constraint_constants
429+
~constraint_constants:t.constraint_constants
423430
in
424431
Or_error.ok_exn
425432
(Zkapp_command.Verifiable.create ~failed:false
@@ -429,8 +436,8 @@ let mk_single_account_update ~chain ~fee_payer_idx ~zkapp_account_idx ~fee
429436
~location_of_account:(Mina_ledger.Ledger.location_of_account ledger) )
430437
zkapp_command )
431438

432-
let mk_transfer_zkapp_command ?valid_period ?fee_payer_idx ~sender_idx
433-
~receiver_idx ~fee ~nonce ~amount () =
439+
let mk_transfer_zkapp_command ~constraint_constants ?valid_period ?fee_payer_idx
440+
~sender_idx ~receiver_idx ~fee ~nonce ~amount () =
434441
let sender_kp = test_keys.(sender_idx) in
435442
let sender_nonce = Account.Nonce.of_int nonce in
436443
let sender = (sender_kp, sender_nonce) in
@@ -501,10 +508,10 @@ let mk_payment ?valid_until ~sender_idx ~receiver_idx ~fee ~nonce ~amount () =
501508
User_command.Signed_command
502509
(mk_payment' ?valid_until ~sender_idx ~fee ~nonce ~receiver_idx ~amount ())
503510

504-
let mk_zkapp_commands_single_block num_cmds (pool : Test.Resource_pool.t) :
511+
let mk_zkapp_commands_single_block num_cmds t :
505512
User_command.Valid.t list Deferred.t =
506513
assert (num_cmds < Array.length test_keys - 1) ;
507-
let best_tip_ledger = Option.value_exn pool.best_tip_ledger in
514+
let best_tip_ledger = Option.value_exn t.txn_pool.best_tip_ledger in
508515
let keymap =
509516
Array.fold (Array.append test_keys extra_keys)
510517
~init:Public_key.Compressed.Map.empty
@@ -538,9 +545,9 @@ let mk_zkapp_commands_single_block num_cmds (pool : Test.Resource_pool.t) :
538545
let fee_payer_keypair = test_keys.(n) in
539546
let%map (zkapp_command : Zkapp_command.t) =
540547
Mina_generators.Zkapp_command_generators.gen_zkapp_command_from
541-
~constraint_constants ~max_token_updates:1 ~keymap
542-
~account_state_tbl ~fee_payer_keypair ~ledger:best_tip_ledger
543-
~genesis_constants ()
548+
~constraint_constants:t.constraint_constants ~max_token_updates:1
549+
~keymap ~account_state_tbl ~fee_payer_keypair
550+
~ledger:best_tip_ledger ~genesis_constants:t.genesis_constants ()
544551
in
545552
let zkapp_command =
546553
{ zkapp_command with
@@ -566,7 +573,7 @@ let mk_zkapp_commands_single_block num_cmds (pool : Test.Resource_pool.t) :
566573
}
567574
in
568575
let zkapp_command_valid_vk_hashes =
569-
Zkapp_command.For_tests.replace_vks zkapp_command vk
576+
Zkapp_command.For_tests.replace_vks zkapp_command t.zkapp_vk
570577
in
571578
let valid_zkapp_command =
572579
Or_error.ok_exn
@@ -585,7 +592,7 @@ let mk_zkapp_commands_single_block num_cmds (pool : Test.Resource_pool.t) :
585592
let valid_zkapp_commands =
586593
Quickcheck.random_value ~seed:(`Deterministic "zkapp_command") (go 0 [])
587594
in
588-
replace_valid_zkapp_command_authorizations ~keymap ~ledger:best_tip_ledger
595+
replace_valid_zkapp_command_authorizations t ~keymap ~ledger:best_tip_ledger
589596
valid_zkapp_commands
590597

591598
type pool_apply = (User_command.t list, [ `Other of Error.t ]) Result.t
@@ -665,8 +672,9 @@ let _user_command_to_base64 c =
665672
| User_command.Zkapp_command p ->
666673
Zkapp_command.to_base64 p
667674

668-
let commit_commands test cs =
669-
let ledger = Option.value_exn test.txn_pool.best_tip_ledger in
675+
let commit_commands t cs =
676+
let state_view = dummy_state_view t in
677+
let ledger = Option.value_exn t.txn_pool.best_tip_ledger in
670678
List.iter cs ~f:(fun c ->
671679
match User_command.forget_check c with
672680
| User_command.Signed_command c -> (
@@ -675,7 +683,8 @@ let commit_commands test cs =
675683
in
676684
let applied =
677685
Or_error.ok_exn
678-
@@ Mina_ledger.Ledger.apply_user_command ~constraint_constants
686+
@@ Mina_ledger.Ledger.apply_user_command
687+
~constraint_constants:t.constraint_constants
679688
~txn_global_slot:Mina_numbers.Global_slot_since_genesis.zero
680689
ledger valid
681690
in
@@ -688,8 +697,9 @@ let commit_commands test cs =
688697
let applied, _ =
689698
Or_error.ok_exn
690699
@@ Mina_ledger.Ledger.apply_zkapp_command_unchecked
691-
~global_slot:dummy_state_view.global_slot_since_genesis
692-
~constraint_constants ~state_view:dummy_state_view ledger p
700+
~global_slot:state_view.global_slot_since_genesis
701+
~constraint_constants:t.constraint_constants ~state_view ledger
702+
p
693703
in
694704
match With_status.status applied.command with
695705
| Failed failures ->
@@ -703,30 +713,24 @@ let commit_commands test cs =
703713
| Applied ->
704714
() ) )
705715

706-
let commit_commands' test cs =
716+
let commit_commands' t cs =
707717
let open Mina_ledger in
708-
let ledger = Option.value_exn test.txn_pool.best_tip_ledger in
709-
test.best_tip_ref :=
718+
let ledger = Option.value_exn t.txn_pool.best_tip_ledger in
719+
t.best_tip_ref :=
710720
Ledger.Maskable.register_mask
711721
(Ledger.Any_ledger.cast (module Mina_ledger.Ledger) ledger)
712722
(Ledger.Mask.create ~depth:(Ledger.depth ledger) ()) ;
713-
let%map () = reorg test [] [] in
714-
assert (
715-
not (phys_equal (Option.value_exn test.txn_pool.best_tip_ledger) ledger) ) ;
716-
assert (
717-
phys_equal
718-
(Option.value_exn test.txn_pool.best_tip_ledger)
719-
!(test.best_tip_ref) ) ;
720-
commit_commands test cs ;
723+
let%map () = reorg t [] [] in
724+
assert (not (phys_equal (Option.value_exn t.txn_pool.best_tip_ledger) ledger)) ;
721725
assert (
722-
not (phys_equal (Option.value_exn test.txn_pool.best_tip_ledger) ledger) ) ;
726+
phys_equal (Option.value_exn t.txn_pool.best_tip_ledger) !(t.best_tip_ref) ) ;
727+
commit_commands t cs ;
728+
assert (not (phys_equal (Option.value_exn t.txn_pool.best_tip_ledger) ledger)) ;
723729
assert (
724-
phys_equal
725-
(Option.value_exn test.txn_pool.best_tip_ledger)
726-
!(test.best_tip_ref) ) ;
730+
phys_equal (Option.value_exn t.txn_pool.best_tip_ledger) !(t.best_tip_ref) ) ;
727731
ledger
728732

729-
let advance_chain test cs = commit_commands test cs ; reorg test cs []
733+
let advance_chain t cs = commit_commands t cs ; reorg t cs []
730734

731735
(* TODO: remove this (all of these test should be expressed by committing txns to the ledger, not mutating accounts *)
732736
let modify_ledger ledger ~idx ~balance ~nonce =

0 commit comments

Comments
 (0)