Skip to content

Commit 5c0f8be

Browse files
committed
refactor: delegate utils
Signed-off-by: Pablo Maldonado <[email protected]>
1 parent 23cafcc commit 5c0f8be

File tree

6 files changed

+55
-63
lines changed

6 files changed

+55
-63
lines changed

programs/svm-spoke/src/instructions/deposit.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ use crate::{
1212
event::FundsDeposited,
1313
state::{Route, State},
1414
utils::{
15-
derive_deposit_seed_hash, get_current_time, get_unsafe_deposit_id, transfer_from, DepositNowSeedData,
16-
DepositSeedData,
15+
derive_seed_hash, get_current_time, get_unsafe_deposit_id, transfer_from, DepositNowSeedData, DepositSeedData,
1716
},
1817
};
1918

@@ -39,7 +38,7 @@ pub struct Deposit<'info> {
3938
)]
4039
pub state: Account<'info, State>,
4140

42-
/// CHECK: PDA derived with seeds ["delegate", deposit_seed_hash]; used as a CPI signer.
41+
/// CHECK: PDA derived with seeds ["delegate", seed_hash]; used as a CPI signer.
4342
pub delegate: UncheckedAccount<'info>,
4443

4544
#[account(
@@ -170,7 +169,7 @@ pub fn deposit(
170169
exclusivity_parameter: u32,
171170
message: Vec<u8>,
172171
) -> Result<()> {
173-
let seed_hash = derive_deposit_seed_hash(
172+
let seed_hash = derive_seed_hash(
174173
&(DepositSeedData {
175174
depositor,
176175
recipient,
@@ -223,7 +222,7 @@ pub fn deposit_now(
223222
) -> Result<()> {
224223
let state = &mut ctx.accounts.state;
225224
let current_time = get_current_time(state)?;
226-
let seed_hash = derive_deposit_seed_hash(
225+
let seed_hash = derive_seed_hash(
227226
&(DepositNowSeedData {
228227
depositor,
229228
recipient,
@@ -277,7 +276,7 @@ pub fn unsafe_deposit(
277276
) -> Result<()> {
278277
// Calculate the unsafe deposit ID as a [u8; 32]
279278
let deposit_id = get_unsafe_deposit_id(ctx.accounts.signer.key(), depositor, deposit_nonce);
280-
let seed_hash = derive_deposit_seed_hash(
279+
let seed_hash = derive_seed_hash(
281280
&(DepositSeedData {
282281
depositor,
283282
recipient,

programs/svm-spoke/src/instructions/fill.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use crate::{
1111
error::{CommonError, SvmError},
1212
event::{FillType, FilledRelay, RelayExecutionEventInfo},
1313
state::{FillRelayParams, FillStatus, FillStatusAccount, State},
14-
utils::{derive_fill_seed_hash, get_current_time, hash_non_empty_message, invoke_handler, transfer_from},
14+
utils::{derive_seed_hash, get_current_time, hash_non_empty_message, invoke_handler, transfer_from, FillSeedData},
1515
};
1616

1717
#[event_cpi]
@@ -32,7 +32,7 @@ pub struct FillRelay<'info> {
3232
)]
3333
pub state: Account<'info, State>,
3434

35-
/// CHECK: PDA derived with seeds ["delegate", fill_seed_hash]; used as a CPI signer.
35+
/// CHECK: PDA derived with seeds ["delegate", seed_hash]; used as a CPI signer.
3636
pub delegate: UncheckedAccount<'info>,
3737

3838
#[account(
@@ -119,7 +119,7 @@ pub fn fill_relay<'info>(
119119
};
120120

121121
// Verify delegate PDA
122-
let seed_hash = derive_fill_seed_hash(relay_hash, repayment_chain_id, repayment_address);
122+
let seed_hash = derive_seed_hash(&(FillSeedData { relay_hash, repayment_chain_id, repayment_address }));
123123
let (pda, bump) = Pubkey::find_program_address(&[b"delegate", &seed_hash], &ctx.program_id);
124124
if ctx.accounts.delegate.key() != pda {
125125
return err!(SvmError::InvalidDelegatePda);
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
use anchor_lang::{prelude::*, solana_program::keccak};
2+
3+
pub fn derive_seed_hash<T: AnchorSerialize>(seed: &T) -> [u8; 32] {
4+
let mut buf = Vec::with_capacity(128);
5+
seed.serialize(&mut buf).unwrap();
6+
keccak::hash(&buf).to_bytes()
7+
}
8+
9+
#[derive(AnchorSerialize)]
10+
pub struct DepositSeedData {
11+
pub depositor: Pubkey,
12+
pub recipient: Pubkey,
13+
pub input_token: Pubkey,
14+
pub output_token: Pubkey,
15+
pub input_amount: u64,
16+
pub output_amount: u64,
17+
pub destination_chain_id: u64,
18+
pub exclusive_relayer: Pubkey,
19+
pub quote_timestamp: u32,
20+
pub fill_deadline: u32,
21+
pub exclusivity_parameter: u32,
22+
pub message: Vec<u8>,
23+
}
24+
25+
#[derive(AnchorSerialize)]
26+
pub struct DepositNowSeedData {
27+
pub depositor: Pubkey,
28+
pub recipient: Pubkey,
29+
pub input_token: Pubkey,
30+
pub output_token: Pubkey,
31+
pub input_amount: u64,
32+
pub output_amount: u64,
33+
pub destination_chain_id: u64,
34+
pub exclusive_relayer: Pubkey,
35+
pub fill_deadline_offset: u32,
36+
pub exclusivity_period: u32,
37+
pub message: Vec<u8>,
38+
}
39+
40+
#[derive(AnchorSerialize)]
41+
pub struct FillSeedData {
42+
pub relay_hash: [u8; 32],
43+
pub repayment_chain_id: u64,
44+
pub repayment_address: Pubkey,
45+
}

programs/svm-spoke/src/utils/deposit_utils.rs

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -9,40 +9,3 @@ pub fn get_unsafe_deposit_id(msg_sender: Pubkey, depositor: Pubkey, deposit_nonc
99

1010
keccak::hash(&data).to_bytes()
1111
}
12-
13-
#[derive(AnchorSerialize)]
14-
pub struct DepositSeedData {
15-
pub depositor: Pubkey,
16-
pub recipient: Pubkey,
17-
pub input_token: Pubkey,
18-
pub output_token: Pubkey,
19-
pub input_amount: u64,
20-
pub output_amount: u64,
21-
pub destination_chain_id: u64,
22-
pub exclusive_relayer: Pubkey,
23-
pub quote_timestamp: u32,
24-
pub fill_deadline: u32,
25-
pub exclusivity_parameter: u32,
26-
pub message: Vec<u8>,
27-
}
28-
29-
#[derive(AnchorSerialize)]
30-
pub struct DepositNowSeedData {
31-
pub depositor: Pubkey,
32-
pub recipient: Pubkey,
33-
pub input_token: Pubkey,
34-
pub output_token: Pubkey,
35-
pub input_amount: u64,
36-
pub output_amount: u64,
37-
pub destination_chain_id: u64,
38-
pub exclusive_relayer: Pubkey,
39-
pub fill_deadline_offset: u32,
40-
pub exclusivity_period: u32,
41-
pub message: Vec<u8>,
42-
}
43-
44-
pub fn derive_deposit_seed_hash<T: AnchorSerialize>(seed: &T) -> [u8; 32] {
45-
let mut buf = Vec::with_capacity(128);
46-
seed.serialize(&mut buf).unwrap();
47-
keccak::hash(&buf).to_bytes()
48-
}

programs/svm-spoke/src/utils/fill_utils.rs

Lines changed: 0 additions & 15 deletions
This file was deleted.

programs/svm-spoke/src/utils/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
pub mod bitmap_utils;
22
pub mod cctp_utils;
3+
pub mod delegate_utils;
34
pub mod deposit_utils;
4-
pub mod fill_utils;
55
pub mod merkle_proof_utils;
66
pub mod message_utils;
77
pub mod testable_utils;
88
pub mod transfer_utils;
99

1010
pub use bitmap_utils::*;
1111
pub use cctp_utils::*;
12+
pub use delegate_utils::*;
1213
pub use deposit_utils::*;
13-
pub use fill_utils::*;
1414
pub use merkle_proof_utils::*;
1515
pub use message_utils::*;
1616
pub use testable_utils::*;

0 commit comments

Comments
 (0)