sablier_network_program/instructions/
worker_claim.rs

1use {
2    crate::{constants::*, state::*},
3    anchor_lang::prelude::*,
4};
5
6#[derive(Accounts)]
7#[instruction(amount: u64)]
8pub struct WorkerClaim<'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_WORKER,
18            worker.id.to_be_bytes().as_ref()
19        ],
20        bump,
21        has_one = authority
22    )]
23    pub worker: Account<'info, Worker>,
24}
25
26pub fn handler(ctx: Context<WorkerClaim>, amount: u64) -> Result<()> {
27    // Get accounts
28    let pay_to = &mut ctx.accounts.pay_to;
29    let worker = &mut ctx.accounts.worker;
30
31    // Decrement the worker's commission balance.
32    worker.commission_balance -= amount;
33
34    // Transfer commission to the worker.
35    worker.sub_lamports(amount)?;
36    pay_to.add_lamports(amount)?;
37
38    Ok(())
39}