diff --git a/token-swap/js/src/index.ts b/token-swap/js/src/index.ts index 12a5d9b8..2ea7b0e4 100644 --- a/token-swap/js/src/index.ts +++ b/token-swap/js/src/index.ts @@ -2,17 +2,21 @@ import assert from 'assert'; import BN from 'bn.js'; import {Buffer} from 'buffer'; import * as BufferLayout from '@solana/buffer-layout'; -import type {Connection, TransactionSignature} from '@solana/web3.js'; +import type { + ConfirmOptions, + Connection, + TransactionSignature, +} from '@solana/web3.js'; import { Account, PublicKey, SystemProgram, Transaction, TransactionInstruction, + sendAndConfirmTransaction, } from '@solana/web3.js'; import * as Layout from './layout'; -import {sendAndConfirmTransaction} from './util/send-and-confirm-transaction'; import {loadAccount} from './util/account'; export const TOKEN_SWAP_PROGRAM_ID: PublicKey = new PublicKey( @@ -365,6 +369,7 @@ export class TokenSwap { hostFeeDenominator: number, curveType: number, curveParameters?: Numberu64, + confirmOptions?: ConfirmOptions, ): Promise { let transaction; const tokenSwap = new TokenSwap( @@ -430,11 +435,10 @@ export class TokenSwap { transaction.add(instruction); await sendAndConfirmTransaction( - 'createAccount and InitializeSwap', connection, transaction, - payer, - tokenSwapAccount, + [payer, tokenSwapAccount], + confirmOptions, ); return tokenSwap; @@ -461,9 +465,9 @@ export class TokenSwap { userTransferAuthority: Account, amountIn: number | Numberu64, minimumAmountOut: number | Numberu64, + confirmOptions?: ConfirmOptions, ): Promise { return await sendAndConfirmTransaction( - 'swap', this.connection, new Transaction().add( TokenSwap.swapInstruction( @@ -483,8 +487,8 @@ export class TokenSwap { minimumAmountOut, ), ), - this.payer, - userTransferAuthority, + [this.payer, userTransferAuthority], + confirmOptions, ); } @@ -560,9 +564,9 @@ export class TokenSwap { poolTokenAmount: number | Numberu64, maximumTokenA: number | Numberu64, maximumTokenB: number | Numberu64, + confirmOptions?: ConfirmOptions, ): Promise { return await sendAndConfirmTransaction( - 'depositAllTokenTypes', this.connection, new Transaction().add( TokenSwap.depositAllTokenTypesInstruction( @@ -582,8 +586,8 @@ export class TokenSwap { maximumTokenB, ), ), - this.payer, - userTransferAuthority, + [this.payer, userTransferAuthority], + confirmOptions, ); } @@ -659,9 +663,9 @@ export class TokenSwap { poolTokenAmount: number | Numberu64, minimumTokenA: number | Numberu64, minimumTokenB: number | Numberu64, + confirmOptions?: ConfirmOptions, ): Promise { return await sendAndConfirmTransaction( - 'withdraw', this.connection, new Transaction().add( TokenSwap.withdrawAllTokenTypesInstruction( @@ -682,8 +686,8 @@ export class TokenSwap { minimumTokenB, ), ), - this.payer, - userTransferAuthority, + [this.payer, userTransferAuthority], + confirmOptions, ); } @@ -756,9 +760,9 @@ export class TokenSwap { userTransferAuthority: Account, sourceTokenAmount: number | Numberu64, minimumPoolTokenAmount: number | Numberu64, + confirmOptions?: ConfirmOptions, ): Promise { return await sendAndConfirmTransaction( - 'depositSingleTokenTypeExactAmountIn', this.connection, new Transaction().add( TokenSwap.depositSingleTokenTypeExactAmountInInstruction( @@ -776,8 +780,8 @@ export class TokenSwap { minimumPoolTokenAmount, ), ), - this.payer, - userTransferAuthority, + [this.payer, userTransferAuthority], + confirmOptions, ); } @@ -846,9 +850,9 @@ export class TokenSwap { userTransferAuthority: Account, destinationTokenAmount: number | Numberu64, maximumPoolTokenAmount: number | Numberu64, + confirmOptions?: ConfirmOptions, ): Promise { return await sendAndConfirmTransaction( - 'withdrawSingleTokenTypeExactAmountOut', this.connection, new Transaction().add( TokenSwap.withdrawSingleTokenTypeExactAmountOutInstruction( @@ -867,8 +871,8 @@ export class TokenSwap { maximumPoolTokenAmount, ), ), - this.payer, - userTransferAuthority, + [this.payer, userTransferAuthority], + confirmOptions, ); } diff --git a/token-swap/js/src/util/send-and-confirm-transaction.ts b/token-swap/js/src/util/send-and-confirm-transaction.ts deleted file mode 100644 index e040c931..00000000 --- a/token-swap/js/src/util/send-and-confirm-transaction.ts +++ /dev/null @@ -1,20 +0,0 @@ -import {sendAndConfirmTransaction as realSendAndConfirmTransaction} from '@solana/web3.js'; -import type { - Account, - Connection, - Transaction, - TransactionSignature, -} from '@solana/web3.js'; - -export function sendAndConfirmTransaction( - title: string, - connection: Connection, - transaction: Transaction, - ...signers: Array -): Promise { - return realSendAndConfirmTransaction(connection, transaction, signers, { - skipPreflight: false, - commitment: 'recent', - preflightCommitment: 'recent', - }); -} diff --git a/token-swap/js/test/token-swap-test.ts b/token-swap/js/test/token-swap-test.ts index 68bd97a6..a422bffd 100644 --- a/token-swap/js/test/token-swap-test.ts +++ b/token-swap/js/test/token-swap-test.ts @@ -4,11 +4,11 @@ import { PublicKey, SystemProgram, Transaction, + sendAndConfirmTransaction } from '@solana/web3.js'; import {AccountLayout, Token, TOKEN_PROGRAM_ID} from '@solana/spl-token'; import {TokenSwap, CurveType, TOKEN_SWAP_PROGRAM_ID} from '../src'; -import {sendAndConfirmTransaction} from '../src/util/send-and-confirm-transaction'; import {newAccountWithLamports} from '../src/util/new-account-with-lamports'; import {sleep} from '../src/util/sleep'; import {Numberu64} from '../src'; @@ -253,6 +253,10 @@ export async function depositAllTokenTypes(): Promise { console.log('Creating depositor pool token account'); const newAccountPool = await tokenPool.createAccount(owner.publicKey); + const confirmOptions = { + skipPreflight: true + } + console.log('Depositing into swap'); await tokenSwap.depositAllTokenTypes( userAccountA, @@ -262,6 +266,7 @@ export async function depositAllTokenTypes(): Promise { POOL_TOKEN_AMOUNT, tokenA, tokenB, + confirmOptions ); let info; @@ -314,6 +319,10 @@ export async function withdrawAllTokenTypes(): Promise { POOL_TOKEN_AMOUNT, ); + const confirmOptions = { + skipPreflight: true + } + console.log('Withdrawing pool tokens for A and B tokens'); await tokenSwap.withdrawAllTokenTypes( userAccountA, @@ -323,6 +332,7 @@ export async function withdrawAllTokenTypes(): Promise { POOL_TOKEN_AMOUNT, tokenA, tokenB, + confirmOptions ); //const poolMintInfo = await tokenPool.getMintInfo(); @@ -407,15 +417,17 @@ export async function createAccountAndSwapAtomic(): Promise { ), ); + const confirmOptions = { + skipPreflight: true + } + // Send the instructions console.log('sending big instruction'); await sendAndConfirmTransaction( - 'create account, approve transfer, swap', connection, transaction, - owner, - newAccount, - userTransferAuthority, + [owner, newAccount, userTransferAuthority], + confirmOptions ); let info; @@ -443,6 +455,10 @@ export async function swap(): Promise { ? await tokenPool.createAccount(owner.publicKey) : null; + const confirmOptions = { + skipPreflight: true + } + console.log('Swapping'); await tokenSwap.swap( userAccountA, @@ -453,6 +469,7 @@ export async function swap(): Promise { userTransferAuthority, SWAP_AMOUNT_IN, SWAP_AMOUNT_OUT, + confirmOptions ); await sleep(500); @@ -541,6 +558,10 @@ export async function depositSingleTokenTypeExactAmountIn(): Promise { console.log('Creating depositor pool token account'); const newAccountPool = await tokenPool.createAccount(owner.publicKey); + const confirmOptions = { + skipPreflight: true + } + console.log('Depositing token A into swap'); await tokenSwap.depositSingleTokenTypeExactAmountIn( userAccountA, @@ -548,6 +569,7 @@ export async function depositSingleTokenTypeExactAmountIn(): Promise { userTransferAuthority, depositAmount, poolTokenA, + confirmOptions ); let info; @@ -564,6 +586,7 @@ export async function depositSingleTokenTypeExactAmountIn(): Promise { userTransferAuthority, depositAmount, poolTokenB, + confirmOptions ); info = await mintB.getAccountInfo(userAccountB); @@ -625,6 +648,10 @@ export async function withdrawSingleTokenTypeExactAmountOut(): Promise { adjustedPoolTokenA + adjustedPoolTokenB, ); + const confirmOptions = { + skipPreflight: true + } + console.log('Withdrawing token A only'); await tokenSwap.withdrawSingleTokenTypeExactAmountOut( userAccountA, @@ -632,6 +659,7 @@ export async function withdrawSingleTokenTypeExactAmountOut(): Promise { userTransferAuthority, withdrawAmount, adjustedPoolTokenA, + confirmOptions ); let info; @@ -650,6 +678,7 @@ export async function withdrawSingleTokenTypeExactAmountOut(): Promise { userTransferAuthority, withdrawAmount, adjustedPoolTokenB, + confirmOptions ); info = await mintB.getAccountInfo(userAccountB);