flipmeme-sdk 1.2.39 → 1.2.41
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.js +20 -15
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +20 -15
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
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/solana/tensor.ts"],"sourcesContent":["export { FlipmemeSDK } from \"./main_sdk\";\r\nexport * from \"./types\";\r\nexport * from \"./constants\";\r\nexport * from \"./solana/tensor\";","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 Wallet,\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 NftInfo,\r\n ProfileSellParams,\r\n PurcahseType,\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 {\r\n SDK_SOLANA_CONFIG,\r\n SOLANA,\r\n SOLANA_PUBKEYS,\r\n VALID_SIZE_PAIR,\r\n} from \"../constants\";\r\nimport {\r\n AccountMeta,\r\n AddressLookupTableAccount,\r\n AddressLookupTableProgram,\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 {\r\n ConcurrentMerkleTreeAccount,\r\n createAllocTreeIx,\r\n ValidDepthSizePair,\r\n} from \"@solana/spl-account-compression\";\r\nexport class SolanaConnector {\r\n private config: SolanaConfig;\r\n private program: Program<FlipmemeProgramNew> | null = null;\r\n private lookupTableAccounts: AddressLookupTableAccount | null = null;\r\n constructor(config: SolanaConfig) {\r\n this.config = config;\r\n this.setFlipmemeProgram();\r\n this.setLookupTableAccounts();\r\n }\r\n\r\n private async setLookupTableAccounts() {\r\n const lookupTableAccount = await this.getLookupTableAccounts(\r\n SOLANA_PUBKEYS.LOOKUP_TABLE\r\n );\r\n this.lookupTableAccounts = lookupTableAccount;\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\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 const { sessionId, name, tokenUri, totalSupply } = params;\r\n const { collectionPda, collectionNftPda } = await getTradingAccounts(\r\n this.program.programId,\r\n collectionID.toString(),\r\n this.config.wallet,\r\n undefined,\r\n undefined\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(100000000),\r\n new BN(500000000)\r\n )\r\n .accountsStrict({\r\n state: SOLANA_PUBKEYS.STATE_ID,\r\n collection: collectionPda,\r\n collectionNft: collectionNftPda,\r\n creator: this.config.wallet,\r\n mplCore: SOLANA.MPL_CORE_STR,\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: [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, baseUri } = 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 let transactions: Transaction[] = [];\r\n if (reserveToken.buy?.length) {\r\n try {\r\n const txs = await this.getBuyInstructions(\r\n this.config.wallet,\r\n collectionId,\r\n reserveToken.buy\r\n );\r\n transactions.push(...txs);\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 txs = await this.getMintAndBuyInstructions(\r\n this.config.wallet,\r\n collectionId,\r\n creatorAddress,\r\n reserveToken.mintAndBuy,\r\n baseUri\r\n );\r\n transactions.push(...txs);\r\n } catch (error) {\r\n console.error(\"Failed to getMintAndBuyInstructions\", { error });\r\n }\r\n }\r\n\r\n let buyResponse: BuyResponse[] = [];\r\n\r\n try {\r\n const { signatures, latestBlockhash } = await this.sendTxnForBatch(\r\n transactions,\r\n this.lookupTableAccounts\r\n );\r\n console.log(\"signatures\", signatures);\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));\r\n throw e;\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, ownedTokens } = params;\r\n\r\n let transactions: Transaction[] = [];\r\n\r\n try {\r\n const txs = await this.getSellInstructions(\r\n this.config.wallet,\r\n collectionId,\r\n ownedTokens\r\n );\r\n transactions.push(...txs);\r\n } catch (error) {\r\n console.error(\"Failed to getSellInstructions\", { error });\r\n throw error;\r\n }\r\n\r\n let sellResponse: SellResponse[] = [];\r\n\r\n try {\r\n const { signatures, latestBlockhash } = await this.sendTxnForBatch(\r\n transactions,\r\n this.lookupTableAccounts\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 console.error(\"Flip failed:\", JSON.stringify(e));\r\n throw e;\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 transactions: Transaction[] = [];\r\n for (const collectionId in data.data) {\r\n const items = data.data[collectionId];\r\n try {\r\n const txs = await this.getSellInstructions(\r\n this.config.wallet,\r\n collectionId,\r\n items.tokenIds\r\n );\r\n transactions.push(...txs);\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\r\n try {\r\n const { signatures, latestBlockhash } = await this.sendTxnForBatch(\r\n transactions,\r\n this.lookupTableAccounts\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));\r\n throw e;\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 createLookupTableAndExtend(\r\n addressesToAdd: PublicKey[]\r\n ): Promise<PublicKey> {\r\n let slot = await this.config.provider.connection.getSlot();\r\n const latestBlockhash =\r\n await this.config.provider.connection.getLatestBlockhash(\"confirmed\");\r\n\r\n const [lookupTableInst, lookupTableAddress] =\r\n AddressLookupTableProgram.createLookupTable({\r\n authority: this.config.wallet,\r\n payer: this.config.wallet,\r\n recentSlot: slot,\r\n });\r\n\r\n console.log(\"lookup table address:\", lookupTableAddress.toBase58());\r\n\r\n // To create the Address Lookup Table on chain:\r\n // send the `lookupTableInst` instruction in a transaction\r\n const lookupMessage = new TransactionMessage({\r\n payerKey: this.config.wallet,\r\n recentBlockhash: latestBlockhash.blockhash,\r\n instructions: [lookupTableInst],\r\n }).compileToV0Message();\r\n\r\n const lookupTransaction = new VersionedTransaction(lookupMessage);\r\n const lookupSignature = await this.config.sendTransaction(\r\n lookupTransaction,\r\n this.config.provider.connection\r\n );\r\n console.log(\"Sent transaction for lookup table:\", lookupSignature);\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: lookupSignature,\r\n });\r\n console.log(\"confirmResult == \", confirmResult);\r\n await this.extendLookupTable(lookupTableAddress, addressesToAdd, true);\r\n return lookupTableAddress;\r\n }\r\n\r\n public async extendLookupTable(\r\n lookupTableAddress: PublicKey,\r\n addressesToAdd: PublicKey[],\r\n isInitial: boolean = false\r\n ) {\r\n const latestBlockhash =\r\n await this.config.provider.connection.getLatestBlockhash(\"confirmed\");\r\n if (isInitial == true) {\r\n let constants_pubkeys = [\r\n SOLANA_PUBKEYS.STATE_ID,\r\n SOLANA_PUBKEYS.TREASURY_ID,\r\n SOLANA_PUBKEYS.MPL_CORE,\r\n SOLANA_PUBKEYS.RENT_TOKEN_ID,\r\n SOLANA_PUBKEYS.LP_PROVISIONER_ID,\r\n SOLANA_PUBKEYS.SYSTEM_PROGRAM_ID,\r\n ];\r\n addressesToAdd.push(...constants_pubkeys);\r\n }\r\n const extendInstruction = AddressLookupTableProgram.extendLookupTable({\r\n payer: this.config.wallet,\r\n authority: this.config.wallet,\r\n lookupTable: lookupTableAddress,\r\n addresses: addressesToAdd,\r\n });\r\n\r\n // Send this `extendInstruction` in a transaction to the cluster\r\n // to insert the listing of `addresses` into your lookup table with address `lookupTableAddress`\r\n const extensionMessageV0 = new TransactionMessage({\r\n payerKey: this.config.wallet,\r\n recentBlockhash: latestBlockhash.blockhash,\r\n instructions: [extendInstruction],\r\n }).compileToV0Message();\r\n\r\n const extensionTransactionV0 = new VersionedTransaction(extensionMessageV0);\r\n const extensionSignature = await this.config.sendTransaction(\r\n extensionTransactionV0,\r\n this.config.provider.connection\r\n );\r\n console.log(\"extension signature\", extensionSignature);\r\n }\r\n\r\n public async getTotalPrice(\r\n type: PurcahseType,\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 === PurcahseType.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 === PurcahseType.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\r\n public async finalizeSale(collectionId: string) {\r\n if (!this.program) {\r\n throw new Error(\"Program not initialized\");\r\n }\r\n const {\r\n collectionInfo: { creator },\r\n } = await this.getCollectionInfo(collectionId);\r\n const { collectionPda } = await getTradingAccounts(\r\n this.program.programId,\r\n collectionId,\r\n this.config.wallet,\r\n undefined,\r\n undefined\r\n );\r\n\r\n const instruction = await this.program?.methods\r\n .moveLiquidity()\r\n .accountsStrict({\r\n state: SOLANA_PUBKEYS.STATE_ID,\r\n collection: collectionPda,\r\n lpSellout: SOLANA_PUBKEYS.SELL_OUT_ID,\r\n collectionCreator: creator,\r\n lpProvisioner: SOLANA_PUBKEYS.LP_PROVISIONER_ID,\r\n eventAuthority: accounts.eventAuthority(this.program.programId),\r\n program: this.program.programId,\r\n })\r\n .instruction();\r\n try {\r\n const { signature, latestBlockhash } = await this.sendTxn(\r\n [instruction],\r\n null\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 console.log(\"signature\", signature);\r\n return signature;\r\n } catch (e) {\r\n console.error(\"Distribute failed\", JSON.stringify(e));\r\n }\r\n }\r\n\r\n public async ejectAllNftsOfCollection(\r\n collectionId: string,\r\n nftInfos: Array<NftInfo>\r\n ) {\r\n if (!this.program) {\r\n throw new Error(\"Program not initialized\");\r\n }\r\n\r\n let transactions: Transaction[] = [];\r\n let tokenChunks = getTokenChunks(\r\n nftInfos,\r\n SDK_SOLANA_CONFIG.EJECT_CHUNK_SIZE\r\n );\r\n console.log(\"nftInfos from SDK\", tokenChunks);\r\n try {\r\n for (const chunk of tokenChunks) {\r\n let transaction = await this.setUpInstructions(1400000);\r\n for (const token of chunk) {\r\n const { collectionPda, collectionNftPda, nftHolderPda, nftPda } =\r\n await getTradingAccounts(\r\n this.program.programId,\r\n collectionId,\r\n new PublicKey(token.nftOnwer),\r\n undefined,\r\n new PublicKey(token.nftId)\r\n );\r\n\r\n const instruction = await this.program.methods\r\n .ejectNft(new PublicKey(token.nftId)) //this is nft seed\r\n .accountsStrict({\r\n state: SOLANA_PUBKEYS.STATE_ID,\r\n collection: collectionPda,\r\n collectionNft: collectionNftPda,\r\n nftOwner: new PublicKey(token.nftOnwer),\r\n nftHolder: nftHolderPda!,\r\n nft: nftPda!,\r\n operator: this.config.wallet,\r\n mplCore: SOLANA_PUBKEYS.MPL_CORE,\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 transaction.add(instruction);\r\n }\r\n transactions.push(transaction);\r\n }\r\n\r\n const { signatures } = await this.sendTxnForBatch(\r\n transactions,\r\n this.lookupTableAccounts\r\n );\r\n } catch (e) {\r\n console.log(\"ERRORR in ejectAllNftsOfCollection\", JSON.stringify(e));\r\n throw e;\r\n }\r\n }\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 /**\r\n * not used for now. sendTxnForBatch function is used\r\n */\r\n //useSenTxn.ts\r\n private async sendTxn(\r\n instructions: TransactionInstruction[],\r\n lookupTableAccounts: AddressLookupTableAccount | null\r\n ) {\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\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 lookupTableAccounts == null ? [] : [lookupTableAccounts]\r\n );\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 //useSenTxn.ts\r\n private async sendTxnForBatch(\r\n transactions: Transaction[],\r\n lookupTableAccounts: AddressLookupTableAccount | null\r\n ) {\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\r\n const latestBlockhash =\r\n await this.config.provider.connection.getLatestBlockhash(\"confirmed\");\r\n\r\n const payerKey = this.config.wallet;\r\n const txs = transactions.map((tx) => {\r\n const messageV0 = new TransactionMessage({\r\n payerKey: payerKey,\r\n recentBlockhash: latestBlockhash.blockhash,\r\n instructions: tx.instructions,\r\n }).compileToV0Message(\r\n lookupTableAccounts == null ? [] : [lookupTableAccounts]\r\n );\r\n console.log(\"transaction size \", messageV0.serialize().length);\r\n return new VersionedTransaction(messageV0);\r\n });\r\n\r\n // Send transaction with fresh blockhash\r\n const signedTxs = await this.config.signAllTransactions(txs);\r\n let signatures = await Promise.all(\r\n signedTxs.map(async (signedTx) => {\r\n if (signedTx instanceof VersionedTransaction) {\r\n let signature = await this.config.provider.connection.sendTransaction(\r\n signedTx,\r\n { skipPreflight: true, preflightCommitment: \"confirmed\" }\r\n );\r\n return signature;\r\n }\r\n })\r\n );\r\n\r\n console.log(\"signatures from Promisze all ===============\", signatures);\r\n // Return both signature and blockhash info for confirmation if needed\r\n return {\r\n signatures,\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: string[]\r\n ): Promise<Transaction[]> {\r\n if (!this.program) {\r\n throw new Error(\"Program not initialized\");\r\n }\r\n\r\n const tokenChunks = getTokenChunks(\r\n tokens,\r\n SDK_SOLANA_CONFIG.BUY_CHUNK_SIZE\r\n );\r\n const transactions: Transaction[] = [];\r\n const { collectionPda, collectionNftPda, nftHolderPda } =\r\n await getTradingAccounts(\r\n this.program.programId,\r\n collectionId,\r\n userPublicKey,\r\n undefined,\r\n undefined\r\n );\r\n\r\n try {\r\n for (const chunk of tokenChunks) {\r\n let transaction = await this.setUpInstructions(1400000);\r\n for (const nft of chunk) {\r\n const nftPda = accounts.nftPda(\r\n collectionPda,\r\n new PublicKey(nft),\r\n this.program.programId\r\n );\r\n const instruction = await this.program.methods\r\n .buy(new PublicKey(nft))\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_PUBKEYS.MPL_CORE,\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 transaction.add(instruction);\r\n }\r\n transactions.push(transaction);\r\n }\r\n return transactions;\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: string[]\r\n ): Promise<Transaction[]> {\r\n if (!this.program) {\r\n throw new Error(\"Program not initialized\");\r\n }\r\n const tokenChunks = getTokenChunks(\r\n tokens,\r\n SDK_SOLANA_CONFIG.SELL_CHUNK_SIZE\r\n );\r\n const transactions: Transaction[] = [];\r\n const { collectionPda, collectionNftPda, nftHolderPda } =\r\n await getTradingAccounts(\r\n this.program.programId,\r\n collectionId,\r\n userPublicKey,\r\n undefined,\r\n undefined\r\n );\r\n\r\n try {\r\n for (const chunk of tokenChunks) {\r\n let transaction = await this.setUpInstructions(1400000);\r\n for (const nft of chunk) {\r\n const nftPda = accounts.nftPda(\r\n collectionPda,\r\n new PublicKey(nft),\r\n this.program.programId\r\n );\r\n\r\n const instruction = await this.program.methods\r\n .sell(new PublicKey(nft))\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 seller: userPublicKey,\r\n mplCore: SOLANA_PUBKEYS.MPL_CORE,\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 transaction.add(instruction);\r\n }\r\n transactions.push(transaction);\r\n }\r\n return transactions;\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 getLookupTableAccounts(\r\n lookupTableAddress: PublicKey\r\n ): Promise<AddressLookupTableAccount | null> {\r\n const lookupTableAccount = await this.config.provider.connection\r\n .getAddressLookupTable(lookupTableAddress)\r\n .then((res) => res.value);\r\n return lookupTableAccount;\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 ): Promise<Transaction[]> {\r\n if (!this.program) {\r\n throw new Error(\"Program not initialized\");\r\n }\r\n const chunkSize = SDK_SOLANA_CONFIG.MINT_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 transactions: Transaction[] = [];\r\n const { nftHolderPda, collectionPda, collectionNftPda } =\r\n await getTradingAccounts(\r\n this.program.programId,\r\n collectionId,\r\n userPublicKey,\r\n creatorAddress,\r\n undefined\r\n );\r\n\r\n try {\r\n for (const chunks of tokenChunks) {\r\n let transaction = await this.setUpInstructions(1400000);\r\n for (const nftName of chunks) {\r\n const nftSeedKeypair = Keypair.generate();\r\n const nftPda = accounts.nftPda(\r\n collectionPda,\r\n nftSeedKeypair.publicKey,\r\n this.program.programId\r\n );\r\n console.log(\"=======nft seed==========\", nftSeedKeypair.publicKey);\r\n const instruction = await this.program.methods\r\n .mintAndBuy(nftSeedKeypair.publicKey, nftName, baseUri)\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_PUBKEYS.MPL_CORE,\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 transaction.add(instruction);\r\n }\r\n transactions.push(transaction);\r\n }\r\n\r\n return transactions;\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): Promise<Transaction> {\r\n const microLamports = await this.getPriorityFee();\r\n let transaction: Transaction;\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 transaction = new Transaction().add(modifyComputeUnits).add(addPriorityFee);\r\n return transaction;\r\n }\r\n\r\n public async getTransactionTest(\r\n signature: string,\r\n transactionType = \"buy\"\r\n ): Promise<BuyResponse[] | SellResponse[]> {\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 if (transactionType == \"buy\") {\r\n return analyzeBuyTransaction(this.program, transaction);\r\n } else if (transactionType == \"sell\") {\r\n return analyzeSellTransaction(this.program, transaction);\r\n }\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 Signer,\r\n ConfirmOptions,\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 signAllTransactions: (\r\n txs: Array<Transaction | VersionedTransaction>\r\n ) => Promise<Array<Transaction | VersionedTransaction>>;\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 SellData {\r\n tokenIds: string[]; \r\n}\r\n\r\nexport interface ReserveToken {\r\n buy: string[] | 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 collectionId: string;\r\n collectionSymbol: string;\r\n creatorAddress: string; //collection creator address\r\n baseUri: string;\r\n reserveToken: ReserveToken | null;\r\n}\r\n\r\nexport interface NftInfo {\r\n nftId: string;\r\n nftOnwer: string;\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 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 ownedTokens: string[];\r\n}\r\n\r\n//used on useFlipProfile hook\r\nexport interface ProfileSellParams {\r\n data: Record<string, SellData>;\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 PurcahseType {\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","{\r\n \"address\": \"2KHXGcVHjnuEqw7ZrwPBXdPzrG4bWY24QPAvhRmQ1s8c\",\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 \"* `_nft_seed` - 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\": \"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\": \"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\": \"nft_seed\"\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\": \"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 \"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\": \"nft_seed\",\r\n \"type\": \"pubkey\"\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_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\": \"creator\",\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\": \"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 \"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\": \"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 \"* `_nft_seed` - 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\": \"nft_seed\"\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 \"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\": \"nft_seed\",\r\n \"type\": \"pubkey\"\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\": \"lp_sellout\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"royalty\",\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 \"* `base_uri` - The base_uri of the NFT metadata\",\r\n \"* 'nft_seed' - The nft_seed of NFT address\"\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\": \"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\": \"nft\",\r\n \"docs\": [\r\n \"The nft that will be minted and purchased by the buyer\"\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 ]\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\": \"nft_seed\"\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\": \"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 \"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\": \"nft_seed\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"name\",\r\n \"type\": \"string\"\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\": \"lp_sellout\",\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 \"* `_nft_seed` - 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\": \"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 \"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\": \"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\": \"nft_seed\"\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\": \"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 \"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\": \"nft_seed\",\r\n \"type\": \"pubkey\"\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\": \"EjectEvent\",\r\n \"discriminator\": [\r\n 164,\r\n 69,\r\n 55,\r\n 131,\r\n 187,\r\n 206,\r\n 42,\r\n 188\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\": \"WrongLpSellOut\",\r\n \"msg\": \"Wrong lp sell out account\"\r\n },\r\n {\r\n \"code\": 6003,\r\n \"name\": \"WrongCreator\",\r\n \"msg\": \"Wrong creator account\"\r\n },\r\n {\r\n \"code\": 6004,\r\n \"name\": \"WrongLpProvisioner\",\r\n \"msg\": \"Wrong LP provisioner account\"\r\n },\r\n {\r\n \"code\": 6005,\r\n \"name\": \"WrongProgramId\",\r\n \"msg\": \"Wrong program id\"\r\n },\r\n {\r\n \"code\": 6006,\r\n \"name\": \"WrongIxData\",\r\n \"msg\": \"Wrong instruction data\"\r\n },\r\n {\r\n \"code\": 6007,\r\n \"name\": \"ExpectedMoveLiquidityIx\",\r\n \"msg\": \"Expected MoveLiquidity ix\"\r\n },\r\n {\r\n \"code\": 6008,\r\n \"name\": \"CreateFeeNotSet\",\r\n \"msg\": \"Create fee not set\"\r\n },\r\n {\r\n \"code\": 6009,\r\n \"name\": \"InvalidSupply\",\r\n \"msg\": \"Total supply must be greater than 0\"\r\n },\r\n {\r\n \"code\": 6010,\r\n \"name\": \"CollectionSoldOut\",\r\n \"msg\": \"Collection is sold out\"\r\n },\r\n {\r\n \"code\": 6011,\r\n \"name\": \"CollectionNotSoldOut\",\r\n \"msg\": \"Collection is not sold out\"\r\n },\r\n {\r\n \"code\": 6012,\r\n \"name\": \"MintPaused\",\r\n \"msg\": \"Minting is currently paused\"\r\n },\r\n {\r\n \"code\": 6013,\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\": \"collection\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"nft\",\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 \"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 {\r\n \"name\": \"EjectEvent\",\r\n \"type\": {\r\n \"kind\": \"struct\",\r\n \"fields\": [\r\n {\r\n \"name\": \"collection\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"nft\",\r\n \"type\": \"pubkey\"\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\": \"nft\",\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\": \"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\": \"collection\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"nft\",\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_sellout\",\r\n \"docs\": [\r\n \"The wallet that receives fee when the collection is sold out\"\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\": \"royalty\",\r\n \"docs\": [\r\n \"The wallet that receives royalties from secondary wallet\"\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}","import { PublicKey } from \"@solana/web3.js\";\r\n\r\nexport const SOLANA = {\r\n STATE_ID_STR: \"H876G8i7bdkmEDngWQJCKTFXgwU9c5cao2BdCdnqVFw7\",\r\n TREASURY_ID_STR: \"4kU2KESm5MaJSgieVAoAbUGMzGkm7WC4dPYjeCHQn5R6\",\r\n SELL_OUT_ID_STR: \"5s7D5tQKjAa9au5VdpfZK7Zbwe4fQ87P25r312V2QKgr\",\r\n LP_PROVISIONER_ID_STR: \"EXdeo9aKzzYUU9txeuRDkYdaPQZmhywDJFzkXpoSCW2S\",\r\n ROYALTY_ID_STR: \"6oYqWqe23Ff1pnP2qPGhtYAgC7zD3fdWCUfvafaoTJEX\",\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 LOOKUP_TABLE: new PublicKey(\"7HEasJQWAuA3TAPP6KcxvsPaYaS38csWdaxSkYxWq43h\"),\r\n STATE_ID: new PublicKey(SOLANA.STATE_ID_STR),\r\n TREASURY_ID: new PublicKey(SOLANA.TREASURY_ID_STR),\r\n SELL_OUT_ID: new PublicKey(SOLANA.SELL_OUT_ID_STR),\r\n LP_PROVISIONER_ID: new PublicKey(SOLANA.LP_PROVISIONER_ID_STR),\r\n ROYALITY_ID: new PublicKey(SOLANA.ROYALTY_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_CORE: new PublicKey(SOLANA.MPL_CORE_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 SYSTEM_PROGRAM_ID: new PublicKey(\"11111111111111111111111111111111\"),\r\n};\r\n\r\nexport const SDK_SOLANA_CONFIG = {\r\n MINT_CHUNK_SIZE: 3,\r\n BUY_CHUNK_SIZE: 9,\r\n SELL_CHUNK_SIZE: 9,\r\n EJECT_CHUNK_SIZE: 9\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 nft: PublicKey,\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 nft.toBuffer(),\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 programId: PublicKey, \r\n collectionId: string,\r\n userPublicKey: PublicKey | undefined,\r\n creatorAddress: string | undefined, //in case of buy this is a collection creator address\r\n nftSeed: PublicKey | undefined\r\n) => { \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 nftHolderPda = userPublicKey\r\n ? accounts.nftHolderPda(userPublicKey, programId)\r\n : undefined; \r\n const collectionCreator = creatorAddress && new PublicKey(creatorAddress);\r\n const nftPda = nftSeed != undefined ? accounts.nftPda(collectionPda, nftSeed, programId) : undefined;\r\n return { \r\n collectionPda,\r\n collectionNftPda, \r\n nftHolderPda, \r\n collectionCreator,\r\n nftPda\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 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(\"sellEvent\", decodedData.data);\r\n sellResponse.push({\r\n seller: decodedData.data.seller.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(\"sellResponse\", sellResponse);\r\n return sellResponse;\r\n}\r\n\r\n//refer the the smart contract price calculation logic\r\nexport function getPrice(\r\n _mintCount: number,\r\n _nftCount: number,\r\n _steepness: number,\r\n _midPoint: number,\r\n _startPrice: string,\r\n _endPrice: string\r\n): 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.mul(-1).mul(n.minus(midPoint)).exp()\r\n );\r\n\r\n // Calculate b\r\n const b = new Decimal(1).plus(\r\n steepness.mul(-1).mul(midPoint.mul(-1)).exp()\r\n );\r\n\r\n // Calculate final price\r\n const startPrice = new Decimal(_startPrice);\r\n const price = startPrice.plus(startSubEnd.div(a)).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","import { PublicKey } from \"@solana/web3.js\";\r\nimport { EthereumConnector } from \"./evm\";\r\nimport { SolanaConnector } from \"./solana\";\r\nimport {\r\n BlockchainType,\r\n BuyCreditParams,\r\n BuyParams,\r\n BuyResponse,\r\n CollectionInfo,\r\n CollectionParams,\r\n CreateCollectionResponse,\r\n EthereumConfig,\r\n isEthereumConfig,\r\n isSolanaConfig,\r\n NftInfo,\r\n ProfileSellParams,\r\n PurcahseType,\r\n SellParams,\r\n SellResponse,\r\n SolanaConfig,\r\n} from \"./types\";\r\nimport { VALID_SIZE_PAIR } from \"./constants\";\r\n\r\nexport class FlipmemeSDK {\r\n private blockchainType: BlockchainType;\r\n private ethereum: EthereumConnector | null = null;\r\n private solana: SolanaConnector | null = null;\r\n constructor(\r\n chainType: BlockchainType,\r\n config: EthereumConfig | SolanaConfig\r\n ) {\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(\r\n chainType: BlockchainType,\r\n config: EthereumConfig | SolanaConfig\r\n ) {\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(\r\n params: CollectionParams\r\n ): 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(\r\n type: PurcahseType,\r\n collectionId: string,\r\n amount: number\r\n ): 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 /**\r\n * create lookup table account with lookuptable addresses and return lookup table account\r\n * @param lookupTableAddresses addresses to add lookup table\r\n */\r\n public async createLookupTableAndExtend(\r\n addressesToAdd: PublicKey[]\r\n ): Promise<PublicKey> {\r\n if (this.blockchainType === BlockchainType.SOLANA && this.solana) {\r\n return await this.solana.createLookupTableAndExtend(addressesToAdd);\r\n } else {\r\n throw new Error(\"Cannot call this function\");\r\n }\r\n }\r\n\r\n public async extendLookupTable(\r\n lookupTableAddress: PublicKey,\r\n addressesToAdd: PublicKey[],\r\n isInitial: boolean = false\r\n ) {\r\n if (this.blockchainType === BlockchainType.SOLANA && this.solana) {\r\n return await this.solana.extendLookupTable(\r\n lookupTableAddress,\r\n addressesToAdd\r\n );\r\n } else {\r\n throw new Error(\"Cannot call this function\");\r\n }\r\n }\r\n\r\n public async finalizeSale(collectionId: string) {\r\n if (this.blockchainType === BlockchainType.SOLANA && this.solana) {\r\n await this.solana.finalizeSale(collectionId);\r\n } else {\r\n throw new Error(\"Cannot call this function\");\r\n }\r\n }\r\n\r\n public async ejectNfts(collectionId: string, nftInfos: NftInfo[]) {\r\n if (this.blockchainType === BlockchainType.SOLANA && this.solana) {\r\n await this.solana.ejectAllNftsOfCollection(collectionId, nftInfos);\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(\r\n signature: string,\r\n transactionType?: string\r\n ): Promise<BuyResponse[] | SellResponse[]> {\r\n if (this.blockchainType === BlockchainType.SOLANA && this.solana) {\r\n return this.solana.getTransactionTest(signature, transactionType);\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}\r\n","import { Connection, Keypair, VersionedTransaction } from \"@solana/web3.js\";\r\nimport { ENV, RPC } from \"../constants\";\r\nimport axios, { AxiosError } from \"axios\";\r\nimport { bs58 } from \"@coral-xyz/anchor/dist/cjs/utils/bytes\";\r\nimport { Wallet } from \"@coral-xyz/anchor\";\r\n\r\nconst BASE_TENSOR_URI = \"https://api.mainnet.tensordev.io/api/v1/\";\r\nasync function getCollectionId(collectionMint: string) {\r\n const { data } = await axios.get(\r\n `${BASE_TENSOR_URI}/collections/find_collection?filter=${collectionMint}`\r\n );\r\n console.log(\"====collection Mint====\", collectionMint);\r\n console.log(\"====collection collId====\", data.collId);\r\n return data.collId;\r\n}\r\n\r\n/**\r\n * this function only works for solana mainnet. So don't need to get connection as parameter\r\n */\r\nexport async function placeTensorCollectionBid( \r\n price: number,\r\n quantity: number,\r\n collectionMint: string,\r\n privateKey: string\r\n) {\r\n try {\r\n const keypair = Keypair.fromSecretKey(bs58.decode(privateKey));\r\n const tensorCollId = await getCollectionId(collectionMint);\r\n const rpc = RPC[ENV.Mainnet];\r\n const connectionA = new Connection(rpc);\r\n const blockhash = await connectionA.getLatestBlockhash();\r\n\r\n const params = `owner=${keypair.publicKey.toString()}&price=${price}&collId=${tensorCollId}&quantity=${quantity}&blockhash=${blockhash.blockhash}`;\r\n console.log(\"params\", params);\r\n const { data } = await axios.get(\r\n \"https://api.mainnet.tensordev.io/api/v1/tx/collection_bid?\" + params,\r\n {\r\n headers: {\r\n Accept: \"application/json\",\r\n \"x-tensor-api-key\": \"f990052f-72e5-4493-bb44-7ed3aea0d9fe\",\r\n },\r\n }\r\n );\r\n console.log(\"res\", data);\r\n const buff = Buffer.from(data.txs[0].txV0);\r\n\r\n const tx: VersionedTransaction = VersionedTransaction.deserialize(buff);\r\n\r\n \r\n tx.sign([keypair]);\r\n let signature = await connectionA.sendTransaction(tx, {\r\n skipPreflight: true,\r\n preflightCommitment: \"confirmed\",\r\n });\r\n console.log(\"signature\", signature);\r\n } catch (e) {\r\n if (e instanceof AxiosError) {\r\n console.log(\"api error\", e.message);\r\n }\r\n }\r\n}\r\n"],"mappings":"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","names":["import_anchor","BlockchainType","PurcahseType","ENV","import_web3","import_web3","collectionPda","collectionPda","import_web3","collectionPda","collectionNftPda","nftHolderPda","nftPda","import_decimal","collectionPda","collectionNftPda","BN","Decimal","nftHolderPda","nftPda","import_web3","axios"]}
|
|
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/solana/tensor.ts"],"sourcesContent":["export { FlipmemeSDK } from \"./main_sdk\";\r\nexport * from \"./types\";\r\nexport * from \"./constants\";\r\nexport * from \"./solana/tensor\";","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 Wallet,\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 NftInfo,\r\n ProfileSellParams,\r\n PurcahseType,\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 {\r\n SDK_SOLANA_CONFIG,\r\n SOLANA,\r\n SOLANA_PUBKEYS,\r\n VALID_SIZE_PAIR,\r\n} from \"../constants\";\r\nimport {\r\n AccountMeta,\r\n AddressLookupTableAccount,\r\n AddressLookupTableProgram,\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 {\r\n ConcurrentMerkleTreeAccount,\r\n createAllocTreeIx,\r\n ValidDepthSizePair,\r\n} from \"@solana/spl-account-compression\";\r\nexport class SolanaConnector {\r\n private config: SolanaConfig;\r\n private program: Program<FlipmemeProgramNew> | null = null;\r\n private lookupTableAccounts: AddressLookupTableAccount | null = null;\r\n constructor(config: SolanaConfig) {\r\n this.config = config;\r\n this.setFlipmemeProgram();\r\n this.setLookupTableAccounts();\r\n }\r\n\r\n private async setLookupTableAccounts() {\r\n const lookupTableAccount = await this.getLookupTableAccounts(\r\n SOLANA_PUBKEYS.LOOKUP_TABLE\r\n );\r\n this.lookupTableAccounts = lookupTableAccount;\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\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 const { sessionId, name, tokenUri, totalSupply } = params;\r\n const { collectionPda, collectionNftPda } = await getTradingAccounts(\r\n this.program.programId,\r\n collectionID.toString(),\r\n this.config.wallet,\r\n undefined,\r\n undefined\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(500000)\r\n )\r\n .accountsStrict({\r\n state: SOLANA_PUBKEYS.STATE_ID,\r\n collection: collectionPda,\r\n collectionNft: collectionNftPda,\r\n creator: this.config.wallet,\r\n mplCore: SOLANA.MPL_CORE_STR,\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: [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, baseUri } = 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 let transactions: Transaction[] = [];\r\n if (reserveToken.buy?.length) {\r\n try {\r\n const txs = await this.getBuyInstructions(\r\n this.config.wallet,\r\n collectionId,\r\n reserveToken.buy\r\n );\r\n transactions.push(...txs);\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 txs = await this.getMintAndBuyInstructions(\r\n this.config.wallet,\r\n collectionId,\r\n creatorAddress,\r\n reserveToken.mintAndBuy,\r\n baseUri\r\n );\r\n transactions.push(...txs);\r\n } catch (error) {\r\n console.error(\"Failed to getMintAndBuyInstructions\", { error });\r\n }\r\n }\r\n\r\n let buyResponse: BuyResponse[] = [];\r\n\r\n try {\r\n const { signatures, latestBlockhash } = await this.sendTxnForBatch(\r\n transactions,\r\n this.lookupTableAccounts\r\n );\r\n console.log(\"signatures\", signatures);\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));\r\n throw e;\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, ownedTokens } = params;\r\n\r\n let transactions: Transaction[] = [];\r\n\r\n try {\r\n const txs = await this.getSellInstructions(\r\n this.config.wallet,\r\n collectionId,\r\n ownedTokens\r\n );\r\n transactions.push(...txs);\r\n } catch (error) {\r\n console.error(\"Failed to getSellInstructions\", { error });\r\n throw error;\r\n }\r\n\r\n let sellResponse: SellResponse[] = [];\r\n\r\n try {\r\n const { signatures, latestBlockhash } = await this.sendTxnForBatch(\r\n transactions,\r\n this.lookupTableAccounts\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 console.error(\"Flip failed:\", JSON.stringify(e));\r\n throw e;\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 transactions: Transaction[] = [];\r\n for (const collectionId in data.data) {\r\n const items = data.data[collectionId];\r\n try {\r\n const txs = await this.getSellInstructions(\r\n this.config.wallet,\r\n collectionId,\r\n items.tokenIds\r\n );\r\n transactions.push(...txs);\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\r\n try {\r\n const { signatures, latestBlockhash } = await this.sendTxnForBatch(\r\n transactions,\r\n this.lookupTableAccounts\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));\r\n throw e;\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 createLookupTableAndExtend(\r\n addressesToAdd: PublicKey[]\r\n ): Promise<PublicKey> {\r\n let slot = await this.config.provider.connection.getSlot();\r\n const latestBlockhash =\r\n await this.config.provider.connection.getLatestBlockhash(\"confirmed\");\r\n\r\n const [lookupTableInst, lookupTableAddress] =\r\n AddressLookupTableProgram.createLookupTable({\r\n authority: this.config.wallet,\r\n payer: this.config.wallet,\r\n recentSlot: slot,\r\n });\r\n\r\n console.log(\"lookup table address:\", lookupTableAddress.toBase58());\r\n\r\n // To create the Address Lookup Table on chain:\r\n // send the `lookupTableInst` instruction in a transaction\r\n const lookupMessage = new TransactionMessage({\r\n payerKey: this.config.wallet,\r\n recentBlockhash: latestBlockhash.blockhash,\r\n instructions: [lookupTableInst],\r\n }).compileToV0Message();\r\n\r\n const lookupTransaction = new VersionedTransaction(lookupMessage);\r\n const lookupSignature = await this.config.sendTransaction(\r\n lookupTransaction,\r\n this.config.provider.connection\r\n );\r\n console.log(\"Sent transaction for lookup table:\", lookupSignature);\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: lookupSignature,\r\n });\r\n console.log(\"confirmResult == \", confirmResult);\r\n await this.extendLookupTable(lookupTableAddress, addressesToAdd, true);\r\n return lookupTableAddress;\r\n }\r\n\r\n public async extendLookupTable(\r\n lookupTableAddress: PublicKey,\r\n addressesToAdd: PublicKey[],\r\n isInitial: boolean = false\r\n ) {\r\n const latestBlockhash =\r\n await this.config.provider.connection.getLatestBlockhash(\"confirmed\");\r\n if (isInitial == true) {\r\n let constants_pubkeys = [\r\n SOLANA_PUBKEYS.STATE_ID,\r\n SOLANA_PUBKEYS.TREASURY_ID,\r\n SOLANA_PUBKEYS.MPL_CORE,\r\n SOLANA_PUBKEYS.RENT_TOKEN_ID,\r\n SOLANA_PUBKEYS.LP_PROVISIONER_ID,\r\n SOLANA_PUBKEYS.SYSTEM_PROGRAM_ID,\r\n ];\r\n addressesToAdd.push(...constants_pubkeys);\r\n }\r\n const extendInstruction = AddressLookupTableProgram.extendLookupTable({\r\n payer: this.config.wallet,\r\n authority: this.config.wallet,\r\n lookupTable: lookupTableAddress,\r\n addresses: addressesToAdd,\r\n });\r\n\r\n // Send this `extendInstruction` in a transaction to the cluster\r\n // to insert the listing of `addresses` into your lookup table with address `lookupTableAddress`\r\n const extensionMessageV0 = new TransactionMessage({\r\n payerKey: this.config.wallet,\r\n recentBlockhash: latestBlockhash.blockhash,\r\n instructions: [extendInstruction],\r\n }).compileToV0Message();\r\n\r\n const extensionTransactionV0 = new VersionedTransaction(extensionMessageV0);\r\n const extensionSignature = await this.config.sendTransaction(\r\n extensionTransactionV0,\r\n this.config.provider.connection\r\n );\r\n console.log(\"extension signature\", extensionSignature);\r\n }\r\n\r\n public async getTotalPrice(\r\n type: PurcahseType,\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 === PurcahseType.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 === PurcahseType.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\r\n public async finalizeSale(collectionId: string) {\r\n if (!this.program) {\r\n throw new Error(\"Program not initialized\");\r\n }\r\n const {\r\n collectionInfo: { creator },\r\n } = await this.getCollectionInfo(collectionId);\r\n const { collectionPda } = await getTradingAccounts(\r\n this.program.programId,\r\n collectionId,\r\n this.config.wallet,\r\n undefined,\r\n undefined\r\n );\r\n\r\n const instruction = await this.program?.methods\r\n .moveLiquidity()\r\n .accountsStrict({\r\n state: SOLANA_PUBKEYS.STATE_ID,\r\n collection: collectionPda,\r\n lpSellout: SOLANA_PUBKEYS.SELL_OUT_ID,\r\n collectionCreator: creator,\r\n lpProvisioner: SOLANA_PUBKEYS.LP_PROVISIONER_ID,\r\n eventAuthority: accounts.eventAuthority(this.program.programId),\r\n program: this.program.programId,\r\n })\r\n .instruction();\r\n try {\r\n const { signature, latestBlockhash } = await this.sendTxn(\r\n new Transaction().add(instruction),\r\n null\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 console.log(\"signature\", signature);\r\n return signature;\r\n } catch (e) {\r\n console.error(\"Distribute failed\", JSON.stringify(e));\r\n }\r\n }\r\n\r\n public async ejectAllNftsOfCollection(\r\n collectionId: string,\r\n nftInfos: Array<NftInfo>\r\n ) {\r\n if (!this.program) {\r\n throw new Error(\"Program not initialized\");\r\n }\r\n let tokenChunks = getTokenChunks(\r\n nftInfos,\r\n SDK_SOLANA_CONFIG.EJECT_CHUNK_SIZE\r\n );\r\n try {\r\n for (const chunk of tokenChunks) {\r\n let transaction = await this.setUpInstructions(1400000);\r\n for (const token of chunk) {\r\n const { collectionPda, collectionNftPda, nftHolderPda, nftPda } =\r\n await getTradingAccounts(\r\n this.program.programId,\r\n collectionId,\r\n new PublicKey(token.nftOnwer),\r\n undefined,\r\n new PublicKey(token.nftId)\r\n );\r\n\r\n const instruction = await this.program.methods\r\n .ejectNft(new PublicKey(token.nftId)) //this is nft seed\r\n .accountsStrict({\r\n state: SOLANA_PUBKEYS.STATE_ID,\r\n collection: collectionPda,\r\n collectionNft: collectionNftPda,\r\n nftOwner: new PublicKey(token.nftOnwer),\r\n nftHolder: nftHolderPda!,\r\n nft: nftPda!,\r\n operator: this.config.wallet,\r\n mplCore: SOLANA_PUBKEYS.MPL_CORE,\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 transaction.add(instruction);\r\n }\r\n const { signature, latestBlockhash } = await this.sendTxn(\r\n transaction,\r\n this.lookupTableAccounts\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 if (confirmResult.value.err != null) {\r\n throw new Error(\"ERRORR in ejectAllNftsOfCollection of SDK function\");\r\n }\r\n console.log(\"signature\", signature);\r\n }\r\n } catch (e) {\r\n console.log(\"ERRORR in ejectAllNftsOfCollection\", JSON.stringify(e));\r\n throw e;\r\n }\r\n }\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 /**\r\n * not used for now. sendTxnForBatch function is used\r\n */\r\n //useSenTxn.ts\r\n private async sendTxn(\r\n transaction: Transaction,\r\n lookupTableAccounts: AddressLookupTableAccount | null\r\n ) {\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\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: transaction.instructions,\r\n }).compileToV0Message(\r\n lookupTableAccounts == null ? [] : [lookupTableAccounts]\r\n );\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 //useSenTxn.ts\r\n private async sendTxnForBatch(\r\n transactions: Transaction[],\r\n lookupTableAccounts: AddressLookupTableAccount | null\r\n ) {\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\r\n const latestBlockhash =\r\n await this.config.provider.connection.getLatestBlockhash(\"confirmed\");\r\n\r\n const payerKey = this.config.wallet;\r\n const txs = transactions.map((tx) => {\r\n const messageV0 = new TransactionMessage({\r\n payerKey: payerKey,\r\n recentBlockhash: latestBlockhash.blockhash,\r\n instructions: tx.instructions,\r\n }).compileToV0Message(\r\n lookupTableAccounts == null ? [] : [lookupTableAccounts]\r\n );\r\n console.log(\"transaction size \", messageV0.serialize().length);\r\n return new VersionedTransaction(messageV0);\r\n });\r\n\r\n // Send transaction with fresh blockhash\r\n const signedTxs = await this.config.signAllTransactions(txs);\r\n let signatures = await Promise.all(\r\n signedTxs.map(async (signedTx) => {\r\n if (signedTx instanceof VersionedTransaction) {\r\n let signature = await this.config.provider.connection.sendTransaction(\r\n signedTx,\r\n { skipPreflight: true, preflightCommitment: \"confirmed\" }\r\n );\r\n return signature;\r\n }\r\n })\r\n );\r\n\r\n console.log(\"signatures from Promisze all ===============\", signatures);\r\n // Return both signature and blockhash info for confirmation if needed\r\n return {\r\n signatures,\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: string[]\r\n ): Promise<Transaction[]> {\r\n if (!this.program) {\r\n throw new Error(\"Program not initialized\");\r\n }\r\n\r\n const tokenChunks = getTokenChunks(\r\n tokens,\r\n SDK_SOLANA_CONFIG.BUY_CHUNK_SIZE\r\n );\r\n const transactions: Transaction[] = [];\r\n const { collectionPda, collectionNftPda, nftHolderPda } =\r\n await getTradingAccounts(\r\n this.program.programId,\r\n collectionId,\r\n userPublicKey,\r\n undefined,\r\n undefined\r\n );\r\n\r\n try {\r\n for (const chunk of tokenChunks) {\r\n let transaction = await this.setUpInstructions(1400000);\r\n for (const nft of chunk) {\r\n const nftPda = accounts.nftPda(\r\n collectionPda,\r\n new PublicKey(nft),\r\n this.program.programId\r\n );\r\n const instruction = await this.program.methods\r\n .buy(new PublicKey(nft))\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_PUBKEYS.MPL_CORE,\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 transaction.add(instruction);\r\n }\r\n transactions.push(transaction);\r\n }\r\n return transactions;\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: string[]\r\n ): Promise<Transaction[]> {\r\n if (!this.program) {\r\n throw new Error(\"Program not initialized\");\r\n }\r\n const tokenChunks = getTokenChunks(\r\n tokens,\r\n SDK_SOLANA_CONFIG.SELL_CHUNK_SIZE\r\n );\r\n const transactions: Transaction[] = [];\r\n const { collectionPda, collectionNftPda, nftHolderPda } =\r\n await getTradingAccounts(\r\n this.program.programId,\r\n collectionId,\r\n userPublicKey,\r\n undefined,\r\n undefined\r\n );\r\n\r\n try {\r\n for (const chunk of tokenChunks) {\r\n let transaction = await this.setUpInstructions(1400000);\r\n for (const nft of chunk) {\r\n const nftPda = accounts.nftPda(\r\n collectionPda,\r\n new PublicKey(nft),\r\n this.program.programId\r\n );\r\n\r\n const instruction = await this.program.methods\r\n .sell(new PublicKey(nft))\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 seller: userPublicKey,\r\n mplCore: SOLANA_PUBKEYS.MPL_CORE,\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 transaction.add(instruction);\r\n }\r\n transactions.push(transaction);\r\n }\r\n return transactions;\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 getLookupTableAccounts(\r\n lookupTableAddress: PublicKey\r\n ): Promise<AddressLookupTableAccount | null> {\r\n const lookupTableAccount = await this.config.provider.connection\r\n .getAddressLookupTable(lookupTableAddress)\r\n .then((res) => res.value);\r\n return lookupTableAccount;\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 ): Promise<Transaction[]> {\r\n if (!this.program) {\r\n throw new Error(\"Program not initialized\");\r\n }\r\n const chunkSize = SDK_SOLANA_CONFIG.MINT_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 transactions: Transaction[] = [];\r\n const { nftHolderPda, collectionPda, collectionNftPda } =\r\n await getTradingAccounts(\r\n this.program.programId,\r\n collectionId,\r\n userPublicKey,\r\n creatorAddress,\r\n undefined\r\n );\r\n\r\n try {\r\n for (const chunks of tokenChunks) {\r\n let transaction = await this.setUpInstructions(1400000);\r\n for (const nftName of chunks) {\r\n const nftSeedKeypair = Keypair.generate();\r\n const nftPda = accounts.nftPda(\r\n collectionPda,\r\n nftSeedKeypair.publicKey,\r\n this.program.programId\r\n );\r\n console.log(\"=======nft seed==========\", nftSeedKeypair.publicKey);\r\n const instruction = await this.program.methods\r\n .mintAndBuy(nftSeedKeypair.publicKey, nftName, baseUri)\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_PUBKEYS.MPL_CORE,\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 transaction.add(instruction);\r\n }\r\n transactions.push(transaction);\r\n }\r\n\r\n return transactions;\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): Promise<Transaction> {\r\n const microLamports = await this.getPriorityFee();\r\n let transaction: Transaction;\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 transaction = new Transaction().add(modifyComputeUnits).add(addPriorityFee);\r\n return transaction;\r\n }\r\n\r\n public async getTransactionTest(\r\n signature: string,\r\n transactionType = \"buy\"\r\n ): Promise<BuyResponse[] | SellResponse[]> {\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 if (transactionType == \"buy\") {\r\n return analyzeBuyTransaction(this.program, transaction);\r\n } else if (transactionType == \"sell\") {\r\n return analyzeSellTransaction(this.program, transaction);\r\n }\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 Signer,\r\n ConfirmOptions,\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 signAllTransactions: (\r\n txs: Array<Transaction | VersionedTransaction>\r\n ) => Promise<Array<Transaction | VersionedTransaction>>;\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 SellData {\r\n tokenIds: string[]; \r\n}\r\n\r\nexport interface ReserveToken {\r\n buy: string[] | 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 collectionId: string;\r\n collectionSymbol: string;\r\n creatorAddress: string; //collection creator address\r\n baseUri: string;\r\n reserveToken: ReserveToken | null;\r\n}\r\n\r\nexport interface NftInfo {\r\n nftId: string;\r\n nftOnwer: string;\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 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 ownedTokens: string[];\r\n}\r\n\r\n//used on useFlipProfile hook\r\nexport interface ProfileSellParams {\r\n data: Record<string, SellData>;\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 PurcahseType {\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","{\r\n \"address\": \"2KHXGcVHjnuEqw7ZrwPBXdPzrG4bWY24QPAvhRmQ1s8c\",\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 \"* `_nft_seed` - 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\": \"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\": \"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\": \"nft_seed\"\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\": \"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 \"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\": \"nft_seed\",\r\n \"type\": \"pubkey\"\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_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\": \"creator\",\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\": \"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 \"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\": \"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 \"* `_nft_seed` - 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\": \"nft_seed\"\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 \"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\": \"nft_seed\",\r\n \"type\": \"pubkey\"\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\": \"lp_sellout\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"royalty\",\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 \"* `base_uri` - The base_uri of the NFT metadata\",\r\n \"* 'nft_seed' - The nft_seed of NFT address\"\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\": \"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\": \"nft\",\r\n \"docs\": [\r\n \"The nft that will be minted and purchased by the buyer\"\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 ]\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\": \"nft_seed\"\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\": \"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 \"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\": \"nft_seed\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"name\",\r\n \"type\": \"string\"\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\": \"lp_sellout\",\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 \"* `_nft_seed` - 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\": \"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 \"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\": \"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\": \"nft_seed\"\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\": \"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 \"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\": \"nft_seed\",\r\n \"type\": \"pubkey\"\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\": \"EjectEvent\",\r\n \"discriminator\": [\r\n 164,\r\n 69,\r\n 55,\r\n 131,\r\n 187,\r\n 206,\r\n 42,\r\n 188\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\": \"WrongLpSellOut\",\r\n \"msg\": \"Wrong lp sell out account\"\r\n },\r\n {\r\n \"code\": 6003,\r\n \"name\": \"WrongCreator\",\r\n \"msg\": \"Wrong creator account\"\r\n },\r\n {\r\n \"code\": 6004,\r\n \"name\": \"WrongLpProvisioner\",\r\n \"msg\": \"Wrong LP provisioner account\"\r\n },\r\n {\r\n \"code\": 6005,\r\n \"name\": \"WrongProgramId\",\r\n \"msg\": \"Wrong program id\"\r\n },\r\n {\r\n \"code\": 6006,\r\n \"name\": \"WrongIxData\",\r\n \"msg\": \"Wrong instruction data\"\r\n },\r\n {\r\n \"code\": 6007,\r\n \"name\": \"ExpectedMoveLiquidityIx\",\r\n \"msg\": \"Expected MoveLiquidity ix\"\r\n },\r\n {\r\n \"code\": 6008,\r\n \"name\": \"CreateFeeNotSet\",\r\n \"msg\": \"Create fee not set\"\r\n },\r\n {\r\n \"code\": 6009,\r\n \"name\": \"InvalidSupply\",\r\n \"msg\": \"Total supply must be greater than 0\"\r\n },\r\n {\r\n \"code\": 6010,\r\n \"name\": \"CollectionSoldOut\",\r\n \"msg\": \"Collection is sold out\"\r\n },\r\n {\r\n \"code\": 6011,\r\n \"name\": \"CollectionNotSoldOut\",\r\n \"msg\": \"Collection is not sold out\"\r\n },\r\n {\r\n \"code\": 6012,\r\n \"name\": \"MintPaused\",\r\n \"msg\": \"Minting is currently paused\"\r\n },\r\n {\r\n \"code\": 6013,\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\": \"collection\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"nft\",\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 \"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 {\r\n \"name\": \"EjectEvent\",\r\n \"type\": {\r\n \"kind\": \"struct\",\r\n \"fields\": [\r\n {\r\n \"name\": \"collection\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"nft\",\r\n \"type\": \"pubkey\"\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\": \"nft\",\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\": \"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\": \"collection\",\r\n \"type\": \"pubkey\"\r\n },\r\n {\r\n \"name\": \"nft\",\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_sellout\",\r\n \"docs\": [\r\n \"The wallet that receives fee when the collection is sold out\"\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\": \"royalty\",\r\n \"docs\": [\r\n \"The wallet that receives royalties from secondary wallet\"\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}","import { PublicKey } from \"@solana/web3.js\";\r\n\r\nexport const SOLANA = {\r\n STATE_ID_STR: \"H876G8i7bdkmEDngWQJCKTFXgwU9c5cao2BdCdnqVFw7\",\r\n TREASURY_ID_STR: \"4kU2KESm5MaJSgieVAoAbUGMzGkm7WC4dPYjeCHQn5R6\",\r\n SELL_OUT_ID_STR: \"5s7D5tQKjAa9au5VdpfZK7Zbwe4fQ87P25r312V2QKgr\",\r\n LP_PROVISIONER_ID_STR: \"EXdeo9aKzzYUU9txeuRDkYdaPQZmhywDJFzkXpoSCW2S\",\r\n ROYALTY_ID_STR: \"6oYqWqe23Ff1pnP2qPGhtYAgC7zD3fdWCUfvafaoTJEX\",\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 LOOKUP_TABLE: new PublicKey(\"7HEasJQWAuA3TAPP6KcxvsPaYaS38csWdaxSkYxWq43h\"),\r\n STATE_ID: new PublicKey(SOLANA.STATE_ID_STR),\r\n TREASURY_ID: new PublicKey(SOLANA.TREASURY_ID_STR),\r\n SELL_OUT_ID: new PublicKey(SOLANA.SELL_OUT_ID_STR),\r\n LP_PROVISIONER_ID: new PublicKey(SOLANA.LP_PROVISIONER_ID_STR),\r\n ROYALITY_ID: new PublicKey(SOLANA.ROYALTY_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_CORE: new PublicKey(SOLANA.MPL_CORE_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 SYSTEM_PROGRAM_ID: new PublicKey(\"11111111111111111111111111111111\"),\r\n};\r\n\r\nexport const SDK_SOLANA_CONFIG = {\r\n MINT_CHUNK_SIZE: 3,\r\n BUY_CHUNK_SIZE: 9,\r\n SELL_CHUNK_SIZE: 9,\r\n EJECT_CHUNK_SIZE: 7\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 nft: PublicKey,\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 nft.toBuffer(),\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 programId: PublicKey, \r\n collectionId: string,\r\n userPublicKey: PublicKey | undefined,\r\n creatorAddress: string | undefined, //in case of buy this is a collection creator address\r\n nftSeed: PublicKey | undefined\r\n) => { \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 nftHolderPda = userPublicKey\r\n ? accounts.nftHolderPda(userPublicKey, programId)\r\n : undefined; \r\n const collectionCreator = creatorAddress && new PublicKey(creatorAddress);\r\n const nftPda = nftSeed != undefined ? accounts.nftPda(collectionPda, nftSeed, programId) : undefined;\r\n return { \r\n collectionPda,\r\n collectionNftPda, \r\n nftHolderPda, \r\n collectionCreator,\r\n nftPda\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 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(\"sellEvent\", decodedData.data);\r\n sellResponse.push({\r\n seller: decodedData.data.seller.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(\"sellResponse\", sellResponse);\r\n return sellResponse;\r\n}\r\n\r\n//refer the the smart contract price calculation logic\r\nexport function getPrice(\r\n _mintCount: number,\r\n _nftCount: number,\r\n _steepness: number,\r\n _midPoint: number,\r\n _startPrice: string,\r\n _endPrice: string\r\n): 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.mul(-1).mul(n.minus(midPoint)).exp()\r\n );\r\n\r\n // Calculate b\r\n const b = new Decimal(1).plus(\r\n steepness.mul(-1).mul(midPoint.mul(-1)).exp()\r\n );\r\n\r\n // Calculate final price\r\n const startPrice = new Decimal(_startPrice);\r\n const price = startPrice.plus(startSubEnd.div(a)).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","import { PublicKey } from \"@solana/web3.js\";\r\nimport { EthereumConnector } from \"./evm\";\r\nimport { SolanaConnector } from \"./solana\";\r\nimport {\r\n BlockchainType,\r\n BuyCreditParams,\r\n BuyParams,\r\n BuyResponse,\r\n CollectionInfo,\r\n CollectionParams,\r\n CreateCollectionResponse,\r\n EthereumConfig,\r\n isEthereumConfig,\r\n isSolanaConfig,\r\n NftInfo,\r\n ProfileSellParams,\r\n PurcahseType,\r\n SellParams,\r\n SellResponse,\r\n SolanaConfig,\r\n} from \"./types\";\r\nimport { VALID_SIZE_PAIR } from \"./constants\";\r\n\r\nexport class FlipmemeSDK {\r\n private blockchainType: BlockchainType;\r\n private ethereum: EthereumConnector | null = null;\r\n private solana: SolanaConnector | null = null;\r\n constructor(\r\n chainType: BlockchainType,\r\n config: EthereumConfig | SolanaConfig\r\n ) {\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(\r\n chainType: BlockchainType,\r\n config: EthereumConfig | SolanaConfig\r\n ) {\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(\r\n params: CollectionParams\r\n ): 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(\r\n type: PurcahseType,\r\n collectionId: string,\r\n amount: number\r\n ): 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 /**\r\n * create lookup table account with lookuptable addresses and return lookup table account\r\n * @param lookupTableAddresses addresses to add lookup table\r\n */\r\n public async createLookupTableAndExtend(\r\n addressesToAdd: PublicKey[]\r\n ): Promise<PublicKey> {\r\n if (this.blockchainType === BlockchainType.SOLANA && this.solana) {\r\n return await this.solana.createLookupTableAndExtend(addressesToAdd);\r\n } else {\r\n throw new Error(\"Cannot call this function\");\r\n }\r\n }\r\n\r\n public async extendLookupTable(\r\n lookupTableAddress: PublicKey,\r\n addressesToAdd: PublicKey[],\r\n isInitial: boolean = false\r\n ) {\r\n if (this.blockchainType === BlockchainType.SOLANA && this.solana) {\r\n return await this.solana.extendLookupTable(\r\n lookupTableAddress,\r\n addressesToAdd\r\n );\r\n } else {\r\n throw new Error(\"Cannot call this function\");\r\n }\r\n }\r\n\r\n public async finalizeSale(collectionId: string) {\r\n if (this.blockchainType === BlockchainType.SOLANA && this.solana) {\r\n await this.solana.finalizeSale(collectionId);\r\n } else {\r\n throw new Error(\"Cannot call this function\");\r\n }\r\n }\r\n\r\n public async ejectNfts(collectionId: string, nftInfos: NftInfo[]) {\r\n if (this.blockchainType === BlockchainType.SOLANA && this.solana) {\r\n await this.solana.ejectAllNftsOfCollection(collectionId, nftInfos);\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(\r\n signature: string,\r\n transactionType?: string\r\n ): Promise<BuyResponse[] | SellResponse[]> {\r\n if (this.blockchainType === BlockchainType.SOLANA && this.solana) {\r\n return this.solana.getTransactionTest(signature, transactionType);\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}\r\n","import { Connection, Keypair, VersionedTransaction } from \"@solana/web3.js\";\r\nimport { ENV, RPC } from \"../constants\";\r\nimport axios, { AxiosError } from \"axios\";\r\nimport { bs58 } from \"@coral-xyz/anchor/dist/cjs/utils/bytes\";\r\nimport { Wallet } from \"@coral-xyz/anchor\";\r\n\r\nconst BASE_TENSOR_URI = \"https://api.mainnet.tensordev.io/api/v1/\";\r\nasync function getCollectionId(collectionMint: string) {\r\n const { data } = await axios.get(\r\n `${BASE_TENSOR_URI}/collections/find_collection?filter=${collectionMint}`\r\n );\r\n console.log(\"====collection Mint====\", collectionMint);\r\n console.log(\"====collection collId====\", data.collId);\r\n return data.collId;\r\n}\r\n\r\n/**\r\n * this function only works for solana mainnet. So don't need to get connection as parameter\r\n */\r\nexport async function placeTensorCollectionBid( \r\n price: number,\r\n quantity: number,\r\n collectionMint: string,\r\n privateKey: string\r\n) {\r\n try {\r\n const keypair = Keypair.fromSecretKey(bs58.decode(privateKey));\r\n const tensorCollId = await getCollectionId(collectionMint);\r\n const rpc = RPC[ENV.Mainnet];\r\n const connectionA = new Connection(rpc);\r\n const blockhash = await connectionA.getLatestBlockhash();\r\n\r\n const params = `owner=${keypair.publicKey.toString()}&price=${price}&collId=${tensorCollId}&quantity=${quantity}&blockhash=${blockhash.blockhash}`;\r\n console.log(\"params\", params);\r\n const { data } = await axios.get(\r\n \"https://api.mainnet.tensordev.io/api/v1/tx/collection_bid?\" + params,\r\n {\r\n headers: {\r\n Accept: \"application/json\",\r\n \"x-tensor-api-key\": \"f990052f-72e5-4493-bb44-7ed3aea0d9fe\",\r\n },\r\n }\r\n );\r\n console.log(\"res\", data);\r\n const buff = Buffer.from(data.txs[0].txV0);\r\n\r\n const tx: VersionedTransaction = VersionedTransaction.deserialize(buff);\r\n\r\n \r\n tx.sign([keypair]);\r\n let signature = await connectionA.sendTransaction(tx, {\r\n skipPreflight: true,\r\n preflightCommitment: \"confirmed\",\r\n });\r\n console.log(\"signature\", signature);\r\n } catch (e) {\r\n if (e instanceof AxiosError) {\r\n console.log(\"api error\", e.message);\r\n }\r\n }\r\n}\r\n"],"mappings":"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","names":["import_anchor","BlockchainType","PurcahseType","ENV","import_web3","import_web3","collectionPda","collectionPda","import_web3","collectionPda","collectionNftPda","nftHolderPda","nftPda","import_decimal","collectionPda","collectionNftPda","BN","Decimal","nftHolderPda","nftPda","import_web3","axios"]}
|