flipmeme-sdk 1.2.0 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +41 -20
- package/dist/index.d.ts +41 -20
- package/dist/index.js +203 -154
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +176 -133
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/evm/index.ts","../src/solana/index.ts","../src/types.ts","../src/solana/idls/flipmeme.json","../src/constants.ts","../src/solana/accounts.ts","../src/solana/instructions.ts","../src/solana/analyze.ts","../src/main_sdk.ts","../src/utility.ts"],"sourcesContent":["export { FlipmemeSDK } from \"./main_sdk\";\r\nexport { Utility } from \"./utility\";\r\nexport * from \"./types\";\r\n","import { CollectionParams, CreateCollectionResponse, EthereumConfig } from \"../types\";\r\n\r\nexport class EthereumConnector {\r\n private config: EthereumConfig;\r\n constructor(config: EthereumConfig) {\r\n this.config = config;\r\n }\r\n\r\n public async createCollection(collection: CollectionParams) : Promise<CreateCollectionResponse> {\r\n // const contract = new ethers.Contract(collection.collectionAddress, collection.abi, this.config.privateKey);\r\n return {\r\n collectionId: \"\",\r\n collectionAddress:\"\"\r\n };\r\n \r\n }\r\n}\r\n\r\n","import {\r\n BorshInstructionCoder,\r\n Idl,\r\n Instruction,\r\n Program,\r\n} from \"@coral-xyz/anchor\";\r\nimport {\r\n BuyCreditParams,\r\n BuyParams,\r\n BuyResponse,\r\n CollectionInfo,\r\n CollectionParams,\r\n CreateCollectionResponse,\r\n NFTMintData,\r\n NFTTradingData,\r\n ProfileSellParams,\r\n PurcahseTye,\r\n SellParams,\r\n SellResponse,\r\n SolanaConfig,\r\n} from \"../types\";\r\nimport { FlipmemeProgramNew } from \"./idls/flipmeme\";\r\nimport { IDL } from \"./idls\";\r\nimport { SDK_SOLANA_CONFIG, SOLANA, SOLANA_PUBKEYS } from \"../constants\";\r\nimport {\r\n ComputeBudgetProgram,\r\n Keypair,\r\n PublicKey,\r\n SystemProgram,\r\n Transaction,\r\n TransactionInstruction,\r\n TransactionMessage,\r\n VersionedTransaction,\r\n} from \"@solana/web3.js\";\r\nimport { utf8 } from \"@coral-xyz/anchor/dist/cjs/utils/bytes\";\r\nimport {\r\n getAssociatedTokenAddress,\r\n getOrCreateAssociatedTokenAccount,\r\n} from \"@solana/spl-token\";\r\nimport BN from \"bn.js\";\r\nimport { getTokenChunks, getTradingAccounts } from \"./instructions\";\r\nimport { sampleSize } from \"lodash\";\r\nimport Decimal from \"decimal.js\";\r\nimport * as accounts from \"./accounts\";\r\nimport {\r\n analyzeBuyTransaction,\r\n analyzeSellTransaction,\r\n getPrice,\r\n} from \"./analyze\";\r\nexport class SolanaConnector {\r\n private config: SolanaConfig;\r\n private program: Program<FlipmemeProgramNew> | null = null;\r\n constructor(config: SolanaConfig) {\r\n this.config = config;\r\n this.setFlipmemeProgram();\r\n }\r\n\r\n private async setFlipmemeProgram() {\r\n let program = new Program<FlipmemeProgramNew>(\r\n IDL as FlipmemeProgramNew,\r\n this.config.provider\r\n );\r\n this.program = program;\r\n }\r\n // // called when create collection\r\n // // needed for backend\r\n // public async getCollectionPda(): Promise<CollectionInfo> {\r\n // if (!this.program) {\r\n // throw new Error(\"Program not initialized\");\r\n // }\r\n\r\n // const state = await this.program.account.state.fetch(\r\n // SOLANA_PUBKEYS.STATE_ID\r\n // );\r\n\r\n // const [collectionPda] = PublicKey.findProgramAddressSync(\r\n // [\r\n // Buffer.from(\"collection\"),\r\n // SOLANA_PUBKEYS.STATE_ID.toBuffer(),\r\n // utf8.encode(`${state.collectionCount}`),\r\n // ],\r\n // this.program.programId\r\n // );\r\n\r\n // return {\r\n // collectionAddress: collectionPda,\r\n // collectionNumber: state.collectionCount,\r\n // };\r\n // }\r\n\r\n //useCreateCollection.ts\r\n public async createCollection(\r\n params: CollectionParams\r\n ): Promise<CreateCollectionResponse> {\r\n if (!this.program) {\r\n throw new Error(\"Program not initialized\");\r\n }\r\n\r\n const state = await this.program.account.state.fetch(\r\n SOLANA_PUBKEYS.STATE_ID\r\n );\r\n\r\n const collectionID = state.collectionCount;\r\n console.log(collectionID, \"======collectionId===================\");\r\n\r\n const { sessionId, name, tokenUri, totalSupply } = params;\r\n const {\r\n collectionPda,\r\n collectionNftPda,\r\n collectionMintPda,\r\n collectionEditionPda,\r\n collectionMetaDataPda,\r\n } = await getTradingAccounts(\r\n collectionID.toString(),\r\n this.config.wallet,\r\n this.program.programId,\r\n undefined,\r\n undefined\r\n );\r\n\r\n const collectionAtaAccount = await getAssociatedTokenAddress(\r\n collectionMintPda,\r\n collectionNftPda,\r\n true\r\n );\r\n const instruction = await this.program.methods\r\n .createCollection(\r\n sessionId,\r\n name,\r\n tokenUri,\r\n totalSupply,\r\n new BN(100000),\r\n new BN(10000000)\r\n )\r\n .accountsStrict({\r\n state: SOLANA_PUBKEYS.STATE_ID,\r\n collection: collectionPda,\r\n collectionNft: collectionNftPda,\r\n collectionMetadataAccount: collectionMetaDataPda,\r\n collectionMasterEdition: collectionEditionPda,\r\n collectionMint: collectionMintPda,\r\n tokenAccount: collectionAtaAccount,\r\n creator: this.config.wallet,\r\n mplTokenMetadata: SOLANA_PUBKEYS.TOKEN_METADATA_PROGRAM_ID,\r\n tokenProgram: SOLANA_PUBKEYS.SPL_TOKEN_ID,\r\n associatedTokenProgram: SOLANA_PUBKEYS.SPL_ATA_TOKEN_ID,\r\n systemProgram: SystemProgram.programId,\r\n eventAuthority: accounts.eventAuthority(this.program.programId),\r\n program: this.program.programId,\r\n rent: SOLANA_PUBKEYS.RENT_TOKEN_ID,\r\n })\r\n .instruction();\r\n\r\n const modifyComputeUnits = ComputeBudgetProgram.setComputeUnitLimit({\r\n units: 350_000,\r\n });\r\n\r\n const addPriorityFee = ComputeBudgetProgram.setComputeUnitPrice({\r\n microLamports: 10000,\r\n });\r\n\r\n const latestBlockhash =\r\n await this.config.provider.connection.getLatestBlockhash();\r\n const blockHash = latestBlockhash.blockhash;\r\n const messageV0 = new TransactionMessage({\r\n payerKey: this.config.wallet,\r\n recentBlockhash: blockHash,\r\n instructions: [instruction],\r\n }).compileToV0Message();\r\n const versionedTransaction = new VersionedTransaction(messageV0);\r\n\r\n const result = await this.config.provider.connection.simulateTransaction(\r\n versionedTransaction\r\n );\r\n console.log(\"simulation result === \", result);\r\n const tx = new Transaction()\r\n .add(modifyComputeUnits)\r\n .add(addPriorityFee)\r\n .add(instruction);\r\n const txHash = await this.config.sendTransaction(\r\n tx,\r\n this.config.provider.connection\r\n );\r\n\r\n const confirmResult =\r\n await this.config.provider.connection.confirmTransaction({\r\n blockhash: blockHash,\r\n lastValidBlockHeight: latestBlockhash.lastValidBlockHeight,\r\n signature: txHash,\r\n });\r\n console.log(\"confirmResult == \", confirmResult);\r\n return {\r\n collectionId: collectionID.toString(),\r\n collectionAddress: collectionPda.toString(),\r\n };\r\n }\r\n //useBuy.ts\r\n public async buy(params: BuyParams): Promise<BuyResponse[]> {\r\n if (!this.program) {\r\n throw new Error(\"Program not initialized\");\r\n }\r\n const {\r\n collectionId,\r\n collectionSymbol,\r\n creatorAddress,\r\n quantity,\r\n reserveToken,\r\n merkleTree,\r\n } = params;\r\n\r\n if (\r\n !reserveToken ||\r\n (reserveToken.mintAndBuy?.length === 0 && reserveToken.buy?.length === 0)\r\n ) {\r\n throw new Error(\"No available token to buy\");\r\n }\r\n // const stateAccount = await this.program.account.state.fetch(\r\n // SOLANA_PUBKEYS.STATE_ID\r\n // );\r\n const successTxns: { items: NFTTradingData[]; signature: string }[] = [];\r\n const faildTradingItem: NFTTradingData[] = [];\r\n const instructionsChunks = [];\r\n if (reserveToken.buy?.length) {\r\n try {\r\n const buyInstructionsChunks = await this.getBuyInstructions(\r\n this.config.wallet,\r\n collectionId,\r\n reserveToken.buy\r\n );\r\n instructionsChunks.push(...buyInstructionsChunks);\r\n } catch (error) {\r\n faildTradingItem.push(...reserveToken.buy);\r\n params.notify?.onFailed(faildTradingItem, quantity);\r\n console.error(\"Failed to getBuyInstructions\", { error });\r\n }\r\n }\r\n const faildMinting: NFTMintData[] = [];\r\n if (reserveToken.mintAndBuy?.length) {\r\n try {\r\n const mintAndBuyInstructionsChunks =\r\n await this.getMintAndBuyInstructions(\r\n this.config.wallet,\r\n collectionId,\r\n creatorAddress,\r\n reserveToken.mintAndBuy,\r\n merkleTree\r\n );\r\n instructionsChunks.push(...mintAndBuyInstructionsChunks);\r\n } catch (error) {\r\n // faildMinting.push(...reserveToken.mintAndBuy);\r\n params.notify?.onFailed(faildMinting, quantity);\r\n console.error(\"Failed to getMintAndBuyInstructions\", { error });\r\n }\r\n }\r\n\r\n console.log(\"===instruction chunks===\", instructionsChunks);\r\n let buyResponse: BuyResponse[] = [];\r\n for (const [instructions, items] of instructionsChunks) {\r\n try {\r\n const { signature, latestBlockhash } = await this.sendTxn(instructions);\r\n\r\n successTxns.push({ items, signature });\r\n params.notify?.onSuccess(\r\n successTxns.map((txn) => txn.items).flat(),\r\n quantity,\r\n signature\r\n );\r\n\r\n const confirmResult =\r\n await this.config.provider.connection.confirmTransaction({\r\n blockhash: latestBlockhash.blockhash,\r\n lastValidBlockHeight: latestBlockhash.lastValidBlockHeight,\r\n signature: signature,\r\n });\r\n\r\n console.log(\"confirmResult\", confirmResult);\r\n\r\n let transactionData =\r\n await this.config.provider.connection.getTransaction(signature, {\r\n commitment: \"confirmed\",\r\n maxSupportedTransactionVersion: 0,\r\n });\r\n if (transactionData) {\r\n let itemBuyResponse = await analyzeBuyTransaction(\r\n this.program,\r\n transactionData\r\n );\r\n buyResponse.push(...itemBuyResponse);\r\n }\r\n } catch (e) {\r\n // failedItems.push(...items);\r\n // params.notify?.onFailed(failedItems, quantity);\r\n console.error(\"Buy failed:\", JSON.stringify(e), { items });\r\n throw e;\r\n }\r\n }\r\n return buyResponse;\r\n }\r\n\r\n //useFlip.ts\r\n public async flipSell(params: SellParams): Promise<SellResponse[]> {\r\n if (!this.program) {\r\n throw new Error(\"Program not initialized\");\r\n }\r\n const { collectionId, quantity, ownedTokens, notify } = params;\r\n let instructionsChunks = [];\r\n const sellTokens = sampleSize(ownedTokens, quantity);\r\n\r\n try {\r\n instructionsChunks = await this.getSellInstructions(\r\n this.config.wallet,\r\n collectionId,\r\n sellTokens\r\n );\r\n } catch (error) {\r\n notify?.onFailed(sellTokens, quantity);\r\n console.error(\"Failed to getSellInstructions\", { error });\r\n throw error;\r\n }\r\n\r\n const successTxns: { items: NFTTradingData[]; signature: string }[] = [];\r\n const failedItems: NFTTradingData[] = [];\r\n\r\n let sellResponse: SellResponse[] = [];\r\n for (const [instructions, items] of instructionsChunks) {\r\n try {\r\n const { signature, latestBlockhash } = await this.sendTxn(instructions);\r\n successTxns.push({ items, signature });\r\n notify?.onSuccess(\r\n successTxns.map((txn) => txn.items).flat(),\r\n quantity,\r\n signature\r\n );\r\n\r\n const confirmResult =\r\n await this.config.provider.connection.confirmTransaction({\r\n blockhash: latestBlockhash.blockhash,\r\n lastValidBlockHeight: latestBlockhash.lastValidBlockHeight,\r\n signature: signature,\r\n });\r\n\r\n console.log(\"confirmResult\", confirmResult);\r\n\r\n let transactionData =\r\n await this.config.provider.connection.getTransaction(signature, {\r\n commitment: \"confirmed\",\r\n maxSupportedTransactionVersion: 0,\r\n });\r\n if (transactionData) {\r\n let itemSellResponse = await analyzeSellTransaction(\r\n this.program,\r\n transactionData\r\n );\r\n sellResponse.push(...itemSellResponse);\r\n }\r\n } catch (e) {\r\n failedItems.push(...items);\r\n notify?.onFailed(failedItems, quantity);\r\n console.error(\"Flip failed:\", JSON.stringify(e), { items });\r\n throw e;\r\n }\r\n }\r\n return sellResponse;\r\n }\r\n\r\n //useFlipProfile.ts\r\n public async profileSell(data: ProfileSellParams): Promise<SellResponse[]> {\r\n if (!this.program) {\r\n throw new Error(\"Program not initialized\");\r\n }\r\n\r\n let instructionsChunks = [];\r\n\r\n for (const collectionId in data.data) {\r\n const items = data.data[collectionId];\r\n try {\r\n console.log(\"items\", items);\r\n console.log(\"collectionId\", collectionId);\r\n\r\n let instructionsChunksItem = await this.getSellInstructions(\r\n this.config.wallet,\r\n collectionId,\r\n items\r\n );\r\n instructionsChunks.push(...instructionsChunksItem);\r\n } catch (error) {\r\n data.notify?.onFailed(items, items.length);\r\n console.error(\"Failed to getSellInstructions\", { error });\r\n throw error;\r\n }\r\n }\r\n const successTxns: { items: NFTTradingData[]; signature: string }[] = [];\r\n const failedItems: NFTTradingData[] = [];\r\n\r\n let sellResponse: SellResponse[] = [];\r\n for (const [instructions, items] of instructionsChunks) {\r\n try {\r\n const { signature, latestBlockhash } = await this.sendTxn(instructions);\r\n successTxns.push({ items, signature });\r\n data.notify?.onSuccess(\r\n successTxns.map((txn) => txn.items).flat(),\r\n items.length,\r\n signature\r\n );\r\n const confirmResult =\r\n await this.config.provider.connection.confirmTransaction({\r\n blockhash: latestBlockhash.blockhash,\r\n lastValidBlockHeight: latestBlockhash.lastValidBlockHeight,\r\n signature: signature,\r\n });\r\n\r\n console.log(\"confirmResult\", confirmResult);\r\n\r\n let transactionData =\r\n await this.config.provider.connection.getTransaction(signature, {\r\n commitment: \"confirmed\",\r\n maxSupportedTransactionVersion: 0,\r\n });\r\n if (transactionData) {\r\n let itemSellResponse = await analyzeSellTransaction(\r\n this.program,\r\n transactionData\r\n );\r\n sellResponse.push(...itemSellResponse);\r\n }\r\n } catch (e) {\r\n failedItems.push(...items);\r\n data.notify?.onFailed(failedItems, items.length);\r\n console.error(\"Flip failed:\", JSON.stringify(e), { items });\r\n throw e;\r\n }\r\n }\r\n return sellResponse;\r\n }\r\n\r\n public async buyCredit(params: BuyCreditParams) {\r\n if (!this.program) {\r\n throw new Error(\"Program not initialized\");\r\n }\r\n\r\n const transaction = new Transaction().add(\r\n SystemProgram.transfer({\r\n fromPubkey: params.adminPubKey,\r\n toPubkey: SOLANA_PUBKEYS.ADMIN_FOR_CREDIT_BUY,\r\n lamports: new Decimal(params.amount).mul(10 ** 9).toNumber(),\r\n })\r\n );\r\n return await this.config.sendTransaction(\r\n transaction,\r\n this.config.provider.connection\r\n );\r\n }\r\n\r\n public async getCollectionInfo(collectionId: string): Promise<{\r\n collectionInfo: {\r\n pool: {\r\n currentPrice: BN;\r\n startPrice: BN;\r\n endPrice: BN;\r\n nftCount: number;\r\n steepness: number;\r\n midPoint: number;\r\n padding: number[];\r\n };\r\n creator: PublicKey;\r\n totalSol: BN;\r\n totalSupply: number;\r\n mintCount: number;\r\n id: number;\r\n sellerFeeBasisPoints: number;\r\n protocolFeeBps: number;\r\n isSoldOut: number;\r\n isPaused: number;\r\n bump: number;\r\n collectionNftBump: number;\r\n };\r\n collectionAddress: PublicKey;\r\n }> {\r\n if (!this.program) {\r\n throw new Error(\"Program not initialized\");\r\n }\r\n const collectionAddress = await accounts.collectionPda(\r\n collectionId,\r\n this.program.programId\r\n );\r\n const collectionInfo = await this.program.account.collection.fetch(\r\n collectionAddress\r\n );\r\n return { collectionInfo, collectionAddress };\r\n }\r\n\r\n public async createMerkle(\r\n collectionId: string,\r\n maxBufferSize: number,\r\n maxDepth: number\r\n ): Promise<PublicKey> {\r\n if (!this.program) {\r\n throw new Error(\"Program not initialized\");\r\n }\r\n let merkleTreeKeyPair = new Keypair();\r\n\r\n let accountInx = await this.createAccountForMerkleTree(\r\n merkleTreeKeyPair.publicKey\r\n );\r\n let collectionPda = accounts.collectionPda(\r\n collectionId,\r\n this.program.programId\r\n );\r\n\r\n let treeConfigPda = accounts.treeConfigPda(merkleTreeKeyPair.publicKey);\r\n let treeCreatorPda = accounts.treeCreatorPda(\r\n collectionId,\r\n this.program.programId\r\n );\r\n console.log(\"max Depth\", \"maxBuffer size\", maxDepth, maxBufferSize);\r\n const instruction = await this.program.methods\r\n .createMerkleTree(maxDepth, maxBufferSize, true)\r\n .accountsStrict({\r\n state: SOLANA_PUBKEYS.STATE_ID,\r\n collection: collectionPda,\r\n merkleTreeConfig: treeConfigPda,\r\n merkleTree: merkleTreeKeyPair.publicKey,\r\n payer: this.config.wallet,\r\n treeCreator: treeCreatorPda,\r\n logWrapper: SOLANA_PUBKEYS.SPL_NOOP_ID,\r\n compressionProgram: SOLANA_PUBKEYS.SPL_ACCOUNT_COMPRESSION_ID,\r\n mplBubblegumProgram: SOLANA_PUBKEYS.MPL_BUBBLEGUM_ID,\r\n systemProgram: SystemProgram.programId,\r\n eventAuthority: accounts.eventAuthority(this.program.programId),\r\n program: this.program.programId,\r\n })\r\n .instruction();\r\n\r\n const modifyComputeUnits = ComputeBudgetProgram.setComputeUnitLimit({\r\n units: 350_000,\r\n });\r\n\r\n const addPriorityFee = ComputeBudgetProgram.setComputeUnitPrice({\r\n microLamports: 10000,\r\n });\r\n\r\n const latestBlockhash =\r\n await this.config.provider.connection.getLatestBlockhash();\r\n const blockHash = latestBlockhash.blockhash;\r\n const messageV0 = new TransactionMessage({\r\n payerKey: this.config.wallet,\r\n recentBlockhash: blockHash,\r\n instructions: [accountInx, instruction],\r\n }).compileToV0Message();\r\n const versionedTransaction = new VersionedTransaction(messageV0); \r\n const result = await this.config.provider.connection.simulateTransaction(\r\n versionedTransaction\r\n );\r\n\r\n const tx = new Transaction()\r\n .add(modifyComputeUnits)\r\n .add(addPriorityFee)\r\n .add(accountInx)\r\n .add(instruction); \r\n const txHash = await this.config.provider.sendAndConfirm(\r\n tx,\r\n [merkleTreeKeyPair],\r\n {commitment:\"confirmed\", skipPreflight: true}\r\n );\r\n\r\n const confirmResult =\r\n await this.config.provider.connection.confirmTransaction({\r\n blockhash: blockHash,\r\n lastValidBlockHeight: latestBlockhash.lastValidBlockHeight,\r\n signature: txHash,\r\n }); \r\n return merkleTreeKeyPair.publicKey;\r\n }\r\n\r\n public async getTotalPrice(\r\n type: PurcahseTye,\r\n collectionId: string,\r\n amount: number\r\n ): Promise<string> {\r\n const collectionInfo = await this.getCollectionInfo(collectionId);\r\n const {\r\n collectionInfo: {\r\n pool: { startPrice, endPrice, nftCount, steepness, midPoint },\r\n mintCount,\r\n totalSupply,\r\n },\r\n } = collectionInfo;\r\n\r\n let startPriceStr = startPrice.toString();\r\n let endPriceStr = endPrice.toString();\r\n let expectedMintCount = mintCount;\r\n let expectedNftCount = nftCount;\r\n let totalPrice = new Decimal(0);\r\n\r\n if (type === PurcahseTye.BUY) {\r\n let mintingCount = 0;\r\n let buyingCount = 0;\r\n if (nftCount < amount) {\r\n mintingCount = amount - nftCount;\r\n buyingCount = nftCount;\r\n if (mintingCount > totalSupply - mintCount) {\r\n mintingCount = totalSupply - mintCount;\r\n }\r\n } else {\r\n buyingCount = Math.min(amount, totalSupply);\r\n }\r\n for (let i = 0; i < mintingCount; i++) {\r\n totalPrice = totalPrice.plus(\r\n getPrice(\r\n expectedMintCount,\r\n expectedNftCount,\r\n steepness,\r\n midPoint,\r\n startPriceStr,\r\n endPriceStr\r\n )\r\n );\r\n expectedMintCount = Math.min(expectedMintCount + 1, totalSupply);\r\n }\r\n for (let i = 0; i < buyingCount; i++) {\r\n totalPrice = totalPrice.plus(\r\n getPrice(\r\n expectedMintCount,\r\n expectedNftCount,\r\n steepness,\r\n midPoint,\r\n startPriceStr,\r\n endPriceStr\r\n )\r\n );\r\n expectedNftCount = Math.max(expectedNftCount - 1, 0);\r\n }\r\n } else if (type === PurcahseTye.SELL) {\r\n for (let i = 0; i < amount; i++) {\r\n expectedNftCount = Math.min(expectedNftCount + 1, totalSupply);\r\n totalPrice = totalPrice.plus(\r\n getPrice(\r\n expectedMintCount,\r\n expectedNftCount,\r\n steepness,\r\n midPoint,\r\n startPriceStr,\r\n endPriceStr\r\n )\r\n );\r\n }\r\n }\r\n return totalPrice.toString();\r\n }\r\n //for testing\r\n public async getStateInfo() {\r\n if (!this.program) {\r\n throw new Error(\"Program not initialized\");\r\n }\r\n const state = await this.program.account.state.fetch(\r\n SOLANA_PUBKEYS.STATE_ID\r\n );\r\n return state;\r\n }\r\n\r\n //useSenTxn.ts\r\n private async sendTxn(instructions: TransactionInstruction[]) {\r\n if (!this.program) {\r\n console.error(\"Trade NFT failed: Insufficient data\");\r\n throw new Error(\"Trade NFT failed: Insufficient data\");\r\n }\r\n const transaction = new Transaction();\r\n instructions.forEach((inx) => transaction.add(inx));\r\n const latestBlockhash =\r\n await this.config.provider.connection.getLatestBlockhash(\"confirmed\");\r\n\r\n const messageV0 = new TransactionMessage({\r\n payerKey: this.config.wallet,\r\n recentBlockhash: latestBlockhash.blockhash,\r\n instructions,\r\n }).compileToV0Message([]);\r\n\r\n const tx = new VersionedTransaction(messageV0);\r\n const sim = await this.config.provider.connection.simulateTransaction(tx);\r\n console.log(\"simulation result == \", sim);\r\n console.log(\"transaction size \", tx.serialize().length);\r\n\r\n // Send transaction with fresh blockhash\r\n const signature = await this.config.sendTransaction(\r\n tx,\r\n this.config.provider.connection\r\n );\r\n\r\n // Return both signature and blockhash info for confirmation if needed\r\n return {\r\n signature,\r\n latestBlockhash,\r\n };\r\n }\r\n\r\n private async getBuyInstructions(\r\n userPublicKey: PublicKey,\r\n collectionId: string,\r\n tokens: NFTTradingData[]\r\n ): Promise<[TransactionInstruction[], NFTTradingData[]][]> {\r\n if (!this.program) {\r\n throw new Error(\"Program not initialized\");\r\n }\r\n\r\n const chunkSize = SDK_SOLANA_CONFIG.CHUNK_SIZE; // TODO: temporarily apply trading 1 nft at a time due to limitation from BE, expected: 5\r\n const tokenChunks = getTokenChunks<NFTTradingData>(tokens, chunkSize);\r\n // const { getNftAccounts } = await getTradingAccounts(\r\n // collectionId,\r\n // userPublicKey,\r\n // this.program.programId\r\n // );\r\n const allInstructionSets: [TransactionInstruction[], NFTTradingData[]][] =\r\n [];\r\n // const state = await this.program.account.state.fetch(\r\n // SOLANA_PUBKEYS.STATE_ID\r\n // );\r\n\r\n // console.log(\"state===\", state);\r\n try {\r\n for (const chunk of tokenChunks) {\r\n const instructions = await this.setUpInstructions(\r\n 250_000 * chunk.length\r\n );\r\n // for (const token of chunk) {\r\n // const { tokenId } = token;\r\n // const { nftHolderPda, collectionPda, nftPda, collectionNftPda } =\r\n // await getNftAccounts(tokenId);\r\n // const instruction = await this.program.methods\r\n // .buy(tokenId)\r\n // .accountsStrict({\r\n // state: SOLANA_PUBKEYS.STATE_ID,\r\n // collection: collectionPda,\r\n // collectionNft: collectionNftPda,\r\n // treasury: SOLANA_PUBKEYS.TREASURY_ID,\r\n // nftHolder: nftHolderPda,\r\n // nft: nftPda,\r\n // buyer: userPublicKey,\r\n // mplCore: SOLANA.MPL_CORE_STR,\r\n // systemProgram: SystemProgram.programId,\r\n // program: this.program.programId,\r\n // eventAuthority: accounts.eventAuthority(this.program.programId),\r\n // })\r\n // .instruction();\r\n\r\n // instructions.push(instruction);\r\n // }\r\n allInstructionSets.push([instructions, chunk]);\r\n }\r\n return allInstructionSets;\r\n } catch (e: any) {\r\n console.log(\"ERRORR in getBuyInstructions\", JSON.stringify(e));\r\n throw e;\r\n }\r\n }\r\n\r\n private async getSellInstructions(\r\n userPublicKey: PublicKey,\r\n collectionId: string,\r\n tokens: NFTTradingData[]\r\n ): Promise<[TransactionInstruction[], NFTTradingData[]][]> {\r\n if (!this.program) {\r\n throw new Error(\"Program not initialized\");\r\n }\r\n\r\n // const { getNftAccounts } = await getTradingAccounts(\r\n // collectionId,\r\n // userPublicKey,\r\n // this.program.programId\r\n // );\r\n const chunkSize = SDK_SOLANA_CONFIG.CHUNK_SIZE; // TODO: temporarily apply trading 1 nft at a time due to limitation from BE, expected: 5\r\n const tokenChunks = getTokenChunks(tokens, chunkSize);\r\n const allInstructionSets: [TransactionInstruction[], NFTTradingData[]][] =\r\n [];\r\n\r\n const state = await this.program.account.state.fetch(\r\n SOLANA_PUBKEYS.STATE_ID\r\n );\r\n\r\n try {\r\n // for (const chunk of tokenChunks) {\r\n // const instructions = await this.setUpInstructions(\r\n // 250_000 * chunk.length\r\n // );\r\n // for (const token of chunk) {\r\n // const { nftHolderPda, collectionPda, nftPda, collectionNftPda } =\r\n // await getNftAccounts(token.tokenId);\r\n // const instruction = await this.program.methods\r\n // .sell(token.tokenId)\r\n // .accountsStrict({\r\n // state: SOLANA_PUBKEYS.STATE_ID,\r\n // treasury: state.treasury,\r\n // seller: userPublicKey,\r\n // program: this.program.programId,\r\n // collection: collectionPda,\r\n // eventAuthority: accounts.eventAuthority(this.program.programId),\r\n // mplCore: SOLANA.MPL_CORE_STR,\r\n // nft: nftPda,\r\n // nftHolder: nftHolderPda,\r\n // systemProgram: SystemProgram.programId,\r\n // collectionNft: collectionNftPda,\r\n // })\r\n // .instruction();\r\n\r\n // instructions.push(instruction);\r\n // }\r\n // allInstructionSets.push([instructions, chunk]);\r\n // }\r\n return allInstructionSets;\r\n } catch (e: any) {\r\n console.log(\"ERRORR in getBuyInstructions\", JSON.stringify(e));\r\n throw e;\r\n }\r\n }\r\n\r\n private async getMintAndBuyInstructions(\r\n userPublicKey: PublicKey,\r\n collectionId: string,\r\n creatorAddress: string,\r\n tokens: NFTMintData[],\r\n merkleTree: PublicKey\r\n ) {\r\n if (!this.program) {\r\n throw new Error(\"Program not initialized\");\r\n }\r\n const chunkSize = SDK_SOLANA_CONFIG.CHUNK_SIZE; // TODO: temporarily apply trading 1 nft at a time due to limitation from BE, expected: 2\r\n const tokenChunks = getTokenChunks(tokens, chunkSize);\r\n const allInstructionSets: [TransactionInstruction[], NFTTradingData[]][] =\r\n [];\r\n const {\r\n treeConfigPda,\r\n treeCreator,\r\n nftHolderPda,\r\n collectionPda,\r\n collectionNftPda,\r\n collectionMintPda,\r\n collectionEditionPda,\r\n collectionMetaDataPda,\r\n bubblegumSigner,\r\n } = await getTradingAccounts(\r\n collectionId,\r\n userPublicKey,\r\n this.program.programId,\r\n merkleTree,\r\n creatorAddress\r\n );\r\n try {\r\n for (const chunk of tokenChunks) {\r\n const instructions = await this.setUpInstructions(1400000);\r\n let data: NFTTradingData[] = [];\r\n for (const token of chunk) {\r\n const { name, tokenBaseUri } = token;\r\n const instruction = await this.program.methods\r\n .mintAndBuy(\r\n [\"test1\", \"test2\", \"test3\", \"test4\", \"test5\"],\r\n tokenBaseUri\r\n )\r\n .accountsStrict({\r\n state: SOLANA_PUBKEYS.STATE_ID,\r\n merkleTreeConfig: treeConfigPda!,\r\n treeCreatorOrDelegate: treeCreator,\r\n nftHolder: nftHolderPda!,\r\n merkleTree: merkleTree,\r\n collection: collectionPda,\r\n collectionNft: collectionNftPda,\r\n collectionMint: collectionMintPda,\r\n collectionMetadata: collectionMetaDataPda,\r\n collectionEdition: collectionEditionPda,\r\n bubblegumSigner: bubblegumSigner,\r\n logWrapper: SOLANA_PUBKEYS.SPL_NOOP_ID,\r\n compressionProgram: SOLANA_PUBKEYS.SPL_ACCOUNT_COMPRESSION_ID,\r\n tokenMetadataProgram: SOLANA_PUBKEYS.TOKEN_METADATA_PROGRAM_ID,\r\n mplBubblegumProgram: SOLANA_PUBKEYS.MPL_BUBBLEGUM_ID,\r\n treasury: SOLANA_PUBKEYS.TREASURY_ID,\r\n buyer: userPublicKey,\r\n systemProgram: SystemProgram.programId,\r\n eventAuthority: accounts.eventAuthority(this.program.programId),\r\n program: this.program.programId,\r\n })\r\n .instruction();\r\n instructions.push(instruction);\r\n data.push({\r\n name,\r\n tokenURI: `test`,\r\n tokenId: 1,\r\n });\r\n }\r\n allInstructionSets.push([instructions, data]);\r\n }\r\n\r\n return allInstructionSets;\r\n } catch (e: any) {\r\n console.log(\"ERRORR in getMintAndBuyInstructions\", JSON.stringify(e));\r\n throw e;\r\n }\r\n }\r\n\r\n private async getPriorityFee(): Promise<number> {\r\n const recentFees =\r\n await this.config.provider.connection.getRecentPrioritizationFees();\r\n const MIN_FEE = 10_000;\r\n const dynamicFee = Math.max(\r\n ...recentFees.map((fee: any) => fee.prioritizationFee),\r\n MIN_FEE\r\n );\r\n\r\n return dynamicFee;\r\n }\r\n\r\n private async setUpInstructions(computeUnits: number) {\r\n const microLamports = await this.getPriorityFee();\r\n const instructions: TransactionInstruction[] = [];\r\n const modifyComputeUnits = ComputeBudgetProgram.setComputeUnitLimit({\r\n units: computeUnits,\r\n });\r\n const addPriorityFee = ComputeBudgetProgram.setComputeUnitPrice({\r\n microLamports: microLamports, // TODO: get value from Quicknote api\r\n });\r\n instructions.push(modifyComputeUnits, addPriorityFee);\r\n\r\n return instructions;\r\n }\r\n\r\n private async createAccountForMerkleTree(\r\n merkleTree: PublicKey\r\n ): Promise<TransactionInstruction> {\r\n const dataLen = 5112; //depth 8, buffer 16\r\n const rent =\r\n await this.config.provider.connection.getMinimumBalanceForRentExemption(\r\n dataLen\r\n ); \r\n let ins = SystemProgram.createAccount({\r\n fromPubkey: this.config.wallet,\r\n newAccountPubkey: merkleTree,\r\n lamports: rent,\r\n space: dataLen,\r\n programId: SOLANA_PUBKEYS.SPL_ACCOUNT_COMPRESSION_ID,\r\n });\r\n return ins;\r\n }\r\n\r\n public async getTransactionTest(signature: string): Promise<BuyResponse[]> {\r\n const transaction = await this.config.provider.connection.getTransaction(\r\n signature,\r\n {\r\n commitment: \"confirmed\",\r\n maxSupportedTransactionVersion: 0,\r\n }\r\n );\r\n\r\n if (transaction && this.program) {\r\n return analyzeBuyTransaction(this.program, transaction);\r\n }\r\n return [];\r\n }\r\n\r\n public async getInstructionData(instruction: string) {\r\n if (!this.program) {\r\n console.error(\"Trade NFT failed: Insufficient data\");\r\n throw new Error(\"Trade NFT failed: Insufficient data\");\r\n }\r\n let coder = new BorshInstructionCoder(this.program?.rawIdl);\r\n let args = coder.decode(instruction, \"base58\");\r\n console.log(\"args========\", args);\r\n }\r\n}\r\n","import { AnchorProvider, Provider } from \"@coral-xyz/anchor\";\r\nimport { SendTransactionOptions } from \"@solana/wallet-adapter-base\";\r\n\r\nimport {\r\n PublicKey,\r\n TransactionSignature,\r\n Connection,\r\n Transaction,\r\n VersionedTransaction,\r\n} from \"@solana/web3.js\";\r\n\r\nexport enum BlockchainType {\r\n SOLANA = \"solana\",\r\n ETHEREUM = \"ethereum\",\r\n}\r\n\r\nexport interface CollectionInfo {\r\n collectionAddress: PublicKey;\r\n collectionNumber: number;\r\n}\r\nexport interface EthereumConfig {\r\n rpcUrl: string;\r\n privateKey?: string;\r\n chainId: number;\r\n}\r\n\r\nexport interface SolanaConfig {\r\n provider: AnchorProvider;\r\n wallet: PublicKey;\r\n sendTransaction: (\r\n transaction: Transaction | VersionedTransaction,\r\n connection: Connection,\r\n options?: SendTransactionOptions\r\n ) => Promise<TransactionSignature>;\r\n}\r\n\r\nexport interface CollectionParams {\r\n sessionId: string;\r\n name: string;\r\n tokenUri: string;\r\n totalSupply: number; \r\n}\r\n\r\nexport interface CreateCollectionResponse {\r\n collectionId: string;\r\n collectionAddress: string;\r\n}\r\n\r\nexport interface NFTTradingData {\r\n name: string;\r\n tokenId: number;\r\n tokenURI: string;\r\n symbol?: string;\r\n}\r\n\r\nexport interface NFTMintData {\r\n name: string;\r\n tokenBaseUri: string;\r\n symbol?: string;\r\n}\r\n\r\nexport interface ReserveToken {\r\n buy: NFTTradingData[] | null;\r\n mintAndBuy: NFTMintData[] | null;\r\n}\r\n\r\n//removed collectionAddress because it's not needed\r\n//instead added reserveToken property which is returns from authServicesApi.reserveToken\r\n//reserveToken = data?.data; : useBuy.ts:53\r\nexport interface BuyParams {\r\n merkleTree: PublicKey;\r\n collectionId: string;\r\n collectionSymbol: string;\r\n creatorAddress: string;\r\n quantity: number;\r\n baseUri: string;\r\n reserveToken: ReserveToken | null;\r\n notify: any | undefined; //function object\r\n}\r\n\r\nexport interface BuyResponse {\r\n buyer: string;\r\n collectionAddress: string;\r\n nftAddress: string;\r\n tokenId: string;\r\n tokenName?: string;\r\n tokenUri?: string;\r\n price: string;\r\n nextPrice: string;\r\n isSoldOut?: boolean;\r\n totalSolAmount: string;\r\n timestamp: string;\r\n blockNumber: string;\r\n blockTimeDate: string;\r\n signature: string;\r\n}\r\n\r\nexport interface SellResponse {\r\n seller: string;\r\n collectionAddress: string;\r\n nftAddress: string;\r\n tokenId: string;\r\n price: string;\r\n nextPrice: string;\r\n totalSolAmount: string;\r\n timestamp: string;\r\n blockNumber: string;\r\n blockTimeDate: string;\r\n signature: string;\r\n}\r\n\r\n//parameters are considered from useFlip hook params and handleSell function params\r\n//useFlip.ts:18, 24\r\nexport interface SellParams {\r\n collectionId: string;\r\n quantity: number;\r\n ownedTokens: NFTTradingData[];\r\n notify: any | undefined; //function object\r\n}\r\n\r\n//used on useFlipProfile hook\r\nexport interface ProfileSellParams {\r\n data: Record<string, NFTTradingData[]>;\r\n notify: any | undefined; //function object\r\n}\r\n\r\nexport function isEthereumConfig(\r\n config: EthereumConfig | SolanaConfig\r\n): config is EthereumConfig {\r\n return \"chainId\" in config;\r\n}\r\n\r\nexport function isSolanaConfig(\r\n config: EthereumConfig | SolanaConfig\r\n): config is SolanaConfig {\r\n return \"sendTransaction\" in config;\r\n}\r\n\r\nexport interface BuyCreditParams {\r\n adminPubKey: PublicKey;\r\n amount: number; //in case of SOL \"0.1\" formatted SOL\r\n}\r\n\r\nexport enum PurcahseTye {\r\n BUY = \"buy\",\r\n SELL = \"sell\"\r\n} ","{\r\n \"address\": \"87cVDVX7ffXXDQLFWEDubGq8kbXzqj1ropm4osrFKEKs\",\r\n \"metadata\": {\r\n \"name\": \"flipmeme_program_new\",\r\n \"version\": \"0.1.0\",\r\n \"spec\": \"0.1.0\",\r\n \"description\": \"Flipmeme main program\"\r\n },\r\n \"instructions\": [\r\n {\r\n \"name\": \"buy\",\r\n \"docs\": [\r\n \"Buy\",\r\n \"\",\r\n \"# Arguments\",\r\n \"\",\r\n \"* `ctx` - The Anchor context holding the accounts\",\r\n \"* `token_id` - The token_id of the NFT that will be purchased from the pool or if we're minting it'll be\",\r\n \"the token id of the new NFT\"\r\n ],\r\n \"discriminator\": [\r\n 102,\r\n 6,\r\n 61,\r\n 18,\r\n 1,\r\n 218,\r\n 235,\r\n 234\r\n ],\r\n \"accounts\": [\r\n {\r\n \"name\": \"state\"\r\n },\r\n {\r\n \"name\": \"merkle_tree_config\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"merkle_tree\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"collection\",\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 99,\r\n 111,\r\n 108,\r\n 108,\r\n 101,\r\n 99,\r\n 116,\r\n 105,\r\n 111,\r\n 110\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"state\"\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"collection\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"collection_nft\",\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 99,\r\n 111,\r\n 108,\r\n 108,\r\n 101,\r\n 99,\r\n 116,\r\n 105,\r\n 111,\r\n 110,\r\n 95,\r\n 110,\r\n 102,\r\n 116\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"collection\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"treasury\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"nft_holder\",\r\n \"docs\": [\r\n \"directly but rather we store them in a PDA which they control (buyer is part of the seeds). When the curve\",\r\n \"is closed they can \\\"eject\\\" and transfer the NFT from this PDA to their final token account which they can use\",\r\n \"on other platforms\"\r\n ],\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 110,\r\n 102,\r\n 116,\r\n 95,\r\n 104,\r\n 111,\r\n 108,\r\n 100,\r\n 101,\r\n 114\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"state\"\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"buyer\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"buyer\",\r\n \"docs\": [\r\n \"The user that is creating the token\"\r\n ],\r\n \"writable\": true,\r\n \"signer\": true\r\n },\r\n {\r\n \"name\": \"compression_program\",\r\n \"address\": \"cmtDvXumGCrqC1Age74AVPhSRVXJMd8PJS91L8KbNCK\"\r\n },\r\n {\r\n \"name\": \"token_metadata_program\",\r\n \"address\": \"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s\"\r\n },\r\n {\r\n \"name\": \"mpl_bubblegum_program\",\r\n \"address\": \"BGUMAp9Gq7iTEuizy4pqaxsTyUCBK68MDfK752saRPUY\"\r\n },\r\n {\r\n \"name\": \"log_wrapper\",\r\n \"address\": \"noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV\"\r\n },\r\n {\r\n \"name\": \"system_program\",\r\n \"address\": \"11111111111111111111111111111111\"\r\n },\r\n {\r\n \"name\": \"event_authority\",\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 95,\r\n 95,\r\n 101,\r\n 118,\r\n 101,\r\n 110,\r\n 116,\r\n 95,\r\n 97,\r\n 117,\r\n 116,\r\n 104,\r\n 111,\r\n 114,\r\n 105,\r\n 116,\r\n 121\r\n ]\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"program\"\r\n }\r\n ],\r\n \"args\": [\r\n {\r\n \"name\": \"token_id\",\r\n \"type\": \"u32\"\r\n },\r\n {\r\n \"name\": \"root\",\r\n \"type\": {\r\n \"array\": [\r\n \"u8\",\r\n 32\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"data_hash\",\r\n \"type\": {\r\n \"array\": [\r\n \"u8\",\r\n 32\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"creator_hash\",\r\n \"type\": {\r\n \"array\": [\r\n \"u8\",\r\n 32\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"nonce\",\r\n \"type\": \"u64\"\r\n },\r\n {\r\n \"name\": \"index\",\r\n \"type\": \"u32\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"create_collection\",\r\n \"docs\": [\r\n \"CreateCollection\",\r\n \"\",\r\n \"# Arguments\",\r\n \"\",\r\n \"* `ctx` - The Anchor context holding the accounts\",\r\n \"* `session_id` - The session id which exists in backend side\",\r\n \"* `name` - The name of the collection\",\r\n \"* `uri` - The uri of the collection metadata\",\r\n \"* `start_price` - The start price of the curve\",\r\n \"* `end_price` - The end price of the curve\",\r\n \"* `total_supply` - The total number of NFTs that will be minted in this collection\"\r\n ],\r\n \"discriminator\": [\r\n 156,\r\n 251,\r\n 92,\r\n 54,\r\n 233,\r\n 2,\r\n 16,\r\n 82\r\n ],\r\n \"accounts\": [\r\n {\r\n \"name\": \"state\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"collection\",\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 99,\r\n 111,\r\n 108,\r\n 108,\r\n 101,\r\n 99,\r\n 116,\r\n 105,\r\n 111,\r\n 110\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"state\"\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"state\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"collection_mint\",\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 99,\r\n 111,\r\n 108,\r\n 108,\r\n 101,\r\n 99,\r\n 116,\r\n 105,\r\n 111,\r\n 110,\r\n 95,\r\n 109,\r\n 105,\r\n 110,\r\n 116\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"collection\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"token_account\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"collection_nft\",\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 99,\r\n 111,\r\n 108,\r\n 108,\r\n 101,\r\n 99,\r\n 116,\r\n 105,\r\n 111,\r\n 110,\r\n 95,\r\n 110,\r\n 102,\r\n 116\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"collection\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"collection_metadata_account\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"collection_master_edition\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"creator\",\r\n \"writable\": true,\r\n \"signer\": true\r\n },\r\n {\r\n \"name\": \"mpl_token_metadata\",\r\n \"address\": \"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s\"\r\n },\r\n {\r\n \"name\": \"token_program\",\r\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\r\n },\r\n {\r\n \"name\": \"associated_token_program\",\r\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\r\n },\r\n {\r\n \"name\": \"system_program\",\r\n \"address\": \"11111111111111111111111111111111\"\r\n },\r\n {\r\n \"name\": \"rent\",\r\n \"address\": \"SysvarRent111111111111111111111111111111111\"\r\n },\r\n {\r\n \"name\": \"event_authority\",\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 95,\r\n 95,\r\n 101,\r\n 118,\r\n 101,\r\n 110,\r\n 116,\r\n 95,\r\n 97,\r\n 117,\r\n 116,\r\n 104,\r\n 111,\r\n 114,\r\n 105,\r\n 116,\r\n 121\r\n ]\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"program\"\r\n }\r\n ],\r\n \"args\": [\r\n {\r\n \"name\": \"session_id\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"name\": \"name\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"name\": \"uri\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"name\": \"total_supply\",\r\n \"type\": \"u32\"\r\n },\r\n {\r\n \"name\": \"start_price\",\r\n \"type\": \"u64\"\r\n },\r\n {\r\n \"name\": \"end_price\",\r\n \"type\": \"u64\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"create_merkle_tree\",\r\n \"docs\": [\r\n \"BubblegumMerkleTree\",\r\n \"\",\r\n \"# Arguments\",\r\n \"\",\r\n \"* `ctx` - The Anchor context holding the accounts\",\r\n \"* `max_depth` - depth of tree, decide collection size = 2^max_depth\",\r\n \"* `max_buffer_size` - decide concurrent read/write size\",\r\n \"* `is_pulic` - decide concurrent read/write size\"\r\n ],\r\n \"discriminator\": [\r\n 218,\r\n 186,\r\n 135,\r\n 175,\r\n 208,\r\n 231,\r\n 64,\r\n 147\r\n ],\r\n \"accounts\": [\r\n {\r\n \"name\": \"state\"\r\n },\r\n {\r\n \"name\": \"collection\",\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 99,\r\n 111,\r\n 108,\r\n 108,\r\n 101,\r\n 99,\r\n 116,\r\n 105,\r\n 111,\r\n 110\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"state\"\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"collection\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"merkle_tree_config\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"merkle_tree\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"payer\",\r\n \"writable\": true,\r\n \"signer\": true\r\n },\r\n {\r\n \"name\": \"tree_creator\",\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 116,\r\n 114,\r\n 101,\r\n 101,\r\n 95,\r\n 99,\r\n 114,\r\n 101,\r\n 97,\r\n 116,\r\n 111,\r\n 114,\r\n 95,\r\n 111,\r\n 114,\r\n 95,\r\n 100,\r\n 101,\r\n 108,\r\n 101,\r\n 103,\r\n 97,\r\n 116,\r\n 101\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"state\"\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"collection\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"log_wrapper\",\r\n \"address\": \"noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV\"\r\n },\r\n {\r\n \"name\": \"compression_program\",\r\n \"address\": \"cmtDvXumGCrqC1Age74AVPhSRVXJMd8PJS91L8KbNCK\"\r\n },\r\n {\r\n \"name\": \"mpl_bubblegum_program\",\r\n \"address\": \"BGUMAp9Gq7iTEuizy4pqaxsTyUCBK68MDfK752saRPUY\"\r\n },\r\n {\r\n \"name\": \"system_program\",\r\n \"address\": \"11111111111111111111111111111111\"\r\n },\r\n {\r\n \"name\": \"event_authority\",\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 95,\r\n 95,\r\n 101,\r\n 118,\r\n 101,\r\n 110,\r\n 116,\r\n 95,\r\n 97,\r\n 117,\r\n 116,\r\n 104,\r\n 111,\r\n 114,\r\n 105,\r\n 116,\r\n 121\r\n ]\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"program\"\r\n }\r\n ],\r\n \"args\": [\r\n {\r\n \"name\": \"max_depth\",\r\n \"type\": \"u32\"\r\n },\r\n {\r\n \"name\": \"max_buffer_size\",\r\n \"type\": \"u32\"\r\n },\r\n {\r\n \"name\": \"is_public\",\r\n \"type\": \"bool\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"eject_nft\",\r\n \"docs\": [\r\n \"EjectNft: Allows anyone to call it on behald of the nft_holder. It will transfer the NFT from the nft_holder PDA\",\r\n \"to the owner_pda token account.\",\r\n \"\",\r\n \"# Arguments\",\r\n \"\",\r\n \"* `ctx` - The Anchor context holding the accounts\",\r\n \"* `token_id` - The token_id of the NFT\"\r\n ],\r\n \"discriminator\": [\r\n 156,\r\n 103,\r\n 48,\r\n 244,\r\n 1,\r\n 157,\r\n 43,\r\n 67\r\n ],\r\n \"accounts\": [\r\n {\r\n \"name\": \"state\"\r\n },\r\n {\r\n \"name\": \"collection\",\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 99,\r\n 111,\r\n 108,\r\n 108,\r\n 101,\r\n 99,\r\n 116,\r\n 105,\r\n 111,\r\n 110\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"state\"\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"collection\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"collection_nft\",\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 99,\r\n 111,\r\n 108,\r\n 108,\r\n 101,\r\n 99,\r\n 116,\r\n 105,\r\n 111,\r\n 110,\r\n 95,\r\n 110,\r\n 102,\r\n 116\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"collection\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"nft_owner\"\r\n },\r\n {\r\n \"name\": \"nft_holder\",\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 110,\r\n 102,\r\n 116,\r\n 95,\r\n 104,\r\n 111,\r\n 108,\r\n 100,\r\n 101,\r\n 114\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"state\"\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"nft_owner\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"nft\",\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 110,\r\n 102,\r\n 116\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"state\"\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"collection\"\r\n },\r\n {\r\n \"kind\": \"arg\",\r\n \"path\": \"token_id\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"operator\",\r\n \"writable\": true,\r\n \"signer\": true\r\n },\r\n {\r\n \"name\": \"mpl_core\",\r\n \"address\": \"CoREENxT6tW1HoK8ypY1SxRMZTcVPm7R94rH4PZNhX7d\"\r\n },\r\n {\r\n \"name\": \"system_program\",\r\n \"address\": \"11111111111111111111111111111111\"\r\n }\r\n ],\r\n \"args\": [\r\n {\r\n \"name\": \"_token_id\",\r\n \"type\": \"u32\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"initialize\",\r\n \"docs\": [\r\n \"Initialize\",\r\n \"\",\r\n \"# Arguments\",\r\n \"\",\r\n \"* `ctx` - The Anchor context holding the accounts\",\r\n \"* `admin` - The admin of the program\",\r\n \"* `treasury` - The treasury account that receives fees\",\r\n \"* `lp_provisioner` - The wallet that will be adding liquidity to the 3rd party NFT marketplace upon curve completion\",\r\n \"* `protocol_fee_bps` - Current protocol fees (BPS)\",\r\n \"* `seller_fee_basis_points` - How much in fees should owner receive after resale i.e. royalties\"\r\n ],\r\n \"discriminator\": [\r\n 175,\r\n 175,\r\n 109,\r\n 31,\r\n 13,\r\n 152,\r\n 155,\r\n 237\r\n ],\r\n \"accounts\": [\r\n {\r\n \"name\": \"state\",\r\n \"docs\": [\r\n \"The state account of each instance of this program\"\r\n ],\r\n \"writable\": true,\r\n \"signer\": true\r\n },\r\n {\r\n \"name\": \"deployer\",\r\n \"writable\": true,\r\n \"signer\": true\r\n },\r\n {\r\n \"name\": \"system_program\",\r\n \"address\": \"11111111111111111111111111111111\"\r\n }\r\n ],\r\n \"args\": [\r\n {\r\n \"name\": \"admin\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"treasury\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"lp_provisioner\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"protocol_fee_bps\",\r\n \"type\": \"u16\"\r\n },\r\n {\r\n \"name\": \"seller_fee_basis_points\",\r\n \"type\": \"u16\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"mint_and_buy\",\r\n \"docs\": [\r\n \"MintAndBuy\",\r\n \"\",\r\n \"# Arguments\",\r\n \"\",\r\n \"* `ctx` - The Anchor context holding the accounts\",\r\n \"the token id of the new NFT\",\r\n \"* `name` - The name of the NFT\",\r\n \"* `uri` - The uri of the NFT metadata\"\r\n ],\r\n \"discriminator\": [\r\n 90,\r\n 139,\r\n 38,\r\n 252,\r\n 14,\r\n 71,\r\n 249,\r\n 58\r\n ],\r\n \"accounts\": [\r\n {\r\n \"name\": \"state\"\r\n },\r\n {\r\n \"name\": \"merkle_tree_config\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"tree_creator_or_delegate\",\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 116,\r\n 114,\r\n 101,\r\n 101,\r\n 95,\r\n 99,\r\n 114,\r\n 101,\r\n 97,\r\n 116,\r\n 111,\r\n 114,\r\n 95,\r\n 111,\r\n 114,\r\n 95,\r\n 100,\r\n 101,\r\n 108,\r\n 101,\r\n 103,\r\n 97,\r\n 116,\r\n 101\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"state\"\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"collection\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"nft_holder\",\r\n \"docs\": [\r\n \"directly but rather we store them in a PDA which they control (buyer is part of the seeds). When the curve\",\r\n \"is closed they can \\\"eject\\\" and transfer the NFT from this PDA to their final token account which they can use\",\r\n \"on other platforms\",\r\n \"this will be leaf_owner\"\r\n ],\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 110,\r\n 102,\r\n 116,\r\n 95,\r\n 104,\r\n 111,\r\n 108,\r\n 100,\r\n 101,\r\n 114\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"state\"\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"buyer\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"merkle_tree\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"collection\",\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 99,\r\n 111,\r\n 108,\r\n 108,\r\n 101,\r\n 99,\r\n 116,\r\n 105,\r\n 111,\r\n 110\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"state\"\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"collection\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"collection_nft\",\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 99,\r\n 111,\r\n 108,\r\n 108,\r\n 101,\r\n 99,\r\n 116,\r\n 105,\r\n 111,\r\n 110,\r\n 95,\r\n 110,\r\n 102,\r\n 116\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"collection\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"collection_mint\",\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 99,\r\n 111,\r\n 108,\r\n 108,\r\n 101,\r\n 99,\r\n 116,\r\n 105,\r\n 111,\r\n 110,\r\n 95,\r\n 109,\r\n 105,\r\n 110,\r\n 116\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"collection\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"collection_metadata\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"collection_edition\"\r\n },\r\n {\r\n \"name\": \"bubblegum_signer\",\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 99,\r\n 111,\r\n 108,\r\n 108,\r\n 101,\r\n 99,\r\n 116,\r\n 105,\r\n 111,\r\n 110,\r\n 95,\r\n 99,\r\n 112,\r\n 105\r\n ]\r\n }\r\n ],\r\n \"program\": {\r\n \"kind\": \"account\",\r\n \"path\": \"mpl_bubblegum_program\"\r\n }\r\n }\r\n },\r\n {\r\n \"name\": \"log_wrapper\",\r\n \"address\": \"noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV\"\r\n },\r\n {\r\n \"name\": \"buyer\",\r\n \"docs\": [\r\n \"The user that is creating the token\"\r\n ],\r\n \"writable\": true,\r\n \"signer\": true\r\n },\r\n {\r\n \"name\": \"compression_program\",\r\n \"address\": \"cmtDvXumGCrqC1Age74AVPhSRVXJMd8PJS91L8KbNCK\"\r\n },\r\n {\r\n \"name\": \"token_metadata_program\",\r\n \"address\": \"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s\"\r\n },\r\n {\r\n \"name\": \"mpl_bubblegum_program\",\r\n \"address\": \"BGUMAp9Gq7iTEuizy4pqaxsTyUCBK68MDfK752saRPUY\"\r\n },\r\n {\r\n \"name\": \"system_program\",\r\n \"address\": \"11111111111111111111111111111111\"\r\n },\r\n {\r\n \"name\": \"treasury\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"event_authority\",\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 95,\r\n 95,\r\n 101,\r\n 118,\r\n 101,\r\n 110,\r\n 116,\r\n 95,\r\n 97,\r\n 117,\r\n 116,\r\n 104,\r\n 111,\r\n 114,\r\n 105,\r\n 116,\r\n 121\r\n ]\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"program\"\r\n }\r\n ],\r\n \"args\": [\r\n {\r\n \"name\": \"names\",\r\n \"type\": {\r\n \"vec\": \"string\"\r\n }\r\n },\r\n {\r\n \"name\": \"base_uri\",\r\n \"type\": \"string\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"move_liquidity\",\r\n \"docs\": [\r\n \"MoveLiquidity\",\r\n \"\",\r\n \"# Arguments\",\r\n \"\",\r\n \"* `ctx` - The Anchor context holding the accounts\"\r\n ],\r\n \"discriminator\": [\r\n 20,\r\n 32,\r\n 95,\r\n 239,\r\n 213,\r\n 242,\r\n 237,\r\n 45\r\n ],\r\n \"accounts\": [\r\n {\r\n \"name\": \"state\"\r\n },\r\n {\r\n \"name\": \"collection\",\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 99,\r\n 111,\r\n 108,\r\n 108,\r\n 101,\r\n 99,\r\n 116,\r\n 105,\r\n 111,\r\n 110\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"state\"\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"collection\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"treasury\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"collection_creator\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"lp_provisioner\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"event_authority\",\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 95,\r\n 95,\r\n 101,\r\n 118,\r\n 101,\r\n 110,\r\n 116,\r\n 95,\r\n 97,\r\n 117,\r\n 116,\r\n 104,\r\n 111,\r\n 114,\r\n 105,\r\n 116,\r\n 121\r\n ]\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"program\"\r\n }\r\n ],\r\n \"args\": []\r\n },\r\n {\r\n \"name\": \"sell\",\r\n \"docs\": [\r\n \"Sell\",\r\n \"\",\r\n \"# Arguments\",\r\n \"\",\r\n \"* `ctx` - The Anchor context holding the accounts\",\r\n \"* `token_id` - The token_id of the NFT that will be purchased from the pool or if we're minting it'll be\",\r\n \"the token id of the new NFT\"\r\n ],\r\n \"discriminator\": [\r\n 51,\r\n 230,\r\n 133,\r\n 164,\r\n 1,\r\n 127,\r\n 131,\r\n 173\r\n ],\r\n \"accounts\": [\r\n {\r\n \"name\": \"state\"\r\n },\r\n {\r\n \"name\": \"merkle_tree_config\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"merkle_tree\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"collection\",\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 99,\r\n 111,\r\n 108,\r\n 108,\r\n 101,\r\n 99,\r\n 116,\r\n 105,\r\n 111,\r\n 110\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"state\"\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"collection\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"collection_nft\",\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 99,\r\n 111,\r\n 108,\r\n 108,\r\n 101,\r\n 99,\r\n 116,\r\n 105,\r\n 111,\r\n 110,\r\n 95,\r\n 110,\r\n 102,\r\n 116\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"collection\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"treasury\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"nft_holder\",\r\n \"docs\": [\r\n \"will be signer on CPI\"\r\n ],\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 110,\r\n 102,\r\n 116,\r\n 95,\r\n 104,\r\n 111,\r\n 108,\r\n 100,\r\n 101,\r\n 114\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"state\"\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"seller\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"seller\",\r\n \"docs\": [\r\n \"The user that is creating the token\"\r\n ],\r\n \"writable\": true,\r\n \"signer\": true\r\n },\r\n {\r\n \"name\": \"compression_program\",\r\n \"address\": \"cmtDvXumGCrqC1Age74AVPhSRVXJMd8PJS91L8KbNCK\"\r\n },\r\n {\r\n \"name\": \"token_metadata_program\",\r\n \"address\": \"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s\"\r\n },\r\n {\r\n \"name\": \"mpl_bubblegum_program\",\r\n \"address\": \"BGUMAp9Gq7iTEuizy4pqaxsTyUCBK68MDfK752saRPUY\"\r\n },\r\n {\r\n \"name\": \"log_wrapper\",\r\n \"address\": \"noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV\"\r\n },\r\n {\r\n \"name\": \"system_program\",\r\n \"address\": \"11111111111111111111111111111111\"\r\n },\r\n {\r\n \"name\": \"event_authority\",\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 95,\r\n 95,\r\n 101,\r\n 118,\r\n 101,\r\n 110,\r\n 116,\r\n 95,\r\n 97,\r\n 117,\r\n 116,\r\n 104,\r\n 111,\r\n 114,\r\n 105,\r\n 116,\r\n 121\r\n ]\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"program\"\r\n }\r\n ],\r\n \"args\": [\r\n {\r\n \"name\": \"token_id\",\r\n \"type\": \"u32\"\r\n },\r\n {\r\n \"name\": \"root\",\r\n \"type\": {\r\n \"array\": [\r\n \"u8\",\r\n 32\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"data_hash\",\r\n \"type\": {\r\n \"array\": [\r\n \"u8\",\r\n 32\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"creator_hash\",\r\n \"type\": {\r\n \"array\": [\r\n \"u8\",\r\n 32\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"nonce\",\r\n \"type\": \"u64\"\r\n },\r\n {\r\n \"name\": \"index\",\r\n \"type\": \"u32\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"update_state\",\r\n \"docs\": [\r\n \"UpdateState\",\r\n \"\",\r\n \"# Arguments\",\r\n \"\",\r\n \"* `ctx` - The Anchor context holding the accounts\",\r\n \"* `admin` - The admin of the program\",\r\n \"* `treasury` - The treasury account that receives fees\",\r\n \"* `lp_provisioner` - The wallet that will be adding liquidity to the 3rd party NFT marketplace upon curve completion\",\r\n \"* `protocol_fee_bps` - Current protocol fees (BPS)\",\r\n \"* `seller_fee_basis_points` - How much in fees should owner receive after resale i.e. royalties\"\r\n ],\r\n \"discriminator\": [\r\n 135,\r\n 112,\r\n 215,\r\n 75,\r\n 247,\r\n 185,\r\n 53,\r\n 176\r\n ],\r\n \"accounts\": [\r\n {\r\n \"name\": \"state\",\r\n \"docs\": [\r\n \"The state account of each instance of this program\"\r\n ],\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"admin\",\r\n \"writable\": true,\r\n \"signer\": true\r\n }\r\n ],\r\n \"args\": [\r\n {\r\n \"name\": \"admin\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"treasury\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"lp_provisioner\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"protocol_fee_bps\",\r\n \"type\": \"u16\"\r\n },\r\n {\r\n \"name\": \"seller_fee_basis_points\",\r\n \"type\": \"u16\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"accounts\": [\r\n {\r\n \"name\": \"Collection\",\r\n \"discriminator\": [\r\n 48,\r\n 160,\r\n 232,\r\n 205,\r\n 191,\r\n 207,\r\n 26,\r\n 141\r\n ]\r\n },\r\n {\r\n \"name\": \"State\",\r\n \"discriminator\": [\r\n 216,\r\n 146,\r\n 107,\r\n 94,\r\n 104,\r\n 75,\r\n 182,\r\n 177\r\n ]\r\n }\r\n ],\r\n \"events\": [\r\n {\r\n \"name\": \"BuyEvent\",\r\n \"discriminator\": [\r\n 103,\r\n 244,\r\n 82,\r\n 31,\r\n 44,\r\n 245,\r\n 119,\r\n 119\r\n ]\r\n },\r\n {\r\n \"name\": \"CollectionCreatedEvent\",\r\n \"discriminator\": [\r\n 146,\r\n 244,\r\n 148,\r\n 65,\r\n 159,\r\n 214,\r\n 113,\r\n 185\r\n ]\r\n },\r\n {\r\n \"name\": \"MintEvent\",\r\n \"discriminator\": [\r\n 197,\r\n 144,\r\n 146,\r\n 149,\r\n 66,\r\n 164,\r\n 95,\r\n 16\r\n ]\r\n },\r\n {\r\n \"name\": \"MoveLiquidityEvent\",\r\n \"discriminator\": [\r\n 62,\r\n 16,\r\n 64,\r\n 187,\r\n 176,\r\n 107,\r\n 185,\r\n 31\r\n ]\r\n },\r\n {\r\n \"name\": \"SellEvent\",\r\n \"discriminator\": [\r\n 62,\r\n 47,\r\n 55,\r\n 10,\r\n 165,\r\n 3,\r\n 220,\r\n 42\r\n ]\r\n }\r\n ],\r\n \"errors\": [\r\n {\r\n \"code\": 6000,\r\n \"name\": \"OnlyAdmin\",\r\n \"msg\": \"Only admin\"\r\n },\r\n {\r\n \"code\": 6001,\r\n \"name\": \"WrongTreasury\",\r\n \"msg\": \"Wrong treasury account\"\r\n },\r\n {\r\n \"code\": 6002,\r\n \"name\": \"WrongCreator\",\r\n \"msg\": \"Wrong creator account\"\r\n },\r\n {\r\n \"code\": 6003,\r\n \"name\": \"WrongLpProvisioner\",\r\n \"msg\": \"Wrong LP provisioner account\"\r\n },\r\n {\r\n \"code\": 6004,\r\n \"name\": \"WrongProgramId\",\r\n \"msg\": \"Wrong program id\"\r\n },\r\n {\r\n \"code\": 6005,\r\n \"name\": \"WrongIxData\",\r\n \"msg\": \"Wrong instruction data\"\r\n },\r\n {\r\n \"code\": 6006,\r\n \"name\": \"ExpectedMoveLiquidityIx\",\r\n \"msg\": \"Expected MoveLiquidity ix\"\r\n },\r\n {\r\n \"code\": 6007,\r\n \"name\": \"CreateFeeNotSet\",\r\n \"msg\": \"Create fee not set\"\r\n },\r\n {\r\n \"code\": 6008,\r\n \"name\": \"InvalidSupply\",\r\n \"msg\": \"Total supply must be greater than 0\"\r\n },\r\n {\r\n \"code\": 6009,\r\n \"name\": \"CollectionSoldOut\",\r\n \"msg\": \"Collection is sold out\"\r\n },\r\n {\r\n \"code\": 6010,\r\n \"name\": \"CollectionNotSoldOut\",\r\n \"msg\": \"Collection is not sold out\"\r\n },\r\n {\r\n \"code\": 6011,\r\n \"name\": \"MintPaused\",\r\n \"msg\": \"Minting is currently paused\"\r\n },\r\n {\r\n \"code\": 6012,\r\n \"name\": \"WrongMetadataProgram\",\r\n \"msg\": \"Wrong Metadata program\"\r\n }\r\n ],\r\n \"types\": [\r\n {\r\n \"name\": \"BuyEvent\",\r\n \"type\": {\r\n \"kind\": \"struct\",\r\n \"fields\": [\r\n {\r\n \"name\": \"buyer\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"token_id\",\r\n \"type\": \"u32\"\r\n },\r\n {\r\n \"name\": \"collection\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"price\",\r\n \"type\": \"u64\"\r\n },\r\n {\r\n \"name\": \"timestamp\",\r\n \"type\": \"i64\"\r\n },\r\n {\r\n \"name\": \"total_sol\",\r\n \"type\": \"u64\"\r\n },\r\n {\r\n \"name\": \"next_price\",\r\n \"type\": \"u64\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"Collection\",\r\n \"serialization\": \"bytemuck\",\r\n \"repr\": {\r\n \"kind\": \"c\"\r\n },\r\n \"type\": {\r\n \"kind\": \"struct\",\r\n \"fields\": [\r\n {\r\n \"name\": \"pool\",\r\n \"docs\": [\r\n \"The liquidity pool\"\r\n ],\r\n \"type\": {\r\n \"defined\": {\r\n \"name\": \"LiquidityPool\"\r\n }\r\n }\r\n },\r\n {\r\n \"name\": \"creator\",\r\n \"docs\": [\r\n \"The account that created the collection\"\r\n ],\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"total_sol\",\r\n \"docs\": [\r\n \"Total SOL currently in the pool\"\r\n ],\r\n \"type\": \"u64\"\r\n },\r\n {\r\n \"name\": \"total_supply\",\r\n \"docs\": [\r\n \"The total number of NFTs that will be minted in this collection\"\r\n ],\r\n \"type\": \"u32\"\r\n },\r\n {\r\n \"name\": \"mint_count\",\r\n \"docs\": [\r\n \"Total NFTs minted so far\"\r\n ],\r\n \"type\": \"u32\"\r\n },\r\n {\r\n \"name\": \"id\",\r\n \"docs\": [\r\n \"The collection id\"\r\n ],\r\n \"type\": \"u32\"\r\n },\r\n {\r\n \"name\": \"seller_fee_basis_points\",\r\n \"docs\": [\r\n \"How much in fees should owner receive after resale i.e. royalties\"\r\n ],\r\n \"type\": \"u16\"\r\n },\r\n {\r\n \"name\": \"protocol_fee_bps\",\r\n \"docs\": [\r\n \"Current protocol fees (BPS)\"\r\n ],\r\n \"type\": \"u16\"\r\n },\r\n {\r\n \"name\": \"is_sold_out\",\r\n \"docs\": [\r\n \"Is the curve sold out\"\r\n ],\r\n \"type\": \"u8\"\r\n },\r\n {\r\n \"name\": \"is_paused\",\r\n \"docs\": [\r\n \"Is it paused by the creator\"\r\n ],\r\n \"type\": \"u8\"\r\n },\r\n {\r\n \"name\": \"bump\",\r\n \"type\": \"u8\"\r\n },\r\n {\r\n \"name\": \"collection_nft_bump\",\r\n \"type\": \"u8\"\r\n },\r\n {\r\n \"name\": \"_padding\",\r\n \"type\": {\r\n \"array\": [\r\n \"u8\",\r\n 4\r\n ]\r\n }\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"CollectionCreatedEvent\",\r\n \"type\": {\r\n \"kind\": \"struct\",\r\n \"fields\": [\r\n {\r\n \"name\": \"collection_id\",\r\n \"type\": \"u32\"\r\n },\r\n {\r\n \"name\": \"collection\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"creator\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"mint\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"name\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"name\": \"uri\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"name\": \"session_id\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"name\": \"total_supply\",\r\n \"type\": \"u32\"\r\n },\r\n {\r\n \"name\": \"timestamp\",\r\n \"type\": \"i64\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"LiquidityPool\",\r\n \"repr\": {\r\n \"kind\": \"c\"\r\n },\r\n \"type\": {\r\n \"kind\": \"struct\",\r\n \"fields\": [\r\n {\r\n \"name\": \"current_price\",\r\n \"type\": \"u64\"\r\n },\r\n {\r\n \"name\": \"start_price\",\r\n \"type\": \"u64\"\r\n },\r\n {\r\n \"name\": \"end_price\",\r\n \"type\": \"u64\"\r\n },\r\n {\r\n \"name\": \"nft_count\",\r\n \"type\": \"u32\"\r\n },\r\n {\r\n \"name\": \"steepness\",\r\n \"type\": \"f32\"\r\n },\r\n {\r\n \"name\": \"mid_point\",\r\n \"type\": \"f32\"\r\n },\r\n {\r\n \"name\": \"_padding\",\r\n \"type\": {\r\n \"array\": [\r\n \"u8\",\r\n 4\r\n ]\r\n }\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"MintEvent\",\r\n \"type\": {\r\n \"kind\": \"struct\",\r\n \"fields\": [\r\n {\r\n \"name\": \"buyer\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"collection\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"token_id\",\r\n \"type\": \"u32\"\r\n },\r\n {\r\n \"name\": \"name\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"name\": \"uri\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"name\": \"mint_count\",\r\n \"type\": \"u32\"\r\n },\r\n {\r\n \"name\": \"price\",\r\n \"type\": \"u64\"\r\n },\r\n {\r\n \"name\": \"timestamp\",\r\n \"type\": \"i64\"\r\n },\r\n {\r\n \"name\": \"is_sold_out\",\r\n \"type\": \"u8\"\r\n },\r\n {\r\n \"name\": \"total_sol\",\r\n \"type\": \"u64\"\r\n },\r\n {\r\n \"name\": \"next_price\",\r\n \"type\": \"u64\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"MoveLiquidityEvent\",\r\n \"type\": {\r\n \"kind\": \"struct\",\r\n \"fields\": [\r\n {\r\n \"name\": \"collection_nft\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"migration_fee\",\r\n \"type\": \"u64\"\r\n },\r\n {\r\n \"name\": \"creator_fee\",\r\n \"type\": \"u64\"\r\n },\r\n {\r\n \"name\": \"liquidity\",\r\n \"type\": \"u64\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"SellEvent\",\r\n \"type\": {\r\n \"kind\": \"struct\",\r\n \"fields\": [\r\n {\r\n \"name\": \"seller\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"token_id\",\r\n \"type\": \"u32\"\r\n },\r\n {\r\n \"name\": \"collection\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"price\",\r\n \"type\": \"u64\"\r\n },\r\n {\r\n \"name\": \"timestamp\",\r\n \"type\": \"i64\"\r\n },\r\n {\r\n \"name\": \"total_sol\",\r\n \"type\": \"u64\"\r\n },\r\n {\r\n \"name\": \"next_price\",\r\n \"type\": \"u64\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"State\",\r\n \"serialization\": \"bytemuck\",\r\n \"repr\": {\r\n \"kind\": \"c\"\r\n },\r\n \"type\": {\r\n \"kind\": \"struct\",\r\n \"fields\": [\r\n {\r\n \"name\": \"admin\",\r\n \"docs\": [\r\n \"The admin that can handle various admin related tasks\"\r\n ],\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"treasury\",\r\n \"docs\": [\r\n \"The treasury account that receives fees\"\r\n ],\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"lp_provisioner\",\r\n \"docs\": [\r\n \"The wallet that will be adding liquidity to the 3rd party NFT marketplace upon curve completion\"\r\n ],\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"collection_count\",\r\n \"docs\": [\r\n \"count of total collections created\"\r\n ],\r\n \"type\": \"u32\"\r\n },\r\n {\r\n \"name\": \"protocol_fee_bps\",\r\n \"docs\": [\r\n \"Current protocol fees (BPS)\"\r\n ],\r\n \"type\": \"u16\"\r\n },\r\n {\r\n \"name\": \"seller_fee_basis_points\",\r\n \"docs\": [\r\n \"How much in fees should creator receive after resale i.e. royalties\"\r\n ],\r\n \"type\": \"u16\"\r\n }\r\n ]\r\n }\r\n }\r\n ]\r\n}","\r\nimport { PublicKey } from \"@solana/web3.js\";\r\n\r\nexport const SOLANA = {\r\n STATE_ID_STR: \"AXvoBGptmqSq69u2mQd7EcwGcgLoHXRxh7CVojimRVnH\",\r\n TREASURY_ID_STR: \"5VmcDuGTMMxFfcZB1W7AsARSbcswvM2wq7NENqaRV9eu\",\r\n LP_PROVISIONER_ID_STR: \"5VmcDuGTMMxFfcZB1W7AsARSbcswvM2wq7NENqaRV9eu\",\r\n TOKEN_METADATA_PROGRAM_ID_STR: \"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s\", \r\n MPL_CORE_STR: \"CoREENxT6tW1HoK8ypY1SxRMZTcVPm7R94rH4PZNhX7d\",\r\n ADMIN_FOR_CREDIT_BUY_STR: \"8pvgCVqHh2F1zdMdj7mo6AJPcV4ZwcPvhoomhSFib8vv\",\r\n MPL_BUBBLEGUM_STR: \"BGUMAp9Gq7iTEuizy4pqaxsTyUCBK68MDfK752saRPUY\",\r\n SPL_ACCOUNT_COMPRESSION_STR: \"cmtDvXumGCrqC1Age74AVPhSRVXJMd8PJS91L8KbNCK\",\r\n SPL_NOOP_STR: \"noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV\",\r\n SPL_TOKEN_STR: \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\",\r\n SPL_ATA_TOKEN_STR: \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\",\r\n RENT_TOKEN_STR: \"SysvarRent111111111111111111111111111111111\"\r\n};\r\n\r\nexport enum ENV {\r\n Devnet = \"Devnet\",\r\n Mainnet = \"Mainnet\",\r\n}\r\nexport const RPC = {\r\n Devnet: \"https://api.devnet.solana.com\",\r\n Mainnet: \"https://api.mainnet-beta.solana.com\",\r\n};\r\n\r\nexport const SOLANA_PUBKEYS = {\r\n STATE_ID: new PublicKey(SOLANA.STATE_ID_STR),\r\n TREASURY_ID: new PublicKey(SOLANA.TREASURY_ID_STR),\r\n LP_PROVISIONER_ID: new PublicKey(SOLANA.LP_PROVISIONER_ID_STR),\r\n TOKEN_METADATA_PROGRAM_ID: new PublicKey(\r\n SOLANA.TOKEN_METADATA_PROGRAM_ID_STR\r\n ),\r\n ADMIN_FOR_CREDIT_BUY: new PublicKey(SOLANA.ADMIN_FOR_CREDIT_BUY_STR),\r\n MPL_BUBBLEGUM_ID: new PublicKey(SOLANA.MPL_BUBBLEGUM_STR),\r\n SPL_ACCOUNT_COMPRESSION_ID: new PublicKey(SOLANA.SPL_ACCOUNT_COMPRESSION_STR),\r\n SPL_NOOP_ID: new PublicKey(SOLANA.SPL_NOOP_STR),\r\n SPL_TOKEN_ID: new PublicKey(SOLANA.SPL_TOKEN_STR),\r\n SPL_ATA_TOKEN_ID: new PublicKey(SOLANA.SPL_ATA_TOKEN_STR),\r\n RENT_TOKEN_ID: new PublicKey(SOLANA.RENT_TOKEN_STR),\r\n};\r\n\r\nexport const SDK_SOLANA_CONFIG = {\r\n CHUNK_SIZE:3\r\n}\r\n\r\n//get @solana/spl-account-compression/src/constants/index.ts\r\n// export type ValidDepthSizePair =\r\n// | { maxBufferSize: 8; maxDepth: 3 }\r\n// | { maxBufferSize: 8; maxDepth: 5 }\r\n// | { maxBufferSize: 16; maxDepth: 6 }\r\n// | { maxBufferSize: 16; maxDepth: 7 }\r\n// | { maxBufferSize: 16; maxDepth: 8 }\r\n// | { maxBufferSize: 16; maxDepth: 9 }\r\n// | { maxBufferSize: 32; maxDepth: 10 }\r\n// | { maxBufferSize: 32; maxDepth: 11 }\r\n// | { maxBufferSize: 32; maxDepth: 12 }\r\n// | { maxBufferSize: 32; maxDepth: 13 }\r\n// | { maxBufferSize: 64; maxDepth: 14 }\r\n// | { maxBufferSize: 64; maxDepth: 15 }\r\n// | { maxBufferSize: 64; maxDepth: 16 }\r\n// | { maxBufferSize: 64; maxDepth: 17 }\r\n// | { maxBufferSize: 64; maxDepth: 18 }\r\n// | { maxBufferSize: 64; maxDepth: 19 }\r\n// | { maxBufferSize: 64; maxDepth: 20 }\r\n// | { maxBufferSize: 64; maxDepth: 24 }\r\n// | { maxBufferSize: 256; maxDepth: 14 }\r\n// | { maxBufferSize: 256; maxDepth: 20 }\r\n// | { maxBufferSize: 256; maxDepth: 24 }\r\n// | { maxBufferSize: 512; maxDepth: 24 }\r\n// | { maxBufferSize: 512; maxDepth: 26 }\r\n// | { maxBufferSize: 512; maxDepth: 30 }\r\n// | { maxBufferSize: 1024; maxDepth: 14 }\r\n// | { maxBufferSize: 1024; maxDepth: 20 }\r\n// | { maxBufferSize: 1024; maxDepth: 24 }\r\n// | { maxBufferSize: 1024; maxDepth: 26 }\r\n// | { maxBufferSize: 1024; maxDepth: 30 }\r\n// | { maxBufferSize: 2048; maxDepth: 14 }\r\n// | { maxBufferSize: 2048; maxDepth: 20 }\r\n// | { maxBufferSize: 2048; maxDepth: 24 }\r\n// | { maxBufferSize: 2048; maxDepth: 26 }\r\n// | { maxBufferSize: 2048; maxDepth: 30 };\r\n\r\nexport const VALID_SIZE_PAIR = {\r\n 3: { maxBufferSize: 8, maxDepth: 3 }, \r\n 4: { maxBufferSize: 8, maxDepth: 5 }, //not exist so use of which max depth is 5\r\n 5: { maxBufferSize: 8, maxDepth: 5 },\r\n 6: { maxBufferSize: 16, maxDepth: 6 },\r\n 7: { maxBufferSize: 16, maxDepth: 7 },\r\n 8: { maxBufferSize: 16, maxDepth: 8 },\r\n 9: { maxBufferSize: 16, maxDepth: 9 },\r\n 10: { maxBufferSize: 32, maxDepth: 10 },\r\n 11: { maxBufferSize: 32, maxDepth: 11 },\r\n 12: { maxBufferSize: 32, maxDepth: 12 },\r\n 13: { maxBufferSize: 32, maxDepth: 13 },\r\n 14: { maxBufferSize: 256, maxDepth: 14 },\r\n 15: { maxBufferSize: 64, maxDepth: 15 },\r\n 16: { maxBufferSize: 64, maxDepth: 16 },\r\n 17: { maxBufferSize: 64, maxDepth: 17 },\r\n 18: { maxBufferSize: 64, maxDepth: 18 },\r\n 19: { maxBufferSize: 64, maxDepth: 19 },\r\n 20: { maxBufferSize: 1024, maxDepth: 20 },\r\n 21: { maxBufferSize: 1024, maxDepth: 24 }, //not exist so use of which max depth is 24\r\n 22: { maxBufferSize: 1024, maxDepth: 24 }, //not exist so use of which max depth is 24\r\n 23: { maxBufferSize: 1024, maxDepth: 24 }, //not exist so use of which max depth is 24\r\n 24: { maxBufferSize: 1024, maxDepth: 24 },\r\n};\r\n","import * as anchor from \"@coral-xyz/anchor\";\r\nimport { PublicKey } from \"@solana/web3.js\";\r\nimport { SOLANA_PUBKEYS } from \"../constants\";\r\nimport { getAssociatedTokenAddress } from \"@solana/spl-token\";\r\nexport const eventAuthority = (programId: PublicKey) =>\r\n PublicKey.findProgramAddressSync(\r\n [Buffer.from(\"__event_authority\")],\r\n programId\r\n )[0];\r\n\r\nexport const collectionPda = (collectionId: string, programId: PublicKey) =>\r\n PublicKey.findProgramAddressSync(\r\n [\r\n Buffer.from(\"collection\"),\r\n SOLANA_PUBKEYS.STATE_ID.toBuffer(),\r\n Buffer.from(collectionId),\r\n ],\r\n programId\r\n )[0];\r\n\r\nexport const collectionNftPda = (\r\n collectionPda: PublicKey,\r\n programId: PublicKey\r\n) =>\r\n PublicKey.findProgramAddressSync(\r\n [Buffer.from(\"collection_nft\"), collectionPda.toBuffer()],\r\n programId\r\n )[0];\r\n\r\nexport const collectionMintPda = (\r\n collectionPda: PublicKey,\r\n programId: PublicKey\r\n) =>\r\n PublicKey.findProgramAddressSync(\r\n [Buffer.from(\"collection_mint\"), collectionPda.toBuffer()],\r\n programId\r\n )[0];\r\n\r\nexport const nftPda = (\r\n collectionPda: PublicKey,\r\n tokenId: string | number,\r\n programId: PublicKey\r\n) => {\r\n return PublicKey.findProgramAddressSync(\r\n [\r\n Buffer.from(\"nft\"),\r\n SOLANA_PUBKEYS.STATE_ID.toBuffer(),\r\n collectionPda.toBuffer(),\r\n Buffer.from(tokenId.toString()),\r\n ],\r\n programId\r\n )[0];\r\n};\r\n\r\nexport const nftHolderPda = (buyerPublicKey: PublicKey, programId: PublicKey) =>\r\n PublicKey.findProgramAddressSync(\r\n [\r\n Buffer.from(\"nft_holder\"),\r\n SOLANA_PUBKEYS.STATE_ID.toBuffer(),\r\n buyerPublicKey.toBuffer(),\r\n ],\r\n programId\r\n )[0];\r\n\r\nexport const treeCreatorPda = (collectionId: string, programId: PublicKey) =>\r\n PublicKey.findProgramAddressSync(\r\n [\r\n Buffer.from(\"tree_creator_or_delegate\"),\r\n SOLANA_PUBKEYS.STATE_ID.toBuffer(),\r\n Buffer.from(collectionId),\r\n ],\r\n programId\r\n )[0];\r\n\r\nexport const treeConfigPda = (tree: PublicKey) =>\r\n PublicKey.findProgramAddressSync(\r\n [tree.toBuffer()],\r\n SOLANA_PUBKEYS.MPL_BUBBLEGUM_ID\r\n )[0];\r\n\r\nexport const collectionMetadataPda = (mint: PublicKey) =>\r\n PublicKey.findProgramAddressSync(\r\n [\r\n Buffer.from(\"metadata\"),\r\n SOLANA_PUBKEYS.TOKEN_METADATA_PROGRAM_ID.toBuffer(),\r\n mint.toBuffer(),\r\n ],\r\n SOLANA_PUBKEYS.TOKEN_METADATA_PROGRAM_ID\r\n )[0];\r\n\r\nexport const collectionMasterEditionPda = (mint: PublicKey) =>\r\n PublicKey.findProgramAddressSync(\r\n [\r\n Buffer.from(\"metadata\"),\r\n SOLANA_PUBKEYS.TOKEN_METADATA_PROGRAM_ID.toBuffer(),\r\n mint.toBuffer(),\r\n Buffer.from(\"edition\"),\r\n ],\r\n SOLANA_PUBKEYS.TOKEN_METADATA_PROGRAM_ID\r\n )[0];\r\n\r\n export const bubblegumSignerPda = () =>\r\n PublicKey.findProgramAddressSync(\r\n [\r\n Buffer.from(\"collection_cpi\"), \r\n ],\r\n SOLANA_PUBKEYS.MPL_BUBBLEGUM_ID\r\n )[0];\r\n \r\n ","import * as accounts from \"./accounts\";\r\nimport {\r\n ComputeBudgetProgram,\r\n PublicKey,\r\n TransactionInstruction,\r\n} from \"@solana/web3.js\";\r\nimport { getAssociatedTokenAddress } from \"@solana/spl-token\";\r\n\r\nexport const getTokenChunks = <T>(items: T[], chunkSize: number) => {\r\n const tokenChunks = [];\r\n for (let i = 0; i < items.length; i += chunkSize) {\r\n tokenChunks.push(items.slice(i, i + chunkSize));\r\n }\r\n\r\n return tokenChunks;\r\n};\r\n\r\nexport const getTradingAccounts = async (\r\n collectionId: string,\r\n userPublicKey: PublicKey | undefined,\r\n programId: PublicKey,\r\n merkleTree: PublicKey | undefined,\r\n creatorAddress: string | undefined //in case of buy this is a collection creator address\r\n) => {\r\n const collectionIDBuffer = Buffer.from(collectionId, \"base64\");\r\n const collectionIDArray = Array.from(collectionIDBuffer);\r\n const collectionPda = accounts.collectionPda(collectionId, programId); //get_collection_pub\r\n const collectionNftPda = accounts.collectionNftPda(collectionPda, programId); //get_collection_nft_pub\r\n const collectionMintPda = accounts.collectionMintPda(\r\n collectionPda,\r\n programId\r\n );\r\n const collectionMetaDataPda =\r\n accounts.collectionMetadataPda(collectionMintPda);\r\n const collectionEditionPda =\r\n accounts.collectionMasterEditionPda(collectionMintPda);\r\n const treeCreator = accounts.treeCreatorPda(collectionId, programId); //get_tree_creator\r\n let bubblegumSigner = accounts.bubblegumSignerPda();\r\n\r\n const treeConfigPda = merkleTree\r\n ? accounts.treeConfigPda(merkleTree)\r\n : undefined;\r\n const nftHolderPda = userPublicKey\r\n ? accounts.nftHolderPda(userPublicKey, programId)\r\n : undefined;\r\n const collectionCreator = creatorAddress && new PublicKey(creatorAddress);\r\n\r\n return {\r\n collectionIDBuffer,\r\n collectionIDArray,\r\n collectionPda,\r\n collectionNftPda,\r\n collectionMintPda,\r\n collectionMetaDataPda,\r\n collectionEditionPda,\r\n treeCreator,\r\n treeConfigPda,\r\n nftHolderPda,\r\n bubblegumSigner,\r\n collectionCreator,\r\n };\r\n};\r\n","import {\r\n BlockhashWithExpiryBlockHeight,\r\n CompiledInnerInstruction,\r\n CompiledInstruction,\r\n VersionedTransactionResponse,\r\n} from \"@solana/web3.js\";\r\nimport { BuyResponse, SellResponse } from \"../types\";\r\nimport { Program, utils } from \"@coral-xyz/anchor\";\r\nimport { FlipmemeProgramNew } from \"./idls\";\r\nimport { Decimal } from 'decimal.js';\r\n\r\nexport function analyzeBuyTransaction(\r\n program: Program<FlipmemeProgramNew>,\r\n transactionData: VersionedTransactionResponse\r\n): BuyResponse[] {\r\n console.log(\"transactionData===\", transactionData);\r\n let instructions = transactionData.meta?.innerInstructions;\r\n let blockNumber = transactionData.slot;\r\n let blockTime = transactionData.blockTime!;\r\n let blockDate = new Date(blockTime * 1000);\r\n let signature = transactionData.transaction.signatures[0];\r\n let buyResponse: BuyResponse[] = [];\r\n if (instructions) {\r\n for (const instruction of instructions as CompiledInnerInstruction[]) {\r\n for (const subInstruction of instruction.instructions as CompiledInstruction[]) {\r\n let rawData = utils.bytes.bs58.decode(subInstruction.data);\r\n const base64Data = utils.bytes.base64.encode(rawData.subarray(8));\r\n let decodedData = program.coder.events.decode(base64Data);\r\n if (decodedData?.name === \"mintEvent\") { \r\n buyResponse.push({\r\n buyer: decodedData.data.buyer.toString(),\r\n collectionAddress: decodedData.data.collection.toString(),\r\n nftAddress: decodedData.data.nft.toString(),\r\n tokenId: decodedData.data.tokenId.toString(),\r\n tokenName: decodedData.data.name.toString(),\r\n tokenUri: decodedData.data.uri.toString(),\r\n price: decodedData.data.price.toString(),\r\n nextPrice: decodedData.data.nextPrice.toString(),\r\n isSoldOut: decodedData.data.isSoldOut,\r\n totalSolAmount: decodedData.data.totalSol.toString(),\r\n timestamp: decodedData.data.timestamp.toString(),\r\n blockNumber: blockNumber.toString(),\r\n blockTimeDate: blockDate.toISOString(),\r\n signature: signature,\r\n });\r\n } else if (decodedData?.name === \"buyEvent\") {\r\n buyResponse.push({\r\n buyer: decodedData.data.buyer.toString(),\r\n collectionAddress: decodedData.data.collection.toString(),\r\n nftAddress: decodedData.data.nft.toString(),\r\n tokenId: decodedData.data.tokenId.toString(),\r\n price: decodedData.data.price.toString(),\r\n nextPrice: decodedData.data.nextPrice.toString(),\r\n totalSolAmount: decodedData.data.totalSol.toString(),\r\n timestamp: decodedData.data.timestamp.toString(),\r\n blockNumber: blockNumber.toString(),\r\n blockTimeDate: blockDate.toISOString(),\r\n signature: signature,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n // console.log(\"buyResponse\", buyResponse);\r\n return buyResponse;\r\n}\r\n\r\n//Sell is same as Flip\r\nexport function analyzeSellTransaction(\r\n program: Program<FlipmemeProgramNew>,\r\n transactionData: VersionedTransactionResponse\r\n): SellResponse[] {\r\n let instructions = transactionData.meta?.innerInstructions;\r\n let blockNumber = transactionData.slot;\r\n let blockTime = transactionData.blockTime!;\r\n let blockDate = new Date(blockTime * 1000);\r\n let signature = transactionData.transaction.signatures[0];\r\n let sellResponse: SellResponse[] = [];\r\n if (instructions) {\r\n for (const instruction of instructions as CompiledInnerInstruction[]) {\r\n for (const subInstruction of instruction.instructions as CompiledInstruction[]) {\r\n let rawData = utils.bytes.bs58.decode(subInstruction.data);\r\n const base64Data = utils.bytes.base64.encode(rawData.subarray(8));\r\n let decodedData = program.coder.events.decode(base64Data);\r\n if (decodedData?.name === \"sellEvent\") {\r\n // console.log(\"mintEvent\", decodedData.data);\r\n sellResponse.push({\r\n seller: decodedData.data.seller.toString(),\r\n collectionAddress: decodedData.data.collection.toString(),\r\n nftAddress: decodedData.data.nft.toString(),\r\n tokenId: decodedData.data.tokenId.toString(),\r\n price: decodedData.data.price.toString(),\r\n nextPrice: decodedData.data.nextPrice.toString(),\r\n totalSolAmount: decodedData.data.totalSol.toString(),\r\n timestamp: decodedData.data.timestamp.toString(),\r\n blockNumber: blockNumber.toString(),\r\n blockTimeDate: blockDate.toISOString(),\r\n signature: signature,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n console.log(\"sellResponse\", sellResponse);\r\n return sellResponse;\r\n}\r\n\r\n//refer the the smart contract price calculation logic\r\nexport function getPrice(_mintCount:number, _nftCount:number, _steepness:number, _midPoint:number, _startPrice:string, _endPrice:string): Decimal {\r\n try {\r\n // Convert values to Decimal\r\n const n = new Decimal(_mintCount).minus(_nftCount);\r\n const steepness = new Decimal(_steepness);\r\n const midPoint = new Decimal(_midPoint);\r\n const startSubEnd = new Decimal(_endPrice).minus(_startPrice);\r\n\r\n // Calculate a\r\n const a = new Decimal(1).plus(\r\n steepness\r\n .mul(-1)\r\n .mul(n.minus(midPoint))\r\n .exp()\r\n );\r\n\r\n // Calculate b\r\n const b = new Decimal(1).plus(\r\n steepness\r\n .mul(-1)\r\n .mul(midPoint.mul(-1))\r\n .exp()\r\n );\r\n\r\n // Calculate final price\r\n const startPrice = new Decimal(_startPrice);\r\n const price = startPrice\r\n .plus(startSubEnd.div(a))\r\n .minus(startSubEnd.div(b));\r\n\r\n return price;\r\n } catch (error) {\r\n throw new Error(`Price calculation failed: ${error}`);\r\n }\r\n\r\n}\r\n","import { PublicKey } from \"@solana/web3.js\";\r\nimport { EthereumConnector } from \"./evm\";\r\nimport { SolanaConnector } from \"./solana\";\r\nimport { BlockchainType, BuyCreditParams, BuyParams, BuyResponse, CollectionInfo, CollectionParams, CreateCollectionResponse, EthereumConfig, isEthereumConfig, isSolanaConfig, NFTTradingData, ProfileSellParams, PurcahseTye, SellParams, SellResponse, SolanaConfig } from \"./types\";\r\n\r\nexport class FlipmemeSDK {\r\n \r\n private blockchainType: BlockchainType;\r\n private ethereum: EthereumConnector | null = null;\r\n private solana: SolanaConnector | null = null;\r\n constructor(chainType: BlockchainType, config: EthereumConfig | SolanaConfig) { \r\n this.blockchainType = chainType;\r\n if (chainType === BlockchainType.ETHEREUM && isEthereumConfig(config)) {\r\n this.ethereum = new EthereumConnector(config as EthereumConfig);\r\n } else if (chainType === BlockchainType.SOLANA && isSolanaConfig(config)) {\r\n this.solana = new SolanaConnector(config as SolanaConfig);\r\n } else {\r\n throw new Error(\"Invalid config for the given blockchain type\");\r\n }\r\n }\r\n\r\n public updateConfig(chainType: BlockchainType, config: EthereumConfig | SolanaConfig) {\r\n if (chainType === BlockchainType.ETHEREUM && isEthereumConfig(config)) {\r\n this.ethereum = new EthereumConnector(config as EthereumConfig);\r\n } else if (chainType === BlockchainType.SOLANA && isSolanaConfig(config)) {\r\n this.solana = new SolanaConnector(config as SolanaConfig);\r\n } else {\r\n throw new Error(\"Cannot update config for the given blockchain type\");\r\n }\r\n }\r\n\r\n public async createCollection(params: CollectionParams) : Promise<CreateCollectionResponse> {\r\n if (this.blockchainType === BlockchainType.ETHEREUM && this.ethereum) {\r\n return this.ethereum.createCollection(params);\r\n } else if (this.blockchainType === BlockchainType.SOLANA && this.solana) {\r\n return this.solana.createCollection(params);\r\n } else {\r\n throw new Error(\"Invalid initialized blockchain type\");\r\n }\r\n }\r\n\r\n //used createCollection function on CollectionPopup.tsx\r\n // public async getCollectionPda(): Promise<CollectionInfo> {\r\n // if (this.blockchainType === BlockchainType.SOLANA && this.solana) {\r\n // return this.solana.getCollectionPda();\r\n // } else {\r\n // throw new Error(\"Cannot call this function\");\r\n // }\r\n // }\r\n\r\n public async buy(params: BuyParams): Promise<BuyResponse[]> {\r\n if (this.blockchainType === BlockchainType.SOLANA && this.solana) {\r\n return this.solana.buy(params);\r\n } else {\r\n throw new Error(\"Cannot call this function\");\r\n }\r\n }\r\n \r\n public async flipSell(params: SellParams): Promise<SellResponse[]> {\r\n if (this.blockchainType === BlockchainType.SOLANA && this.solana) {\r\n return this.solana.flipSell(params);\r\n } else {\r\n throw new Error(\"Cannot call this function\");\r\n }\r\n }\r\n\r\n public async profileSell(data: ProfileSellParams): Promise<SellResponse[]> {\r\n if (this.blockchainType === BlockchainType.SOLANA && this.solana) {\r\n return this.solana.profileSell(data);\r\n } else {\r\n throw new Error(\"Cannot call this function\");\r\n }\r\n }\r\n\r\n public async buyCredit(params: BuyCreditParams) {\r\n if (this.blockchainType === BlockchainType.SOLANA && this.solana) {\r\n return this.solana.buyCredit(params);\r\n } else {\r\n throw new Error(\"Cannot call this function\");\r\n }\r\n }\r\n\r\n public async getTotalPrice(type: PurcahseTye, collectionId: string, amount: number):Promise<string> {\r\n if (this.blockchainType === BlockchainType.SOLANA && this.solana) {\r\n return await this.solana.getTotalPrice(type, collectionId, amount);\r\n } else {\r\n throw new Error(\"Cannot call this function\");\r\n }\r\n }\r\n\r\n public async createMerkle(collectionId: string, maxBufferSize: number, maxDepth: number):Promise<PublicKey> {\r\n \r\n if (this.blockchainType === BlockchainType.SOLANA && this.solana) {\r\n return await this.solana.createMerkle(collectionId, maxBufferSize, maxDepth);\r\n } else {\r\n throw new Error(\"Cannot call this function\");\r\n }\r\n }\r\n\r\n /**For testing */\r\n public async getStateInfo() {\r\n if (this.blockchainType === BlockchainType.SOLANA && this.solana) {\r\n return this.solana.getStateInfo();\r\n } else {\r\n throw new Error(\"Cannot call this function\");\r\n }\r\n }\r\n\r\n public async getCollectionInfo(collectionId: string) {\r\n if (this.blockchainType === BlockchainType.SOLANA && this.solana) {\r\n return this.solana.getCollectionInfo(collectionId);\r\n } else {\r\n throw new Error(\"Cannot call this function\");\r\n }\r\n }\r\n\r\n public async getTransactionTest(signature: string): Promise<BuyResponse[]> {\r\n if (this.blockchainType === BlockchainType.SOLANA && this.solana) {\r\n return this.solana.getTransactionTest(signature);\r\n } else {\r\n throw new Error(\"Cannot call this function\");\r\n }\r\n }\r\n\r\n public async getInstructionData(instruction: string){\r\n if (this.blockchainType === BlockchainType.SOLANA && this.solana) {\r\n this.solana.getInstructionData(instruction);\r\n } else {\r\n throw new Error(\"Cannot call this function\");\r\n }\r\n }\r\n /**For testing end */\r\n}","import { bs58 } from \"@coral-xyz/anchor/dist/cjs/utils/bytes\";\r\nimport {\r\n createTree,\r\n findTreeConfigPda,\r\n} from \"@metaplex-foundation/mpl-bubblegum\";\r\nimport {\r\n Connection,\r\n Keypair,\r\n PublicKey,\r\n sendAndConfirmTransaction, \r\n SystemProgram,\r\n Transaction,\r\n TransactionSignature,\r\n VersionedTransaction,\r\n} from \"@solana/web3.js\";\r\nimport { ENV, RPC, SOLANA_PUBKEYS, VALID_SIZE_PAIR } from \"./constants\";\r\nimport { createUmi } from \"@metaplex-foundation/umi-bundle-defaults\";\r\nimport {\r\n createSignerFromKeypair,\r\n generateSigner,\r\n signerIdentity,\r\n} from \"@metaplex-foundation/umi\";\r\nimport { AnchorProvider, Wallet } from \"@coral-xyz/anchor\";\r\nimport { getKeypairFromFile } from \"../demo/utility\";\r\nimport { BlockchainType } from \"./types\";\r\nimport { FlipmemeSDK } from \"./main_sdk\";\r\nimport { createAccount } from \"@solana/spl-token\";\r\n\r\nexport class Utility {\r\n /**\r\n * this function is used to create merkle tree on backend side for bubblegum cNFT for metaplex\r\n * backend pays the merkle tree create fee\r\n */\r\n static async createMerkleTree(\r\n env: ENV,\r\n payerPrivateKey: string,\r\n collectionSize: number,\r\n collectionId: string\r\n ): Promise<PublicKey> {\r\n if (collectionSize < 3 || collectionSize > 24)\r\n throw new Error(`collection size won't be such value ${collectionSize}`);\r\n const rpc = RPC[env];\r\n const privKeyUtf8 = bs58.decode(payerPrivateKey);\r\n let depthSize = Math.ceil(Math.log2(collectionSize));\r\n //@ts-ignore\r\n const { maxBufferSize, maxDepth } = VALID_SIZE_PAIR[depthSize];\r\n\r\n let umi = createUmi(rpc);\r\n const payer = umi.eddsa.createKeypairFromSecretKey(privKeyUtf8);\r\n const signer = createSignerFromKeypair(umi, payer);\r\n const merkleTree = generateSigner(umi);\r\n umi.use(signerIdentity(signer));\r\n\r\n let builder = await createTree(umi, {\r\n merkleTree,\r\n maxDepth,\r\n maxBufferSize,\r\n });\r\n\r\n let res = await builder.sendAndConfirm(umi);\r\n console.log(\r\n \"merkle tree create transaction signature\",\r\n res.signature.toString()\r\n );\r\n return new PublicKey(merkleTree.publicKey);\r\n }\r\n\r\n static async createMerkleTreeFromContract(\r\n env: ENV,\r\n privateKey: string,\r\n collectionSize: number,\r\n collectionId: string\r\n ): Promise<PublicKey> { \r\n const rpc = RPC[env];\r\n let depthSize = Math.ceil(Math.log2(collectionSize));\r\n //@ts-ignore\r\n const { maxBufferSize, maxDepth } = VALID_SIZE_PAIR[depthSize]; \r\n const keypair = Keypair.fromSecretKey(bs58.decode(privateKey));\r\n const wallet = new Wallet(keypair);\r\n const connectionA = new Connection(rpc);\r\n const provider = new AnchorProvider(connectionA, wallet, {\r\n skipPreflight: true,\r\n preflightCommitment: \"confirmed\",\r\n });\r\n\r\n const sendTransaction = async (\r\n transaction: Transaction | VersionedTransaction,\r\n connection: Connection\r\n ): Promise<TransactionSignature> => {\r\n if (transaction instanceof Transaction) {\r\n let signature = await sendAndConfirmTransaction(\r\n connection,\r\n transaction,\r\n [keypair]\r\n );\r\n console.log(\"sendAndConfrimTransaction : signature\", signature);\r\n return signature;\r\n } else {\r\n transaction.sign([keypair]);\r\n let signature = await connectionA.sendTransaction(transaction, {\r\n skipPreflight: true,\r\n preflightCommitment: \"confirmed\",\r\n });\r\n console.log(\"signature\", signature);\r\n return signature;\r\n }\r\n };\r\n const flipmemeSDK = new FlipmemeSDK(BlockchainType.SOLANA, {\r\n provider: provider,\r\n wallet: wallet.publicKey,\r\n sendTransaction: sendTransaction,\r\n }); \r\n let merkleTreePubKey = await flipmemeSDK.createMerkle(collectionId, maxBufferSize, maxDepth);\r\n return merkleTreePubKey; \r\n }\r\n}\r\n"],"mappings":"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","names":["import_anchor","BlockchainType","PurcahseTye","import_web3","import_web3","collectionPda","import_web3","collectionPda","collectionNftPda","collectionMintPda","treeConfigPda","nftHolderPda","import_decimal","collectionPda","collectionNftPda","collectionMintPda","BN","Decimal","treeConfigPda","treeCreatorPda","nftHolderPda","import_web3","import_anchor"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/evm/index.ts","../src/solana/index.ts","../src/types.ts","../src/solana/idls/flipmeme.json","../src/constants.ts","../src/solana/accounts.ts","../src/solana/instructions.ts","../src/solana/analyze.ts","../src/merkle.ts","../src/main_sdk.ts","../src/utility.ts"],"sourcesContent":["export { FlipmemeSDK } from \"./main_sdk\";\r\nexport { Utility } from \"./utility\";\r\nexport * from \"./types\";\r\n","import { CollectionParams, CreateCollectionResponse, EthereumConfig } from \"../types\";\r\n\r\nexport class EthereumConnector {\r\n private config: EthereumConfig;\r\n constructor(config: EthereumConfig) {\r\n this.config = config;\r\n }\r\n\r\n public async createCollection(collection: CollectionParams) : Promise<CreateCollectionResponse> {\r\n // const contract = new ethers.Contract(collection.collectionAddress, collection.abi, this.config.privateKey);\r\n return {\r\n collectionId: \"\",\r\n collectionAddress:\"\"\r\n };\r\n \r\n }\r\n}\r\n\r\n","import {\r\n BorshInstructionCoder,\r\n Idl,\r\n Instruction,\r\n Program,\r\n} from \"@coral-xyz/anchor\";\r\nimport {\r\n AssetData,\r\n BuyCreditParams,\r\n BuyParams,\r\n BuyResponse,\r\n CollectionInfo,\r\n CollectionParams,\r\n CreateCollectionResponse,\r\n MerkleProof,\r\n NFTTradingData,\r\n ProfileSellParams,\r\n PurcahseTye,\r\n SellParams,\r\n SellResponse,\r\n SolanaConfig,\r\n} from \"../types\";\r\nimport { FlipmemeProgramNew } from \"./idls/flipmeme\";\r\nimport { IDL } from \"./idls\";\r\nimport { SDK_SOLANA_CONFIG, SOLANA, SOLANA_PUBKEYS } from \"../constants\";\r\nimport {\r\n AccountMeta,\r\n ComputeBudgetProgram,\r\n Keypair,\r\n PublicKey,\r\n SystemProgram,\r\n Transaction,\r\n TransactionInstruction,\r\n TransactionMessage,\r\n VersionedTransaction,\r\n} from \"@solana/web3.js\";\r\nimport { utf8 } from \"@coral-xyz/anchor/dist/cjs/utils/bytes\";\r\nimport {\r\n getAssociatedTokenAddress,\r\n getOrCreateAssociatedTokenAccount,\r\n} from \"@solana/spl-token\";\r\nimport BN from \"bn.js\";\r\nimport { getTokenChunks, getTradingAccounts } from \"./instructions\";\r\nimport { sampleSize } from \"lodash\";\r\nimport Decimal from \"decimal.js\";\r\nimport * as accounts from \"./accounts\";\r\nimport {\r\n analyzeBuyTransaction,\r\n analyzeSellTransaction,\r\n getPrice,\r\n} from \"./analyze\";\r\nimport { getAssetsInfo } from \"../merkle\";\r\nimport { ConcurrentMerkleTreeAccount } from \"@solana/spl-account-compression\";\r\nexport class SolanaConnector {\r\n private config: SolanaConfig;\r\n private program: Program<FlipmemeProgramNew> | null = null;\r\n constructor(config: SolanaConfig) {\r\n this.config = config;\r\n this.setFlipmemeProgram();\r\n }\r\n\r\n private async setFlipmemeProgram() {\r\n let program = new Program<FlipmemeProgramNew>(\r\n IDL as FlipmemeProgramNew,\r\n this.config.provider\r\n );\r\n this.program = program;\r\n }\r\n // // called when create collection\r\n // // needed for backend\r\n // public async getCollectionPda(): Promise<CollectionInfo> {\r\n // if (!this.program) {\r\n // throw new Error(\"Program not initialized\");\r\n // }\r\n\r\n // const state = await this.program.account.state.fetch(\r\n // SOLANA_PUBKEYS.STATE_ID\r\n // );\r\n\r\n // const [collectionPda] = PublicKey.findProgramAddressSync(\r\n // [\r\n // Buffer.from(\"collection\"),\r\n // SOLANA_PUBKEYS.STATE_ID.toBuffer(),\r\n // utf8.encode(`${state.collectionCount}`),\r\n // ],\r\n // this.program.programId\r\n // );\r\n\r\n // return {\r\n // collectionAddress: collectionPda,\r\n // collectionNumber: state.collectionCount,\r\n // };\r\n // }\r\n\r\n //useCreateCollection.ts\r\n public async createCollection(\r\n params: CollectionParams\r\n ): Promise<CreateCollectionResponse> {\r\n if (!this.program) {\r\n throw new Error(\"Program not initialized\");\r\n }\r\n\r\n const state = await this.program.account.state.fetch(\r\n SOLANA_PUBKEYS.STATE_ID\r\n );\r\n\r\n const collectionID = state.collectionCount;\r\n console.log(collectionID, \"======collectionId===================\");\r\n\r\n const { sessionId, name, tokenUri, totalSupply } = params;\r\n const {\r\n collectionPda,\r\n collectionNftPda,\r\n collectionMintPda,\r\n collectionEditionPda,\r\n collectionMetaDataPda,\r\n } = await getTradingAccounts(\r\n collectionID.toString(),\r\n this.config.wallet,\r\n this.program.programId,\r\n undefined,\r\n undefined\r\n );\r\n\r\n const collectionAtaAccount = await getAssociatedTokenAddress(\r\n collectionMintPda,\r\n collectionNftPda,\r\n true\r\n );\r\n const instruction = await this.program.methods\r\n .createCollection(\r\n sessionId,\r\n name,\r\n tokenUri,\r\n totalSupply,\r\n new BN(100000),\r\n new BN(10000000)\r\n )\r\n .accountsStrict({\r\n state: SOLANA_PUBKEYS.STATE_ID,\r\n collection: collectionPda,\r\n collectionNft: collectionNftPda,\r\n collectionMetadataAccount: collectionMetaDataPda,\r\n collectionMasterEdition: collectionEditionPda,\r\n collectionMint: collectionMintPda,\r\n tokenAccount: collectionAtaAccount,\r\n creator: this.config.wallet,\r\n mplTokenMetadata: SOLANA_PUBKEYS.TOKEN_METADATA_PROGRAM_ID,\r\n tokenProgram: SOLANA_PUBKEYS.SPL_TOKEN_ID,\r\n associatedTokenProgram: SOLANA_PUBKEYS.SPL_ATA_TOKEN_ID,\r\n systemProgram: SystemProgram.programId,\r\n eventAuthority: accounts.eventAuthority(this.program.programId),\r\n program: this.program.programId,\r\n rent: SOLANA_PUBKEYS.RENT_TOKEN_ID,\r\n })\r\n .instruction();\r\n\r\n const modifyComputeUnits = ComputeBudgetProgram.setComputeUnitLimit({\r\n units: 350_000,\r\n });\r\n\r\n const addPriorityFee = ComputeBudgetProgram.setComputeUnitPrice({\r\n microLamports: 10000,\r\n });\r\n\r\n const latestBlockhash =\r\n await this.config.provider.connection.getLatestBlockhash();\r\n const blockHash = latestBlockhash.blockhash;\r\n const messageV0 = new TransactionMessage({\r\n payerKey: this.config.wallet,\r\n recentBlockhash: blockHash,\r\n instructions: [instruction],\r\n }).compileToV0Message();\r\n const versionedTransaction = new VersionedTransaction(messageV0);\r\n\r\n const result = await this.config.provider.connection.simulateTransaction(\r\n versionedTransaction\r\n );\r\n console.log(\"simulation result === \", result);\r\n const tx = new Transaction()\r\n .add(modifyComputeUnits)\r\n .add(addPriorityFee)\r\n .add(instruction);\r\n const txHash = await this.config.sendTransaction(\r\n tx,\r\n this.config.provider.connection\r\n );\r\n\r\n const confirmResult =\r\n await this.config.provider.connection.confirmTransaction({\r\n blockhash: blockHash,\r\n lastValidBlockHeight: latestBlockhash.lastValidBlockHeight,\r\n signature: txHash,\r\n });\r\n console.log(\"confirmResult == \", confirmResult);\r\n return {\r\n collectionId: collectionID.toString(),\r\n collectionAddress: collectionPda.toString(),\r\n };\r\n }\r\n //useBuy.ts\r\n public async buy(params: BuyParams): Promise<BuyResponse[]> {\r\n if (!this.program) {\r\n throw new Error(\"Program not initialized\");\r\n }\r\n const { collectionId, creatorAddress, reserveToken, merkleTree, baseUri } =\r\n params;\r\n\r\n if (\r\n !reserveToken ||\r\n (reserveToken.mintAndBuy?.length === 0 && reserveToken.buy?.length === 0)\r\n ) {\r\n throw new Error(\"No available token to buy\");\r\n }\r\n\r\n const instructionsChunks = [];\r\n if (reserveToken.buy?.length) {\r\n try {\r\n const buyInstructionsChunks = await this.getBuyInstructions(\r\n this.config.wallet,\r\n collectionId,\r\n merkleTree,\r\n reserveToken.buy\r\n );\r\n instructionsChunks.push(...buyInstructionsChunks);\r\n } catch (error) {\r\n console.error(\"Failed to getBuyInstructions\", { error });\r\n }\r\n }\r\n\r\n if (reserveToken.mintAndBuy?.length) {\r\n try {\r\n const mintAndBuyInstructionsChunks =\r\n await this.getMintAndBuyInstructions(\r\n this.config.wallet,\r\n collectionId,\r\n creatorAddress,\r\n reserveToken.mintAndBuy,\r\n baseUri,\r\n new PublicKey(merkleTree)\r\n );\r\n instructionsChunks.push(...mintAndBuyInstructionsChunks);\r\n } catch (error) {\r\n console.error(\"Failed to getMintAndBuyInstructions\", { error });\r\n }\r\n }\r\n\r\n console.log(\"===instruction chunks===\", instructionsChunks);\r\n let buyResponse: BuyResponse[] = [];\r\n for (const [instructions, items] of instructionsChunks) {\r\n try {\r\n const { signature, latestBlockhash } = await this.sendTxn(instructions);\r\n const confirmResult =\r\n await this.config.provider.connection.confirmTransaction({\r\n blockhash: latestBlockhash.blockhash,\r\n lastValidBlockHeight: latestBlockhash.lastValidBlockHeight,\r\n signature: signature,\r\n });\r\n\r\n console.log(\"confirmResult\", confirmResult);\r\n\r\n let transactionData =\r\n await this.config.provider.connection.getTransaction(signature, {\r\n commitment: \"confirmed\",\r\n maxSupportedTransactionVersion: 0,\r\n });\r\n if (transactionData) {\r\n let itemBuyResponse = await analyzeBuyTransaction(\r\n this.program,\r\n transactionData\r\n );\r\n buyResponse.push(...itemBuyResponse);\r\n }\r\n } catch (e) {\r\n console.error(\"Buy failed:\", JSON.stringify(e), { items });\r\n throw e;\r\n }\r\n }\r\n return buyResponse;\r\n }\r\n\r\n //useFlip.ts\r\n public async flipSell(params: SellParams): Promise<SellResponse[]> {\r\n if (!this.program) {\r\n throw new Error(\"Program not initialized\");\r\n }\r\n const { collectionId, quantity, ownedTokens, merkleTree } = params;\r\n\r\n let assets = await getAssetsInfo(ownedTokens, merkleTree);\r\n let instructionsChunks = [];\r\n const sellTokens = sampleSize(assets, quantity); \r\n try {\r\n instructionsChunks = await this.getSellInstructions(\r\n this.config.wallet,\r\n collectionId,\r\n merkleTree,\r\n sellTokens\r\n );\r\n } catch (error) {\r\n console.error(\"Failed to getSellInstructions\", { error });\r\n throw error;\r\n }\r\n\r\n\r\n let sellResponse: SellResponse[] = [];\r\n for (const [instructions, items] of instructionsChunks) {\r\n try {\r\n const { signature, latestBlockhash } = await this.sendTxn(instructions);\r\n\r\n const confirmResult =\r\n await this.config.provider.connection.confirmTransaction({\r\n blockhash: latestBlockhash.blockhash,\r\n lastValidBlockHeight: latestBlockhash.lastValidBlockHeight,\r\n signature: signature,\r\n });\r\n\r\n console.log(\"confirmResult\", confirmResult);\r\n\r\n let transactionData =\r\n await this.config.provider.connection.getTransaction(signature, {\r\n commitment: \"confirmed\",\r\n maxSupportedTransactionVersion: 0,\r\n });\r\n if (transactionData) {\r\n let itemSellResponse = await analyzeSellTransaction(\r\n this.program,\r\n transactionData\r\n );\r\n sellResponse.push(...itemSellResponse);\r\n }\r\n } catch (e) {\r\n console.error(\"Flip failed:\", JSON.stringify(e), { items });\r\n throw e;\r\n }\r\n }\r\n return sellResponse;\r\n }\r\n\r\n //useFlipProfile.ts\r\n public async profileSell(data: ProfileSellParams): Promise<SellResponse[]> {\r\n if (!this.program) {\r\n throw new Error(\"Program not initialized\");\r\n }\r\n\r\n let instructionsChunks = [];\r\n\r\n for (const collectionId in data.data) {\r\n const items = data.data[collectionId];\r\n try {\r\n console.log(\"items\", items);\r\n console.log(\"collectionId\", collectionId);\r\n let assets = await getAssetsInfo(items.tokenIds, items.merkleTree);\r\n const sellTokens = sampleSize(assets, items.tokenIds.length);\r\n let instructionsChunksItem = await this.getSellInstructions(\r\n this.config.wallet,\r\n collectionId,\r\n items.merkleTree,\r\n sellTokens\r\n );\r\n instructionsChunks.push(...instructionsChunksItem);\r\n } catch (error) {\r\n console.error(\"Failed to getSellInstructions\", { error });\r\n throw error;\r\n }\r\n } \r\n\r\n let sellResponse: SellResponse[] = [];\r\n for (const [instructions, items] of instructionsChunks) {\r\n try {\r\n const { signature, latestBlockhash } = await this.sendTxn(instructions); \r\n const confirmResult =\r\n await this.config.provider.connection.confirmTransaction({\r\n blockhash: latestBlockhash.blockhash,\r\n lastValidBlockHeight: latestBlockhash.lastValidBlockHeight,\r\n signature: signature,\r\n });\r\n\r\n console.log(\"confirmResult\", confirmResult);\r\n\r\n let transactionData =\r\n await this.config.provider.connection.getTransaction(signature, {\r\n commitment: \"confirmed\",\r\n maxSupportedTransactionVersion: 0,\r\n });\r\n if (transactionData) {\r\n let itemSellResponse = await analyzeSellTransaction(\r\n this.program,\r\n transactionData\r\n );\r\n sellResponse.push(...itemSellResponse);\r\n }\r\n } catch (e) {\r\n console.error(\"Flip failed:\", JSON.stringify(e), { items });\r\n throw e;\r\n }\r\n }\r\n return sellResponse;\r\n }\r\n\r\n public async buyCredit(params: BuyCreditParams) {\r\n if (!this.program) {\r\n throw new Error(\"Program not initialized\");\r\n }\r\n\r\n const transaction = new Transaction().add(\r\n SystemProgram.transfer({\r\n fromPubkey: params.adminPubKey,\r\n toPubkey: SOLANA_PUBKEYS.ADMIN_FOR_CREDIT_BUY,\r\n lamports: new Decimal(params.amount).mul(10 ** 9).toNumber(),\r\n })\r\n );\r\n return await this.config.sendTransaction(\r\n transaction,\r\n this.config.provider.connection\r\n );\r\n }\r\n\r\n public async getCollectionInfo(collectionId: string): Promise<{\r\n collectionInfo: {\r\n pool: {\r\n currentPrice: BN;\r\n startPrice: BN;\r\n endPrice: BN;\r\n nftCount: number;\r\n steepness: number;\r\n midPoint: number;\r\n padding: number[];\r\n };\r\n creator: PublicKey;\r\n totalSol: BN;\r\n totalSupply: number;\r\n mintCount: number;\r\n id: number;\r\n sellerFeeBasisPoints: number;\r\n protocolFeeBps: number;\r\n isSoldOut: number;\r\n isPaused: number;\r\n bump: number;\r\n collectionNftBump: number;\r\n };\r\n collectionAddress: PublicKey;\r\n }> {\r\n if (!this.program) {\r\n throw new Error(\"Program not initialized\");\r\n }\r\n const collectionAddress = await accounts.collectionPda(\r\n collectionId,\r\n this.program.programId\r\n );\r\n const collectionInfo = await this.program.account.collection.fetch(\r\n collectionAddress\r\n );\r\n return { collectionInfo, collectionAddress };\r\n }\r\n\r\n public async createMerkle(\r\n collectionId: string,\r\n maxBufferSize: number,\r\n maxDepth: number\r\n ): Promise<PublicKey> {\r\n if (!this.program) {\r\n throw new Error(\"Program not initialized\");\r\n }\r\n let merkleTreeKeyPair = new Keypair();\r\n\r\n let accountInx = await this.createAccountForMerkleTree(\r\n merkleTreeKeyPair.publicKey\r\n );\r\n let collectionPda = accounts.collectionPda(\r\n collectionId,\r\n this.program.programId\r\n );\r\n\r\n let treeConfigPda = accounts.treeConfigPda(merkleTreeKeyPair.publicKey);\r\n let treeCreatorPda = accounts.treeCreatorPda(\r\n collectionId,\r\n this.program.programId\r\n );\r\n console.log(\"max Depth\", \"maxBuffer size\", maxDepth, maxBufferSize);\r\n const instruction = await this.program.methods\r\n .createMerkleTree(maxDepth, maxBufferSize, true)\r\n .accountsStrict({\r\n state: SOLANA_PUBKEYS.STATE_ID,\r\n collection: collectionPda,\r\n merkleTreeConfig: treeConfigPda,\r\n merkleTree: merkleTreeKeyPair.publicKey,\r\n payer: this.config.wallet,\r\n treeCreator: treeCreatorPda,\r\n logWrapper: SOLANA_PUBKEYS.SPL_NOOP_ID,\r\n compressionProgram: SOLANA_PUBKEYS.SPL_ACCOUNT_COMPRESSION_ID,\r\n mplBubblegumProgram: SOLANA_PUBKEYS.MPL_BUBBLEGUM_ID,\r\n systemProgram: SystemProgram.programId,\r\n eventAuthority: accounts.eventAuthority(this.program.programId),\r\n program: this.program.programId,\r\n })\r\n .instruction();\r\n\r\n const modifyComputeUnits = ComputeBudgetProgram.setComputeUnitLimit({\r\n units: 350_000,\r\n });\r\n\r\n const addPriorityFee = ComputeBudgetProgram.setComputeUnitPrice({\r\n microLamports: 10000,\r\n });\r\n\r\n const latestBlockhash =\r\n await this.config.provider.connection.getLatestBlockhash();\r\n const blockHash = latestBlockhash.blockhash;\r\n const messageV0 = new TransactionMessage({\r\n payerKey: this.config.wallet,\r\n recentBlockhash: blockHash,\r\n instructions: [accountInx, instruction],\r\n }).compileToV0Message();\r\n const versionedTransaction = new VersionedTransaction(messageV0);\r\n const result = await this.config.provider.connection.simulateTransaction(\r\n versionedTransaction\r\n );\r\n\r\n const tx = new Transaction()\r\n .add(modifyComputeUnits)\r\n .add(addPriorityFee)\r\n .add(accountInx)\r\n .add(instruction);\r\n const txHash = await this.config.provider.sendAndConfirm(\r\n tx,\r\n [merkleTreeKeyPair],\r\n { commitment: \"confirmed\", skipPreflight: true }\r\n );\r\n\r\n const confirmResult =\r\n await this.config.provider.connection.confirmTransaction({\r\n blockhash: blockHash,\r\n lastValidBlockHeight: latestBlockhash.lastValidBlockHeight,\r\n signature: txHash,\r\n });\r\n return merkleTreeKeyPair.publicKey;\r\n }\r\n\r\n public async getTotalPrice(\r\n type: PurcahseTye,\r\n collectionId: string,\r\n amount: number\r\n ): Promise<string> {\r\n const collectionInfo = await this.getCollectionInfo(collectionId);\r\n const {\r\n collectionInfo: {\r\n pool: { startPrice, endPrice, nftCount, steepness, midPoint },\r\n mintCount,\r\n totalSupply,\r\n },\r\n } = collectionInfo;\r\n\r\n let startPriceStr = startPrice.toString();\r\n let endPriceStr = endPrice.toString();\r\n let expectedMintCount = mintCount;\r\n let expectedNftCount = nftCount;\r\n let totalPrice = new Decimal(0);\r\n\r\n if (type === PurcahseTye.BUY) {\r\n let mintingCount = 0;\r\n let buyingCount = 0;\r\n if (nftCount < amount) {\r\n mintingCount = amount - nftCount;\r\n buyingCount = nftCount;\r\n if (mintingCount > totalSupply - mintCount) {\r\n mintingCount = totalSupply - mintCount;\r\n }\r\n } else {\r\n buyingCount = Math.min(amount, totalSupply);\r\n }\r\n for (let i = 0; i < mintingCount; i++) {\r\n totalPrice = totalPrice.plus(\r\n getPrice(\r\n expectedMintCount,\r\n expectedNftCount,\r\n steepness,\r\n midPoint,\r\n startPriceStr,\r\n endPriceStr\r\n )\r\n );\r\n expectedMintCount = Math.min(expectedMintCount + 1, totalSupply);\r\n }\r\n for (let i = 0; i < buyingCount; i++) {\r\n totalPrice = totalPrice.plus(\r\n getPrice(\r\n expectedMintCount,\r\n expectedNftCount,\r\n steepness,\r\n midPoint,\r\n startPriceStr,\r\n endPriceStr\r\n )\r\n );\r\n expectedNftCount = Math.max(expectedNftCount - 1, 0);\r\n }\r\n } else if (type === PurcahseTye.SELL) {\r\n for (let i = 0; i < amount; i++) {\r\n expectedNftCount = Math.min(expectedNftCount + 1, totalSupply);\r\n totalPrice = totalPrice.plus(\r\n getPrice(\r\n expectedMintCount,\r\n expectedNftCount,\r\n steepness,\r\n midPoint,\r\n startPriceStr,\r\n endPriceStr\r\n )\r\n );\r\n }\r\n }\r\n return totalPrice.toString();\r\n }\r\n //for testing\r\n public async getStateInfo() {\r\n if (!this.program) {\r\n throw new Error(\"Program not initialized\");\r\n }\r\n const state = await this.program.account.state.fetch(\r\n SOLANA_PUBKEYS.STATE_ID\r\n );\r\n return state;\r\n }\r\n\r\n //useSenTxn.ts\r\n private async sendTxn(instructions: TransactionInstruction[]) {\r\n if (!this.program) {\r\n console.error(\"Trade NFT failed: Insufficient data\");\r\n throw new Error(\"Trade NFT failed: Insufficient data\");\r\n }\r\n const transaction = new Transaction();\r\n instructions.forEach((inx) => transaction.add(inx));\r\n const latestBlockhash =\r\n await this.config.provider.connection.getLatestBlockhash(\"confirmed\");\r\n\r\n const messageV0 = new TransactionMessage({\r\n payerKey: this.config.wallet,\r\n recentBlockhash: latestBlockhash.blockhash,\r\n instructions,\r\n }).compileToV0Message([]);\r\n\r\n const tx = new VersionedTransaction(messageV0);\r\n const sim = await this.config.provider.connection.simulateTransaction(tx);\r\n console.log(\"simulation result == \", sim);\r\n console.log(\"transaction size \", tx.serialize().length);\r\n\r\n // Send transaction with fresh blockhash\r\n const signature = await this.config.sendTransaction(\r\n tx,\r\n this.config.provider.connection\r\n );\r\n\r\n // Return both signature and blockhash info for confirmation if needed\r\n return {\r\n signature,\r\n latestBlockhash,\r\n };\r\n }\r\n\r\n private async getBuyInstructions(\r\n userPublicKey: PublicKey,\r\n collectionId: string,\r\n merkleTree: string,\r\n tokens: number[]\r\n ): Promise<[TransactionInstruction[], number[]][]> {\r\n if (!this.program) {\r\n throw new Error(\"Program not initialized\");\r\n }\r\n await getAssetsInfo(tokens, merkleTree);\r\n const chunkSize = SDK_SOLANA_CONFIG.CHUNK_SIZE; // TODO: temporarily apply trading 1 nft at a time due to limitation from BE, expected: 5\r\n const tokenChunks = getTokenChunks<number>(tokens, chunkSize);\r\n // const { getNftAccounts } = await getTradingAccounts(\r\n // collectionId,\r\n // userPublicKey,\r\n // this.program.programId\r\n // );\r\n const allInstructionSets: [TransactionInstruction[], number[]][] = [];\r\n // const state = await this.program.account.state.fetch(\r\n // SOLANA_PUBKEYS.STATE_ID\r\n // );\r\n\r\n // console.log(\"state===\", state);\r\n try {\r\n for (const chunk of tokenChunks) {\r\n const instructions = await this.setUpInstructions(\r\n 250_000 * chunk.length\r\n );\r\n // for (const token of chunk) {\r\n // const { tokenId } = token;\r\n // const { nftHolderPda, collectionPda, nftPda, collectionNftPda } =\r\n // await getNftAccounts(tokenId);\r\n // const instruction = await this.program.methods\r\n // .buy(tokenId)\r\n // .accountsStrict({\r\n // state: SOLANA_PUBKEYS.STATE_ID,\r\n // collection: collectionPda,\r\n // collectionNft: collectionNftPda,\r\n // treasury: SOLANA_PUBKEYS.TREASURY_ID,\r\n // nftHolder: nftHolderPda,\r\n // nft: nftPda,\r\n // buyer: userPublicKey,\r\n // mplCore: SOLANA.MPL_CORE_STR,\r\n // systemProgram: SystemProgram.programId,\r\n // program: this.program.programId,\r\n // eventAuthority: accounts.eventAuthority(this.program.programId),\r\n // })\r\n // .instruction();\r\n\r\n // instructions.push(instruction);\r\n // }\r\n allInstructionSets.push([instructions, chunk]);\r\n }\r\n return allInstructionSets;\r\n } catch (e: any) {\r\n console.log(\"ERRORR in getBuyInstructions\", JSON.stringify(e));\r\n throw e;\r\n }\r\n }\r\n\r\n private async getSellInstructions(\r\n userPublicKey: PublicKey,\r\n collectionId: string,\r\n merkleTree: string,\r\n tokens: (AssetData & MerkleProof)[]\r\n ): Promise<[TransactionInstruction[], (AssetData & MerkleProof)[]][]> {\r\n if (!this.program) {\r\n throw new Error(\"Program not initialized\");\r\n }\r\n const merkleTreeAcount =\r\n await ConcurrentMerkleTreeAccount.fromAccountAddress(\r\n this.config.provider.connection,\r\n new PublicKey(merkleTree)\r\n );\r\n const canopyDepth = merkleTreeAcount.getCanopyDepth();\r\n const chunkSize = SDK_SOLANA_CONFIG.CHUNK_SIZE; // TODO: temporarily apply trading 1 nft at a time due to limitation from BE, expected: 5\r\n const tokenChunks = getTokenChunks(tokens, chunkSize);\r\n const allInstructionSets: [\r\n TransactionInstruction[],\r\n (AssetData & MerkleProof)[]\r\n ][] = [];\r\n\r\n const { treeConfigPda, collectionPda, nftHolderPda, collectionNftPda } =\r\n await getTradingAccounts(\r\n collectionId,\r\n userPublicKey,\r\n this.program.programId,\r\n new PublicKey(merkleTree),\r\n undefined\r\n );\r\n\r\n try {\r\n for (const chunk of tokenChunks) {\r\n const instructions = await this.setUpInstructions(\r\n 250_000 * chunk.length\r\n );\r\n for (const token of chunk) {\r\n const { compression, ownership, proof, root } = token;\r\n const proofPath: AccountMeta[] = proof\r\n .map((node: string) => ({\r\n pubkey: new PublicKey(node),\r\n isSigner: false,\r\n isWritable: false,\r\n }))\r\n .slice(0, proof.length - canopyDepth);\r\n\r\n\r\n const instruction = await this.program.methods\r\n .sell(\r\n compression.leaf_id,\r\n Array.from(new PublicKey(root.trim()).toBytes()),\r\n Array.from(new PublicKey(compression.data_hash.trim()).toBytes()),\r\n Array.from(\r\n new PublicKey(compression.creator_hash.trim()).toBytes()\r\n ),\r\n new BN(compression.leaf_id),\r\n compression.leaf_id\r\n )\r\n .accountsStrict({\r\n state: SOLANA_PUBKEYS.STATE_ID,\r\n merkleTreeConfig: treeConfigPda!,\r\n merkleTree: new PublicKey(merkleTree),\r\n collection: collectionPda,\r\n collectionNft: collectionNftPda,\r\n treasury: SOLANA_PUBKEYS.TREASURY_ID,\r\n nftHolder: nftHolderPda!,\r\n seller: userPublicKey,\r\n compressionProgram: SOLANA_PUBKEYS.SPL_ACCOUNT_COMPRESSION_ID,\r\n tokenMetadataProgram: SOLANA_PUBKEYS.TOKEN_METADATA_PROGRAM_ID,\r\n mplBubblegumProgram: SOLANA_PUBKEYS.MPL_BUBBLEGUM_ID,\r\n logWrapper: SOLANA_PUBKEYS.SPL_NOOP_ID,\r\n systemProgram: SystemProgram.programId,\r\n program: this.program.programId,\r\n eventAuthority: accounts.eventAuthority(this.program.programId),\r\n })\r\n .remainingAccounts(proofPath)\r\n .instruction();\r\n\r\n instructions.push(instruction);\r\n }\r\n allInstructionSets.push([instructions, chunk]);\r\n }\r\n return allInstructionSets;\r\n } catch (e: any) {\r\n console.log(\"ERRORR in getBuyInstructions\", JSON.stringify(e));\r\n throw e;\r\n }\r\n }\r\n\r\n private async getMintAndBuyInstructions(\r\n userPublicKey: PublicKey,\r\n collectionId: string,\r\n creatorAddress: string,\r\n tokens: string[],\r\n baseUri: string,\r\n merkleTree: PublicKey\r\n ) {\r\n if (!this.program) {\r\n throw new Error(\"Program not initialized\");\r\n }\r\n const chunkSize = SDK_SOLANA_CONFIG.CHUNK_SIZE; // TODO: temporarily apply trading 1 nft at a time due to limitation from BE, expected: 2\r\n const tokenChunks = getTokenChunks(tokens, chunkSize);\r\n const allInstructionSets: [TransactionInstruction[], string[]][] = [];\r\n const {\r\n treeConfigPda,\r\n treeCreator,\r\n nftHolderPda,\r\n collectionPda,\r\n collectionNftPda,\r\n collectionMintPda,\r\n collectionEditionPda,\r\n collectionMetaDataPda,\r\n bubblegumSigner,\r\n } = await getTradingAccounts(\r\n collectionId,\r\n userPublicKey,\r\n this.program.programId,\r\n merkleTree,\r\n creatorAddress\r\n );\r\n try {\r\n for (const chunk of tokenChunks) {\r\n const instructions = await this.setUpInstructions(1400000);\r\n let data: string[] = [];\r\n const instruction = await this.program.methods\r\n .mintAndBuy(chunk, baseUri)\r\n .accountsStrict({\r\n state: SOLANA_PUBKEYS.STATE_ID,\r\n merkleTreeConfig: treeConfigPda!,\r\n treeCreatorOrDelegate: treeCreator,\r\n nftHolder: nftHolderPda!,\r\n merkleTree: merkleTree,\r\n collection: collectionPda,\r\n collectionNft: collectionNftPda,\r\n collectionMint: collectionMintPda,\r\n collectionMetadata: collectionMetaDataPda,\r\n collectionEdition: collectionEditionPda,\r\n bubblegumSigner: bubblegumSigner,\r\n logWrapper: SOLANA_PUBKEYS.SPL_NOOP_ID,\r\n compressionProgram: SOLANA_PUBKEYS.SPL_ACCOUNT_COMPRESSION_ID,\r\n tokenMetadataProgram: SOLANA_PUBKEYS.TOKEN_METADATA_PROGRAM_ID,\r\n mplBubblegumProgram: SOLANA_PUBKEYS.MPL_BUBBLEGUM_ID,\r\n treasury: SOLANA_PUBKEYS.TREASURY_ID,\r\n buyer: userPublicKey,\r\n systemProgram: SystemProgram.programId,\r\n eventAuthority: accounts.eventAuthority(this.program.programId),\r\n program: this.program.programId,\r\n })\r\n .instruction();\r\n instructions.push(instruction);\r\n data.push(...chunk);\r\n allInstructionSets.push([instructions, data]);\r\n }\r\n\r\n return allInstructionSets;\r\n } catch (e: any) {\r\n console.log(\"ERRORR in getMintAndBuyInstructions\", JSON.stringify(e));\r\n throw e;\r\n }\r\n }\r\n\r\n private async getPriorityFee(): Promise<number> {\r\n const recentFees =\r\n await this.config.provider.connection.getRecentPrioritizationFees();\r\n const MIN_FEE = 10_000;\r\n const dynamicFee = Math.max(\r\n ...recentFees.map((fee: any) => fee.prioritizationFee),\r\n MIN_FEE\r\n );\r\n\r\n return dynamicFee;\r\n }\r\n\r\n private async setUpInstructions(computeUnits: number) {\r\n const microLamports = await this.getPriorityFee();\r\n const instructions: TransactionInstruction[] = [];\r\n const modifyComputeUnits = ComputeBudgetProgram.setComputeUnitLimit({\r\n units: computeUnits,\r\n });\r\n const addPriorityFee = ComputeBudgetProgram.setComputeUnitPrice({\r\n microLamports: microLamports, // TODO: get value from Quicknote api\r\n });\r\n instructions.push(modifyComputeUnits, addPriorityFee);\r\n\r\n return instructions;\r\n }\r\n\r\n private async createAccountForMerkleTree(\r\n merkleTree: PublicKey\r\n ): Promise<TransactionInstruction> {\r\n const dataLen = 5112; //depth 8, buffer 16\r\n const rent =\r\n await this.config.provider.connection.getMinimumBalanceForRentExemption(\r\n dataLen\r\n );\r\n let ins = SystemProgram.createAccount({\r\n fromPubkey: this.config.wallet,\r\n newAccountPubkey: merkleTree,\r\n lamports: rent,\r\n space: dataLen,\r\n programId: SOLANA_PUBKEYS.SPL_ACCOUNT_COMPRESSION_ID,\r\n });\r\n return ins;\r\n }\r\n\r\n public async getTransactionTest(signature: string): Promise<BuyResponse[]> {\r\n const transaction = await this.config.provider.connection.getTransaction(\r\n signature,\r\n {\r\n commitment: \"confirmed\",\r\n maxSupportedTransactionVersion: 0,\r\n }\r\n );\r\n\r\n if (transaction && this.program) {\r\n return analyzeBuyTransaction(this.program, transaction);\r\n }\r\n return [];\r\n }\r\n\r\n public async getInstructionData(instruction: string) {\r\n if (!this.program) {\r\n console.error(\"Trade NFT failed: Insufficient data\");\r\n throw new Error(\"Trade NFT failed: Insufficient data\");\r\n }\r\n let coder = new BorshInstructionCoder(this.program?.rawIdl);\r\n let args = coder.decode(instruction, \"base58\");\r\n console.log(\"args========\", args);\r\n }\r\n}\r\n","import { AnchorProvider, Provider } from \"@coral-xyz/anchor\";\r\nimport { SendTransactionOptions } from \"@solana/wallet-adapter-base\";\r\n\r\nimport {\r\n PublicKey,\r\n TransactionSignature,\r\n Connection,\r\n Transaction,\r\n VersionedTransaction,\r\n} from \"@solana/web3.js\";\r\n\r\nexport enum BlockchainType {\r\n SOLANA = \"solana\",\r\n ETHEREUM = \"ethereum\",\r\n}\r\n\r\nexport interface CollectionInfo {\r\n collectionAddress: PublicKey;\r\n collectionNumber: number;\r\n}\r\nexport interface EthereumConfig {\r\n rpcUrl: string;\r\n privateKey?: string;\r\n chainId: number;\r\n}\r\n\r\nexport interface SolanaConfig {\r\n provider: AnchorProvider;\r\n wallet: PublicKey;\r\n sendTransaction: (\r\n transaction: Transaction | VersionedTransaction,\r\n connection: Connection,\r\n options?: SendTransactionOptions\r\n ) => Promise<TransactionSignature>;\r\n}\r\n\r\nexport interface CollectionParams {\r\n sessionId: string;\r\n name: string;\r\n tokenUri: string;\r\n totalSupply: number; \r\n}\r\n\r\nexport interface CreateCollectionResponse {\r\n collectionId: string;\r\n collectionAddress: string;\r\n}\r\n\r\nexport interface NFTTradingData {\r\n tokenIds: number[];\r\n merkleTree: string;\r\n}\r\n\r\nexport interface ReserveToken {\r\n buy: number[] | null;\r\n mintAndBuy: string[] | null;\r\n}\r\n\r\n//removed collectionAddress because it's not needed\r\n//instead added reserveToken property which is returns from authServicesApi.reserveToken\r\n//reserveToken = data?.data; : useBuy.ts:53\r\nexport interface BuyParams {\r\n merkleTree: string;\r\n collectionId: string;\r\n collectionSymbol: string;\r\n creatorAddress: string; //collection creator address\r\n quantity: number;\r\n baseUri: string;\r\n reserveToken: ReserveToken | null; \r\n}\r\n\r\nexport interface BuyResponse {\r\n buyer: string;\r\n collectionAddress: string; \r\n tokenId: string;\r\n tokenName?: string;\r\n tokenUri?: string;\r\n price: string;\r\n nextPrice: string;\r\n isSoldOut?: boolean;\r\n totalSolAmount: string;\r\n timestamp: string;\r\n blockNumber: string;\r\n blockTimeDate: string;\r\n signature: string;\r\n}\r\n\r\nexport interface SellResponse {\r\n seller: string;\r\n collectionAddress: string;\r\n nftAddress: string;\r\n tokenId: string;\r\n price: string;\r\n nextPrice: string;\r\n totalSolAmount: string;\r\n timestamp: string;\r\n blockNumber: string;\r\n blockTimeDate: string;\r\n signature: string;\r\n}\r\n\r\n//parameters are considered from useFlip hook params and handleSell function params\r\n//useFlip.ts:18, 24\r\nexport interface SellParams {\r\n collectionId: string;\r\n quantity: number;\r\n merkleTree: string;\r\n ownedTokens: number[];\r\n}\r\n\r\n//used on useFlipProfile hook\r\nexport interface ProfileSellParams {\r\n data: Record<string, NFTTradingData>; \r\n}\r\n\r\nexport function isEthereumConfig(\r\n config: EthereumConfig | SolanaConfig\r\n): config is EthereumConfig {\r\n return \"chainId\" in config;\r\n}\r\n\r\nexport function isSolanaConfig(\r\n config: EthereumConfig | SolanaConfig\r\n): config is SolanaConfig {\r\n return \"sendTransaction\" in config;\r\n}\r\n\r\nexport interface BuyCreditParams {\r\n adminPubKey: PublicKey;\r\n amount: number; //in case of SOL \"0.1\" formatted SOL\r\n}\r\n\r\nexport enum PurcahseTye {\r\n BUY = \"buy\",\r\n SELL = \"sell\"\r\n} \r\n\r\nexport interface Compression {\r\n eligible: boolean;\r\n compressed: boolean;\r\n data_hash: string;\r\n creator_hash: string;\r\n asset_hash: string;\r\n tree: string;\r\n seq: number;\r\n leaf_id: number;\r\n}\r\n\r\nexport interface Ownership {\r\n frozen:boolean;\r\n delegated: boolean;\r\n delegate: null;\r\n ownership_model: string;\r\n owner: string;\r\n}\r\n\r\nexport interface MerkleProof {\r\n root: string;\r\n proof: string[];\r\n leaf: string;\r\n tree_id: string;\r\n}\r\n\r\nexport interface AssetData {\r\n compression: Compression;\r\n ownership: Ownership;\r\n}\r\nexport interface AssetInfo {\r\n assetData: AssetData;\r\n assetProof: MerkleProof\r\n}","{\r\n \"address\": \"87cVDVX7ffXXDQLFWEDubGq8kbXzqj1ropm4osrFKEKs\",\r\n \"metadata\": {\r\n \"name\": \"flipmeme_program_new\",\r\n \"version\": \"0.1.0\",\r\n \"spec\": \"0.1.0\",\r\n \"description\": \"Flipmeme main program\"\r\n },\r\n \"instructions\": [\r\n {\r\n \"name\": \"buy\",\r\n \"docs\": [\r\n \"Buy\",\r\n \"\",\r\n \"# Arguments\",\r\n \"\",\r\n \"* `ctx` - The Anchor context holding the accounts\",\r\n \"* `token_id` - The token_id of the NFT that will be purchased from the pool or if we're minting it'll be\",\r\n \"the token id of the new NFT\"\r\n ],\r\n \"discriminator\": [\r\n 102,\r\n 6,\r\n 61,\r\n 18,\r\n 1,\r\n 218,\r\n 235,\r\n 234\r\n ],\r\n \"accounts\": [\r\n {\r\n \"name\": \"state\"\r\n },\r\n {\r\n \"name\": \"merkle_tree_config\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"merkle_tree\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"collection\",\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 99,\r\n 111,\r\n 108,\r\n 108,\r\n 101,\r\n 99,\r\n 116,\r\n 105,\r\n 111,\r\n 110\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"state\"\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"collection\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"collection_nft\",\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 99,\r\n 111,\r\n 108,\r\n 108,\r\n 101,\r\n 99,\r\n 116,\r\n 105,\r\n 111,\r\n 110,\r\n 95,\r\n 110,\r\n 102,\r\n 116\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"collection\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"treasury\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"nft_holder\",\r\n \"docs\": [\r\n \"directly but rather we store them in a PDA which they control (buyer is part of the seeds). When the curve\",\r\n \"is closed they can \\\"eject\\\" and transfer the NFT from this PDA to their final token account which they can use\",\r\n \"on other platforms\"\r\n ],\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 110,\r\n 102,\r\n 116,\r\n 95,\r\n 104,\r\n 111,\r\n 108,\r\n 100,\r\n 101,\r\n 114\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"state\"\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"buyer\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"buyer\",\r\n \"docs\": [\r\n \"The user that is creating the token\"\r\n ],\r\n \"writable\": true,\r\n \"signer\": true\r\n },\r\n {\r\n \"name\": \"compression_program\",\r\n \"address\": \"cmtDvXumGCrqC1Age74AVPhSRVXJMd8PJS91L8KbNCK\"\r\n },\r\n {\r\n \"name\": \"token_metadata_program\",\r\n \"address\": \"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s\"\r\n },\r\n {\r\n \"name\": \"mpl_bubblegum_program\",\r\n \"address\": \"BGUMAp9Gq7iTEuizy4pqaxsTyUCBK68MDfK752saRPUY\"\r\n },\r\n {\r\n \"name\": \"log_wrapper\",\r\n \"address\": \"noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV\"\r\n },\r\n {\r\n \"name\": \"system_program\",\r\n \"address\": \"11111111111111111111111111111111\"\r\n },\r\n {\r\n \"name\": \"event_authority\",\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 95,\r\n 95,\r\n 101,\r\n 118,\r\n 101,\r\n 110,\r\n 116,\r\n 95,\r\n 97,\r\n 117,\r\n 116,\r\n 104,\r\n 111,\r\n 114,\r\n 105,\r\n 116,\r\n 121\r\n ]\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"program\"\r\n }\r\n ],\r\n \"args\": [\r\n {\r\n \"name\": \"token_id\",\r\n \"type\": \"u32\"\r\n },\r\n {\r\n \"name\": \"root\",\r\n \"type\": {\r\n \"array\": [\r\n \"u8\",\r\n 32\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"data_hash\",\r\n \"type\": {\r\n \"array\": [\r\n \"u8\",\r\n 32\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"creator_hash\",\r\n \"type\": {\r\n \"array\": [\r\n \"u8\",\r\n 32\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"nonce\",\r\n \"type\": \"u64\"\r\n },\r\n {\r\n \"name\": \"index\",\r\n \"type\": \"u32\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"create_collection\",\r\n \"docs\": [\r\n \"CreateCollection\",\r\n \"\",\r\n \"# Arguments\",\r\n \"\",\r\n \"* `ctx` - The Anchor context holding the accounts\",\r\n \"* `session_id` - The session id which exists in backend side\",\r\n \"* `name` - The name of the collection\",\r\n \"* `uri` - The uri of the collection metadata\",\r\n \"* `start_price` - The start price of the curve\",\r\n \"* `end_price` - The end price of the curve\",\r\n \"* `total_supply` - The total number of NFTs that will be minted in this collection\"\r\n ],\r\n \"discriminator\": [\r\n 156,\r\n 251,\r\n 92,\r\n 54,\r\n 233,\r\n 2,\r\n 16,\r\n 82\r\n ],\r\n \"accounts\": [\r\n {\r\n \"name\": \"state\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"collection\",\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 99,\r\n 111,\r\n 108,\r\n 108,\r\n 101,\r\n 99,\r\n 116,\r\n 105,\r\n 111,\r\n 110\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"state\"\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"state\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"collection_mint\",\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 99,\r\n 111,\r\n 108,\r\n 108,\r\n 101,\r\n 99,\r\n 116,\r\n 105,\r\n 111,\r\n 110,\r\n 95,\r\n 109,\r\n 105,\r\n 110,\r\n 116\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"collection\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"token_account\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"collection_nft\",\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 99,\r\n 111,\r\n 108,\r\n 108,\r\n 101,\r\n 99,\r\n 116,\r\n 105,\r\n 111,\r\n 110,\r\n 95,\r\n 110,\r\n 102,\r\n 116\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"collection\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"collection_metadata_account\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"collection_master_edition\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"creator\",\r\n \"writable\": true,\r\n \"signer\": true\r\n },\r\n {\r\n \"name\": \"mpl_token_metadata\",\r\n \"address\": \"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s\"\r\n },\r\n {\r\n \"name\": \"token_program\",\r\n \"address\": \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\"\r\n },\r\n {\r\n \"name\": \"associated_token_program\",\r\n \"address\": \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\"\r\n },\r\n {\r\n \"name\": \"system_program\",\r\n \"address\": \"11111111111111111111111111111111\"\r\n },\r\n {\r\n \"name\": \"rent\",\r\n \"address\": \"SysvarRent111111111111111111111111111111111\"\r\n },\r\n {\r\n \"name\": \"event_authority\",\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 95,\r\n 95,\r\n 101,\r\n 118,\r\n 101,\r\n 110,\r\n 116,\r\n 95,\r\n 97,\r\n 117,\r\n 116,\r\n 104,\r\n 111,\r\n 114,\r\n 105,\r\n 116,\r\n 121\r\n ]\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"program\"\r\n }\r\n ],\r\n \"args\": [\r\n {\r\n \"name\": \"session_id\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"name\": \"name\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"name\": \"uri\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"name\": \"total_supply\",\r\n \"type\": \"u32\"\r\n },\r\n {\r\n \"name\": \"start_price\",\r\n \"type\": \"u64\"\r\n },\r\n {\r\n \"name\": \"end_price\",\r\n \"type\": \"u64\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"create_merkle_tree\",\r\n \"docs\": [\r\n \"BubblegumMerkleTree\",\r\n \"\",\r\n \"# Arguments\",\r\n \"\",\r\n \"* `ctx` - The Anchor context holding the accounts\",\r\n \"* `max_depth` - depth of tree, decide collection size = 2^max_depth\",\r\n \"* `max_buffer_size` - decide concurrent read/write size\",\r\n \"* `is_pulic` - decide concurrent read/write size\"\r\n ],\r\n \"discriminator\": [\r\n 218,\r\n 186,\r\n 135,\r\n 175,\r\n 208,\r\n 231,\r\n 64,\r\n 147\r\n ],\r\n \"accounts\": [\r\n {\r\n \"name\": \"state\"\r\n },\r\n {\r\n \"name\": \"collection\",\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 99,\r\n 111,\r\n 108,\r\n 108,\r\n 101,\r\n 99,\r\n 116,\r\n 105,\r\n 111,\r\n 110\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"state\"\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"collection\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"merkle_tree_config\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"merkle_tree\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"payer\",\r\n \"writable\": true,\r\n \"signer\": true\r\n },\r\n {\r\n \"name\": \"tree_creator\",\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 116,\r\n 114,\r\n 101,\r\n 101,\r\n 95,\r\n 99,\r\n 114,\r\n 101,\r\n 97,\r\n 116,\r\n 111,\r\n 114,\r\n 95,\r\n 111,\r\n 114,\r\n 95,\r\n 100,\r\n 101,\r\n 108,\r\n 101,\r\n 103,\r\n 97,\r\n 116,\r\n 101\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"state\"\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"collection\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"log_wrapper\",\r\n \"address\": \"noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV\"\r\n },\r\n {\r\n \"name\": \"compression_program\",\r\n \"address\": \"cmtDvXumGCrqC1Age74AVPhSRVXJMd8PJS91L8KbNCK\"\r\n },\r\n {\r\n \"name\": \"mpl_bubblegum_program\",\r\n \"address\": \"BGUMAp9Gq7iTEuizy4pqaxsTyUCBK68MDfK752saRPUY\"\r\n },\r\n {\r\n \"name\": \"system_program\",\r\n \"address\": \"11111111111111111111111111111111\"\r\n },\r\n {\r\n \"name\": \"event_authority\",\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 95,\r\n 95,\r\n 101,\r\n 118,\r\n 101,\r\n 110,\r\n 116,\r\n 95,\r\n 97,\r\n 117,\r\n 116,\r\n 104,\r\n 111,\r\n 114,\r\n 105,\r\n 116,\r\n 121\r\n ]\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"program\"\r\n }\r\n ],\r\n \"args\": [\r\n {\r\n \"name\": \"max_depth\",\r\n \"type\": \"u32\"\r\n },\r\n {\r\n \"name\": \"max_buffer_size\",\r\n \"type\": \"u32\"\r\n },\r\n {\r\n \"name\": \"is_public\",\r\n \"type\": \"bool\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"eject_nft\",\r\n \"docs\": [\r\n \"EjectNft: Allows anyone to call it on behald of the nft_holder. It will transfer the NFT from the nft_holder PDA\",\r\n \"to the owner_pda token account.\",\r\n \"\",\r\n \"# Arguments\",\r\n \"\",\r\n \"* `ctx` - The Anchor context holding the accounts\",\r\n \"* `token_id` - The token_id of the NFT\"\r\n ],\r\n \"discriminator\": [\r\n 156,\r\n 103,\r\n 48,\r\n 244,\r\n 1,\r\n 157,\r\n 43,\r\n 67\r\n ],\r\n \"accounts\": [\r\n {\r\n \"name\": \"state\"\r\n },\r\n {\r\n \"name\": \"collection\",\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 99,\r\n 111,\r\n 108,\r\n 108,\r\n 101,\r\n 99,\r\n 116,\r\n 105,\r\n 111,\r\n 110\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"state\"\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"collection\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"collection_nft\",\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 99,\r\n 111,\r\n 108,\r\n 108,\r\n 101,\r\n 99,\r\n 116,\r\n 105,\r\n 111,\r\n 110,\r\n 95,\r\n 110,\r\n 102,\r\n 116\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"collection\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"nft_owner\"\r\n },\r\n {\r\n \"name\": \"nft_holder\",\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 110,\r\n 102,\r\n 116,\r\n 95,\r\n 104,\r\n 111,\r\n 108,\r\n 100,\r\n 101,\r\n 114\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"state\"\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"nft_owner\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"nft\",\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 110,\r\n 102,\r\n 116\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"state\"\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"collection\"\r\n },\r\n {\r\n \"kind\": \"arg\",\r\n \"path\": \"token_id\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"operator\",\r\n \"writable\": true,\r\n \"signer\": true\r\n },\r\n {\r\n \"name\": \"mpl_core\",\r\n \"address\": \"CoREENxT6tW1HoK8ypY1SxRMZTcVPm7R94rH4PZNhX7d\"\r\n },\r\n {\r\n \"name\": \"system_program\",\r\n \"address\": \"11111111111111111111111111111111\"\r\n }\r\n ],\r\n \"args\": [\r\n {\r\n \"name\": \"_token_id\",\r\n \"type\": \"u32\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"initialize\",\r\n \"docs\": [\r\n \"Initialize\",\r\n \"\",\r\n \"# Arguments\",\r\n \"\",\r\n \"* `ctx` - The Anchor context holding the accounts\",\r\n \"* `admin` - The admin of the program\",\r\n \"* `treasury` - The treasury account that receives fees\",\r\n \"* `lp_provisioner` - The wallet that will be adding liquidity to the 3rd party NFT marketplace upon curve completion\",\r\n \"* `protocol_fee_bps` - Current protocol fees (BPS)\",\r\n \"* `seller_fee_basis_points` - How much in fees should owner receive after resale i.e. royalties\"\r\n ],\r\n \"discriminator\": [\r\n 175,\r\n 175,\r\n 109,\r\n 31,\r\n 13,\r\n 152,\r\n 155,\r\n 237\r\n ],\r\n \"accounts\": [\r\n {\r\n \"name\": \"state\",\r\n \"docs\": [\r\n \"The state account of each instance of this program\"\r\n ],\r\n \"writable\": true,\r\n \"signer\": true\r\n },\r\n {\r\n \"name\": \"deployer\",\r\n \"writable\": true,\r\n \"signer\": true\r\n },\r\n {\r\n \"name\": \"system_program\",\r\n \"address\": \"11111111111111111111111111111111\"\r\n }\r\n ],\r\n \"args\": [\r\n {\r\n \"name\": \"admin\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"treasury\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"lp_provisioner\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"protocol_fee_bps\",\r\n \"type\": \"u16\"\r\n },\r\n {\r\n \"name\": \"seller_fee_basis_points\",\r\n \"type\": \"u16\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"mint_and_buy\",\r\n \"docs\": [\r\n \"MintAndBuy\",\r\n \"\",\r\n \"# Arguments\",\r\n \"\",\r\n \"* `ctx` - The Anchor context holding the accounts\",\r\n \"the token id of the new NFT\",\r\n \"* `name` - The name of the NFT\",\r\n \"* `uri` - The uri of the NFT metadata\"\r\n ],\r\n \"discriminator\": [\r\n 90,\r\n 139,\r\n 38,\r\n 252,\r\n 14,\r\n 71,\r\n 249,\r\n 58\r\n ],\r\n \"accounts\": [\r\n {\r\n \"name\": \"state\"\r\n },\r\n {\r\n \"name\": \"merkle_tree_config\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"tree_creator_or_delegate\",\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 116,\r\n 114,\r\n 101,\r\n 101,\r\n 95,\r\n 99,\r\n 114,\r\n 101,\r\n 97,\r\n 116,\r\n 111,\r\n 114,\r\n 95,\r\n 111,\r\n 114,\r\n 95,\r\n 100,\r\n 101,\r\n 108,\r\n 101,\r\n 103,\r\n 97,\r\n 116,\r\n 101\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"state\"\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"collection\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"nft_holder\",\r\n \"docs\": [\r\n \"directly but rather we store them in a PDA which they control (buyer is part of the seeds). When the curve\",\r\n \"is closed they can \\\"eject\\\" and transfer the NFT from this PDA to their final token account which they can use\",\r\n \"on other platforms\",\r\n \"this will be leaf_owner\"\r\n ],\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 110,\r\n 102,\r\n 116,\r\n 95,\r\n 104,\r\n 111,\r\n 108,\r\n 100,\r\n 101,\r\n 114\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"state\"\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"buyer\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"merkle_tree\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"collection\",\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 99,\r\n 111,\r\n 108,\r\n 108,\r\n 101,\r\n 99,\r\n 116,\r\n 105,\r\n 111,\r\n 110\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"state\"\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"collection\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"collection_nft\",\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 99,\r\n 111,\r\n 108,\r\n 108,\r\n 101,\r\n 99,\r\n 116,\r\n 105,\r\n 111,\r\n 110,\r\n 95,\r\n 110,\r\n 102,\r\n 116\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"collection\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"collection_mint\",\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 99,\r\n 111,\r\n 108,\r\n 108,\r\n 101,\r\n 99,\r\n 116,\r\n 105,\r\n 111,\r\n 110,\r\n 95,\r\n 109,\r\n 105,\r\n 110,\r\n 116\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"collection\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"collection_metadata\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"collection_edition\"\r\n },\r\n {\r\n \"name\": \"bubblegum_signer\",\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 99,\r\n 111,\r\n 108,\r\n 108,\r\n 101,\r\n 99,\r\n 116,\r\n 105,\r\n 111,\r\n 110,\r\n 95,\r\n 99,\r\n 112,\r\n 105\r\n ]\r\n }\r\n ],\r\n \"program\": {\r\n \"kind\": \"account\",\r\n \"path\": \"mpl_bubblegum_program\"\r\n }\r\n }\r\n },\r\n {\r\n \"name\": \"log_wrapper\",\r\n \"address\": \"noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV\"\r\n },\r\n {\r\n \"name\": \"buyer\",\r\n \"docs\": [\r\n \"The user that is creating the token\"\r\n ],\r\n \"writable\": true,\r\n \"signer\": true\r\n },\r\n {\r\n \"name\": \"compression_program\",\r\n \"address\": \"cmtDvXumGCrqC1Age74AVPhSRVXJMd8PJS91L8KbNCK\"\r\n },\r\n {\r\n \"name\": \"token_metadata_program\",\r\n \"address\": \"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s\"\r\n },\r\n {\r\n \"name\": \"mpl_bubblegum_program\",\r\n \"address\": \"BGUMAp9Gq7iTEuizy4pqaxsTyUCBK68MDfK752saRPUY\"\r\n },\r\n {\r\n \"name\": \"system_program\",\r\n \"address\": \"11111111111111111111111111111111\"\r\n },\r\n {\r\n \"name\": \"treasury\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"event_authority\",\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 95,\r\n 95,\r\n 101,\r\n 118,\r\n 101,\r\n 110,\r\n 116,\r\n 95,\r\n 97,\r\n 117,\r\n 116,\r\n 104,\r\n 111,\r\n 114,\r\n 105,\r\n 116,\r\n 121\r\n ]\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"program\"\r\n }\r\n ],\r\n \"args\": [\r\n {\r\n \"name\": \"names\",\r\n \"type\": {\r\n \"vec\": \"string\"\r\n }\r\n },\r\n {\r\n \"name\": \"base_uri\",\r\n \"type\": \"string\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"move_liquidity\",\r\n \"docs\": [\r\n \"MoveLiquidity\",\r\n \"\",\r\n \"# Arguments\",\r\n \"\",\r\n \"* `ctx` - The Anchor context holding the accounts\"\r\n ],\r\n \"discriminator\": [\r\n 20,\r\n 32,\r\n 95,\r\n 239,\r\n 213,\r\n 242,\r\n 237,\r\n 45\r\n ],\r\n \"accounts\": [\r\n {\r\n \"name\": \"state\"\r\n },\r\n {\r\n \"name\": \"collection\",\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 99,\r\n 111,\r\n 108,\r\n 108,\r\n 101,\r\n 99,\r\n 116,\r\n 105,\r\n 111,\r\n 110\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"state\"\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"collection\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"treasury\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"collection_creator\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"lp_provisioner\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"event_authority\",\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 95,\r\n 95,\r\n 101,\r\n 118,\r\n 101,\r\n 110,\r\n 116,\r\n 95,\r\n 97,\r\n 117,\r\n 116,\r\n 104,\r\n 111,\r\n 114,\r\n 105,\r\n 116,\r\n 121\r\n ]\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"program\"\r\n }\r\n ],\r\n \"args\": []\r\n },\r\n {\r\n \"name\": \"sell\",\r\n \"docs\": [\r\n \"Sell\",\r\n \"\",\r\n \"# Arguments\",\r\n \"\",\r\n \"* `ctx` - The Anchor context holding the accounts\",\r\n \"* `token_id` - The token_id of the NFT that will be purchased from the pool or if we're minting it'll be\",\r\n \"the token id of the new NFT\"\r\n ],\r\n \"discriminator\": [\r\n 51,\r\n 230,\r\n 133,\r\n 164,\r\n 1,\r\n 127,\r\n 131,\r\n 173\r\n ],\r\n \"accounts\": [\r\n {\r\n \"name\": \"state\"\r\n },\r\n {\r\n \"name\": \"merkle_tree_config\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"merkle_tree\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"collection\",\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 99,\r\n 111,\r\n 108,\r\n 108,\r\n 101,\r\n 99,\r\n 116,\r\n 105,\r\n 111,\r\n 110\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"state\"\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"collection\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"collection_nft\",\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 99,\r\n 111,\r\n 108,\r\n 108,\r\n 101,\r\n 99,\r\n 116,\r\n 105,\r\n 111,\r\n 110,\r\n 95,\r\n 110,\r\n 102,\r\n 116\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"collection\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"treasury\",\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"nft_holder\",\r\n \"docs\": [\r\n \"will be signer on CPI\"\r\n ],\r\n \"writable\": true,\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 110,\r\n 102,\r\n 116,\r\n 95,\r\n 104,\r\n 111,\r\n 108,\r\n 100,\r\n 101,\r\n 114\r\n ]\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"state\"\r\n },\r\n {\r\n \"kind\": \"account\",\r\n \"path\": \"seller\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"seller\",\r\n \"docs\": [\r\n \"The user that is creating the token\"\r\n ],\r\n \"writable\": true,\r\n \"signer\": true\r\n },\r\n {\r\n \"name\": \"compression_program\",\r\n \"address\": \"cmtDvXumGCrqC1Age74AVPhSRVXJMd8PJS91L8KbNCK\"\r\n },\r\n {\r\n \"name\": \"token_metadata_program\",\r\n \"address\": \"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s\"\r\n },\r\n {\r\n \"name\": \"mpl_bubblegum_program\",\r\n \"address\": \"BGUMAp9Gq7iTEuizy4pqaxsTyUCBK68MDfK752saRPUY\"\r\n },\r\n {\r\n \"name\": \"log_wrapper\",\r\n \"address\": \"noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV\"\r\n },\r\n {\r\n \"name\": \"system_program\",\r\n \"address\": \"11111111111111111111111111111111\"\r\n },\r\n {\r\n \"name\": \"event_authority\",\r\n \"pda\": {\r\n \"seeds\": [\r\n {\r\n \"kind\": \"const\",\r\n \"value\": [\r\n 95,\r\n 95,\r\n 101,\r\n 118,\r\n 101,\r\n 110,\r\n 116,\r\n 95,\r\n 97,\r\n 117,\r\n 116,\r\n 104,\r\n 111,\r\n 114,\r\n 105,\r\n 116,\r\n 121\r\n ]\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"program\"\r\n }\r\n ],\r\n \"args\": [\r\n {\r\n \"name\": \"token_id\",\r\n \"type\": \"u32\"\r\n },\r\n {\r\n \"name\": \"root\",\r\n \"type\": {\r\n \"array\": [\r\n \"u8\",\r\n 32\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"data_hash\",\r\n \"type\": {\r\n \"array\": [\r\n \"u8\",\r\n 32\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"creator_hash\",\r\n \"type\": {\r\n \"array\": [\r\n \"u8\",\r\n 32\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"nonce\",\r\n \"type\": \"u64\"\r\n },\r\n {\r\n \"name\": \"index\",\r\n \"type\": \"u32\"\r\n }\r\n ]\r\n },\r\n {\r\n \"name\": \"update_state\",\r\n \"docs\": [\r\n \"UpdateState\",\r\n \"\",\r\n \"# Arguments\",\r\n \"\",\r\n \"* `ctx` - The Anchor context holding the accounts\",\r\n \"* `admin` - The admin of the program\",\r\n \"* `treasury` - The treasury account that receives fees\",\r\n \"* `lp_provisioner` - The wallet that will be adding liquidity to the 3rd party NFT marketplace upon curve completion\",\r\n \"* `protocol_fee_bps` - Current protocol fees (BPS)\",\r\n \"* `seller_fee_basis_points` - How much in fees should owner receive after resale i.e. royalties\"\r\n ],\r\n \"discriminator\": [\r\n 135,\r\n 112,\r\n 215,\r\n 75,\r\n 247,\r\n 185,\r\n 53,\r\n 176\r\n ],\r\n \"accounts\": [\r\n {\r\n \"name\": \"state\",\r\n \"docs\": [\r\n \"The state account of each instance of this program\"\r\n ],\r\n \"writable\": true\r\n },\r\n {\r\n \"name\": \"admin\",\r\n \"writable\": true,\r\n \"signer\": true\r\n }\r\n ],\r\n \"args\": [\r\n {\r\n \"name\": \"admin\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"treasury\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"lp_provisioner\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"protocol_fee_bps\",\r\n \"type\": \"u16\"\r\n },\r\n {\r\n \"name\": \"seller_fee_basis_points\",\r\n \"type\": \"u16\"\r\n }\r\n ]\r\n }\r\n ],\r\n \"accounts\": [\r\n {\r\n \"name\": \"Collection\",\r\n \"discriminator\": [\r\n 48,\r\n 160,\r\n 232,\r\n 205,\r\n 191,\r\n 207,\r\n 26,\r\n 141\r\n ]\r\n },\r\n {\r\n \"name\": \"State\",\r\n \"discriminator\": [\r\n 216,\r\n 146,\r\n 107,\r\n 94,\r\n 104,\r\n 75,\r\n 182,\r\n 177\r\n ]\r\n }\r\n ],\r\n \"events\": [\r\n {\r\n \"name\": \"BuyEvent\",\r\n \"discriminator\": [\r\n 103,\r\n 244,\r\n 82,\r\n 31,\r\n 44,\r\n 245,\r\n 119,\r\n 119\r\n ]\r\n },\r\n {\r\n \"name\": \"CollectionCreatedEvent\",\r\n \"discriminator\": [\r\n 146,\r\n 244,\r\n 148,\r\n 65,\r\n 159,\r\n 214,\r\n 113,\r\n 185\r\n ]\r\n },\r\n {\r\n \"name\": \"MintEvent\",\r\n \"discriminator\": [\r\n 197,\r\n 144,\r\n 146,\r\n 149,\r\n 66,\r\n 164,\r\n 95,\r\n 16\r\n ]\r\n },\r\n {\r\n \"name\": \"MoveLiquidityEvent\",\r\n \"discriminator\": [\r\n 62,\r\n 16,\r\n 64,\r\n 187,\r\n 176,\r\n 107,\r\n 185,\r\n 31\r\n ]\r\n },\r\n {\r\n \"name\": \"SellEvent\",\r\n \"discriminator\": [\r\n 62,\r\n 47,\r\n 55,\r\n 10,\r\n 165,\r\n 3,\r\n 220,\r\n 42\r\n ]\r\n }\r\n ],\r\n \"errors\": [\r\n {\r\n \"code\": 6000,\r\n \"name\": \"OnlyAdmin\",\r\n \"msg\": \"Only admin\"\r\n },\r\n {\r\n \"code\": 6001,\r\n \"name\": \"WrongTreasury\",\r\n \"msg\": \"Wrong treasury account\"\r\n },\r\n {\r\n \"code\": 6002,\r\n \"name\": \"WrongCreator\",\r\n \"msg\": \"Wrong creator account\"\r\n },\r\n {\r\n \"code\": 6003,\r\n \"name\": \"WrongLpProvisioner\",\r\n \"msg\": \"Wrong LP provisioner account\"\r\n },\r\n {\r\n \"code\": 6004,\r\n \"name\": \"WrongProgramId\",\r\n \"msg\": \"Wrong program id\"\r\n },\r\n {\r\n \"code\": 6005,\r\n \"name\": \"WrongIxData\",\r\n \"msg\": \"Wrong instruction data\"\r\n },\r\n {\r\n \"code\": 6006,\r\n \"name\": \"ExpectedMoveLiquidityIx\",\r\n \"msg\": \"Expected MoveLiquidity ix\"\r\n },\r\n {\r\n \"code\": 6007,\r\n \"name\": \"CreateFeeNotSet\",\r\n \"msg\": \"Create fee not set\"\r\n },\r\n {\r\n \"code\": 6008,\r\n \"name\": \"InvalidSupply\",\r\n \"msg\": \"Total supply must be greater than 0\"\r\n },\r\n {\r\n \"code\": 6009,\r\n \"name\": \"CollectionSoldOut\",\r\n \"msg\": \"Collection is sold out\"\r\n },\r\n {\r\n \"code\": 6010,\r\n \"name\": \"CollectionNotSoldOut\",\r\n \"msg\": \"Collection is not sold out\"\r\n },\r\n {\r\n \"code\": 6011,\r\n \"name\": \"MintPaused\",\r\n \"msg\": \"Minting is currently paused\"\r\n },\r\n {\r\n \"code\": 6012,\r\n \"name\": \"WrongMetadataProgram\",\r\n \"msg\": \"Wrong Metadata program\"\r\n }\r\n ],\r\n \"types\": [\r\n {\r\n \"name\": \"BuyEvent\",\r\n \"type\": {\r\n \"kind\": \"struct\",\r\n \"fields\": [\r\n {\r\n \"name\": \"buyer\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"token_id\",\r\n \"type\": \"u32\"\r\n },\r\n {\r\n \"name\": \"collection\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"price\",\r\n \"type\": \"u64\"\r\n },\r\n {\r\n \"name\": \"timestamp\",\r\n \"type\": \"i64\"\r\n },\r\n {\r\n \"name\": \"total_sol\",\r\n \"type\": \"u64\"\r\n },\r\n {\r\n \"name\": \"next_price\",\r\n \"type\": \"u64\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"Collection\",\r\n \"serialization\": \"bytemuck\",\r\n \"repr\": {\r\n \"kind\": \"c\"\r\n },\r\n \"type\": {\r\n \"kind\": \"struct\",\r\n \"fields\": [\r\n {\r\n \"name\": \"pool\",\r\n \"docs\": [\r\n \"The liquidity pool\"\r\n ],\r\n \"type\": {\r\n \"defined\": {\r\n \"name\": \"LiquidityPool\"\r\n }\r\n }\r\n },\r\n {\r\n \"name\": \"creator\",\r\n \"docs\": [\r\n \"The account that created the collection\"\r\n ],\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"total_sol\",\r\n \"docs\": [\r\n \"Total SOL currently in the pool\"\r\n ],\r\n \"type\": \"u64\"\r\n },\r\n {\r\n \"name\": \"total_supply\",\r\n \"docs\": [\r\n \"The total number of NFTs that will be minted in this collection\"\r\n ],\r\n \"type\": \"u32\"\r\n },\r\n {\r\n \"name\": \"mint_count\",\r\n \"docs\": [\r\n \"Total NFTs minted so far\"\r\n ],\r\n \"type\": \"u32\"\r\n },\r\n {\r\n \"name\": \"id\",\r\n \"docs\": [\r\n \"The collection id\"\r\n ],\r\n \"type\": \"u32\"\r\n },\r\n {\r\n \"name\": \"seller_fee_basis_points\",\r\n \"docs\": [\r\n \"How much in fees should owner receive after resale i.e. royalties\"\r\n ],\r\n \"type\": \"u16\"\r\n },\r\n {\r\n \"name\": \"protocol_fee_bps\",\r\n \"docs\": [\r\n \"Current protocol fees (BPS)\"\r\n ],\r\n \"type\": \"u16\"\r\n },\r\n {\r\n \"name\": \"is_sold_out\",\r\n \"docs\": [\r\n \"Is the curve sold out\"\r\n ],\r\n \"type\": \"u8\"\r\n },\r\n {\r\n \"name\": \"is_paused\",\r\n \"docs\": [\r\n \"Is it paused by the creator\"\r\n ],\r\n \"type\": \"u8\"\r\n },\r\n {\r\n \"name\": \"bump\",\r\n \"type\": \"u8\"\r\n },\r\n {\r\n \"name\": \"collection_nft_bump\",\r\n \"type\": \"u8\"\r\n },\r\n {\r\n \"name\": \"_padding\",\r\n \"type\": {\r\n \"array\": [\r\n \"u8\",\r\n 4\r\n ]\r\n }\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"CollectionCreatedEvent\",\r\n \"type\": {\r\n \"kind\": \"struct\",\r\n \"fields\": [\r\n {\r\n \"name\": \"collection_id\",\r\n \"type\": \"u32\"\r\n },\r\n {\r\n \"name\": \"collection\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"creator\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"mint\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"name\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"name\": \"uri\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"name\": \"session_id\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"name\": \"total_supply\",\r\n \"type\": \"u32\"\r\n },\r\n {\r\n \"name\": \"timestamp\",\r\n \"type\": \"i64\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"LiquidityPool\",\r\n \"repr\": {\r\n \"kind\": \"c\"\r\n },\r\n \"type\": {\r\n \"kind\": \"struct\",\r\n \"fields\": [\r\n {\r\n \"name\": \"current_price\",\r\n \"type\": \"u64\"\r\n },\r\n {\r\n \"name\": \"start_price\",\r\n \"type\": \"u64\"\r\n },\r\n {\r\n \"name\": \"end_price\",\r\n \"type\": \"u64\"\r\n },\r\n {\r\n \"name\": \"nft_count\",\r\n \"type\": \"u32\"\r\n },\r\n {\r\n \"name\": \"steepness\",\r\n \"type\": \"f32\"\r\n },\r\n {\r\n \"name\": \"mid_point\",\r\n \"type\": \"f32\"\r\n },\r\n {\r\n \"name\": \"_padding\",\r\n \"type\": {\r\n \"array\": [\r\n \"u8\",\r\n 4\r\n ]\r\n }\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"MintEvent\",\r\n \"type\": {\r\n \"kind\": \"struct\",\r\n \"fields\": [\r\n {\r\n \"name\": \"buyer\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"collection\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"token_id\",\r\n \"type\": \"u32\"\r\n },\r\n {\r\n \"name\": \"name\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"name\": \"uri\",\r\n \"type\": \"string\"\r\n },\r\n {\r\n \"name\": \"mint_count\",\r\n \"type\": \"u32\"\r\n },\r\n {\r\n \"name\": \"price\",\r\n \"type\": \"u64\"\r\n },\r\n {\r\n \"name\": \"timestamp\",\r\n \"type\": \"i64\"\r\n },\r\n {\r\n \"name\": \"is_sold_out\",\r\n \"type\": \"u8\"\r\n },\r\n {\r\n \"name\": \"total_sol\",\r\n \"type\": \"u64\"\r\n },\r\n {\r\n \"name\": \"next_price\",\r\n \"type\": \"u64\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"MoveLiquidityEvent\",\r\n \"type\": {\r\n \"kind\": \"struct\",\r\n \"fields\": [\r\n {\r\n \"name\": \"collection_nft\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"migration_fee\",\r\n \"type\": \"u64\"\r\n },\r\n {\r\n \"name\": \"creator_fee\",\r\n \"type\": \"u64\"\r\n },\r\n {\r\n \"name\": \"liquidity\",\r\n \"type\": \"u64\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"SellEvent\",\r\n \"type\": {\r\n \"kind\": \"struct\",\r\n \"fields\": [\r\n {\r\n \"name\": \"seller\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"token_id\",\r\n \"type\": \"u32\"\r\n },\r\n {\r\n \"name\": \"collection\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"price\",\r\n \"type\": \"u64\"\r\n },\r\n {\r\n \"name\": \"timestamp\",\r\n \"type\": \"i64\"\r\n },\r\n {\r\n \"name\": \"total_sol\",\r\n \"type\": \"u64\"\r\n },\r\n {\r\n \"name\": \"next_price\",\r\n \"type\": \"u64\"\r\n }\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"State\",\r\n \"serialization\": \"bytemuck\",\r\n \"repr\": {\r\n \"kind\": \"c\"\r\n },\r\n \"type\": {\r\n \"kind\": \"struct\",\r\n \"fields\": [\r\n {\r\n \"name\": \"admin\",\r\n \"docs\": [\r\n \"The admin that can handle various admin related tasks\"\r\n ],\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"treasury\",\r\n \"docs\": [\r\n \"The treasury account that receives fees\"\r\n ],\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"lp_provisioner\",\r\n \"docs\": [\r\n \"The wallet that will be adding liquidity to the 3rd party NFT marketplace upon curve completion\"\r\n ],\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"collection_count\",\r\n \"docs\": [\r\n \"count of total collections created\"\r\n ],\r\n \"type\": \"u32\"\r\n },\r\n {\r\n \"name\": \"protocol_fee_bps\",\r\n \"docs\": [\r\n \"Current protocol fees (BPS)\"\r\n ],\r\n \"type\": \"u16\"\r\n },\r\n {\r\n \"name\": \"seller_fee_basis_points\",\r\n \"docs\": [\r\n \"How much in fees should creator receive after resale i.e. royalties\"\r\n ],\r\n \"type\": \"u16\"\r\n }\r\n ]\r\n }\r\n }\r\n ]\r\n}","\r\nimport { PublicKey } from \"@solana/web3.js\";\r\n\r\nexport const SOLANA = {\r\n STATE_ID_STR: \"AXvoBGptmqSq69u2mQd7EcwGcgLoHXRxh7CVojimRVnH\",\r\n TREASURY_ID_STR: \"5VmcDuGTMMxFfcZB1W7AsARSbcswvM2wq7NENqaRV9eu\",\r\n LP_PROVISIONER_ID_STR: \"5VmcDuGTMMxFfcZB1W7AsARSbcswvM2wq7NENqaRV9eu\",\r\n TOKEN_METADATA_PROGRAM_ID_STR: \"metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s\", \r\n MPL_CORE_STR: \"CoREENxT6tW1HoK8ypY1SxRMZTcVPm7R94rH4PZNhX7d\",\r\n ADMIN_FOR_CREDIT_BUY_STR: \"8pvgCVqHh2F1zdMdj7mo6AJPcV4ZwcPvhoomhSFib8vv\",\r\n MPL_BUBBLEGUM_STR: \"BGUMAp9Gq7iTEuizy4pqaxsTyUCBK68MDfK752saRPUY\",\r\n SPL_ACCOUNT_COMPRESSION_STR: \"cmtDvXumGCrqC1Age74AVPhSRVXJMd8PJS91L8KbNCK\",\r\n SPL_NOOP_STR: \"noopb9bkMVfRPU8AsbpTUg8AQkHtKwMYZiFUjNRtMmV\",\r\n SPL_TOKEN_STR: \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\",\r\n SPL_ATA_TOKEN_STR: \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\",\r\n RENT_TOKEN_STR: \"SysvarRent111111111111111111111111111111111\"\r\n};\r\n\r\nexport enum ENV {\r\n Devnet = \"Devnet\",\r\n Mainnet = \"Mainnet\",\r\n}\r\nexport const RPC = {\r\n Devnet: \"https://api.devnet.solana.com\",\r\n Mainnet: \"https://api.mainnet-beta.solana.com\",\r\n};\r\n\r\nexport const SOLANA_PUBKEYS = {\r\n STATE_ID: new PublicKey(SOLANA.STATE_ID_STR),\r\n TREASURY_ID: new PublicKey(SOLANA.TREASURY_ID_STR),\r\n LP_PROVISIONER_ID: new PublicKey(SOLANA.LP_PROVISIONER_ID_STR),\r\n TOKEN_METADATA_PROGRAM_ID: new PublicKey(\r\n SOLANA.TOKEN_METADATA_PROGRAM_ID_STR\r\n ),\r\n ADMIN_FOR_CREDIT_BUY: new PublicKey(SOLANA.ADMIN_FOR_CREDIT_BUY_STR),\r\n MPL_BUBBLEGUM_ID: new PublicKey(SOLANA.MPL_BUBBLEGUM_STR),\r\n SPL_ACCOUNT_COMPRESSION_ID: new PublicKey(SOLANA.SPL_ACCOUNT_COMPRESSION_STR),\r\n SPL_NOOP_ID: new PublicKey(SOLANA.SPL_NOOP_STR),\r\n SPL_TOKEN_ID: new PublicKey(SOLANA.SPL_TOKEN_STR),\r\n SPL_ATA_TOKEN_ID: new PublicKey(SOLANA.SPL_ATA_TOKEN_STR),\r\n RENT_TOKEN_ID: new PublicKey(SOLANA.RENT_TOKEN_STR),\r\n};\r\n\r\nexport const SDK_SOLANA_CONFIG = {\r\n CHUNK_SIZE:5\r\n}\r\n\r\n//get @solana/spl-account-compression/src/constants/index.ts\r\n// export type ValidDepthSizePair =\r\n// | { maxBufferSize: 8; maxDepth: 3 }\r\n// | { maxBufferSize: 8; maxDepth: 5 }\r\n// | { maxBufferSize: 16; maxDepth: 6 }\r\n// | { maxBufferSize: 16; maxDepth: 7 }\r\n// | { maxBufferSize: 16; maxDepth: 8 }\r\n// | { maxBufferSize: 16; maxDepth: 9 }\r\n// | { maxBufferSize: 32; maxDepth: 10 }\r\n// | { maxBufferSize: 32; maxDepth: 11 }\r\n// | { maxBufferSize: 32; maxDepth: 12 }\r\n// | { maxBufferSize: 32; maxDepth: 13 }\r\n// | { maxBufferSize: 64; maxDepth: 14 }\r\n// | { maxBufferSize: 64; maxDepth: 15 }\r\n// | { maxBufferSize: 64; maxDepth: 16 }\r\n// | { maxBufferSize: 64; maxDepth: 17 }\r\n// | { maxBufferSize: 64; maxDepth: 18 }\r\n// | { maxBufferSize: 64; maxDepth: 19 }\r\n// | { maxBufferSize: 64; maxDepth: 20 }\r\n// | { maxBufferSize: 64; maxDepth: 24 }\r\n// | { maxBufferSize: 256; maxDepth: 14 }\r\n// | { maxBufferSize: 256; maxDepth: 20 }\r\n// | { maxBufferSize: 256; maxDepth: 24 }\r\n// | { maxBufferSize: 512; maxDepth: 24 }\r\n// | { maxBufferSize: 512; maxDepth: 26 }\r\n// | { maxBufferSize: 512; maxDepth: 30 }\r\n// | { maxBufferSize: 1024; maxDepth: 14 }\r\n// | { maxBufferSize: 1024; maxDepth: 20 }\r\n// | { maxBufferSize: 1024; maxDepth: 24 }\r\n// | { maxBufferSize: 1024; maxDepth: 26 }\r\n// | { maxBufferSize: 1024; maxDepth: 30 }\r\n// | { maxBufferSize: 2048; maxDepth: 14 }\r\n// | { maxBufferSize: 2048; maxDepth: 20 }\r\n// | { maxBufferSize: 2048; maxDepth: 24 }\r\n// | { maxBufferSize: 2048; maxDepth: 26 }\r\n// | { maxBufferSize: 2048; maxDepth: 30 };\r\n\r\nexport const VALID_SIZE_PAIR = {\r\n 3: { maxBufferSize: 8, maxDepth: 3 }, \r\n 4: { maxBufferSize: 8, maxDepth: 5 }, //not exist so use of which max depth is 5\r\n 5: { maxBufferSize: 8, maxDepth: 5 },\r\n 6: { maxBufferSize: 16, maxDepth: 6 },\r\n 7: { maxBufferSize: 16, maxDepth: 7 },\r\n 8: { maxBufferSize: 16, maxDepth: 8 },\r\n 9: { maxBufferSize: 16, maxDepth: 9 },\r\n 10: { maxBufferSize: 32, maxDepth: 10 },\r\n 11: { maxBufferSize: 32, maxDepth: 11 },\r\n 12: { maxBufferSize: 32, maxDepth: 12 },\r\n 13: { maxBufferSize: 32, maxDepth: 13 },\r\n 14: { maxBufferSize: 256, maxDepth: 14 },\r\n 15: { maxBufferSize: 64, maxDepth: 15 },\r\n 16: { maxBufferSize: 64, maxDepth: 16 },\r\n 17: { maxBufferSize: 64, maxDepth: 17 },\r\n 18: { maxBufferSize: 64, maxDepth: 18 },\r\n 19: { maxBufferSize: 64, maxDepth: 19 },\r\n 20: { maxBufferSize: 1024, maxDepth: 20 },\r\n 21: { maxBufferSize: 1024, maxDepth: 24 }, //not exist so use of which max depth is 24\r\n 22: { maxBufferSize: 1024, maxDepth: 24 }, //not exist so use of which max depth is 24\r\n 23: { maxBufferSize: 1024, maxDepth: 24 }, //not exist so use of which max depth is 24\r\n 24: { maxBufferSize: 1024, maxDepth: 24 },\r\n};\r\n","import * as anchor from \"@coral-xyz/anchor\";\r\nimport { PublicKey } from \"@solana/web3.js\";\r\nimport { SOLANA_PUBKEYS } from \"../constants\";\r\nimport { getAssociatedTokenAddress } from \"@solana/spl-token\";\r\nexport const eventAuthority = (programId: PublicKey) =>\r\n PublicKey.findProgramAddressSync(\r\n [Buffer.from(\"__event_authority\")],\r\n programId\r\n )[0];\r\n\r\nexport const collectionPda = (collectionId: string, programId: PublicKey) =>\r\n PublicKey.findProgramAddressSync(\r\n [\r\n Buffer.from(\"collection\"),\r\n SOLANA_PUBKEYS.STATE_ID.toBuffer(),\r\n Buffer.from(collectionId),\r\n ],\r\n programId\r\n )[0];\r\n\r\nexport const collectionNftPda = (\r\n collectionPda: PublicKey,\r\n programId: PublicKey\r\n) =>\r\n PublicKey.findProgramAddressSync(\r\n [Buffer.from(\"collection_nft\"), collectionPda.toBuffer()],\r\n programId\r\n )[0];\r\n\r\nexport const collectionMintPda = (\r\n collectionPda: PublicKey,\r\n programId: PublicKey\r\n) =>\r\n PublicKey.findProgramAddressSync(\r\n [Buffer.from(\"collection_mint\"), collectionPda.toBuffer()],\r\n programId\r\n )[0];\r\n\r\nexport const nftPda = (\r\n collectionPda: PublicKey,\r\n tokenId: string | number,\r\n programId: PublicKey\r\n) => {\r\n return PublicKey.findProgramAddressSync(\r\n [\r\n Buffer.from(\"nft\"),\r\n SOLANA_PUBKEYS.STATE_ID.toBuffer(),\r\n collectionPda.toBuffer(),\r\n Buffer.from(tokenId.toString()),\r\n ],\r\n programId\r\n )[0];\r\n};\r\n\r\nexport const nftHolderPda = (buyerPublicKey: PublicKey, programId: PublicKey) =>\r\n PublicKey.findProgramAddressSync(\r\n [\r\n Buffer.from(\"nft_holder\"),\r\n SOLANA_PUBKEYS.STATE_ID.toBuffer(),\r\n buyerPublicKey.toBuffer(),\r\n ],\r\n programId\r\n )[0];\r\n\r\nexport const treeCreatorPda = (collectionId: string, programId: PublicKey) =>\r\n PublicKey.findProgramAddressSync(\r\n [\r\n Buffer.from(\"tree_creator_or_delegate\"),\r\n SOLANA_PUBKEYS.STATE_ID.toBuffer(),\r\n Buffer.from(collectionId),\r\n ],\r\n programId\r\n )[0];\r\n\r\nexport const treeConfigPda = (tree: PublicKey) =>\r\n PublicKey.findProgramAddressSync(\r\n [tree.toBuffer()],\r\n SOLANA_PUBKEYS.MPL_BUBBLEGUM_ID\r\n )[0];\r\n\r\nexport const collectionMetadataPda = (mint: PublicKey) =>\r\n PublicKey.findProgramAddressSync(\r\n [\r\n Buffer.from(\"metadata\"),\r\n SOLANA_PUBKEYS.TOKEN_METADATA_PROGRAM_ID.toBuffer(),\r\n mint.toBuffer(),\r\n ],\r\n SOLANA_PUBKEYS.TOKEN_METADATA_PROGRAM_ID\r\n )[0];\r\n\r\nexport const collectionMasterEditionPda = (mint: PublicKey) =>\r\n PublicKey.findProgramAddressSync(\r\n [\r\n Buffer.from(\"metadata\"),\r\n SOLANA_PUBKEYS.TOKEN_METADATA_PROGRAM_ID.toBuffer(),\r\n mint.toBuffer(),\r\n Buffer.from(\"edition\"),\r\n ],\r\n SOLANA_PUBKEYS.TOKEN_METADATA_PROGRAM_ID\r\n )[0];\r\n\r\nexport const bubblegumSignerPda = () =>\r\n PublicKey.findProgramAddressSync(\r\n [Buffer.from(\"collection_cpi\")],\r\n SOLANA_PUBKEYS.MPL_BUBBLEGUM_ID\r\n )[0];","import * as accounts from \"./accounts\";\r\nimport {\r\n ComputeBudgetProgram,\r\n PublicKey,\r\n TransactionInstruction,\r\n} from \"@solana/web3.js\";\r\nimport { getAssociatedTokenAddress } from \"@solana/spl-token\";\r\n\r\nexport const getTokenChunks = <T>(items: T[], chunkSize: number) => {\r\n const tokenChunks = [];\r\n for (let i = 0; i < items.length; i += chunkSize) {\r\n tokenChunks.push(items.slice(i, i + chunkSize));\r\n }\r\n\r\n return tokenChunks;\r\n};\r\n\r\nexport const getTradingAccounts = async (\r\n collectionId: string,\r\n userPublicKey: PublicKey | undefined,\r\n programId: PublicKey,\r\n merkleTree: PublicKey | undefined,\r\n creatorAddress: string | undefined //in case of buy this is a collection creator address\r\n) => {\r\n const collectionIDBuffer = Buffer.from(collectionId, \"base64\");\r\n const collectionIDArray = Array.from(collectionIDBuffer);\r\n const collectionPda = accounts.collectionPda(collectionId, programId); //get_collection_pub\r\n const collectionNftPda = accounts.collectionNftPda(collectionPda, programId); //get_collection_nft_pub\r\n const collectionMintPda = accounts.collectionMintPda(\r\n collectionPda,\r\n programId\r\n );\r\n const collectionMetaDataPda =\r\n accounts.collectionMetadataPda(collectionMintPda);\r\n const collectionEditionPda =\r\n accounts.collectionMasterEditionPda(collectionMintPda);\r\n const treeCreator = accounts.treeCreatorPda(collectionId, programId); //get_tree_creator\r\n let bubblegumSigner = accounts.bubblegumSignerPda();\r\n\r\n const treeConfigPda = merkleTree\r\n ? accounts.treeConfigPda(merkleTree)\r\n : undefined;\r\n const nftHolderPda = userPublicKey\r\n ? accounts.nftHolderPda(userPublicKey, programId)\r\n : undefined;\r\n const collectionCreator = creatorAddress && new PublicKey(creatorAddress);\r\n\r\n return {\r\n collectionIDBuffer,\r\n collectionIDArray,\r\n collectionPda,\r\n collectionNftPda,\r\n collectionMintPda,\r\n collectionMetaDataPda,\r\n collectionEditionPda,\r\n treeCreator,\r\n treeConfigPda,\r\n nftHolderPda,\r\n bubblegumSigner,\r\n collectionCreator,\r\n };\r\n};\r\n","import {\r\n BlockhashWithExpiryBlockHeight,\r\n CompiledInnerInstruction,\r\n CompiledInstruction,\r\n VersionedTransactionResponse,\r\n} from \"@solana/web3.js\";\r\nimport { BuyResponse, SellResponse } from \"../types\";\r\nimport { Program, utils } from \"@coral-xyz/anchor\";\r\nimport { FlipmemeProgramNew } from \"./idls\";\r\nimport { Decimal } from 'decimal.js';\r\n\r\nexport function analyzeBuyTransaction(\r\n program: Program<FlipmemeProgramNew>,\r\n transactionData: VersionedTransactionResponse\r\n): BuyResponse[] {\r\n console.log(\"transactionData===\", transactionData);\r\n let instructions = transactionData.meta?.innerInstructions;\r\n let blockNumber = transactionData.slot;\r\n let blockTime = transactionData.blockTime!;\r\n let blockDate = new Date(blockTime * 1000);\r\n let signature = transactionData.transaction.signatures[0];\r\n let buyResponse: BuyResponse[] = [];\r\n if (instructions) {\r\n for (const instruction of instructions as CompiledInnerInstruction[]) {\r\n for (const subInstruction of instruction.instructions as CompiledInstruction[]) {\r\n let rawData = utils.bytes.bs58.decode(subInstruction.data);\r\n const base64Data = utils.bytes.base64.encode(rawData.subarray(8));\r\n let decodedData = program.coder.events.decode(base64Data); \r\n if (decodedData?.name === \"mintEvent\") { \r\n buyResponse.push({\r\n buyer: decodedData.data.buyer.toString(),\r\n collectionAddress: decodedData.data.collection.toString(), \r\n tokenId: decodedData.data.tokenId.toString(),\r\n tokenName: decodedData.data.name.toString(),\r\n tokenUri: decodedData.data.uri.toString(),\r\n price: decodedData.data.price.toString(),\r\n nextPrice: decodedData.data.nextPrice.toString(),\r\n isSoldOut: decodedData.data.isSoldOut,\r\n totalSolAmount: decodedData.data.totalSol.toString(),\r\n timestamp: decodedData.data.timestamp.toString(),\r\n blockNumber: blockNumber.toString(),\r\n blockTimeDate: blockDate.toISOString(),\r\n signature: signature,\r\n });\r\n } else if (decodedData?.name === \"buyEvent\") {\r\n buyResponse.push({\r\n buyer: decodedData.data.buyer.toString(),\r\n collectionAddress: decodedData.data.collection.toString(),\r\n tokenId: decodedData.data.tokenId.toString(),\r\n price: decodedData.data.price.toString(),\r\n nextPrice: decodedData.data.nextPrice.toString(),\r\n totalSolAmount: decodedData.data.totalSol.toString(),\r\n timestamp: decodedData.data.timestamp.toString(),\r\n blockNumber: blockNumber.toString(),\r\n blockTimeDate: blockDate.toISOString(),\r\n signature: signature,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n // console.log(\"buyResponse\", buyResponse);\r\n return buyResponse;\r\n}\r\n\r\n//Sell is same as Flip\r\nexport function analyzeSellTransaction(\r\n program: Program<FlipmemeProgramNew>,\r\n transactionData: VersionedTransactionResponse\r\n): SellResponse[] {\r\n let instructions = transactionData.meta?.innerInstructions;\r\n let blockNumber = transactionData.slot;\r\n let blockTime = transactionData.blockTime!;\r\n let blockDate = new Date(blockTime * 1000);\r\n let signature = transactionData.transaction.signatures[0];\r\n let sellResponse: SellResponse[] = [];\r\n if (instructions) {\r\n for (const instruction of instructions as CompiledInnerInstruction[]) {\r\n for (const subInstruction of instruction.instructions as CompiledInstruction[]) {\r\n let rawData = utils.bytes.bs58.decode(subInstruction.data);\r\n const base64Data = utils.bytes.base64.encode(rawData.subarray(8));\r\n let decodedData = program.coder.events.decode(base64Data);\r\n if (decodedData?.name === \"sellEvent\") {\r\n // console.log(\"mintEvent\", decodedData.data);\r\n sellResponse.push({\r\n seller: decodedData.data.seller.toString(),\r\n collectionAddress: decodedData.data.collection.toString(),\r\n nftAddress: decodedData.data.nft.toString(),\r\n tokenId: decodedData.data.tokenId.toString(),\r\n price: decodedData.data.price.toString(),\r\n nextPrice: decodedData.data.nextPrice.toString(),\r\n totalSolAmount: decodedData.data.totalSol.toString(),\r\n timestamp: decodedData.data.timestamp.toString(),\r\n blockNumber: blockNumber.toString(),\r\n blockTimeDate: blockDate.toISOString(),\r\n signature: signature,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n console.log(\"sellResponse\", sellResponse);\r\n return sellResponse;\r\n}\r\n\r\n//refer the the smart contract price calculation logic\r\nexport function getPrice(_mintCount:number, _nftCount:number, _steepness:number, _midPoint:number, _startPrice:string, _endPrice:string): Decimal {\r\n try {\r\n // Convert values to Decimal\r\n const n = new Decimal(_mintCount).minus(_nftCount);\r\n const steepness = new Decimal(_steepness);\r\n const midPoint = new Decimal(_midPoint);\r\n const startSubEnd = new Decimal(_endPrice).minus(_startPrice);\r\n\r\n // Calculate a\r\n const a = new Decimal(1).plus(\r\n steepness\r\n .mul(-1)\r\n .mul(n.minus(midPoint))\r\n .exp()\r\n );\r\n\r\n // Calculate b\r\n const b = new Decimal(1).plus(\r\n steepness\r\n .mul(-1)\r\n .mul(midPoint.mul(-1))\r\n .exp()\r\n );\r\n\r\n // Calculate final price\r\n const startPrice = new Decimal(_startPrice);\r\n const price = startPrice\r\n .plus(startSubEnd.div(a))\r\n .minus(startSubEnd.div(b));\r\n\r\n return price;\r\n } catch (error) {\r\n throw new Error(`Price calculation failed: ${error}`);\r\n }\r\n\r\n}\r\n","import { getLeafAssetId } from \"@metaplex-foundation/mpl-bubblegum\";\r\nimport { PublicKey } from \"@solana/web3.js\";\r\nimport { BN } from \"bn.js\";\r\nimport _ from \"lodash\";\r\nimport { AssetData, MerkleProof } from \"./types\";\r\n\r\nexport const getAssetsInfo = async (assetIds: number[], merkleTree: string) => {\r\n let assetPubKeys: string[] = [];\r\n for (let assetId in assetIds) {\r\n let itemKey = await getLeafAssetId(\r\n new PublicKey(merkleTree),\r\n new BN(assetId)\r\n );\r\n assetPubKeys.push(itemKey.toBase58());\r\n }\r\n\r\n let assetsInfo = await heliusApi<Array<AssetData>>(\"getAssetBatch\", { ids: assetPubKeys });\r\n let assetsProof = await Promise.all(assetPubKeys.map(async (item) => {\r\n return await heliusApi<MerkleProof>(\"getAssetProof\", {id: item})\r\n }));\r\n\r\n const infoObj = _.keyBy(assetsInfo, 'compression.asset_hash');\r\n const proofObj = _.keyBy(assetsProof, 'leaf');\r\n\r\n const merged = _.merge(infoObj, proofObj);\r\n console.log(\"merged\", merged);\r\n \r\n return merged;\r\n};\r\nexport async function heliusApi<T>(method: any, params: any): Promise<T> {\r\n const response = await fetch(\r\n \"https://devnet.helius-rpc.com/?api-key=e249b1dd-78e6-4369-86da-f597645d4603\",\r\n {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n body: JSON.stringify({\r\n jsonrpc: \"2.0\",\r\n id: \"my-id\",\r\n method,\r\n params,\r\n }),\r\n }\r\n );\r\n const { result } = await response.json();\r\n return result;\r\n}\r\n","import { PublicKey } from \"@solana/web3.js\";\r\nimport { EthereumConnector } from \"./evm\";\r\nimport { SolanaConnector } from \"./solana\";\r\nimport { BlockchainType, BuyCreditParams, BuyParams, BuyResponse, CollectionInfo, CollectionParams, CreateCollectionResponse, EthereumConfig, isEthereumConfig, isSolanaConfig, NFTTradingData, ProfileSellParams, PurcahseTye, SellParams, SellResponse, SolanaConfig } from \"./types\";\r\n\r\nexport class FlipmemeSDK {\r\n \r\n private blockchainType: BlockchainType;\r\n private ethereum: EthereumConnector | null = null;\r\n private solana: SolanaConnector | null = null;\r\n constructor(chainType: BlockchainType, config: EthereumConfig | SolanaConfig) { \r\n this.blockchainType = chainType;\r\n if (chainType === BlockchainType.ETHEREUM && isEthereumConfig(config)) {\r\n this.ethereum = new EthereumConnector(config as EthereumConfig);\r\n } else if (chainType === BlockchainType.SOLANA && isSolanaConfig(config)) {\r\n this.solana = new SolanaConnector(config as SolanaConfig);\r\n } else {\r\n throw new Error(\"Invalid config for the given blockchain type\");\r\n }\r\n }\r\n\r\n public updateConfig(chainType: BlockchainType, config: EthereumConfig | SolanaConfig) {\r\n if (chainType === BlockchainType.ETHEREUM && isEthereumConfig(config)) {\r\n this.ethereum = new EthereumConnector(config as EthereumConfig);\r\n } else if (chainType === BlockchainType.SOLANA && isSolanaConfig(config)) {\r\n this.solana = new SolanaConnector(config as SolanaConfig);\r\n } else {\r\n throw new Error(\"Cannot update config for the given blockchain type\");\r\n }\r\n }\r\n\r\n public async createCollection(params: CollectionParams) : Promise<CreateCollectionResponse> {\r\n if (this.blockchainType === BlockchainType.ETHEREUM && this.ethereum) {\r\n return this.ethereum.createCollection(params);\r\n } else if (this.blockchainType === BlockchainType.SOLANA && this.solana) {\r\n return this.solana.createCollection(params);\r\n } else {\r\n throw new Error(\"Invalid initialized blockchain type\");\r\n }\r\n }\r\n\r\n //used createCollection function on CollectionPopup.tsx\r\n // public async getCollectionPda(): Promise<CollectionInfo> {\r\n // if (this.blockchainType === BlockchainType.SOLANA && this.solana) {\r\n // return this.solana.getCollectionPda();\r\n // } else {\r\n // throw new Error(\"Cannot call this function\");\r\n // }\r\n // }\r\n\r\n public async buy(params: BuyParams): Promise<BuyResponse[]> {\r\n if (this.blockchainType === BlockchainType.SOLANA && this.solana) {\r\n return this.solana.buy(params);\r\n } else {\r\n throw new Error(\"Cannot call this function\");\r\n }\r\n }\r\n \r\n public async flipSell(params: SellParams): Promise<SellResponse[]> {\r\n if (this.blockchainType === BlockchainType.SOLANA && this.solana) {\r\n return this.solana.flipSell(params);\r\n } else {\r\n throw new Error(\"Cannot call this function\");\r\n }\r\n }\r\n\r\n public async profileSell(data: ProfileSellParams): Promise<SellResponse[]> {\r\n if (this.blockchainType === BlockchainType.SOLANA && this.solana) {\r\n return this.solana.profileSell(data);\r\n } else {\r\n throw new Error(\"Cannot call this function\");\r\n }\r\n }\r\n\r\n public async buyCredit(params: BuyCreditParams) {\r\n if (this.blockchainType === BlockchainType.SOLANA && this.solana) {\r\n return this.solana.buyCredit(params);\r\n } else {\r\n throw new Error(\"Cannot call this function\");\r\n }\r\n }\r\n\r\n public async getTotalPrice(type: PurcahseTye, collectionId: string, amount: number):Promise<string> {\r\n if (this.blockchainType === BlockchainType.SOLANA && this.solana) {\r\n return await this.solana.getTotalPrice(type, collectionId, amount);\r\n } else {\r\n throw new Error(\"Cannot call this function\");\r\n }\r\n }\r\n\r\n public async createMerkle(collectionId: string, maxBufferSize: number, maxDepth: number):Promise<PublicKey> {\r\n \r\n if (this.blockchainType === BlockchainType.SOLANA && this.solana) {\r\n return await this.solana.createMerkle(collectionId, maxBufferSize, maxDepth);\r\n } else {\r\n throw new Error(\"Cannot call this function\");\r\n }\r\n }\r\n\r\n /**For testing */\r\n public async getStateInfo() {\r\n if (this.blockchainType === BlockchainType.SOLANA && this.solana) {\r\n return this.solana.getStateInfo();\r\n } else {\r\n throw new Error(\"Cannot call this function\");\r\n }\r\n }\r\n\r\n public async getCollectionInfo(collectionId: string) {\r\n if (this.blockchainType === BlockchainType.SOLANA && this.solana) {\r\n return this.solana.getCollectionInfo(collectionId);\r\n } else {\r\n throw new Error(\"Cannot call this function\");\r\n }\r\n }\r\n\r\n public async getTransactionTest(signature: string): Promise<BuyResponse[]> {\r\n if (this.blockchainType === BlockchainType.SOLANA && this.solana) {\r\n return this.solana.getTransactionTest(signature);\r\n } else {\r\n throw new Error(\"Cannot call this function\");\r\n }\r\n }\r\n\r\n public async getInstructionData(instruction: string){\r\n if (this.blockchainType === BlockchainType.SOLANA && this.solana) {\r\n this.solana.getInstructionData(instruction);\r\n } else {\r\n throw new Error(\"Cannot call this function\");\r\n }\r\n }\r\n /**For testing end */\r\n}","import { bs58 } from \"@coral-xyz/anchor/dist/cjs/utils/bytes\";\r\n// import {\r\n// createTree,\r\n// } from \"@metaplex-foundation/mpl-bubblegum\";\r\nimport {\r\n Connection,\r\n Keypair,\r\n PublicKey,\r\n sendAndConfirmTransaction, \r\n Transaction,\r\n TransactionSignature,\r\n VersionedTransaction,\r\n} from \"@solana/web3.js\";\r\nimport { ENV, RPC, SOLANA_PUBKEYS, VALID_SIZE_PAIR } from \"./constants\";\r\nimport { createUmi } from \"@metaplex-foundation/umi-bundle-defaults\";\r\nimport {\r\n createSignerFromKeypair,\r\n generateSigner,\r\n signerIdentity,\r\n} from \"@metaplex-foundation/umi\";\r\nimport { AnchorProvider, Wallet } from \"@coral-xyz/anchor\";\r\nimport { getKeypairFromFile } from \"../demo/utility\";\r\nimport { BlockchainType } from \"./types\";\r\nimport { FlipmemeSDK } from \"./main_sdk\";\r\nimport { createAccount } from \"@solana/spl-token\";\r\n\r\nexport class Utility {\r\n /**\r\n * this function is used to create merkle tree on backend side for bubblegum cNFT for metaplex\r\n * backend pays the merkle tree create fee\r\n * this function works on mpl_bubblegum version 4.3.1 but I downgrade the mpl_bubblegum for getLeafAsset function\r\n */\r\n // static async createMerkleTree(\r\n // env: ENV,\r\n // payerPrivateKey: string,\r\n // collectionSize: number,\r\n // collectionId: string\r\n // ): Promise<PublicKey> {\r\n // if (collectionSize < 3 || collectionSize > 24)\r\n // throw new Error(`collection size won't be such value ${collectionSize}`);\r\n // const rpc = RPC[env];\r\n // const privKeyUtf8 = bs58.decode(payerPrivateKey);\r\n // let depthSize = Math.ceil(Math.log2(collectionSize));\r\n // //@ts-ignore\r\n // const { maxBufferSize, maxDepth } = VALID_SIZE_PAIR[depthSize];\r\n\r\n // let umi = createUmi(rpc);\r\n // const payer = umi.eddsa.createKeypairFromSecretKey(privKeyUtf8);\r\n // const signer = createSignerFromKeypair(umi, payer);\r\n // const merkleTree = generateSigner(umi);\r\n // umi.use(signerIdentity(signer));\r\n\r\n // let builder = await createTree(umi, {\r\n // merkleTree,\r\n // maxDepth,\r\n // maxBufferSize,\r\n // });\r\n\r\n // let res = await builder.sendAndConfirm(umi);\r\n // console.log(\r\n // \"merkle tree create transaction signature\",\r\n // res.signature.toString()\r\n // );\r\n // return new PublicKey(merkleTree.publicKey);\r\n // }\r\n\r\n static async createMerkleTreeFromContract(\r\n env: ENV,\r\n privateKey: string,\r\n collectionSize: number,\r\n collectionId: string\r\n ): Promise<PublicKey> { \r\n const rpc = RPC[env];\r\n let depthSize = Math.ceil(Math.log2(collectionSize));\r\n //@ts-ignore\r\n const { maxBufferSize, maxDepth } = VALID_SIZE_PAIR[depthSize]; \r\n const keypair = Keypair.fromSecretKey(bs58.decode(privateKey));\r\n const wallet = new Wallet(keypair);\r\n const connectionA = new Connection(rpc);\r\n const provider = new AnchorProvider(connectionA, wallet, {\r\n skipPreflight: true,\r\n preflightCommitment: \"confirmed\",\r\n });\r\n\r\n const sendTransaction = async (\r\n transaction: Transaction | VersionedTransaction,\r\n connection: Connection\r\n ): Promise<TransactionSignature> => {\r\n if (transaction instanceof Transaction) {\r\n let signature = await sendAndConfirmTransaction(\r\n connection,\r\n transaction,\r\n [keypair]\r\n );\r\n console.log(\"sendAndConfrimTransaction : signature\", signature);\r\n return signature;\r\n } else {\r\n transaction.sign([keypair]);\r\n let signature = await connectionA.sendTransaction(transaction, {\r\n skipPreflight: true,\r\n preflightCommitment: \"confirmed\",\r\n });\r\n console.log(\"signature\", signature);\r\n return signature;\r\n }\r\n };\r\n const flipmemeSDK = new FlipmemeSDK(BlockchainType.SOLANA, {\r\n provider: provider,\r\n wallet: wallet.publicKey,\r\n sendTransaction: sendTransaction,\r\n }); \r\n let merkleTreePubKey = await flipmemeSDK.createMerkle(collectionId, maxBufferSize, maxDepth);\r\n return merkleTreePubKey; \r\n }\r\n}\r\n"],"mappings":"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","names":["import_anchor","BlockchainType","PurcahseTye","import_web3","import_bn","import_web3","collectionPda","import_web3","collectionPda","collectionNftPda","collectionMintPda","treeConfigPda","nftHolderPda","import_lodash","import_decimal","import_web3","_","collectionPda","collectionNftPda","collectionMintPda","BN","Decimal","treeConfigPda","treeCreatorPda","nftHolderPda","import_web3","import_anchor"]}
|