sablier_network_program/instructions/
delegation_claim.rs

1use {
2    crate::{constants::*, state::*},
3    anchor_lang::prelude::*,
4};
5
6#[derive(Accounts)]
7#[instruction(amount: u64)]
8pub struct DelegationClaim<'info> {
9    pub authority: Signer<'info>,
10
11    #[account(mut)]
12    pub pay_to: SystemAccount<'info>,
13
14    #[account(
15        mut,
16        seeds = [
17            SEED_DELEGATION,
18            delegation.worker.as_ref(),
19            delegation.id.to_be_bytes().as_ref(),
20        ],
21        bump,
22        has_one = authority,
23    )]
24    pub delegation: Account<'info, Delegation>,
25}
26
27pub fn handler(ctx: Context<DelegationClaim>, amount: u64) -> Result<()> {
28    // Get accounts.
29    let pay_to = &mut ctx.accounts.pay_to;
30    let delegation = &mut ctx.accounts.delegation;
31
32    // Decrement the delegation's claimable balance.
33    delegation.yield_balance -= amount;
34
35    // Transfer commission to the worker.
36    delegation.sub_lamports(amount)?;
37    pay_to.add_lamports(amount)?;
38
39    Ok(())
40}