|
@@ -46,23 +46,23 @@ const CreateTokenArgsSchema = new Map([
|
|
|
['token_title', 'string'],
|
|
|
['token_symbol', 'string'],
|
|
|
['token_uri', 'string'],
|
|
|
+ ['token_decimals', 'u8'],
|
|
|
]
|
|
|
}
|
|
|
]
|
|
|
]);
|
|
|
|
|
|
|
|
|
-describe("Create an SPL Token!", async () => {
|
|
|
+describe("Create Tokens!", async () => {
|
|
|
|
|
|
// const connection = new Connection(`http://localhost:8899`, 'confirmed');
|
|
|
const connection = new Connection(`https://api.devnet.solana.com/`, 'confirmed');
|
|
|
const payer = createKeypairFromFile(require('os').homedir() + '/.config/solana/id.json');
|
|
|
const program = createKeypairFromFile('./program/target/deploy/program-keypair.json');
|
|
|
|
|
|
- const mintKeypair: Keypair = Keypair.generate();
|
|
|
- console.log(`New token: ${mintKeypair.publicKey}`);
|
|
|
+ it("Create an SPL Token!", async () => {
|
|
|
|
|
|
- it("Create!", async () => {
|
|
|
+ const mintKeypair: Keypair = Keypair.generate();
|
|
|
|
|
|
const metadataAddress = (PublicKey.findProgramAddressSync(
|
|
|
[
|
|
@@ -73,10 +73,13 @@ describe("Create an SPL Token!", async () => {
|
|
|
TOKEN_METADATA_PROGRAM_ID
|
|
|
))[0];
|
|
|
|
|
|
- const metadataInstructionData = new CreateTokenArgs({
|
|
|
+ // SPL Token default = 9 decimals
|
|
|
+ //
|
|
|
+ const instructionData = new CreateTokenArgs({
|
|
|
token_title: "Solana Gold",
|
|
|
token_symbol: "GOLDSOL",
|
|
|
token_uri: "https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/spl-token.json",
|
|
|
+ token_decimals: 9,
|
|
|
});
|
|
|
|
|
|
let ix = new TransactionInstruction({
|
|
@@ -91,7 +94,55 @@ describe("Create an SPL Token!", async () => {
|
|
|
{ pubkey: TOKEN_METADATA_PROGRAM_ID, isSigner: false, isWritable: false }, // Token metadata program
|
|
|
],
|
|
|
programId: program.publicKey,
|
|
|
- data: metadataInstructionData.toBuffer(),
|
|
|
+ data: instructionData.toBuffer(),
|
|
|
+ });
|
|
|
+
|
|
|
+ const sx = await sendAndConfirmTransaction(
|
|
|
+ connection,
|
|
|
+ new Transaction().add(ix),
|
|
|
+ [payer, mintKeypair]
|
|
|
+ );
|
|
|
+
|
|
|
+ console.log("Success!");
|
|
|
+ console.log(` Mint Address: ${mintKeypair.publicKey}`);
|
|
|
+ console.log(` Tx Signature: ${sx}`);
|
|
|
+ });
|
|
|
+
|
|
|
+ it("Create an NFT!", async () => {
|
|
|
+
|
|
|
+ const mintKeypair: Keypair = Keypair.generate();
|
|
|
+
|
|
|
+ const metadataAddress = (PublicKey.findProgramAddressSync(
|
|
|
+ [
|
|
|
+ Buffer.from("metadata"),
|
|
|
+ TOKEN_METADATA_PROGRAM_ID.toBuffer(),
|
|
|
+ mintKeypair.publicKey.toBuffer(),
|
|
|
+ ],
|
|
|
+ TOKEN_METADATA_PROGRAM_ID
|
|
|
+ ))[0];
|
|
|
+
|
|
|
+ // NFT default = 0 decimals
|
|
|
+ //
|
|
|
+ const instructionData = new CreateTokenArgs({
|
|
|
+ token_title: "Homer NFT",
|
|
|
+ token_symbol: "HOMR",
|
|
|
+ token_uri: "https://raw.githubusercontent.com/solana-developers/program-examples/new-examples/tokens/tokens/.assets/nft.json",
|
|
|
+ token_decimals: 9,
|
|
|
+ });
|
|
|
+
|
|
|
+ let ix = new TransactionInstruction({
|
|
|
+ keys: [
|
|
|
+ { pubkey: mintKeypair.publicKey, isSigner: true, isWritable: true }, // Mint account
|
|
|
+ { pubkey: payer.publicKey, isSigner: false, isWritable: true }, // Mint authority account
|
|
|
+ { pubkey: metadataAddress, isSigner: false, isWritable: true }, // Metadata account
|
|
|
+ { pubkey: payer.publicKey, isSigner: true, isWritable: true }, // Payer
|
|
|
+ { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, // Rent account
|
|
|
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // System program
|
|
|
+ { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // Token program
|
|
|
+ { pubkey: TOKEN_METADATA_PROGRAM_ID, isSigner: false, isWritable: false }, // Token metadata program
|
|
|
+ ],
|
|
|
+ programId: program.publicKey,
|
|
|
+ data: instructionData.toBuffer(),
|
|
|
});
|
|
|
|
|
|
const sx = await sendAndConfirmTransaction(
|