1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- import "../libraries/spl_token.sol";
- import "../libraries/mpl_metadata.sol";
- @program_id("F1ipperKF9EfD821ZbbYjS319LXYiBmjhzkkf5a26rC")
- contract nft_minter {
- @payer(payer)
- constructor() {}
- @mutableSigner(payer) // payer account
- @mutableSigner(mint) // mint account to be created
- @mutableAccount(metadata) // metadata account to be created
- @signer(mintAuthority) // mint authority for the mint account
- @account(metadataProgramId)
- @account(rentAddress)
- function createTokenMint(
- address freezeAuthority, // freeze authority for the mint account
- uint8 decimals, // decimals for the mint account
- string name, // name for the metadata account
- string symbol, // symbol for the metadata account
- string uri // uri for the metadata account
- ) external {
- // Invoke System Program to create a new account for the mint account and,
- // Invoke Token Program to initialize the mint account
- // Set mint authority, freeze authority, and decimals for the mint account
- SplToken.create_mint(
- tx.accounts.payer.key, // payer account
- tx.accounts.mint.key, // mint account
- tx.accounts.mintAuthority.key, // mint authority
- freezeAuthority, // freeze authority
- decimals // decimals
- );
- // Invoke Metadata Program to create a new account for the metadata account
- MplMetadata.create_metadata_account(
- tx.accounts.metadata.key, // metadata account
- tx.accounts.mint.key, // mint account
- tx.accounts.mintAuthority.key, // mint authority
- tx.accounts.payer.key, // payer
- tx.accounts.payer.key, // update authority (of the metadata account)
- name, // name
- symbol, // symbol
- uri, // uri (off-chain metadata json)
- tx.accounts.metadataProgramId.key,
- tx.accounts.rentAddress.key
- );
- }
- @mutableSigner(payer)
- @mutableAccount(tokenAccount)
- @account(owner)
- @mutableAccount(mint)
- function mintTo() external {
- // Create an associated token account for the owner to receive the minted token
- SplToken.create_associated_token_account(
- tx.accounts.payer.key, // payer account
- tx.accounts.tokenAccount.key, // associated token account address
- tx.accounts.mint.key, // mint account
- tx.accounts.owner.key // owner account
- );
- // Mint 1 token to the associated token account
- SplToken.mint_to(
- tx.accounts.mint.key, // mint account
- tx.accounts.tokenAccount.key, // token account
- tx.accounts.payer.key, // mint authority
- 1 // amount
- );
- // Remove mint authority from mint account
- SplToken.remove_mint_authority(
- tx.accounts.mint.key, // mint
- tx.accounts.payer.key // mint authority
- );
- }
- }
|