@@ -27,49 +27,6 @@ let block_window_duration =
2727let 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-
7330module 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 =
13290module 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
143116let 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+
145138let 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
308315let 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
591598type 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 *)
732736let modify_ledger ledger ~idx ~balance ~nonce =
0 commit comments