diff --git a/solana/anchor-bridge/programs/anchor-bridge/src/api/verify_signatures.rs b/solana/anchor-bridge/programs/anchor-bridge/src/api/verify_signatures.rs index 7e2bf8e5..9c35ba11 100644 --- a/solana/anchor-bridge/programs/anchor-bridge/src/api/verify_signatures.rs +++ b/solana/anchor-bridge/programs/anchor-bridge/src/api/verify_signatures.rs @@ -1,6 +1,6 @@ use anchor_lang::{prelude::*, solana_program}; -use crate::{accounts, VerifySig, VerifySigsData}; +use crate::{accounts, anchor_bridge::Bridge, VerifySig, VerifySigsData, MAX_LEN_GUARDIAN_KEYS}; use byteorder::ByteOrder; use sha3::Digest; use std::io::Write; @@ -22,9 +22,14 @@ struct SecpInstructionPart<'a> { msg_size: u16, } -pub fn verify_signatures(ctx: Context, data: VerifySigsData) -> ProgramResult { - let sig_infos: Vec = data - .signers +pub fn verify_signatures( + bridge: &mut Bridge, + ctx: Context, + hash: [u8; 32], + signers: [i8; MAX_LEN_GUARDIAN_KEYS], + initial_creation: bool, +) -> ProgramResult { + let sig_infos: Vec = signers .iter() .enumerate() .filter_map(|(i, p)| { @@ -128,7 +133,7 @@ pub fn verify_signatures(ctx: Context, data: VerifySigsData) -> Progr return Err(ProgramError::InvalidArgument); }; let msg_hash: [u8; 32] = h.finalize().into(); - if msg_hash != data.hash { + if msg_hash != hash { return Err(ProgramError::InvalidArgument); } diff --git a/solana/anchor-bridge/programs/anchor-bridge/src/lib.rs b/solana/anchor-bridge/programs/anchor-bridge/src/lib.rs index 9f473e75..2b35c16e 100644 --- a/solana/anchor-bridge/programs/anchor-bridge/src/lib.rs +++ b/solana/anchor-bridge/programs/anchor-bridge/src/lib.rs @@ -21,7 +21,6 @@ pub const MAX_LEN_GUARDIAN_KEYS: usize = 20; #[derive(Accounts)] pub struct VerifySig<'info> { - pub bridge: AccountInfo<'info>, pub system: AccountInfo<'info>, pub instruction_sysvar: AccountInfo<'info>, pub bridge_info: ProgramState<'info, BridgeInfo>, @@ -89,9 +88,15 @@ pub mod anchor_bridge { data.config, ) } - } - pub fn verify_signatures(ctx: Context, data: VerifySigsData) -> ProgramResult { - api::verify_signatures(ctx, data) + pub fn verify_signatures(&mut self, ctx: Context, data: VerifySigsData) -> ProgramResult { + api::verify_signatures( + self, + ctx, + data.hash, + data.signers, + data.initial_creation, + ) + } } }