ephemeral_rollups_sdk/
delegate_args.rs1use crate::solana_compat::solana::{system_program, AccountMeta, Pubkey};
2use dlp::pda::{
3 delegate_buffer_pda_from_delegated_account_and_owner_program,
4 delegation_metadata_pda_from_delegated_account, delegation_record_pda_from_delegated_account,
5};
6
7use crate::consts::DELEGATION_PROGRAM_ID;
8
9#[derive(Debug, Clone, PartialEq, Eq)]
10pub struct DelegateAccounts {
11 pub delegated_account: Pubkey,
12 pub delegate_buffer: Pubkey,
13 pub delegation_record: Pubkey,
14 pub delegation_metadata: Pubkey,
15 pub owner_program: Pubkey,
16 pub delegation_program: Pubkey,
17 pub system_program: Pubkey,
18}
19
20impl DelegateAccounts {
21 pub fn new(delegated_account: Pubkey, owner_program: Pubkey) -> Self {
22 let delegate_buffer = delegate_buffer_pda_from_delegated_account_and_owner_program(
23 &delegated_account.to_bytes().into(),
24 &owner_program.to_bytes().into(),
25 );
26 let delegation_record =
27 delegation_record_pda_from_delegated_account(&delegated_account.to_bytes().into());
28 let delegation_metadata =
29 delegation_metadata_pda_from_delegated_account(&delegated_account.to_bytes().into());
30 Self {
31 delegated_account,
32 delegate_buffer: delegate_buffer.to_bytes().into(),
33 delegation_record: delegation_record.to_bytes().into(),
34 delegation_metadata: delegation_metadata.to_bytes().into(),
35 owner_program,
36 delegation_program: DELEGATION_PROGRAM_ID.to_bytes().into(),
37 system_program: system_program::ID.to_bytes().into(),
38 }
39 }
40}
41
42#[derive(Debug, Clone, PartialEq, Eq)]
43pub struct DelegateAccountMetas {
44 pub delegated_account: AccountMeta,
45 pub owner_program: AccountMeta,
46 pub delegate_buffer: AccountMeta,
47 pub delegation_record: AccountMeta,
48 pub delegation_metadata: AccountMeta,
49 pub delegation_program: AccountMeta,
50 pub system_program: AccountMeta,
51}
52
53impl From<DelegateAccounts> for DelegateAccountMetas {
54 fn from(accounts: DelegateAccounts) -> Self {
55 Self {
56 delegated_account: AccountMeta::new(accounts.delegated_account, false),
57 owner_program: AccountMeta::new_readonly(accounts.owner_program, false),
58 delegate_buffer: AccountMeta::new(accounts.delegate_buffer, false),
59 delegation_record: AccountMeta::new(accounts.delegation_record, false),
60 delegation_metadata: AccountMeta::new(accounts.delegation_metadata, false),
61 delegation_program: AccountMeta::new_readonly(accounts.delegation_program, false),
62 system_program: AccountMeta::new_readonly(accounts.system_program, false),
63 }
64 }
65}