Skip to content

Commit

Permalink
token-utils: Add helper to mint a NFT (#217)
Browse files Browse the repository at this point in the history
* token-utils: Add helper to mint a NFT

* mintAuthority -> tempMintAuthority
  • Loading branch information
michaelhly committed Aug 30, 2021
1 parent 0c5e0de commit 51390aa
Showing 1 changed file with 55 additions and 0 deletions.
55 changes: 55 additions & 0 deletions packages/token-utils/src/instructions/nft.ts
@@ -0,0 +1,55 @@
import type { Provider, TransactionEnvelope } from "@saberhq/solana-contrib";
import { Token as SPLToken, TOKEN_PROGRAM_ID, u64 } from "@solana/spl-token";
import type { PublicKey, Signer } from "@solana/web3.js";

import { createInitMintInstructions, getOrCreateATA } from ".";

export const mintNFT = async (
provider: Provider,
mintKP: Signer,
owner: PublicKey = provider.wallet.publicKey
): Promise<TransactionEnvelope> => {
// Temporary mint authority
const tempMintAuthority = provider.wallet.publicKey;
// Mint for the NFT
const tx = await createInitMintInstructions({
provider,
mintKP,
decimals: 0,
mintAuthority: tempMintAuthority,
});
// Token account for the NFT
const { address, instruction } = await getOrCreateATA({
provider,
mint: mintKP.publicKey,
owner: owner,
payer: provider.wallet.publicKey,
});
if (instruction) {
tx.instructions.push(instruction);
}
// Mint to owner's ATA
tx.instructions.push(
SPLToken.createMintToInstruction(
TOKEN_PROGRAM_ID,
mintKP.publicKey,
address,
tempMintAuthority,
[],
new u64(1)
)
);
// Set mint authority of the NFT to NULL
tx.instructions.push(
SPLToken.createSetAuthorityInstruction(
TOKEN_PROGRAM_ID,
mintKP.publicKey,
null,
"MintTokens",
tempMintAuthority,
[]
)
);

return tx;
};

1 comment on commit 51390aa

@vercel
Copy link

@vercel vercel bot commented on 51390aa Aug 30, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.