pub struct CreateMint<'a, 'b: 'a> {
pub token_program_id: &'a Pubkey,
pub payer: CpiAuthority<'a, 'b>,
pub mint: CpiAuthority<'a, 'b>,
pub mint_authority: &'a Pubkey,
pub decimals: u8,
pub freeze_authority: Option<&'a Pubkey>,
pub extensions: InitializeMintExtensions<'a>,
}Expand description
Arguments to create a mint account. This method creates an account for one of the Token programs and initializes it as a mint.
§Example
use sealevel_tools::{
account_info::{
try_next_enumerated_account, try_next_enumerated_account_info, TokenProgram,
AccountInfoConstraints, Account, Signer,
},
cpi::token_program::{CreateMint, InitializeMetadataPointerData, InitializeMintExtensions},
entrypoint::{NoStdAccountInfo, ProgramResult},
pubkey::Pubkey,
};
fn process_instruction(
program_id: &Pubkey,
accounts: &[NoStdAccountInfo],
instruction_data: &[u8],
) -> ProgramResult {
let mut accounts_iter = accounts.iter().enumerate();
// Next account must writable signer (A.K.A. our payer).
let (_, payer) =
try_next_enumerated_account::<Signer<true>>(&mut accounts_iter, Default::default())?;
let (new_mint_addr, new_mint_bump) =
Pubkey::find_program_address(&[b"mint"], program_id);
// Next account must be writable data account matching PDA address.
let (_, new_mint_account) = try_next_enumerated_account::<Account<true>>(
&mut accounts_iter,
AccountInfoConstraints {
key: Some(&new_mint_addr),
..Default::default()
},
)?;
// Next account is the mint authority.
let (_, mint_authority) =
try_next_enumerated_account_info(&mut accounts_iter, Default::default())?;
// Next account is which token program to use.
let (_, token_program) =
try_next_enumerated_account::<TokenProgram>(&mut accounts_iter, Default::default())?;
CreateMint {
token_program_id: token_program.key(),
payer: payer.as_cpi_authority(),
mint: new_mint_account.as_cpi_authority(Some(&[b"mint", &[new_mint_bump]])),
mint_authority: mint_authority.key(),
decimals: 9,
freeze_authority: None,
extensions: InitializeMintExtensions {
metadata_pointer: Some(InitializeMetadataPointerData {
authority: Some(mint_authority.key()),
metadata: new_mint_account.key(),
}),
non_transferable: true,
..Default::default()
}
}
.try_into_invoke()?;
Ok(())
}Fields§
§token_program_id: &'a Pubkey§payer: CpiAuthority<'a, 'b>§mint: CpiAuthority<'a, 'b>§decimals: u8§extensions: InitializeMintExtensions<'a>Implementations§
Source§impl<'a, 'b: 'a> CreateMint<'a, 'b>
impl<'a, 'b: 'a> CreateMint<'a, 'b>
Sourcepub fn try_into_invoke(self) -> Result<Account<'b, true>, ProgramError>
pub fn try_into_invoke(self) -> Result<Account<'b, true>, ProgramError>
Try to consume arguments to perform CPI calls.
§Notes
Extension CPI calls are optional and will only be invoked when Some is provided for any of the optional extension arguments. See InitializeMintExtensions for more information.
Trait Implementations§
Source§impl<'a, 'b: 'a> Clone for CreateMint<'a, 'b>
impl<'a, 'b: 'a> Clone for CreateMint<'a, 'b>
impl<'a, 'b: 'a> Eq for CreateMint<'a, 'b>
Source§impl<'a, 'b: 'a> PartialEq for CreateMint<'a, 'b>
impl<'a, 'b: 'a> PartialEq for CreateMint<'a, 'b>
impl<'a, 'b: 'a> StructuralPartialEq for CreateMint<'a, 'b>
Auto Trait Implementations§
impl<'a, 'b> !Send for CreateMint<'a, 'b>
impl<'a, 'b> !Sync for CreateMint<'a, 'b>
impl<'a, 'b> Freeze for CreateMint<'a, 'b>
impl<'a, 'b> RefUnwindSafe for CreateMint<'a, 'b>
impl<'a, 'b> Unpin for CreateMint<'a, 'b>
impl<'a, 'b> UnsafeUnpin for CreateMint<'a, 'b>
impl<'a, 'b> UnwindSafe for CreateMint<'a, 'b>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more