diff --git a/solana/anchor-bridge/programs/anchor-bridge/src/api/initialize.rs b/solana/anchor-bridge/programs/anchor-bridge/src/api/initialize.rs index 433ced990..566d7c867 100644 --- a/solana/anchor-bridge/programs/anchor-bridge/src/api/initialize.rs +++ b/solana/anchor-bridge/programs/anchor-bridge/src/api/initialize.rs @@ -1,11 +1,20 @@ -use crate::{accounts, types::BridgeConfig, Initialize, InitializeData, MAX_LEN_GUARDIAN_KEYS}; use anchor_lang::{prelude::*, solana_program}; +use crate::{ + accounts, + anchor_bridge::Bridge, + types::{BridgeConfig, Version}, + Initialize, InitializeData, MAX_LEN_GUARDIAN_KEYS, +}; + pub fn initialize( ctx: Context, len_guardians: u8, initial_guardian_key: [[u8; 20]; MAX_LEN_GUARDIAN_KEYS], config: BridgeConfig, -) -> ProgramResult { - Ok(()) +) -> Result { + Ok(Bridge { + guardian_set_version: Version(0), + config, + }) } 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 85689bf8b..7e2bf8e5f 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,5 +1,6 @@ -use crate::{accounts, VerifySig, VerifySigsData}; use anchor_lang::{prelude::*, solana_program}; + +use crate::{accounts, VerifySig, VerifySigsData}; use byteorder::ByteOrder; use sha3::Digest; use std::io::Write; diff --git a/solana/anchor-bridge/programs/anchor-bridge/src/lib.rs b/solana/anchor-bridge/programs/anchor-bridge/src/lib.rs index c763bc96b..002c252ca 100644 --- a/solana/anchor-bridge/programs/anchor-bridge/src/lib.rs +++ b/solana/anchor-bridge/programs/anchor-bridge/src/lib.rs @@ -41,7 +41,23 @@ pub struct VerifySigsData { } #[derive(Accounts)] -pub struct Initialize {} +pub struct Initialize<'info> { + /// Account used to pay for auxillary instructions. + #[account(signer)] + pub payer: AccountInfo<'info>, + + /// Used for timestamping actions. + pub clock: Sysvar<'info, Clock>, + + /// Information about the current guardian set. + pub guardian_set: ProgramState<'info, GuardianSetInfo>, + + /// Required by Anchor for associated accounts. + pub rent: Sysvar<'info, Rent>, + + /// Required by Anchor for associated accounts. + pub system_program: AccountInfo<'info>, +} #[derive(AnchorSerialize, AnchorDeserialize, Clone, Copy, Debug)] pub struct InitializeData { @@ -63,13 +79,15 @@ pub mod anchor_bridge { pub config: types::BridgeConfig, } - pub fn initialize(ctx: Context, data: InitializeData) -> ProgramResult { - api::initialize( - ctx, - data.len_guardians, - data.initial_guardian_keys, - data.config, - ) + impl Bridge { + pub fn new(ctx: Context, data: InitializeData) -> Result { + api::initialize( + ctx, + data.len_guardians, + data.initial_guardian_keys, + data.config, + ) + } } pub fn verify_signatures(ctx: Context, data: VerifySigsData) -> ProgramResult { diff --git a/solana/anchor-bridge/programs/anchor-bridge/src/types.rs b/solana/anchor-bridge/programs/anchor-bridge/src/types.rs index c55e99513..1456ba378 100644 --- a/solana/anchor-bridge/programs/anchor-bridge/src/types.rs +++ b/solana/anchor-bridge/programs/anchor-bridge/src/types.rs @@ -2,7 +2,7 @@ use anchor_lang::prelude::*; // Distinguishes a Version number from a standard u32. #[derive(AnchorSerialize, AnchorDeserialize, Clone, Copy, Debug)] -pub struct Version(u32); +pub struct Version(pub u32); #[repr(C)] #[derive(AnchorSerialize, AnchorDeserialize, Clone, Copy, Debug)]