solana-program-library/token/js/test/e2e/create.test.ts

146 lines
5.0 KiB
TypeScript

import { Connection, Keypair, PublicKey, Signer } from '@solana/web3.js';
import chai, { expect } from 'chai';
import chaiAsPromised from 'chai-as-promised';
chai.use(chaiAsPromised);
import {
ASSOCIATED_TOKEN_PROGRAM_ID,
createMint,
getMint,
createAccount,
getAccount,
getAssociatedTokenAddress,
} from '../../src';
import { TEST_PROGRAM_ID, newAccountWithLamports, getConnection } from '../common';
const TEST_TOKEN_DECIMALS = 2;
describe('createMint', () => {
it('works', async () => {
const connection = await getConnection();
const payer = await newAccountWithLamports(connection, 1000000000);
const testMintAuthority = Keypair.generate();
const mintKeypair = Keypair.generate();
const mint = await createMint(
connection,
payer,
testMintAuthority.publicKey,
testMintAuthority.publicKey,
TEST_TOKEN_DECIMALS,
mintKeypair,
undefined,
TEST_PROGRAM_ID
);
const mintInfo = await getMint(connection, mint, undefined, TEST_PROGRAM_ID);
expect(mintInfo.mintAuthority).to.eql(testMintAuthority.publicKey);
expect(mintInfo.supply).to.eql(BigInt(0));
expect(mintInfo.decimals).to.eql(TEST_TOKEN_DECIMALS);
expect(mintInfo.isInitialized).to.be.true;
expect(mintInfo.freezeAuthority).to.eql(testMintAuthority.publicKey);
});
});
describe('createAccount', () => {
let connection: Connection;
let payer: Signer;
let mint: PublicKey;
before(async () => {
connection = await getConnection();
payer = await newAccountWithLamports(connection, 1000000000);
const mintAuthority = Keypair.generate();
const mintKeypair = Keypair.generate();
mint = await createMint(
connection,
payer,
mintAuthority.publicKey,
mintAuthority.publicKey,
TEST_TOKEN_DECIMALS,
mintKeypair,
undefined,
TEST_PROGRAM_ID
);
}),
it('auxiliary token account', async () => {
const owner = Keypair.generate();
const account = await createAccount(
connection,
payer,
mint,
owner.publicKey,
Keypair.generate(),
undefined,
TEST_PROGRAM_ID
);
const accountInfo = await getAccount(connection, account, undefined, TEST_PROGRAM_ID);
expect(accountInfo.mint).to.eql(mint);
expect(accountInfo.owner).to.eql(owner.publicKey);
expect(accountInfo.amount).to.eql(BigInt(0));
expect(accountInfo.delegate).to.be.null;
expect(accountInfo.delegatedAmount).to.eql(BigInt(0));
expect(accountInfo.isInitialized).to.be.true;
expect(accountInfo.isFrozen).to.be.false;
expect(accountInfo.isNative).to.be.false;
expect(accountInfo.rentExemptReserve).to.be.null;
expect(accountInfo.closeAuthority).to.be.null;
// you can create as many accounts as with same owner
const account2 = await createAccount(
connection,
payer,
mint,
owner.publicKey,
Keypair.generate(),
undefined,
TEST_PROGRAM_ID
);
expect(account2).to.not.eql(account);
}),
it('associated token account', async () => {
const owner = Keypair.generate();
const associatedAddress = await getAssociatedTokenAddress(
mint,
owner.publicKey,
false,
TEST_PROGRAM_ID,
ASSOCIATED_TOKEN_PROGRAM_ID
);
// associated account shouldn't exist
const info = await connection.getAccountInfo(associatedAddress);
expect(info).to.be.null;
const createdAddress = await createAccount(
connection,
payer,
mint,
owner.publicKey,
undefined, // uses ATA by default
undefined,
TEST_PROGRAM_ID
);
expect(createdAddress).to.eql(associatedAddress);
const accountInfo = await getAccount(connection, associatedAddress, undefined, TEST_PROGRAM_ID);
expect(accountInfo).to.not.be.null;
expect(accountInfo.mint).to.eql(mint);
expect(accountInfo.owner).to.eql(owner.publicKey);
expect(accountInfo.amount).to.eql(BigInt(0));
// creating again should cause TX error for the associated token account
expect(
createAccount(
connection,
payer,
mint,
owner.publicKey,
undefined, // uses ATA by default
undefined,
TEST_PROGRAM_ID
)
).to.be.rejected;
});
});