UNPKG

@cks-systems/manifest-sdk

Version:
45 lines (44 loc) 2.65 kB
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(); }); });