dlp_api/instruction_builder/
commit_finalize_from_buffer.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 fn commit_finalize_from_buffer(
19 validator: Pubkey,
20 delegated_account: Pubkey,
21 data_buffer: Pubkey,
22 commit_args: &mut CommitFinalizeArgs,
23) -> (Instruction, super::CommitPDAs) {
24 let delegation_record = Pubkey::find_program_address(
25 delegation_record_seeds_from_delegated_account!(delegated_account),
26 &dlp::id(),
27 );
28
29 let validator_fees_vault = Pubkey::find_program_address(
30 validator_fees_vault_seeds_from_validator!(validator),
31 &dlp::id(),
32 );
33
34 let delegation_metadata = Pubkey::find_program_address(
35 delegation_metadata_seeds_from_delegated_account!(delegated_account),
36 &dlp::id(),
37 );
38
39 commit_args.bumps = CommitBumps {
41 delegation_record: delegation_record.1,
42 delegation_metadata: delegation_metadata.1,
43 validator_fees_vault: validator_fees_vault.1,
44 };
45
46 (
47 Instruction {
48 program_id: dlp::id(),
49 accounts: vec![
50 AccountMeta::new(validator, true),
51 AccountMeta::new(delegated_account, false),
52 AccountMeta::new(delegation_record.0, false),
53 AccountMeta::new(delegation_metadata.0, false),
54 AccountMeta::new_readonly(data_buffer, false),
55 AccountMeta::new(validator_fees_vault.0, false),
56 AccountMeta::new_readonly(system_program::id(), false),
57 ],
58 data: [
59 DlpDiscriminator::CommitFinalizeFromBuffer.to_vec(),
60 commit_args.to_bytes(),
61 ]
62 .concat(),
63 },
64 super::CommitPDAs {
65 delegation_record: delegation_record.0,
66 delegation_metadata: delegation_metadata.0,
67 validator_fees_vault: validator_fees_vault.0,
68 },
69 )
70}
71
72pub fn commit_finalize_from_buffer_size_budget(
78 delegated_account: AccountSizeClass,
79) -> u32 {
80 total_size_budget(&[
81 DLP_PROGRAM_DATA_SIZE_CLASS,
82 AccountSizeClass::Tiny, delegated_account, AccountSizeClass::Tiny, AccountSizeClass::Tiny, delegated_account, AccountSizeClass::Tiny, AccountSizeClass::Tiny, AccountSizeClass::Tiny, ])
91}