From 55123e0d772e5064396f27351639df7b07db3dbf Mon Sep 17 00:00:00 2001 From: Reinis Martinsons Date: Mon, 4 Nov 2024 10:49:15 +0000 Subject: [PATCH] fix(svm): use free function in handling cctp Signed-off-by: Reinis Martinsons --- .../src/instructions/handle_receive_message.rs | 16 +++++++++------- programs/svm-spoke/src/lib.rs | 7 +------ 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/programs/svm-spoke/src/instructions/handle_receive_message.rs b/programs/svm-spoke/src/instructions/handle_receive_message.rs index 7324ebb35..225300ed2 100644 --- a/programs/svm-spoke/src/instructions/handle_receive_message.rs +++ b/programs/svm-spoke/src/instructions/handle_receive_message.rs @@ -47,13 +47,15 @@ pub struct HandleReceiveMessageParams { pub authority_bump: u8, } -// TODO: consider refactoring this to be consistent with using free functions. -impl<'info> HandleReceiveMessage<'info> { - pub fn handle_receive_message(&self, params: &HandleReceiveMessageParams) -> Result> { - // Return instruction data for the self invoked CPI based on the received message body. - translate_message(¶ms.message_body) - } +pub fn handle_receive_message<'info>( + ctx: Context<'_, '_, '_, 'info, HandleReceiveMessage<'info>>, + params: HandleReceiveMessageParams, +) -> Result<()> { + let self_ix_data = translate_message(¶ms.message_body)?; + + invoke_self(&ctx, &self_ix_data) } + // TODO: ensure that CCTP blocks re-played messages sent over the bridge. i.e one pauseDeposit Call cant be replayed. fn translate_message(data: &Vec) -> Result> { match utils::get_solidity_selector(data)? { @@ -99,7 +101,7 @@ fn translate_message(data: &Vec) -> Result> { // Invokes self CPI for remote domain invoked message calls. We use low level invoke_signed with seeds corresponding to // the self_authority account and passing all remaining accounts from the context. Instruction data is obtained within // handle_receive_message by translating the received message body into a valid instruction data for the invoked CPI. -pub fn invoke_self<'info>(ctx: &Context<'_, '_, '_, 'info, HandleReceiveMessage<'info>>, data: &Vec) -> Result<()> { +fn invoke_self<'info>(ctx: &Context<'_, '_, '_, 'info, HandleReceiveMessage<'info>>, data: &Vec) -> Result<()> { let self_authority_seeds: &[&[&[u8]]] = &[&[b"self_authority", &[ctx.bumps.self_authority]]]; let mut accounts = Vec::with_capacity(1 + ctx.remaining_accounts.len()); diff --git a/programs/svm-spoke/src/lib.rs b/programs/svm-spoke/src/lib.rs index 49d814da3..c24eea23b 100644 --- a/programs/svm-spoke/src/lib.rs +++ b/programs/svm-spoke/src/lib.rs @@ -148,16 +148,11 @@ pub mod svm_spoke { } // CCTP methods. - // TODO: consider refactoring this to be consistent with using free functions. pub fn handle_receive_message<'info>( ctx: Context<'_, '_, '_, 'info, HandleReceiveMessage<'info>>, params: HandleReceiveMessageParams, ) -> Result<()> { - let self_ix_data = ctx.accounts.handle_receive_message(¶ms)?; - - invoke_self(&ctx, &self_ix_data)?; - - Ok(()) + instructions::handle_receive_message(ctx, params) } // Slow fill methods.