Skip to content

Commit d186967

Browse files
authored
Merge pull request #17772 from MinaProtocol/lyh/hf-intg-test-more-coverage
Add more coverage for lucy hard fork integration test
2 parents 15f24cb + 3fc7d04 commit d186967

File tree

1 file changed

+196
-6
lines changed

1 file changed

+196
-6
lines changed

src/app/test_executive/hard_fork.ml

Lines changed: 196 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,55 @@ module Make (Inputs : Intf.Test.Inputs_intf) = struct
357354
in
358355
(vk_proof, vk_impossible)
359356
in
357+
let%bind zkapp_command_upgrade_version =
358+
let constraint_constants = Network.constraint_constants network in
359+
let snapp_update =
360+
{ Account_update.Update.dummy with
361+
permissions = Zkapp_basic.Set_or_keep.Set Permissions.user_default
362+
}
363+
in
364+
let fee = Currency.Fee.of_nanomina_int_exn 1_000_000 in
365+
let amount = Currency.Amount.of_mina_int_exn 10 in
366+
let memo = Signed_command_memo.create_from_string_exn "update vk proof" in
367+
let (spec : Transaction_snark.For_tests.Update_states_spec.t) =
368+
{ sender = (vk_proof.keypair, Account.Nonce.zero)
369+
; fee
370+
; fee_payer = None
371+
; receivers = []
372+
; amount
373+
; zkapp_account_keypairs = [ vk_proof.keypair ]
374+
; memo
375+
; new_zkapp_account = false
376+
; snapp_update
377+
; current_auth = Signature
378+
; call_data = Snark_params.Tick.Field.zero
379+
; events = []
380+
; actions = []
381+
; preconditions = None
382+
}
383+
in
384+
Malleable_error.lift
385+
@@ Transaction_snark.For_tests.update_states ~constraint_constants spec
386+
in
387+
let (zkapp_command_spec
388+
: Transaction_snark.For_tests.Multiple_transfers_spec.t ) =
389+
let amount = Currency.Amount.of_mina_int_exn 1 in
390+
let memo = Signed_command_memo.empty in
391+
{ sender = (zkapp_account_keypair, Account.Nonce.zero)
392+
; fee = Currency.Fee.of_nanomina_int_exn 1_000_000
393+
; fee_payer = None
394+
; receivers = [ (receiver_pub_key, amount) ]
395+
; amount
396+
; zkapp_account_keypairs = []
397+
; memo
398+
; new_zkapp_account = false
399+
; snapp_update = Account_update.Update.dummy
400+
; call_data = Snark_params.Tick.Field.zero
401+
; events = []
402+
; actions = []
403+
; preconditions = None
404+
}
405+
in
360406
let wait_for_zkapp zkapp_command =
361407
let with_timeout =
362408
let soft_slots = 4 in
@@ -452,6 +498,137 @@ module Make (Inputs : Intf.Test.Inputs_intf) = struct
452498
frontier"
453499
(wait_for_zkapp zkapp_command_create_accounts)
454500
in
501+
let%bind () =
502+
let zkapp_txn_expired_before_fork =
503+
Transaction_snark.For_tests.multiple_transfers ~constraint_constants
504+
{ zkapp_command_spec with
505+
preconditions =
506+
Some
507+
{ network =
508+
{ Zkapp_precondition.Protocol_state.accept with
509+
global_slot_since_genesis =
510+
Check
511+
{ upper = Global_slot_since_genesis.of_int 400000
512+
; lower = Global_slot_since_genesis.zero
513+
}
514+
}
515+
; account = Zkapp_precondition.Account.accept
516+
; valid_while = Ignore
517+
}
518+
}
519+
in
520+
section_hard "send a zkapp command that's expired before 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%bind global_slot_since_hard_fork =
527+
Integration_test_lib.Graphql_requests
528+
.must_get_global_slot_since_hard_fork ~logger
529+
(Network.Node.get_ingress_uri node_b)
530+
in
531+
let zkapp_txn_expired_before_fork =
532+
Transaction_snark.For_tests.multiple_transfers ~constraint_constants
533+
{ zkapp_command_spec with
534+
preconditions =
535+
Some
536+
{ network =
537+
{ Zkapp_precondition.Protocol_state.accept with
538+
global_slot_since_genesis =
539+
Check
540+
{ upper =
541+
Global_slot_since_genesis.of_int
542+
( Global_slot_since_hard_fork.to_int
543+
global_slot_since_hard_fork
544+
+ 500000 - 5 )
545+
; lower = Global_slot_since_genesis.zero
546+
}
547+
}
548+
; account = Zkapp_precondition.Account.accept
549+
; valid_while = Ignore
550+
}
551+
}
552+
in
553+
554+
section_hard "send a zkapp command that's expired after the fork"
555+
@@ send_invalid_zkapp ~logger
556+
(Network.Node.get_ingress_uri node_b)
557+
zkapp_txn_expired_before_fork "Expired"
558+
in
559+
let%bind () =
560+
let nonce = Mina_numbers.Account_nonce.succ sender_current_nonce in
561+
let valid_until = Mina_numbers.Global_slot_since_genesis.of_int 400000 in
562+
let memo_string = "" in
563+
let memo = Signed_command_memo.create_from_string_exn memo_string in
564+
let payload =
565+
let payment_payload =
566+
{ Payment_payload.Poly.receiver_pk = receiver_pub_key; amount }
567+
in
568+
let body = Signed_command_payload.Body.Payment payment_payload in
569+
let common =
570+
{ Signed_command_payload.Common.Poly.fee
571+
; fee_payer_pk = sender_pub_key
572+
; nonce
573+
; valid_until
574+
; memo
575+
}
576+
in
577+
{ Signed_command_payload.Poly.common; body }
578+
in
579+
let raw_signature =
580+
Signed_command.sign_payload ~signature_kind sender.private_key payload
581+
|> Signature.Raw.encode
582+
in
583+
section_hard "send a payment that's expired before the fork"
584+
@@ send_invalid_payment ~logger ~sender_pub_key ~receiver_pub_key ~amount
585+
~fee ~nonce ~memo:memo_string ~valid_until ~raw_signature
586+
~expected_failure:
587+
Network_pool.Transaction_pool.Diff_versioned.Diff_error.(
588+
to_string_name Expired)
589+
(Network.Node.get_ingress_uri node_b)
590+
in
591+
let%bind () =
592+
let%bind global_slot_since_hard_fork =
593+
Integration_test_lib.Graphql_requests
594+
.must_get_global_slot_since_hard_fork ~logger
595+
(Network.Node.get_ingress_uri node_b)
596+
in
597+
let nonce = Mina_numbers.Account_nonce.succ sender_current_nonce in
598+
let valid_until =
599+
Mina_numbers.Global_slot_since_genesis.of_int
600+
( Global_slot_since_hard_fork.to_int global_slot_since_hard_fork
601+
+ 500000 - 5 )
602+
in
603+
let memo_string = "" in
604+
let memo = Signed_command_memo.create_from_string_exn memo_string in
605+
let payload =
606+
let payment_payload =
607+
{ Payment_payload.Poly.receiver_pk = receiver_pub_key; amount }
608+
in
609+
let body = Signed_command_payload.Body.Payment payment_payload in
610+
let common =
611+
{ Signed_command_payload.Common.Poly.fee
612+
; fee_payer_pk = sender_pub_key
613+
; nonce
614+
; valid_until
615+
; memo
616+
}
617+
in
618+
{ Signed_command_payload.Poly.common; body }
619+
in
620+
let raw_signature =
621+
Signed_command.sign_payload ~signature_kind sender.private_key payload
622+
|> Signature.Raw.encode
623+
in
624+
section_hard "send a payment that's expired after the fork"
625+
@@ send_invalid_payment ~logger ~sender_pub_key ~receiver_pub_key ~amount
626+
~fee ~nonce ~memo:memo_string ~valid_until ~raw_signature
627+
~expected_failure:
628+
Network_pool.Transaction_pool.Diff_versioned.Diff_error.(
629+
to_string_name Expired)
630+
(Network.Node.get_ingress_uri node_b)
631+
in
455632
let%bind () =
456633
section_hard "send out txns to fill up the snark ledger"
457634
(let receiver = node_a in
@@ -587,6 +764,19 @@ module Make (Inputs : Intf.Test.Inputs_intf) = struct
587764
transition frontier"
588765
@@ wait_for_zkapp zkapp_command_update_vk_impossible
589766
in
767+
let%bind () =
768+
section_hard
769+
"send a zkapp to upgrade permission's version to current version"
770+
@@ send_zkapp ~logger
771+
(Network.Node.get_ingress_uri node_a)
772+
zkapp_command_upgrade_version
773+
in
774+
let%bind () =
775+
section_hard
776+
"Wait for zkapp to upgrade perimission's version to be included in \
777+
transition frontier"
778+
@@ wait_for_zkapp zkapp_command_upgrade_version
779+
in
590780
section_hard "running replayer"
591781
(let%bind logs =
592782
Network.Node.run_replayer

0 commit comments

Comments
 (0)