@cks-systems/manifest-sdk
Version:
TypeScript SDK for Manifest
45 lines (44 loc) • 2.65 kB
JavaScript
import { Connection, Keypair, sendAndConfirmTransaction, Transaction, } from '@solana/web3.js';
import { ManifestClient } from '../src/client';
import { mintTo, createAssociatedTokenAccountIdempotent, getMint, createMint, } from '@solana/spl-token';
import { createGlobal } from './createGlobal';
import { Global } from '../src/global';
import { assert } from 'chai';
import { getGlobalAddress } from '../src/utils/global';
import { airdropSol } from '../src/utils/solana';
async function testGlobalDeposit() {
const connection = new Connection('http://127.0.0.1:8899');
const payerKeypair = Keypair.generate();
// Get SOL for rent.
await airdropSol(connection, payerKeypair.publicKey);
const tokenMint = await createMint(connection, payerKeypair, payerKeypair.publicKey, payerKeypair.publicKey, 9);
await createGlobal(connection, payerKeypair, tokenMint);
const global = (await Global.loadFromAddress({
connection,
address: getGlobalAddress(tokenMint),
}));
await depositGlobal(connection, payerKeypair, global.tokenMint(), 10, payerKeypair);
await global.reload(connection);
assert((await global.getGlobalBalanceTokens(connection, payerKeypair.publicKey)) ==
10, 'deposit global balance check');
assert(global.getGlobalBalanceTokensWithDecimals(payerKeypair.publicKey, 9) == 10, 'deposit global balance with decimals check');
global.prettyPrint();
}
export async function depositGlobal(connection, traderKeypair, mint, amountTokens, mintAuthorityKeypair) {
const globalAddTraderIx = ManifestClient.createGlobalAddTraderIx(traderKeypair.publicKey, mint);
const globalDepositIx = await ManifestClient.globalDepositIx(connection, traderKeypair.publicKey, mint, amountTokens);
const traderTokenAccount = await createAssociatedTokenAccountIdempotent(connection, traderKeypair, mint, traderKeypair.publicKey);
const mintDecimals = (await getMint(connection, mint)).decimals;
const amountAtoms = Math.ceil(amountTokens * 10 ** mintDecimals);
const mintSig = await mintTo(connection, traderKeypair, mint, traderTokenAccount, mintAuthorityKeypair, amountAtoms);
console.log(`Minted ${amountTokens} tokens to ${traderTokenAccount} in ${mintSig}`);
const signature = await sendAndConfirmTransaction(connection, new Transaction().add(globalAddTraderIx, globalDepositIx), [traderKeypair], {
commitment: 'confirmed',
});
console.log(`Global Add Trader & Deposited ${amountTokens} tokens in ${signature}`);
}
describe('Global Deposit test', () => {
it('Global Deposit', async () => {
await testGlobalDeposit();
});
});