sablier_network_program/instructions/
worker_utils_create.rs1use 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}