Skip to content

Commit 34d3558

Browse files
authored
Merge pull request #16748 from MinaProtocol/georgeee/snark-work-vk-tracking-compatible
[compatible] fix work vk tracking issue
2 parents 37dbec1 + fb02c96 commit 34d3558

File tree

4 files changed

+78
-3
lines changed

4 files changed

+78
-3
lines changed

src/lib/pickles/pickles_intf.mli

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,8 @@ module type S = sig
316316

317317
val dummy : t
318318

319+
val dummy_with_wrap_vk : t Lazy.t
320+
319321
open Impls.Step
320322

321323
val to_input : t -> Field.Constant.t Random_oracle_input.Chunked.t

src/lib/pickles/side_loaded_verification_key.ml

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,67 @@ Stable.Latest.
284284
, equal
285285
, compare )]
286286

287+
let dummy_wrap_vk :
288+
( Pasta_bindings.Fq.t
289+
, Kimchi_bindings.Protocol.SRS.Fq.t
290+
, Pasta_bindings.Fp.t Kimchi_types.or_infinity Kimchi_types.poly_comm )
291+
Kimchi_types.VerifierIndex.verifier_index
292+
option
293+
Lazy.t =
294+
lazy
295+
(let d =
296+
(Common.wrap_domains
297+
~proofs_verified:(Pickles_base.Proofs_verified.to_int N2) )
298+
.h
299+
in
300+
let log2_size = Import.Domain.log2_size d in
301+
let public =
302+
let (T (input, _conv, _conv_inv)) =
303+
Impls.Wrap.input ~feature_flags:Plonk_types.Features.Full.maybe ()
304+
in
305+
let (Typ typ) = input in
306+
typ.size_in_field_elements
307+
in
308+
(* we only compute the wrap_vk if the srs can be loaded *)
309+
let srs = try Some (Backend.Tock.Keypair.load_urs ()) with _ -> None in
310+
Option.map srs ~f:(fun srs : Impls.Wrap.Verification_key.t ->
311+
{ domain =
312+
{ log_size_of_group = log2_size
313+
; group_gen = Backend.Tock.Field.domain_generator ~log2_size
314+
}
315+
; max_poly_size = 1 lsl Nat.to_int Backend.Tock.Rounds.n
316+
; public
317+
; prev_challenges = 2 (* Due to Wrap_hack *)
318+
; srs
319+
; evals =
320+
(let x, y = Backend.Tock.Curve.(to_affine_exn one) in
321+
let g =
322+
{ Kimchi_types.unshifted = [| Kimchi_types.Finite (x, y) |]
323+
; shifted = None
324+
}
325+
in
326+
{ sigma_comm =
327+
Array.init (Nat.to_int Plonk_types.Permuts.n) ~f:(Fn.const g)
328+
; coefficients_comm =
329+
Array.init (Nat.to_int Plonk_types.Columns.n) ~f:(Fn.const g)
330+
; generic_comm = g
331+
; mul_comm = g
332+
; psm_comm = g
333+
; emul_comm = g
334+
; complete_add_comm = g
335+
; endomul_scalar_comm = g
336+
; xor_comm = None
337+
; range_check0_comm = None
338+
; range_check1_comm = None
339+
; foreign_field_add_comm = None
340+
; foreign_field_mul_comm = None
341+
; rot_comm = None
342+
} )
343+
; shifts = Common.tock_shifts ~log2_size
344+
; lookup_index = None
345+
; zk_rows = 3
346+
} ) )
347+
287348
let dummy : t =
288349
{ max_proofs_verified = N2
289350
; actual_wrap_domain_size = N2
@@ -301,6 +362,8 @@ let dummy : t =
301362
; wrap_vk = None
302363
}
303364

365+
let dummy_with_wrap_vk = lazy { dummy with wrap_vk = Lazy.force dummy_wrap_vk }
366+
304367
module Checked = struct
305368
open Step_main_inputs
306369

src/lib/pickles/side_loaded_verification_key.mli

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@ type t = Stable.Latest.t [@@deriving hash, sexp, compare, equal]
8686

8787
val dummy : t
8888

89+
val dummy_with_wrap_vk : t Lazy.t
90+
8991
include Codable.Base58_check_intf with type t := t
9092

9193
include Codable.Base64_intf with type t := t

src/lib/transaction_snark/transaction_snark.ml

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1436,11 +1436,16 @@ module Make_str (A : Wire_types.Concrete) = struct
14361436
| Proof ->
14371437
let vk =
14381438
exists Side_loaded_verification_key.typ ~compute:(fun () ->
1439-
Option.value_exn
1439+
match
14401440
(As_prover.read (Typ.prover_value ())
14411441
(Data_as_hash.prover_value
14421442
a.zkapp.verification_key.data ) )
1443-
.data )
1443+
.data
1444+
with
1445+
| Some vk ->
1446+
vk
1447+
| None ->
1448+
Side_loaded_verification_key.dummy )
14441449
in
14451450
let expected_hash =
14461451
Data_as_hash.hash a.zkapp.verification_key.data
@@ -4016,7 +4021,10 @@ module Make_str (A : Wire_types.Concrete) = struct
40164021
s.verification_key )
40174022
with
40184023
| None ->
4019-
failwith "No verification key found in the account"
4024+
{ With_hash.data =
4025+
Lazy.force Side_loaded_verification_key.dummy_with_wrap_vk
4026+
; hash = Verification_key_wire.dummy_vk_hash ()
4027+
}
40204028
| Some s ->
40214029
s
40224030
in

0 commit comments

Comments
 (0)