diff --git a/package.json b/package.json index 445e7a3fd..6f90ea7ac 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@cardinal/token-manager", - "version": "1.5.0", + "version": "1.5.4", "description": "Cardinal token manager SDK", "keywords": [ "solana", diff --git a/src/programs/tokenManager/utils.ts b/src/programs/tokenManager/utils.ts index 9c952612c..4aa11fb63 100644 --- a/src/programs/tokenManager/utils.ts +++ b/src/programs/tokenManager/utils.ts @@ -58,34 +58,40 @@ export const withRemainingAccountsForPayment = async ( issuerId: PublicKey, paymentManagerId: PublicKey, receiptMint?: PublicKey | null, - payer = wallet.publicKey + payer = wallet.publicKey, + excludeCreators?: string[], + skipRoyaltiesAccounts?: boolean ): Promise<[PublicKey, PublicKey, AccountMeta[]]> => { - const royaltiesRemainingAccounts = - await withRemainingAccountsForHanldePaymentWithRoyalties( - transaction, - connection, - wallet, - mint, - paymentMint - ); + const royaltiesRemainingAccounts = !skipRoyaltiesAccounts + ? await withRemainingAccountsForHanldePaymentWithRoyalties( + transaction, + connection, + wallet, + mint, + paymentMint, + excludeCreators + ) + : []; const mintMetadataId = await Metadata.getPDA(mint); - const paymentRemainingAccounts = [ - { - pubkey: paymentMint, - isSigner: false, - isWritable: true, - }, - { - pubkey: mint, - isSigner: false, - isWritable: true, - }, - { - pubkey: mintMetadataId, - isSigner: false, - isWritable: true, - }, - ]; + const paymentRemainingAccounts = !skipRoyaltiesAccounts + ? [ + { + pubkey: paymentMint, + isSigner: false, + isWritable: true, + }, + { + pubkey: mint, + isSigner: false, + isWritable: true, + }, + { + pubkey: mintMetadataId, + isSigner: false, + isWritable: true, + }, + ] + : []; if (receiptMint) { const receiptMintLargestAccount = await connection.getTokenLargestAccounts( @@ -252,7 +258,8 @@ export const withRemainingAccountsForHanldePaymentWithRoyalties = async ( connection: Connection, wallet: Wallet, mint: PublicKey, - paymentMint: PublicKey + paymentMint: PublicKey, + excludeCreators?: string[] ): Promise => { const creatorsRemainingAccounts: AccountMeta[] = []; const mintMetadataId = await Metadata.getPDA(mint); @@ -270,14 +277,17 @@ export const withRemainingAccountsForHanldePaymentWithRoyalties = async ( if (creator.share !== 0) { const creatorAddress = new PublicKey(creator.address); const creatorMintTokenAccount = - await withFindOrInitAssociatedTokenAccount( - transaction, - connection, - paymentMint, - creatorAddress, - wallet.publicKey, - true - ); + !excludeCreators || + !excludeCreators.includes(creator.address.toString()) + ? await withFindOrInitAssociatedTokenAccount( + transaction, + connection, + paymentMint, + creatorAddress, + wallet.publicKey, + true + ) + : await findAta(mint, wallet.publicKey, true); creatorsRemainingAccounts.push({ pubkey: creatorMintTokenAccount, isSigner: false,