Skip to main content

ephemeral_rollups_sdk/
delegate_args.rs

1use 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}