1#![allow(deprecated)]
3use crate::prelude::*;
4use crate::solana_program::pubkey::Pubkey;
5
6pub use crate::solana_program::system_program::ID;
7
8#[derive(Debug, Clone)]
9pub struct System;
10
11impl anchor_lang::Id for System {
12 fn id() -> Pubkey {
13 ID
14 }
15}
16
17pub fn advance_nonce_account<'info>(
18 ctx: CpiContext<'_, '_, '_, 'info, AdvanceNonceAccount<'info>>,
19) -> Result<()> {
20 let ix = crate::solana_program::system_instruction::advance_nonce_account(
21 ctx.accounts.nonce.key,
22 ctx.accounts.authorized.key,
23 );
24 crate::solana_program::program::invoke_signed(
25 &ix,
26 &[
27 ctx.accounts.nonce,
28 ctx.accounts.recent_blockhashes,
29 ctx.accounts.authorized,
30 ],
31 ctx.signer_seeds,
32 )
33 .map_err(Into::into)
34}
35
36#[derive(Accounts)]
37pub struct AdvanceNonceAccount<'info> {
38 pub nonce: AccountInfo<'info>,
39 pub authorized: AccountInfo<'info>,
40 pub recent_blockhashes: AccountInfo<'info>,
41}
42
43pub fn allocate<'info>(
44 ctx: CpiContext<'_, '_, '_, 'info, Allocate<'info>>,
45 space: u64,
46) -> Result<()> {
47 let ix = crate::solana_program::system_instruction::allocate(
48 ctx.accounts.account_to_allocate.key,
49 space,
50 );
51 crate::solana_program::program::invoke_signed(
52 &ix,
53 &[ctx.accounts.account_to_allocate],
54 ctx.signer_seeds,
55 )
56 .map_err(Into::into)
57}
58
59#[derive(Accounts)]
60pub struct Allocate<'info> {
61 pub account_to_allocate: AccountInfo<'info>,
62}
63
64pub fn allocate_with_seed<'info>(
65 ctx: CpiContext<'_, '_, '_, 'info, AllocateWithSeed<'info>>,
66 seed: &str,
67 space: u64,
68 owner: &Pubkey,
69) -> Result<()> {
70 let ix = crate::solana_program::system_instruction::allocate_with_seed(
71 ctx.accounts.account_to_allocate.key,
72 ctx.accounts.base.key,
73 seed,
74 space,
75 owner,
76 );
77 crate::solana_program::program::invoke_signed(
78 &ix,
79 &[ctx.accounts.account_to_allocate, ctx.accounts.base],
80 ctx.signer_seeds,
81 )
82 .map_err(Into::into)
83}
84
85#[derive(Accounts)]
86pub struct AllocateWithSeed<'info> {
87 pub account_to_allocate: AccountInfo<'info>,
88 pub base: AccountInfo<'info>,
89}
90
91pub fn assign<'info>(
92 ctx: CpiContext<'_, '_, '_, 'info, Assign<'info>>,
93 owner: &Pubkey,
94) -> Result<()> {
95 let ix = crate::solana_program::system_instruction::assign(
96 ctx.accounts.account_to_assign.key,
97 owner,
98 );
99 crate::solana_program::program::invoke_signed(
100 &ix,
101 &[ctx.accounts.account_to_assign],
102 ctx.signer_seeds,
103 )
104 .map_err(Into::into)
105}
106
107#[derive(Accounts)]
108pub struct Assign<'info> {
109 pub account_to_assign: AccountInfo<'info>,
110}
111
112pub fn assign_with_seed<'info>(
113 ctx: CpiContext<'_, '_, '_, 'info, AssignWithSeed<'info>>,
114 seed: &str,
115 owner: &Pubkey,
116) -> Result<()> {
117 let ix = crate::solana_program::system_instruction::assign_with_seed(
118 ctx.accounts.account_to_assign.key,
119 ctx.accounts.base.key,
120 seed,
121 owner,
122 );
123 crate::solana_program::program::invoke_signed(
124 &ix,
125 &[ctx.accounts.account_to_assign, ctx.accounts.base],
126 ctx.signer_seeds,
127 )
128 .map_err(Into::into)
129}
130
131#[derive(Accounts)]
132pub struct AssignWithSeed<'info> {
133 pub account_to_assign: AccountInfo<'info>,
134 pub base: AccountInfo<'info>,
135}
136
137pub fn authorize_nonce_account<'info>(
138 ctx: CpiContext<'_, '_, '_, 'info, AuthorizeNonceAccount<'info>>,
139 new_authority: &Pubkey,
140) -> Result<()> {
141 let ix = crate::solana_program::system_instruction::authorize_nonce_account(
142 ctx.accounts.nonce.key,
143 ctx.accounts.authorized.key,
144 new_authority,
145 );
146 crate::solana_program::program::invoke_signed(
147 &ix,
148 &[ctx.accounts.nonce, ctx.accounts.authorized],
149 ctx.signer_seeds,
150 )
151 .map_err(Into::into)
152}
153
154#[derive(Accounts)]
155pub struct AuthorizeNonceAccount<'info> {
156 pub nonce: AccountInfo<'info>,
157 pub authorized: AccountInfo<'info>,
158}
159
160pub fn create_account<'info>(
161 ctx: CpiContext<'_, '_, '_, 'info, CreateAccount<'info>>,
162 lamports: u64,
163 space: u64,
164 owner: &Pubkey,
165) -> Result<()> {
166 let ix = crate::solana_program::system_instruction::create_account(
167 ctx.accounts.from.key,
168 ctx.accounts.to.key,
169 lamports,
170 space,
171 owner,
172 );
173 crate::solana_program::program::invoke_signed(
174 &ix,
175 &[ctx.accounts.from, ctx.accounts.to],
176 ctx.signer_seeds,
177 )
178 .map_err(Into::into)
179}
180
181#[derive(Accounts)]
182pub struct CreateAccount<'info> {
183 pub from: AccountInfo<'info>,
184 pub to: AccountInfo<'info>,
185}
186
187pub fn create_account_with_seed<'info>(
188 ctx: CpiContext<'_, '_, '_, 'info, CreateAccountWithSeed<'info>>,
189 seed: &str,
190 lamports: u64,
191 space: u64,
192 owner: &Pubkey,
193) -> Result<()> {
194 let ix = crate::solana_program::system_instruction::create_account_with_seed(
195 ctx.accounts.from.key,
196 ctx.accounts.to.key,
197 ctx.accounts.base.key,
198 seed,
199 lamports,
200 space,
201 owner,
202 );
203 crate::solana_program::program::invoke_signed(
204 &ix,
205 &[ctx.accounts.from, ctx.accounts.to, ctx.accounts.base],
206 ctx.signer_seeds,
207 )
208 .map_err(Into::into)
209}
210
211#[derive(Accounts)]
212pub struct CreateAccountWithSeed<'info> {
213 pub from: AccountInfo<'info>,
214 pub to: AccountInfo<'info>,
215 pub base: AccountInfo<'info>,
216}
217
218pub fn create_nonce_account<'info>(
219 ctx: CpiContext<'_, '_, '_, 'info, CreateNonceAccount<'info>>,
220 lamports: u64,
221 authority: &Pubkey,
222) -> Result<()> {
223 let ixs = crate::solana_program::system_instruction::create_nonce_account(
224 ctx.accounts.from.key,
225 ctx.accounts.nonce.key,
226 authority,
227 lamports,
228 );
229 crate::solana_program::program::invoke_signed(
230 &ixs[0],
231 &[ctx.accounts.from, ctx.accounts.nonce.clone()],
232 ctx.signer_seeds,
233 )?;
234
235 crate::solana_program::program::invoke_signed(
236 &ixs[1],
237 &[
238 ctx.accounts.nonce,
239 ctx.accounts.recent_blockhashes,
240 ctx.accounts.rent,
241 ],
242 ctx.signer_seeds,
243 )
244 .map_err(Into::into)
245}
246
247#[derive(Accounts)]
248pub struct CreateNonceAccount<'info> {
249 pub from: AccountInfo<'info>,
250 pub nonce: AccountInfo<'info>,
251 pub recent_blockhashes: AccountInfo<'info>,
252 pub rent: AccountInfo<'info>,
253}
254
255pub fn create_nonce_account_with_seed<'info>(
256 ctx: CpiContext<'_, '_, '_, 'info, CreateNonceAccountWithSeed<'info>>,
257 lamports: u64,
258 seed: &str,
259 authority: &Pubkey,
260) -> Result<()> {
261 let ixs = crate::solana_program::system_instruction::create_nonce_account_with_seed(
262 ctx.accounts.from.key,
263 ctx.accounts.nonce.key,
264 ctx.accounts.base.key,
265 seed,
266 authority,
267 lamports,
268 );
269 crate::solana_program::program::invoke_signed(
270 &ixs[0],
271 &[
272 ctx.accounts.from,
273 ctx.accounts.nonce.clone(),
274 ctx.accounts.base,
275 ],
276 ctx.signer_seeds,
277 )?;
278
279 crate::solana_program::program::invoke_signed(
280 &ixs[1],
281 &[
282 ctx.accounts.nonce,
283 ctx.accounts.recent_blockhashes,
284 ctx.accounts.rent,
285 ],
286 ctx.signer_seeds,
287 )
288 .map_err(Into::into)
289}
290
291#[derive(Accounts)]
292pub struct CreateNonceAccountWithSeed<'info> {
293 pub from: AccountInfo<'info>,
294 pub nonce: AccountInfo<'info>,
295 pub base: AccountInfo<'info>,
296 pub recent_blockhashes: AccountInfo<'info>,
297 pub rent: AccountInfo<'info>,
298}
299
300pub fn transfer<'info>(
301 ctx: CpiContext<'_, '_, '_, 'info, Transfer<'info>>,
302 lamports: u64,
303) -> Result<()> {
304 let ix = crate::solana_program::system_instruction::transfer(
305 ctx.accounts.from.key,
306 ctx.accounts.to.key,
307 lamports,
308 );
309 crate::solana_program::program::invoke_signed(
310 &ix,
311 &[ctx.accounts.from, ctx.accounts.to],
312 ctx.signer_seeds,
313 )
314 .map_err(Into::into)
315}
316
317#[derive(Accounts)]
318pub struct Transfer<'info> {
319 pub from: AccountInfo<'info>,
320 pub to: AccountInfo<'info>,
321}
322
323pub fn transfer_with_seed<'info>(
324 ctx: CpiContext<'_, '_, '_, 'info, TransferWithSeed<'info>>,
325 from_seed: String,
326 from_owner: &Pubkey,
327 lamports: u64,
328) -> Result<()> {
329 let ix = crate::solana_program::system_instruction::transfer_with_seed(
330 ctx.accounts.from.key,
331 ctx.accounts.base.key,
332 from_seed,
333 from_owner,
334 ctx.accounts.to.key,
335 lamports,
336 );
337 crate::solana_program::program::invoke_signed(
338 &ix,
339 &[ctx.accounts.from, ctx.accounts.base, ctx.accounts.to],
340 ctx.signer_seeds,
341 )
342 .map_err(Into::into)
343}
344
345#[derive(Accounts)]
346pub struct TransferWithSeed<'info> {
347 pub from: AccountInfo<'info>,
348 pub base: AccountInfo<'info>,
349 pub to: AccountInfo<'info>,
350}
351
352pub fn withdraw_nonce_account<'info>(
353 ctx: CpiContext<'_, '_, '_, 'info, WithdrawNonceAccount<'info>>,
354 lamports: u64,
355) -> Result<()> {
356 let ix = crate::solana_program::system_instruction::withdraw_nonce_account(
357 ctx.accounts.nonce.key,
358 ctx.accounts.authorized.key,
359 ctx.accounts.to.key,
360 lamports,
361 );
362 crate::solana_program::program::invoke_signed(
363 &ix,
364 &[
365 ctx.accounts.nonce,
366 ctx.accounts.to,
367 ctx.accounts.recent_blockhashes,
368 ctx.accounts.rent,
369 ctx.accounts.authorized,
370 ],
371 ctx.signer_seeds,
372 )
373 .map_err(Into::into)
374}
375
376#[derive(Accounts)]
377pub struct WithdrawNonceAccount<'info> {
378 pub nonce: AccountInfo<'info>,
379 pub to: AccountInfo<'info>,
380 pub recent_blockhashes: AccountInfo<'info>,
381 pub rent: AccountInfo<'info>,
382 pub authorized: AccountInfo<'info>,
383}