dlp_api/instruction_builder/
commit_finalize.rs1use dlp::{
2 args::{CommitBumps, CommitFinalizeArgs},
3 delegation_metadata_seeds_from_delegated_account,
4 delegation_record_seeds_from_delegated_account,
5 discriminator::DlpDiscriminator,
6 pod_view::PodView,
7 total_size_budget, validator_fees_vault_seeds_from_validator,
8 AccountSizeClass, DLP_PROGRAM_DATA_SIZE_CLASS,
9};
10use solana_program::{
11 instruction::{AccountMeta, Instruction},
12 pubkey::Pubkey,
13 system_program,
14};
15
16pub struct CommitPDAs {
17 pub delegation_record: Pubkey,
18 pub delegation_metadata: Pubkey,
19 pub validator_fees_vault: Pubkey,
20}
21
22pub fn commit_finalize(
25 validator: Pubkey,
26 delegated_account: Pubkey,
27 args: &mut CommitFinalizeArgs,
28 state_or_diff: &[u8],
29) -> (Instruction, CommitPDAs) {
30 let delegation_record = Pubkey::find_program_address(
31 delegation_record_seeds_from_delegated_account!(delegated_account),
32 &dlp::id(),
33 );
34
35 let delegation_metadata = Pubkey::find_program_address(
36 delegation_metadata_seeds_from_delegated_account!(delegated_account),
37 &dlp::id(),
38 );
39
40 let validator_fees_vault = Pubkey::find_program_address(
41 validator_fees_vault_seeds_from_validator!(validator),
42 &dlp::id(),
43 );
44
45 args.bumps = CommitBumps {
47 delegation_record: delegation_record.1,
48 delegation_metadata: delegation_metadata.1,
49 validator_fees_vault: validator_fees_vault.1,
50 };
51
52 (
53 Instruction {
54 program_id: dlp::id(),
55 accounts: vec![
56 AccountMeta::new(validator, true),
57 AccountMeta::new(delegated_account, false),
58 AccountMeta::new(delegation_record.0, false),
59 AccountMeta::new(delegation_metadata.0, false),
60 AccountMeta::new(validator_fees_vault.0, false),
61 AccountMeta::new_readonly(system_program::id(), false),
62 ],
63 data: [
64 DlpDiscriminator::CommitFinalize.to_vec(),
65 args.to_bytes(),
66 state_or_diff.to_vec(),
67 ]
68 .concat(),
69 },
70 CommitPDAs {
71 delegation_record: delegation_record.0,
72 delegation_metadata: delegation_metadata.0,
73 validator_fees_vault: validator_fees_vault.0,
74 },
75 )
76}
77
78pub fn commit_finalize_size_budget(delegated_account: AccountSizeClass) -> u32 {
84 total_size_budget(&[
85 DLP_PROGRAM_DATA_SIZE_CLASS,
86 AccountSizeClass::Tiny, delegated_account, AccountSizeClass::Tiny, AccountSizeClass::Tiny, AccountSizeClass::Tiny, AccountSizeClass::Tiny, ])
93}