sablier_network_program/instructions/
worker_utils_create.rs

1use anchor_lang::prelude::*;
2
3use crate::{
4    constants::{SEED_FEE, SEED_PENALTY, SEED_REGISTRY, SEED_WORKER},
5    Fee, FeeAccount, Penalty, PenaltyAccount, Registry, Worker,
6};
7
8#[derive(Accounts)]
9pub struct WorkerUtilsCreate<'info> {
10    #[account(mut)]
11    pub authority: Signer<'info>,
12
13    #[account(
14        seeds = [
15            SEED_WORKER,
16            (registry.total_workers - 1).to_be_bytes().as_ref(),
17        ],
18        bump = worker.bump,
19    )]
20    pub worker: Account<'info, Worker>,
21
22    #[account(
23        seeds = [SEED_REGISTRY],
24        bump = registry.bump,
25    )]
26    pub registry: Account<'info, Registry>,
27
28    #[account(
29        init,
30        seeds = [
31            SEED_FEE,
32            worker.key().as_ref(),
33        ],
34        bump,
35        payer = authority,
36        space = 8 + Fee::INIT_SPACE,
37    )]
38    pub fee: Account<'info, Fee>,
39
40    #[account(
41        init,
42        seeds = [
43            SEED_PENALTY,
44            worker.key().as_ref(),
45        ],
46        bump,
47        payer = authority,
48        space = 8 + Penalty::INIT_SPACE,
49    )]
50    pub penalty: Account<'info, Penalty>,
51
52    pub system_program: Program<'info, System>,
53}
54
55pub fn handler(ctx: Context<WorkerUtilsCreate>) -> Result<()> {
56    let worker = &mut ctx.accounts.worker;
57    let fee = &mut ctx.accounts.fee;
58    let penalty = &mut ctx.accounts.penalty;
59
60    fee.init(worker.key(), ctx.bumps.fee)?;
61    penalty.init(worker.key(), ctx.bumps.penalty)?;
62
63    Ok(())
64}