gmsol_mock_chainlink_verifier/
lib.rs1use anchor_lang::prelude::*;
2
3declare_id!("4nMxSRfeW7W2zFbN8FJ4YDvuTzEzCo1e6GzJxJLnDUoZ");
4
5#[program]
6pub mod gmsol_mock_chainlink_verifier {
7
8 use super::*;
9
10 pub fn initialize(ctx: Context<Initialize>, user: Pubkey) -> Result<()> {
11 ctx.accounts.verifier_account.authority = ctx.accounts.payer.key();
12 ctx.accounts.verifier_account.access_controller = ctx.accounts.access_controller.key();
13 ctx.accounts.access_controller.user = user;
14 Ok(())
15 }
16
17 pub fn verify(_ctx: Context<VerifyContext>, compressed_report: Vec<u8>) -> Result<Vec<u8>> {
18 use chainlink_data_streams_report::report::decode_full_report;
19 use snap::raw::Decoder;
20
21 let mut decoder = Decoder::new();
22 let full_report = decoder
23 .decompress_vec(&compressed_report)
24 .expect("invalid compression");
25 let (_, report) = decode_full_report(&full_report).expect("invalid full report");
26
27 cfg_if::cfg_if! {
28 if #[cfg(feature = "mock")] {
29 Ok(report)
30 } else {
31 _ = report;
32 panic!("The `mock` feature is not enabled");
33 }
34 }
35 }
36}
37
38pub const DEFAULT_VERIFIER_ACCOUNT_SEEDS: &[u8; 8] = b"verifier";
39pub const DEFAULT_ACCESS_CONTROLLER_ACCOUNT_SEEDS: &[u8] = b"access_controller";
40
41#[account]
43#[derive(InitSpace)]
44pub struct VerifierAccount {
45 authority: Pubkey,
46 access_controller: Pubkey,
47}
48
49#[account]
51#[derive(InitSpace)]
52pub struct AccessController {
53 user: Pubkey,
54}
55
56#[derive(Accounts)]
57pub struct Initialize<'info> {
58 #[account(mut)]
60 pub payer: Signer<'info>,
61 #[account(
63 init,
64 payer = payer,
65 space = 8 + VerifierAccount::INIT_SPACE,
66 seeds = [DEFAULT_VERIFIER_ACCOUNT_SEEDS],
67 bump,
68 )]
69 pub verifier_account: Account<'info, VerifierAccount>,
70 #[account(
72 init,
73 payer = payer,
74 space = 8 + VerifierAccount::INIT_SPACE,
75 seeds = [DEFAULT_ACCESS_CONTROLLER_ACCOUNT_SEEDS],
76 bump,
77 )]
78 pub access_controller: Account<'info, AccessController>,
79 pub system_program: Program<'info, System>,
81}
82
83#[derive(Accounts)]
84pub struct VerifyContext<'info> {
85 #[account(
87 seeds = [DEFAULT_VERIFIER_ACCOUNT_SEEDS],
88 bump,
89 has_one = access_controller,
90 )]
91 pub verifier_account: Account<'info, VerifierAccount>,
92 #[account(has_one = user)]
94 pub access_controller: Account<'info, AccessController>,
95 pub user: Signer<'info>,
97 pub config_account: UncheckedAccount<'info>,
99}