Skip to content

Commit 849256f

Browse files
Tang Jiaweiglyh
authored andcommitted
add more coverage for hard fork test
1 parent 6929a7e commit 849256f

File tree

1 file changed

+149
-6
lines changed

1 file changed

+149
-6
lines changed

src/app/test_executive/hard_fork.ml

Lines changed: 149 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,7 @@ module Make (Inputs : Intf.Test.Inputs_intf) = struct
214214

215215
let run ~config:({ Test_config.signature_kind; _ } as config) network t =
216216
let open Malleable_error.Let_syntax in
217+
let constraint_constants = Network.constraint_constants network in
217218
let logger = Logger.create () in
218219
let all_mina_nodes = Network.all_mina_nodes network in
219220
let%bind () =
@@ -278,12 +279,9 @@ module Make (Inputs : Intf.Test.Inputs_intf) = struct
278279
Signed_command.sign_payload ~signature_kind sender.private_key payload
279280
|> Signature.Raw.encode
280281
in
282+
let zkapp_account_keypair = Signature_lib.Keypair.create () in
281283
let%bind.Async.Deferred zkapp_command_create_accounts =
282284
(* construct a Zkapp_command.t *)
283-
let zkapp_keypairs =
284-
List.init 3 ~f:(fun _ -> Signature_lib.Keypair.create ())
285-
in
286-
let constraint_constants = Network.constraint_constants network in
287285
let amount = Currency.Amount.of_mina_int_exn 10 in
288286
let nonce = Account.Nonce.zero in
289287
let memo =
@@ -296,7 +294,7 @@ module Make (Inputs : Intf.Test.Inputs_intf) = struct
296294
; fee
297295
; fee_payer = None
298296
; amount
299-
; zkapp_account_keypairs = zkapp_keypairs
297+
; zkapp_account_keypairs = [ zkapp_account_keypair ]
300298
; memo
301299
; new_zkapp_account = true
302300
; snapp_update = Account_update.Update.dummy
@@ -307,7 +305,6 @@ module Make (Inputs : Intf.Test.Inputs_intf) = struct
307305
Transaction_snark.For_tests.deploy_snapp ~constraint_constants
308306
zkapp_command_spec
309307
in
310-
311308
let%bind zkapp_command_update_vk_proof, zkapp_command_update_vk_impossible =
312309
let snapp_update =
313310
{ Account_update.Update.dummy with
@@ -357,6 +354,25 @@ module Make (Inputs : Intf.Test.Inputs_intf) = struct
357354
in
358355
(vk_proof, vk_impossible)
359356
in
357+
let (zkapp_command_spec
358+
: Transaction_snark.For_tests.Multiple_transfers_spec.t ) =
359+
let amount = Currency.Amount.of_mina_int_exn 1 in
360+
let memo = Signed_command_memo.empty in
361+
{ sender = (zkapp_account_keypair, Account.Nonce.zero)
362+
; fee = Currency.Fee.of_nanomina_int_exn 1_000_000
363+
; fee_payer = None
364+
; receivers = [ (receiver_pub_key, amount) ]
365+
; amount
366+
; zkapp_account_keypairs = []
367+
; memo
368+
; new_zkapp_account = false
369+
; snapp_update = Account_update.Update.dummy
370+
; call_data = Snark_params.Tick.Field.zero
371+
; events = []
372+
; actions = []
373+
; preconditions = None
374+
}
375+
in
360376
let wait_for_zkapp zkapp_command =
361377
let with_timeout =
362378
let soft_slots = 4 in
@@ -452,6 +468,133 @@ module Make (Inputs : Intf.Test.Inputs_intf) = struct
452468
frontier"
453469
(wait_for_zkapp zkapp_command_create_accounts)
454470
in
471+
let%bind () =
472+
let zkapp_txn_expired_before_fork =
473+
Transaction_snark.For_tests.multiple_transfers ~constraint_constants
474+
{ zkapp_command_spec with
475+
preconditions =
476+
Some
477+
{ network = Zkapp_precondition.Protocol_state.accept
478+
; account = Zkapp_precondition.Account.accept
479+
; valid_while =
480+
Check
481+
Zkapp_precondition.Closed_interval.
482+
{ lower = Global_slot_since_genesis.zero
483+
; upper = Global_slot_since_genesis.of_int 400000
484+
}
485+
}
486+
}
487+
in
488+
section_hard "send a zkapp command that's expired before the fork"
489+
@@ send_invalid_zkapp ~logger
490+
(Network.Node.get_ingress_uri node_b)
491+
zkapp_txn_expired_before_fork "Expired"
492+
in
493+
let%bind () =
494+
let%bind global_slot_since_hard_fork =
495+
Integration_test_lib.Graphql_requests
496+
.must_get_global_slot_since_hard_fork ~logger
497+
(Network.Node.get_ingress_uri node_b)
498+
in
499+
let zkapp_txn_expired_before_fork =
500+
Transaction_snark.For_tests.multiple_transfers ~constraint_constants
501+
{ zkapp_command_spec with
502+
preconditions =
503+
Some
504+
{ network = Zkapp_precondition.Protocol_state.accept
505+
; account = Zkapp_precondition.Account.accept
506+
; valid_while =
507+
Check
508+
Zkapp_precondition.Closed_interval.
509+
{ lower = Global_slot_since_genesis.zero
510+
; upper =
511+
Global_slot_since_genesis.of_int
512+
( Global_slot_since_hard_fork.to_int
513+
global_slot_since_hard_fork
514+
+ 500000 - 5 )
515+
}
516+
}
517+
}
518+
in
519+
520+
section_hard "send a zkapp command that's expired after the fork"
521+
@@ send_invalid_zkapp ~logger
522+
(Network.Node.get_ingress_uri node_b)
523+
zkapp_txn_expired_before_fork "Expired"
524+
in
525+
let%bind () =
526+
let nonce = Mina_numbers.Account_nonce.succ sender_current_nonce in
527+
let valid_until = Mina_numbers.Global_slot_since_genesis.of_int 400000 in
528+
let memo_string = "" in
529+
let memo = Signed_command_memo.create_from_string_exn memo_string in
530+
let payload =
531+
let payment_payload =
532+
{ Payment_payload.Poly.receiver_pk = receiver_pub_key; amount }
533+
in
534+
let body = Signed_command_payload.Body.Payment payment_payload in
535+
let common =
536+
{ Signed_command_payload.Common.Poly.fee
537+
; fee_payer_pk = sender_pub_key
538+
; nonce
539+
; valid_until
540+
; memo
541+
}
542+
in
543+
{ Signed_command_payload.Poly.common; body }
544+
in
545+
let raw_signature =
546+
Signed_command.sign_payload ~signature_kind sender.private_key payload
547+
|> Signature.Raw.encode
548+
in
549+
section_hard "send a payment that's expired before the fork"
550+
@@ send_invalid_payment ~logger ~sender_pub_key ~receiver_pub_key ~amount
551+
~fee ~nonce ~memo:memo_string ~valid_until ~raw_signature
552+
~expected_failure:
553+
Network_pool.Transaction_pool.Diff_versioned.Diff_error.(
554+
to_string_name Expired)
555+
(Network.Node.get_ingress_uri node_b)
556+
in
557+
let%bind () =
558+
let%bind global_slot_since_hard_fork =
559+
Integration_test_lib.Graphql_requests
560+
.must_get_global_slot_since_hard_fork ~logger
561+
(Network.Node.get_ingress_uri node_b)
562+
in
563+
let nonce = Mina_numbers.Account_nonce.succ sender_current_nonce in
564+
let valid_until =
565+
Mina_numbers.Global_slot_since_genesis.of_int
566+
( Global_slot_since_hard_fork.to_int global_slot_since_hard_fork
567+
+ 500000 - 5 )
568+
in
569+
let memo_string = "" in
570+
let memo = Signed_command_memo.create_from_string_exn memo_string in
571+
let payload =
572+
let payment_payload =
573+
{ Payment_payload.Poly.receiver_pk = receiver_pub_key; amount }
574+
in
575+
let body = Signed_command_payload.Body.Payment payment_payload in
576+
let common =
577+
{ Signed_command_payload.Common.Poly.fee
578+
; fee_payer_pk = sender_pub_key
579+
; nonce
580+
; valid_until
581+
; memo
582+
}
583+
in
584+
{ Signed_command_payload.Poly.common; body }
585+
in
586+
let raw_signature =
587+
Signed_command.sign_payload ~signature_kind sender.private_key payload
588+
|> Signature.Raw.encode
589+
in
590+
section_hard "send a payment that's expired after the fork"
591+
@@ send_invalid_payment ~logger ~sender_pub_key ~receiver_pub_key ~amount
592+
~fee ~nonce ~memo:memo_string ~valid_until ~raw_signature
593+
~expected_failure:
594+
Network_pool.Transaction_pool.Diff_versioned.Diff_error.(
595+
to_string_name Expired)
596+
(Network.Node.get_ingress_uri node_b)
597+
in
455598
let%bind () =
456599
section_hard "send out txns to fill up the snark ledger"
457600
(let receiver = node_a in

0 commit comments

Comments
 (0)