Verify Signatures should take bridge as state, and split arguments.

Bridge state is represented by the #[state] struct in the main file, and so
processor functions no longer receive it as part of context. Instead it's
passed as an arg.

Change-Id: I0492290a597e0778d5c52162447fa09f68a91a9b
This commit is contained in:
Reisen 2021-04-29 11:07:58 +00:00
parent bcf7be93d6
commit a5f285f1bd
2 changed files with 19 additions and 9 deletions

View File

@ -1,6 +1,6 @@
use anchor_lang::{prelude::*, solana_program}; 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 byteorder::ByteOrder;
use sha3::Digest; use sha3::Digest;
use std::io::Write; use std::io::Write;
@ -22,9 +22,14 @@ struct SecpInstructionPart<'a> {
msg_size: u16, msg_size: u16,
} }
pub fn verify_signatures(ctx: Context<VerifySig>, data: VerifySigsData) -> ProgramResult { pub fn verify_signatures(
let sig_infos: Vec<SigInfo> = data bridge: &mut Bridge,
.signers ctx: Context<VerifySig>,
hash: [u8; 32],
signers: [i8; MAX_LEN_GUARDIAN_KEYS],
initial_creation: bool,
) -> ProgramResult {
let sig_infos: Vec<SigInfo> = signers
.iter() .iter()
.enumerate() .enumerate()
.filter_map(|(i, p)| { .filter_map(|(i, p)| {
@ -128,7 +133,7 @@ pub fn verify_signatures(ctx: Context<VerifySig>, data: VerifySigsData) -> Progr
return Err(ProgramError::InvalidArgument); return Err(ProgramError::InvalidArgument);
}; };
let msg_hash: [u8; 32] = h.finalize().into(); let msg_hash: [u8; 32] = h.finalize().into();
if msg_hash != data.hash { if msg_hash != hash {
return Err(ProgramError::InvalidArgument); return Err(ProgramError::InvalidArgument);
} }

View File

@ -21,7 +21,6 @@ pub const MAX_LEN_GUARDIAN_KEYS: usize = 20;
#[derive(Accounts)] #[derive(Accounts)]
pub struct VerifySig<'info> { pub struct VerifySig<'info> {
pub bridge: AccountInfo<'info>,
pub system: AccountInfo<'info>, pub system: AccountInfo<'info>,
pub instruction_sysvar: AccountInfo<'info>, pub instruction_sysvar: AccountInfo<'info>,
pub bridge_info: ProgramState<'info, BridgeInfo>, pub bridge_info: ProgramState<'info, BridgeInfo>,
@ -89,9 +88,15 @@ pub mod anchor_bridge {
data.config, data.config,
) )
} }
}
pub fn verify_signatures(ctx: Context<VerifySig>, data: VerifySigsData) -> ProgramResult { pub fn verify_signatures(&mut self, ctx: Context<VerifySig>, data: VerifySigsData) -> ProgramResult {
api::verify_signatures(ctx, data) api::verify_signatures(
self,
ctx,
data.hash,
data.signers,
data.initial_creation,
)
}
} }
} }