@collectorcrypt/vrf-client 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1024 @@
1
+ {
2
+ "address": "ccvrfu3fSpbnPLiUqdWAt85Zn9nq96ekwGTbHqGtdgQ",
3
+ "metadata": {
4
+ "name": "cc_vrf",
5
+ "version": "0.1.0",
6
+ "spec": "0.1.0",
7
+ "description": "Permissionless on-chain VRF authority + proof commitment registry"
8
+ },
9
+ "instructions": [
10
+ {
11
+ "name": "commit_proof",
12
+ "docs": [
13
+ "Posts a per-VRF-call commitment to a new VrfProofCommit compressed",
14
+ "PDA. Address is `(authority_pda, memo_hash)` — replay-protected by",
15
+ "the PDA itself."
16
+ ],
17
+ "discriminator": [
18
+ 193,
19
+ 148,
20
+ 104,
21
+ 185,
22
+ 119,
23
+ 15,
24
+ 183,
25
+ 75
26
+ ],
27
+ "accounts": [
28
+ {
29
+ "name": "owner",
30
+ "writable": true,
31
+ "signer": true
32
+ }
33
+ ],
34
+ "args": [
35
+ {
36
+ "name": "proof",
37
+ "type": {
38
+ "defined": {
39
+ "name": "ValidityProof"
40
+ }
41
+ }
42
+ },
43
+ {
44
+ "name": "authority_account_meta",
45
+ "type": {
46
+ "defined": {
47
+ "name": "CompressedAccountMetaReadOnly"
48
+ }
49
+ }
50
+ },
51
+ {
52
+ "name": "current_authority",
53
+ "type": {
54
+ "defined": {
55
+ "name": "VrfAuthority"
56
+ }
57
+ }
58
+ },
59
+ {
60
+ "name": "address_tree_info",
61
+ "type": {
62
+ "defined": {
63
+ "name": "PackedAddressTreeInfo"
64
+ }
65
+ }
66
+ },
67
+ {
68
+ "name": "output_state_tree_index",
69
+ "type": "u8"
70
+ },
71
+ {
72
+ "name": "memo_hash",
73
+ "type": {
74
+ "array": [
75
+ "u8",
76
+ 32
77
+ ]
78
+ }
79
+ },
80
+ {
81
+ "name": "proof_hash",
82
+ "type": {
83
+ "array": [
84
+ "u8",
85
+ 32
86
+ ]
87
+ }
88
+ },
89
+ {
90
+ "name": "alpha_hash",
91
+ "type": {
92
+ "array": [
93
+ "u8",
94
+ 32
95
+ ]
96
+ }
97
+ }
98
+ ]
99
+ },
100
+ {
101
+ "name": "commit_proof_event",
102
+ "docs": [
103
+ "Event-mode commit: proves the frozen authority read-only and emits a",
104
+ "`VrfProofCommitted` log instead of creating a compressed PDA. No",
105
+ "on-chain replay protection — verifiers must detect duplicate memos and",
106
+ "pick the proof that satisfies the VRF math."
107
+ ],
108
+ "discriminator": [
109
+ 169,
110
+ 197,
111
+ 162,
112
+ 183,
113
+ 63,
114
+ 145,
115
+ 136,
116
+ 30
117
+ ],
118
+ "accounts": [
119
+ {
120
+ "name": "owner",
121
+ "writable": true,
122
+ "signer": true
123
+ }
124
+ ],
125
+ "args": [
126
+ {
127
+ "name": "proof",
128
+ "type": {
129
+ "defined": {
130
+ "name": "ValidityProof"
131
+ }
132
+ }
133
+ },
134
+ {
135
+ "name": "authority_account_meta",
136
+ "type": {
137
+ "defined": {
138
+ "name": "CompressedAccountMetaReadOnly"
139
+ }
140
+ }
141
+ },
142
+ {
143
+ "name": "current_authority",
144
+ "type": {
145
+ "defined": {
146
+ "name": "VrfAuthority"
147
+ }
148
+ }
149
+ },
150
+ {
151
+ "name": "label",
152
+ "type": {
153
+ "array": [
154
+ "u8",
155
+ 32
156
+ ]
157
+ }
158
+ },
159
+ {
160
+ "name": "memo_hash",
161
+ "type": {
162
+ "array": [
163
+ "u8",
164
+ 32
165
+ ]
166
+ }
167
+ },
168
+ {
169
+ "name": "proof_hash",
170
+ "type": {
171
+ "array": [
172
+ "u8",
173
+ 32
174
+ ]
175
+ }
176
+ },
177
+ {
178
+ "name": "alpha_hash",
179
+ "type": {
180
+ "array": [
181
+ "u8",
182
+ 32
183
+ ]
184
+ }
185
+ }
186
+ ]
187
+ },
188
+ {
189
+ "name": "commit_proof_with_beta",
190
+ "docs": [
191
+ "Like `commit_proof`, but also stores the 64-byte ECVRF beta output",
192
+ "(split as `beta_lo` + `beta_hi`) in the new compressed PDA. Use this",
193
+ "when another Solana program needs to read the random value directly",
194
+ "via a Light SDK CPI, without going through an off-chain fetch of the",
195
+ "proof bytes. Uses the same seed prefix as `commit_proof` so one memo",
196
+ "can only be committed in one registry mode."
197
+ ],
198
+ "discriminator": [
199
+ 199,
200
+ 253,
201
+ 178,
202
+ 3,
203
+ 187,
204
+ 191,
205
+ 68,
206
+ 230
207
+ ],
208
+ "accounts": [
209
+ {
210
+ "name": "owner",
211
+ "writable": true,
212
+ "signer": true
213
+ }
214
+ ],
215
+ "args": [
216
+ {
217
+ "name": "proof",
218
+ "type": {
219
+ "defined": {
220
+ "name": "ValidityProof"
221
+ }
222
+ }
223
+ },
224
+ {
225
+ "name": "authority_account_meta",
226
+ "type": {
227
+ "defined": {
228
+ "name": "CompressedAccountMetaReadOnly"
229
+ }
230
+ }
231
+ },
232
+ {
233
+ "name": "current_authority",
234
+ "type": {
235
+ "defined": {
236
+ "name": "VrfAuthority"
237
+ }
238
+ }
239
+ },
240
+ {
241
+ "name": "address_tree_info",
242
+ "type": {
243
+ "defined": {
244
+ "name": "PackedAddressTreeInfo"
245
+ }
246
+ }
247
+ },
248
+ {
249
+ "name": "output_state_tree_index",
250
+ "type": "u8"
251
+ },
252
+ {
253
+ "name": "memo_hash",
254
+ "type": {
255
+ "array": [
256
+ "u8",
257
+ 32
258
+ ]
259
+ }
260
+ },
261
+ {
262
+ "name": "proof_hash",
263
+ "type": {
264
+ "array": [
265
+ "u8",
266
+ 32
267
+ ]
268
+ }
269
+ },
270
+ {
271
+ "name": "alpha_hash",
272
+ "type": {
273
+ "array": [
274
+ "u8",
275
+ 32
276
+ ]
277
+ }
278
+ },
279
+ {
280
+ "name": "beta_lo",
281
+ "type": {
282
+ "array": [
283
+ "u8",
284
+ 32
285
+ ]
286
+ }
287
+ },
288
+ {
289
+ "name": "beta_hi",
290
+ "type": {
291
+ "array": [
292
+ "u8",
293
+ 32
294
+ ]
295
+ }
296
+ }
297
+ ]
298
+ },
299
+ {
300
+ "name": "freeze_authority",
301
+ "docs": [
302
+ "One-way: flip `frozen=true`. After this, the pk and suite are",
303
+ "permanent."
304
+ ],
305
+ "discriminator": [
306
+ 59,
307
+ 124,
308
+ 222,
309
+ 89,
310
+ 27,
311
+ 146,
312
+ 178,
313
+ 7
314
+ ],
315
+ "accounts": [
316
+ {
317
+ "name": "owner",
318
+ "writable": true,
319
+ "signer": true
320
+ }
321
+ ],
322
+ "args": [
323
+ {
324
+ "name": "proof",
325
+ "type": {
326
+ "defined": {
327
+ "name": "ValidityProof"
328
+ }
329
+ }
330
+ },
331
+ {
332
+ "name": "current_authority",
333
+ "type": {
334
+ "defined": {
335
+ "name": "VrfAuthority"
336
+ }
337
+ }
338
+ },
339
+ {
340
+ "name": "account_meta",
341
+ "type": {
342
+ "defined": {
343
+ "name": "CompressedAccountMeta"
344
+ }
345
+ }
346
+ }
347
+ ]
348
+ },
349
+ {
350
+ "name": "init_authority",
351
+ "docs": [
352
+ "Create a new VrfAuthority compressed PDA owned by signer. The",
353
+ "`(owner, label)` pair determines the PDA address — one owner can",
354
+ "have multiple authorities by varying the label."
355
+ ],
356
+ "discriminator": [
357
+ 136,
358
+ 150,
359
+ 94,
360
+ 172,
361
+ 74,
362
+ 199,
363
+ 236,
364
+ 85
365
+ ],
366
+ "accounts": [
367
+ {
368
+ "name": "owner",
369
+ "writable": true,
370
+ "signer": true
371
+ },
372
+ {
373
+ "name": "system_program",
374
+ "address": "11111111111111111111111111111111"
375
+ }
376
+ ],
377
+ "args": [
378
+ {
379
+ "name": "proof",
380
+ "type": {
381
+ "defined": {
382
+ "name": "ValidityProof"
383
+ }
384
+ }
385
+ },
386
+ {
387
+ "name": "address_tree_info",
388
+ "type": {
389
+ "defined": {
390
+ "name": "PackedAddressTreeInfo"
391
+ }
392
+ }
393
+ },
394
+ {
395
+ "name": "output_state_tree_index",
396
+ "type": "u8"
397
+ },
398
+ {
399
+ "name": "pk",
400
+ "type": {
401
+ "array": [
402
+ "u8",
403
+ 32
404
+ ]
405
+ }
406
+ },
407
+ {
408
+ "name": "suite",
409
+ "type": "u8"
410
+ },
411
+ {
412
+ "name": "label",
413
+ "type": {
414
+ "array": [
415
+ "u8",
416
+ 32
417
+ ]
418
+ }
419
+ }
420
+ ]
421
+ },
422
+ {
423
+ "name": "revoke_authority",
424
+ "docs": [
425
+ "Sets the `revoked` flag. Informational only — does not change pk."
426
+ ],
427
+ "discriminator": [
428
+ 233,
429
+ 254,
430
+ 239,
431
+ 15,
432
+ 49,
433
+ 183,
434
+ 105,
435
+ 21
436
+ ],
437
+ "accounts": [
438
+ {
439
+ "name": "owner",
440
+ "writable": true,
441
+ "signer": true
442
+ }
443
+ ],
444
+ "args": [
445
+ {
446
+ "name": "proof",
447
+ "type": {
448
+ "defined": {
449
+ "name": "ValidityProof"
450
+ }
451
+ }
452
+ },
453
+ {
454
+ "name": "current_authority",
455
+ "type": {
456
+ "defined": {
457
+ "name": "VrfAuthority"
458
+ }
459
+ }
460
+ },
461
+ {
462
+ "name": "account_meta",
463
+ "type": {
464
+ "defined": {
465
+ "name": "CompressedAccountMeta"
466
+ }
467
+ }
468
+ }
469
+ ]
470
+ }
471
+ ],
472
+ "events": [
473
+ {
474
+ "name": "VrfAuthority",
475
+ "discriminator": [
476
+ 254,
477
+ 19,
478
+ 130,
479
+ 138,
480
+ 217,
481
+ 56,
482
+ 150,
483
+ 129
484
+ ]
485
+ },
486
+ {
487
+ "name": "VrfProofCommit",
488
+ "discriminator": [
489
+ 10,
490
+ 149,
491
+ 91,
492
+ 111,
493
+ 147,
494
+ 42,
495
+ 21,
496
+ 141
497
+ ]
498
+ },
499
+ {
500
+ "name": "VrfProofCommitWithBeta",
501
+ "discriminator": [
502
+ 122,
503
+ 231,
504
+ 247,
505
+ 49,
506
+ 102,
507
+ 24,
508
+ 126,
509
+ 222
510
+ ]
511
+ },
512
+ {
513
+ "name": "VrfProofCommitted",
514
+ "discriminator": [
515
+ 161,
516
+ 215,
517
+ 0,
518
+ 96,
519
+ 144,
520
+ 150,
521
+ 236,
522
+ 162
523
+ ]
524
+ }
525
+ ],
526
+ "errors": [
527
+ {
528
+ "code": 6000,
529
+ "name": "AuthorityFrozen",
530
+ "msg": "Authority is frozen and cannot be modified"
531
+ },
532
+ {
533
+ "code": 6001,
534
+ "name": "AlreadyFrozen",
535
+ "msg": "Authority is already frozen"
536
+ },
537
+ {
538
+ "code": 6002,
539
+ "name": "AuthorityNotFrozen",
540
+ "msg": "Authority must be frozen before committing proofs"
541
+ },
542
+ {
543
+ "code": 6003,
544
+ "name": "AuthorityRevoked",
545
+ "msg": "Authority is revoked"
546
+ },
547
+ {
548
+ "code": 6004,
549
+ "name": "NotOwner",
550
+ "msg": "Signer is not the authority owner"
551
+ },
552
+ {
553
+ "code": 6005,
554
+ "name": "AuthorityLabelMismatch",
555
+ "msg": "Authority label does not match the requested label"
556
+ },
557
+ {
558
+ "code": 6006,
559
+ "name": "AuthorityAddressMismatch",
560
+ "msg": "Authority address does not match owner and label seeds"
561
+ },
562
+ {
563
+ "code": 6007,
564
+ "name": "LabelTooLong",
565
+ "msg": "Label exceeds 32 bytes"
566
+ },
567
+ {
568
+ "code": 6008,
569
+ "name": "UnsupportedSuite",
570
+ "msg": "Unsupported VRF suite identifier"
571
+ },
572
+ {
573
+ "code": 6009,
574
+ "name": "InvalidPublicKeyLength",
575
+ "msg": "Invalid public key length"
576
+ }
577
+ ],
578
+ "types": [
579
+ {
580
+ "name": "CompressedAccountMeta",
581
+ "type": {
582
+ "kind": "struct",
583
+ "fields": [
584
+ {
585
+ "name": "tree_info",
586
+ "docs": [
587
+ "Merkle tree context."
588
+ ],
589
+ "type": {
590
+ "defined": {
591
+ "name": "PackedStateTreeInfo"
592
+ }
593
+ }
594
+ },
595
+ {
596
+ "name": "address",
597
+ "docs": [
598
+ "Address."
599
+ ],
600
+ "type": {
601
+ "array": [
602
+ "u8",
603
+ 32
604
+ ]
605
+ }
606
+ },
607
+ {
608
+ "name": "output_state_tree_index",
609
+ "docs": [
610
+ "Output merkle tree index."
611
+ ],
612
+ "type": "u8"
613
+ }
614
+ ]
615
+ }
616
+ },
617
+ {
618
+ "name": "CompressedAccountMetaReadOnly",
619
+ "type": {
620
+ "kind": "struct",
621
+ "fields": [
622
+ {
623
+ "name": "tree_info",
624
+ "docs": [
625
+ "State Merkle tree context."
626
+ ],
627
+ "type": {
628
+ "defined": {
629
+ "name": "PackedStateTreeInfo"
630
+ }
631
+ }
632
+ },
633
+ {
634
+ "name": "address",
635
+ "docs": [
636
+ "Address."
637
+ ],
638
+ "type": {
639
+ "array": [
640
+ "u8",
641
+ 32
642
+ ]
643
+ }
644
+ }
645
+ ]
646
+ }
647
+ },
648
+ {
649
+ "name": "CompressedProof",
650
+ "repr": {
651
+ "kind": "c"
652
+ },
653
+ "type": {
654
+ "kind": "struct",
655
+ "fields": [
656
+ {
657
+ "name": "a",
658
+ "type": {
659
+ "array": [
660
+ "u8",
661
+ 32
662
+ ]
663
+ }
664
+ },
665
+ {
666
+ "name": "b",
667
+ "type": {
668
+ "array": [
669
+ "u8",
670
+ 64
671
+ ]
672
+ }
673
+ },
674
+ {
675
+ "name": "c",
676
+ "type": {
677
+ "array": [
678
+ "u8",
679
+ 32
680
+ ]
681
+ }
682
+ }
683
+ ]
684
+ }
685
+ },
686
+ {
687
+ "name": "PackedAddressTreeInfo",
688
+ "docs": [
689
+ "Packed address tree info for instruction data.",
690
+ "Contains indices to address tree accounts and root index."
691
+ ],
692
+ "repr": {
693
+ "kind": "c"
694
+ },
695
+ "type": {
696
+ "kind": "struct",
697
+ "fields": [
698
+ {
699
+ "name": "address_merkle_tree_pubkey_index",
700
+ "type": "u8"
701
+ },
702
+ {
703
+ "name": "address_queue_pubkey_index",
704
+ "type": "u8"
705
+ },
706
+ {
707
+ "name": "root_index",
708
+ "type": "u16"
709
+ }
710
+ ]
711
+ }
712
+ },
713
+ {
714
+ "name": "PackedStateTreeInfo",
715
+ "type": {
716
+ "kind": "struct",
717
+ "fields": [
718
+ {
719
+ "name": "root_index",
720
+ "type": "u16"
721
+ },
722
+ {
723
+ "name": "prove_by_index",
724
+ "type": "bool"
725
+ },
726
+ {
727
+ "name": "merkle_tree_pubkey_index",
728
+ "type": "u8"
729
+ },
730
+ {
731
+ "name": "queue_pubkey_index",
732
+ "type": "u8"
733
+ },
734
+ {
735
+ "name": "leaf_index",
736
+ "type": "u32"
737
+ }
738
+ ]
739
+ }
740
+ },
741
+ {
742
+ "name": "ValidityProof",
743
+ "type": {
744
+ "kind": "struct",
745
+ "fields": [
746
+ {
747
+ "option": {
748
+ "defined": {
749
+ "name": "CompressedProof"
750
+ }
751
+ }
752
+ }
753
+ ]
754
+ }
755
+ },
756
+ {
757
+ "name": "VrfAuthority",
758
+ "docs": [
759
+ "Per-operator authority. Locks a published VRF public key on-chain so the",
760
+ "operator cannot silently rotate to a different secret key. The",
761
+ "`frozen` flag is one-way: once set, the pk and suite are permanent.",
762
+ "`revoked` is informational — a soft-deprecation flag for graceful key",
763
+ "rotation (the operator creates a new authority and marks the old one",
764
+ "revoked; historical proofs remain verifiable against the old pk).",
765
+ "",
766
+ "Stored as a Light compressed PDA. Seeds:",
767
+ "[\"vrf_authority\", owner_pubkey, label_bytes]"
768
+ ],
769
+ "type": {
770
+ "kind": "struct",
771
+ "fields": [
772
+ {
773
+ "name": "owner",
774
+ "type": "pubkey"
775
+ },
776
+ {
777
+ "name": "pk",
778
+ "type": {
779
+ "array": [
780
+ "u8",
781
+ 32
782
+ ]
783
+ }
784
+ },
785
+ {
786
+ "name": "suite",
787
+ "type": "u8"
788
+ },
789
+ {
790
+ "name": "frozen",
791
+ "type": "bool"
792
+ },
793
+ {
794
+ "name": "revoked",
795
+ "type": "bool"
796
+ },
797
+ {
798
+ "name": "label",
799
+ "type": {
800
+ "array": [
801
+ "u8",
802
+ 32
803
+ ]
804
+ }
805
+ },
806
+ {
807
+ "name": "created_slot",
808
+ "type": "u64"
809
+ }
810
+ ]
811
+ }
812
+ },
813
+ {
814
+ "name": "VrfProofCommit",
815
+ "docs": [
816
+ "One per VRF call. Stores a cryptographic commitment to the proof bytes.",
817
+ "The actual proof is held off-chain by the operator (in DB or wherever);",
818
+ "what lives on-chain is `sha256(proof_bytes)`, plus convenience hashes of",
819
+ "the memo and alpha for verifiers.",
820
+ "",
821
+ "Stored as a Light compressed PDA. Seeds:",
822
+ "[\"vrf_proof\", authority_pda_pubkey, memo_hash]",
823
+ "",
824
+ "Memo collision within an authority is impossible because `memo_hash` is",
825
+ "part of the seed (also gives free replay protection)."
826
+ ],
827
+ "type": {
828
+ "kind": "struct",
829
+ "fields": [
830
+ {
831
+ "name": "authority",
832
+ "type": "pubkey"
833
+ },
834
+ {
835
+ "name": "memo_hash",
836
+ "type": {
837
+ "array": [
838
+ "u8",
839
+ 32
840
+ ]
841
+ }
842
+ },
843
+ {
844
+ "name": "proof_hash",
845
+ "type": {
846
+ "array": [
847
+ "u8",
848
+ 32
849
+ ]
850
+ }
851
+ },
852
+ {
853
+ "name": "alpha_hash",
854
+ "type": {
855
+ "array": [
856
+ "u8",
857
+ 32
858
+ ]
859
+ }
860
+ },
861
+ {
862
+ "name": "committed_slot",
863
+ "type": "u64"
864
+ }
865
+ ]
866
+ }
867
+ },
868
+ {
869
+ "name": "VrfProofCommitWithBeta",
870
+ "docs": [
871
+ "Same address namespace as `VrfProofCommit`, but also stores the 64-byte",
872
+ "`beta` output of `vrfProofToHash`. With `beta` on-chain, other Solana",
873
+ "programs can read the random value directly via a Light SDK CPI without",
874
+ "needing the original proof bytes off-chain.",
875
+ "",
876
+ "Trust model is identical to `VrfProofCommit`: anyone can later audit that",
877
+ "the stored `beta` matches `vrfProofToHash(proof)` and that the proof",
878
+ "satisfies ECVRF — but a consuming program reading on-chain trusts that",
879
+ "the operator (whose pk is frozen in `VrfAuthority`) populated it",
880
+ "correctly.",
881
+ "",
882
+ "Seeds: [\"vrf_proof\", authority_pda_pubkey, memo_hash]"
883
+ ],
884
+ "type": {
885
+ "kind": "struct",
886
+ "fields": [
887
+ {
888
+ "name": "authority",
889
+ "type": "pubkey"
890
+ },
891
+ {
892
+ "name": "memo_hash",
893
+ "type": {
894
+ "array": [
895
+ "u8",
896
+ 32
897
+ ]
898
+ }
899
+ },
900
+ {
901
+ "name": "proof_hash",
902
+ "type": {
903
+ "array": [
904
+ "u8",
905
+ 32
906
+ ]
907
+ }
908
+ },
909
+ {
910
+ "name": "alpha_hash",
911
+ "type": {
912
+ "array": [
913
+ "u8",
914
+ 32
915
+ ]
916
+ }
917
+ },
918
+ {
919
+ "name": "beta_lo",
920
+ "docs": [
921
+ "First 32 bytes of the 64-byte beta. Split because LightHasher caps",
922
+ "each field at 32 bytes."
923
+ ],
924
+ "type": {
925
+ "array": [
926
+ "u8",
927
+ 32
928
+ ]
929
+ }
930
+ },
931
+ {
932
+ "name": "beta_hi",
933
+ "docs": [
934
+ "Second 32 bytes of the 64-byte beta."
935
+ ],
936
+ "type": {
937
+ "array": [
938
+ "u8",
939
+ 32
940
+ ]
941
+ }
942
+ },
943
+ {
944
+ "name": "committed_slot",
945
+ "type": "u64"
946
+ }
947
+ ]
948
+ }
949
+ },
950
+ {
951
+ "name": "VrfProofCommitted",
952
+ "docs": [
953
+ "Event-mode commitment emitted by `commit_proof_event`. Unlike `VrfProofCommit`,",
954
+ "this never creates a compressed PDA — it just lives in the transaction log.",
955
+ "",
956
+ "Off-chain verifiers reconstruct the authority address from `(owner, label)`",
957
+ "using the same seed derivation as a `VrfAuthority`, then look up the",
958
+ "authority's compressed PDA for the published pk / suite / frozen state.",
959
+ "",
960
+ "Replay protection is moved from the chain to the verifier: a malicious",
961
+ "operator could emit two events with the same `memo_hash` and different",
962
+ "`proof_hash`es. The VRF proof is deterministic given the pk + alpha, so at",
963
+ "most one of those would pass ECVRF verification — verifiers must scan for",
964
+ "duplicates and pick the canonical commit."
965
+ ],
966
+ "type": {
967
+ "kind": "struct",
968
+ "fields": [
969
+ {
970
+ "name": "owner",
971
+ "docs": [
972
+ "The signer who emitted this commit. Implicitly the authority owner —",
973
+ "off-chain verifiers re-derive the authority address from (owner, label)."
974
+ ],
975
+ "type": "pubkey"
976
+ },
977
+ {
978
+ "name": "label",
979
+ "docs": [
980
+ "32-byte authority label, matches the seed used by `VrfAuthority`."
981
+ ],
982
+ "type": {
983
+ "array": [
984
+ "u8",
985
+ 32
986
+ ]
987
+ }
988
+ },
989
+ {
990
+ "name": "memo_hash",
991
+ "type": {
992
+ "array": [
993
+ "u8",
994
+ 32
995
+ ]
996
+ }
997
+ },
998
+ {
999
+ "name": "proof_hash",
1000
+ "type": {
1001
+ "array": [
1002
+ "u8",
1003
+ 32
1004
+ ]
1005
+ }
1006
+ },
1007
+ {
1008
+ "name": "alpha_hash",
1009
+ "type": {
1010
+ "array": [
1011
+ "u8",
1012
+ 32
1013
+ ]
1014
+ }
1015
+ },
1016
+ {
1017
+ "name": "committed_slot",
1018
+ "type": "u64"
1019
+ }
1020
+ ]
1021
+ }
1022
+ }
1023
+ ]
1024
+ }