dlp_api/instruction_builder/
commit_diff_from_buffer.rs1use borsh::to_vec;
2use dlp::{
3 args::CommitStateFromBufferArgs,
4 discriminator::DlpDiscriminator,
5 pda::{
6 commit_record_pda_from_delegated_account,
7 commit_state_pda_from_delegated_account,
8 delegation_metadata_pda_from_delegated_account,
9 delegation_record_pda_from_delegated_account,
10 program_config_from_program_id,
11 validator_fees_vault_pda_from_validator,
12 },
13 total_size_budget, AccountSizeClass, DLP_PROGRAM_DATA_SIZE_CLASS,
14};
15use solana_program::{
16 instruction::{AccountMeta, Instruction},
17 pubkey::Pubkey,
18 system_program,
19};
20
21pub fn commit_diff_from_buffer(
24 validator: Pubkey,
25 delegated_account: Pubkey,
26 delegated_account_owner: Pubkey,
27 commit_state_buffer: Pubkey,
28 commit_args: CommitStateFromBufferArgs,
29) -> Instruction {
30 let commit_args = to_vec(&commit_args).unwrap();
31 let delegation_record_pda =
32 delegation_record_pda_from_delegated_account(&delegated_account);
33 let commit_state_pda =
34 commit_state_pda_from_delegated_account(&delegated_account);
35 let commit_record_pda =
36 commit_record_pda_from_delegated_account(&delegated_account);
37 let validator_fees_vault_pda =
38 validator_fees_vault_pda_from_validator(&validator);
39 let delegation_metadata_pda =
40 delegation_metadata_pda_from_delegated_account(&delegated_account);
41 let program_config_pda =
42 program_config_from_program_id(&delegated_account_owner);
43 Instruction {
44 program_id: dlp::id(),
45 accounts: vec![
46 AccountMeta::new(validator, true),
47 AccountMeta::new_readonly(delegated_account, false),
48 AccountMeta::new(commit_state_pda, false),
49 AccountMeta::new(commit_record_pda, false),
50 AccountMeta::new_readonly(delegation_record_pda, false),
51 AccountMeta::new(delegation_metadata_pda, false),
52 AccountMeta::new_readonly(commit_state_buffer, false),
53 AccountMeta::new_readonly(validator_fees_vault_pda, false),
54 AccountMeta::new_readonly(program_config_pda, false),
55 AccountMeta::new_readonly(system_program::id(), false),
56 ],
57 data: [DlpDiscriminator::CommitDiffFromBuffer.to_vec(), commit_args]
58 .concat(),
59 }
60}
61
62pub fn commit_diff_from_buffer_size_budget(
68 delegated_account: AccountSizeClass,
69) -> u32 {
70 total_size_budget(&[
71 DLP_PROGRAM_DATA_SIZE_CLASS,
72 AccountSizeClass::Tiny, delegated_account, delegated_account, AccountSizeClass::Tiny, AccountSizeClass::Tiny, AccountSizeClass::Tiny, delegated_account, AccountSizeClass::Tiny, AccountSizeClass::Tiny, AccountSizeClass::Tiny, ])
83}