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:
parent
bcf7be93d6
commit
a5f285f1bd
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue