Repository: orca-so/typescript-sdk Branch: main Commit: a551fa7a3365 Files: 73 Total size: 430.8 KB Directory structure: gitextract_3drgy46_/ ├── .eslintrc ├── .gitignore ├── .husky/ │ ├── .gitignore │ └── pre-commit ├── .prettierrc ├── README.md ├── jest.config.js ├── package.json ├── src/ │ ├── constants/ │ │ ├── devnet/ │ │ │ ├── farms.ts │ │ │ ├── index.ts │ │ │ ├── pools.ts │ │ │ └── tokens.ts │ │ ├── farms.ts │ │ ├── index.ts │ │ ├── orca-defaults.ts │ │ ├── pools.ts │ │ └── tokens.ts │ ├── index.ts │ ├── model/ │ │ ├── orca/ │ │ │ ├── farm/ │ │ │ │ ├── farm-types.ts │ │ │ │ └── orca-farm.ts │ │ │ ├── orca-impl.ts │ │ │ └── pool/ │ │ │ ├── orca-pool.ts │ │ │ └── pool-types.ts │ │ ├── orca-factory.ts │ │ └── quote/ │ │ ├── constant-product-quote.ts │ │ ├── quote-builder.ts │ │ └── stable-quote.ts │ ├── public/ │ │ ├── devnet/ │ │ │ ├── farms/ │ │ │ │ └── config.ts │ │ │ ├── index.ts │ │ │ ├── pools/ │ │ │ │ └── config.ts │ │ │ └── utils.ts │ │ ├── farms/ │ │ │ ├── config.ts │ │ │ ├── index.ts │ │ │ └── types.ts │ │ ├── index.ts │ │ ├── main/ │ │ │ ├── index.ts │ │ │ ├── orca.ts │ │ │ └── types.ts │ │ ├── pools/ │ │ │ ├── config.ts │ │ │ ├── index.ts │ │ │ └── types.ts │ │ └── utils/ │ │ ├── constants.ts │ │ ├── index.ts │ │ ├── models/ │ │ │ ├── index.ts │ │ │ ├── instruction.ts │ │ │ └── percentage.ts │ │ ├── numbers/ │ │ │ ├── decimal-utils.ts │ │ │ ├── index.ts │ │ │ ├── orca-u64.ts │ │ │ └── u64-utils.ts │ │ ├── pool-utils.ts │ │ ├── time-utils.ts │ │ ├── types.ts │ │ └── web3/ │ │ ├── ata-utils.ts │ │ ├── deserialize-account.ts │ │ ├── get-token-count.ts │ │ ├── index.ts │ │ ├── instructions/ │ │ │ ├── farm-instructions.ts │ │ │ ├── pool-instructions.ts │ │ │ └── token-instructions.ts │ │ ├── key-utils.ts │ │ └── transactions/ │ │ ├── index.ts │ │ └── transaction-builder.ts │ └── tsconfig.json ├── test/ │ ├── model/ │ │ └── orca/ │ │ └── quote/ │ │ ├── constant-product-quote.test.ts │ │ └── stable-quote.test.ts │ ├── public/ │ │ └── utils/ │ │ └── orca-u64.test.ts │ ├── test-utils.ts │ ├── tsconfig.json │ └── utils/ │ ├── models/ │ │ └── percentage.test.ts │ └── numbers/ │ ├── decimal-utils.test.ts │ └── u64-utils.test.ts └── tsconfig-base.json ================================================ FILE CONTENTS ================================================ ================================================ FILE: .eslintrc ================================================ { "extends": [ "react-app", "prettier" ] } ================================================ FILE: .gitignore ================================================ .DS_Store # Logs logs *.log npm-debug.log* yarn-debug.log* yarn-error.log* lerna-debug.log* # Diagnostic reports (https://nodejs.org/api/report.html) report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json # Runtime data pids *.pid *.seed *.pid.lock # Directory for instrumented libs generated by jscoverage/JSCover lib-cov # Coverage directory used by tools like istanbul coverage *.lcov # nyc test coverage .nyc_output # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) .grunt # Bower dependency directory (https://bower.io/) bower_components # node-waf configuration .lock-wscript # Compiled binary addons (https://nodejs.org/api/addons.html) build/Release # Dependency directories node_modules/ jspm_packages/ # Snowpack dependency directory (https://snowpack.dev/) web_modules/ # TypeScript cache *.tsbuildinfo # Optional npm cache directory .npm # Optional eslint cache .eslintcache # Microbundle cache .rpt2_cache/ .rts2_cache_cjs/ .rts2_cache_es/ .rts2_cache_umd/ # Optional REPL history .node_repl_history # Output of 'npm pack' *.tgz # Yarn Integrity file .yarn-integrity # dotenv environment variables file .env .env.test # parcel-bundler cache (https://parceljs.org/) .cache .parcel-cache # Next.js build output .next out # Nuxt.js build / generate output .nuxt dist # Gatsby files .cache/ # Comment in the public line in if your project uses Gatsby and not Next.js # https://nextjs.org/blog/next-9-1#public-directory-support # public # vuepress build output .vuepress/dist # Serverless directories .serverless/ # FuseBox cache .fusebox/ # DynamoDB Local files .dynamodb/ # TernJS port file .tern-port # Stores VSCode versions used for testing VSCode extensions .vscode-test # yarn v2 .yarn/cache .yarn/unplugged .yarn/build-state.yml .yarn/install-state.gz .pnp.* .vscode/* ================================================ FILE: .husky/.gitignore ================================================ _ ================================================ FILE: .husky/pre-commit ================================================ #!/bin/sh . "$(dirname "$0")/_/husky.sh" npx lint-staged ================================================ FILE: .prettierrc ================================================ { "printWidth": 100 } ================================================ FILE: README.md ================================================ ⚠️ **WARNING: DEPRECATED TYPESCRIPT SDK** ⚠️ This Typescript SDK is for the **legacy pools** which are **deprecated**. We highly recommend you to use the **Whirlpools SDK** for the new and improved pools. You can find it here: 🌊 [Whirlpools SDK on npmjs](https://www.npmjs.com/package/@orca-so/whirlpools-sdk) 🌊 Please update your implementations to avoid any issues or disruptions in the future. # Orca Typescript SDK The Orca SDK contains a set of simple to use APIs to allow developers to integrate with the Orca platform. Learn more Orca [here](https://docs.orca.so). ### Orca Token Swap V2 - The [Orca Token Swap V2 program](https://solscan.io/account/9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP) uses the following commit hash of the SPL Token Swap program: [3613cea3](https://github.com/solana-labs/solana-program-library/tree/3613cea3cabbb5f7e4445d6203b7292d413732da/token-swap) ### Trading Orca Liquidity Pools - Get detailed quotes and make swaps between trading pairs in an Orca Pool - Check your Orca Pool LP token balance and total supply **Supported Orca Pools** - The SDK supports all pools currently listed on [Orca](https://www.orca.so/pools) ### Provide Liquidity to Orca Pools - Deposit liquidity to supported Orca Pools - Deposit a trading pair, and receive LP token - Withdraw liquidity from supported Orca Pools - Withdraw a trading pair in exchange for LP token **Aquafarm Support** - After depositing liquidtiy to a pool, the LP token can be deposited into the corresponding farm to receive an equivalent amount of farm token - Remember to withdraw the LP token in exchange for farm token before withdrawing liquidity from Orca Pool **DoubleDip Support** - For farms with double-dip, the aquafarm tokens can be deposited into double-dip farm to receive double-dip rewards **Features Coming Soon** - More trader information (APY, Volume) # Installation Use your environment's package manager to install @orca-so/sdk and other related packages into your project. ```bash yarn add @orca-so/sdk @solana/web3.js decimal.js ``` ```bash npm install @orca-so/sdk @solana/web3.js decimal.js ``` # Usage ```typescript import { readFile } from "mz/fs"; import { Connection, Keypair } from "@solana/web3.js"; import { getOrca, OrcaFarmConfig, OrcaPoolConfig } from "@orca-so/sdk"; import Decimal from "decimal.js"; const main = async () => { /*** Setup ***/ // 1. Read secret key file to get owner keypair const secretKeyString = await readFile("/Users/scuba/my-wallet/my-keypair.json", { encoding: "utf8", }); const secretKey = Uint8Array.from(JSON.parse(secretKeyString)); const owner = Keypair.fromSecretKey(secretKey); // 2. Initialzie Orca object with mainnet connection const connection = new Connection("https://api.mainnet-beta.solana.com", "singleGossip"); const orca = getOrca(connection); try { /*** Swap ***/ // 3. We will be swapping 0.1 SOL for some ORCA const orcaSolPool = orca.getPool(OrcaPoolConfig.ORCA_SOL); const solToken = orcaSolPool.getTokenB(); const solAmount = new Decimal(0.1); const quote = await orcaSolPool.getQuote(solToken, solAmount); const orcaAmount = quote.getMinOutputAmount(); console.log(`Swap ${solAmount.toString()} SOL for at least ${orcaAmount.toNumber()} ORCA`); const swapPayload = await orcaSolPool.swap(owner, solToken, solAmount, orcaAmount); const swapTxId = await swapPayload.execute(); console.log("Swapped:", swapTxId, "\n"); /*** Pool Deposit ***/ // 4. Deposit SOL and ORCA for LP token const { maxTokenAIn, maxTokenBIn, minPoolTokenAmountOut } = await orcaSolPool.getDepositQuote( orcaAmount, solAmount ); console.log( `Deposit at most ${maxTokenBIn.toNumber()} SOL and ${maxTokenAIn.toNumber()} ORCA, for at least ${minPoolTokenAmountOut.toNumber()} LP tokens` ); const poolDepositPayload = await orcaSolPool.deposit( owner, maxTokenAIn, maxTokenBIn, minPoolTokenAmountOut ); const poolDepositTxId = await poolDepositPayload.execute(); console.log("Pool deposited:", poolDepositTxId, "\n"); /*** Farm Deposit ***/ // 5. Deposit some ORCA_SOL LP token for farm token const lpBalance = await orcaSolPool.getLPBalance(owner.publicKey); const orcaSolFarm = orca.getFarm(OrcaFarmConfig.ORCA_SOL_AQ); const farmDepositPayload = await orcaSolFarm.deposit(owner, lpBalance); const farmDepositTxId = await farmDepositPayload.execute(); console.log("Farm deposited:", farmDepositTxId, "\n"); // Note 1: for double dip, repeat step 5 but with the double dip farm // Note 2: to harvest reward, orcaSolFarm.harvest(owner) // Note 3: to get harvestable reward amount, orcaSolFarm.getHarvestableAmount(owner.publicKey) /*** Farm Withdraw ***/ // 6. Withdraw ORCA_SOL LP token, in exchange for farm token const farmBalance = await orcaSolFarm.getFarmBalance(owner.publicKey); // withdraw the entire balance const farmWithdrawPayload = await orcaSolFarm.withdraw(owner, farmBalance); const farmWithdrawTxId = await farmWithdrawPayload.execute(); console.log("Farm withdrawn:", farmWithdrawTxId, "\n"); /*** Pool Withdraw ***/ // 6. Withdraw SOL and ORCA, in exchange for ORCA_SOL LP token const withdrawTokenAmount = await orcaSolPool.getLPBalance(owner.publicKey); const withdrawTokenMint = orcaSolPool.getPoolTokenMint(); const { maxPoolTokenAmountIn, minTokenAOut, minTokenBOut } = await orcaSolPool.getWithdrawQuote( withdrawTokenAmount, withdrawTokenMint ); console.log( `Withdraw at most ${maxPoolTokenAmountIn.toNumber()} ORCA_SOL LP token for at least ${minTokenAOut.toNumber()} ORCA and ${minTokenBOut.toNumber()} SOL` ); const poolWithdrawPayload = await orcaSolPool.withdraw( owner, maxPoolTokenAmountIn, minTokenAOut, minTokenBOut ); const poolWithdrawTxId = await poolWithdrawPayload.execute(); console.log("Pool withdrawn:", poolWithdrawTxId, "\n"); } catch (err) { console.warn(err); } }; main() .then(() => { console.log("Done"); }) .catch((e) => { console.error(e); }); ``` # Devnet Testing The example code above can be run on devnet by updating the import statement: ```typescript import { getOrca, OrcaFarmConfig, OrcaPoolConfig, Network } from "@orca-so/sdk"; ``` And changing two lines of code like so: ```typescript const connection = new Connection("https://api.devnet.solana.com", "singleGossip"); const orca = getOrca(connection, Network.DEVNET); ``` One caveat to note is that there are only a few devnet pools available, so if you try to access pools that are only available on mainnet, the code will throw an error. The example code uses ORCA_SOL, which exists on the devnet. # Technical Notes **Decimals & OrcaU64** The SDK relies on the use of [Decimal](https://github.com/MikeMcl/decimal.js/) for number inputs and Decimal/[OrcaU64](https://github.com/orca-so/typescript-sdk/blob/main/src/public/utils/orca-u64.ts) for token-value inputs. If a Decimal instance is provided for a token-value input, it will be automatically transformed to the token's scale. **Stability of the Public Util Functions** We hope you find the tools we used to build our API useful in the public/utils folder. Due to our on-going development of the Orca platform, we cannot guarrantee the stability of the util APIs. The trading APIs can only be upgraded on major version updates. # Support **Integration Questions** Have problems integrating with the SDK? Pop by over to our [Discord](https://discord.gg/nSwGWn5KSG) #integrations channel and chat with one of our engineers. **Issues / Bugs** If you found a bug, open up an issue on github with the prefix [ISSUE]. To help us be more effective in resolving the problem, be specific in the steps it took to reproduce the problem (ex. when did the issue occur, code samples, debug logs etc). **Feedback** Got ideas on how to improve the system? Open up an issue on github with the prefix [FEEDBACK] and let's brainstorm more about it together! # License [MIT](https://choosealicense.com/licenses/mit/) ================================================ FILE: jest.config.js ================================================ module.exports = { "roots": [ "/src", "/test" ], "testMatch": [ "**/__tests__/**/*.+(ts|tsx|js)", "**/?(*.)+(spec|test).+(ts|tsx|js)" ], "transform": { "^.+\\.(ts|tsx)$": "ts-jest" }, } ================================================ FILE: package.json ================================================ { "name": "@orca-so/sdk", "version": "1.2.25", "description": "Typescript SDK for the Orca protocol.", "main": "dist/index.js", "types": "dist/index.d.ts", "license": "MIT", "dependencies": { "@orca-so/aquafarm": "^0.0.12", "@orca-so/stablecurve": "^1.0.5", "@solana/spl-token": "^0.1.5", "@solana/spl-token-swap": "^0.1.2", "@solana/web3.js": "^1.24.1", "decimal.js": "^10.3.1" }, "devDependencies": { "@types/bn.js": "^4.11.6", "@types/decimal.js": "^7.4.0", "@types/jest": "^26.0.24", "@types/node": "^12.0.0", "@typescript-eslint/eslint-plugin": "^4.26.0", "@typescript-eslint/parser": "^4.26.0", "builder-pattern": "^1.3.0", "eslint-config-prettier": "^8.3.0", "eslint-config-react-app": "^6.0.0", "husky": "^7.0.1", "jest": "^27.0.6", "lint-staged": ">=10", "prettier": "^2.3.2", "ts-jest": "^27.0.3", "typescript": "^4.3.2" }, "scripts": { "build": "tsc -p src", "watch": "tsc -w -p src", "prettier-format": "prettier --config .prettierrc 'src/**/*.ts' --write", "prepare": "husky install", "prepublishOnly": "tsc -p src", "test": "jest" }, "lint-staged": { "*.{ts,md}": "yarn run prettier-format" }, "files": [ "/dist" ], "repository": { "type": "git", "url": "git+https://github.com/orca-so/typescript-sdk.git" }, "keywords": [ "orca_so", "orca", "solana", "typescript", "sdk", "crypto", "dex" ], "author": "team@orca.so", "bugs": { "url": "https://github.com/orca-so/typescript-sdk/issues" }, "homepage": "https://www.orca.so" } ================================================ FILE: src/constants/devnet/farms.ts ================================================ import { PublicKey } from "@solana/web3.js"; import { OrcaFarmParams } from "../../model/orca/farm/farm-types"; /** * The following content is auto-generated. */ export const solUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("CzFnr34cRC1o8yrs5jTHBqDQ1FDckLapkPis6zTfqCF5"), farmTokenMint: new PublicKey("AtJF9fbQ1pbz76NYo2jtKjHuzzyaFToHLCizYk6UoHHL"), rewardTokenMint: new PublicKey("orcarKHSqC5CDDsGbho8GKvwExejWHxTqGzXgcewB9L"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("4GpUivZ2jvZqQ3vJRsoq5PwnYv6gdV9fJ9BzHT2JcRr7"), baseTokenDecimals: 6, }); export const solUsdtAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("ER1UZsRhzucvXY8xMmXGfbbxb442iTHk2u1rSKRMPakC"), farmTokenMint: new PublicKey("E95ABqtqnJRMG6gqEKZ16dVMfSNDUdCbEYqGUVg3tFRX"), rewardTokenMint: new PublicKey("orcarKHSqC5CDDsGbho8GKvwExejWHxTqGzXgcewB9L"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("2E4Mp6y2gFRteXiANnwzAJEhHwD3NX1wru3XvxJpGBq2"), baseTokenDecimals: 6, }); export const usdcUsdtAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("D7wWV4nxqEeCAk2UA2nEGWgKw2BgoZYFZFUfwWGBhDF8"), farmTokenMint: new PublicKey("3dDqVehvEpc5HMcbJUAzwMwF54xqa4nNvYN9qis7HAPe"), rewardTokenMint: new PublicKey("orcarKHSqC5CDDsGbho8GKvwExejWHxTqGzXgcewB9L"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("EBor1PR5XNGHjRVB6JDJuKVCQbvdr1CVZTaX1hTAdvQv"), baseTokenDecimals: 6, }); export const ethSolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("3q4wtMRT2yKHzQGy6gxwD34i9rsafviKd78rpdDLrBfk"), farmTokenMint: new PublicKey("5NH9rNaoLKbPPP5zwCJTaMPkFACtfJA8wEmqWrXzgCMa"), rewardTokenMint: new PublicKey("orcarKHSqC5CDDsGbho8GKvwExejWHxTqGzXgcewB9L"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("8sFnpd7mM1AWxP1LXX2FWbbkaVtAopBPmPNZ9y6172WL"), baseTokenDecimals: 6, }); export const ethUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("3aRTv8TGtZkX4dsM4N9aUHKotcwRr6phWPHXPLN8DEYX"), farmTokenMint: new PublicKey("EeqPcczEZH2cjYBnQyGXBQx1DGs7KG1pobwdPKcwALhD"), rewardTokenMint: new PublicKey("orcarKHSqC5CDDsGbho8GKvwExejWHxTqGzXgcewB9L"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("9pRnvg7ihSJDLi6DGf3PLwr6xRRRrBPXsHYEgGL5hzgA"), baseTokenDecimals: 6, }); export const orcaSolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("6YrLcQs5yFvXkRY5VkMGEfVgo5rwozJf7jXedpZxbKmi"), farmTokenMint: new PublicKey("3z8o3b4gMBpnRsrDv7ruZPcVtgoULMFyEoEEGwTsw2TR"), rewardTokenMint: new PublicKey("orcarKHSqC5CDDsGbho8GKvwExejWHxTqGzXgcewB9L"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("CmDdQhusZWyi9fue27VSktYgkHefm3JXNdzc9kCpyvYi"), baseTokenDecimals: 6, }); export const orcaUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("44GPPv5XedLXCNCc3Mbay1T18vc6x2bWihmmg7UJanvH"), farmTokenMint: new PublicKey("52Tv8d6Z7Lb27dqCufZPUqadZBTv3EAKGzoV6hy185As"), rewardTokenMint: new PublicKey("orcarKHSqC5CDDsGbho8GKvwExejWHxTqGzXgcewB9L"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("2ZEEntzoUN7XuMs88ukLGv5HRR1byL7wFWChryF5ZHri"), baseTokenDecimals: 6, }); export const solUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("L3XdTwLLtZRrXqSk5mqcBKaorqgmM2AMDGmzfBuhLMd"), farmTokenMint: new PublicKey("7AYG2y3je8TqcLsugNkV6aPw14QyqdVFmK5EegeJmRFi"), rewardTokenMint: new PublicKey("Ff5JqsAYUD4vAfQUtfRprT4nXu9e28tTBZTDFMnJNdvd"), rewardTokenDecimals: 9, baseTokenMint: new PublicKey("AtJF9fbQ1pbz76NYo2jtKjHuzzyaFToHLCizYk6UoHHL"), baseTokenDecimals: 6, }); export const ethSolDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("5jGfcgoRNpZPwfiRTp5zxNpEKP3PTeM3F9EKS9EsvX67"), farmTokenMint: new PublicKey("5Uv5T1BksJGKGFGVpfxGeGniFFgGLjavNpPWGkfUFNkr"), rewardTokenMint: new PublicKey("6PE3Mwjzx9h8kCoBp5YPed9TFoG7du8L98yucBP5ps3x"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("5NH9rNaoLKbPPP5zwCJTaMPkFACtfJA8wEmqWrXzgCMa"), baseTokenDecimals: 6, }); export const ethUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("B4CTmaFpNRtXL3ZLiLrgbMZknQHFdoGu4V9tbzsjFbRT"), farmTokenMint: new PublicKey("5jdeMPvNrscuw8abZFf99X9kcxDhANcpuBHDNpnx7YPT"), rewardTokenMint: new PublicKey("EmXq3Ni9gfudTiyNKzzYvpnQqnJEMRw2ttnVXoJXjLo1"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("EeqPcczEZH2cjYBnQyGXBQx1DGs7KG1pobwdPKcwALhD"), baseTokenDecimals: 6, }); /** * Mapping for OrcaFarm parameters * Key: baseTokenMint : OrcaFarmParams */ export const orcaDevnetFarmConfigs: Record = { "4GpUivZ2jvZqQ3vJRsoq5PwnYv6gdV9fJ9BzHT2JcRr7": solUsdcAqFarm, "2E4Mp6y2gFRteXiANnwzAJEhHwD3NX1wru3XvxJpGBq2": solUsdtAqFarm, EBor1PR5XNGHjRVB6JDJuKVCQbvdr1CVZTaX1hTAdvQv: usdcUsdtAqFarm, "8sFnpd7mM1AWxP1LXX2FWbbkaVtAopBPmPNZ9y6172WL": ethSolAqFarm, "9pRnvg7ihSJDLi6DGf3PLwr6xRRRrBPXsHYEgGL5hzgA": ethUsdcAqFarm, CmDdQhusZWyi9fue27VSktYgkHefm3JXNdzc9kCpyvYi: orcaSolAqFarm, "2ZEEntzoUN7XuMs88ukLGv5HRR1byL7wFWChryF5ZHri": orcaUsdcAqFarm, AtJF9fbQ1pbz76NYo2jtKjHuzzyaFToHLCizYk6UoHHL: solUsdcDoubleDip, "5NH9rNaoLKbPPP5zwCJTaMPkFACtfJA8wEmqWrXzgCMa": ethSolDoubleDip, EeqPcczEZH2cjYBnQyGXBQx1DGs7KG1pobwdPKcwALhD: ethUsdcDoubleDip, }; ================================================ FILE: src/constants/devnet/index.ts ================================================ export { orcaDevnetPoolConfigs } from "./pools"; export { orcaDevnetFarmConfigs } from "./farms"; ================================================ FILE: src/constants/devnet/pools.ts ================================================ import { PublicKey } from "@solana/web3.js"; import { CurveType, OrcaPoolParams } from "../../model/orca/pool/pool-types"; import { Percentage } from "../../public/utils/models/percentage"; import * as Tokens from "./tokens"; /** * The following content is auto-generated. */ export const solUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("8DT1oKJPHcdJzdSf3cb2WT7L8eRjLUJeDFSe7M2QDtQE"), nonce: 255, authority: new PublicKey("BVSZP6RsqAtjvuJrXYsYN5U4XY7pLwW4PawfgVPkLbjN"), poolTokenMint: new PublicKey("4GpUivZ2jvZqQ3vJRsoq5PwnYv6gdV9fJ9BzHT2JcRr7"), poolTokenDecimals: 6, feeAccount: new PublicKey("HPzaLqtZGhTbs7WcdGMfLswKze28W75nrYytNSw7qdvi"), tokenIds: [Tokens.solToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("4ShvTPQ3jYZzwUpxoQFSCDZxLtxQYNPUfeL3sR9mzLjJ"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("9eKgmUSfTkQLRBvowV9zjY3BbhAQVaGSw1jfon5UwUJM"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const solUsdtPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("65AsoozQfBedPU3rGCB7CfBbSFhiFGaVQaeoF9mLFM3g"), nonce: 255, authority: new PublicKey("59Pu3srqBDSgWrSJKuh7xcb5omJeVkMw41eFswDWKPat"), poolTokenMint: new PublicKey("2E4Mp6y2gFRteXiANnwzAJEhHwD3NX1wru3XvxJpGBq2"), poolTokenDecimals: 6, feeAccount: new PublicKey("HmRP17zbgJUPPeueLjT2b1HVKt16CTixSJX6UpGkkZnp"), tokenIds: [Tokens.solToken.mint.toString(), Tokens.usdtToken.mint.toString()], tokens: { [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("BhJsBxGoe39HWtwFTCxRZGhPNVZ5x9Rr2gFzNsaA6ES8"), }, [Tokens.usdtToken.mint.toString()]: { ...Tokens.usdtToken, addr: new PublicKey("Ea2gPV96MQthA5CCS4NincVidxsN8JifWhBoMJVHx8mZ"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const usdcUsdtPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("4UJqLypzZzDvoAWCLt6qWEoddMYoSLjrJEB13AfRmV68"), nonce: 255, authority: new PublicKey("52Sp73fASLtZhBPyZu7rQoejG9sNzpNLaTTF4mJJGZge"), poolTokenMint: new PublicKey("EBor1PR5XNGHjRVB6JDJuKVCQbvdr1CVZTaX1hTAdvQv"), poolTokenDecimals: 6, feeAccount: new PublicKey("6RjV63TfeJDL7K6j8cUnaT6mWXKxqsrDFrumvqGRwss6"), tokenIds: [Tokens.usdcToken.mint.toString(), Tokens.usdtToken.mint.toString()], tokens: { [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("Fp9PioKwFc6vmQZ5yB2pPSSx5VqkLhgX21dQYug79yUQ"), }, [Tokens.usdtToken.mint.toString()]: { ...Tokens.usdtToken, addr: new PublicKey("GazSkg8GU4cti8Dm1cYD74CQf9UXQdUzBsP27YhC4SCt"), }, }, curveType: CurveType.Stable, amp: 100, feeStructure: { traderFee: Percentage.fromFraction(9, 10000), ownerFee: Percentage.fromFraction(1, 10000), }, }); export const ethSolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("F9MgdfFEshXCTGbppcVr2DzpVxqkiVowGqd95S4vpC6D"), nonce: 251, authority: new PublicKey("FD1UJqbXtiYnMcKxcDG4MYY1vasupm2sYXAkStQhSpTb"), poolTokenMint: new PublicKey("8sFnpd7mM1AWxP1LXX2FWbbkaVtAopBPmPNZ9y6172WL"), poolTokenDecimals: 6, feeAccount: new PublicKey("8zyAMewVQuHBxJeqn5oRvanDaaEZ9uYxjHxJ9DYCRsgn"), tokenIds: [Tokens.ethToken.mint.toString(), Tokens.solToken.mint.toString()], tokens: { [Tokens.ethToken.mint.toString()]: { ...Tokens.ethToken, addr: new PublicKey("FJetz1Du8p2NWmfa9DNvHR8zC42tUCHsY3YfnkZNyZfT"), }, [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("37o62xYE1a43Ap8neq6SdrutxQKFsFHicRamkcjHigKs"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const ethUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("CVH3UX1fePV3fn4dE2irNgni2uRkPdEWyZeCZS5b63F3"), nonce: 255, authority: new PublicKey("3uf9wngmqKdBdrWPM9iKsXQE829sg7gH9oJghcrpePhh"), poolTokenMint: new PublicKey("9pRnvg7ihSJDLi6DGf3PLwr6xRRRrBPXsHYEgGL5hzgA"), poolTokenDecimals: 6, feeAccount: new PublicKey("9AekLW8Dq5T1XnLLC2rQscS4Y5YN2QwrYA7eaGdq7Xje"), tokenIds: [Tokens.ethToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.ethToken.mint.toString()]: { ...Tokens.ethToken, addr: new PublicKey("C7eYGeiroWzuPgqruxRmgj3xw978gRZpPTov2kqxBRpx"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("DRdNFrRqWpqQHhJDymyZvgHBH2vTkUo5jzzTwWy7RT4h"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const orcaSolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("B4v9urCKnrdCMWt7rEPyA5xyuEeYQv4aDpCfGFVaCvox"), nonce: 252, authority: new PublicKey("38Q2148y3BKU6pDUfv1zpeEeKNuDHBH34WdEwo5EiTfe"), poolTokenMint: new PublicKey("CmDdQhusZWyi9fue27VSktYgkHefm3JXNdzc9kCpyvYi"), poolTokenDecimals: 6, feeAccount: new PublicKey("EEWAuP2d1KbwX14dgHwxXspPMYfxXvgf4CNRYvMakPHg"), tokenIds: [Tokens.orcaToken.mint.toString(), Tokens.solToken.mint.toString()], tokens: { [Tokens.orcaToken.mint.toString()]: { ...Tokens.orcaToken, addr: new PublicKey("HsGXFtv1uBTtWuPCEJWpxZS4QkcHwAhdPaMVSvS4fhtv"), }, [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("3coXPvurzHQ6sYLrYi8zGWG7SLVv9mHnbqmchjKgPEmz"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const orcaUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("GaCKuVZyo6HxUf6bkcWzDETGHqqViF6H77ax7Uxq3LXU"), nonce: 255, authority: new PublicKey("3KVqBR9cB4tNHwpNPZtedegXbQ8FbWgjzk5oob7QRnHt"), poolTokenMint: new PublicKey("2ZEEntzoUN7XuMs88ukLGv5HRR1byL7wFWChryF5ZHri"), poolTokenDecimals: 6, feeAccount: new PublicKey("9yVp1tUHNxorNZgXAs6thPeizCryHTebjKG4P8uUdXuv"), tokenIds: [Tokens.orcaToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.orcaToken.mint.toString()]: { ...Tokens.orcaToken, addr: new PublicKey("7KAqhu58omLjKjg1XNSw28JULED82mnA1vvAMVoAdA6T"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("8E2CH9fPNXbc5pqu1dWWkNsNZWvLcBEXdBnzzXuhvJNL"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); /** * Mapping for OrcaPool parameters * Key: poolTokenMint : OrcaPoolParams */ export const orcaDevnetPoolConfigs: Record = { "4GpUivZ2jvZqQ3vJRsoq5PwnYv6gdV9fJ9BzHT2JcRr7": solUsdcPool, "2E4Mp6y2gFRteXiANnwzAJEhHwD3NX1wru3XvxJpGBq2": solUsdtPool, EBor1PR5XNGHjRVB6JDJuKVCQbvdr1CVZTaX1hTAdvQv: usdcUsdtPool, "8sFnpd7mM1AWxP1LXX2FWbbkaVtAopBPmPNZ9y6172WL": ethSolPool, "9pRnvg7ihSJDLi6DGf3PLwr6xRRRrBPXsHYEgGL5hzgA": ethUsdcPool, CmDdQhusZWyi9fue27VSktYgkHefm3JXNdzc9kCpyvYi: orcaSolPool, "2ZEEntzoUN7XuMs88ukLGv5HRR1byL7wFWChryF5ZHri": orcaUsdcPool, }; ================================================ FILE: src/constants/devnet/tokens.ts ================================================ import { PublicKey } from "@solana/web3.js"; import { OrcaToken } from "../.."; /** * The following content is auto-generated. */ export const ethToken: OrcaToken = Object.freeze({ tag: "ETH", name: "Ethereum", mint: new PublicKey("Ff5JqsAYUD4vAfQUtfRprT4nXu9e28tTBZTDFMnJNdvd"), scale: 9, }); export const orcaToken: OrcaToken = Object.freeze({ tag: "ORCA", name: "Orca", mint: new PublicKey("orcarKHSqC5CDDsGbho8GKvwExejWHxTqGzXgcewB9L"), scale: 6, }); export const solToken: OrcaToken = Object.freeze({ tag: "SOL", name: "Solana", mint: new PublicKey("So11111111111111111111111111111111111111112"), scale: 9, }); export const usdcToken: OrcaToken = Object.freeze({ tag: "USDC", name: "USD Coin", mint: new PublicKey("EmXq3Ni9gfudTiyNKzzYvpnQqnJEMRw2ttnVXoJXjLo1"), scale: 6, }); export const usdtToken: OrcaToken = Object.freeze({ tag: "USDT", name: "Tether USD", mint: new PublicKey("6PE3Mwjzx9h8kCoBp5YPed9TFoG7du8L98yucBP5ps3x"), scale: 6, }); ================================================ FILE: src/constants/farms.ts ================================================ import { PublicKey } from "@solana/web3.js"; import { OrcaFarmParams } from "../model/orca/farm/farm-types"; /** * The following content is auto-generated. */ export const solUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("85HrPbJtrN82aeB74WTwoFxcNgmf5aDNP2ENngbDpd5G"), farmTokenMint: new PublicKey("FFdjrSvNALfdgxANNpt3x85WpeVMdQSH5SEP2poM8fcK"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("APDFRM3HMr8CAGXwKHiu2f5ePSpaiEJhaURwhsRrUUt9"), baseTokenDecimals: 6, }); export const solUsdtAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("4RRRJkscV2DmwJUxTQgRdYock75GfwYJn7LTxy9rGTmY"), farmTokenMint: new PublicKey("71vZ7Jvu8fTyFzpX399dmoSovoz24rVbipLrRn2wBNzW"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("FZthQCuYHhcfiDma7QrX7buDHwrZEd7vL8SjS6LQa3Tx"), baseTokenDecimals: 6, }); export const ethSolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("3ARgavt1NhqLmJWj3wAJy6XBarG6pJbEKRv1wzzRbbaN"), farmTokenMint: new PublicKey("CGFTRh4jKLPbS9r4hZtbDfaRuC7qcA8rZpbLnVTzJBer"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("71FymgN2ZUf7VvVTLE8jYEnjP3jSK1Frp2XT1nHs8Hob"), baseTokenDecimals: 6, }); export const ethUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("FpezTR76RRjgpBb9HhR6ap8BgQfkHyNMQSqJDcoXpjAb"), farmTokenMint: new PublicKey("HDP2AYFmvLz6sWpoSuNS62JjvW4HjMKp7doXucqpWN56"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("3e1W6Aqcbuk2DfHUwRiRcyzpyYRRjg6yhZZcyEARydUX"), baseTokenDecimals: 6, }); export const raySolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("B1aByG1fU5yUgQT2EtJrp96SC4tJhnipzdXqHx2CXRgj"), farmTokenMint: new PublicKey("AUkn5f4N4TqPA5BiWirTDHWnG3SePfmeDpDqrFmhSgKb"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("5kimD5W6yJpHRHCyPtnEyDsQRdiiJKivu5AqN3si82Jc"), baseTokenDecimals: 6, }); export const ropeSolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("NFsHa28zxuLnncHme7iLx8TXWV8ypyxPvEPaQh29zDh"), farmTokenMint: new PublicKey("xpPyQwQ1HXHyEpvFGyTQRLY6rmj6jtAdEgLMV5uoz4m"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("ADrvfPBsRcJfGsN6Bs385zYddH52nuM5FA8UaAkX9o2V"), baseTokenDecimals: 6, }); export const stepSolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("DGtiR1LWNPGV9A5byh7EjAoh9NC2cW5YDcmxCpUJosD2"), farmTokenMint: new PublicKey("GwrBA1F8rGummDCDd8NY9Eu1cLNuJqbT8WaGxgWpFwGL"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("8nTzqDXHriG2CXKbybeuEh1EqDQMtrbYMFWcP7AkiDaP"), baseTokenDecimals: 6, }); export const srmSolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("5CQVdPpaW95X1atyfqunZf7eBE1rhQBXMfgJ1wRVF1p1"), farmTokenMint: new PublicKey("D659zwnbeTgquChbaWC3KDHrkYoqMuz1doGLHTFaqTtD"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("9tf8rBSEQYG7AqL896fN2nZi1iYPqpWaLEdpbeQaC1Vy"), baseTokenDecimals: 6, }); export const fttSolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("GzZE2CEemaTGNtRSYs9sArAJFuJi5kwsPJFyz5puYhsj"), farmTokenMint: new PublicKey("9r9BcPwCon96P5Y6JSdRAog7Uknz9p9GrnuHm4VzuB9k"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("EsYaDKJCmcJtJHFuJYwQZwqohvVMCrFzcg8yo3i328No"), baseTokenDecimals: 6, }); export const copeSolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("CXYEVaqtDs4R9Bpeu4xYf8KT8S6nYis6VWkDEh9Mu1FS"), farmTokenMint: new PublicKey("7CT19h7n2YBKiCFCaxXqMM79jNM4cmUvjXhNMjJNRYa"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("CzieDbGRdN1QGaGDNpSqzEA18bi881ccvkkGZi51pe1k"), baseTokenDecimals: 6, }); export const oxySolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("ALmRst1DksKXVfY64KXq7pJUUG5PP56kwY18ijVDGAsz"), farmTokenMint: new PublicKey("G48RkwsNYd3A4rBfuQhCswr9YUE63fFmZGyhgH95dq3S"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("7tYCdLN84EnTMkxM7HNamWJx7F4xgKe9KiiWvLyWjbgT"), baseTokenDecimals: 6, }); export const btcSolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("EeG5AAnFS56AveUrKexzivQeUdWhm6zYq6ubn6fLMCQa"), farmTokenMint: new PublicKey("GxmjQZvgwNCh3QSRNB8CPED81hzySem62PDDuMp4B379"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("Acxs19v6eUMTEfdvkvWkRB4bwFCHm3XV9jABCy7c1mXe"), baseTokenDecimals: 6, }); export const merSolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("8gJggSfM35JpfvXmEsuJoHPLB8D6br15MEWEWdQF81d6"), farmTokenMint: new PublicKey("CrKVRnH6iGbFXxEnXMn3Emwv3Fe7VwxEqpA8zNbwsgkH"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("HiwRobjfHZ4zsPtqCC4oBS24pSmy4t8GGkXRbQj4yU6L"), baseTokenDecimals: 6, }); export const fidaSolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("4X3U1tpfiwQ5zPPd4oQSPcu3UK7nMSUWyAXxCmcSA6qP"), farmTokenMint: new PublicKey("4geGcEfgVjzJGZAaT8iTicPm1XLDPjdSpVhtA99sZ7jX"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("EYsNdtyu4gGTaGz8N5m5iQ3G1N6rDyMbR72B3CqbWW4W"), baseTokenDecimals: 6, }); export const mapsSolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("Gobr8FhZDtn8yxkFQDND3KmfuwZseWEuyZ3xpD56hk1i"), farmTokenMint: new PublicKey("7Dy84zJNHzEM9335BrtFjCuunt2VgxJ7KBT6PJarxKMq"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("99pfC8fWymXgbq3CvrExhx3UxQDC1fMWEWLbNT83F45e"), baseTokenDecimals: 6, }); export const usdcUsdtAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("5psKJrxWnPmoAbCxk3An2CGh7wHAX2cWddf5vZuYbbVw"), farmTokenMint: new PublicKey("GjpXgKwn4VW4J2pZdS3dovM58hiXWLJtopTfqG83zY2f"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("H2uzgruPvonVpCRhwwdukcpXK8TG17swFNzYFr2rtPxy"), baseTokenDecimals: 6, }); export const orcaSolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("F6pi7SyXWx56fP96mYQ4Yfh4yZ7oGNtDjwSYHT5Mz7Ld"), farmTokenMint: new PublicKey("B5waaKnsmtqFawPspUwcuy1cRjAC7u2LrHSwxPSxK4sZ"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("2uVjAuRXavpM6h1scGQaxqb6HVaNRn6T2X7HHXTabz25"), baseTokenDecimals: 6, }); export const orcaUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("9S1BsxbDNQXQccjFamVEGgxiYQHTeudvhEYwFr4oWeaf"), farmTokenMint: new PublicKey("Gc7W5U66iuHQcC1cQyeX9hxkPF2QUVJPTf1NWbW8fNrt"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("n8Mpu28RjeYD7oUX3LG1tPxzhRZh3YYLRSHcHRdS3Zx"), baseTokenDecimals: 6, }); export const kinSolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("9XTA3t3X8KaeLgkv7XuDWATo4oDwBnTZqjnSPcE5ijYK"), farmTokenMint: new PublicKey("7Ho3ht7krdFELBcPAsGXFfQMyG4PUvYSfpz4aNBRP3Ek"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("HEvnD66WcBfTajS9adUYnGRBMDehFtLySiFHSD6kEBWs"), baseTokenDecimals: 6, }); export const samoSolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("98EDd1L47pdW1F7ne82dyFXpfhVdEcrCqUF1dYrWLFZi"), farmTokenMint: new PublicKey("CNf8gZtLahBWxKe3YwsqywLHMTewGqvq6pJ5ecg3cTYU"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("D6N9j8F2DhtzDtrdpT74y3u2YmYAzcggiLc3nTjqux9M"), baseTokenDecimals: 6, }); export const liqUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("z2WHNcBJTZqbK5wCuBPtswEq2614T6si1cJmog7vFAL"), farmTokenMint: new PublicKey("57vGdcMZLnbNr4TZ4hgrpGJZGR9vTPhu8L9bNKDrqxKT"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("3PD9SZFwXKkXr4akLf4ofo37ZUMycwML89R2P3qxcbZG"), baseTokenDecimals: 6, }); export const snyUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("7qAQZxYQRcmHmz3Wi9NeieujwLSd3N41M4dJipgSCNsB"), farmTokenMint: new PublicKey("6Qw5Gzf1TkM3YRe7Dh6yMVMo2wnJxRiCUBP8abTTn9Yg"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("AZpo4BJHHRetF96v6SGinFZBMXM4yWMo4RA8C4PriDLk"), baseTokenDecimals: 6, }); export const msolUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("EvtMzreDMq1U8ytV5fEmfoWNfPhrjZ87za835GuRvZCc"), farmTokenMint: new PublicKey("5r3vDsNTGXXb9cGQfqyNuYD2bjhRPymGJBfDmKosR9Ev"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("8PSfyiTVwPb6Rr2iZ8F3kNpbg65BCfJM9v8LfB916r44"), baseTokenDecimals: 6, }); export const slrsUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("5XXw91d4HoLjqhUhXmUcdkCDtQyXvQkLJMUcYJkKn5Dx"), farmTokenMint: new PublicKey("66xCxkffQZKBZLiHV3PDcfR8ANJTfnDRxPCaBdv4wxB7"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("AtB4nUmdyQfuWWJ9xAHw9xyVnJFfSjSuVWkiYan8y86w"), baseTokenDecimals: 6, }); export const portUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("FpEb4eEqhnPBAA2RNvsSe8baCoev4mSNQjxKPGvx5Gjv"), farmTokenMint: new PublicKey("4CGxvZdwiZgVMLXiTdJHTkJRUTpTSJCtmtCRbSkAxerE"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("F8gPSpwVHj8FdAJAYULDuZBxFEJut87hUbARYYx3471w"), baseTokenDecimals: 6, }); export const sbrUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("EWRNKpLc4Y8r6Aur9mo8GtBYatqfoML9A7bfEmDv2JD4"), farmTokenMint: new PublicKey("Cum6sRPGpWYQHZapekDtMhbZ1BQ2QkYv9PAwQjypxMVo"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("CS7fA5n4c2D82dUoHrYzS3gAqgqaoVSfgsr18kitp2xo"), baseTokenDecimals: 6, }); export const scnsolUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("5MzBKRo6YqK1BKBz67sXd42jrb6gYzBuX6R5F8ywC33e"), farmTokenMint: new PublicKey("7YFfqZGTxkj3Zeq3Et23kMznCaEYZ1WBZDt6CVrxwfqd"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("Dkr8B675PGnNwEr9vTKXznjjHke5454EQdz3iaSbparB"), baseTokenDecimals: 6, }); export const psolUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("4TK569s8SLgzmEcihyhrH8GmqFsufjZqsvHs8zrPEZYP"), farmTokenMint: new PublicKey("8kWk6CuCAfaxhWQZvQva6qkB1DkWNHq9LRKKN6n9joUG"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("C2YzN6MymD5HM2kPaH7bzcbqciyjfmpqyVaR3KA5V6z1"), baseTokenDecimals: 6, }); export const msolSolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("JADWjBW1Xs8WhW8kj3GTCRQn3LR4gwvbFTEMwv9ZNxQh"), farmTokenMint: new PublicKey("3RTGL7gPF4V1ns1AeGFApT7cBEGVDfmJ77DqQi9AC6uG"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("29cdoMgu6MS2VXpcMo1sqRdWEzdUR9tjvoh8fcK8Z87R"), baseTokenDecimals: 6, }); export const orcaPaiAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("8KBSXu7zFjvbVXiwf1opGNBx3evVwdpaYHWR3uc4HVR6"), farmTokenMint: new PublicKey("4aEi4A91hRbERJVDYxRWbbSrBrsxoM1Hm33KRoRzWMht"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("C7TH2jEJJaxVwwuvkbcDGfHUiZvEkkeYjyAcdTMi5ujb"), baseTokenDecimals: 6, }); export const orcaMsolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("7EVKT4iqfjiyzeVrafs23JrfhSoLd6XTanVuENNvisq7"), farmTokenMint: new PublicKey("3Duk5b6fLztPmS4ryV48FM1Q9WXUSMwz9jehAT4UtqpE"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("CVapmQn7HaU1yMDW3q6oUV4hx6XoYv54T4zfGXkuJqkA"), baseTokenDecimals: 6, }); export const scnsolSolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("5cE7V9D13k1P1qC23g5vcQEMsvrDzL5yFHhiesVUyn93"), farmTokenMint: new PublicKey("CNqmEKGjZUUARVFHcz4w9CvX5pR8Ae2c6imHDNqsbxgj"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("APNpzQvR91v1THbsAyG3HHrUEwvexWYeNCFLQuVnxgMc"), baseTokenDecimals: 6, }); export const atlasUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("G92aJeZBCFiECwrKSQsbobfykh6cNLCf5Pd3zkiLjGLe"), farmTokenMint: new PublicKey("HFmY1ggCsCky1zJ1sfdkNR4zb3u5n38YNRdf4vsGu17t"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("FZ8x1LCRSPDeHBDoAc3Gc6Y7ETCynuHEr5q5YWV7uRCJ"), baseTokenDecimals: 6, }); export const polisUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("5NkDw3LcFscf5WSxUiquNregP6RaP79Y2pN1jyUYepzc"), farmTokenMint: new PublicKey("63JUKLnCAuNMPSPioEgbjjzp9Qk8qSEEM8eZqEtPqfLU"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("GteBdo9sqE7T41G8AJsaG9WHW48uXBwsLLznmu2TBdgy"), baseTokenDecimals: 6, }); export const bopUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("4bmbPAxrf5NLAD6A5fkhKhmuffdGScpu9Ei39YEaPATQ"), farmTokenMint: new PublicKey("A7vvbqENJj8kED3ABjphe8TvwpasQYtoWGKpjpLArMxa"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("2gXDJZ7XAtQEtf4PRSQZKoq1WMuu1H44tQanbMA3YVpu"), baseTokenDecimals: 6, }); export const samoUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("F5ZvDWRVpQP5A17RFogL4dE7gZ2Uda7ZqKUy3DWJDEFx"), farmTokenMint: new PublicKey("9voVuTq1S9bFZkF2Jo44HoVG63w2xDRT8eBzB23YbQud"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("6VK1ksrmYGMBWUUZfygGF8tHRGpNxQEWv8pfvzQHdyyc"), baseTokenDecimals: 6, }); export const ninjaSolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("B8Q8e1hdCw6fhnSKmsMCrsDbvSNLZyzHjnPpwZKBkcSB"), farmTokenMint: new PublicKey("7YyhptkxY81HPzFVfyCzA5UXxWdsNRD41ofLva3TuSpd"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("4X1oYoFWYtLebk51zuh889r1WFLe8Z9qWApj87hQMfML"), baseTokenDecimals: 6, }); export const slimUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("3muHEhQLmt7jmaicMHqe6LqXrrfFtqEuAfBog2fAXhRm"), farmTokenMint: new PublicKey("3K7aZhtwWJ2JS6GnbbgeDVnxd1q2hwhqasmgRsAMZ4yC"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("BVWwyiHVHZQMPHsiW7dZH7bnBVKmbxdeEjWqVRciHCyo"), baseTokenDecimals: 6, }); export const whapiUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("r2MxTnFdnP7ECMxH7F4mcg1p3CowwhPmDmYoZ1syKZh"), farmTokenMint: new PublicKey("Bfoi3RNnfdP5VeRGqvTA8MRN9ePGJoZgeKfe8WeBHUxE"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("ELfBngAgvLEHVBuJQhhE7AW6eqLX7id2sfrBngVNVAUW"), baseTokenDecimals: 6, }); export const copeUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("xigyMM8txxzpvjRw3Z1tX9euUshtqeHucW6K3f81KNQ"), farmTokenMint: new PublicKey("9SDpBrfqNxjXcCzpKWM6yUKdfky975VJBD6xcu5cKf5s"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("HsauTv9s52Zv12eaDuSp6y7BEm4e4BHEyAsbdjyyWzPK"), baseTokenDecimals: 6, }); export const sunnyUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("Nw3caGfeqM8xQZ45iAf5zWmPMQux5wMWMjxsKEfnNk4"), farmTokenMint: new PublicKey("9HPn1oREyNA7CEK7B1xwmBmVH6qtQaSfLBXc1JyRsdUE"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("GHuoeq9UnFBsBhMwH43eL3RWX5XVXbSRYJymmyMYpT7n"), baseTokenDecimals: 6, }); export const grapeUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("6eeK7PHkUXJ9t2qgdrHfbZfmU5S7zWZwpDw6i46Rf1jU"), farmTokenMint: new PublicKey("97q89hnoKwqcynvwXcj83YqfqUBuCm4A8f2zHeV6bfZg"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("EorFh8siFyLF1QTZ7cCXQaPGqyo7eb4SAgKtRH8Jcxjd"), baseTokenDecimals: 6, }); export const abrUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("PyzV3qSzbj98ArVpASj2LQg6zCq6zfAixqUtYDafnRU"), farmTokenMint: new PublicKey("5uR5STASUmoGVHzqMeut98t26TfVkQqWU9f9dsv3NfJ6"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("GMzPbaCuQmeMUm1opH3oSCgKUjVgJUW14myq99RVPGX5"), baseTokenDecimals: 6, }); export const kuroUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("6bHkoSxnK3aKW3PyG34dUz1naD6T3Pc7143s41nSuuzN"), farmTokenMint: new PublicKey("6PGoaQdL9e463hdaFxHXsuPcjCHRK32CQ9PFKxvM7XY2"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("DRknxb4ZFxXUTG6UJ5HupNHG1SmvBSCPzsZ1o9gAhyBi"), baseTokenDecimals: 6, }); export const mediaUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("jCGam3ptTrFKhCwBGYUcqtrvt8pY4uWXaPoqC9E7uXB"), farmTokenMint: new PublicKey("3pMYToENTB7jKrJiUPq19FCZCWE35Ph7bkRRMN6kxDXK"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("2toFgkQDoPrTJYGDEVoCasPXuL9uQnjvXJaDwa9LHyTx"), baseTokenDecimals: 6, }); export const tulipUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("AEemiZ28JTnz3xmj6LSfXruK1et317ZAGY5KCrKdXNCX"), farmTokenMint: new PublicKey("2KYUwdRbVtaMUgHp1a6NuTomyCb33FxoZ4fkeVdwjaJA"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("4SBx8GXu8HhcVHWydQv1vsDdZs3G93XSL9CtMBny6hS5"), baseTokenDecimals: 6, }); export const mngoUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("2LM1Y428kPtLAsxcdxv2iKWaPxobt9poD2DAjeGpN6TC"), farmTokenMint: new PublicKey("CxhcLZtbhfkwjAZ956SEkGxkAvMVQH3hfKTjKpgTV9Q5"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("H9yC7jDng974WwcU4kTGs7BKf7nBNswpdsP5bzbdXjib"), baseTokenDecimals: 6, }); export const stsolWstethAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("6eW2skHuzMxxPZjzE7x5fxtn3ZZ1Ak2SawrMH9T5KANp"), farmTokenMint: new PublicKey("3kT3oYuS1rCfhmqfgy6EKcbZdaJimaVEjoy25QiuEaoj"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("Eswigpwm3xsipkTqahGi2PEJsJcULQBwZgxhQpr6yBEa"), baseTokenDecimals: 6, }); export const sypUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("7GDHcUdLhHxCHeQccpbJr3eNGzQvnoMdLBzkVNYvQgkh"), farmTokenMint: new PublicKey("Ds4VGZhZzS2PMFzhzKeC3mwcQjdiCG21R76fTVbsSJyJ"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("qJxKN9BhxbYvRNbjfK2uAVWboto6sonj8XC1ZEW5XTB"), baseTokenDecimals: 6, }); export const stsolWldoAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("DMECkFUnVp1esox6Yyyfc7vJeN7spUHd5JypAWqEqCRC"), farmTokenMint: new PublicKey("DQsbebdNDy8yQrwLTpieckhzi7Ewx9LoCPVf7G9KvY2U"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("74B9aMS7SA832xKngt5VLKmWAP3pa3qkUzWncTmQSsGF"), baseTokenDecimals: 6, }); export const whethSolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("BerS3SE5G6FqZER7L7G3BhUJBrZ7BpizmuQRH9LMEYQw"), farmTokenMint: new PublicKey("FkHQBBZGh5GS4GcXpcVksKYUUkLTNn6Yk1PCMxucR2AK"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("7aYnrdmdCRodDy2Czn6keUquUhjF1jPEmfwZPh488z8U"), baseTokenDecimals: 6, }); export const whethUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("GdQyNtN9rQWzpcm7mQMNBiXyeKRjjQoobh2waVQq5QyP"), farmTokenMint: new PublicKey("B11Xp26xU2gzjToJEuGswvr6Jtidfh4GRUyCWzWMNdQZ"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("7NPtjjAP7vhp4t5NCLyY4DY5rurvyc8cgZ2a2rYabRia"), baseTokenDecimals: 6, }); export const mndeMsolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("5wr7m4YrJB38vuz3xyLqvq2DwLCcDkEDH5X97chKpH4T"), farmTokenMint: new PublicKey("2wPsMuzhEsC6GhV3qtFpmJF6atEgLGbnmQ8U43Y6fPxZ"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("5PHS5w6hQwFNnLz1jJFe7TVTxSQ98cDYC3akmiAoFMXs"), baseTokenDecimals: 6, }); export const wagUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("4GWmnvMg7EGQZ6LeQtK6rbJrtTTVsQHj2ivwm4vm8mnR"), farmTokenMint: new PublicKey("8Wu5sJpERA1J5iWcT8aMpt9cTAfKDLPbLpGjNsJoPgLc"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("Df6XNHMF3uRVZnz7LCEGiZVax6rXgz76owtVkBHEjSb6"), baseTokenDecimals: 6, }); export const msolUsdtAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("HULY26UFdfVkc2STTt1KREd57BwFV2md1tqdk253QyiK"), farmTokenMint: new PublicKey("Afvh7TWfcT1E9eEEWJk17fPjnqk36hreTJJK5g3s4fm8"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("9cMWe4UYRPGAUUsTkjShJWVM7bk8DUBgxtwwH8asFJoV"), baseTokenDecimals: 6, }); export const msolWhethAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("D4Pmc82b9W1UDAqYNNNMGG7UYxBaZckf97AYExGbUK95"), farmTokenMint: new PublicKey("58nifjPjF3CutGz2xMxvAMk7R9YgbVEc8Cstj4rCcs8j"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("5qoTq3qC4U7vFxo3iCzbXcaD1UEmDeCD63Dsuoct71oV"), baseTokenDecimals: 6, }); export const btcMsolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("GBrpFtiTabs14mc4Hi1RX9YiQY7res6JxrVfMTADfcQV"), farmTokenMint: new PublicKey("DzpLz78wuwyFsQToin8iDv6YK6aBEymRqQq82swiFh7r"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("8nKJ4z9FSw6wrVZKASqBiS9DS1CiNsRnqwCCKVQjqdkB"), baseTokenDecimals: 6, }); export const ivnSolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("FwzqbJZQiL3qzMx88r2o3CNKFxztuW3JC45YYk6ghMLR"), farmTokenMint: new PublicKey("HqajzzbGMST3yCCVBJuXvNVsWkY2DXqiBz9cTRmmyBMy"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("DfgCnzaiTXfPkAH1C1Z441b5MzjjTCEh134ioxqRZxYf"), baseTokenDecimals: 6, }); export const larixUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("HeAQxAGBQdGURFFcLpdPagQ2vb66kXFTVxDfTjme8eGo"), farmTokenMint: new PublicKey("DNAGfa7tK8csprRQmiDUwDaFfhw6ueHhVFHTCgTJ8HGs"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("8sfThep3io4gvcGeuoAg1Rs8GDwKJjtcdAFHqQSSNAVE"), baseTokenDecimals: 6, }); export const prtUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("9dCsoLdfkpYw1s7TMNE1HZPNmVSNDZrUkUHfxn2p8675"), farmTokenMint: new PublicKey("2cYMt26745oFc7PadaQn8Vv3xFUxWBfbip2NyJeVG35F"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("6jCERp5hKj37PCXP3VTjCDJeoPuSpnMDMz5A6jWQv3yS"), baseTokenDecimals: 6, }); export const jetUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("BKdPQziyuKmXwZeVuo8Uj7usfUYpwSfnGBDbG96y266V"), farmTokenMint: new PublicKey("4DjiLEKADWjYmiY9gzFnu5xews5oCTMRByWHWEzDa3bj"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("GBijunwxa4Ni3JmYC6q6zgaVhSUJU6hVX5qTyJDRpNTc"), baseTokenDecimals: 6, }); export const stsolUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("2P7FGV8XNXUkEAG6q5LbhfoBFkHJ7PDAjYqmAbwnVHBF"), farmTokenMint: new PublicKey("3u2dNfGuU6C3vmSg5EvLPUpX57b3niqhWBV5Gc3WDEf5"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("GtQ1NT7R5aaTiST7K6ZWdMhwDdFxsSFvVFhBo8vyHGAq"), baseTokenDecimals: 6, }); export const wstethUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("2FAzkAgm8EpE7WpWUsEcNyj4kcVeCX2L8SR1BicGWEx9"), farmTokenMint: new PublicKey("ojpWEdNYa5nGviUc8k8M2XLjHuaCL2EgHFdvTtdkXA1"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("5a6Y1ephcbKSoyLMQyD1JWbtqawCy8p2FtRL9v3zhaG5"), baseTokenDecimals: 6, }); export const auryUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("FvkyNXLizY4FCNkgbGpr1WA3z4A8iTRU4rPnnNJC3q2V"), farmTokenMint: new PublicKey("7s7Veo1P8ZRy6z5MCvoAmg2kPFcQnq2Grt6yewWS8LbQ"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("6mJqqT5TMgveDvxzBt3hrjGkPV5VAj7tacxFCT3GebXh"), baseTokenDecimals: 6, }); export const avaxUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("GkmPgsKU9uYaZtKfzjWeJjBSvX8mkK8gNqoWMYBdcvUx"), farmTokenMint: new PublicKey("5mZydNG1fBPTXzgp9SoS7Jny6EmSzBPTPrFbB1ttGnvx"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("Hmfrtmo93DpSDmVNLQKcBS5D1ia5JatiRSok9ososubz"), baseTokenDecimals: 6, }); export const fttUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("2FtSDVRmYq4x6NeTidpZVuLzgN2APzr3zHxpHx8zdgbr"), farmTokenMint: new PublicKey("2AAzmhZ9Kh9mFcQtHJVTafu69tc5GCGpi6CTgafYta1S"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("FwCombynV2fTVizxPCNA2oZKoWXLZgdJThjE4Xv9sjxc"), baseTokenDecimals: 6, }); export const rayUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("GCcVYpBCPcPjb11LeeoVhLNJQzS5GXEEd6Dmo5eejBTx"), farmTokenMint: new PublicKey("9MaXcCERB4DzedPNSBwyHM2P6Yo6jCFLjnatuWCtR3WF"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("4cXw2MYj94TFBXLL73fEpMCr8DPrW68JvrV8mzWgktbD"), baseTokenDecimals: 6, }); export const slndUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("5NrUSiG134QLY4JkmX82n4hdZQnmqsWMrBapQwfAtpeu"), farmTokenMint: new PublicKey("GdySZb2nbeEjCLBg65veC5kzfMCfCWgtgqwH9YWDtDXr"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("F59gkD7NnsdJbFKrRZsiBC8PAooN4c56T8QmahfW1iXN"), baseTokenDecimals: 6, }); export const gofxUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("GmyMx4JtRrkjmxNn4WQCmVNuLfwRjkAmCfMv2AXag5se"), farmTokenMint: new PublicKey("B95rdqSY4dqPwmt295XwBZZqZJYLmqDNXU6NvBpT4ep4"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("7vnps4VE5RTGAr5fmPZu7fSrk2VnM4Up838grZfqmxqE"), baseTokenDecimals: 6, }); export const woofUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("5K7WdUTG2yZjULeNUUiH3eoWhY9YYAnpoWFGiwVj3q2V"), farmTokenMint: new PublicKey("4HaQXDz9gdLgKUjvNVtnLyNZoWNYKjh3XxH1TpLgiwmi"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("9EjcYfHcG8f1mccpHyaAwpoxaUPiheC6KgLQjyD9aTb6"), baseTokenDecimals: 6, }); export const sdogeUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("672wPyV8sJdqBfyay6MccLxsCj1sqQyd5WaPXkTbeB8N"), farmTokenMint: new PublicKey("4kXYyZAMBdvgDaBKUGvRWJnHw9af7sCUPvpQ68PEdP8b"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("CHTKUJGYRtBDqnxCFjxe5KEkZgxV98udbhuYYyzGxup5"), baseTokenDecimals: 6, }); export const catoUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("4EfikjxutL59CXMBYffhSXdPEw28T963idHiwz2qpodQ"), farmTokenMint: new PublicKey("BHtZnTBMeY4EBEW5egGnuK5bdW12v6Dod6wFav79AyYx"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("55r9txzQtmjTykmTXmBYZCVMg5z9squB8b5cSw2AhxA4"), baseTokenDecimals: 6, }); export const oogiUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("CzWsHjE7azpbksPhHxdkvH5gfpBAx4FqohwFnkHgfVpr"), farmTokenMint: new PublicKey("FiwSk36yi1DNWcuQUeNipAc1VKxa9Wv9AR2xFvyKUxAE"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("DSiHyHDn96bUQSZtizyCRLcQzrwohZeMpVu8rYJN1HzG"), baseTokenDecimals: 6, }); export const sonarUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("2SxKGe1PEKWQC6m5Q1jUnXJuZBVXyUC37ffCPop38iiA"), farmTokenMint: new PublicKey("GWmwwMGYBG4NqYdnsYrudzBnbgDC49MkBxdzhfLA9kVY"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("5MvQHx8eftU39JTucFsT315JFnQASuDQg3FqxTw7xcvN"), baseTokenDecimals: 6, }); export const aptUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("3YZ5GYL625vWibn7d8hMdrMBawy9HGUyeTe4AoXoME1Q"), farmTokenMint: new PublicKey("Dx7DYSuaBufhXyQG7155ePkLmHyn6w7WeKKtQB9zscZV"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("HNrYngS1eoqkjWro9D3Y5Z9sWBDzPNK2tX4rfV2Up177"), baseTokenDecimals: 6, }); export const dflUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("GaKnyw7sYU6raJpZGjFER1eXZ9zHfqih5fAj1T5xxP6J"), farmTokenMint: new PublicKey("C8jJeUM9s7R7gTw1ybgTW4LPkgrYtogstD6MtBjroGLB"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("AWrtTWG4Zgxw8D92bb3L3sQtGLD3zDztMPWsXSph8iBP"), baseTokenDecimals: 6, }); export const dflSolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("HTEe4r3YDRqDbA2dwQNMnMBAToV7rHvpyMBe6EjZmXyz"), farmTokenMint: new PublicKey("E3omuGbZSksAdbiyvtpdfGsUGhptA26Enwe5Y5jJKnbK"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("9Y1vPaAsMz8X65DebMMnmBjbMo8i4jh4mcgiggZUUS3M"), baseTokenDecimals: 6, }); export const frktUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("EUgwcVQhm1BDHWeMThNRx143RRay1byP6gmca9dp8HMe"), farmTokenMint: new PublicKey("Bc4CvPm15iLRopgLmU17RJicBgjykiMwVzYxa7Wnujdh"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("FnDxJPNk7pPmGHUbR4XUHmHevrkXHdna5D3sQKcAtjBL"), baseTokenDecimals: 6, }); export const tttUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("BPsQWbFEwYRxHims8Yw14BbL8njWEQq4tNWrrJb9sgXD"), farmTokenMint: new PublicKey("AmrPpJFQj4xtv3yVgPCFqhXEMBPhaKRP6qFyhuCdz66c"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("FGgP1npQTsC5Q4xBmQtNYSh51NKqNwdxBZy8JCo3igcu"), baseTokenDecimals: 6, }); export const upsUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("4TQzMpNP5JdZ3YDi1iz9kYqv4L7sTKQeFtpvnfc6T7aJ"), farmTokenMint: new PublicKey("9fuv3emLQXECrTWqm2HaKT3wQhmvmgqmReZSMcu8PfpH"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("E1U63VXhNiWoUkVvjrfLDdV1oJrwE6zLde3bohr6jCqz"), baseTokenDecimals: 6, }); export const fantUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("BkiSfYmmt8KxrKFhpS4oq6TYf5C4DFnaFWDnn3eDhcfp"), farmTokenMint: new PublicKey("C2EcthTMaC5eATXVaXg5ctvMfUYYgFyNibybHes5D3S6"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("GjG7JjTQfQpDxw4hWx4etP9oTaYCuCbPjsU8WaUT3xHB"), baseTokenDecimals: 6, }); export const blockUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("3QHfuWvAkUfr1QenKaPBDUUUwShvoMLZCmfux5bovz1J"), farmTokenMint: new PublicKey("CkSfxpcpunHLUQktiFAeTJCYHsT4brYoJE23R3vw5zCF"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("D8WjqtwC9CzBrQKfSf2ccCHFQuPYwyLv5KAy8WjT5vnf"), baseTokenDecimals: 6, }); export const runUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("2yCL6hAsNQN7R2wrPaUffxVDyK8hhSL1hYf2knhUzLZk"), farmTokenMint: new PublicKey("Gxh7KubJPEqR1i4oHCxxYayWcSJMzn7h2kpJeCCEAkNC"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("34Ppq6R8NfYBwWwPY4cBK4Afyb8hHaASQFukCzH6cV4n"), baseTokenDecimals: 6, }); export const uxpUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("G7W1y2Mv2kxu7ht3csCUNdduaUNBkYVcvX6QA47CJKuF"), farmTokenMint: new PublicKey("8BxKJ3FAFbidm9rPotQEcm6dDqJkTz2PhLtaq6hnZk8L"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("HjR8JgqNKQVMvdryqJw5RJ4PCE9WGk8sgbEF7S9S3obv"), baseTokenDecimals: 6, }); export const btcUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("3japFRAWZTq8FLjeTsi4hmNHpeo7RhP9ift4joCjRkga"), farmTokenMint: new PublicKey("3aDHNJpWPEzXHZNeuak3LgcB8MbAwnDKkB2YftaPyhev"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("J3kvcay3N16FBdawgnqoJ9v9p6XCvyCLE2Z9F5RLvGkj"), baseTokenDecimals: 6, }); export const mndeUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("FBSHQPtDZLvv8tmj1S75GW4TKGhxXVqU1zcSK57ZWHGF"), farmTokenMint: new PublicKey("BtXnDsnidDZnkVFJJnqtAMMCtkoG5uioYF72yC8fhVTn"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("12Uj74zgUUoBe4yeackwQ4qYtFMr9fk1xL6q5Nha6t2N"), baseTokenDecimals: 6, }); export const chicksUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("BQivr16DZwUyzx9Qa5LR7V7eg1ASMiPjBtyj1bsoLXw2"), farmTokenMint: new PublicKey("GTcxXu3yw7yotq2UtAMvpEbx84ozJyrBwy77Cmem7m4X"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("71CBZeJ4tw38L9pSPoCz4fRsuWE64Fipyzotte7haoCS"), baseTokenDecimals: 6, }); export const onesolUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("5FSwvhovxgEJPg4yufxCXiLXD3RY2SJKQ2fFy8mMupJj"), farmTokenMint: new PublicKey("4tcadvVpXQPswr5dRt6jJW1sVFW2CxrKgzP594ZxaUTv"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("6MF5CHWAj5mS7FhpxiKz37CzR2eYTu236XpBKKMXCrGg"), baseTokenDecimals: 6, }); export const wmpUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("8brkHbXG9fNoYZu68D7cQy9Q1gC7hfTZQD7jfKFv4hvC"), farmTokenMint: new PublicKey("Ce3VXSQGFEHqrQSEzcVb2Ro88Mcn56cYBUAXFx5tL9bo"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("HDgxKmiA8Pv82fNguhVeMkZqQkos2YksFPoP1KttWxX8"), baseTokenDecimals: 6, }); export const unqUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("9hQXfKCdD4v9v8vzimd6KExoSnS36q5kUPTW3PdX6KRu"), farmTokenMint: new PublicKey("CsGTrgJ6oLx9UQow9aLjuAacjXTY53zT8B2FnAbfVZAS"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("2VuGzaMrDnDyZfYvDwSXk38s7M2wpud7LDY3dGA1J9sy"), baseTokenDecimals: 6, }); export const basisUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("A8CNiARq7zYMMGKYbqJVfByVyBzdMexhc5EEGzCN13dS"), farmTokenMint: new PublicKey("4yx2aHMa7N4m1uUaBRy9QPtpstw3HFPtvcCPJQaGFHKL"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("GoaAiajubRgeCFEz9L6mLnSmT2QFegoJDH5tpLfivpj"), baseTokenDecimals: 6, }); export const gstUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("44aNS8nnj4r3WWvnR1Ud929iAqn5jJ7ugVkJJvH4XuW9"), farmTokenMint: new PublicKey("72vxFxfeSN2DRKmSQAkJCoFBNYb2WNevyaDh4v2t8TqP"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("E6FUnQHGHJVJg7oExVr5Moeaj1QpdpZQF5odYjHXWPZb"), baseTokenDecimals: 6, }); export const meanUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("4ZqD3uYerAhUrVCPSKV15JT7ToR4EW1TwK6HHckAZNio"), farmTokenMint: new PublicKey("3h2VBX8533NB8eEH8rPXMdayodFDbgTHpbav6JqLZAQq"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("F5BTnwuMA6rxftTdbZ33VWKr2wrr6DuQHnd4guKmPSYQ"), baseTokenDecimals: 6, }); export const aartUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("6pvWTK3UZJ2gKpVZBXMEUEbnSbqf8GxEFbAQjWuuW4C7"), farmTokenMint: new PublicKey("Bg7pZq7KdsQsnCQBeNpa4XVnrWfjUJNu3ViHoNB7YUZU"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("HCtyJzFUtYecXrA52s4Y9atq4J1fhT3cYsTX17XVSFag"), baseTokenDecimals: 6, }); export const shdwUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("ABmFqgfvQjjU8uBkZL2KdH5AvYEMsuddtdvpm4s62Pzq"), farmTokenMint: new PublicKey("7WWHfufv8vuBC1x7GXA3pu7kgNhEQkXoq3CtbaQihAJ9"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("DJqqvzSuPaWThfzwMjXx7H2ZmHDdwxza6NtFudtuXcpc"), baseTokenDecimals: 6, }); export const shdwSolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("EKe5CgBnBJA2cgeEUe67aQS57bAQsPvfVdArEWuEuEEW"), farmTokenMint: new PublicKey("BDStVBt4NS5bfda25ubK51kVRioV4yjKKCPbe96jeEms"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("2ws7g3LBPdctfKn42Di9qxzQtUJ8ZL1aEAX2rGEQMNqh"), baseTokenDecimals: 6, }); export const scyUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("GDf3GpSU1V1UCvpcU19rV8p8CUC4cken9b5RpKzBBgiN"), farmTokenMint: new PublicKey("DkxeyV1TEt9umvqjPNf9tdjJjgyvW5Mdi4AQnExA5bZa"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("99ZHUQsgxL7K6PHrGNi1gSwawwPr7UA5fbWrYoHQ6qhX"), baseTokenDecimals: 6, }); export const slcUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("AgscvT8HJ4uqznp4SeYMgKf9qUjTrQL7AzU6mjcqpPCB"), farmTokenMint: new PublicKey("X8GnAvxq942xXjNzqYPFQQ9JstJQNEA81uPeNoQpgrN"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("E5kSBqTDxFLbLNQaVVtPtnhEYVLMCK2fVSEKoMKL98qR"), baseTokenDecimals: 6, }); export const wustSolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("7tHjwHKvoSPjoAZepTZsw7uV9XobkgRXhMbhbZmqA8mS"), farmTokenMint: new PublicKey("F49Cm3srGucQCBanA2xL7nSKHfH1QZd9vLdFtkg4LKnq"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("6c13xsmyk7UaHUWZ2rm1MM3ZdrQRSBkQ9waaG25ridVs"), baseTokenDecimals: 6, }); export const wustUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("Aq289TqufDB4A4TEGVUkVquVggyrPjCwxkEv7pDEVpWZ"), farmTokenMint: new PublicKey("2mhVUMsG7eb3XhHjAbKpRZgWNyGZNCiWU7dRxauzZaGL"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("J1KfRtP5y2warpD7LdJhfBLPKoWwSqYuovdArSv1mpQ7"), baseTokenDecimals: 6, }); export const msolWustAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("9iXAweywwdGR76L58FNg9siQzxyzbeJsomjEohPztpHF"), farmTokenMint: new PublicKey("6wqME6zPQzGDLugpnwZnVBKBbATC5nTaEa781Vj98yvM"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("68YVjgPnTUPcBqZyghqvD2WPNsrLKsjYTmBKJzHRr4qd"), baseTokenDecimals: 6, }); export const wlunaWustAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("52VxPD3pag6QrtEKXTe4jYBvSTvfggjbXZv3vqo455uU"), farmTokenMint: new PublicKey("3ZGKT28NXAqb2YtUAMvKixQvHNHT31Q5mK8AC2iBMs29"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("8Mh7drLbt3jFJYwp948XyvQscGLaLkChNcaH5wwaAoWA"), baseTokenDecimals: 6, }); export const stsolWustAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("GxhewC22S6wsXT156yC9SARvDnijoc3YEYyLVcQFDUCx"), farmTokenMint: new PublicKey("3Q44iV4URXdbS4Tk1PGs5VdWQoCxHB7zdcdMnemo8jfH"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("HTZd53fYwYQRyAjiaPsZy9Gf41gobFdqkF4oKe3XLi95"), baseTokenDecimals: 6, }); export const jsolUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("62JumLDtnsQ5YsEZrJaQsvDMP5pRmok3JEWHghFkL8D2"), farmTokenMint: new PublicKey("B3JDURP58ooQT8zvhLgDRKVjstqgrHhn61qzzudHWrS1"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("AzEoVuNJyo9ByoLRZ5t6vav2Zg24vULNVJM41PgCKUqR"), baseTokenDecimals: 6, }); export const daosolUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("EaxYr2iZhrgwUKQVeFFeHQLW1afzS8pgZGn6hLhgFMgy"), farmTokenMint: new PublicKey("A9kPybFFdj3MGKWWSwgb3KvzQyeNXESayh4ngmkmee2R"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("CCyDxjdW3G7hPTthTMPTZ4bnhFF19XG6rx2fNiKeRQww"), baseTokenDecimals: 6, }); export const orcaUsdtAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("4SNMBiDGjDSZnyQFqSodJTTmRqEkisBWciXZ4hGbDujc"), farmTokenMint: new PublicKey("C2YSdSesufbMVWtKXSZGhc12f6UL2j3WDe9VT6rRbmA8"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("Gx4PoxenyQwhGGnKagAT35iVg4im1iKhJxDWqVhgu6tk"), baseTokenDecimals: 6, }); export const orcaWhethAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("AgWH92f8cPAuURyqehF6A9wFgupEsnDX3VP5eHyytabA"), farmTokenMint: new PublicKey("A7EAHvFEWzW8qSTFNLrEHN894GAZWZesNiebttEwtUGJ"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("GsfyYHkSgC3Ta6aWR9MjB2sxoBrkGGeR2tAwXbpphf3"), baseTokenDecimals: 6, }); export const geneUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("EoRaCH4cwmmxc78s5E1fTDt2zPkivXNLf1MvoGhJywKd"), farmTokenMint: new PublicKey("GrBZ4HLhL28JTxMfAH2Vm2hVv3RE4TYXCG9p9BpyUaRq"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("7cuu94swKL5PtFQohKMAzyd1mjj65rgMW3GzLY31HCnK"), baseTokenDecimals: 6, }); export const cmfiUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("2CGcou8YJoannsazSYQ16jSUZzPP8zZ9jdqgSRSGsVXa"), farmTokenMint: new PublicKey("E8RVjS24pBuF3oCCeJVAgC4RQ7mVa5P3FGXqGbiczzvD"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("85krvT9DxdYgoFLQDHTAGdvtNuLdAsc4xE5FkVLpN2aR"), baseTokenDecimals: 6, }); export const celoUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("EowPc9YUmqJDjAujhD1eaLzDm99JnCu88fA1W8skKgQv"), farmTokenMint: new PublicKey("9RRBDWZGWGVnHgazCpb9R1XApmHLBDya8Tq1yrzoMsKY"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("HVLyX8mD8YvKgZJ4oB6rXJiCYMLpHKwB6iCiCjE1XwdT"), baseTokenDecimals: 6, }); export const ftmUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("EsE6fq5rP5Dg3ivS42JodpaQNpmkB6LTFX2nDSRZZ2og"), farmTokenMint: new PublicKey("E7Af9Fa2U1YqEkQpAYjXwDB5TJUou9VcN3ot33Gj6UY9"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("Gpzd833qSmv3kXpQmxEaqkrZTXZaRjhNAoqhf61qAhTG"), baseTokenDecimals: 6, }); export const btcOrcaAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("8TcCqDgPgim1CV6zgAXFq3PxSBH7MDCeVSGharRzJ4SA"), farmTokenMint: new PublicKey("EQsfnq9d1R2MbXGKDPSgJXnDk1oXocgMFoSd15pEAPGD"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("DFpLFcQZqDKykyDePgip4r6MExVmBKWqTa12ezq6qxUY"), baseTokenDecimals: 6, }); export const hbbUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("3saySWJwipyCXqqhYT8XaSMFAS7NNksKKdP3zFJuUMtT"), farmTokenMint: new PublicKey("BxPd4x7gm6WQF6jsDCRQuQVZ2bopQ4KegMrqyQgdkPDk"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("cL5WhffCYFRLM4We8VS2W684kM4pHyuvEDwp8Ddw48k"), baseTokenDecimals: 6, }); export const hbbSolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("9fEfGhHjvqDPcFx6cBNuWHHjQaa6fSEP5pRHjdFkPenE"), farmTokenMint: new PublicKey("62q8m79WkXR1MAer4H2zLpA38s47Fywkqqv4MMwEHjad"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("FkKzu2HeMJZf4oHwoYPxLGVy3net5Jq8HAfnA5VqETgk"), baseTokenDecimals: 6, }); export const sbUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("Ax8vkRHj3Gqo5Tv6PfWZzmbr8zHfPdeYbJpG7QYkP3r1"), farmTokenMint: new PublicKey("3Wppx86xN7Dg7GLUTD9C7AqCt68qZkWzNYUdCS7t1pCk"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("2Reqt4Sw9xNY8BoJ3EZLpFu5yVgNxFrbw8M3KiJpPn6o"), baseTokenDecimals: 6, }); export const stsolUsdtAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("2xvT1Z2SU1iKvmWpUNP9y4vRXyB8GpGq7sD9CforJoYd"), farmTokenMint: new PublicKey("CtvKaRLzCzRZCcYPwai7NCYBK4ArBj2oD6BfvMgJoiCN"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("4ni1nho89cDKAQ9ddbNQA9ieLYpzvJVmJpuogu5Ct5ur"), baseTokenDecimals: 6, }); export const seededUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("n7VuBP5qpMt2fZxNevR2gtxsgogDv22GJsj5f2WNJCN"), farmTokenMint: new PublicKey("H15WptGntFQifZmJHUzYBV9Mv7P27ofavEsF6yqpLTdX"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("H7gyTmNCDXkD8MGMqnxqoD8ANszjcju4tjT6ERZ5dakf"), baseTokenDecimals: 6, }); export const audioUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("DvzYNQoPYFWQCjBs6rxvMmarcKMiEaQHC7sWVAm5K2XM"), farmTokenMint: new PublicKey("BbRVh76k2jYsSWnd7qpDQ8ptzVzgRq67viK6tAFEkB8z"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("3hksYA17VxgiKSeihjnZkBbjc2CTbEBfvDCYgQhojTo5"), baseTokenDecimals: 6, }); export const mmaUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("C54TkajKsLqHZP1taiayDAaAHrr6KBmCVRT1BuZHxa9q"), farmTokenMint: new PublicKey("H9qkbU2XYSQTk6JJJ2TMuZBthfkeCHigmuxB5jiQaamn"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("AaZRnJAnDyJyPD9uPJpJ8bzBGDCEi6jtBpUf92xErWPp"), baseTokenDecimals: 6, }); export const onesolSolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("64zLHH6zA8yuLxxPAgbVx5Cp9F8afHZWSyUndHsFBP95"), farmTokenMint: new PublicKey("Hva9oLa2GjoKdB45WoHujsX7MTpehByPshMrQpNDmkFq"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("9wPhuYapychVDSxmXqCZxy2Ka8Lmav4SHM72si8bfraV"), baseTokenDecimals: 6, }); export const puffSolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("Gp4r2PFLSf9Y1Y1K46gpEYsM7mkFNVY4Ga7s6YXZmxGD"), farmTokenMint: new PublicKey("Ge5kuYg5PekrPUeKzngw97Cnfngj8j6NCX5q1jTBkWSW"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("Eho8h1BcoG5QWU7X9FzJafw5ErKUXtR2LobAJJZfWff4"), baseTokenDecimals: 6, }); export const saoUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("4rKjrmHAmeT6bu3JNhP2NYjFgVHtt71U9yumBDKHTe14"), farmTokenMint: new PublicKey("A9BeGSRJJYXPrMs81rVZxvkk16fopzgG5YkngntgTu7p"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("4iyU77yZbg8iD344vbwruAuDAf9i1EVV3FhZJDnWStBE"), baseTokenDecimals: 6, }); export const srlyv2SolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("9SV2NL59i1PfD72AUHDXa2KT1xWnFD3VyMgfzCRDARW1"), farmTokenMint: new PublicKey("6gkZ7QUmxmwPLS2NK3Dr6YHtTPZs6GQrkA595WSx5iLe"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("3dXdXg5HPyZ73GFC9LkSn3thdJUGeXWB8iSTHs5UcqiH"), baseTokenDecimals: 6, }); export const zbcUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("gBBNuRf5VsGoAEwKzTAaVsPSqTiYLh5VmaxvzvbCEBb"), farmTokenMint: new PublicKey("7Hoi4adCSBzERdvSiUXtVDz79tiDxMD5HpDv7m9rs3Sb"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("2LYgm6nGXmSSjfoEriPuYeGoNiWNxUs7n3rnTbDWN5c7"), baseTokenDecimals: 6, }); export const gmtUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("DbJT9UTTt8U8xAk7BtRWC3nQHxJnNmZdZydUAhJj14TZ"), farmTokenMint: new PublicKey("8EnEoVX1aXkzbTzhrqDQ2aVGybbPpeWZDCYEGjjw1dyG"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("CFxQF5kNAtbbDj298Xr47Sf4mkSyuzWpRH97hrdQ6kxi"), baseTokenDecimals: 6, }); export const novaUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("B8Kv2mjJGvbDnEUX5EHhg1Erg3s7qBYpjDzrmvMMMrRx"), farmTokenMint: new PublicKey("H2jZrZKx1fLY9LPi2ad5G2DVBWzMmUwPQLjRFERUroEH"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("DdAFNvDxtEHCgKj3JAM64zCKfMWhs4J9wEmRrjUAFiME"), baseTokenDecimals: 6, }); export const hbbUsdhAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("cPFH2eNZnyf85RpSkPM2ZG3S4RdedX51ywqSk7kjmp2"), farmTokenMint: new PublicKey("DUGuXcpHX9y6WdTKgDm8XsECbf7pApA7ZvAsjUqHUoYn"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("7n2YW9qLkhGFArdZPLoF4hYPE2zw7xCACkVPXrUWnLuo"), baseTokenDecimals: 6, }); export const takiSrlyv2AqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("ADTFK1eFV3oKCzGex2wHTCctBNYxqSvHv7fN1tnbHBGq"), farmTokenMint: new PublicKey("EkPqSfr4ZiRiLgjZw45QmF36TzZ3EEV51DyRVd2iuhA2"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("6atKbS2Xz5vu7cqWBNk8KYkuakRzckZ9nvtUKf2k8Sc3"), baseTokenDecimals: 6, }); export const zigUsdcAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("CAG4eyg41phvb4KZ1hkfPikbUreZcVTVVH9Rc8yf7ADc"), farmTokenMint: new PublicKey("9nKbvVW9TjdnKt2NbfMaf9PHcg8zWWFgGTBfzUXdFcke"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("5vhh9ZnD9vnahRhFLP1EUEyYRSzvJwgw9U2xygsSJSrp"), baseTokenDecimals: 6, }); export const srlySolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("3851tQsk6PdqWm3pZgPdHaqZcBdNioKxnGM3ah8Yq5rK"), farmTokenMint: new PublicKey("HfkZkoPqZzd7S1F3BhkJN2Es1C5vabVYqfCecXG2MGHP"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("HfRgvhgscGX5GaP3rUrZAhh7gS4aJ2UQ7rNVX976rG6P"), baseTokenDecimals: 6, }); export const takiSrlyAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("FSy7cpNu9gC2Grr8J3pnorm5jTR9D2xHngUS8vZDUeug"), farmTokenMint: new PublicKey("13HwDUH7yREGAwHSWnx4Kgnn6huL8yfCCBqaBr6NGVH6"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("3xaK5aWWLNRB73xUVX3cusLhDp65mTvP4fwW5Jwxakgs"), baseTokenDecimals: 6, }); export const stsolSolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("9bKvCTiVrnSzFPrd4g7Dd9SeEZvKNn3SQ7dMpuE9VKuo"), farmTokenMint: new PublicKey("7ZvhrqdnP2NrQi2YCjQNd8jKJpLDMUuZg4wP7XJPjnVX"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("4jjQSgFx33DUb1a7pgPsi3FbtZXDQ94b6QywjNK3NtZw"), baseTokenDecimals: 6, }); export const btcStsolAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("F2mdxT26uvf16X9vV5ACUqa6FicPBq5fLZkAXXxYxD8b"), farmTokenMint: new PublicKey("GjBW6751wNJ99zYkr9QwSi98bvj1NgyAcYHfQDpemJfq"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("HYp9v7cY4wAxSsa6ijztQQ3GQ8iTttuG5vu8JNBDHoNh"), baseTokenDecimals: 6, }); export const stsolWhethAqFarm: OrcaFarmParams = Object.freeze({ address: new PublicKey("5xpcR2aPqE3WWQa6ZMv6xSmBakdyKBsAi3pmLJj2ARH1"), farmTokenMint: new PublicKey("9V9CavjccKJH66m4MJHzVBYzY2ZM3U3D5xUCP7HSyAUz"), rewardTokenMint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("FWurFWADrgmhb6Y44LEaCMnEHS2Tu3QGqd9oBcZtr8gT"), baseTokenDecimals: 6, }); export const liqUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("AraZDjfmkqzDJ3CdbjjYbtpujUYivgTEKKM2TPf6hJ27"), farmTokenMint: new PublicKey("5rGtJDiJhD5Mx2fvdEYuLrCiWaMD9z3wpmJSxwGHmo4u"), rewardTokenMint: new PublicKey("4wjPQJ6PrkC4dHhYghwJzGBVP78DkBzA2U3kHoFNBuhj"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("57vGdcMZLnbNr4TZ4hgrpGJZGR9vTPhu8L9bNKDrqxKT"), baseTokenDecimals: 6, }); export const stepSolDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("FmHGpt2scyJ8NuDuknnzQ7jectLyRRQmTyXxu5tRoD2j"), farmTokenMint: new PublicKey("Gs1fM7EFS1rXkxhqs4mwu9uvSkupNzZgRbHGxG2NGRh7"), rewardTokenMint: new PublicKey("StepAscQoEioFxxWGnh2sLBDFp9d8rvKz2Yp39iDpyT"), rewardTokenDecimals: 9, baseTokenMint: new PublicKey("GwrBA1F8rGummDCDd8NY9Eu1cLNuJqbT8WaGxgWpFwGL"), baseTokenDecimals: 6, }); export const slrsUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("8JkTAVHXChDPzsNkcJYRJ69mXN5nCcyb1qVBmbVhCH1n"), farmTokenMint: new PublicKey("F3rWkGAtdjWcU1rr16Wq4YPTgFdsyb1oS1xdy5tr9K1r"), rewardTokenMint: new PublicKey("SLRSSpSLUTP7okbCUBYStWCo1vUgyt775faPqz8HUMr"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("66xCxkffQZKBZLiHV3PDcfR8ANJTfnDRxPCaBdv4wxB7"), baseTokenDecimals: 6, }); export const portUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("C8k63XU8xzzvBpSraYWjHCNzvprjYKDadAML3MWSFbxW"), farmTokenMint: new PublicKey("Zm2dmUuuBicmvHxGAnAzaohZR2Y86gXEV2WMfo8AoCa"), rewardTokenMint: new PublicKey("PoRTjZMPXb9T7dyU7tpLEZRQj7e6ssfAE62j2oQuc6y"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("4CGxvZdwiZgVMLXiTdJHTkJRUTpTSJCtmtCRbSkAxerE"), baseTokenDecimals: 6, }); export const copeUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("HW21NT7v6ViM2Cs3S2tVgUnawACF8JRRwd2AA41a8HUh"), farmTokenMint: new PublicKey("AtcMEt9caZxpunQV99pxED2rhpQmaDykBreEqBsYU11v"), rewardTokenMint: new PublicKey("8HGyAAB1yoM1ttS7pXjHMa3dukTFGQggnFFH3hJZgzQh"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("9SDpBrfqNxjXcCzpKWM6yUKdfky975VJBD6xcu5cKf5s"), baseTokenDecimals: 6, }); export const bopUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("GYipJSPD7zcDoEABRCZfDSqh7zqYMmjyP8dNKEUnW1iC"), farmTokenMint: new PublicKey("CjGUbKiH1QmFFjMqhAbJn4DrbjgBWUhQHV4LuzrgpFqi"), rewardTokenMint: new PublicKey("BLwTnYKqf7u4qjgZrrsKeNs2EzWkMLqVCu6j8iHyrNA3"), rewardTokenDecimals: 8, baseTokenMint: new PublicKey("A7vvbqENJj8kED3ABjphe8TvwpasQYtoWGKpjpLArMxa"), baseTokenDecimals: 6, }); export const samoUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("8VJT2SYGXgvQ8jYvh1Cq6mg83gkAVuTY3cHiULUy6Cit"), farmTokenMint: new PublicKey("EdfAy8jwnvU1z61UaFUjwoRPFgD3UkkPvnhEBZjzwhv8"), rewardTokenMint: new PublicKey("7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU"), rewardTokenDecimals: 9, baseTokenMint: new PublicKey("9voVuTq1S9bFZkF2Jo44HoVG63w2xDRT8eBzB23YbQud"), baseTokenDecimals: 6, }); export const whapiUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("GFFQdLWvbWzrZBQrPQVyzGQfd6SWuZaiRwmkKA2bJPeY"), farmTokenMint: new PublicKey("41VBoy8SGJzQnWGcxiBL4yM6H68FiPp74aMvsZGNGCbt"), rewardTokenMint: new PublicKey("6VNKqgz9hk7zRShTFdg5AnkfKwZUcojzwAkzxSH3bnUm"), rewardTokenDecimals: 9, baseTokenMint: new PublicKey("Bfoi3RNnfdP5VeRGqvTA8MRN9ePGJoZgeKfe8WeBHUxE"), baseTokenDecimals: 6, }); export const slimUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("3RsBqqz9MiXa1uhFFd6tpGVQ66ptkFPCBAUyqLAXeCTE"), farmTokenMint: new PublicKey("HhDk3ySWkVbMZjgBsFSnLtAeudDCrfZ6DNSRgxh2oRUp"), rewardTokenMint: new PublicKey("xxxxa1sKNGwFtw2kFn8XauW9xq8hBZ5kVtcSesTT9fW"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("3K7aZhtwWJ2JS6GnbbgeDVnxd1q2hwhqasmgRsAMZ4yC"), baseTokenDecimals: 6, }); export const ninjaSolDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("HPeAGzDEhYUNm4z4aV2PTjVjbESnNg6jBy6LtFjFJzQj"), farmTokenMint: new PublicKey("Db7mPGrZbswvFmJ7MgZsM6CFhnXHMnrUDqr2hrzmi7Re"), rewardTokenMint: new PublicKey("FgX1WD9WzMU3yLwXaFSarPfkgzjLb2DZCqmkx9ExpuvJ"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("7YyhptkxY81HPzFVfyCzA5UXxWdsNRD41ofLva3TuSpd"), baseTokenDecimals: 6, }); export const atlasUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("DTP1xr4EzFf1YDu4CeWTtWVsCBzFPk4HDEsL3AzoR3kB"), farmTokenMint: new PublicKey("894ptAFT7d3inPsWTniCGL2NZpJDiXGvFZFfuHXA1w8F"), rewardTokenMint: new PublicKey("ATLASXmbPQxBUYbxPsV97usA3fPQYEqzQBUHgiFCUsXx"), rewardTokenDecimals: 8, baseTokenMint: new PublicKey("HFmY1ggCsCky1zJ1sfdkNR4zb3u5n38YNRdf4vsGu17t"), baseTokenDecimals: 6, }); export const polisUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("7h1zAHj2xzEw3eKfprYqG36aN5XwcZXBsYwM2haWQVzR"), farmTokenMint: new PublicKey("FE1QJzi5RA5aKnTfSV3DAMN3z4uHUzSR5Z4drs9S5vB"), rewardTokenMint: new PublicKey("poLisWXnNRwC6oBu1vHiuKQzFjGL4XDSu4g9qjz9qVk"), rewardTokenDecimals: 8, baseTokenMint: new PublicKey("63JUKLnCAuNMPSPioEgbjjzp9Qk8qSEEM8eZqEtPqfLU"), baseTokenDecimals: 6, }); export const abrUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("98htZRc2QNd8BS9GGHoxkySZ9BiL9MAgHLEQfxzXYKk6"), farmTokenMint: new PublicKey("7bp7psdaC3DVc86Hmdz5tAMEjgPjmCzgFEVALfqBwMmz"), rewardTokenMint: new PublicKey("a11bdAAuV8iB2fu7X6AxAvDTo1QZ8FXB3kk5eecdasp"), rewardTokenDecimals: 9, baseTokenMint: new PublicKey("5uR5STASUmoGVHzqMeut98t26TfVkQqWU9f9dsv3NfJ6"), baseTokenDecimals: 6, }); export const kuroUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("BK3VXXDA4KxVurHbP3yPytGWp1HifbBtB4ugpzfDeq4v"), farmTokenMint: new PublicKey("88RCQs9VFvqPjsRe3PKNzBeMtzCS9oS1a1CJuAnGnLZJ"), rewardTokenMint: new PublicKey("2Kc38rfQ49DFaKHQaWbijkE7fcymUMLY5guUiUsDmFfn"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("6PGoaQdL9e463hdaFxHXsuPcjCHRK32CQ9PFKxvM7XY2"), baseTokenDecimals: 6, }); export const msolUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("5fhDMuGKRDPWVWXf7BBEwifRFrp6XwXctDQoG7UHGVt6"), farmTokenMint: new PublicKey("9y3QYM5mcaB8tU7oXRzAQnzHVa75P8riDuPievLp64cY"), rewardTokenMint: new PublicKey("MNDEFzGvMt87ueuHvVU9VcTqsAP5b3fTGPsHuuPA5ey"), rewardTokenDecimals: 9, baseTokenMint: new PublicKey("5r3vDsNTGXXb9cGQfqyNuYD2bjhRPymGJBfDmKosR9Ev"), baseTokenDecimals: 6, }); export const orcaMsolDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("41ZYSekqDNtJ1BdGkTZVR1CJfBiFrud6HcT3HVUdSyWN"), farmTokenMint: new PublicKey("876yhw4J4GHyynNJUtARYEnWGaejhrWC7Hy3DAm1pZxi"), rewardTokenMint: new PublicKey("MNDEFzGvMt87ueuHvVU9VcTqsAP5b3fTGPsHuuPA5ey"), rewardTokenDecimals: 9, baseTokenMint: new PublicKey("3Duk5b6fLztPmS4ryV48FM1Q9WXUSMwz9jehAT4UtqpE"), baseTokenDecimals: 6, }); export const msolSolDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("2SciNw7cEsKJc1PMRDzWCcEzvuScmEaUgmrJXCi9UFxY"), farmTokenMint: new PublicKey("576ABEdvLG1iFU3bLC8AMJ3mo5LhfgPPhMtTeVAGG6u7"), rewardTokenMint: new PublicKey("MNDEFzGvMt87ueuHvVU9VcTqsAP5b3fTGPsHuuPA5ey"), rewardTokenDecimals: 9, baseTokenMint: new PublicKey("3RTGL7gPF4V1ns1AeGFApT7cBEGVDfmJ77DqQi9AC6uG"), baseTokenDecimals: 6, }); export const stsolWstethDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("EmWtmApj1PtJMgMfzbYMmnmtuwfcBy7es3Tg2AR8xfW6"), farmTokenMint: new PublicKey("5WXyG6zL1HmESPCSHHKBtqLuRPZCNgd9mTB25op87FkU"), rewardTokenMint: new PublicKey("HZRCwxP2Vq9PCpPXooayhJ2bxTpo5xfpQrwB1svh332p"), rewardTokenDecimals: 8, baseTokenMint: new PublicKey("3kT3oYuS1rCfhmqfgy6EKcbZdaJimaVEjoy25QiuEaoj"), baseTokenDecimals: 6, }); export const sypUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("gpy1dZRbPbLZ2KNr4wd2r9zoxERbWV8gWTqTL47KNnh"), farmTokenMint: new PublicKey("BpHfwFwJwkZKWY5xVMC3oifMvWRy42R4VE1vPeBzg2G1"), rewardTokenMint: new PublicKey("FnKE9n6aGjQoNWRBZXy4RW6LZVao7qwBonUbiD7edUmZ"), rewardTokenDecimals: 9, baseTokenMint: new PublicKey("Ds4VGZhZzS2PMFzhzKeC3mwcQjdiCG21R76fTVbsSJyJ"), baseTokenDecimals: 6, }); export const mndeMsolDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("C9AfeUkti1ykMTebw9N1WoiEhNqwNiXinfXBwuLUv1BT"), farmTokenMint: new PublicKey("2FMpVEhvxiFxhfideFUMNxCoUZK3TfhezzajoHGTQKP2"), rewardTokenMint: new PublicKey("MNDEFzGvMt87ueuHvVU9VcTqsAP5b3fTGPsHuuPA5ey"), rewardTokenDecimals: 9, baseTokenMint: new PublicKey("2wPsMuzhEsC6GhV3qtFpmJF6atEgLGbnmQ8U43Y6fPxZ"), baseTokenDecimals: 6, }); export const msolUsdtDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("FNV9pGMWTYSMq5dRhmjpRwHpDJKV6JD4HTKsqZndKvuY"), farmTokenMint: new PublicKey("7iKG16aukdXXw43MowbfrGqXhAoYe51iVR9u2Nf2dCEY"), rewardTokenMint: new PublicKey("MNDEFzGvMt87ueuHvVU9VcTqsAP5b3fTGPsHuuPA5ey"), rewardTokenDecimals: 9, baseTokenMint: new PublicKey("Afvh7TWfcT1E9eEEWJk17fPjnqk36hreTJJK5g3s4fm8"), baseTokenDecimals: 6, }); export const msolWhethDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("D6oqo3F2KkJcePDoNZfbb8F7SPnRhP7WCC9FNktzVCDT"), farmTokenMint: new PublicKey("3kFeVJUxhQS7PE7vV8pt9bhTCQrUDqeGf6AU4sjkLzVt"), rewardTokenMint: new PublicKey("MNDEFzGvMt87ueuHvVU9VcTqsAP5b3fTGPsHuuPA5ey"), rewardTokenDecimals: 9, baseTokenMint: new PublicKey("58nifjPjF3CutGz2xMxvAMk7R9YgbVEc8Cstj4rCcs8j"), baseTokenDecimals: 6, }); export const btcMsolDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("Cn7QNyosNQ8DyKEeMDPmtg66R7vKMXigcQ561kTkFD8E"), farmTokenMint: new PublicKey("6uA1ADUJbvwYJZpzUn9z9LuyKoRVngBKcQTKdXsSivA8"), rewardTokenMint: new PublicKey("MNDEFzGvMt87ueuHvVU9VcTqsAP5b3fTGPsHuuPA5ey"), rewardTokenDecimals: 9, baseTokenMint: new PublicKey("DzpLz78wuwyFsQToin8iDv6YK6aBEymRqQq82swiFh7r"), baseTokenDecimals: 6, }); export const ivnSolDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("9DNgTpphCRXhkf8ySiSnf1L2CHwACZybgPNwsnLUdzfA"), farmTokenMint: new PublicKey("5X71f6zUnVYWSxWM8wf942pzWLv1ZtCDhGCYqZipYutD"), rewardTokenMint: new PublicKey("iVNcrNE9BRZBC9Aqf753iZiZfbszeAVUoikgT9yvr2a"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("HqajzzbGMST3yCCVBJuXvNVsWkY2DXqiBz9cTRmmyBMy"), baseTokenDecimals: 6, }); export const larixUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("GnFV3S7H6eM9V12EJwptv111VmV7W3AnEEfzdHJL25n7"), farmTokenMint: new PublicKey("Huy453KXTaWaA3AiJeqLrAWWSMwoGjFU8nsEi7GiPY7n"), rewardTokenMint: new PublicKey("Lrxqnh6ZHKbGy3dcrCED43nsoLkM1LTzU2jRfWe8qUC"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("DNAGfa7tK8csprRQmiDUwDaFfhw6ueHhVFHTCgTJ8HGs"), baseTokenDecimals: 6, }); export const gofxUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("EVDvbsD5f1qz7FpVyknrzB3bLK86FHfqVbcH9WqpWZtK"), farmTokenMint: new PublicKey("BzZ3mLyXEaGt1Na1zxfZYjRJBFDbDckurc2LDq46irUx"), rewardTokenMint: new PublicKey("GFX1ZjR2P15tmrSwow6FjyDYcEkoFb4p4gJCpLBjaxHD"), rewardTokenDecimals: 9, baseTokenMint: new PublicKey("B95rdqSY4dqPwmt295XwBZZqZJYLmqDNXU6NvBpT4ep4"), baseTokenDecimals: 6, }); export const woofUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("9M9JKUWatibJKghbDDjHXLGGY18dLPLHgs6a4WiP9EAe"), farmTokenMint: new PublicKey("G6kaJ4NrCS9VoNgPiMuR5ENFrGJBfMe98PXFgVYkBKts"), rewardTokenMint: new PublicKey("9nEqaUcb16sQ3Tn1psbkWqyhPdLmfHWjKGymREjsAgTE"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("4HaQXDz9gdLgKUjvNVtnLyNZoWNYKjh3XxH1TpLgiwmi"), baseTokenDecimals: 6, }); export const sdogeUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("J3AmdMedeE1mhwbZzZFysER8CZdMqxL3HoyLxCmub9mc"), farmTokenMint: new PublicKey("3upLraKWWJ3Tv8JgwygBszT1nQwksYBnx2XWEgaGMTt6"), rewardTokenMint: new PublicKey("8ymi88q5DtmdNTn2sPRNFkvMkszMHuLJ1e3RVdWjPa3s"), rewardTokenDecimals: 0, baseTokenMint: new PublicKey("4kXYyZAMBdvgDaBKUGvRWJnHw9af7sCUPvpQ68PEdP8b"), baseTokenDecimals: 6, }); export const catoUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("7YMRTqXna5vtCkncV6hxhUd7qCrv621iRq96b7LYySR2"), farmTokenMint: new PublicKey("2YbEbQD8DP8QyRQnp7CXwdD6BqeJsry4MkWZgxovZPMm"), rewardTokenMint: new PublicKey("5p2zjqCd1WJzAVgcEnjhb9zWDU7b9XVhFhx4usiyN7jB"), rewardTokenDecimals: 9, baseTokenMint: new PublicKey("BHtZnTBMeY4EBEW5egGnuK5bdW12v6Dod6wFav79AyYx"), baseTokenDecimals: 6, }); export const oogiUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("F1jqYgps3MsGvWJ9WKq7NYx1eT4xjPDruFtQ9gMD1pLk"), farmTokenMint: new PublicKey("3CiL5pm15BiLH8PBrhx7uFJr2uYoeBNZk55kuphp48Py"), rewardTokenMint: new PublicKey("H7Qc9APCWWGDVxGD5fJHmLTmdEgT9GFatAKFNg6sHh8A"), rewardTokenDecimals: 9, baseTokenMint: new PublicKey("FiwSk36yi1DNWcuQUeNipAc1VKxa9Wv9AR2xFvyKUxAE"), baseTokenDecimals: 6, }); export const sonarUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("E3hyqjh9R7UWMwkMSxYHws4qdnpMSzXwkuJfVcEfmJwb"), farmTokenMint: new PublicKey("9tpC9vawMtim6q3MaQHfPPwFnnErh58qXhdqczS2p7sd"), rewardTokenMint: new PublicKey("sonarX4VtVkQemriJeLm6CKeW3GDMyiBnnAEMw1MRAE"), rewardTokenDecimals: 9, baseTokenMint: new PublicKey("GWmwwMGYBG4NqYdnsYrudzBnbgDC49MkBxdzhfLA9kVY"), baseTokenDecimals: 6, }); export const upsUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("8V2RqGTNmz2xYBdonfvkLstGWV7ibHopoZMQeaV9rykb"), farmTokenMint: new PublicKey("9Ux3QdsLpLXCNFsACXjp4F2D5ihkWZnVhdDiTDTvw2Ny"), rewardTokenMint: new PublicKey("EwJN2GqUGXXzYmoAciwuABtorHczTA5LqbukKXV1viH7"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("9fuv3emLQXECrTWqm2HaKT3wQhmvmgqmReZSMcu8PfpH"), baseTokenDecimals: 6, }); export const fantUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("2J5exwdrNhqK1y1DF5jPQV2JieZ5xBsR3jDrZRh8PfPZ"), farmTokenMint: new PublicKey("FftGKB7DThU5N96xYQ8BWkRBpFTKDvSzN7hCCNxuypsE"), rewardTokenMint: new PublicKey("FANTafPFBAt93BNJVpdu25pGPmca3RfwdsDsRrT3LX1r"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("C2EcthTMaC5eATXVaXg5ctvMfUYYgFyNibybHes5D3S6"), baseTokenDecimals: 6, }); export const stsolUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("HhBtZgPaFb5rodxXsZbtZUqxk2vEg6tdzM4AcaG2PjcL"), farmTokenMint: new PublicKey("CejKA1pePxny3iprRDEyiojfTKNxxX2bjmKToDGZqwvh"), rewardTokenMint: new PublicKey("HZRCwxP2Vq9PCpPXooayhJ2bxTpo5xfpQrwB1svh332p"), rewardTokenDecimals: 8, baseTokenMint: new PublicKey("3u2dNfGuU6C3vmSg5EvLPUpX57b3niqhWBV5Gc3WDEf5"), baseTokenDecimals: 6, }); export const wmpUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("2aUMqCFWK3PKeScspP4SqRFS7fag18TDHv2VsaBfSS72"), farmTokenMint: new PublicKey("4SWDBKeb44RQMYmyorUiuF94Fqf1toketzJyvLSjVtHN"), rewardTokenMint: new PublicKey("BygDd5LURoqztD3xETc99WCxLUbTi6WYSht9XiBgZ4HW"), rewardTokenDecimals: 9, baseTokenMint: new PublicKey("Ce3VXSQGFEHqrQSEzcVb2Ro88Mcn56cYBUAXFx5tL9bo"), baseTokenDecimals: 6, }); export const chicksUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("61uQt5e3Vd3cps6mS5xnL1UVLe3rwNS4aDaa3F2V7h3z"), farmTokenMint: new PublicKey("3EPqpch8B8nk37gcxKCnQ5n6VSu4NyetcyZen636NYfb"), rewardTokenMint: new PublicKey("cxxShYRVcepDudXhe7U62QHvw8uBJoKFifmzggGKVC2"), rewardTokenDecimals: 9, baseTokenMint: new PublicKey("GTcxXu3yw7yotq2UtAMvpEbx84ozJyrBwy77Cmem7m4X"), baseTokenDecimals: 6, }); export const unqUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("G5cvdbZwbwAV4eW8ENQy5tmbzaJu8TbdgF5MLXgLPXj3"), farmTokenMint: new PublicKey("75jdeQfjFnNzg4dSbkA3HxTN63hXo99MrpafDJsz5Gcy"), rewardTokenMint: new PublicKey("UNQtEecZ5Zb4gSSVHCAWUQEoNnSVEbWiKCi1v9kdUJJ"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("CsGTrgJ6oLx9UQow9aLjuAacjXTY53zT8B2FnAbfVZAS"), baseTokenDecimals: 6, }); export const meanUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("9TQ4HQXymNLVKEMve5peFXst5VPDXX1oZ8VTVuQeG7W7"), farmTokenMint: new PublicKey("FaFGyRihhc8XUqWXNrVAd6gjRsyJ98mogonH4EN8WUPb"), rewardTokenMint: new PublicKey("MEANeD3XDdUmNMsRGjASkSWdC8prLYsoRJ61pPeHctD"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("3h2VBX8533NB8eEH8rPXMdayodFDbgTHpbav6JqLZAQq"), baseTokenDecimals: 6, }); export const wagUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("5dA9HWoFnBagq25bpMPA79bKxQkQ6YXvBtYQn6Le6vyp"), farmTokenMint: new PublicKey("BYno9HNAiLoi7K8Wa5c1f5EE7hukzZPUQZDesGxBPzhh"), rewardTokenMint: new PublicKey("5tN42n9vMi6ubp67Uy4NnmM5DMZYN8aS8GeB3bEDHr6E"), rewardTokenDecimals: 9, baseTokenMint: new PublicKey("8Wu5sJpERA1J5iWcT8aMpt9cTAfKDLPbLpGjNsJoPgLc"), baseTokenDecimals: 6, }); export const shdwUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("GJ9EixfM3noFT1b7Y5uAzV1qJSFev5uPaRrmfMoibck6"), farmTokenMint: new PublicKey("HPv7XJ16t4pZVNTBPHoYY19xiv4pHjjSbarE7Km3jJ1R"), rewardTokenMint: new PublicKey("SHDWyBxihqiCj6YekG2GUr7wqKLeLAMK1gHZck9pL6y"), rewardTokenDecimals: 9, baseTokenMint: new PublicKey("7WWHfufv8vuBC1x7GXA3pu7kgNhEQkXoq3CtbaQihAJ9"), baseTokenDecimals: 6, }); export const shdwSolDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("2EHJ8ToKpJfXyAfechjH9QSbVMKTSViYPdJRepQz7V8S"), farmTokenMint: new PublicKey("8HgXuNigmLvfsgDun1vQso6pBuj7sVvDqpcergjtu3dz"), rewardTokenMint: new PublicKey("SHDWyBxihqiCj6YekG2GUr7wqKLeLAMK1gHZck9pL6y"), rewardTokenDecimals: 9, baseTokenMint: new PublicKey("BDStVBt4NS5bfda25ubK51kVRioV4yjKKCPbe96jeEms"), baseTokenDecimals: 6, }); export const aartUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("BKFSHwhqDHRFM3PzNh7BG1vgxtEbx1A9Co1JN6z9SLYz"), farmTokenMint: new PublicKey("FvmyENsZf68ezNbHxRqv1hAb7phfhdnXMfQm74Vcpnkn"), rewardTokenMint: new PublicKey("F3nefJBcejYbtdREjui1T9DPh5dBgpkKq7u2GAAMXs5B"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("Bg7pZq7KdsQsnCQBeNpa4XVnrWfjUJNu3ViHoNB7YUZU"), baseTokenDecimals: 6, }); export const basisUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("DasaXe2Wqcks6csFv1bWwdW41mV8rMD5c27Uw9rFYVu4"), farmTokenMint: new PublicKey("8XtNSYBhLHa4cYzNsXd6yDAweMECumrxFJ7F2qxk2xN"), rewardTokenMint: new PublicKey("Basis9oJw9j8cw53oMV7iqsgo6ihi9ALw4QR31rcjUJa"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("4yx2aHMa7N4m1uUaBRy9QPtpstw3HFPtvcCPJQaGFHKL"), baseTokenDecimals: 6, }); export const slcUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("DdYbYsTgpp3pBdGhN9sSdgRJs4ijKZQuDqzqKz6qmScs"), farmTokenMint: new PublicKey("6VWtaecVXHuorMwVrZ4GAnYC3T5MG1YdQLYNPGyWzQHh"), rewardTokenMint: new PublicKey("METAmTMXwdb8gYzyCPfXXFmZZw4rUsXX58PNsDg7zjL"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("X8GnAvxq942xXjNzqYPFQQ9JstJQNEA81uPeNoQpgrN"), baseTokenDecimals: 6, }); export const wustSolDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("6p47BJ5d9JmywGpbZa8MapJmhcLdu5w2uNg9NQTJKvi"), farmTokenMint: new PublicKey("BkcNGF6iV6NTfoH1ocoywXrfDpPWiWUu7eARBT42e57v"), rewardTokenMint: new PublicKey("F6v4wfAdJB8D8p77bMXZgYt8TDKsYxLYxH5AFhUkYx9W"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("F49Cm3srGucQCBanA2xL7nSKHfH1QZd9vLdFtkg4LKnq"), baseTokenDecimals: 6, }); export const wustUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("87ArJQZCaUwLkZfaRHbjU8geq6F8HsFcCtoppCV7Buby"), farmTokenMint: new PublicKey("DGxLh6BykS8C4zLrBRRD4cHZRdy73eVqZ5283JkAdU7d"), rewardTokenMint: new PublicKey("F6v4wfAdJB8D8p77bMXZgYt8TDKsYxLYxH5AFhUkYx9W"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("2mhVUMsG7eb3XhHjAbKpRZgWNyGZNCiWU7dRxauzZaGL"), baseTokenDecimals: 6, }); export const msolWustDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("5z183wdSnkc1k9EmnXncE66VQYYLn8MkxG9gJTo5gabj"), farmTokenMint: new PublicKey("2q4rZYZgicviVBsb8CTWGR3bGWys3ePFDYtrayyQpwyi"), rewardTokenMint: new PublicKey("F6v4wfAdJB8D8p77bMXZgYt8TDKsYxLYxH5AFhUkYx9W"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("6wqME6zPQzGDLugpnwZnVBKBbATC5nTaEa781Vj98yvM"), baseTokenDecimals: 6, }); export const wlunaWustDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("4G49eoJrt6DGWnVR84tgNzw987cjwD4cPYd3SUuo6mrd"), farmTokenMint: new PublicKey("HQnMrrLP5RxYN6Peuu9cfDNQK81yd3TtBt3ZCjoD8UAf"), rewardTokenMint: new PublicKey("F6v4wfAdJB8D8p77bMXZgYt8TDKsYxLYxH5AFhUkYx9W"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("3ZGKT28NXAqb2YtUAMvKixQvHNHT31Q5mK8AC2iBMs29"), baseTokenDecimals: 6, }); export const stsolWustDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("CXbiLWJoYcVmV7GcF9xSwwMPSgHh5rHRLJB84F54R4qU"), farmTokenMint: new PublicKey("DxiftFoeRxHk15N4rDYzpwtGhfK3LqSn4gWDCaEkMksE"), rewardTokenMint: new PublicKey("HZRCwxP2Vq9PCpPXooayhJ2bxTpo5xfpQrwB1svh332p"), rewardTokenDecimals: 8, baseTokenMint: new PublicKey("3Q44iV4URXdbS4Tk1PGs5VdWQoCxHB7zdcdMnemo8jfH"), baseTokenDecimals: 6, }); export const cmfiUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("E5m2jmo8DhLiY93nh95K4XCxvZgt66JzaJnwyt5CPmVR"), farmTokenMint: new PublicKey("Dr7ks8oV6iRTT2R2uqE4x6Egmg3djt14aCEciNhq3SF9"), rewardTokenMint: new PublicKey("5Wsd311hY8NXQhkt9cWHwTnqafk7BGEbLu8Py3DSnPAr"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("E8RVjS24pBuF3oCCeJVAgC4RQ7mVa5P3FGXqGbiczzvD"), baseTokenDecimals: 6, }); export const hbbUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("CvYum3awvbxPVa5FpZRBs97Prg5GDmLha4X6mggX7R1p"), farmTokenMint: new PublicKey("FYdet59VXibMU8FhnbZamZTVMsjnCyNevUqzWUrJfGum"), rewardTokenMint: new PublicKey("HBB111SCo9jkCejsZfz8Ec8nH7T6THF8KEKSnvwT6XK6"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("BxPd4x7gm6WQF6jsDCRQuQVZ2bopQ4KegMrqyQgdkPDk"), baseTokenDecimals: 6, }); export const celoUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("DrDpUFTvHjznYEugMqcXTqspdmQ6GZhuBzjodU7A6qWU"), farmTokenMint: new PublicKey("4EUgJ5LSF3UDVbVAYzqE133NXAxfhHZSvqx214EJkNkQ"), rewardTokenMint: new PublicKey("a11bdAAuV8iB2fu7X6AxAvDTo1QZ8FXB3kk5eecdasp"), rewardTokenDecimals: 9, baseTokenMint: new PublicKey("9RRBDWZGWGVnHgazCpb9R1XApmHLBDya8Tq1yrzoMsKY"), baseTokenDecimals: 6, }); export const sbUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("74hUtc4MaZUt4YDDjVSqHyUbPT8kbxW16mbAharpZhPV"), farmTokenMint: new PublicKey("EdkL9TXiT2NV1LND5nj4kR1L9SYjozWpJvbcStvrUUJF"), rewardTokenMint: new PublicKey("SuperbZyz7TsSdSoFAZ6RYHfAWe9NmjXBLVQpS8hqdx"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("3Wppx86xN7Dg7GLUTD9C7AqCt68qZkWzNYUdCS7t1pCk"), baseTokenDecimals: 6, }); export const ftmUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("7cYU6ux4GwB1X2FKaRruQ9dbDZKUrxZAaWGNJfeoHeGJ"), farmTokenMint: new PublicKey("4r3uYr4Ph4ctw1chiUaAtwon4stFGHqbSJ6Lym139rM9"), rewardTokenMint: new PublicKey("a11bdAAuV8iB2fu7X6AxAvDTo1QZ8FXB3kk5eecdasp"), rewardTokenDecimals: 9, baseTokenMint: new PublicKey("E7Af9Fa2U1YqEkQpAYjXwDB5TJUou9VcN3ot33Gj6UY9"), baseTokenDecimals: 6, }); export const stsolUsdtDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("AihUw1sSxuzL2i1ELWMXmiRT3UgyRds68iNXwFKbyQnP"), farmTokenMint: new PublicKey("2kftNiMcrjp9CRqtoLZNwApGEoirfunHPvunenGLz17y"), rewardTokenMint: new PublicKey("HZRCwxP2Vq9PCpPXooayhJ2bxTpo5xfpQrwB1svh332p"), rewardTokenDecimals: 8, baseTokenMint: new PublicKey("CtvKaRLzCzRZCcYPwai7NCYBK4ArBj2oD6BfvMgJoiCN"), baseTokenDecimals: 6, }); export const seededUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("EsSWWXMipKC4aVHcKjkYdvNjKphxk86DGCYhdF2huoso"), farmTokenMint: new PublicKey("AjCuWDEZYC9FuwdYpdAy4vLoY6PxMNF8xitQeaNZd1nW"), rewardTokenMint: new PublicKey("seedEDBqu63tJ7PFqvcbwvThrYUkQeqT6NLf81kLibs"), rewardTokenDecimals: 9, baseTokenMint: new PublicKey("H15WptGntFQifZmJHUzYBV9Mv7P27ofavEsF6yqpLTdX"), baseTokenDecimals: 6, }); export const onesolSolDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("2GpXwBPbooPwqxLuM1bW9FaSK5hxaJqNkr7WdPsjoPca"), farmTokenMint: new PublicKey("DuTybhuJgwECRHDLgtrBuKnfhxve2zXoYXD6cnDikzoT"), rewardTokenMint: new PublicKey("4ThReWAbAVZjNVgs5Ui9Pk3cZ5TYaD9u6Y89fp6EFzoF"), rewardTokenDecimals: 8, baseTokenMint: new PublicKey("Hva9oLa2GjoKdB45WoHujsX7MTpehByPshMrQpNDmkFq"), baseTokenDecimals: 6, }); export const mmaUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("7w9ztS9wcnsk2gqCEvKmQFUBbwhPZPfb5CXhC2onUWXs"), farmTokenMint: new PublicKey("9hSvWrDqgAr7E8sWpatomKcgAGy3hvgAWPXtGPySNbsy"), rewardTokenMint: new PublicKey("MMAx26JtJgSWv6yH48nEHCGZcVvRbf9Lt9ALa7jSipe"), rewardTokenDecimals: 9, baseTokenMint: new PublicKey("H9qkbU2XYSQTk6JJJ2TMuZBthfkeCHigmuxB5jiQaamn"), baseTokenDecimals: 6, }); export const puffSolDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("HNTRmR36ZXBNakYpfPPq7VJaXzLrNY6hN1Xz9p5s8wWA"), farmTokenMint: new PublicKey("Grn1ipjetWK7sz5Bq9S1nwD7F7dUsFzM44diFxbMruvK"), rewardTokenMint: new PublicKey("G9tt98aYSznRk7jWsfuz9FnTdokxS6Brohdo9hSmjTRB"), rewardTokenDecimals: 9, baseTokenMint: new PublicKey("Ge5kuYg5PekrPUeKzngw97Cnfngj8j6NCX5q1jTBkWSW"), baseTokenDecimals: 6, }); export const saoUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("9eVq1gfxbgRpX8W4XctocHEm2U8eT5KzTcnMduFThoz1"), farmTokenMint: new PublicKey("47PY3ET5oziYHEt1mddYFE7opJnqPbp98yZ1xf6cpgER"), rewardTokenMint: new PublicKey("2HeykdKjzHKGm2LKHw8pDYwjKPiFEoXAz74dirhUgQvq"), rewardTokenDecimals: 9, baseTokenMint: new PublicKey("A9BeGSRJJYXPrMs81rVZxvkk16fopzgG5YkngntgTu7p"), baseTokenDecimals: 6, }); export const srlyv2SolDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("7GAp1xR64GjjbyHbvE28Rt9xLEBLTjk4W3AemRMvTcrS"), farmTokenMint: new PublicKey("4Xtia3w6AKBNPCYmFZCAQV8CNwUmHYrVQiNMEGdMkRMg"), rewardTokenMint: new PublicKey("RLYv2ubRMDLcGG2UyvPmnPmkfuQTsMbg4Jtygc7dmnq"), rewardTokenDecimals: 9, baseTokenMint: new PublicKey("6gkZ7QUmxmwPLS2NK3Dr6YHtTPZs6GQrkA595WSx5iLe"), baseTokenDecimals: 6, }); export const zbcUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("AMVd1e1mvWxvJ9LPU3GWjRQ7bfhkwVB69RiL5oRkyAtC"), farmTokenMint: new PublicKey("2ygRp6eeFaBmfEZngpkVwuVs8hmRbe3FMnF4qiJiFzhT"), rewardTokenMint: new PublicKey("zebeczgi5fSEtbpfQKVZKCJ3WgYXxjkMUkNNx7fLKAF"), rewardTokenDecimals: 9, baseTokenMint: new PublicKey("7Hoi4adCSBzERdvSiUXtVDz79tiDxMD5HpDv7m9rs3Sb"), baseTokenDecimals: 6, }); export const novaUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("DQW177Qu36iFAjeXmywHPoeBVvVHa6ngwm2RWzL6ffVj"), farmTokenMint: new PublicKey("22MzBGjYuoZuAyoXEnNSAxBatpRwUFhDzusY1NboiMLj"), rewardTokenMint: new PublicKey("BDrL8huis6S5tpmozaAaT5zhE5A7ZBAB2jMMvpKEeF8A"), rewardTokenDecimals: 9, baseTokenMint: new PublicKey("H2jZrZKx1fLY9LPi2ad5G2DVBWzMmUwPQLjRFERUroEH"), baseTokenDecimals: 6, }); export const hbbUsdhDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("9qCNAmcuo8odN67UJopN7BEKXBfT2kc7xf98612Ria1z"), farmTokenMint: new PublicKey("8Lb3tMPCUwYPWDRWsujSHs2grXBssXm8GdXyn3zh1GmU"), rewardTokenMint: new PublicKey("HBB111SCo9jkCejsZfz8Ec8nH7T6THF8KEKSnvwT6XK6"), rewardTokenDecimals: 6, baseTokenMint: new PublicKey("DUGuXcpHX9y6WdTKgDm8XsECbf7pApA7ZvAsjUqHUoYn"), baseTokenDecimals: 6, }); export const zigUsdcDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("6rGP2znXXGU9vWN6Te5D3DaKvSYQKXB8chaLdVcsSJsF"), farmTokenMint: new PublicKey("87om2hz9nKKdS3sinYtGXCBuPACPd7xrnKBS3UwyZAoJ"), rewardTokenMint: new PublicKey("ANqY8h3sRSwkC29FvGJenAh7VGRABVVx7Ls6Mq4BuGT"), rewardTokenDecimals: 9, baseTokenMint: new PublicKey("9nKbvVW9TjdnKt2NbfMaf9PHcg8zWWFgGTBfzUXdFcke"), baseTokenDecimals: 6, }); export const srlySolDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("5dGXUyewQ652r6FTC1yduvxxSVspvmcQRY5wFCVNZeg3"), farmTokenMint: new PublicKey("919hW5ubB18RFEU6KmP9AKfMxk6drESjc54sxewfz1Mp"), rewardTokenMint: new PublicKey("sRLY3migNrkC1HLgqotpvi66qGkdNedqPZ9TJpAQhyh"), rewardTokenDecimals: 9, baseTokenMint: new PublicKey("HfkZkoPqZzd7S1F3BhkJN2Es1C5vabVYqfCecXG2MGHP"), baseTokenDecimals: 6, }); export const takiSrlyDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("GMa3zuo9DGHu9hfnQ6noUpsmtX1wJH9AF84q37TfmtfW"), farmTokenMint: new PublicKey("5gR2iQfkNe5XgApAUqMsbBjkXkmf4yineBFkhpm4yKgD"), rewardTokenMint: new PublicKey("Taki7fi3Zicv7Du1xNAWLaf6mRK7ikdn77HeGzgwvo4"), rewardTokenDecimals: 9, baseTokenMint: new PublicKey("13HwDUH7yREGAwHSWnx4Kgnn6huL8yfCCBqaBr6NGVH6"), baseTokenDecimals: 6, }); export const stsolSolDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("D7tPD1ZP46fH2jJoL8YH75aPkGQVXFJVYiX7G2NVKt3T"), farmTokenMint: new PublicKey("HaBymyP8zL1pgpnkdAn14pmTQbLQpiraYwd1uEzkReG9"), rewardTokenMint: new PublicKey("HZRCwxP2Vq9PCpPXooayhJ2bxTpo5xfpQrwB1svh332p"), rewardTokenDecimals: 8, baseTokenMint: new PublicKey("7ZvhrqdnP2NrQi2YCjQNd8jKJpLDMUuZg4wP7XJPjnVX"), baseTokenDecimals: 6, }); export const btcStsolDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("kDV1QjYknEeqMRaTGssdPmnnKLxTavUBFf3VkNn89aP"), farmTokenMint: new PublicKey("B91eD8Z2TfR21NxnwHv8H2GihT25qNRKtMxhtZfz4Kgk"), rewardTokenMint: new PublicKey("HZRCwxP2Vq9PCpPXooayhJ2bxTpo5xfpQrwB1svh332p"), rewardTokenDecimals: 8, baseTokenMint: new PublicKey("GjBW6751wNJ99zYkr9QwSi98bvj1NgyAcYHfQDpemJfq"), baseTokenDecimals: 6, }); export const stsolWhethDoubleDip: OrcaFarmParams = Object.freeze({ address: new PublicKey("HcWSgX8HKHTDrbdHwMe2KgQSixs3KM2PNXEowT6bkyB7"), farmTokenMint: new PublicKey("DkMeCWXirFsQZPYfgDs4voqvQbYGGQiwYoPQkUn4fU9W"), rewardTokenMint: new PublicKey("HZRCwxP2Vq9PCpPXooayhJ2bxTpo5xfpQrwB1svh332p"), rewardTokenDecimals: 8, baseTokenMint: new PublicKey("9V9CavjccKJH66m4MJHzVBYzY2ZM3U3D5xUCP7HSyAUz"), baseTokenDecimals: 6, }); /** * Mapping for OrcaFarm parameters * Key: baseTokenMint : OrcaFarmParams */ export const orcaFarmConfigs: Record = { APDFRM3HMr8CAGXwKHiu2f5ePSpaiEJhaURwhsRrUUt9: solUsdcAqFarm, FZthQCuYHhcfiDma7QrX7buDHwrZEd7vL8SjS6LQa3Tx: solUsdtAqFarm, "71FymgN2ZUf7VvVTLE8jYEnjP3jSK1Frp2XT1nHs8Hob": ethSolAqFarm, "3e1W6Aqcbuk2DfHUwRiRcyzpyYRRjg6yhZZcyEARydUX": ethUsdcAqFarm, "5kimD5W6yJpHRHCyPtnEyDsQRdiiJKivu5AqN3si82Jc": raySolAqFarm, ADrvfPBsRcJfGsN6Bs385zYddH52nuM5FA8UaAkX9o2V: ropeSolAqFarm, "8nTzqDXHriG2CXKbybeuEh1EqDQMtrbYMFWcP7AkiDaP": stepSolAqFarm, "9tf8rBSEQYG7AqL896fN2nZi1iYPqpWaLEdpbeQaC1Vy": srmSolAqFarm, EsYaDKJCmcJtJHFuJYwQZwqohvVMCrFzcg8yo3i328No: fttSolAqFarm, CzieDbGRdN1QGaGDNpSqzEA18bi881ccvkkGZi51pe1k: copeSolAqFarm, "7tYCdLN84EnTMkxM7HNamWJx7F4xgKe9KiiWvLyWjbgT": oxySolAqFarm, Acxs19v6eUMTEfdvkvWkRB4bwFCHm3XV9jABCy7c1mXe: btcSolAqFarm, HiwRobjfHZ4zsPtqCC4oBS24pSmy4t8GGkXRbQj4yU6L: merSolAqFarm, EYsNdtyu4gGTaGz8N5m5iQ3G1N6rDyMbR72B3CqbWW4W: fidaSolAqFarm, "99pfC8fWymXgbq3CvrExhx3UxQDC1fMWEWLbNT83F45e": mapsSolAqFarm, H2uzgruPvonVpCRhwwdukcpXK8TG17swFNzYFr2rtPxy: usdcUsdtAqFarm, "2uVjAuRXavpM6h1scGQaxqb6HVaNRn6T2X7HHXTabz25": orcaSolAqFarm, n8Mpu28RjeYD7oUX3LG1tPxzhRZh3YYLRSHcHRdS3Zx: orcaUsdcAqFarm, HEvnD66WcBfTajS9adUYnGRBMDehFtLySiFHSD6kEBWs: kinSolAqFarm, D6N9j8F2DhtzDtrdpT74y3u2YmYAzcggiLc3nTjqux9M: samoSolAqFarm, "3PD9SZFwXKkXr4akLf4ofo37ZUMycwML89R2P3qxcbZG": liqUsdcAqFarm, AZpo4BJHHRetF96v6SGinFZBMXM4yWMo4RA8C4PriDLk: snyUsdcAqFarm, "8PSfyiTVwPb6Rr2iZ8F3kNpbg65BCfJM9v8LfB916r44": msolUsdcAqFarm, AtB4nUmdyQfuWWJ9xAHw9xyVnJFfSjSuVWkiYan8y86w: slrsUsdcAqFarm, F8gPSpwVHj8FdAJAYULDuZBxFEJut87hUbARYYx3471w: portUsdcAqFarm, CS7fA5n4c2D82dUoHrYzS3gAqgqaoVSfgsr18kitp2xo: sbrUsdcAqFarm, Dkr8B675PGnNwEr9vTKXznjjHke5454EQdz3iaSbparB: scnsolUsdcAqFarm, C2YzN6MymD5HM2kPaH7bzcbqciyjfmpqyVaR3KA5V6z1: psolUsdcAqFarm, "29cdoMgu6MS2VXpcMo1sqRdWEzdUR9tjvoh8fcK8Z87R": msolSolAqFarm, C7TH2jEJJaxVwwuvkbcDGfHUiZvEkkeYjyAcdTMi5ujb: orcaPaiAqFarm, CVapmQn7HaU1yMDW3q6oUV4hx6XoYv54T4zfGXkuJqkA: orcaMsolAqFarm, APNpzQvR91v1THbsAyG3HHrUEwvexWYeNCFLQuVnxgMc: scnsolSolAqFarm, FZ8x1LCRSPDeHBDoAc3Gc6Y7ETCynuHEr5q5YWV7uRCJ: atlasUsdcAqFarm, GteBdo9sqE7T41G8AJsaG9WHW48uXBwsLLznmu2TBdgy: polisUsdcAqFarm, "2gXDJZ7XAtQEtf4PRSQZKoq1WMuu1H44tQanbMA3YVpu": bopUsdcAqFarm, "6VK1ksrmYGMBWUUZfygGF8tHRGpNxQEWv8pfvzQHdyyc": samoUsdcAqFarm, "4X1oYoFWYtLebk51zuh889r1WFLe8Z9qWApj87hQMfML": ninjaSolAqFarm, BVWwyiHVHZQMPHsiW7dZH7bnBVKmbxdeEjWqVRciHCyo: slimUsdcAqFarm, ELfBngAgvLEHVBuJQhhE7AW6eqLX7id2sfrBngVNVAUW: whapiUsdcAqFarm, HsauTv9s52Zv12eaDuSp6y7BEm4e4BHEyAsbdjyyWzPK: copeUsdcAqFarm, GHuoeq9UnFBsBhMwH43eL3RWX5XVXbSRYJymmyMYpT7n: sunnyUsdcAqFarm, EorFh8siFyLF1QTZ7cCXQaPGqyo7eb4SAgKtRH8Jcxjd: grapeUsdcAqFarm, GMzPbaCuQmeMUm1opH3oSCgKUjVgJUW14myq99RVPGX5: abrUsdcAqFarm, DRknxb4ZFxXUTG6UJ5HupNHG1SmvBSCPzsZ1o9gAhyBi: kuroUsdcAqFarm, "2toFgkQDoPrTJYGDEVoCasPXuL9uQnjvXJaDwa9LHyTx": mediaUsdcAqFarm, "4SBx8GXu8HhcVHWydQv1vsDdZs3G93XSL9CtMBny6hS5": tulipUsdcAqFarm, H9yC7jDng974WwcU4kTGs7BKf7nBNswpdsP5bzbdXjib: mngoUsdcAqFarm, Eswigpwm3xsipkTqahGi2PEJsJcULQBwZgxhQpr6yBEa: stsolWstethAqFarm, qJxKN9BhxbYvRNbjfK2uAVWboto6sonj8XC1ZEW5XTB: sypUsdcAqFarm, "74B9aMS7SA832xKngt5VLKmWAP3pa3qkUzWncTmQSsGF": stsolWldoAqFarm, "7aYnrdmdCRodDy2Czn6keUquUhjF1jPEmfwZPh488z8U": whethSolAqFarm, "7NPtjjAP7vhp4t5NCLyY4DY5rurvyc8cgZ2a2rYabRia": whethUsdcAqFarm, "5PHS5w6hQwFNnLz1jJFe7TVTxSQ98cDYC3akmiAoFMXs": mndeMsolAqFarm, Df6XNHMF3uRVZnz7LCEGiZVax6rXgz76owtVkBHEjSb6: wagUsdcAqFarm, "9cMWe4UYRPGAUUsTkjShJWVM7bk8DUBgxtwwH8asFJoV": msolUsdtAqFarm, "5qoTq3qC4U7vFxo3iCzbXcaD1UEmDeCD63Dsuoct71oV": msolWhethAqFarm, "8nKJ4z9FSw6wrVZKASqBiS9DS1CiNsRnqwCCKVQjqdkB": btcMsolAqFarm, DfgCnzaiTXfPkAH1C1Z441b5MzjjTCEh134ioxqRZxYf: ivnSolAqFarm, "8sfThep3io4gvcGeuoAg1Rs8GDwKJjtcdAFHqQSSNAVE": larixUsdcAqFarm, "6jCERp5hKj37PCXP3VTjCDJeoPuSpnMDMz5A6jWQv3yS": prtUsdcAqFarm, GBijunwxa4Ni3JmYC6q6zgaVhSUJU6hVX5qTyJDRpNTc: jetUsdcAqFarm, GtQ1NT7R5aaTiST7K6ZWdMhwDdFxsSFvVFhBo8vyHGAq: stsolUsdcAqFarm, "5a6Y1ephcbKSoyLMQyD1JWbtqawCy8p2FtRL9v3zhaG5": wstethUsdcAqFarm, "6mJqqT5TMgveDvxzBt3hrjGkPV5VAj7tacxFCT3GebXh": auryUsdcAqFarm, Hmfrtmo93DpSDmVNLQKcBS5D1ia5JatiRSok9ososubz: avaxUsdcAqFarm, FwCombynV2fTVizxPCNA2oZKoWXLZgdJThjE4Xv9sjxc: fttUsdcAqFarm, "4cXw2MYj94TFBXLL73fEpMCr8DPrW68JvrV8mzWgktbD": rayUsdcAqFarm, F59gkD7NnsdJbFKrRZsiBC8PAooN4c56T8QmahfW1iXN: slndUsdcAqFarm, "7vnps4VE5RTGAr5fmPZu7fSrk2VnM4Up838grZfqmxqE": gofxUsdcAqFarm, "9EjcYfHcG8f1mccpHyaAwpoxaUPiheC6KgLQjyD9aTb6": woofUsdcAqFarm, CHTKUJGYRtBDqnxCFjxe5KEkZgxV98udbhuYYyzGxup5: sdogeUsdcAqFarm, "55r9txzQtmjTykmTXmBYZCVMg5z9squB8b5cSw2AhxA4": catoUsdcAqFarm, DSiHyHDn96bUQSZtizyCRLcQzrwohZeMpVu8rYJN1HzG: oogiUsdcAqFarm, "5MvQHx8eftU39JTucFsT315JFnQASuDQg3FqxTw7xcvN": sonarUsdcAqFarm, HNrYngS1eoqkjWro9D3Y5Z9sWBDzPNK2tX4rfV2Up177: aptUsdcAqFarm, AWrtTWG4Zgxw8D92bb3L3sQtGLD3zDztMPWsXSph8iBP: dflUsdcAqFarm, "9Y1vPaAsMz8X65DebMMnmBjbMo8i4jh4mcgiggZUUS3M": dflSolAqFarm, FnDxJPNk7pPmGHUbR4XUHmHevrkXHdna5D3sQKcAtjBL: frktUsdcAqFarm, FGgP1npQTsC5Q4xBmQtNYSh51NKqNwdxBZy8JCo3igcu: tttUsdcAqFarm, E1U63VXhNiWoUkVvjrfLDdV1oJrwE6zLde3bohr6jCqz: upsUsdcAqFarm, GjG7JjTQfQpDxw4hWx4etP9oTaYCuCbPjsU8WaUT3xHB: fantUsdcAqFarm, D8WjqtwC9CzBrQKfSf2ccCHFQuPYwyLv5KAy8WjT5vnf: blockUsdcAqFarm, "34Ppq6R8NfYBwWwPY4cBK4Afyb8hHaASQFukCzH6cV4n": runUsdcAqFarm, HjR8JgqNKQVMvdryqJw5RJ4PCE9WGk8sgbEF7S9S3obv: uxpUsdcAqFarm, J3kvcay3N16FBdawgnqoJ9v9p6XCvyCLE2Z9F5RLvGkj: btcUsdcAqFarm, "12Uj74zgUUoBe4yeackwQ4qYtFMr9fk1xL6q5Nha6t2N": mndeUsdcAqFarm, "71CBZeJ4tw38L9pSPoCz4fRsuWE64Fipyzotte7haoCS": chicksUsdcAqFarm, "6MF5CHWAj5mS7FhpxiKz37CzR2eYTu236XpBKKMXCrGg": onesolUsdcAqFarm, HDgxKmiA8Pv82fNguhVeMkZqQkos2YksFPoP1KttWxX8: wmpUsdcAqFarm, "2VuGzaMrDnDyZfYvDwSXk38s7M2wpud7LDY3dGA1J9sy": unqUsdcAqFarm, GoaAiajubRgeCFEz9L6mLnSmT2QFegoJDH5tpLfivpj: basisUsdcAqFarm, E6FUnQHGHJVJg7oExVr5Moeaj1QpdpZQF5odYjHXWPZb: gstUsdcAqFarm, F5BTnwuMA6rxftTdbZ33VWKr2wrr6DuQHnd4guKmPSYQ: meanUsdcAqFarm, HCtyJzFUtYecXrA52s4Y9atq4J1fhT3cYsTX17XVSFag: aartUsdcAqFarm, DJqqvzSuPaWThfzwMjXx7H2ZmHDdwxza6NtFudtuXcpc: shdwUsdcAqFarm, "2ws7g3LBPdctfKn42Di9qxzQtUJ8ZL1aEAX2rGEQMNqh": shdwSolAqFarm, "99ZHUQsgxL7K6PHrGNi1gSwawwPr7UA5fbWrYoHQ6qhX": scyUsdcAqFarm, E5kSBqTDxFLbLNQaVVtPtnhEYVLMCK2fVSEKoMKL98qR: slcUsdcAqFarm, "6c13xsmyk7UaHUWZ2rm1MM3ZdrQRSBkQ9waaG25ridVs": wustSolAqFarm, J1KfRtP5y2warpD7LdJhfBLPKoWwSqYuovdArSv1mpQ7: wustUsdcAqFarm, "68YVjgPnTUPcBqZyghqvD2WPNsrLKsjYTmBKJzHRr4qd": msolWustAqFarm, "8Mh7drLbt3jFJYwp948XyvQscGLaLkChNcaH5wwaAoWA": wlunaWustAqFarm, HTZd53fYwYQRyAjiaPsZy9Gf41gobFdqkF4oKe3XLi95: stsolWustAqFarm, AzEoVuNJyo9ByoLRZ5t6vav2Zg24vULNVJM41PgCKUqR: jsolUsdcAqFarm, CCyDxjdW3G7hPTthTMPTZ4bnhFF19XG6rx2fNiKeRQww: daosolUsdcAqFarm, Gx4PoxenyQwhGGnKagAT35iVg4im1iKhJxDWqVhgu6tk: orcaUsdtAqFarm, GsfyYHkSgC3Ta6aWR9MjB2sxoBrkGGeR2tAwXbpphf3: orcaWhethAqFarm, "7cuu94swKL5PtFQohKMAzyd1mjj65rgMW3GzLY31HCnK": geneUsdcAqFarm, "85krvT9DxdYgoFLQDHTAGdvtNuLdAsc4xE5FkVLpN2aR": cmfiUsdcAqFarm, HVLyX8mD8YvKgZJ4oB6rXJiCYMLpHKwB6iCiCjE1XwdT: celoUsdcAqFarm, Gpzd833qSmv3kXpQmxEaqkrZTXZaRjhNAoqhf61qAhTG: ftmUsdcAqFarm, DFpLFcQZqDKykyDePgip4r6MExVmBKWqTa12ezq6qxUY: btcOrcaAqFarm, cL5WhffCYFRLM4We8VS2W684kM4pHyuvEDwp8Ddw48k: hbbUsdcAqFarm, FkKzu2HeMJZf4oHwoYPxLGVy3net5Jq8HAfnA5VqETgk: hbbSolAqFarm, "2Reqt4Sw9xNY8BoJ3EZLpFu5yVgNxFrbw8M3KiJpPn6o": sbUsdcAqFarm, "4ni1nho89cDKAQ9ddbNQA9ieLYpzvJVmJpuogu5Ct5ur": stsolUsdtAqFarm, H7gyTmNCDXkD8MGMqnxqoD8ANszjcju4tjT6ERZ5dakf: seededUsdcAqFarm, "3hksYA17VxgiKSeihjnZkBbjc2CTbEBfvDCYgQhojTo5": audioUsdcAqFarm, AaZRnJAnDyJyPD9uPJpJ8bzBGDCEi6jtBpUf92xErWPp: mmaUsdcAqFarm, "9wPhuYapychVDSxmXqCZxy2Ka8Lmav4SHM72si8bfraV": onesolSolAqFarm, Eho8h1BcoG5QWU7X9FzJafw5ErKUXtR2LobAJJZfWff4: puffSolAqFarm, "4iyU77yZbg8iD344vbwruAuDAf9i1EVV3FhZJDnWStBE": saoUsdcAqFarm, "3dXdXg5HPyZ73GFC9LkSn3thdJUGeXWB8iSTHs5UcqiH": srlyv2SolAqFarm, "2LYgm6nGXmSSjfoEriPuYeGoNiWNxUs7n3rnTbDWN5c7": zbcUsdcAqFarm, CFxQF5kNAtbbDj298Xr47Sf4mkSyuzWpRH97hrdQ6kxi: gmtUsdcAqFarm, DdAFNvDxtEHCgKj3JAM64zCKfMWhs4J9wEmRrjUAFiME: novaUsdcAqFarm, "7n2YW9qLkhGFArdZPLoF4hYPE2zw7xCACkVPXrUWnLuo": hbbUsdhAqFarm, "6atKbS2Xz5vu7cqWBNk8KYkuakRzckZ9nvtUKf2k8Sc3": takiSrlyv2AqFarm, "5vhh9ZnD9vnahRhFLP1EUEyYRSzvJwgw9U2xygsSJSrp": zigUsdcAqFarm, HfRgvhgscGX5GaP3rUrZAhh7gS4aJ2UQ7rNVX976rG6P: srlySolAqFarm, "3xaK5aWWLNRB73xUVX3cusLhDp65mTvP4fwW5Jwxakgs": takiSrlyAqFarm, "4jjQSgFx33DUb1a7pgPsi3FbtZXDQ94b6QywjNK3NtZw": stsolSolAqFarm, HYp9v7cY4wAxSsa6ijztQQ3GQ8iTttuG5vu8JNBDHoNh: btcStsolAqFarm, FWurFWADrgmhb6Y44LEaCMnEHS2Tu3QGqd9oBcZtr8gT: stsolWhethAqFarm, "57vGdcMZLnbNr4TZ4hgrpGJZGR9vTPhu8L9bNKDrqxKT": liqUsdcDoubleDip, GwrBA1F8rGummDCDd8NY9Eu1cLNuJqbT8WaGxgWpFwGL: stepSolDoubleDip, "66xCxkffQZKBZLiHV3PDcfR8ANJTfnDRxPCaBdv4wxB7": slrsUsdcDoubleDip, "4CGxvZdwiZgVMLXiTdJHTkJRUTpTSJCtmtCRbSkAxerE": portUsdcDoubleDip, "9SDpBrfqNxjXcCzpKWM6yUKdfky975VJBD6xcu5cKf5s": copeUsdcDoubleDip, A7vvbqENJj8kED3ABjphe8TvwpasQYtoWGKpjpLArMxa: bopUsdcDoubleDip, "9voVuTq1S9bFZkF2Jo44HoVG63w2xDRT8eBzB23YbQud": samoUsdcDoubleDip, Bfoi3RNnfdP5VeRGqvTA8MRN9ePGJoZgeKfe8WeBHUxE: whapiUsdcDoubleDip, "3K7aZhtwWJ2JS6GnbbgeDVnxd1q2hwhqasmgRsAMZ4yC": slimUsdcDoubleDip, "7YyhptkxY81HPzFVfyCzA5UXxWdsNRD41ofLva3TuSpd": ninjaSolDoubleDip, HFmY1ggCsCky1zJ1sfdkNR4zb3u5n38YNRdf4vsGu17t: atlasUsdcDoubleDip, "63JUKLnCAuNMPSPioEgbjjzp9Qk8qSEEM8eZqEtPqfLU": polisUsdcDoubleDip, "5uR5STASUmoGVHzqMeut98t26TfVkQqWU9f9dsv3NfJ6": abrUsdcDoubleDip, "6PGoaQdL9e463hdaFxHXsuPcjCHRK32CQ9PFKxvM7XY2": kuroUsdcDoubleDip, "5r3vDsNTGXXb9cGQfqyNuYD2bjhRPymGJBfDmKosR9Ev": msolUsdcDoubleDip, "3Duk5b6fLztPmS4ryV48FM1Q9WXUSMwz9jehAT4UtqpE": orcaMsolDoubleDip, "3RTGL7gPF4V1ns1AeGFApT7cBEGVDfmJ77DqQi9AC6uG": msolSolDoubleDip, "3kT3oYuS1rCfhmqfgy6EKcbZdaJimaVEjoy25QiuEaoj": stsolWstethDoubleDip, Ds4VGZhZzS2PMFzhzKeC3mwcQjdiCG21R76fTVbsSJyJ: sypUsdcDoubleDip, "2wPsMuzhEsC6GhV3qtFpmJF6atEgLGbnmQ8U43Y6fPxZ": mndeMsolDoubleDip, Afvh7TWfcT1E9eEEWJk17fPjnqk36hreTJJK5g3s4fm8: msolUsdtDoubleDip, "58nifjPjF3CutGz2xMxvAMk7R9YgbVEc8Cstj4rCcs8j": msolWhethDoubleDip, DzpLz78wuwyFsQToin8iDv6YK6aBEymRqQq82swiFh7r: btcMsolDoubleDip, HqajzzbGMST3yCCVBJuXvNVsWkY2DXqiBz9cTRmmyBMy: ivnSolDoubleDip, DNAGfa7tK8csprRQmiDUwDaFfhw6ueHhVFHTCgTJ8HGs: larixUsdcDoubleDip, B95rdqSY4dqPwmt295XwBZZqZJYLmqDNXU6NvBpT4ep4: gofxUsdcDoubleDip, "4HaQXDz9gdLgKUjvNVtnLyNZoWNYKjh3XxH1TpLgiwmi": woofUsdcDoubleDip, "4kXYyZAMBdvgDaBKUGvRWJnHw9af7sCUPvpQ68PEdP8b": sdogeUsdcDoubleDip, BHtZnTBMeY4EBEW5egGnuK5bdW12v6Dod6wFav79AyYx: catoUsdcDoubleDip, FiwSk36yi1DNWcuQUeNipAc1VKxa9Wv9AR2xFvyKUxAE: oogiUsdcDoubleDip, GWmwwMGYBG4NqYdnsYrudzBnbgDC49MkBxdzhfLA9kVY: sonarUsdcDoubleDip, "9fuv3emLQXECrTWqm2HaKT3wQhmvmgqmReZSMcu8PfpH": upsUsdcDoubleDip, C2EcthTMaC5eATXVaXg5ctvMfUYYgFyNibybHes5D3S6: fantUsdcDoubleDip, "3u2dNfGuU6C3vmSg5EvLPUpX57b3niqhWBV5Gc3WDEf5": stsolUsdcDoubleDip, Ce3VXSQGFEHqrQSEzcVb2Ro88Mcn56cYBUAXFx5tL9bo: wmpUsdcDoubleDip, GTcxXu3yw7yotq2UtAMvpEbx84ozJyrBwy77Cmem7m4X: chicksUsdcDoubleDip, CsGTrgJ6oLx9UQow9aLjuAacjXTY53zT8B2FnAbfVZAS: unqUsdcDoubleDip, "3h2VBX8533NB8eEH8rPXMdayodFDbgTHpbav6JqLZAQq": meanUsdcDoubleDip, "8Wu5sJpERA1J5iWcT8aMpt9cTAfKDLPbLpGjNsJoPgLc": wagUsdcDoubleDip, "7WWHfufv8vuBC1x7GXA3pu7kgNhEQkXoq3CtbaQihAJ9": shdwUsdcDoubleDip, BDStVBt4NS5bfda25ubK51kVRioV4yjKKCPbe96jeEms: shdwSolDoubleDip, Bg7pZq7KdsQsnCQBeNpa4XVnrWfjUJNu3ViHoNB7YUZU: aartUsdcDoubleDip, "4yx2aHMa7N4m1uUaBRy9QPtpstw3HFPtvcCPJQaGFHKL": basisUsdcDoubleDip, X8GnAvxq942xXjNzqYPFQQ9JstJQNEA81uPeNoQpgrN: slcUsdcDoubleDip, F49Cm3srGucQCBanA2xL7nSKHfH1QZd9vLdFtkg4LKnq: wustSolDoubleDip, "2mhVUMsG7eb3XhHjAbKpRZgWNyGZNCiWU7dRxauzZaGL": wustUsdcDoubleDip, "6wqME6zPQzGDLugpnwZnVBKBbATC5nTaEa781Vj98yvM": msolWustDoubleDip, "3ZGKT28NXAqb2YtUAMvKixQvHNHT31Q5mK8AC2iBMs29": wlunaWustDoubleDip, "3Q44iV4URXdbS4Tk1PGs5VdWQoCxHB7zdcdMnemo8jfH": stsolWustDoubleDip, E8RVjS24pBuF3oCCeJVAgC4RQ7mVa5P3FGXqGbiczzvD: cmfiUsdcDoubleDip, BxPd4x7gm6WQF6jsDCRQuQVZ2bopQ4KegMrqyQgdkPDk: hbbUsdcDoubleDip, "9RRBDWZGWGVnHgazCpb9R1XApmHLBDya8Tq1yrzoMsKY": celoUsdcDoubleDip, "3Wppx86xN7Dg7GLUTD9C7AqCt68qZkWzNYUdCS7t1pCk": sbUsdcDoubleDip, E7Af9Fa2U1YqEkQpAYjXwDB5TJUou9VcN3ot33Gj6UY9: ftmUsdcDoubleDip, CtvKaRLzCzRZCcYPwai7NCYBK4ArBj2oD6BfvMgJoiCN: stsolUsdtDoubleDip, H15WptGntFQifZmJHUzYBV9Mv7P27ofavEsF6yqpLTdX: seededUsdcDoubleDip, Hva9oLa2GjoKdB45WoHujsX7MTpehByPshMrQpNDmkFq: onesolSolDoubleDip, H9qkbU2XYSQTk6JJJ2TMuZBthfkeCHigmuxB5jiQaamn: mmaUsdcDoubleDip, Ge5kuYg5PekrPUeKzngw97Cnfngj8j6NCX5q1jTBkWSW: puffSolDoubleDip, A9BeGSRJJYXPrMs81rVZxvkk16fopzgG5YkngntgTu7p: saoUsdcDoubleDip, "6gkZ7QUmxmwPLS2NK3Dr6YHtTPZs6GQrkA595WSx5iLe": srlyv2SolDoubleDip, "7Hoi4adCSBzERdvSiUXtVDz79tiDxMD5HpDv7m9rs3Sb": zbcUsdcDoubleDip, H2jZrZKx1fLY9LPi2ad5G2DVBWzMmUwPQLjRFERUroEH: novaUsdcDoubleDip, DUGuXcpHX9y6WdTKgDm8XsECbf7pApA7ZvAsjUqHUoYn: hbbUsdhDoubleDip, "9nKbvVW9TjdnKt2NbfMaf9PHcg8zWWFgGTBfzUXdFcke": zigUsdcDoubleDip, HfkZkoPqZzd7S1F3BhkJN2Es1C5vabVYqfCecXG2MGHP: srlySolDoubleDip, "13HwDUH7yREGAwHSWnx4Kgnn6huL8yfCCBqaBr6NGVH6": takiSrlyDoubleDip, "7ZvhrqdnP2NrQi2YCjQNd8jKJpLDMUuZg4wP7XJPjnVX": stsolSolDoubleDip, GjBW6751wNJ99zYkr9QwSi98bvj1NgyAcYHfQDpemJfq: btcStsolDoubleDip, "9V9CavjccKJH66m4MJHzVBYzY2ZM3U3D5xUCP7HSyAUz": stsolWhethDoubleDip, }; ================================================ FILE: src/constants/index.ts ================================================ export * from "./orca-defaults"; export * from "./pools"; export * from "./farms"; ================================================ FILE: src/constants/orca-defaults.ts ================================================ import { Percentage } from "../public/utils/models/percentage"; export const defaultSlippagePercentage = Percentage.fromFraction(1, 1000); // 0.1% ================================================ FILE: src/constants/pools.ts ================================================ import { PublicKey } from "@solana/web3.js"; import { CurveType, OrcaPoolParams } from "../model/orca/pool/pool-types"; import { Percentage } from "../public/utils/models/percentage"; import * as Tokens from "./tokens"; /** * The following content is auto-generated. */ export const solUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("EGZ7tiLeH62TPV1gL8WwbXGzEPa9zmcpVnnkPKKnrE2U"), nonce: 252, authority: new PublicKey("JU8kmKzDHF9sXWsnoznaFDFezLsE5uomX2JkRMbmsQP"), poolTokenMint: new PublicKey("APDFRM3HMr8CAGXwKHiu2f5ePSpaiEJhaURwhsRrUUt9"), poolTokenDecimals: 6, feeAccount: new PublicKey("8JnSiuvQq3BVuCU3n4DrSTw9chBSPvEMswrhtifVkr1o"), tokenIds: [Tokens.solToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("ANP74VNsHwSrq9uUSjiSNyNWvf6ZPrKTmE4gHoNd13Lg"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("75HgnSvXbWKZBpZHveX68ZzAhDqMzNDS29X6BGLtxMo1"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const solUsdtPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("Dqk7mHQBx2ZWExmyrR2S8X6UG75CrbbpK2FSBZsNYsw6"), nonce: 255, authority: new PublicKey("2sxKY7hxVFrY5oNE2DgaPAJFamMzsmFLM2DgVcjK5yTy"), poolTokenMint: new PublicKey("FZthQCuYHhcfiDma7QrX7buDHwrZEd7vL8SjS6LQa3Tx"), poolTokenDecimals: 6, feeAccount: new PublicKey("BBKgw75FivTYXj85D2AWyVdaTdTWuSuHVXRm1Xu7fipb"), tokenIds: [Tokens.solToken.mint.toString(), Tokens.usdtToken.mint.toString()], tokens: { [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("DTb8NKsfhEJGY1TrA7RXN6MBiTrjnkdMAfjPEjtmTT3M"), }, [Tokens.usdtToken.mint.toString()]: { ...Tokens.usdtToken, addr: new PublicKey("E8erPjPEorykpPjFV9yUYMYigEWKQUxuGfL2rJKLJ3KU"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const ethSolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("EuK3xDa4rWuHeMQCBsHf1ETZNiEQb5C476oE9u9kp8Ji"), nonce: 255, authority: new PublicKey("DffrDbzPiswDJaiicBBo9CjqztKgFLrqXGwNJH4XQefZ"), poolTokenMint: new PublicKey("71FymgN2ZUf7VvVTLE8jYEnjP3jSK1Frp2XT1nHs8Hob"), poolTokenDecimals: 6, feeAccount: new PublicKey("unxKgWEc71ZiHwMqZs3VLqjcjmZhfTZEg94ZLGvjdMP"), tokenIds: [Tokens.ethToken.mint.toString(), Tokens.solToken.mint.toString()], tokens: { [Tokens.ethToken.mint.toString()]: { ...Tokens.ethToken, addr: new PublicKey("7F2cLdio3i6CCJaypj9VfNDPW2DwT3vkDmZJDEfmxu6A"), }, [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("5pUTGvN2AA2BEzBDU4CNDh3LHER15WS6J8oJf5XeZFD8"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const ethUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("FgZut2qVQEyPBibaTJbbX2PxaMZvT1vjDebiVaDp5BWP"), nonce: 253, authority: new PublicKey("4dfCZR32xXhoTgMRhnViNaTFwiKP9A34TDjHCR3xM5rg"), poolTokenMint: new PublicKey("3e1W6Aqcbuk2DfHUwRiRcyzpyYRRjg6yhZZcyEARydUX"), poolTokenDecimals: 6, feeAccount: new PublicKey("DLWewB12jzGn4wXJmFCddWDeof1Ma4cZYNRv9CP5hTvX"), tokenIds: [Tokens.ethToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.ethToken.mint.toString()]: { ...Tokens.ethToken, addr: new PublicKey("H9h5yTBfCHcb4eRP87fXczzXgNaMzKihr7bf1sjw7iuZ"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("JA98RXv2VdxQD8pRQq4dzJ1Bp4nH8nokCGmxvPWKJ3hx"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const raySolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("3THMPkPmcHJ54JtHRyazhs7UN7HbV5KiNJVLJs6hSPSC"), nonce: 255, authority: new PublicKey("EUc3MtHPLL956pTDfM5q25jp5Fk9zW7omEzh1uyDY7s6"), poolTokenMint: new PublicKey("5kimD5W6yJpHRHCyPtnEyDsQRdiiJKivu5AqN3si82Jc"), poolTokenDecimals: 6, feeAccount: new PublicKey("65XNtnUsP1TMzKMGhMoD3GUFMNbmnZQwDaxDLE3jncUC"), tokenIds: [Tokens.rayToken.mint.toString(), Tokens.solToken.mint.toString()], tokens: { [Tokens.rayToken.mint.toString()]: { ...Tokens.rayToken, addr: new PublicKey("GZaUNWf4ov6VZaD5MqZtc5pHB3mWTqczNUB4sstt8CSR"), }, [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("GNSZ1rr57QQ6qLcmZnhMcoBymenVezhNpzcFSfJP37h9"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const ropeSolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("DCENobjFZK59nLeMCVRkQtnkAWrJkWAVpmVnwVNc8gqH"), nonce: 251, authority: new PublicKey("C2DDX95TK3uC9MQXhHp3LWRv9kWtFTp36Ub9VPCKKiCV"), poolTokenMint: new PublicKey("ADrvfPBsRcJfGsN6Bs385zYddH52nuM5FA8UaAkX9o2V"), poolTokenDecimals: 6, feeAccount: new PublicKey("88rKjeeDQYJxGVCG39znDvbxzjPc5H37XqHRQCSNJvED"), tokenIds: [Tokens.ropeToken.mint.toString(), Tokens.solToken.mint.toString()], tokens: { [Tokens.ropeToken.mint.toString()]: { ...Tokens.ropeToken, addr: new PublicKey("HLHPVwgzYjTHmu1fmV9eZzdE8H3fZwhuCBRNNN2Z5miA"), }, [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("7Be3aStQmKgeXC1xqfJnA8qaGzw6keQTLqHYAJprZK2H"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const stepSolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("2sNtf8wLZMR7XJm2pzvvVUNPTNRFsGTiC5vgDSGv5QGD"), nonce: 255, authority: new PublicKey("HzAJLVqZ7fnmc2LfRPtz2GHu93RpAPQsdDTg6DRoTTmf"), poolTokenMint: new PublicKey("8nTzqDXHriG2CXKbybeuEh1EqDQMtrbYMFWcP7AkiDaP"), poolTokenDecimals: 6, feeAccount: new PublicKey("5FEmPmAk72NycwzMXLD3hc2f47zRXocv4mvd3HEUZ5io"), tokenIds: [Tokens.stepToken.mint.toString(), Tokens.solToken.mint.toString()], tokens: { [Tokens.stepToken.mint.toString()]: { ...Tokens.stepToken, addr: new PublicKey("35opuEpVvggzfV361hQVNXiC7KAKS1HCeDoVpfVybo8k"), }, [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("A3DSsYZJWHiwXSQb7P2AbEoaWhpauJLU1PVdTPnzV5s9"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const srmSolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("EJRXAkKyDhDgzdZz1Ss5CpWKWSK9xTR5S6GDLAer8mdh"), nonce: 255, authority: new PublicKey("2pQbngWBSWUjBHWVWQ3tppKxW3Y5NzUcye1822itKyzZ"), poolTokenMint: new PublicKey("9tf8rBSEQYG7AqL896fN2nZi1iYPqpWaLEdpbeQaC1Vy"), poolTokenDecimals: 6, feeAccount: new PublicKey("APyc1s8wES4Q2FTqHN8jXZtRuWQyRWZ82u7EFfras2iZ"), tokenIds: [Tokens.srmToken.mint.toString(), Tokens.solToken.mint.toString()], tokens: { [Tokens.srmToken.mint.toString()]: { ...Tokens.srmToken, addr: new PublicKey("2JCxZv6LaFjtWqBXSC2brsWE9WryS4Cp3VwwDeNGvLyv"), }, [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("EdhG3vQbTVVAARZB4AbhU2HsVbvfFqX2yhBAfFV22nzA"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const fttSolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("68Bg6yQxWm3mrUYk3XzMiF5ycE41HwPhyEdaB1cp6wuo"), nonce: 255, authority: new PublicKey("BpshqwEmPXmJwJfFgTFafmXoHN8Lc7SouvFsh6jyYQAm"), poolTokenMint: new PublicKey("EsYaDKJCmcJtJHFuJYwQZwqohvVMCrFzcg8yo3i328No"), poolTokenDecimals: 6, feeAccount: new PublicKey("FWBCbjZnypLKz7uHGJXpBAEez2FurQXi9J3js7ZT1xDe"), tokenIds: [Tokens.fttToken.mint.toString(), Tokens.solToken.mint.toString()], tokens: { [Tokens.fttToken.mint.toString()]: { ...Tokens.fttToken, addr: new PublicKey("3eVE92aEAsLYcBACXNu1yxoHVfTM8e8vmQC2zSApGRJX"), }, [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("BbsiNbFfJsRDwqF4JaiJ6sKecNuY4eWmEaDHcY6h6HuD"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const copeSolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("BRx4dJecxzeGYc1BskCWonfGCeMyv9G7tk66cf2QGhK6"), nonce: 254, authority: new PublicKey("JAJr1D6BQHFj9qJ8pfXhvJgLfn9vTcviU9sTA8MhKzN4"), poolTokenMint: new PublicKey("CzieDbGRdN1QGaGDNpSqzEA18bi881ccvkkGZi51pe1k"), poolTokenDecimals: 6, feeAccount: new PublicKey("9X8VRnxk6EVKGA7TErdSZYFC8oLUM569pDbZTtycjvXw"), tokenIds: [Tokens.copeToken.mint.toString(), Tokens.solToken.mint.toString()], tokens: { [Tokens.copeToken.mint.toString()]: { ...Tokens.copeToken, addr: new PublicKey("7v5GCdHH439SztxcqL4wpfWdPvv9EfMm8GYTHSUQoGoY"), }, [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("5tSgRUK6f2x1nAXA4gdcHNXiWdToqni9pr5xvq2Fq82u"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const oxySolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("Cq4EZrvuFQpsCz8L3gS6t7iQ7VWzTtqDgSxD4AgVAAfd"), nonce: 255, authority: new PublicKey("FxxcJPunf6Vj9Ve5zyM9yatMbmkrzTQ1QSk4NqKW9DvK"), poolTokenMint: new PublicKey("7tYCdLN84EnTMkxM7HNamWJx7F4xgKe9KiiWvLyWjbgT"), poolTokenDecimals: 6, feeAccount: new PublicKey("Ch8i2A1GAspivXYfdme7vSxh1mhRjmRgeiKN8KpWhVqo"), tokenIds: [Tokens.oxyToken.mint.toString(), Tokens.solToken.mint.toString()], tokens: { [Tokens.oxyToken.mint.toString()]: { ...Tokens.oxyToken, addr: new PublicKey("BoZQMfTLTPcXnevJxNFkECVbKesfhXnTUg4kxLgzV9BX"), }, [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("8ZrEcJbgg7BdoBga5RYDR8aMujLf5cAQp8zdPZqk7nNC"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const btcSolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("7N2AEJ98qBs4PwEwZ6k5pj8uZBKMkZrKZeiC7A64B47u"), nonce: 255, authority: new PublicKey("GqnLhu3bPQ46nTZYNFDnzhwm31iFoqhi3ntXMtc5DPiT"), poolTokenMint: new PublicKey("Acxs19v6eUMTEfdvkvWkRB4bwFCHm3XV9jABCy7c1mXe"), poolTokenDecimals: 6, feeAccount: new PublicKey("4yPG4A9jB3ibDMVXEN2aZW4oA1e1xzzA3z5VWjkZd18B"), tokenIds: [Tokens.btcToken.mint.toString(), Tokens.solToken.mint.toString()], tokens: { [Tokens.btcToken.mint.toString()]: { ...Tokens.btcToken, addr: new PublicKey("9G5TBPbEUg2iaFxJ29uVAT8ZzxY77esRshyHiLYZKRh8"), }, [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("5eqcnUasgU2NRrEAeWxvFVRTTYWJWfAJhsdffvc6nJc2"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const merSolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("UJBm2tHwDbQZpjQvaHozg5qkjh6prSKhnWheqR5T76Q"), nonce: 255, authority: new PublicKey("C8HcMrC9WRqqXVbHRhZWjuZPbbWmszDobKFxevCtGhpT"), poolTokenMint: new PublicKey("HiwRobjfHZ4zsPtqCC4oBS24pSmy4t8GGkXRbQj4yU6L"), poolTokenDecimals: 6, feeAccount: new PublicKey("3Fdj69449GhiDmqyvWWTSafjRphGdiDhZ5i5rqfHBdio"), tokenIds: [Tokens.merToken.mint.toString(), Tokens.solToken.mint.toString()], tokens: { [Tokens.merToken.mint.toString()]: { ...Tokens.merToken, addr: new PublicKey("DHdkRWTa9SRJNMtWZQYvNNbjrDP3n92EWLHezjFGPipb"), }, [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("DC5RwjB3VkXdt2PoWKTA4Ub9KbtcY8xXpmPNKsFjALwq"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const fidaSolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("4SUBbivGMvMhem3ajVtkmuPvL4GuQ8kfYTJFuQfG4F8t"), nonce: 255, authority: new PublicKey("owuNLod7H14GpQCUodcdBBeD4LiZ2T5U9KpS2sAbTp6"), poolTokenMint: new PublicKey("EYsNdtyu4gGTaGz8N5m5iQ3G1N6rDyMbR72B3CqbWW4W"), poolTokenDecimals: 6, feeAccount: new PublicKey("J2s1GpduscTTvMYt3os8LdvT24uhr9bPnTbxSKZZhEma"), tokenIds: [Tokens.fidaToken.mint.toString(), Tokens.solToken.mint.toString()], tokens: { [Tokens.fidaToken.mint.toString()]: { ...Tokens.fidaToken, addr: new PublicKey("9ofyx5yFzjH1XWmJzfiGCDfhq6ho8yFbszGQrrJXe54"), }, [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("55moYcq91pXbSRpL2DR8P3BehqSNWiJrdTn5SZFc2STn"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const mapsSolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("4rkgbbCPKk5zx3KiwcCNiSpNSSLgAkswKGfX7CJjGgtC"), nonce: 255, authority: new PublicKey("8uuBxVsGf2bqH5t8mct5NfpgcTDb7czXuWVEm6Boia4x"), poolTokenMint: new PublicKey("99pfC8fWymXgbq3CvrExhx3UxQDC1fMWEWLbNT83F45e"), poolTokenDecimals: 6, feeAccount: new PublicKey("8w3gx1GQ1UN5sodEVP14qUwzCcgopHWUeWbT26hgK3xh"), tokenIds: [Tokens.mapsToken.mint.toString(), Tokens.solToken.mint.toString()], tokens: { [Tokens.mapsToken.mint.toString()]: { ...Tokens.mapsToken, addr: new PublicKey("BqExNTYk7YdeiaREHqnqN2q1F3dBCTPhkwrrWBFD4F1m"), }, [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("HdEQ99E979aXn2xTcg5UXEfLynwFkqpPTxLaNkH7Nz7P"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const usdcUsdtPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("F13xvvx45jVGd84ynK3c8T89UejQVxjCLtmHfPmAXAHP"), nonce: 255, authority: new PublicKey("3cGHDS8uWhdxQj14vTmFtYHX3NMouPpE4o9MjQ43Bbf4"), poolTokenMint: new PublicKey("H2uzgruPvonVpCRhwwdukcpXK8TG17swFNzYFr2rtPxy"), poolTokenDecimals: 6, feeAccount: new PublicKey("B4RNxMJGRzKFQyTq2Uwkmpyjtew13n7KtdqZy6qgENTu"), tokenIds: [Tokens.usdcToken.mint.toString(), Tokens.usdtToken.mint.toString()], tokens: { [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("6uUn2okWk5v4x9Gc4n2LLGHtWoa9tmizHq1363dW7t9W"), }, [Tokens.usdtToken.mint.toString()]: { ...Tokens.usdtToken, addr: new PublicKey("AiwmnLy7xPT28dqZpkRm6i1ZGwELUCzCsuN92v4JkSeU"), }, }, curveType: CurveType.Stable, amp: 100, feeStructure: { traderFee: Percentage.fromFraction(6, 10000), ownerFee: Percentage.fromFraction(1, 10000), }, }); export const orcaSolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("2ZnVuidTHpi5WWKUwFXauYGhvdT9jRKYv5MDahtbwtYr"), nonce: 255, authority: new PublicKey("2PH1quJj9MHQXATCmNZ6qQ2gZqM8R236DpKaz99ggVpm"), poolTokenMint: new PublicKey("2uVjAuRXavpM6h1scGQaxqb6HVaNRn6T2X7HHXTabz25"), poolTokenDecimals: 6, feeAccount: new PublicKey("4Zc4kQZhRQeGztihvcGSWezJE1k44kKEgPCAkdeBfras"), tokenIds: [Tokens.orcaToken.mint.toString(), Tokens.solToken.mint.toString()], tokens: { [Tokens.orcaToken.mint.toString()]: { ...Tokens.orcaToken, addr: new PublicKey("AioST8HKQJRqjE1mknk4Rydc8wVADhdQwRJmAAYX1T6Z"), }, [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("73zdy95DynZP4exdpuXTDsexcrWbDJX9TFi2E6CDzXh4"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const orcaUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("2p7nYbtPBgtmY69NsE8DAW6szpRJn7tQvDnqvoEWQvjY"), nonce: 254, authority: new PublicKey("3fr1AhdiAmWLeNrS24CMoAu9pPgbzVhwLtJ6QUPmw2ob"), poolTokenMint: new PublicKey("n8Mpu28RjeYD7oUX3LG1tPxzhRZh3YYLRSHcHRdS3Zx"), poolTokenDecimals: 6, feeAccount: new PublicKey("7CXZED4jfRp3qdHB9Py3up6v1C4UhHofFvfT6RXbJLRN"), tokenIds: [Tokens.orcaToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.orcaToken.mint.toString()]: { ...Tokens.orcaToken, addr: new PublicKey("9vYWHBPz817wJdQpE8u3h8UoY3sZ16ZXdCcvLB7jY4Dj"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("6UczejMUv1tzdvUzKpULKHxrK9sqLm8edR1v9jinVWm9"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const kinSolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("Ez52BLSoZw3MxWxMK4ADsJXqzUiYW9sUnwcrrQwQGdLT"), nonce: 253, authority: new PublicKey("C6WisvFQzqxTBF3DV6RFbPMPBiVHE816CZHoctB3WzrW"), poolTokenMint: new PublicKey("HEvnD66WcBfTajS9adUYnGRBMDehFtLySiFHSD6kEBWs"), poolTokenDecimals: 6, feeAccount: new PublicKey("5bLeJU66qTopjZBa48BUd7EXWcj4UeCMfHjjrvt8Zcgs"), tokenIds: [Tokens.kinToken.mint.toString(), Tokens.solToken.mint.toString()], tokens: { [Tokens.kinToken.mint.toString()]: { ...Tokens.kinToken, addr: new PublicKey("2Ssm5Dd1Zc5QpGSZzuqt3Ef4bADteuBbCGiEZJ5n48rV"), }, [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("HCS9EpKRxWDS9GCRFStNbPWgRQpvV6EyBWChJja2UbCm"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const samoSolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("DiAP9qmp5foN7fLTWfBWjo9KBS1jgvKUJLWi1ZhqKaja"), nonce: 255, authority: new PublicKey("3uZcofBKVBYFrQ7jVjTFLEMWAQiZcih4AES5tKBqdo7m"), poolTokenMint: new PublicKey("D6N9j8F2DhtzDtrdpT74y3u2YmYAzcggiLc3nTjqux9M"), poolTokenDecimals: 6, feeAccount: new PublicKey("BYAjG645fRRHZ5JFnZKnXc4dzK9WppcoVWDMYj3zm3KF"), tokenIds: [Tokens.samoToken.mint.toString(), Tokens.solToken.mint.toString()], tokens: { [Tokens.samoToken.mint.toString()]: { ...Tokens.samoToken, addr: new PublicKey("AFcbD7UTzk9d1njRxyDHNbQ5Q6miPNAE1GctjD96JYAi"), }, [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("6kYbPDsYLQUwptV7ZvQKG3gjNreEEgaWh2CM4DQPYTpq"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const liqUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("AXSeEafwPUGSamiZWH8m2PJtvpDVtrofxvycNwxiysdh"), nonce: 254, authority: new PublicKey("6Y5TnCwgifc8Z7QYo672nT9uNd2hcivVR1NT6oDkJx6P"), poolTokenMint: new PublicKey("3PD9SZFwXKkXr4akLf4ofo37ZUMycwML89R2P3qxcbZG"), poolTokenDecimals: 6, feeAccount: new PublicKey("FSVPcprrTkQLRtDACFEpa2rhEVx4kBvjPuQaxj572SaC"), tokenIds: [Tokens.liqToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.liqToken.mint.toString()]: { ...Tokens.liqToken, addr: new PublicKey("CVspL8Tj5YdqntXJegNeDXHiBn3648QDNB7gex6D9MgY"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("8YzLsZ1FtsruswkBogEaXwmRTf5PMuyVcfSZXRAdi8qA"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const snyUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("BDn3Fj9UXVi2mRVMR2jzpCrAZZphnwfkvFhs192yhCTu"), nonce: 255, authority: new PublicKey("FvjsfbbzZAcrVdfrGtZUjGWAjWHXrfMG8Bjwc17vVSK3"), poolTokenMint: new PublicKey("AZpo4BJHHRetF96v6SGinFZBMXM4yWMo4RA8C4PriDLk"), poolTokenDecimals: 6, feeAccount: new PublicKey("DiULDJAYXdbtX8CfFsU2jCgHvQWT7u3gwRwpvQxfEMvr"), tokenIds: [Tokens.snyToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.snyToken.mint.toString()]: { ...Tokens.snyToken, addr: new PublicKey("14RHMRzwx9Y4Z41qpr9sTwJZ58wXqV1R9WTkUA7ybmKG"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("Dw9D9T4bBC3oGdMqxE1xWfPSCJ27SYwWD8rFfUxU99QG"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const msolUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("Hme4Jnqhdz2jAPUMnS7jGE5zv6Y1ynqrUEhmUAWkXmzn"), nonce: 255, authority: new PublicKey("9Z7E42k46kxnBjAh8YGXDw3rRGwwxQUBYM7Ccrmwg6ZP"), poolTokenMint: new PublicKey("8PSfyiTVwPb6Rr2iZ8F3kNpbg65BCfJM9v8LfB916r44"), poolTokenDecimals: 6, feeAccount: new PublicKey("3W3Skj2vQsNEMhGRQprFXQy3Q8ZbM6ojdgiDCokVPWno"), tokenIds: [Tokens.msolToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.msolToken.mint.toString()]: { ...Tokens.msolToken, addr: new PublicKey("GBa7G5f1FqAXEgByuHXsqsEdpyMjRgT9SNxZwmmnEJAY"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("7hFgNawzzmpDM8TTVCKm8jykBrym8C3TQdb8TDAfAVkD"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const slrsUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("87Xz6RK1uzP5NEhSjMewZtDAZyg4V1tYAa1KHnvge17b"), nonce: 254, authority: new PublicKey("5D9v9y6Kbswe6k1wnVceuqRXHMsRQJ8xzx8hadSH6EAM"), poolTokenMint: new PublicKey("AtB4nUmdyQfuWWJ9xAHw9xyVnJFfSjSuVWkiYan8y86w"), poolTokenDecimals: 6, feeAccount: new PublicKey("CLxeBxNq42AtmD43F5BTqCHTnkVHX8sP9cVPdtRkTL7D"), tokenIds: [Tokens.slrsToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.slrsToken.mint.toString()]: { ...Tokens.slrsToken, addr: new PublicKey("CM7oGYHy1oxzHoum8Cxv4pwnndm6Jbs3NkBZkc6v9S9d"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("3QqPbMcUMZu3Rz762g7JgvpUxhRHPtE9HFk2MSDRmPqa"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const portUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("4if9Gy7dvjU7XwunKxdnCcPsaT3yAHPXdz2XS1eo19LG"), nonce: 254, authority: new PublicKey("BshtCZRCHj2RZYC7u5sW3ioRJo9ZiYA4T5p8muFwrKnb"), poolTokenMint: new PublicKey("F8gPSpwVHj8FdAJAYULDuZBxFEJut87hUbARYYx3471w"), poolTokenDecimals: 6, feeAccount: new PublicKey("5JZXUbCfaSo3y9PYq47Hj5Yc6hVFa4j7MkDzBJfMSRSN"), tokenIds: [Tokens.portToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.portToken.mint.toString()]: { ...Tokens.portToken, addr: new PublicKey("2wuSqR5z2Guft2yt57Hx7K6i1AYNoUi8fjxHUeAgaKXo"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("AvP1Db3SyUxLGMSc4nSXjJkjm1kAjiLjog7cup19eWa3"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const sbrUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("HiYggjP2fN53Jw46e5UuskqNP3HH98jceRxEgVoeRwNw"), nonce: 255, authority: new PublicKey("ATkEV1nEkdp7zgaGpzFCsJ5WAyejcJbxqzGhQpfcDW4S"), poolTokenMint: new PublicKey("CS7fA5n4c2D82dUoHrYzS3gAqgqaoVSfgsr18kitp2xo"), poolTokenDecimals: 6, feeAccount: new PublicKey("7S3KKuvcHfcKWBGLDwmoTgtB97JE8LHruP8jbmQkGfH"), tokenIds: [Tokens.sbrToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.sbrToken.mint.toString()]: { ...Tokens.sbrToken, addr: new PublicKey("DrJTQqNZqNCf2HDLpYg9zRCMRwnhZEVQuGjeaWtX6CA7"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("DEVLUv1uiUSukQoBdy9fDQyehi4N2Boojy8J2LQ8bK2E"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const scnsolUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("6Gh36sNXrGWYiWr999d9iZtqgnipJbWuBohyHBN1cJpS"), nonce: 255, authority: new PublicKey("GXWEpRURaQZ9E62Q23EreTUfBy4hfemXgWFUWcg7YFgv"), poolTokenMint: new PublicKey("Dkr8B675PGnNwEr9vTKXznjjHke5454EQdz3iaSbparB"), poolTokenDecimals: 6, feeAccount: new PublicKey("HsC1Jo38jK3EpoNAkxfoUJhQVPa28anewZpLfeouUNk7"), tokenIds: [Tokens.scnsolToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.scnsolToken.mint.toString()]: { ...Tokens.scnsolToken, addr: new PublicKey("7xs9QsrxQDVoWQ8LQ8VsVjfPKBrPGjvg8ZhaLnU1i2VR"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("FZFJK64Fk1t619zmVPqCx8Uy29zJ3WuvjWitCQuxXRo3"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const psolUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("GW1Xt9HHtvcnky8X7aBA3BoTgiirJKP5XwC5REFcZSsc"), nonce: 254, authority: new PublicKey("GXueH9K1MzRncoTYbpLiXXC3WrKkmHUFxV5JEu8oADbw"), poolTokenMint: new PublicKey("C2YzN6MymD5HM2kPaH7bzcbqciyjfmpqyVaR3KA5V6z1"), poolTokenDecimals: 6, feeAccount: new PublicKey("BhHd49JYH3Hk6TV5kCjmUgf7fQSQKDjaWTokMmBhTx9o"), tokenIds: [Tokens.psolToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.psolToken.mint.toString()]: { ...Tokens.psolToken, addr: new PublicKey("F7XioZaGe99nosYJQCahx25TKgdUGufYf6sudm1JSgu"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("BT14DfFyNS7qcBGc8TY4HAzDev4vvqsoFBJgjtQpdM2Z"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const msolSolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("9EQMEzJdE2LDAY1hw1RytpufdwAXzatYfQ3M2UuT9b88"), nonce: 250, authority: new PublicKey("6cwehd4xhKkJ2s7iGh4CaDb7KhMgqczSBnyNJieUYbHn"), poolTokenMint: new PublicKey("29cdoMgu6MS2VXpcMo1sqRdWEzdUR9tjvoh8fcK8Z87R"), poolTokenDecimals: 6, feeAccount: new PublicKey("6j2tt2UVYMQwqG3hRtyydW3odzBFwy3pN33tyB3xCKQ6"), tokenIds: [Tokens.msolToken.mint.toString(), Tokens.solToken.mint.toString()], tokens: { [Tokens.msolToken.mint.toString()]: { ...Tokens.msolToken, addr: new PublicKey("6xmki5RtGNHrfhTiHFfp9k3RQ9t8qgL1cYP2YCG2h179"), }, [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("Ew2coQtVGLeca31vqB2ssHntjzZgUy1ad9VuuAX8yw7p"), }, }, curveType: CurveType.Stable, amp: 100, feeStructure: { traderFee: Percentage.fromFraction(6, 10000), ownerFee: Percentage.fromFraction(1, 10000), }, }); export const orcaPaiPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("7LfLiCnoLPefaCVuh6z92TK2tPZUa9bPjW7gHT4jqrec"), nonce: 254, authority: new PublicKey("AwUWHxHyQHomqCGJJvagiSDhb2xMqJUiE25qDytdMw49"), poolTokenMint: new PublicKey("C7TH2jEJJaxVwwuvkbcDGfHUiZvEkkeYjyAcdTMi5ujb"), poolTokenDecimals: 6, feeAccount: new PublicKey("DrC2aGWrUmsnK6yAphSXEs8GW5nKUCkityaG8Bikn5Ne"), tokenIds: [Tokens.orcaToken.mint.toString(), Tokens.paiToken.mint.toString()], tokens: { [Tokens.orcaToken.mint.toString()]: { ...Tokens.orcaToken, addr: new PublicKey("HSUFpGyNXEogXQLgEMQ7aMTxE4HZneRaBovbi9btXepM"), }, [Tokens.paiToken.mint.toString()]: { ...Tokens.paiToken, addr: new PublicKey("4c9rkBiqAY6fXpVvCbDwpDD44AGQ3MXSaCLcpmLUFtrX"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const orcaMsolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("49tTgthTYLMPEqozZNyEQifqkGYxHqqDie9YxVczS3iB"), nonce: 255, authority: new PublicKey("9FQ9gDtS6uNr5SMPafuzkDit2rMftHfQuz5mg2X3TqHT"), poolTokenMint: new PublicKey("CVapmQn7HaU1yMDW3q6oUV4hx6XoYv54T4zfGXkuJqkA"), poolTokenDecimals: 6, feeAccount: new PublicKey("Hq9xxKdMavJd4teMZusF4PiGNGV3hxdcMZwAdngkHCg7"), tokenIds: [Tokens.orcaToken.mint.toString(), Tokens.msolToken.mint.toString()], tokens: { [Tokens.orcaToken.mint.toString()]: { ...Tokens.orcaToken, addr: new PublicKey("7hoYJc4aqttctANrNe75gscdmQD9HcXZED6AjdDdZMQ9"), }, [Tokens.msolToken.mint.toString()]: { ...Tokens.msolToken, addr: new PublicKey("7MuvRUFT1wWiL7uJKdZqNwk9Fmz2HJ36bEArhDTnyFij"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const scnsolSolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("2q6UMko5kTnv866W9MTeAFau94pLpsdeNjDdSYSgZUXr"), nonce: 255, authority: new PublicKey("Gyd77CwV23qq937x9UDa4TDkxEeQF9tp8ifotYxqW3Kd"), poolTokenMint: new PublicKey("APNpzQvR91v1THbsAyG3HHrUEwvexWYeNCFLQuVnxgMc"), poolTokenDecimals: 6, feeAccount: new PublicKey("42Xzazs9EvjtidvEDrj3JXbDtf6fpTq5XHh96mPctvBV"), tokenIds: [Tokens.scnsolToken.mint.toString(), Tokens.solToken.mint.toString()], tokens: { [Tokens.scnsolToken.mint.toString()]: { ...Tokens.scnsolToken, addr: new PublicKey("C8DRXUqxXtUgvgBR7BPAmy6tnRJYgVjG27VU44wWDMNV"), }, [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("DzdxH5qJ68PiM1p5o6PbPLPpDj8m1ZshcaMFATcxDZix"), }, }, curveType: CurveType.Stable, amp: 100, feeStructure: { traderFee: Percentage.fromFraction(6, 10000), ownerFee: Percentage.fromFraction(1, 10000), }, }); export const atlasUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("3V5sjXj1mrWjjB1Xt6Xwp554QwHE5fppGSxbk4GzAtEW"), nonce: 254, authority: new PublicKey("8UYN675AJn5htWydDs724xqintBZ4XzsCWqMozUSDU8m"), poolTokenMint: new PublicKey("FZ8x1LCRSPDeHBDoAc3Gc6Y7ETCynuHEr5q5YWV7uRCJ"), poolTokenDecimals: 6, feeAccount: new PublicKey("CFN4DQ2p3qroX92pPNy3mov3Dw1aCNGLrU5AXHpHxbko"), tokenIds: [Tokens.atlasToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.atlasToken.mint.toString()]: { ...Tokens.atlasToken, addr: new PublicKey("xotXsNCx4tBhnwhrajGTaVgKq1sfuMkeYHc77ZegCqE"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("8YswVYsTi66umBF2Bnkh4LB2VWMKPssDpe54VAgiuJZQ"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const polisUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("CdKPtCb5fBRaGFS4bJgytfReeHuFyhpe9YUyWHPnEWZG"), nonce: 251, authority: new PublicKey("8XB9V3VuHtPBzHqvxzcmpkpaoXNXjZMD8VBHC79SxcEL"), poolTokenMint: new PublicKey("GteBdo9sqE7T41G8AJsaG9WHW48uXBwsLLznmu2TBdgy"), poolTokenDecimals: 6, feeAccount: new PublicKey("3gZQ2YnrXbnRwJj5poffLirF7CwacatvtfGCNRFrbJdr"), tokenIds: [Tokens.polisToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.polisToken.mint.toString()]: { ...Tokens.polisToken, addr: new PublicKey("EbXNEUiKxSU1vwwhrbVNVk3qX4o1yU3p75SQUUMfc1zH"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("CLCj9b1vdPutrkvZS8ACTM5q42SXB2Q7khnMLVxDMGEK"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const bopUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("9pheQ8EX2wDKHZYm75G9haEbTyAcg8F2gFWybw2w6Vyc"), nonce: 253, authority: new PublicKey("3rxJPYuiRijipJbciewUDacab2Wo3yAe1yWBGzmqn5f1"), poolTokenMint: new PublicKey("2gXDJZ7XAtQEtf4PRSQZKoq1WMuu1H44tQanbMA3YVpu"), poolTokenDecimals: 6, feeAccount: new PublicKey("2bei4349W8FUcu5gvP5Zt8yhkpwqcCngZxUkb3xRMJZJ"), tokenIds: [Tokens.bopToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.bopToken.mint.toString()]: { ...Tokens.bopToken, addr: new PublicKey("HkHjLSaP9yyWTzMGD1DKyoc1Dfvhvw4vakRhyjcVUCKs"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("CqRoKMF4kh2o568nFdDNHs7cszBjrkQME4RtCuTqcjCe"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const samoUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("Epvp7qMYAF21VVjacdB3VfKn6nnXQSF4rGYu8sD6Bkow"), nonce: 252, authority: new PublicKey("AB4rTE2JiKFhnfynUQCovbW75CUxT9LxcJX2SDTbY9gy"), poolTokenMint: new PublicKey("6VK1ksrmYGMBWUUZfygGF8tHRGpNxQEWv8pfvzQHdyyc"), poolTokenDecimals: 6, feeAccount: new PublicKey("9U8UF7d8kBvsS25XoZnjmVQ9vGkP4BUnHJgfc615BvG1"), tokenIds: [Tokens.samoToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.samoToken.mint.toString()]: { ...Tokens.samoToken, addr: new PublicKey("7jwHW4Lw3nVaSJXskN5pUoKU6YB9RBVfZtGBp3VbR43U"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("G7Gqjxk9EaJMeFfoFTSy9WfH8uurgQkbNQCREWAc56DZ"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const ninjaSolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("3ECUtPokme1nimJfuAkMtcm7QYjDEfXRQzmGC16LuYnz"), nonce: 255, authority: new PublicKey("H8f9n2PfehUc73gRWSRTPXvqUhUHVywdAxcfEtYmmyAo"), poolTokenMint: new PublicKey("4X1oYoFWYtLebk51zuh889r1WFLe8Z9qWApj87hQMfML"), poolTokenDecimals: 6, feeAccount: new PublicKey("43ViAbUVujnYtJyzGP4AhabMYCbLsExenT3WKsZjqJ7N"), tokenIds: [Tokens.ninjaToken.mint.toString(), Tokens.solToken.mint.toString()], tokens: { [Tokens.ninjaToken.mint.toString()]: { ...Tokens.ninjaToken, addr: new PublicKey("6Y9VyEYHgxVahiixzphNh4HAywpab9zVoD4S8q1sfuL8"), }, [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("9SxzphwrrDVDkwkyvmtag9NLgpjSkTw35cRwg9rLMYWk"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const slimUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("8JPid6GtND2tU3A7x7GDfPPEWwS36rMtzF7YoHU44UoA"), nonce: 255, authority: new PublicKey("749y4fXb9SzqmrLEetQdui5iDucnNiMgCJ2uzc3y7cou"), poolTokenMint: new PublicKey("BVWwyiHVHZQMPHsiW7dZH7bnBVKmbxdeEjWqVRciHCyo"), poolTokenDecimals: 6, feeAccount: new PublicKey("E6aTzkZKdCECgpDtBZtVpqiGjxRDSAFh1SC9CdSoVK7a"), tokenIds: [Tokens.slimToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.slimToken.mint.toString()]: { ...Tokens.slimToken, addr: new PublicKey("ErcxwkPgLdyoVL6j2SsekZ5iysPZEDRGfAggh282kQb8"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("EFYW6YEiCGpavuMPS1zoXhgfNkPisWkQ3bQz1b4UfKek"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const whapiUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("2Y1Jmpkf5wt1X5zcFHNBDoHxqjTXbMJfj1UFtrYQwUbG"), nonce: 254, authority: new PublicKey("8K4eRHeyPhBGB9zCjKtyBHoPPZ75zLN64oxBF6GyF4Qg"), poolTokenMint: new PublicKey("ELfBngAgvLEHVBuJQhhE7AW6eqLX7id2sfrBngVNVAUW"), poolTokenDecimals: 6, feeAccount: new PublicKey("Bx3ZhEBFedDqCBzuzKVS4eMKTtW1MmHkcMGU45FcyxRT"), tokenIds: [Tokens.whapiToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.whapiToken.mint.toString()]: { ...Tokens.whapiToken, addr: new PublicKey("DRYADMQevoJHDFCYbDQeS4p551MpsDN2d7CJU3LxfNHa"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("HzsECCX6RZ2ccbR3FarRSEfc5rkuETfywXJnRZut5JzU"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const copeUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("DhGTKyT6RVkpvPxXAJodi4Z41RSvQZxV1f5eRvJ5bE4r"), nonce: 254, authority: new PublicKey("Hu8AWoRBa7ZaYQFdHQyRHeEZGB16Me86fA5vAZzjVUmv"), poolTokenMint: new PublicKey("HsauTv9s52Zv12eaDuSp6y7BEm4e4BHEyAsbdjyyWzPK"), poolTokenDecimals: 6, feeAccount: new PublicKey("JEGcxfGxWJpRkGtvA6J6kEgTBebDz6kxURoeB3SX8vaW"), tokenIds: [Tokens.copeToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.copeToken.mint.toString()]: { ...Tokens.copeToken, addr: new PublicKey("6N3P3etaUYGeBs2C67ZQTDRqHsExNsfj85dDWPwHtQBS"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("36VVz3eY8YmWBGskQVjvGGBfyUKHHCEDBgkFtzMpFqeU"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const sunnyUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("3Ukqqshh3kZ8UPbcYYFSRaeJcsgttcmShtNNn12F1rj2"), nonce: 255, authority: new PublicKey("7NP8DTzPdpbQofhNyhLW3j2khutmfy1kuFp2AjaD8rrp"), poolTokenMint: new PublicKey("GHuoeq9UnFBsBhMwH43eL3RWX5XVXbSRYJymmyMYpT7n"), poolTokenDecimals: 6, feeAccount: new PublicKey("CCuSVbnnq8SUj7cpPe7BbHLuKanyxfvfrwypzCBnaDdf"), tokenIds: [Tokens.sunnyToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.sunnyToken.mint.toString()]: { ...Tokens.sunnyToken, addr: new PublicKey("F6nCAMYEFxsyRDVonQXLNufXgAHsgAa1Br8DhBoX3KAV"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("HWCTHmQppFSsKQEk1bHUqPC2WLaidgnfTG9MQGD4XKEt"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const grapeUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("6MxUhBLXHCqpdYaFPTmw1D9fQ7zYnm9grZyJvpGiqr15"), nonce: 255, authority: new PublicKey("SvWmpVVUkv8cwoRnBQ5Gqt2FFYjdpWLS665gE2ZLNQp"), poolTokenMint: new PublicKey("EorFh8siFyLF1QTZ7cCXQaPGqyo7eb4SAgKtRH8Jcxjd"), poolTokenDecimals: 6, feeAccount: new PublicKey("6vWYnRDEHu7kRLbA2dnBgEfbdba72iDMDD9k3munyPaP"), tokenIds: [Tokens.grapeToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.grapeToken.mint.toString()]: { ...Tokens.grapeToken, addr: new PublicKey("686KiYDMMkbredNoWx8yqvAdKSiHuWSG3dnbL6yWYmZp"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("9i14ZKzaDmzKCAQb8hCv4h5GCo2Xiq83JcL7bofk4Ddj"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const abrUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("rxwsjytcEBvXpXrXBL1rpsjhoh78imBn8WbxjKmLRge"), nonce: 252, authority: new PublicKey("AcaxutE6Rh9vRxipTLdqinEdRK6R4ayUAAv2bZPh6UU9"), poolTokenMint: new PublicKey("GMzPbaCuQmeMUm1opH3oSCgKUjVgJUW14myq99RVPGX5"), poolTokenDecimals: 6, feeAccount: new PublicKey("7pPJGwd8Vq7aYmHaocQpQSfTn3UWYGKUgFkFhpMmRdDF"), tokenIds: [Tokens.abrToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.abrToken.mint.toString()]: { ...Tokens.abrToken, addr: new PublicKey("6FRxhbY7bvSiDojPiqoidjTyDjxaUyCoPQk3ifEdfFbm"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("8aTapFecZRZmC2bTeKr2voHFW2twNvbrh8nWYdXYQWkZ"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const kuroUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("HdeYs4bpJKN2oTb7PHxbqq4kzKiLr772A5N2gWjY57ZT"), nonce: 250, authority: new PublicKey("2KRcBDQJWEPygxcMMFMvR6dMTVtMkJV6kbxr5e9Kdj5Q"), poolTokenMint: new PublicKey("DRknxb4ZFxXUTG6UJ5HupNHG1SmvBSCPzsZ1o9gAhyBi"), poolTokenDecimals: 6, feeAccount: new PublicKey("5XuLrZqpX9gW3pJw7274EYwAft1ciTXndU4on96ERi9J"), tokenIds: [Tokens.kuroToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.kuroToken.mint.toString()]: { ...Tokens.kuroToken, addr: new PublicKey("DBckbD9CoRBFE8WdbbnFLDz6WdDDSZ7ReEeqdjL62fpG"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("B252w7ZkUX4WyLUJKLEymEpRkYMqJhgv2PSj2Z2LWH34"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const mediaUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("5L2aVMnNsmrnkxU4B25ajb2pR5AJWBRfUa73wjasjyaB"), nonce: 255, authority: new PublicKey("HX3JKg5HtboRw9nQRWm47rSJkBHczdcXwBgWASyHi3Wk"), poolTokenMint: new PublicKey("2toFgkQDoPrTJYGDEVoCasPXuL9uQnjvXJaDwa9LHyTx"), poolTokenDecimals: 6, feeAccount: new PublicKey("5BkyYnBWnzBWQKnU9AcUaDrmyhjLpAcFxCvVTTnRGyYk"), tokenIds: [Tokens.mediaToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.mediaToken.mint.toString()]: { ...Tokens.mediaToken, addr: new PublicKey("BFAyLvCbMhgF7CQ9fsWWK46jD9mPXfBMDWvXgk5LTgsT"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("7CvBsWsfEif4sAo9dnsf1JKVAfBGcZUVTktqtxBSkgwB"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const tulipUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("BNwrRN23RCoq5MAneJ6Cot7iN2FLtyt9rtcjaVfAXTLt"), nonce: 253, authority: new PublicKey("EFZs7veYVdWBHt7RcAPvXQc46gDzccpZTxAcEm6NyXFg"), poolTokenMint: new PublicKey("4SBx8GXu8HhcVHWydQv1vsDdZs3G93XSL9CtMBny6hS5"), poolTokenDecimals: 6, feeAccount: new PublicKey("8BiqDTCBQ77qjGpED2was7C4iHJrQx9bXhzRt3Wz9xJG"), tokenIds: [Tokens.tulipToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.tulipToken.mint.toString()]: { ...Tokens.tulipToken, addr: new PublicKey("5CKd5M2nXdPM1TMXxqK6Up6GZehKL5uU9Z9Ytm2sFCiz"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("HjMQnuxjVRodoaAg9WcNXb9TAssDaFNpgwcUUKNjWdh5"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const mngoUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("Hk9ZCvmqVT1FHNkWJMrtMkkVnH1WqssWPAvmio5Vs3se"), nonce: 254, authority: new PublicKey("5RyiYaHFDVupwnwxzKCRk7JY1CKhsczZXefMs3UUmx4Z"), poolTokenMint: new PublicKey("H9yC7jDng974WwcU4kTGs7BKf7nBNswpdsP5bzbdXjib"), poolTokenDecimals: 6, feeAccount: new PublicKey("FWKcKaMfaVezLRFr946MdgmpTZHG4A2GgqehAxjTyDAB"), tokenIds: [Tokens.mngoToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.mngoToken.mint.toString()]: { ...Tokens.mngoToken, addr: new PublicKey("J8bQnhcNyixFGBskQoJ2aSPXPWjvSzaaxF4YPs96XHDJ"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("5yMoAhjfFaCPwEwKM2VeFFh2iBs5mHWLTJ4LuqZifsgN"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const stsolWstethPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("B32UuhPSp6srSBbRTh4qZNjkegsehY9qXTwQgnPWYMZy"), nonce: 255, authority: new PublicKey("EtwQJxu8wih29vMpdTa74K9W9tgtL4LT6hbWBkhHwvU5"), poolTokenMint: new PublicKey("Eswigpwm3xsipkTqahGi2PEJsJcULQBwZgxhQpr6yBEa"), poolTokenDecimals: 6, feeAccount: new PublicKey("74b9j23njRpt3PYPxoze2XS29ZgGmucziLB7WrsDpBdD"), tokenIds: [Tokens.stsolToken.mint.toString(), Tokens.wstethToken.mint.toString()], tokens: { [Tokens.stsolToken.mint.toString()]: { ...Tokens.stsolToken, addr: new PublicKey("CeSEpgqc3zV8xDr7Q6PiwJju6a6e92wpAv7Kg6QyFfQB"), }, [Tokens.wstethToken.mint.toString()]: { ...Tokens.wstethToken, addr: new PublicKey("Fb3XpEJgghTURUGd1wphWr93ruX5egnesfdZtjWCxJFy"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const sypUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("5DnwMqYAGEKekYXJdN8Bue6vN1p5zrEnBpmd53jEK61S"), nonce: 255, authority: new PublicKey("4NfadURWeSDPJBGcKQRt39mPhbG9M7EJx6FZDwwcFB9f"), poolTokenMint: new PublicKey("qJxKN9BhxbYvRNbjfK2uAVWboto6sonj8XC1ZEW5XTB"), poolTokenDecimals: 6, feeAccount: new PublicKey("57L2bEFecsAv4jnaM2PBaeAVyPZEYtTmXBi7eaG2xWXw"), tokenIds: [Tokens.sypToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.sypToken.mint.toString()]: { ...Tokens.sypToken, addr: new PublicKey("6d19CQA1FP2MLLAzA7XoZEc9Agc32FaKUS175UVWLGtv"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("HpPnUHyo19VjmXbP6FbbKXu7WQCUEn6h7be76fZdHVmf"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const stsolWldoPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("CqwyVxWeaiikQ3VhvEZSEmupmG1Wmc2FeaUjsCV492Sx"), nonce: 255, authority: new PublicKey("213QoNt5dR56Ye2sx9cwPwpR3NpJUEStQXn8EbbWKkfJ"), poolTokenMint: new PublicKey("74B9aMS7SA832xKngt5VLKmWAP3pa3qkUzWncTmQSsGF"), poolTokenDecimals: 6, feeAccount: new PublicKey("D4kH4fcwwDtGMj4LpcynB977YVnmvDUcuDQoo5sqAgRz"), tokenIds: [Tokens.stsolToken.mint.toString(), Tokens.wldoToken.mint.toString()], tokens: { [Tokens.stsolToken.mint.toString()]: { ...Tokens.stsolToken, addr: new PublicKey("GDprNAcXeR5GVGnCtkS5UqyPGMm2Sy5Lk15qqN36faMT"), }, [Tokens.wldoToken.mint.toString()]: { ...Tokens.wldoToken, addr: new PublicKey("VCgdcsExfmxUDQwusLP2xqZ3ap7VuYyQMMHDPSva2hx"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const whethSolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("FcEro2uFpHcb7Z785CBs6q12KMJqUJKa8VTXPi4TTBMf"), nonce: 252, authority: new PublicKey("HMxZz8fv2uR9suzAPRbJGNB3wZL1eT3eKL3cpYWUbM8K"), poolTokenMint: new PublicKey("7aYnrdmdCRodDy2Czn6keUquUhjF1jPEmfwZPh488z8U"), poolTokenDecimals: 6, feeAccount: new PublicKey("YCVJDKdHNi1mhJtWz7QGbBRreMmw1soeipz7wZbQKEK"), tokenIds: [Tokens.whethToken.mint.toString(), Tokens.solToken.mint.toString()], tokens: { [Tokens.whethToken.mint.toString()]: { ...Tokens.whethToken, addr: new PublicKey("3uQytDKNd5H6XK8FhTei4wCUmj2eTbLTbiLAtWk2SmbA"), }, [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("GR3g8Wej3jmv92hYM1t22kaXog2xjkGjQ7V1XzLd1efT"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const whethUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("4reGGLbesqpAeAZdAJv9hhgA2tgj45oGcyRuEvhATdMm"), nonce: 252, authority: new PublicKey("8uLtzZ1iTLTCPsm3b4QttRmDXcFjhVHRuMS9VTVEwo7E"), poolTokenMint: new PublicKey("7NPtjjAP7vhp4t5NCLyY4DY5rurvyc8cgZ2a2rYabRia"), poolTokenDecimals: 6, feeAccount: new PublicKey("AVw52spXtzFh4bb5ghhpJaDbLx3XWuY85eQNDEo3X1yN"), tokenIds: [Tokens.whethToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.whethToken.mint.toString()]: { ...Tokens.whethToken, addr: new PublicKey("9KpjcpKwhoFPbixvKDfcAhBQcVXk1CSBTGsJdzojDPRv"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("5HaG31FQS4McBVcHxVfwaKaWXE3VCGqvJ1ZDkTxs94cQ"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const mndeMsolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("vjHagYsgZwG9icyFLHu2xWHWdtiS5gfeNzRhDcPt5xq"), nonce: 255, authority: new PublicKey("3HWcojnC1ruEMmsE92Ez1BoebdDXzYQa4USaeWX7eTuM"), poolTokenMint: new PublicKey("5PHS5w6hQwFNnLz1jJFe7TVTxSQ98cDYC3akmiAoFMXs"), poolTokenDecimals: 6, feeAccount: new PublicKey("46mdANZ2DCA2sTFchvD7WwbffbLQa4jCFkkRL23WuYG8"), tokenIds: [Tokens.mndeToken.mint.toString(), Tokens.msolToken.mint.toString()], tokens: { [Tokens.mndeToken.mint.toString()]: { ...Tokens.mndeToken, addr: new PublicKey("2LferrWvYWtHFfdkmixzt9g3aKa3yBNfgbRrP1CcWMMp"), }, [Tokens.msolToken.mint.toString()]: { ...Tokens.msolToken, addr: new PublicKey("GimsuZjYqMXM6xK6S3e9JpGvX6jaMPuNeR6s2piDESmy"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const wagUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("B76e3wtCDTKBgKQjvx87EBkDLPGcCY9w1SGiwjD5kaK7"), nonce: 254, authority: new PublicKey("FRUmMZDiZrDrwioiUYi3tdqF7SEBeT219bBu54PGxoCo"), poolTokenMint: new PublicKey("Df6XNHMF3uRVZnz7LCEGiZVax6rXgz76owtVkBHEjSb6"), poolTokenDecimals: 6, feeAccount: new PublicKey("BCuRKfsM99LJFCchKUBLBZ26UuziDewJDRkkKMwx2qnd"), tokenIds: [Tokens.wagToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.wagToken.mint.toString()]: { ...Tokens.wagToken, addr: new PublicKey("8voSogytL9jLgE73GS3WuujBinKFRQJjvUFsVGYexWZd"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("HEP7mACuN13cT95eDAYTNjgwriqJnMQVhnyRctqnBRe4"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const msolUsdtPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("Afofkb7JTc32rdpqiyc3RDmGF5s9N6W1ujcdYVfGZ5Je"), nonce: 251, authority: new PublicKey("8vrC1FAnW6hQMwJuU5waZdRrBbDJTULqjpdc4GjDtKR6"), poolTokenMint: new PublicKey("9cMWe4UYRPGAUUsTkjShJWVM7bk8DUBgxtwwH8asFJoV"), poolTokenDecimals: 6, feeAccount: new PublicKey("7GPvi21QbwMyBoXU5Zqf8VhnuEh7VH4A1SRPgHJ36eE7"), tokenIds: [Tokens.msolToken.mint.toString(), Tokens.usdtToken.mint.toString()], tokens: { [Tokens.msolToken.mint.toString()]: { ...Tokens.msolToken, addr: new PublicKey("RTXKRxghfWJpE344UG7UhKnCwN2Gyv6KnNSTFDnaASF"), }, [Tokens.usdtToken.mint.toString()]: { ...Tokens.usdtToken, addr: new PublicKey("J15KntYr6iout4ce2kcD2QEdkVbLN4EHHFLfCtke3f6Y"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const msolWhethPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("A71DQffTzgxBSzXjPL3tmf8XXTNtS5mR2D78Y8rmV2hk"), nonce: 250, authority: new PublicKey("FPWpe7QEQnDMivnHksQW2uvcw9tvX1oxejKBX136WRkr"), poolTokenMint: new PublicKey("5qoTq3qC4U7vFxo3iCzbXcaD1UEmDeCD63Dsuoct71oV"), poolTokenDecimals: 6, feeAccount: new PublicKey("FSqUYVzF3XZzLcnj132eT6ed3bK95G1yG4MazcHZi99Q"), tokenIds: [Tokens.msolToken.mint.toString(), Tokens.whethToken.mint.toString()], tokens: { [Tokens.msolToken.mint.toString()]: { ...Tokens.msolToken, addr: new PublicKey("Fcp5u8bL3V24MXjA4noSfMpcEAP2vSj1WTaA1ZNxACZL"), }, [Tokens.whethToken.mint.toString()]: { ...Tokens.whethToken, addr: new PublicKey("DuBCBX3y2FjDWUn2ncK5EKQh229JiJ7HTCjYJhNC87K8"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const btcMsolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("8DRw5wQE1pyg6RB1UwypGNFgb2Pzp2hpyDDNwo76Lcc8"), nonce: 255, authority: new PublicKey("3X1aLdyvcQNc8TvBMPiucMsRCnGMBnGsjJHpZEyCf3pn"), poolTokenMint: new PublicKey("8nKJ4z9FSw6wrVZKASqBiS9DS1CiNsRnqwCCKVQjqdkB"), poolTokenDecimals: 6, feeAccount: new PublicKey("AqiLHbUAy4UWWKGVVgbHsaUVCMg1zemNkgsYBPSirT92"), tokenIds: [Tokens.btcToken.mint.toString(), Tokens.msolToken.mint.toString()], tokens: { [Tokens.btcToken.mint.toString()]: { ...Tokens.btcToken, addr: new PublicKey("6D3sxC6yEe84FUnF5Kpbgx6gN57N9poJCKAtrCeCWdJo"), }, [Tokens.msolToken.mint.toString()]: { ...Tokens.msolToken, addr: new PublicKey("EPoVJLhi9QtVPVo8n31M5k5Knvb48j8zbYyRrUbrHwC5"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const ivnSolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("CFCivUWXBuULVNfJezj1fAhX6hdwVFi2BsCtpu6m96bR"), nonce: 255, authority: new PublicKey("JGhNs5r7YNnJokzzXZWE3REKV8x4GiUvn2xSg7XGg59"), poolTokenMint: new PublicKey("DfgCnzaiTXfPkAH1C1Z441b5MzjjTCEh134ioxqRZxYf"), poolTokenDecimals: 6, feeAccount: new PublicKey("HwwgrSjJGFBtRN8h2daWnVLBciwoo79wNeKi6b5SZmE2"), tokenIds: [Tokens.ivnToken.mint.toString(), Tokens.solToken.mint.toString()], tokens: { [Tokens.ivnToken.mint.toString()]: { ...Tokens.ivnToken, addr: new PublicKey("C5yDeB3jBz5yZPa6FgP6b7HNoFxLP63Pyzpaosnkikis"), }, [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("CCm846T6xj9VAhSAifuUJAXYCR3kaGp5KqhXFHCaeWUh"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const larixUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("DaNULZAv2VyLk75pW3QD5szVzx5dT6iNvoih94Bttqf5"), nonce: 255, authority: new PublicKey("FUVkG7fM3i8T49qV7WsJd68rBaYKvqTkAQCdftqTWWNj"), poolTokenMint: new PublicKey("8sfThep3io4gvcGeuoAg1Rs8GDwKJjtcdAFHqQSSNAVE"), poolTokenDecimals: 6, feeAccount: new PublicKey("AVb9Bvu4rjFYNCHygEnAYCjwnkgtC8C6UmJ7at3dsfdz"), tokenIds: [Tokens.larixToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.larixToken.mint.toString()]: { ...Tokens.larixToken, addr: new PublicKey("AAjjSJsZM3AKK4h9cbGTHkquEZ2fWjgo9A9Pmrj2ynTH"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("82Fs8dSpMxPPfN1ULsXGFREHWz3JizREpTxwz2MaZ1n1"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const prtUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("CRm5uRBsVmUVHVqKfCCvCUX1RLUkjfcBWAeMQ5D9VuCM"), nonce: 255, authority: new PublicKey("A9eqdCXYys7jeoroMFEnkGLoYLa2q5gGbg8RSKHkR2ne"), poolTokenMint: new PublicKey("6jCERp5hKj37PCXP3VTjCDJeoPuSpnMDMz5A6jWQv3yS"), poolTokenDecimals: 6, feeAccount: new PublicKey("FHVidN2ZdGnVaCjYwLjLXrimPbVsaqsUEEiGcVZ6WAPq"), tokenIds: [Tokens.prtToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.prtToken.mint.toString()]: { ...Tokens.prtToken, addr: new PublicKey("3oL2GjsUnQLjHw77p78CsRr7t94AVrtsCnW5uf6NYQ3g"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("2EiVwvsH5cvyk4W243zKoywkaEQb9Bwe9WGphRgBSqaP"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const jetUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("ErWwp9HKjk5ZPLDt8SrHKH5PvSKTwFDdFo5E3zDuE5Be"), nonce: 253, authority: new PublicKey("GYY1t5d4pZnJC4rMXGY9yKMyCzLqxRqbtSguD2KkxghH"), poolTokenMint: new PublicKey("GBijunwxa4Ni3JmYC6q6zgaVhSUJU6hVX5qTyJDRpNTc"), poolTokenDecimals: 6, feeAccount: new PublicKey("6NhybmW42rdWj5TcobNKQT6JaZispgngcfTDrCsgVq4Q"), tokenIds: [Tokens.jetToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.jetToken.mint.toString()]: { ...Tokens.jetToken, addr: new PublicKey("GEtZSc8188t2cCAv21UGCyjvxCeyU5Co99GtRtyTkpdh"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("Bi95f8H7o7zHWuYysxDHEubPv4c3NhsHWhaesXJu91NC"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const stsolUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("EfK84vYEKT1PoTJr6fBVKFbyA7ZoftfPo2LQPAJG1exL"), nonce: 252, authority: new PublicKey("8PSN1CQxfyZ7T4sM3HM3RAgF2Y6VCf4tKSc8xY73Tnq5"), poolTokenMint: new PublicKey("GtQ1NT7R5aaTiST7K6ZWdMhwDdFxsSFvVFhBo8vyHGAq"), poolTokenDecimals: 6, feeAccount: new PublicKey("CJhL3UGesECFt6fvLB3csrGMuHf3M3G78pUzTopUiV8T"), tokenIds: [Tokens.stsolToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.stsolToken.mint.toString()]: { ...Tokens.stsolToken, addr: new PublicKey("9SEBxqhP8sTAzmfiQfCPim1MqQXuDPb6fkGzJF7Z339i"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("G45yhM5mZ5RXZpLxGWLk3PVzdAp33z8aH6F9mLW8fQj3"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const wstethUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("v51xWrRwmFVH6EKe8eZTjgK5E4uC2tzY5sVt5cHbrkG"), nonce: 254, authority: new PublicKey("3Kk8rpjxpc9qv2pJPr1CbmyQqrTDPntpryXActLogQeD"), poolTokenMint: new PublicKey("5a6Y1ephcbKSoyLMQyD1JWbtqawCy8p2FtRL9v3zhaG5"), poolTokenDecimals: 6, feeAccount: new PublicKey("ACKiRmbiMaPEc73pz4dVMuJGPaa74Vx9sfYADjnHuzvo"), tokenIds: [Tokens.wstethToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.wstethToken.mint.toString()]: { ...Tokens.wstethToken, addr: new PublicKey("5c4tzhRVaCxpmu8o3HrEZ8PWBDKSR6QNkBdQrUo9oe3e"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("AFNaWHH7ZGFjB7y7jmPM7jVs7QBAciffu7Z5tZidRHPR"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const auryUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("6HSguUukDH9zqJBm6oAAmFkg1WK9dJ5iLgnppTCM6jHm"), nonce: 255, authority: new PublicKey("9T1koZp2PNJgspcx3G22yLiChBUfYzAjs2dhj2kgw2LZ"), poolTokenMint: new PublicKey("6mJqqT5TMgveDvxzBt3hrjGkPV5VAj7tacxFCT3GebXh"), poolTokenDecimals: 6, feeAccount: new PublicKey("JCqbv7r3mtYhzruNFjc21X14fndDVBLMiaNQrsHVpWui"), tokenIds: [Tokens.auryToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.auryToken.mint.toString()]: { ...Tokens.auryToken, addr: new PublicKey("413s6jiRbayD9didA4VnY8kQVgVBgkYNpYB2tyNf8sbh"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("GdPeogNxRWAZtUj7ZHc7fUpBuGHJosdbukiT2krFtXm8"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const avaxUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("7c2CLgatf2TU36PgpS65WLmvWk94rmaHVf1Z1peZ7mcA"), nonce: 251, authority: new PublicKey("Mq46N9EknnxHL9fRkJhS4Eg9YXRifHiWzFJTD11ePWC"), poolTokenMint: new PublicKey("Hmfrtmo93DpSDmVNLQKcBS5D1ia5JatiRSok9ososubz"), poolTokenDecimals: 6, feeAccount: new PublicKey("7JH76Kw4dHyC5szRXkx6MFkJ3BEViodfNy15uFJst1cX"), tokenIds: [Tokens.avaxToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.avaxToken.mint.toString()]: { ...Tokens.avaxToken, addr: new PublicKey("5rU6M2jAXQMSmgrsn14BPoVVhoBdCU6y5cP7XMjN4ZYy"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("D28rzq246bcXBrYiCeALY86y8NwvCUmuJGNggvKsh4WR"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const fttUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("8npdwWX2BR39kcFLtTJABbcjNq7NWQvipfqxgsfk9mTX"), nonce: 255, authority: new PublicKey("8zU13KiLb1e87skt4rf8q1LhamEKKecyu6Xxb4Hqnm7e"), poolTokenMint: new PublicKey("FwCombynV2fTVizxPCNA2oZKoWXLZgdJThjE4Xv9sjxc"), poolTokenDecimals: 6, feeAccount: new PublicKey("C8D52rGuZcsBENhWtR9aqJVRU62cL7jyyEhxesKwc1k8"), tokenIds: [Tokens.fttToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.fttToken.mint.toString()]: { ...Tokens.fttToken, addr: new PublicKey("SasuKsATA2ATrMfFfSJr86wAGVgdS69PkQT3jFASBB8"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("3wADiuUqoakdoYYYxKqwoA4VN3uWZy5UwvLePox1mEsK"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const rayUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("2R2VhohRc5WoNHtRdwnjovAQaZRAmr1DE3QFW5jfgb6v"), nonce: 252, authority: new PublicKey("9B9ZcYT8jDQ6XLe6gRLDCFv1zz3uHVKdbZT9DFhsYSQW"), poolTokenMint: new PublicKey("4cXw2MYj94TFBXLL73fEpMCr8DPrW68JvrV8mzWgktbD"), poolTokenDecimals: 6, feeAccount: new PublicKey("HURhvCRsrwwR5TiG75Hn274WwL76kaKgjgC6n9h4FEHj"), tokenIds: [Tokens.rayToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.rayToken.mint.toString()]: { ...Tokens.rayToken, addr: new PublicKey("9ASj9zDg7cT6wtvn4euSUiZte8yN2U3Tn6cTVZvMHbU7"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("HGTxSWbb62nxk4oGkLkHUvrEzR5D4GKYRb8ZDcA2dpki"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const slndUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("GhosXH9yZPxqSyTHqJtXQt6w65YfiGjKXcEXciX1P3z8"), nonce: 255, authority: new PublicKey("ChmSHndtXRsYnFjYA2F7yRRsnyZ8kCpxSogTsCUgCEsh"), poolTokenMint: new PublicKey("F59gkD7NnsdJbFKrRZsiBC8PAooN4c56T8QmahfW1iXN"), poolTokenDecimals: 6, feeAccount: new PublicKey("GMipxN5pu6F6wwUrq6RhpqgcMjcKLTsnDTeNFCuUm5n7"), tokenIds: [Tokens.slndToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.slndToken.mint.toString()]: { ...Tokens.slndToken, addr: new PublicKey("9RcdfprKxbTzp3erTJMwXKznNCLmbCUaKhibaTMXhToi"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("6wEh8r3Czc3nKkN6JXobShnLG7ZqA5Y5DREGzkirYR36"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const gofxUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("C3b5AWQJiyar5g8EWu75zgDE26F55ZJWpqtFVCCVDQQQ"), nonce: 253, authority: new PublicKey("3SphkwoHx3d13Eu9RehVVg4gGMZv7FEaDXvPqWbQF9bm"), poolTokenMint: new PublicKey("7vnps4VE5RTGAr5fmPZu7fSrk2VnM4Up838grZfqmxqE"), poolTokenDecimals: 6, feeAccount: new PublicKey("CT95CSNqi4nttNW84dDuA8Um7FLAC52PVUvuVRKeCHVK"), tokenIds: [Tokens.gofxToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.gofxToken.mint.toString()]: { ...Tokens.gofxToken, addr: new PublicKey("5AhPVbtyiTV3SiNRJuq5z9xeaqqwoHQWqohR9HvjJkKS"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("6mtcbtTAadVEdnWJZmsq8woqLea7ef7k5WumVXSHr5KQ"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const woofUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("HY6iq1dp7pHwstfmLFu8m2iEvRQtjX3N751jcN6KrQXU"), nonce: 255, authority: new PublicKey("8JuHyxYBpemmryQq4bcA1GTuKaub9JJuLPoNNJpwX9aP"), poolTokenMint: new PublicKey("9EjcYfHcG8f1mccpHyaAwpoxaUPiheC6KgLQjyD9aTb6"), poolTokenDecimals: 6, feeAccount: new PublicKey("886Yu2fd1x8xpb4icdrhxZemdD8PN9RLdrq6Mn89wR4k"), tokenIds: [Tokens.woofToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.woofToken.mint.toString()]: { ...Tokens.woofToken, addr: new PublicKey("8ju56eRfs9wg3GtoSFVoQoR6NnQn6gsWr6FkQyZ1EeBg"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("5WcqVktXr3Rr78MGGfcuwgB6azoN9EDCZLP4werGnfi4"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const sdogeUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("8GoFKVkoxPyQKWXhoXs3ycGmp9rXYM8hz7eq1EUM1MJe"), nonce: 252, authority: new PublicKey("DSuxdCkHQy6rAjFsL75tRu2UpHVQDoYsYFeZt15sVDYL"), poolTokenMint: new PublicKey("CHTKUJGYRtBDqnxCFjxe5KEkZgxV98udbhuYYyzGxup5"), poolTokenDecimals: 6, feeAccount: new PublicKey("2gCRgQEySFTXA5v99vRUJHAGhQPTPtHx16Rdgipz7Q1y"), tokenIds: [Tokens.sdogeToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.sdogeToken.mint.toString()]: { ...Tokens.sdogeToken, addr: new PublicKey("ABQfmExcxJt2wE9JeLUxvhkpA2VkoQVvWKDvfusjq226"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("EDBXkzwxu6UXqBDnzb9AJ6Eggjyyct7SmYVoR8PYJkHd"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const catoUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("GumfURfQvPaJ2E5ueCEKYJmymNQbV34gU9TmiKZYRkiv"), nonce: 255, authority: new PublicKey("EjoLNSDggfWWE7BxwoL4tJHBEg1cFpdiyKeYTYCec2o2"), poolTokenMint: new PublicKey("55r9txzQtmjTykmTXmBYZCVMg5z9squB8b5cSw2AhxA4"), poolTokenDecimals: 6, feeAccount: new PublicKey("F6xCTe256cA6HTX5CYBkDtXoruHvjfbxeHNeqR9kR7oJ"), tokenIds: [Tokens.catoToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.catoToken.mint.toString()]: { ...Tokens.catoToken, addr: new PublicKey("AGNHgSQuPd4EqjLTLJrXEVb3KCkjRxGVDTaag4drV1XX"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("FESKk2kj9oqdYR4dcaP4LyqDyWZt3NttgypRVFoyUQNs"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const oogiUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("9tK2LaapwjxaUmfcAzY9zgC39M3wnaFX558y2Bb4oxWG"), nonce: 255, authority: new PublicKey("EGuBsx6HAgAtf1ogzF1uXTUQgwRex61hnhvuZcMwQKUJ"), poolTokenMint: new PublicKey("DSiHyHDn96bUQSZtizyCRLcQzrwohZeMpVu8rYJN1HzG"), poolTokenDecimals: 6, feeAccount: new PublicKey("Acom6ebnmbFKQk3XeX5VHPiz8bd7kzfpUMsqHKJDJnry"), tokenIds: [Tokens.oogiToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.oogiToken.mint.toString()]: { ...Tokens.oogiToken, addr: new PublicKey("GgfTGZ5DnAotnXKFM86vqffKQZ9nGgHaX1PDS7RTcKjQ"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("A3rzsPGtqowjKXfscYrPo1jvv2EVYpJwXQPGKxgvvStf"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const sonarUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("Dzp3ZWyUZGXZYWfodXdLdXfiW7gwVZBdWBwQ28eB6cTH"), nonce: 253, authority: new PublicKey("3HJw5YCXr69DzUcLSif4BicrMrXjC2jrEMpjQhQ3AwmB"), poolTokenMint: new PublicKey("5MvQHx8eftU39JTucFsT315JFnQASuDQg3FqxTw7xcvN"), poolTokenDecimals: 6, feeAccount: new PublicKey("J8tqP1N2fEgMTGhX2PTgRyj5ZFsFWsXneJpXyRjekKWA"), tokenIds: [Tokens.sonarToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.sonarToken.mint.toString()]: { ...Tokens.sonarToken, addr: new PublicKey("DxGfntMLqAjtB287GkPPcfotUGcWdhtpzR6KukdBo39H"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("EVymxW4gFtxw7qjMYGFq4EupxHc1RteffwETa5MKTDPR"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const aptUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("Fg3UabVqnfycMtkiTVoaia9eNafehtT9Y4TicH2iBtvK"), nonce: 255, authority: new PublicKey("JDEYn1JsacdxoB4v4mbctFSVrSUPttacX3gxWphFHJKZ"), poolTokenMint: new PublicKey("HNrYngS1eoqkjWro9D3Y5Z9sWBDzPNK2tX4rfV2Up177"), poolTokenDecimals: 6, feeAccount: new PublicKey("41H5mWwsZKewJeV4wWiNjQ3U4VYBnwqCpzvAWt86baHd"), tokenIds: [Tokens.aptToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.aptToken.mint.toString()]: { ...Tokens.aptToken, addr: new PublicKey("636crNdZTf46gFUKuedaBCZDBMLahf7KGud2LyTMskU5"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("DGEYFkEHyiuHWtHeCGiQGn1JbkGHqYrNwaP44miRbgxu"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const dflUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("59wJQz25rr38YnD69eXsntbdE4LB7m39KjHqZUUaoyZ3"), nonce: 255, authority: new PublicKey("E2kEN96wSW5bYML8qYLgxKM4pvdLjqhCRMyCvqYyVrXt"), poolTokenMint: new PublicKey("AWrtTWG4Zgxw8D92bb3L3sQtGLD3zDztMPWsXSph8iBP"), poolTokenDecimals: 6, feeAccount: new PublicKey("bZxTKZNF5gwnuXQ3xt8huUtsLAyFoh2NnQwmDDgbVxd"), tokenIds: [Tokens.dflToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.dflToken.mint.toString()]: { ...Tokens.dflToken, addr: new PublicKey("EXZdhy56TjvArQRfDakjuQdT7DffwFEYdY5F39vn3Wbr"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("Bhch1NY65RNA8uFaj2s8Fzxu36SFMQiniyZidq4jzsTt"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const dflSolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("GxkXvW6dJP3KUNWuXi64V99uRsPFEFnuuasNTq6fvZfP"), nonce: 255, authority: new PublicKey("H196f95DHGfhNkF3W9h4bjBqpL8g3qesEENHRsDqJshj"), poolTokenMint: new PublicKey("9Y1vPaAsMz8X65DebMMnmBjbMo8i4jh4mcgiggZUUS3M"), poolTokenDecimals: 6, feeAccount: new PublicKey("7L7kjeEo5oE9SCZ9vacmyJvfKKmjAevVpdktBGyxBxaF"), tokenIds: [Tokens.dflToken.mint.toString(), Tokens.solToken.mint.toString()], tokens: { [Tokens.dflToken.mint.toString()]: { ...Tokens.dflToken, addr: new PublicKey("BpjpdhuMkPPW3HPx4U9tRmNAXdUeb49jxwFGy2PrSNCp"), }, [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("HcXqJthqq1UeGHA8xPeDLnWVJFcndoUnKnpULRCjyTzi"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const frktUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("DXNct3MfHDuhKiXHY3AUXPtj5sQVY3feuDxkDRfCw1rL"), nonce: 254, authority: new PublicKey("JBCdhgkmW6xHdZUZdKdf56qov9LtHixf47JpoCWm4qcn"), poolTokenMint: new PublicKey("FnDxJPNk7pPmGHUbR4XUHmHevrkXHdna5D3sQKcAtjBL"), poolTokenDecimals: 6, feeAccount: new PublicKey("DRn2F5MsWzLihtqsheuJmugJuHQGDR23cvqCLy7eCucw"), tokenIds: [Tokens.frktToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.frktToken.mint.toString()]: { ...Tokens.frktToken, addr: new PublicKey("AUSeFBvVtLiZRppRu8Uvd8NjzCkQzaCi5Si8WWyko9p"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("C3RzSoNiBfTNbAZMyyuV2aLfwGQRyjvkjL3pf9iuvU3R"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const tttUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("HD6pqxyqj4S7eS3orAyQyan5RpwpMPjKEDWgTyYXcfr1"), nonce: 254, authority: new PublicKey("Gh1QqgpKGd6zhicNvBh1VLbycpoq6P7QBCZT8MdhWzN1"), poolTokenMint: new PublicKey("FGgP1npQTsC5Q4xBmQtNYSh51NKqNwdxBZy8JCo3igcu"), poolTokenDecimals: 6, feeAccount: new PublicKey("AFjaSrdgNJsFDSQTDbkBoBMLHt2qCt5GuPHWDTUV4nHt"), tokenIds: [Tokens.tttToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.tttToken.mint.toString()]: { ...Tokens.tttToken, addr: new PublicKey("HbrvwSnL11K5EALN21FdjmWvG16VNcq5iyHEKjdHtyJe"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("CQvyngoqxCdgFQYjbT8EKved6hTDzmzdp8Xxxv5FkXmd"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const upsUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("G67ZSkxE5N67x6A1WhcTaHiFHqRtRQUb3QHwjtPge1Xr"), nonce: 250, authority: new PublicKey("Hj3vg6P2DBfJ6hhvCoucaGvL9cwsvUgeJWZRzuXTZ6hi"), poolTokenMint: new PublicKey("E1U63VXhNiWoUkVvjrfLDdV1oJrwE6zLde3bohr6jCqz"), poolTokenDecimals: 6, feeAccount: new PublicKey("Cu8SFyZKsHcUYhxECpt5Wr97CeHSXeDyNjs9kyDWtVJm"), tokenIds: [Tokens.upsToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.upsToken.mint.toString()]: { ...Tokens.upsToken, addr: new PublicKey("CNw37MJdV6gBChtEtUgGrx3zWXz8t3bYxD7u5axPrwdJ"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("5iLVx3LwhWiqjaRyLaiVNsLbYBqy48fvs2sTY6q96nNy"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const fantUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("95aDcNzL8tL17jzHAUQXnRwuCmYBWKUr4xfjV6AMVJY1"), nonce: 255, authority: new PublicKey("GeTZHdp1sYgX6J73CBeqS5pjb7xfY8D9Rzf4E615oGMt"), poolTokenMint: new PublicKey("GjG7JjTQfQpDxw4hWx4etP9oTaYCuCbPjsU8WaUT3xHB"), poolTokenDecimals: 6, feeAccount: new PublicKey("AdSQYnzmJ4j2hbqT5aumXAf4a3T2AxmGHbCgHER8rf6K"), tokenIds: [Tokens.fantToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.fantToken.mint.toString()]: { ...Tokens.fantToken, addr: new PublicKey("CyLaJ6Y382czGE75yFDg2fneKni6PjZHH9Jh4GZN2Nyo"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("7wHMKRPVsacb3JcBsUxLKLZkAPbX81VNc6Z6J9uvJ2J8"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const blockUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("ExeW62iy4xEUo5b5XnDru5oQCDRDUmBaFNqE4V4u7uvm"), nonce: 255, authority: new PublicKey("2fSbre92FnmkeUP5iT7jdFKNB3nfx5yQ5GEW2mjVigMi"), poolTokenMint: new PublicKey("D8WjqtwC9CzBrQKfSf2ccCHFQuPYwyLv5KAy8WjT5vnf"), poolTokenDecimals: 6, feeAccount: new PublicKey("BGSDZoQyH8QGJDvQ8toms4Pk4HWHaFEXSUvJ3AAYXxmF"), tokenIds: [Tokens.blockToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.blockToken.mint.toString()]: { ...Tokens.blockToken, addr: new PublicKey("7uJ5SFRGzrnbspUThix8M2wFJNnS8vvSKbCEhKmqMjNm"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("4e5ZVp7u6YWEibveHscZmbmHpujtbJNUHFj14tqtAZKv"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const runUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("9j4FdbK68xUDQVynTWHbNzBRAj7Q7Lywiqb82en4JzZs"), nonce: 253, authority: new PublicKey("9RUMuXequVtf9UVYHoKJxwWfqyod478nBfX8H3DvSaKV"), poolTokenMint: new PublicKey("34Ppq6R8NfYBwWwPY4cBK4Afyb8hHaASQFukCzH6cV4n"), poolTokenDecimals: 6, feeAccount: new PublicKey("pPH4mFHFu1c3ZR59Zaun5jSCBRn6pU1GWSoVHD4LKUs"), tokenIds: [Tokens.runToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.runToken.mint.toString()]: { ...Tokens.runToken, addr: new PublicKey("tg7YMVac4S2ZpVrbaDqrZgURyTBBrZCQUkQ6Fn6nnrX"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("G2fZDZKa5Y599xzqP1jVQ3EMCfiG6f4dMS6G1f7BKoQe"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const uxpUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("eKuTPdMHmnVzLP63oWwdUH6bBAVcdvBfg4zvH2nWWCj"), nonce: 255, authority: new PublicKey("DYwCP16u5pmLMspCb8tdTQaaF2rBvM2qvgzm5uYvPUHT"), poolTokenMint: new PublicKey("HjR8JgqNKQVMvdryqJw5RJ4PCE9WGk8sgbEF7S9S3obv"), poolTokenDecimals: 6, feeAccount: new PublicKey("HoaPae92LswzSbvnVbdkBAYFNanrvK3kFvWtYyUhpC2o"), tokenIds: [Tokens.uxpToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.uxpToken.mint.toString()]: { ...Tokens.uxpToken, addr: new PublicKey("BWL9ocg8VEBSfrS7zjUBUidE9T8p95J3p5wF6C4Vaqrs"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("GQC4fM5E6dr9MsXvtMzAR4Z8iCduhyFvYCLdMAAHGCM2"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const btcUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("2dwHmCoAGxCXvTbLTMjqAhvEFAHWUt9kZaroJJJdmoD4"), nonce: 253, authority: new PublicKey("BwJ1vMtJiBy7dJaVToR1KUwVbBsGUTNN4QdKVSf8EEh1"), poolTokenMint: new PublicKey("J3kvcay3N16FBdawgnqoJ9v9p6XCvyCLE2Z9F5RLvGkj"), poolTokenDecimals: 6, feeAccount: new PublicKey("HR7c67SkeLvCpHrVSu7MiiAERQh6iD1NrCJsj3kWiZnK"), tokenIds: [Tokens.btcToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.btcToken.mint.toString()]: { ...Tokens.btcToken, addr: new PublicKey("D3Wv78j9STkfJx3vhzoCzpMZ4RqCg8oaTNGzi1rZpdJg"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("HMFLg2GtbWSSEe92Vuf2LQdUpCacGj2m2PwvMqzwQFNi"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const mndeUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("2yNwARmTmc3NzYMETCZQjAE5GGCPgviH6hiBsxaeikTK"), nonce: 253, authority: new PublicKey("2ZzxuHxvPQtPU48Tffs8LD8sy17rgjBRQviRVxQ54fR6"), poolTokenMint: new PublicKey("12Uj74zgUUoBe4yeackwQ4qYtFMr9fk1xL6q5Nha6t2N"), poolTokenDecimals: 6, feeAccount: new PublicKey("6AvWhLSuAqTWUdpo4jF84s4gfgAjbRQv5vLf7mYNCgd8"), tokenIds: [Tokens.mndeToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.mndeToken.mint.toString()]: { ...Tokens.mndeToken, addr: new PublicKey("AfF3SJFpyfU7iw9KtrwPyi6corJbyiC24JyVis7oxNVr"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("FT4GQqs5sEvqhsWm845VF1vmHjdQkrB1jdsGPJbzB4oB"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const chicksUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("3abwmh8LDUsXMoDgNzZLq9QvKqKbhYND9N5aXh9yz7Dm"), nonce: 255, authority: new PublicKey("HmNqp8F5Bp16dUTUihhL3TnyQxfzJ2GtTo9VEQx6bjB3"), poolTokenMint: new PublicKey("71CBZeJ4tw38L9pSPoCz4fRsuWE64Fipyzotte7haoCS"), poolTokenDecimals: 6, feeAccount: new PublicKey("4zRJg9Kod7bd9tR3mxQhxzAQUPqQmUGJbmrWpQ4XDGT4"), tokenIds: [Tokens.chicksToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.chicksToken.mint.toString()]: { ...Tokens.chicksToken, addr: new PublicKey("84Ha1dXH8YAWXt3AC15RstnUCoWT3hg24tUGD1GtqGSm"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("GkonWV6urvzsnKwVmPXe89fTX1zBfv4xrAhx9JnxV9Nq"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const onesolUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("CKKuMECwW75NBNRKtYJz1svCycRHt4KpXmcNnHXiHY73"), nonce: 253, authority: new PublicKey("2TSCMpjN6ToLJy8baiFTc9UdB1PuHFsr24mos98Zp57v"), poolTokenMint: new PublicKey("6MF5CHWAj5mS7FhpxiKz37CzR2eYTu236XpBKKMXCrGg"), poolTokenDecimals: 6, feeAccount: new PublicKey("9Rw29Mvx6b2RMAbdZoqs3gBRMcfYjBYRyiegNZoaYrWS"), tokenIds: [Tokens.onesolToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.onesolToken.mint.toString()]: { ...Tokens.onesolToken, addr: new PublicKey("2meoejmWQno2q6cbFMRytu7UMqMA8FTx651feSUHfTtC"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("n5CtiZDLm2xNxVU1o4KC98dNGiFb1sbuCazDihahbMy"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const wmpUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("Cqy7PRGRx2QeTLZM3QmLGN68uHxEd9euj2eEeeZWnuvQ"), nonce: 255, authority: new PublicKey("9vkbzRnjd9qpmunBUHqS8Fnt9DUEX5akJPm9movtfNxZ"), poolTokenMint: new PublicKey("HDgxKmiA8Pv82fNguhVeMkZqQkos2YksFPoP1KttWxX8"), poolTokenDecimals: 6, feeAccount: new PublicKey("Bfr66xExhYijJzc732abX7znkFnj4v3otQDFbHaz7RkK"), tokenIds: [Tokens.wmpToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.wmpToken.mint.toString()]: { ...Tokens.wmpToken, addr: new PublicKey("3WubbpV7W82H6FERR62Bd8Z4fXFGaihtBNqnT1zkGr6f"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("8MxcExnMniQEDs361cZseukEau9Rmd3CmrCXxasmNM1x"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const unqUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("3a3G1RjJe826EB1toShvPPWnyi2jXR53HP4vYb936kwj"), nonce: 254, authority: new PublicKey("94V4mU6bWzU86tdzFbBCjkFngqXvf5MwXKhVLgJA83vL"), poolTokenMint: new PublicKey("2VuGzaMrDnDyZfYvDwSXk38s7M2wpud7LDY3dGA1J9sy"), poolTokenDecimals: 6, feeAccount: new PublicKey("9iHGnquXmnJnSATN4ijGj7Niz4StxXEMC8KqB1pT51uW"), tokenIds: [Tokens.unqToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.unqToken.mint.toString()]: { ...Tokens.unqToken, addr: new PublicKey("Hf4gYkKNAPhm2RYrXrcP9YVL44VbYnsRsyUuBnZGzqPr"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("BZ9oTLGDL6tsvoooQ9qEBSM3sYKJB1v2e9b4en5ix1Mp"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const basisUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("9wb29L97MmPp7Nw8oaqiAGkXceETGNQurhySiUNLv5wh"), nonce: 251, authority: new PublicKey("786ezhfHqkmJUBmjrWYGpzPnVWR8zhy2V71qNws7D89z"), poolTokenMint: new PublicKey("GoaAiajubRgeCFEz9L6mLnSmT2QFegoJDH5tpLfivpj"), poolTokenDecimals: 6, feeAccount: new PublicKey("4FjEd37W9FExXq85nLeuNWuhUaTwkFdnqewt3E3qoYAh"), tokenIds: [Tokens.basisToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.basisToken.mint.toString()]: { ...Tokens.basisToken, addr: new PublicKey("7QM71YvJm86bN9RLFoEvyDX8dBgLh2xjnabcHf4d1Q1y"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("AmP22dYrTsG2LrkQX9cLg79jUrzDJcmWqGEWmM3Mdn46"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const gstUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("87E4KtN7F4LivKhjqXaoQAvS3a8HnM4DnMUrbMrkVvXY"), nonce: 244, authority: new PublicKey("CwwMfXPXfRT5H5JUatpBctASRGhKW2SqLWWGU3eX5Zgo"), poolTokenMint: new PublicKey("E6FUnQHGHJVJg7oExVr5Moeaj1QpdpZQF5odYjHXWPZb"), poolTokenDecimals: 6, feeAccount: new PublicKey("BynpQprCNjcY2KHeffDKzquyKWvJxikty3donrMT4ZPU"), tokenIds: [Tokens.gstToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.gstToken.mint.toString()]: { ...Tokens.gstToken, addr: new PublicKey("9r39vqrJuubgafaJ5aQyDWYAUQVJeyZyveBXeRqp7xev"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("7LFnr5YgUyEgPMCLGNQ9N7wM5MFRNqCuRawLZTe5q4c7"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const meanUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("4jhCSYuGkLCiB8uvCaS34QCtPycBjayxEk27YCartTuW"), nonce: 255, authority: new PublicKey("Fawkj9g4s1M26uZDF6QczEviyib2Ge3FaPdCG9TJLYcm"), poolTokenMint: new PublicKey("F5BTnwuMA6rxftTdbZ33VWKr2wrr6DuQHnd4guKmPSYQ"), poolTokenDecimals: 6, feeAccount: new PublicKey("EqhWQbxsa36o7YSrCNvJTV1yoTRTWxCiLKcG9pzafprc"), tokenIds: [Tokens.meanToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.meanToken.mint.toString()]: { ...Tokens.meanToken, addr: new PublicKey("5KSCuA99i7PSF6KvvbvV5hDveGse7isqF6e7tFXPeMyn"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("13PtHDhQzswoFWg8Gr4yVrTmUEW4CWxeKFkLVERCmypB"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const aartUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("8wVYTnchy3WbhJvKn4NhTbgtVm6Bfd6yvxR33DsSftse"), nonce: 255, authority: new PublicKey("GAWAD19LVUgKmkWWfB4Xg92KMXuVR7M1gUpQPiFAAtxR"), poolTokenMint: new PublicKey("HCtyJzFUtYecXrA52s4Y9atq4J1fhT3cYsTX17XVSFag"), poolTokenDecimals: 6, feeAccount: new PublicKey("FmZkn9xAwpZULmF6rSrcz1pHiqqNnAXCUFWs1z5t9LSX"), tokenIds: [Tokens.aartToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.aartToken.mint.toString()]: { ...Tokens.aartToken, addr: new PublicKey("Hy3FDHpTfzqtooUARjgUvYuRcFnjGH5WLftu77DyEnKJ"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("J4Cd9u1WuY1WnCScENuRyL2jGh7qD6vpRsWJG6ZsC5z9"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const shdwUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("25bQ6UzZpgFgnU7MqZdqM9Axi6oJunytRL2LgXruDWZB"), nonce: 254, authority: new PublicKey("BjnfpyU3Verx99dKcEJZpL1AqLTPrkAUcd44LpXcXVvn"), poolTokenMint: new PublicKey("DJqqvzSuPaWThfzwMjXx7H2ZmHDdwxza6NtFudtuXcpc"), poolTokenDecimals: 6, feeAccount: new PublicKey("9wmHbXURZ4zTPSj1KqoRSCdBRGUF7jrURzf7BB39cxM4"), tokenIds: [Tokens.shdwToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.shdwToken.mint.toString()]: { ...Tokens.shdwToken, addr: new PublicKey("8ZVaNyNZQkcMzF7esuZoRgRo7Rc9eKEN18v4zw7Ng8JZ"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("H8A2xivBXr1RMCYmuhJ7dyEXJqPxaGDyQaaim8WucU7c"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const shdwSolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("E3fxkJGNNAWf5xXDfMdq5qofBVkQtLKxkP7gG6Up21Ts"), nonce: 253, authority: new PublicKey("ByC5idkRdo2XdU5U6tSoSQmfq6spztUYMaSs2rrcJRPh"), poolTokenMint: new PublicKey("2ws7g3LBPdctfKn42Di9qxzQtUJ8ZL1aEAX2rGEQMNqh"), poolTokenDecimals: 6, feeAccount: new PublicKey("G9HR4sFJufdUovMGn4qc97r7fhgJCkTDnn4BT2wPWYar"), tokenIds: [Tokens.shdwToken.mint.toString(), Tokens.solToken.mint.toString()], tokens: { [Tokens.shdwToken.mint.toString()]: { ...Tokens.shdwToken, addr: new PublicKey("9LQEB2SZQJxtLQStgXVNzgWU3LVkc4szK22iDHcSr4K9"), }, [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("F2qtMkEy3L78wpw64bckvRx5M4w12Zi7bimuPBnYzto1"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const scyUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("Ci2T7KY8xXc3NmSr4JmbhZ2V7SfjZ7Fn2q6VxJsDD1Dg"), nonce: 255, authority: new PublicKey("fmoBkLez7cSLnG1XNn6PTf6UH5Vq2hSAPrZ1NbvRppL"), poolTokenMint: new PublicKey("99ZHUQsgxL7K6PHrGNi1gSwawwPr7UA5fbWrYoHQ6qhX"), poolTokenDecimals: 6, feeAccount: new PublicKey("HHhxxFKyVt4xrYnJqAiywHCzuoCu45S4itkLKvop2fAe"), tokenIds: [Tokens.scyToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.scyToken.mint.toString()]: { ...Tokens.scyToken, addr: new PublicKey("Hfa6kPY27pgnbXHMd1bKBaYMBoF8RRxUm2AmWHBWudcn"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("CYKEhyhe9JZqLzaM29o8urMu8riDNBE6ycZP6bLQtkbF"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const slcUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("ByfDbpLVNVQHzU6E5dmLE1kcAKWAYRr9LPSGcVxxSRFF"), nonce: 255, authority: new PublicKey("7G6i4eQxiJvXg7hPn5kMrso8AHQNsdfPZZdJM3NNJuYz"), poolTokenMint: new PublicKey("E5kSBqTDxFLbLNQaVVtPtnhEYVLMCK2fVSEKoMKL98qR"), poolTokenDecimals: 6, feeAccount: new PublicKey("CtBP4cFDLzm3KQCQRKXwwsMgYG9f6hbwuUswUZBzYvvY"), tokenIds: [Tokens.slcToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.slcToken.mint.toString()]: { ...Tokens.slcToken, addr: new PublicKey("EnvNSVK9JRQ5jmsz7nvbhYmR3MHSeMvB8Mf1e4VwoyRe"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("CHuUSo3EMCqtGWvUGRj4crmDzV5YKdYvqrhHSEitAP8V"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const wustSolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("M3DfDvKZ9WEWYWcBuguvt3rYSbKqj66PgjW69DoEq9C"), nonce: 249, authority: new PublicKey("5mYWcs7n1JqDVeYby897eEUNeEJsp2PNMg2Y2VMD5Jrf"), poolTokenMint: new PublicKey("6c13xsmyk7UaHUWZ2rm1MM3ZdrQRSBkQ9waaG25ridVs"), poolTokenDecimals: 6, feeAccount: new PublicKey("BSoUBwfNgXSHX8QoZUnjfu8wWKyBmjNyDXwsgW3UEff9"), tokenIds: [Tokens.wustToken.mint.toString(), Tokens.solToken.mint.toString()], tokens: { [Tokens.wustToken.mint.toString()]: { ...Tokens.wustToken, addr: new PublicKey("3T7UL3ixF9S8XPjW7SEr9yYY8A5YWTDc7omgjKD2ULhb"), }, [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("91NfC8SunFRWF6BqEKnbnJCursfiDB2U3H6GGCqsFVxc"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const wustUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("Awp1hdAi5xi3CTDsXxiZsygSacpZV2a3L8rNNvpNRVn4"), nonce: 255, authority: new PublicKey("EtdLVaBnKzfKPqp8E2swCyQcjp8XjoT5FE72kqGxWCkq"), poolTokenMint: new PublicKey("J1KfRtP5y2warpD7LdJhfBLPKoWwSqYuovdArSv1mpQ7"), poolTokenDecimals: 6, feeAccount: new PublicKey("2onwniiH5fapr1EPsCDBnY92HGzoQpiHnNPWTmxngKbd"), tokenIds: [Tokens.wustToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.wustToken.mint.toString()]: { ...Tokens.wustToken, addr: new PublicKey("GZWYWkbZ63teAW3tUaThq7k4NMp67TqwF94TqAMRSPx4"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("DMuVdnkRsqP7v8exbrdHNn7WoViNLjf4PVanEQtwgFZ6"), }, }, curveType: CurveType.Stable, amp: 100, feeStructure: { traderFee: Percentage.fromFraction(6, 10000), ownerFee: Percentage.fromFraction(1, 10000), }, }); export const msolWustPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("BpiM8jnpbha2TnTKp4AogyLYYA99Ks73GfDGueUWLakT"), nonce: 255, authority: new PublicKey("DVSsnD9fid2o6nzqbET1LctDmNMHBthf8LS1u9ZPyebr"), poolTokenMint: new PublicKey("68YVjgPnTUPcBqZyghqvD2WPNsrLKsjYTmBKJzHRr4qd"), poolTokenDecimals: 6, feeAccount: new PublicKey("ETX7csSJYTMYFwLAC6oPDKXnYWdpkzsNXyG2JuxVV4tJ"), tokenIds: [Tokens.msolToken.mint.toString(), Tokens.wustToken.mint.toString()], tokens: { [Tokens.msolToken.mint.toString()]: { ...Tokens.msolToken, addr: new PublicKey("8SuMMuDbSGVpWjp3fW5kzpMWuMhxcdQwGgLJiviP25UD"), }, [Tokens.wustToken.mint.toString()]: { ...Tokens.wustToken, addr: new PublicKey("FL5QM8K2AYrqN52ssqr9GA3goYGkUiXQQxXfFFc9xD4f"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const wlunaWustPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("C9NcP1mx51DLZVX8VtAk2Ldip5v6xCxZGmhx7Bxtqnz8"), nonce: 255, authority: new PublicKey("CAsASHduARHrb6pFFYrD9vcqXWhEEj7Z6AatKYVG3dbA"), poolTokenMint: new PublicKey("8Mh7drLbt3jFJYwp948XyvQscGLaLkChNcaH5wwaAoWA"), poolTokenDecimals: 6, feeAccount: new PublicKey("J43pVTNEB3AQEeXopMWTEozjPeMHBkwETXQWr4YZDzn3"), tokenIds: [Tokens.wlunaToken.mint.toString(), Tokens.wustToken.mint.toString()], tokens: { [Tokens.wlunaToken.mint.toString()]: { ...Tokens.wlunaToken, addr: new PublicKey("97aVH3M9cjZmfA5HVu9iJ9AnE41inBG1Sxqj8UQhR2jo"), }, [Tokens.wustToken.mint.toString()]: { ...Tokens.wustToken, addr: new PublicKey("Av3RXECkvPCehJTJNbkWmUj3LmP63c4btzMYjbcYLkpm"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const stsolWustPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("9F3J6RY7PTkDb3SUUpg725uXyCceBGCpZrtmYGJwgMwF"), nonce: 253, authority: new PublicKey("wJydc21tAMxYDif8uvy5rWNGWDFNZnPPmqCvegyZRod"), poolTokenMint: new PublicKey("HTZd53fYwYQRyAjiaPsZy9Gf41gobFdqkF4oKe3XLi95"), poolTokenDecimals: 6, feeAccount: new PublicKey("5rCbmppxMBHwBjCkLUP6fireQ12cL8LRa26QRUimoxN6"), tokenIds: [Tokens.stsolToken.mint.toString(), Tokens.wustToken.mint.toString()], tokens: { [Tokens.stsolToken.mint.toString()]: { ...Tokens.stsolToken, addr: new PublicKey("GFso9SAGakm8ZFa3rmuonuerbcQ8ZbACNZN7idkKR5nw"), }, [Tokens.wustToken.mint.toString()]: { ...Tokens.wustToken, addr: new PublicKey("EZ7pJskN2a4pDknrdkLzGDHpzjbfgdBj3Tt594K9HZbL"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const jsolUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("5pki97N9a6yEB3YQL3y8gvf4nSWnvEL9V6yms8Amnd9Z"), nonce: 255, authority: new PublicKey("BqBc47X3wgrVzi8zPUMUvsaKWsj6JN4wKJ4ArGRKn2QG"), poolTokenMint: new PublicKey("AzEoVuNJyo9ByoLRZ5t6vav2Zg24vULNVJM41PgCKUqR"), poolTokenDecimals: 6, feeAccount: new PublicKey("9Qkje8PCpu4LrGwpudcN3sunWLVP6ZP61zNupaPKNRnr"), tokenIds: [Tokens.jsolToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.jsolToken.mint.toString()]: { ...Tokens.jsolToken, addr: new PublicKey("D4Am1hMwzQqULAvmEjwJLDGwoyTgakRXrn7ayWHMhiB7"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("GznbQjBy2KKYYVLaJ6bM59GgekRsKT5QRi2NFMYNRcmf"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const daosolUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("6TwZgp6ABN7pbXbxvaZriHbbxeSAcEgxhKYnqGwphiRD"), nonce: 255, authority: new PublicKey("5jFXPUF5mN83WZkT5MJQFpFcZrP5zPZy1ZZwD29Le2Kh"), poolTokenMint: new PublicKey("CCyDxjdW3G7hPTthTMPTZ4bnhFF19XG6rx2fNiKeRQww"), poolTokenDecimals: 6, feeAccount: new PublicKey("JCnNHppa7kp9bRc3zfvfnwGqoVR8Li6sJT9pMztgwE9j"), tokenIds: [Tokens.daosolToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.daosolToken.mint.toString()]: { ...Tokens.daosolToken, addr: new PublicKey("EZf2tVoxVgGaBz6ir5iBppxiqFSqBUob2dNpiEuXMYiJ"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("3v29nJzrWebKv3DefSY5WVq4kgHWykF7fdYVaCpohwks"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const orcaUsdtPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("4YnaUPeZ2fYqpoLrCyprSai8LaDWZxmgb6cGfNHJmyP6"), nonce: 255, authority: new PublicKey("35d4qNQiMtNV9Yb2kqk4tSd5M1yEqozWSQaYtjGHCA7b"), poolTokenMint: new PublicKey("Gx4PoxenyQwhGGnKagAT35iVg4im1iKhJxDWqVhgu6tk"), poolTokenDecimals: 6, feeAccount: new PublicKey("ABuGLBFTwcbLsqNsiCpZsFuNmHYwHEzfQR9SNpr4y3bP"), tokenIds: [Tokens.orcaToken.mint.toString(), Tokens.usdtToken.mint.toString()], tokens: { [Tokens.orcaToken.mint.toString()]: { ...Tokens.orcaToken, addr: new PublicKey("D91z1TewbTQ3AVc9RThtTjiMVRqr94CP73XrsbHEhej8"), }, [Tokens.usdtToken.mint.toString()]: { ...Tokens.usdtToken, addr: new PublicKey("Fy4AwXwAwitVdFwgWBdYkqRVv8QjigU86ssL6rqzgp8S"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const orcaWhethPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("D67u6UEuFp9Q4Fu2gnu5thxBoVj2eRgDDDirdWsMVsgm"), nonce: 255, authority: new PublicKey("4kwchkCnCaZPkBdnk85j9bJ9F1P883rwjbvsXGV7H5rM"), poolTokenMint: new PublicKey("GsfyYHkSgC3Ta6aWR9MjB2sxoBrkGGeR2tAwXbpphf3"), poolTokenDecimals: 6, feeAccount: new PublicKey("GdHXLai5M8FKedXUsECSzrV72nb1RTCCooFyTWT8WYmT"), tokenIds: [Tokens.orcaToken.mint.toString(), Tokens.whethToken.mint.toString()], tokens: { [Tokens.orcaToken.mint.toString()]: { ...Tokens.orcaToken, addr: new PublicKey("EMxDw1NjdddQjPk9gCUN4iDMy8HJ5siKYMVjGbjuUCrh"), }, [Tokens.whethToken.mint.toString()]: { ...Tokens.whethToken, addr: new PublicKey("DQyhcuEvE1K9DSd51agcNLg4CDrgthnKMVhU7q6R55LV"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const geneUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("PQ1sBpkZYTkXo2aDRqWU2sEJGUj7yaeJ3GePoCRYU4V"), nonce: 253, authority: new PublicKey("DvbTrW3tUfdgBDU5TFxfXjBpGUYivQP8MiSA5YmXHZGF"), poolTokenMint: new PublicKey("7cuu94swKL5PtFQohKMAzyd1mjj65rgMW3GzLY31HCnK"), poolTokenDecimals: 6, feeAccount: new PublicKey("AsR18ERwBhmTkjNpav9NDWdeUzvmDH2TXCwfy2kinat"), tokenIds: [Tokens.geneToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.geneToken.mint.toString()]: { ...Tokens.geneToken, addr: new PublicKey("LiM9qAQi7ud4fCkAcGcJJzmY47od7vzzeqKBejATbJm"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("APQyCmCvyVFreK2JjFHinmja24jTHdwm4umNJo67Nu2v"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const cmfiUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("AaJERSYSMtWxhRqZzBZ9JFr1gJkfSPgPEd3mBDT2AknQ"), nonce: 255, authority: new PublicKey("ERMNbmKrBKk3e8ZBbVWNUTkrqamZYxnRFXvgsPUSLT5j"), poolTokenMint: new PublicKey("85krvT9DxdYgoFLQDHTAGdvtNuLdAsc4xE5FkVLpN2aR"), poolTokenDecimals: 6, feeAccount: new PublicKey("3HXU5ABkghqJ3iMEGWsGe88kvZtiEyDJ24ihgFTytRNx"), tokenIds: [Tokens.cmfiToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.cmfiToken.mint.toString()]: { ...Tokens.cmfiToken, addr: new PublicKey("HEqNExFgmyZ4Es53pL2bfBi5pKcZwGzbvwm1UknYLD9s"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("GbK7B7ZGQNZYrEhADC8aV5HdPhYgMZ35f6c8Decie224"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const celoUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("H2bkwBwizcotpWHbruYFKXfHvh29hhoZn52qHq2YZumW"), nonce: 254, authority: new PublicKey("E812K73QyqSsGBeU3MLodqVs3gCKJjka4p4gP34hXtns"), poolTokenMint: new PublicKey("HVLyX8mD8YvKgZJ4oB6rXJiCYMLpHKwB6iCiCjE1XwdT"), poolTokenDecimals: 6, feeAccount: new PublicKey("35HW4HcFDzVnVsxBhPKptYfwX3HyJWEosv5T9sdBSu8t"), tokenIds: [Tokens.celoToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.celoToken.mint.toString()]: { ...Tokens.celoToken, addr: new PublicKey("H6tFXr3BnF3r21Sv2ykLSbiE7wLxWpDcXroyxBReoXou"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("GnKnjXsmZKVhduVyLiR9Ngsxwo8spfxtruiPtqDqHLNJ"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const ftmUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("4RCU8SoBzvYysNaQBAFpQMmt7LPQgxbto9uiuRjAJPpq"), nonce: 255, authority: new PublicKey("HC6aGC7RsgVGonWs1MVy5Qit5R5ruEXZmeywpFwSCmdY"), poolTokenMint: new PublicKey("Gpzd833qSmv3kXpQmxEaqkrZTXZaRjhNAoqhf61qAhTG"), poolTokenDecimals: 6, feeAccount: new PublicKey("2cA9XLcSFJ9jgnYViJr5JtnhSpGNrPhebS4RaGm7DHmu"), tokenIds: [Tokens.ftmToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.ftmToken.mint.toString()]: { ...Tokens.ftmToken, addr: new PublicKey("EULHGNmuJWcRHm5Xen9CiG4uqVZoemLorLvAQ7vR9vCi"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("71rJZyRkxxupdqZeLrNQnHjus11C1yEVwsrKgQax6TSx"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const btcOrcaPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("CqXRyZ23dFwdbMLGEQLhQQRJrzkFB3wBsuH92rp7d3yw"), nonce: 255, authority: new PublicKey("Fixb6XBzoSRJ4iCkHNX3xbr61yWXUh6SYyu5Jweg36VF"), poolTokenMint: new PublicKey("DFpLFcQZqDKykyDePgip4r6MExVmBKWqTa12ezq6qxUY"), poolTokenDecimals: 6, feeAccount: new PublicKey("47pxL1vidAiARAF45SoVnpqSet8EPckF9pB4d9zT1S3N"), tokenIds: [Tokens.btcToken.mint.toString(), Tokens.orcaToken.mint.toString()], tokens: { [Tokens.btcToken.mint.toString()]: { ...Tokens.btcToken, addr: new PublicKey("8dbqoSTALCCshdKXX8Nb6AskytydXtHLyPoqu9Nb2ig3"), }, [Tokens.orcaToken.mint.toString()]: { ...Tokens.orcaToken, addr: new PublicKey("7UAHjQQjYBrSKdtgbJK1SaUVgmBxcmMJKshvEiEhLheP"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const hbbUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("Fpwa7a1r7kjax1nW25TVP3uiQc7XH9dv9n9UXMJRSTEx"), nonce: 254, authority: new PublicKey("9odZioXkQTCZERzQXbDTfirMfbP9FtKqsP9LvHgm6wJr"), poolTokenMint: new PublicKey("cL5WhffCYFRLM4We8VS2W684kM4pHyuvEDwp8Ddw48k"), poolTokenDecimals: 6, feeAccount: new PublicKey("3nyqxtRPnYrwEHneWgbN1197aZoEaemnSNQ7rgJLv8hS"), tokenIds: [Tokens.hbbToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.hbbToken.mint.toString()]: { ...Tokens.hbbToken, addr: new PublicKey("2vq1vt98xBPUmvbTC5nH4GtsjJVeA64kwv6CZc7xSAf6"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("B7f4A1Pp6RCjWYv5Lsrf4MecmZQDMekXh4MFQasCQuRB"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const hbbSolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("2aCJ1VTwfvLej1PJJAmiVCzuLGtjQ5bEo9DYkbwwe1C6"), nonce: 255, authority: new PublicKey("8GRweHBrpXfeYpmryfkvEsW3DmoJKGDQLpcVfeNUqn8x"), poolTokenMint: new PublicKey("FkKzu2HeMJZf4oHwoYPxLGVy3net5Jq8HAfnA5VqETgk"), poolTokenDecimals: 6, feeAccount: new PublicKey("2Y1xXr1j6xg5r5Qz8LDqnU7N8T4GGu3Ju4AHGsfU2nXS"), tokenIds: [Tokens.hbbToken.mint.toString(), Tokens.solToken.mint.toString()], tokens: { [Tokens.hbbToken.mint.toString()]: { ...Tokens.hbbToken, addr: new PublicKey("5k1Nj2TvG51p7s2ambWpmX6FraiSchoYS1wJgVw5f9Af"), }, [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("2s2vbHk4XzKQ9SQdPRyirY8JmBemhZ67EBx7xgF6tzq5"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const sbUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("GPxcR4ci8RbLh4bVPi88mKwTEDeVxEKs3nBkKayghuuL"), nonce: 255, authority: new PublicKey("6poTLvmbRU9FAJAnM5RmXMRTVFf2xWRKooCkStZQJf6U"), poolTokenMint: new PublicKey("2Reqt4Sw9xNY8BoJ3EZLpFu5yVgNxFrbw8M3KiJpPn6o"), poolTokenDecimals: 6, feeAccount: new PublicKey("EVRpMUxUGZGH15SB1hGhLzzz15XNopLZjSuTZSpcwMmt"), tokenIds: [Tokens.sbToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.sbToken.mint.toString()]: { ...Tokens.sbToken, addr: new PublicKey("EoV9ub5aojyBFdYGhPQPQ6cDeesgsENrNYGN6L8CB6Nh"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("7kRmDjSorwKqqLAFupgGW8fEp6hywkt2bntw2gCrV5Sh"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const stsolUsdtPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("EacW6utfAJk6z5QCbyqjJHdTN2TH5UFu9K5dh3DmhsLV"), nonce: 254, authority: new PublicKey("CUQbwmFXySWXpBgycGTTj3gQNY8AnjD4DJRjgLeG1bVK"), poolTokenMint: new PublicKey("4ni1nho89cDKAQ9ddbNQA9ieLYpzvJVmJpuogu5Ct5ur"), poolTokenDecimals: 6, feeAccount: new PublicKey("H4VgN76Mri6ctLCkf6fnyfae9fCDC51nZVPa1oPjq1Da"), tokenIds: [Tokens.stsolToken.mint.toString(), Tokens.usdtToken.mint.toString()], tokens: { [Tokens.stsolToken.mint.toString()]: { ...Tokens.stsolToken, addr: new PublicKey("BAMiBNk9j6Z9LLdZzzGScHDFQas58uLqW4GGX4ndq7K6"), }, [Tokens.usdtToken.mint.toString()]: { ...Tokens.usdtToken, addr: new PublicKey("Ajf4bxNoKCyFVfV35sRTgGwZK1dfJJJVXgNFs7ncC5EF"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const seededUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("3fyCss3Y9ATNnTSsN7VCasEb4H5SpSuN7VEoJnNWZU3x"), nonce: 251, authority: new PublicKey("89TxEkGNHFcniBm5pXo8Jq6s1ZaBUKCRqgYS3eAr3jJ7"), poolTokenMint: new PublicKey("H7gyTmNCDXkD8MGMqnxqoD8ANszjcju4tjT6ERZ5dakf"), poolTokenDecimals: 6, feeAccount: new PublicKey("2ZTqrZTNumBMdyQm3cAiREHozzQp18KhEuGWiUVwJMRm"), tokenIds: [Tokens.seededToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.seededToken.mint.toString()]: { ...Tokens.seededToken, addr: new PublicKey("Dn9LiTqcRiyxipCqvTEyT3ZwbWtf69bUcHQLWG89jpJa"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("Aq5xPmh3cZoyLN3KzVcAK8osAU7oAjo1k6qdw6gd5ovi"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const audioUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("2arG3AznFJbLknAQUqk44PgeABZDHpBfcRsPmPWjjBPY"), nonce: 254, authority: new PublicKey("ETCzw3Vp2n4aas7rFtxb554h67JPeyDBr7DKcHUgSAxp"), poolTokenMint: new PublicKey("3hksYA17VxgiKSeihjnZkBbjc2CTbEBfvDCYgQhojTo5"), poolTokenDecimals: 6, feeAccount: new PublicKey("H1Rcj6jAeV9v5QsJTo957tcWgYzve4PZEuSHGNmX1UFv"), tokenIds: [Tokens.audioToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.audioToken.mint.toString()]: { ...Tokens.audioToken, addr: new PublicKey("FfpKRggDra1uSskyzAm6f4EXFhxw6ij8BkDwiWTs126x"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("ACBf9ksELg2buAFnDTJL9WnT5kZRcFN1Bvarox9JZVbq"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const mmaUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("3HJ9QwRNsdHj3xaTvrzYyvvsY1gd23N8qGiSHaytKLLB"), nonce: 254, authority: new PublicKey("58KyKR1fHXP2ewDC93TdRxPZ7W8FNYkLc53VH9XP32hD"), poolTokenMint: new PublicKey("AaZRnJAnDyJyPD9uPJpJ8bzBGDCEi6jtBpUf92xErWPp"), poolTokenDecimals: 6, feeAccount: new PublicKey("AfesEXaDzs4mnPQJyqNHzpZ8DMBpuEPtmi1aL5xwRjVm"), tokenIds: [Tokens.mmaToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.mmaToken.mint.toString()]: { ...Tokens.mmaToken, addr: new PublicKey("BzccyLPYsbhhWjHnRLUn7Fpkao9reYRdjA8wkp7iY6re"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("6uJF6gMpCxUYvmQ8hmaz44MRyRYq5ykpsx5GYABbUK5A"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const onesolSolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("8CJhJomcLYoVw6pAQdNWPJ3yDXkS55y2gAxJ9uReuXEz"), nonce: 254, authority: new PublicKey("9DV4t1XqqNiXLCdHfaEwAbVaT5Mth3z8VjYS6CG8CPQS"), poolTokenMint: new PublicKey("9wPhuYapychVDSxmXqCZxy2Ka8Lmav4SHM72si8bfraV"), poolTokenDecimals: 6, feeAccount: new PublicKey("6yqvsmFJrMhSv31Ne6yY8f4y2ZJvMMCwTjYTxhq1eKS5"), tokenIds: [Tokens.onesolToken.mint.toString(), Tokens.solToken.mint.toString()], tokens: { [Tokens.onesolToken.mint.toString()]: { ...Tokens.onesolToken, addr: new PublicKey("532m3b4aSmWsrn4RfM9ByBRLJocdcHMwiscjADQYNjXG"), }, [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("2qu6tc58av5AGfrrBPdHxK2Cyi5CsDhjaZ8x8yw8UA1w"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const puffSolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("GrSE1LoQBr3p9y7HQxV8h5vc8fH4xkT4a6Nysckbu8zt"), nonce: 253, authority: new PublicKey("79gfyi1Ct3m8RKkF618yxnA7w5JQV1NWhkMs6dXACgGq"), poolTokenMint: new PublicKey("Eho8h1BcoG5QWU7X9FzJafw5ErKUXtR2LobAJJZfWff4"), poolTokenDecimals: 6, feeAccount: new PublicKey("44XxHHYz2642Bc4sHdDuV2aEGbziugqN5tKnmBBBwPyA"), tokenIds: [Tokens.puffToken.mint.toString(), Tokens.solToken.mint.toString()], tokens: { [Tokens.puffToken.mint.toString()]: { ...Tokens.puffToken, addr: new PublicKey("HYszSkhsPPNSj6Q5hRudc94kawCgUNeQ1DqrxJxtoxsK"), }, [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("AKJUQjqAHTw5rNYYv9Rvxxe23mwdNaqzt7pdriJy92sw"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const saoUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("BWCT76eQ8jtrKkMm234ZY1QEXSfZYTrzHyXaE3DxeQfd"), nonce: 255, authority: new PublicKey("7TXfpFGVASvgkLkuTSsqQJQTXypa31zqcHmPZNMaAJu"), poolTokenMint: new PublicKey("4iyU77yZbg8iD344vbwruAuDAf9i1EVV3FhZJDnWStBE"), poolTokenDecimals: 6, feeAccount: new PublicKey("BVSJLE6RZ2cvfXPjSZcj7fK1HLra2wtcC4jLCZAh6gFX"), tokenIds: [Tokens.saoToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.saoToken.mint.toString()]: { ...Tokens.saoToken, addr: new PublicKey("8MNhNFCU366Y3dq3HRk5nKuKZuQLY3kffMZekadM2R8q"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("6qnLaADqFjtGsMsHjScFVmpVVNBbqaGNoBwBFy5BVRr8"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const srlyv2SolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("Df7DkQRXEpPM5basbYHi45268hmR8m7YrtraPdGgj6R6"), nonce: 255, authority: new PublicKey("9DaRQeoEx3EjXYxhpZrcJ6no3bcAkfm9toWbngcAqSCB"), poolTokenMint: new PublicKey("3dXdXg5HPyZ73GFC9LkSn3thdJUGeXWB8iSTHs5UcqiH"), poolTokenDecimals: 6, feeAccount: new PublicKey("B3Ao2fEX2isX8UQ99EuPz3BDzUfQTPeYS7KVvbCnkrXm"), tokenIds: [Tokens.srlyv2Token.mint.toString(), Tokens.solToken.mint.toString()], tokens: { [Tokens.srlyv2Token.mint.toString()]: { ...Tokens.srlyv2Token, addr: new PublicKey("AJzDsY4wnv8nWSWoBimY6hWJpWC54oEgmfbV7YGXsLww"), }, [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("qytd7KfK3pFVWog53xUVE8dqD1sBxa1H13VnF6ADGSd"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const zbcUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("J4Xvy9twDDWqqwyfX6nrc2QFJeMJ6HD9kbAmcPhfYmFP"), nonce: 255, authority: new PublicKey("9Ssocd3xbxm3xCKwz1g8d41rS6iWbmGyo25ZdYZHbDCp"), poolTokenMint: new PublicKey("2LYgm6nGXmSSjfoEriPuYeGoNiWNxUs7n3rnTbDWN5c7"), poolTokenDecimals: 6, feeAccount: new PublicKey("8H1bUAywEerLCYxLVDjM5EqXYXtoW5gbR1MoD1LrrnMV"), tokenIds: [Tokens.zbcToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.zbcToken.mint.toString()]: { ...Tokens.zbcToken, addr: new PublicKey("8AcanN7p8KHfLxKBBMKuJUqqX2uUPz3mkp3iaNHHaZfZ"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("FwqAxdo6s5EtyVXqqU7sj3Q9n3eLuUkF2D4584MDoWLW"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const gmtUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("46GcZFgznxUf6TpoCqJqzMpgMbbJPCAwNn8GThSt9qjC"), nonce: 255, authority: new PublicKey("3HGGVGTXbqT49PG3L8JQYH4jCeP5CNBG6CpJniZ434an"), poolTokenMint: new PublicKey("CFxQF5kNAtbbDj298Xr47Sf4mkSyuzWpRH97hrdQ6kxi"), poolTokenDecimals: 6, feeAccount: new PublicKey("3pBqsnahNsm6p14FFjtMCGfD1VCQNcUEdNEeSwTGfE2q"), tokenIds: [Tokens.gmtToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.gmtToken.mint.toString()]: { ...Tokens.gmtToken, addr: new PublicKey("BTpvbpTArnekGgbXRqjfSvp7gENtHXvZCAwuUKQNYMeN"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("DdBTJuiAXQQ7gLVXBXNPbVEG8g1avRxiJXhH5LhBytYW"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const novaUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("GWG6gTW75GxMS7oUDoivjPrjcbsiR7fDMFKFw6pz2MuN"), nonce: 254, authority: new PublicKey("Az4AA8tzbKJRZhunGUGVmtJyGUj763fiDyxbZiPeSVb4"), poolTokenMint: new PublicKey("DdAFNvDxtEHCgKj3JAM64zCKfMWhs4J9wEmRrjUAFiME"), poolTokenDecimals: 6, feeAccount: new PublicKey("7RPsLN9WHRL39sAs3oDjWzGHJ1bCJg36qmTqb4i6ZPFV"), tokenIds: [Tokens.novaToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.novaToken.mint.toString()]: { ...Tokens.novaToken, addr: new PublicKey("5DCtLobmcNATqtgbv9pymXsXDqmVJ7NVi6GLLuPwmphk"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("Hym2QSjXpNZE8VubGbg63nPx1QGXtkmsucdBCFYKp6jj"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const hbbUsdhPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("9GgFi1cavfTEQ8gy87S3VVeqZSFBhncpJvMBQ8vprAQw"), nonce: 255, authority: new PublicKey("HsTk5QvXEQpdr1bB8nay55TZqecKUqNvGLM93vVRhHqj"), poolTokenMint: new PublicKey("7n2YW9qLkhGFArdZPLoF4hYPE2zw7xCACkVPXrUWnLuo"), poolTokenDecimals: 6, feeAccount: new PublicKey("AijCQCXg6pcLwfNW6DB9HNrwge2HRaXfdJLAXeBEhgKF"), tokenIds: [Tokens.hbbToken.mint.toString(), Tokens.usdhToken.mint.toString()], tokens: { [Tokens.hbbToken.mint.toString()]: { ...Tokens.hbbToken, addr: new PublicKey("D9uCWM7yfWwUktQ2MjuiDmTYa4vE9ff5St7TaQ9uJPwe"), }, [Tokens.usdhToken.mint.toString()]: { ...Tokens.usdhToken, addr: new PublicKey("AGGpY57ko5qcJJxRNgJSXTs3jrf6cPgux4q8B9R3nE52"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const takiSrlyv2Pool: OrcaPoolParams = Object.freeze({ address: new PublicKey("6AxGikaR6FvDAP3rEWYA5sjKim8ELceCfno7ZGaYYwsK"), nonce: 254, authority: new PublicKey("13sT1XctPqMUoomDqyV55nEAupZXfyc7tohxTrhNXyKQ"), poolTokenMint: new PublicKey("6atKbS2Xz5vu7cqWBNk8KYkuakRzckZ9nvtUKf2k8Sc3"), poolTokenDecimals: 6, feeAccount: new PublicKey("3yvDrXwLK4z5P7BbPko7siDfxDLV31J58xzoCK9Wy5mb"), tokenIds: [Tokens.takiToken.mint.toString(), Tokens.srlyv2Token.mint.toString()], tokens: { [Tokens.takiToken.mint.toString()]: { ...Tokens.takiToken, addr: new PublicKey("J8kiPsPrscD9oLg5JP3Dj7HyNSLh5s4zmfA7LLYNqYXS"), }, [Tokens.srlyv2Token.mint.toString()]: { ...Tokens.srlyv2Token, addr: new PublicKey("FpdhjfJsJtMYy5zejmhFJNxtE59NDhgbXn3mfsEeKDmu"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const zigUsdcPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("37b7oyhDTJh1VpjjEZqaC8VasvnyHHYHeiXLpa8Ht8Hm"), nonce: 255, authority: new PublicKey("8D4DfRUgmEMuiFct6BCqSiUd7NgH4wtbU3kLB4Miy1YC"), poolTokenMint: new PublicKey("5vhh9ZnD9vnahRhFLP1EUEyYRSzvJwgw9U2xygsSJSrp"), poolTokenDecimals: 6, feeAccount: new PublicKey("AcWQv9cp2gn8BUTn7swwpPeAcGZ9gG64zzM5pYWnReGx"), tokenIds: [Tokens.zigToken.mint.toString(), Tokens.usdcToken.mint.toString()], tokens: { [Tokens.zigToken.mint.toString()]: { ...Tokens.zigToken, addr: new PublicKey("BNx1dsmrFLX9r2hWf2duWaPL4m7yu1AkBw8X9YwEGqp7"), }, [Tokens.usdcToken.mint.toString()]: { ...Tokens.usdcToken, addr: new PublicKey("jYirYPaPZKnsbEJSvWu3Pb6tWRcNxPQPL2RD1qTa7eK"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const srlySolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("FyGeyg6HEjBwTEGXF9o78XgKyMkmxSncLe2VECu3FPgo"), nonce: 253, authority: new PublicKey("BDmEnikYwue2wtzxZFhr29avpQdX3rrQrvSjYJimeteH"), poolTokenMint: new PublicKey("HfRgvhgscGX5GaP3rUrZAhh7gS4aJ2UQ7rNVX976rG6P"), poolTokenDecimals: 6, feeAccount: new PublicKey("EcUL9q6rMrVsyqDR1hMMMyHM6Sqos93SKXBCEd3HgAa7"), tokenIds: [Tokens.srlyToken.mint.toString(), Tokens.solToken.mint.toString()], tokens: { [Tokens.srlyToken.mint.toString()]: { ...Tokens.srlyToken, addr: new PublicKey("7vY5bs27YTWus7KiemXsfaY4E2EzbrV5gXvbx1RaWJ8B"), }, [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("JiKtEtLL96sUDQvM1oYXuNaWdHxjdcSgb9M3yqNYs8h"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const takiSrlyPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("4VzdxTLqzgn5MGMTDsNMukZCvkAZkXLXhYENeKGRtdTR"), nonce: 255, authority: new PublicKey("CMTEg8iJ131Fi6yJvsZ5ovtUZjfQWaEsZtTmZH15WjFH"), poolTokenMint: new PublicKey("3xaK5aWWLNRB73xUVX3cusLhDp65mTvP4fwW5Jwxakgs"), poolTokenDecimals: 6, feeAccount: new PublicKey("5Vey7hniN8uNjqBkaxrVpXFrsc5eEZdqFD1Xi5SJF6PS"), tokenIds: [Tokens.takiToken.mint.toString(), Tokens.srlyToken.mint.toString()], tokens: { [Tokens.takiToken.mint.toString()]: { ...Tokens.takiToken, addr: new PublicKey("7p3UFVn1h2Eeo8zF4CETufa7JqXYMVXzKLn7vg39MQfX"), }, [Tokens.srlyToken.mint.toString()]: { ...Tokens.srlyToken, addr: new PublicKey("J5V4k8nSGu3PBH8ej4E34KjCbGZx5Q7v2AMwr4Wt9Tgm"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const stsolSolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("71zvJycCiY2JRRwKr27oiu48mFzrstCoP6riGEyCyEB2"), nonce: 253, authority: new PublicKey("5qpKgo2PSNSkmHGAa4oYrEZcYA3CQaFpA66nPVuP1qHX"), poolTokenMint: new PublicKey("4jjQSgFx33DUb1a7pgPsi3FbtZXDQ94b6QywjNK3NtZw"), poolTokenDecimals: 6, feeAccount: new PublicKey("7nxYhYUaD7og4rYce263CCPh9pPTnGixfBtQrXE7UUvZ"), tokenIds: [Tokens.stsolToken.mint.toString(), Tokens.solToken.mint.toString()], tokens: { [Tokens.stsolToken.mint.toString()]: { ...Tokens.stsolToken, addr: new PublicKey("HQ2XUmQefvBdpN8nseBSWNP2D1crncodLL73AWnYBiSy"), }, [Tokens.solToken.mint.toString()]: { ...Tokens.solToken, addr: new PublicKey("8y8X4JuZn1MckRo5J6rirpr2Dxj1RKQshj7VzuX6dMUw"), }, }, curveType: CurveType.Stable, amp: 100, feeStructure: { traderFee: Percentage.fromFraction(6, 10000), ownerFee: Percentage.fromFraction(1, 10000), }, }); export const btcStsolPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("Cus1XADrHBrgyD7hKLGARsHFtBgGWvjAA346KimbHXai"), nonce: 255, authority: new PublicKey("Czqib5TfizVRvDksYBFfdDgHcBwdPPVejW9LYDBSXxu5"), poolTokenMint: new PublicKey("HYp9v7cY4wAxSsa6ijztQQ3GQ8iTttuG5vu8JNBDHoNh"), poolTokenDecimals: 6, feeAccount: new PublicKey("3SHTi6ybA2oAFooARTt1ETbNPSueofuBFhmEtjmrJFUw"), tokenIds: [Tokens.btcToken.mint.toString(), Tokens.stsolToken.mint.toString()], tokens: { [Tokens.btcToken.mint.toString()]: { ...Tokens.btcToken, addr: new PublicKey("8WhAF65WbdsRAzGQF66oLsBZwbeXbU5WtxX7pA8SwjK"), }, [Tokens.stsolToken.mint.toString()]: { ...Tokens.stsolToken, addr: new PublicKey("EnbNxeehxrAJXxyWupFcs7zsJN3Zob4nJmpFGS8ninm8"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); export const stsolWhethPool: OrcaPoolParams = Object.freeze({ address: new PublicKey("9FtrC9VkqssGygMafJjseqPQXnyorqHV3DyMPBfJrgtj"), nonce: 252, authority: new PublicKey("4Y7EQYJ1WWKn8ZXC3Fc6KVnp5LPgqLxyV5Pk9eGm3cuh"), poolTokenMint: new PublicKey("FWurFWADrgmhb6Y44LEaCMnEHS2Tu3QGqd9oBcZtr8gT"), poolTokenDecimals: 6, feeAccount: new PublicKey("28t4Vixx6cE1yunwXNqQ2YU3pU9PbCscK9G3daRYuYCS"), tokenIds: [Tokens.stsolToken.mint.toString(), Tokens.whethToken.mint.toString()], tokens: { [Tokens.stsolToken.mint.toString()]: { ...Tokens.stsolToken, addr: new PublicKey("FTrSPUnMKmdKkNekKvVUQY1nunr2kWwohMHmBusd79Vj"), }, [Tokens.whethToken.mint.toString()]: { ...Tokens.whethToken, addr: new PublicKey("2teAyRLAU716sCj9v2634Wi4wcLqtRvV9upXaRvDSFm1"), }, }, curveType: CurveType.ConstantProduct, feeStructure: { traderFee: Percentage.fromFraction(25, 10000), ownerFee: Percentage.fromFraction(5, 10000), }, }); /** * Mapping for OrcaPool parameters * Key: poolTokenMint : OrcaPoolParams */ export const orcaPoolConfigs: Record = { APDFRM3HMr8CAGXwKHiu2f5ePSpaiEJhaURwhsRrUUt9: solUsdcPool, FZthQCuYHhcfiDma7QrX7buDHwrZEd7vL8SjS6LQa3Tx: solUsdtPool, "71FymgN2ZUf7VvVTLE8jYEnjP3jSK1Frp2XT1nHs8Hob": ethSolPool, "3e1W6Aqcbuk2DfHUwRiRcyzpyYRRjg6yhZZcyEARydUX": ethUsdcPool, "5kimD5W6yJpHRHCyPtnEyDsQRdiiJKivu5AqN3si82Jc": raySolPool, ADrvfPBsRcJfGsN6Bs385zYddH52nuM5FA8UaAkX9o2V: ropeSolPool, "8nTzqDXHriG2CXKbybeuEh1EqDQMtrbYMFWcP7AkiDaP": stepSolPool, "9tf8rBSEQYG7AqL896fN2nZi1iYPqpWaLEdpbeQaC1Vy": srmSolPool, EsYaDKJCmcJtJHFuJYwQZwqohvVMCrFzcg8yo3i328No: fttSolPool, CzieDbGRdN1QGaGDNpSqzEA18bi881ccvkkGZi51pe1k: copeSolPool, "7tYCdLN84EnTMkxM7HNamWJx7F4xgKe9KiiWvLyWjbgT": oxySolPool, Acxs19v6eUMTEfdvkvWkRB4bwFCHm3XV9jABCy7c1mXe: btcSolPool, HiwRobjfHZ4zsPtqCC4oBS24pSmy4t8GGkXRbQj4yU6L: merSolPool, EYsNdtyu4gGTaGz8N5m5iQ3G1N6rDyMbR72B3CqbWW4W: fidaSolPool, "99pfC8fWymXgbq3CvrExhx3UxQDC1fMWEWLbNT83F45e": mapsSolPool, H2uzgruPvonVpCRhwwdukcpXK8TG17swFNzYFr2rtPxy: usdcUsdtPool, "2uVjAuRXavpM6h1scGQaxqb6HVaNRn6T2X7HHXTabz25": orcaSolPool, n8Mpu28RjeYD7oUX3LG1tPxzhRZh3YYLRSHcHRdS3Zx: orcaUsdcPool, HEvnD66WcBfTajS9adUYnGRBMDehFtLySiFHSD6kEBWs: kinSolPool, D6N9j8F2DhtzDtrdpT74y3u2YmYAzcggiLc3nTjqux9M: samoSolPool, "3PD9SZFwXKkXr4akLf4ofo37ZUMycwML89R2P3qxcbZG": liqUsdcPool, AZpo4BJHHRetF96v6SGinFZBMXM4yWMo4RA8C4PriDLk: snyUsdcPool, "8PSfyiTVwPb6Rr2iZ8F3kNpbg65BCfJM9v8LfB916r44": msolUsdcPool, AtB4nUmdyQfuWWJ9xAHw9xyVnJFfSjSuVWkiYan8y86w: slrsUsdcPool, F8gPSpwVHj8FdAJAYULDuZBxFEJut87hUbARYYx3471w: portUsdcPool, CS7fA5n4c2D82dUoHrYzS3gAqgqaoVSfgsr18kitp2xo: sbrUsdcPool, Dkr8B675PGnNwEr9vTKXznjjHke5454EQdz3iaSbparB: scnsolUsdcPool, C2YzN6MymD5HM2kPaH7bzcbqciyjfmpqyVaR3KA5V6z1: psolUsdcPool, "29cdoMgu6MS2VXpcMo1sqRdWEzdUR9tjvoh8fcK8Z87R": msolSolPool, C7TH2jEJJaxVwwuvkbcDGfHUiZvEkkeYjyAcdTMi5ujb: orcaPaiPool, CVapmQn7HaU1yMDW3q6oUV4hx6XoYv54T4zfGXkuJqkA: orcaMsolPool, APNpzQvR91v1THbsAyG3HHrUEwvexWYeNCFLQuVnxgMc: scnsolSolPool, FZ8x1LCRSPDeHBDoAc3Gc6Y7ETCynuHEr5q5YWV7uRCJ: atlasUsdcPool, GteBdo9sqE7T41G8AJsaG9WHW48uXBwsLLznmu2TBdgy: polisUsdcPool, "2gXDJZ7XAtQEtf4PRSQZKoq1WMuu1H44tQanbMA3YVpu": bopUsdcPool, "6VK1ksrmYGMBWUUZfygGF8tHRGpNxQEWv8pfvzQHdyyc": samoUsdcPool, "4X1oYoFWYtLebk51zuh889r1WFLe8Z9qWApj87hQMfML": ninjaSolPool, BVWwyiHVHZQMPHsiW7dZH7bnBVKmbxdeEjWqVRciHCyo: slimUsdcPool, ELfBngAgvLEHVBuJQhhE7AW6eqLX7id2sfrBngVNVAUW: whapiUsdcPool, HsauTv9s52Zv12eaDuSp6y7BEm4e4BHEyAsbdjyyWzPK: copeUsdcPool, GHuoeq9UnFBsBhMwH43eL3RWX5XVXbSRYJymmyMYpT7n: sunnyUsdcPool, EorFh8siFyLF1QTZ7cCXQaPGqyo7eb4SAgKtRH8Jcxjd: grapeUsdcPool, GMzPbaCuQmeMUm1opH3oSCgKUjVgJUW14myq99RVPGX5: abrUsdcPool, DRknxb4ZFxXUTG6UJ5HupNHG1SmvBSCPzsZ1o9gAhyBi: kuroUsdcPool, "2toFgkQDoPrTJYGDEVoCasPXuL9uQnjvXJaDwa9LHyTx": mediaUsdcPool, "4SBx8GXu8HhcVHWydQv1vsDdZs3G93XSL9CtMBny6hS5": tulipUsdcPool, H9yC7jDng974WwcU4kTGs7BKf7nBNswpdsP5bzbdXjib: mngoUsdcPool, Eswigpwm3xsipkTqahGi2PEJsJcULQBwZgxhQpr6yBEa: stsolWstethPool, qJxKN9BhxbYvRNbjfK2uAVWboto6sonj8XC1ZEW5XTB: sypUsdcPool, "74B9aMS7SA832xKngt5VLKmWAP3pa3qkUzWncTmQSsGF": stsolWldoPool, "7aYnrdmdCRodDy2Czn6keUquUhjF1jPEmfwZPh488z8U": whethSolPool, "7NPtjjAP7vhp4t5NCLyY4DY5rurvyc8cgZ2a2rYabRia": whethUsdcPool, "5PHS5w6hQwFNnLz1jJFe7TVTxSQ98cDYC3akmiAoFMXs": mndeMsolPool, Df6XNHMF3uRVZnz7LCEGiZVax6rXgz76owtVkBHEjSb6: wagUsdcPool, "9cMWe4UYRPGAUUsTkjShJWVM7bk8DUBgxtwwH8asFJoV": msolUsdtPool, "5qoTq3qC4U7vFxo3iCzbXcaD1UEmDeCD63Dsuoct71oV": msolWhethPool, "8nKJ4z9FSw6wrVZKASqBiS9DS1CiNsRnqwCCKVQjqdkB": btcMsolPool, DfgCnzaiTXfPkAH1C1Z441b5MzjjTCEh134ioxqRZxYf: ivnSolPool, "8sfThep3io4gvcGeuoAg1Rs8GDwKJjtcdAFHqQSSNAVE": larixUsdcPool, "6jCERp5hKj37PCXP3VTjCDJeoPuSpnMDMz5A6jWQv3yS": prtUsdcPool, GBijunwxa4Ni3JmYC6q6zgaVhSUJU6hVX5qTyJDRpNTc: jetUsdcPool, GtQ1NT7R5aaTiST7K6ZWdMhwDdFxsSFvVFhBo8vyHGAq: stsolUsdcPool, "5a6Y1ephcbKSoyLMQyD1JWbtqawCy8p2FtRL9v3zhaG5": wstethUsdcPool, "6mJqqT5TMgveDvxzBt3hrjGkPV5VAj7tacxFCT3GebXh": auryUsdcPool, Hmfrtmo93DpSDmVNLQKcBS5D1ia5JatiRSok9ososubz: avaxUsdcPool, FwCombynV2fTVizxPCNA2oZKoWXLZgdJThjE4Xv9sjxc: fttUsdcPool, "4cXw2MYj94TFBXLL73fEpMCr8DPrW68JvrV8mzWgktbD": rayUsdcPool, F59gkD7NnsdJbFKrRZsiBC8PAooN4c56T8QmahfW1iXN: slndUsdcPool, "7vnps4VE5RTGAr5fmPZu7fSrk2VnM4Up838grZfqmxqE": gofxUsdcPool, "9EjcYfHcG8f1mccpHyaAwpoxaUPiheC6KgLQjyD9aTb6": woofUsdcPool, CHTKUJGYRtBDqnxCFjxe5KEkZgxV98udbhuYYyzGxup5: sdogeUsdcPool, "55r9txzQtmjTykmTXmBYZCVMg5z9squB8b5cSw2AhxA4": catoUsdcPool, DSiHyHDn96bUQSZtizyCRLcQzrwohZeMpVu8rYJN1HzG: oogiUsdcPool, "5MvQHx8eftU39JTucFsT315JFnQASuDQg3FqxTw7xcvN": sonarUsdcPool, HNrYngS1eoqkjWro9D3Y5Z9sWBDzPNK2tX4rfV2Up177: aptUsdcPool, AWrtTWG4Zgxw8D92bb3L3sQtGLD3zDztMPWsXSph8iBP: dflUsdcPool, "9Y1vPaAsMz8X65DebMMnmBjbMo8i4jh4mcgiggZUUS3M": dflSolPool, FnDxJPNk7pPmGHUbR4XUHmHevrkXHdna5D3sQKcAtjBL: frktUsdcPool, FGgP1npQTsC5Q4xBmQtNYSh51NKqNwdxBZy8JCo3igcu: tttUsdcPool, E1U63VXhNiWoUkVvjrfLDdV1oJrwE6zLde3bohr6jCqz: upsUsdcPool, GjG7JjTQfQpDxw4hWx4etP9oTaYCuCbPjsU8WaUT3xHB: fantUsdcPool, D8WjqtwC9CzBrQKfSf2ccCHFQuPYwyLv5KAy8WjT5vnf: blockUsdcPool, "34Ppq6R8NfYBwWwPY4cBK4Afyb8hHaASQFukCzH6cV4n": runUsdcPool, HjR8JgqNKQVMvdryqJw5RJ4PCE9WGk8sgbEF7S9S3obv: uxpUsdcPool, J3kvcay3N16FBdawgnqoJ9v9p6XCvyCLE2Z9F5RLvGkj: btcUsdcPool, "12Uj74zgUUoBe4yeackwQ4qYtFMr9fk1xL6q5Nha6t2N": mndeUsdcPool, "71CBZeJ4tw38L9pSPoCz4fRsuWE64Fipyzotte7haoCS": chicksUsdcPool, "6MF5CHWAj5mS7FhpxiKz37CzR2eYTu236XpBKKMXCrGg": onesolUsdcPool, HDgxKmiA8Pv82fNguhVeMkZqQkos2YksFPoP1KttWxX8: wmpUsdcPool, "2VuGzaMrDnDyZfYvDwSXk38s7M2wpud7LDY3dGA1J9sy": unqUsdcPool, GoaAiajubRgeCFEz9L6mLnSmT2QFegoJDH5tpLfivpj: basisUsdcPool, E6FUnQHGHJVJg7oExVr5Moeaj1QpdpZQF5odYjHXWPZb: gstUsdcPool, F5BTnwuMA6rxftTdbZ33VWKr2wrr6DuQHnd4guKmPSYQ: meanUsdcPool, HCtyJzFUtYecXrA52s4Y9atq4J1fhT3cYsTX17XVSFag: aartUsdcPool, DJqqvzSuPaWThfzwMjXx7H2ZmHDdwxza6NtFudtuXcpc: shdwUsdcPool, "2ws7g3LBPdctfKn42Di9qxzQtUJ8ZL1aEAX2rGEQMNqh": shdwSolPool, "99ZHUQsgxL7K6PHrGNi1gSwawwPr7UA5fbWrYoHQ6qhX": scyUsdcPool, E5kSBqTDxFLbLNQaVVtPtnhEYVLMCK2fVSEKoMKL98qR: slcUsdcPool, "6c13xsmyk7UaHUWZ2rm1MM3ZdrQRSBkQ9waaG25ridVs": wustSolPool, J1KfRtP5y2warpD7LdJhfBLPKoWwSqYuovdArSv1mpQ7: wustUsdcPool, "68YVjgPnTUPcBqZyghqvD2WPNsrLKsjYTmBKJzHRr4qd": msolWustPool, "8Mh7drLbt3jFJYwp948XyvQscGLaLkChNcaH5wwaAoWA": wlunaWustPool, HTZd53fYwYQRyAjiaPsZy9Gf41gobFdqkF4oKe3XLi95: stsolWustPool, AzEoVuNJyo9ByoLRZ5t6vav2Zg24vULNVJM41PgCKUqR: jsolUsdcPool, CCyDxjdW3G7hPTthTMPTZ4bnhFF19XG6rx2fNiKeRQww: daosolUsdcPool, Gx4PoxenyQwhGGnKagAT35iVg4im1iKhJxDWqVhgu6tk: orcaUsdtPool, GsfyYHkSgC3Ta6aWR9MjB2sxoBrkGGeR2tAwXbpphf3: orcaWhethPool, "7cuu94swKL5PtFQohKMAzyd1mjj65rgMW3GzLY31HCnK": geneUsdcPool, "85krvT9DxdYgoFLQDHTAGdvtNuLdAsc4xE5FkVLpN2aR": cmfiUsdcPool, HVLyX8mD8YvKgZJ4oB6rXJiCYMLpHKwB6iCiCjE1XwdT: celoUsdcPool, Gpzd833qSmv3kXpQmxEaqkrZTXZaRjhNAoqhf61qAhTG: ftmUsdcPool, DFpLFcQZqDKykyDePgip4r6MExVmBKWqTa12ezq6qxUY: btcOrcaPool, cL5WhffCYFRLM4We8VS2W684kM4pHyuvEDwp8Ddw48k: hbbUsdcPool, FkKzu2HeMJZf4oHwoYPxLGVy3net5Jq8HAfnA5VqETgk: hbbSolPool, "2Reqt4Sw9xNY8BoJ3EZLpFu5yVgNxFrbw8M3KiJpPn6o": sbUsdcPool, "4ni1nho89cDKAQ9ddbNQA9ieLYpzvJVmJpuogu5Ct5ur": stsolUsdtPool, H7gyTmNCDXkD8MGMqnxqoD8ANszjcju4tjT6ERZ5dakf: seededUsdcPool, "3hksYA17VxgiKSeihjnZkBbjc2CTbEBfvDCYgQhojTo5": audioUsdcPool, AaZRnJAnDyJyPD9uPJpJ8bzBGDCEi6jtBpUf92xErWPp: mmaUsdcPool, "9wPhuYapychVDSxmXqCZxy2Ka8Lmav4SHM72si8bfraV": onesolSolPool, Eho8h1BcoG5QWU7X9FzJafw5ErKUXtR2LobAJJZfWff4: puffSolPool, "4iyU77yZbg8iD344vbwruAuDAf9i1EVV3FhZJDnWStBE": saoUsdcPool, "3dXdXg5HPyZ73GFC9LkSn3thdJUGeXWB8iSTHs5UcqiH": srlyv2SolPool, "2LYgm6nGXmSSjfoEriPuYeGoNiWNxUs7n3rnTbDWN5c7": zbcUsdcPool, CFxQF5kNAtbbDj298Xr47Sf4mkSyuzWpRH97hrdQ6kxi: gmtUsdcPool, DdAFNvDxtEHCgKj3JAM64zCKfMWhs4J9wEmRrjUAFiME: novaUsdcPool, "7n2YW9qLkhGFArdZPLoF4hYPE2zw7xCACkVPXrUWnLuo": hbbUsdhPool, "6atKbS2Xz5vu7cqWBNk8KYkuakRzckZ9nvtUKf2k8Sc3": takiSrlyv2Pool, "5vhh9ZnD9vnahRhFLP1EUEyYRSzvJwgw9U2xygsSJSrp": zigUsdcPool, HfRgvhgscGX5GaP3rUrZAhh7gS4aJ2UQ7rNVX976rG6P: srlySolPool, "3xaK5aWWLNRB73xUVX3cusLhDp65mTvP4fwW5Jwxakgs": takiSrlyPool, "4jjQSgFx33DUb1a7pgPsi3FbtZXDQ94b6QywjNK3NtZw": stsolSolPool, HYp9v7cY4wAxSsa6ijztQQ3GQ8iTttuG5vu8JNBDHoNh: btcStsolPool, FWurFWADrgmhb6Y44LEaCMnEHS2Tu3QGqd9oBcZtr8gT: stsolWhethPool, }; ================================================ FILE: src/constants/tokens.ts ================================================ import { PublicKey } from "@solana/web3.js"; import { OrcaToken } from ".."; /** * The following content is auto-generated. */ export const onesolToken: OrcaToken = Object.freeze({ tag: "1SOL", name: "1Sol", mint: new PublicKey("4ThReWAbAVZjNVgs5Ui9Pk3cZ5TYaD9u6Y89fp6EFzoF"), scale: 8, }); export const aartToken: OrcaToken = Object.freeze({ tag: "AART", name: "ALL.ART", mint: new PublicKey("F3nefJBcejYbtdREjui1T9DPh5dBgpkKq7u2GAAMXs5B"), scale: 6, }); export const abrToken: OrcaToken = Object.freeze({ tag: "ABR", name: "Allbridge", mint: new PublicKey("a11bdAAuV8iB2fu7X6AxAvDTo1QZ8FXB3kk5eecdasp"), scale: 9, }); export const anaToken: OrcaToken = Object.freeze({ tag: "ANA", name: "Nirvana ANA", mint: new PublicKey("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"), scale: 6, }); export const aptToken: OrcaToken = Object.freeze({ tag: "APT", name: "Apricot", mint: new PublicKey("APTtJyaRX5yGTsJU522N4VYWg3vCvSb65eam5GrPT5Rt"), scale: 6, }); export const atlasToken: OrcaToken = Object.freeze({ tag: "ATLAS", name: "Star Atlas", mint: new PublicKey("ATLASXmbPQxBUYbxPsV97usA3fPQYEqzQBUHgiFCUsXx"), scale: 8, }); export const audioToken: OrcaToken = Object.freeze({ tag: "AUDIO", name: "Audius (Wormhole)", mint: new PublicKey("9LzCMqDgTKYz9Drzqnpgee3SGa89up3a247ypMj2xrqM"), scale: 8, }); export const auryToken: OrcaToken = Object.freeze({ tag: "AURY", name: "Aurory", mint: new PublicKey("AURYydfxJib1ZkTir1Jn1J9ECYUtjb6rKQVmtYaixWPP"), scale: 9, }); export const avaxToken: OrcaToken = Object.freeze({ tag: "AVAX", name: "Avalanche", mint: new PublicKey("AUrMpCDYYcPuHhyNX8gEEqbmDPFUpBpHrNW3vPeCFn5Z"), scale: 9, }); export const basisToken: OrcaToken = Object.freeze({ tag: "BASIS", name: "basis.markets", mint: new PublicKey("Basis9oJw9j8cw53oMV7iqsgo6ihi9ALw4QR31rcjUJa"), scale: 6, }); export const blockToken: OrcaToken = Object.freeze({ tag: "BLOCK", name: "Blockasset", mint: new PublicKey("NFTUkR4u7wKxy9QLaX2TGvd9oZSWoMo4jqSJqdMb7Nk"), scale: 6, }); export const bopToken: OrcaToken = Object.freeze({ tag: "BOP", name: "Boring Protocol", mint: new PublicKey("BLwTnYKqf7u4qjgZrrsKeNs2EzWkMLqVCu6j8iHyrNA3"), scale: 8, }); export const btcToken: OrcaToken = Object.freeze({ tag: "BTC", name: "Bitcoin", mint: new PublicKey("9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E"), scale: 6, }); export const catoToken: OrcaToken = Object.freeze({ tag: "CATO", name: "CATO", mint: new PublicKey("5p2zjqCd1WJzAVgcEnjhb9zWDU7b9XVhFhx4usiyN7jB"), scale: 9, }); export const caveToken: OrcaToken = Object.freeze({ tag: "CAVE", name: "Crypto Cavemen", mint: new PublicKey("4SZjjNABoqhbd4hnapbvoEPEqT8mnNkfbEoAwALf1V8t"), scale: 6, }); export const celoToken: OrcaToken = Object.freeze({ tag: "CELO", name: "Celo", mint: new PublicKey("GNCjk3FmPPgZTkbQRSxr6nCvLtYMbXKMnRxg8BgJs62e"), scale: 9, }); export const chicksToken: OrcaToken = Object.freeze({ tag: "CHICKS", name: "SolChicks Token", mint: new PublicKey("cxxShYRVcepDudXhe7U62QHvw8uBJoKFifmzggGKVC2"), scale: 9, }); export const cmfiToken: OrcaToken = Object.freeze({ tag: "CMFI", name: "Compendium.Fi", mint: new PublicKey("5Wsd311hY8NXQhkt9cWHwTnqafk7BGEbLu8Py3DSnPAr"), scale: 6, }); export const copeToken: OrcaToken = Object.freeze({ tag: "COPE", name: "Cope", mint: new PublicKey("8HGyAAB1yoM1ttS7pXjHMa3dukTFGQggnFFH3hJZgzQh"), scale: 6, }); export const dflToken: OrcaToken = Object.freeze({ tag: "DFL", name: "DeFi Land", mint: new PublicKey("DFL1zNkaGPWm1BqAVqRjCZvHmwTFrEaJtbzJWgseoNJh"), scale: 9, }); export const ethToken: OrcaToken = Object.freeze({ tag: "ETH", name: "Ethereum", mint: new PublicKey("2FPyTwcZLUg1MDrwsyoP4D6s1tM7hAkHYRjkNb5w6Pxk"), scale: 6, }); export const fabToken: OrcaToken = Object.freeze({ tag: "FAB", name: "Fabric", mint: new PublicKey("EdAhkbj5nF9sRM7XN7ewuW8C9XEUMs8P7cnoQ57SYE96"), scale: 9, }); export const fantToken: OrcaToken = Object.freeze({ tag: "FANT", name: "Phantasia", mint: new PublicKey("FANTafPFBAt93BNJVpdu25pGPmca3RfwdsDsRrT3LX1r"), scale: 6, }); export const fidaToken: OrcaToken = Object.freeze({ tag: "FIDA", name: "Bonfida", mint: new PublicKey("EchesyfXePKdLtoiZSL8pBe8Myagyy8ZRqsACNCFGnvp"), scale: 6, }); export const frktToken: OrcaToken = Object.freeze({ tag: "FRKT", name: "FRAKT Token", mint: new PublicKey("ErGB9xa24Szxbk1M28u2Tx8rKPqzL6BroNkkzk5rG4zj"), scale: 8, }); export const ftmToken: OrcaToken = Object.freeze({ tag: "FTM", name: "Fantom", mint: new PublicKey("EsPKhGTMf3bGoy4Qm7pCv3UCcWqAmbC1UGHBTDxRjjD4"), scale: 9, }); export const fttToken: OrcaToken = Object.freeze({ tag: "FTT", name: "FTX Token", mint: new PublicKey("AGFEad2et2ZJif9jaGpdMixQqvW5i81aBdvKe7PHNfz3"), scale: 6, }); export const geneToken: OrcaToken = Object.freeze({ tag: "GENE", name: "Genopets", mint: new PublicKey("GENEtH5amGSi8kHAtQoezp1XEXwZJ8vcuePYnXdKrMYz"), scale: 9, }); export const gmtToken: OrcaToken = Object.freeze({ tag: "GMT", name: "STEPN", mint: new PublicKey("7i5KKsX2weiTkry7jA4ZwSuXGhs5eJBEjY8vVxR4pfRx"), scale: 9, }); export const gofxToken: OrcaToken = Object.freeze({ tag: "GOFX", name: "GooseFX", mint: new PublicKey("GFX1ZjR2P15tmrSwow6FjyDYcEkoFb4p4gJCpLBjaxHD"), scale: 9, }); export const grapeToken: OrcaToken = Object.freeze({ tag: "GRAPE", name: "Grape", mint: new PublicKey("8upjSpvjcdpuzhfR1zriwg5NXkwDruejqNE9WNbPRtyA"), scale: 6, }); export const gstToken: OrcaToken = Object.freeze({ tag: "GST", name: "GST", mint: new PublicKey("AFbX8oGjGpmVFywbVouvhQSRmiW2aR1mohfahi4Y2AdB"), scale: 9, }); export const hbbToken: OrcaToken = Object.freeze({ tag: "HBB", name: "Hubble", mint: new PublicKey("HBB111SCo9jkCejsZfz8Ec8nH7T6THF8KEKSnvwT6XK6"), scale: 6, }); export const hdgToken: OrcaToken = Object.freeze({ tag: "HDG", name: "Hedge Token", mint: new PublicKey("5PmpMzWjraf3kSsGEKtqdUsCoLhptg4yriZ17LKKdBBy"), scale: 9, }); export const ivnToken: OrcaToken = Object.freeze({ tag: "IVN", name: "Investin", mint: new PublicKey("iVNcrNE9BRZBC9Aqf753iZiZfbszeAVUoikgT9yvr2a"), scale: 6, }); export const jetToken: OrcaToken = Object.freeze({ tag: "JET", name: "JET", mint: new PublicKey("JET6zMJWkCN9tpRT2v2jfAmm5VnQFDpUBCyaKojmGtz"), scale: 9, }); export const jsolToken: OrcaToken = Object.freeze({ tag: "JSOL", name: "JPool", mint: new PublicKey("7Q2afV64in6N6SeZsAAB81TJzwDoD6zpqmHkzi9Dcavn"), scale: 9, }); export const kinToken: OrcaToken = Object.freeze({ tag: "KIN", name: "Kin", mint: new PublicKey("kinXdEcpDQeHPEuQnqmUgtYykqKGVFq6CeVX5iAHJq6"), scale: 5, }); export const kuroToken: OrcaToken = Object.freeze({ tag: "KURO", name: "Kurobi", mint: new PublicKey("2Kc38rfQ49DFaKHQaWbijkE7fcymUMLY5guUiUsDmFfn"), scale: 6, }); export const larixToken: OrcaToken = Object.freeze({ tag: "LARIX", name: "Larix", mint: new PublicKey("Lrxqnh6ZHKbGy3dcrCED43nsoLkM1LTzU2jRfWe8qUC"), scale: 6, }); export const liqToken: OrcaToken = Object.freeze({ tag: "LIQ", name: "LIQ Protocol", mint: new PublicKey("4wjPQJ6PrkC4dHhYghwJzGBVP78DkBzA2U3kHoFNBuhj"), scale: 6, }); export const mapsToken: OrcaToken = Object.freeze({ tag: "MAPS", name: "MAPS", mint: new PublicKey("MAPS41MDahZ9QdKXhVa4dWB9RuyfV4XqhyAZ8XcYepb"), scale: 6, }); export const meanToken: OrcaToken = Object.freeze({ tag: "MEAN", name: "Meanfi", mint: new PublicKey("MEANeD3XDdUmNMsRGjASkSWdC8prLYsoRJ61pPeHctD"), scale: 6, }); export const mediaToken: OrcaToken = Object.freeze({ tag: "MEDIA", name: "Media Network", mint: new PublicKey("ETAtLmCmsoiEEKfNrHKJ2kYy3MoABhU6NQvpSfij5tDs"), scale: 6, }); export const merToken: OrcaToken = Object.freeze({ tag: "MER", name: "Mercurial", mint: new PublicKey("MERt85fc5boKw3BW1eYdxonEuJNvXbiMbs6hvheau5K"), scale: 6, }); export const mmaToken: OrcaToken = Object.freeze({ tag: "MMA", name: "MMA Gaming", mint: new PublicKey("MMAx26JtJgSWv6yH48nEHCGZcVvRbf9Lt9ALa7jSipe"), scale: 9, }); export const mndeToken: OrcaToken = Object.freeze({ tag: "MNDE", name: "Marinade Governance", mint: new PublicKey("MNDEFzGvMt87ueuHvVU9VcTqsAP5b3fTGPsHuuPA5ey"), scale: 9, }); export const mngoToken: OrcaToken = Object.freeze({ tag: "MNGO", name: "Mango Markets", mint: new PublicKey("MangoCzJ36AjZyKwVj3VnYU4GTonjfVEnJmvvWaxLac"), scale: 6, }); export const ninjaToken: OrcaToken = Object.freeze({ tag: "NINJA", name: "NINJA", mint: new PublicKey("FgX1WD9WzMU3yLwXaFSarPfkgzjLb2DZCqmkx9ExpuvJ"), scale: 6, }); export const novaToken: OrcaToken = Object.freeze({ tag: "NOVA", name: "Nova Finance", mint: new PublicKey("BDrL8huis6S5tpmozaAaT5zhE5A7ZBAB2jMMvpKEeF8A"), scale: 9, }); export const oogiToken: OrcaToken = Object.freeze({ tag: "OOGI", name: "OOGI", mint: new PublicKey("H7Qc9APCWWGDVxGD5fJHmLTmdEgT9GFatAKFNg6sHh8A"), scale: 9, }); export const orcaToken: OrcaToken = Object.freeze({ tag: "ORCA", name: "Orca", mint: new PublicKey("orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE"), scale: 6, }); export const oxyToken: OrcaToken = Object.freeze({ tag: "OXY", name: "Oxygen", mint: new PublicKey("z3dn17yLaGMKffVogeFHQ9zWVcXgqgf3PQnDsNs2g6M"), scale: 6, }); export const paiToken: OrcaToken = Object.freeze({ tag: "PAI", name: "Parrot Stable", mint: new PublicKey("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"), scale: 6, }); export const polisToken: OrcaToken = Object.freeze({ tag: "POLIS", name: "Star Atlas DAO", mint: new PublicKey("poLisWXnNRwC6oBu1vHiuKQzFjGL4XDSu4g9qjz9qVk"), scale: 8, }); export const portToken: OrcaToken = Object.freeze({ tag: "PORT", name: "Port Finance", mint: new PublicKey("PoRTjZMPXb9T7dyU7tpLEZRQj7e6ssfAE62j2oQuc6y"), scale: 6, }); export const prtToken: OrcaToken = Object.freeze({ tag: "PRT", name: "Parrot Protocol", mint: new PublicKey("PRT88RkA4Kg5z7pKnezeNH4mafTvtQdfFgpQTGRjz44"), scale: 6, }); export const puffToken: OrcaToken = Object.freeze({ tag: "PUFF", name: "PUFF", mint: new PublicKey("G9tt98aYSznRk7jWsfuz9FnTdokxS6Brohdo9hSmjTRB"), scale: 9, }); export const rayToken: OrcaToken = Object.freeze({ tag: "RAY", name: "Raydium", mint: new PublicKey("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"), scale: 6, }); export const ropeToken: OrcaToken = Object.freeze({ tag: "ROPE", name: "Rope", mint: new PublicKey("8PMHT4swUMtBzgHnh5U564N5sjPSiUz2cjEQzFnnP1Fo"), scale: 9, }); export const runToken: OrcaToken = Object.freeze({ tag: "RUN", name: "Run", mint: new PublicKey("6F9XriABHfWhit6zmMUYAQBSy6XK5VF1cHXuW5LDpRtC"), scale: 9, }); export const samoToken: OrcaToken = Object.freeze({ tag: "SAMO", name: "Samoyedcoin", mint: new PublicKey("7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU"), scale: 9, }); export const saoToken: OrcaToken = Object.freeze({ tag: "SAO", name: "Sator", mint: new PublicKey("2HeykdKjzHKGm2LKHw8pDYwjKPiFEoXAz74dirhUgQvq"), scale: 9, }); export const sbToken: OrcaToken = Object.freeze({ tag: "SB", name: "SuperBonds", mint: new PublicKey("SuperbZyz7TsSdSoFAZ6RYHfAWe9NmjXBLVQpS8hqdx"), scale: 6, }); export const sbrToken: OrcaToken = Object.freeze({ tag: "SBR", name: "Saber", mint: new PublicKey("Saber2gLauYim4Mvftnrasomsv6NvAuncvMEZwcLpD1"), scale: 6, }); export const scyToken: OrcaToken = Object.freeze({ tag: "SCY", name: "Synchrony", mint: new PublicKey("SCYfrGCw8aDiqdgcpdGjV6jp4UVVQLuphxTDLNWu36f"), scale: 9, }); export const sdogeToken: OrcaToken = Object.freeze({ tag: "SDOGE", name: "SolDoge", mint: new PublicKey("8ymi88q5DtmdNTn2sPRNFkvMkszMHuLJ1e3RVdWjPa3s"), scale: 0, }); export const seededToken: OrcaToken = Object.freeze({ tag: "SEEDED", name: "Seeded Network", mint: new PublicKey("seedEDBqu63tJ7PFqvcbwvThrYUkQeqT6NLf81kLibs"), scale: 9, }); export const shdwToken: OrcaToken = Object.freeze({ tag: "SHDW", name: "Shadow", mint: new PublicKey("SHDWyBxihqiCj6YekG2GUr7wqKLeLAMK1gHZck9pL6y"), scale: 9, }); export const slcToken: OrcaToken = Object.freeze({ tag: "SLC", name: "Solice", mint: new PublicKey("METAmTMXwdb8gYzyCPfXXFmZZw4rUsXX58PNsDg7zjL"), scale: 6, }); export const slimToken: OrcaToken = Object.freeze({ tag: "SLIM", name: "Solanium", mint: new PublicKey("xxxxa1sKNGwFtw2kFn8XauW9xq8hBZ5kVtcSesTT9fW"), scale: 6, }); export const slndToken: OrcaToken = Object.freeze({ tag: "SLND", name: "Solend", mint: new PublicKey("SLNDpmoWTVADgEdndyvWzroNL7zSi1dF9PC3xHGtPwp"), scale: 6, }); export const slrsToken: OrcaToken = Object.freeze({ tag: "SLRS", name: "Solrise Finance", mint: new PublicKey("SLRSSpSLUTP7okbCUBYStWCo1vUgyt775faPqz8HUMr"), scale: 6, }); export const snyToken: OrcaToken = Object.freeze({ tag: "SNY", name: "SNY", mint: new PublicKey("4dmKkXNHdgYsXqBHCuMikNQWwVomZURhYvkkX5c4pQ7y"), scale: 6, }); export const solToken: OrcaToken = Object.freeze({ tag: "SOL", name: "Solana", mint: new PublicKey("So11111111111111111111111111111111111111112"), scale: 9, }); export const sonarToken: OrcaToken = Object.freeze({ tag: "SONAR", name: "SonarWatch", mint: new PublicKey("sonarX4VtVkQemriJeLm6CKeW3GDMyiBnnAEMw1MRAE"), scale: 9, }); export const srmToken: OrcaToken = Object.freeze({ tag: "SRM", name: "Serum", mint: new PublicKey("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"), scale: 6, }); export const stepToken: OrcaToken = Object.freeze({ tag: "STEP", name: "Step", mint: new PublicKey("StepAscQoEioFxxWGnh2sLBDFp9d8rvKz2Yp39iDpyT"), scale: 9, }); export const sunnyToken: OrcaToken = Object.freeze({ tag: "SUNNY", name: "Sunny Aggregator", mint: new PublicKey("SUNNYWgPQmFxe9wTZzNK7iPnJ3vYDrkgnxJRJm1s3ag"), scale: 6, }); export const sypToken: OrcaToken = Object.freeze({ tag: "SYP", name: "Sypool", mint: new PublicKey("FnKE9n6aGjQoNWRBZXy4RW6LZVao7qwBonUbiD7edUmZ"), scale: 9, }); export const takiToken: OrcaToken = Object.freeze({ tag: "TAKI", name: "Taki", mint: new PublicKey("Taki7fi3Zicv7Du1xNAWLaf6mRK7ikdn77HeGzgwvo4"), scale: 9, }); export const tttToken: OrcaToken = Object.freeze({ tag: "TTT", name: "TabTrader", mint: new PublicKey("FNFKRV3V8DtA3gVJN6UshMiLGYA8izxFwkNWmJbFjmRj"), scale: 6, }); export const tulipToken: OrcaToken = Object.freeze({ tag: "TULIP", name: "Tulip Protocol", mint: new PublicKey("TuLipcqtGVXP9XR62wM8WWCm6a9vhLs7T1uoWBk6FDs"), scale: 6, }); export const unqToken: OrcaToken = Object.freeze({ tag: "UNQ", name: "UNQ", mint: new PublicKey("UNQtEecZ5Zb4gSSVHCAWUQEoNnSVEbWiKCi1v9kdUJJ"), scale: 6, }); export const upsToken: OrcaToken = Object.freeze({ tag: "UPS", name: "UPFI Network", mint: new PublicKey("EwJN2GqUGXXzYmoAciwuABtorHczTA5LqbukKXV1viH7"), scale: 6, }); export const usdcToken: OrcaToken = Object.freeze({ tag: "USDC", name: "USD Coin", mint: new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"), scale: 6, }); export const usdhToken: OrcaToken = Object.freeze({ tag: "USDH", name: "USDH", mint: new PublicKey("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"), scale: 6, }); export const usdtToken: OrcaToken = Object.freeze({ tag: "USDT", name: "Tether USD", mint: new PublicKey("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"), scale: 6, }); export const ushToken: OrcaToken = Object.freeze({ tag: "USH", name: "Hedge USD", mint: new PublicKey("9iLH8T7zoWhY7sBmj1WK9ENbWdS1nL8n9wAxaeRitTa6"), scale: 9, }); export const uxpToken: OrcaToken = Object.freeze({ tag: "UXP", name: "UXD Protocol Token", mint: new PublicKey("UXPhBoR3qG4UCiGNJfV7MqhHyFqKN68g45GoYvAeL2M"), scale: 9, }); export const wagToken: OrcaToken = Object.freeze({ tag: "WAG", name: "Waggle", mint: new PublicKey("5tN42n9vMi6ubp67Uy4NnmM5DMZYN8aS8GeB3bEDHr6E"), scale: 9, }); export const wmpToken: OrcaToken = Object.freeze({ tag: "WMP", name: "Whalemap", mint: new PublicKey("BygDd5LURoqztD3xETc99WCxLUbTi6WYSht9XiBgZ4HW"), scale: 9, }); export const woofToken: OrcaToken = Object.freeze({ tag: "WOOF", name: "WOOF Token", mint: new PublicKey("9nEqaUcb16sQ3Tn1psbkWqyhPdLmfHWjKGymREjsAgTE"), scale: 6, }); export const zbcToken: OrcaToken = Object.freeze({ tag: "ZBC", name: "Zebec Protocol", mint: new PublicKey("zebeczgi5fSEtbpfQKVZKCJ3WgYXxjkMUkNNx7fLKAF"), scale: 9, }); export const zigToken: OrcaToken = Object.freeze({ tag: "ZIG", name: "Zignaly", mint: new PublicKey("ANqY8h3sRSwkC29FvGJenAh7VGRABVVx7Ls6Mq4BuGT"), scale: 9, }); export const daosolToken: OrcaToken = Object.freeze({ tag: "daoSOL", name: "daoSOL Token", mint: new PublicKey("GEJpt3Wjmr628FqXxTgxMce1pLntcPV4uFi8ksxMyPQh"), scale: 9, }); export const msolToken: OrcaToken = Object.freeze({ tag: "mSOL", name: "Marinade.finance", mint: new PublicKey("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"), scale: 9, }); export const psolToken: OrcaToken = Object.freeze({ tag: "pSOL", name: "pSOL", mint: new PublicKey("9EaLkQrbjmbbuZG9Wdpo8qfNUEjHATJFSycEmw6f1rGX"), scale: 9, }); export const srlyv2Token: OrcaToken = Object.freeze({ tag: "sRLYv2", name: "Rally (Solana)", mint: new PublicKey("RLYv2ubRMDLcGG2UyvPmnPmkfuQTsMbg4Jtygc7dmnq"), scale: 9, }); export const srlyToken: OrcaToken = Object.freeze({ tag: "sRLY", name: "Rally Solana", mint: new PublicKey("sRLY3migNrkC1HLgqotpvi66qGkdNedqPZ9TJpAQhyh"), scale: 9, }); export const scnsolToken: OrcaToken = Object.freeze({ tag: "scnSOL", name: "Socean Staked Sol", mint: new PublicKey("5oVNBeEEQvYi1cX3ir8Dx5n1P7pdxydbGF2X4TxVusJm"), scale: 9, }); export const stsolToken: OrcaToken = Object.freeze({ tag: "stSOL", name: "Lido Staked SOL", mint: new PublicKey("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"), scale: 9, }); export const whapiToken: OrcaToken = Object.freeze({ tag: "wHAPI", name: "HAPI", mint: new PublicKey("6VNKqgz9hk7zRShTFdg5AnkfKwZUcojzwAkzxSH3bnUm"), scale: 9, }); export const wldoToken: OrcaToken = Object.freeze({ tag: "wLDO", name: "Lido DAO", mint: new PublicKey("HZRCwxP2Vq9PCpPXooayhJ2bxTpo5xfpQrwB1svh332p"), scale: 8, }); export const wlunaToken: OrcaToken = Object.freeze({ tag: "wLUNA", name: "Terra", mint: new PublicKey("F6v4wfAdJB8D8p77bMXZgYt8TDKsYxLYxH5AFhUkYx9W"), scale: 6, }); export const wustToken: OrcaToken = Object.freeze({ tag: "wUST", name: "TerraUSD (Wormhole)", mint: new PublicKey("9vMJfxuKxXBoEa7rM12mYLMwTacLMLDJqHozw96WQL8i"), scale: 6, }); export const whethToken: OrcaToken = Object.freeze({ tag: "whETH", name: "Ethereum", mint: new PublicKey("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"), scale: 8, }); export const wstethToken: OrcaToken = Object.freeze({ tag: "wstETH", name: "Lido Staked Ether", mint: new PublicKey("ZScHuTtqZukUrtZS43teTKGs2VqkKL8k4QCouR2n6Uo"), scale: 8, }); ================================================ FILE: src/index.ts ================================================ export * from "./public"; ================================================ FILE: src/model/orca/farm/farm-types.ts ================================================ import { PublicKey } from "@solana/web3.js"; /** * An Orca aquafarm token * @param address The farm account address * @param farmTokenMint Mint address for the farm token * @param rewardTokenMint Mint address for the farm reward token * @param rewardTokenDecimals Number of decimal places for the reward token * @param baseTokenMint Mint address for the base token * @param baseTokenDecimals Number of decimal places for the base token */ export type OrcaFarmParams = { address: PublicKey; farmTokenMint: PublicKey; rewardTokenMint: PublicKey; rewardTokenDecimals: number; baseTokenMint: PublicKey; baseTokenDecimals: number; }; ================================================ FILE: src/model/orca/farm/orca-farm.ts ================================================ import { Aquafarm, fetchGlobalFarms, fetchUserFarms, getUserFarmAddress } from "@orca-so/aquafarm"; import { TOKEN_PROGRAM_ID, u64 } from "@solana/spl-token"; import { Connection, Keypair, PublicKey } from "@solana/web3.js"; import Decimal from "decimal.js"; import { deriveAssociatedTokenAddress, deserializeAccount, OrcaU64, ORCA_FARM_ID, resolveOrCreateAssociatedTokenAddress, TransactionBuilder, TransactionPayload, U64Utils, } from "../../.."; import { OrcaFarm, ZERO } from "../../../public/"; import { createFarmConvertTokensInstruction, createFarmHarvestRewardInstruction, createFarmRevertTokensInstruction, createInitUserFarmInstruction, } from "../../../public/utils/web3/instructions/farm-instructions"; import { createApprovalInstruction } from "../../../public/utils/web3/instructions/pool-instructions"; import { Owner } from "../../../public/utils/web3/key-utils"; import { OrcaFarmParams } from "./farm-types"; export class OrcaFarmImpl implements OrcaFarm { private connection: Connection; private farmParams: OrcaFarmParams; constructor(connection: Connection, config: OrcaFarmParams) { this.connection = connection; this.farmParams = config; } public async getFarmBalance(owner: PublicKey): Promise { const address = await deriveAssociatedTokenAddress(owner, this.farmParams.farmTokenMint); const accountInfo = await this.connection.getAccountInfo(address); // User does not have a balance for this account if (accountInfo == undefined) { return OrcaU64.fromNumber(0, this.farmParams.baseTokenDecimals); } const result = deserializeAccount(accountInfo?.data); if (result == undefined) { throw new Error("Failed to parse user account for LP token."); } return OrcaU64.fromU64(result.amount, this.farmParams.baseTokenDecimals); } public async getFarmSupply(): Promise { const context = await this.connection.getTokenSupply(this.farmParams.farmTokenMint); const amt = new u64(context.value.amount); return OrcaU64.fromU64(amt, this.farmParams.baseTokenDecimals); } public async deposit( owner: Keypair | PublicKey, baseTokenAmount: Decimal | OrcaU64 ): Promise { const _owner = new Owner(owner); const ownerAddress = _owner.publicKey; const baseTokenAmount_U64 = U64Utils.toFarmU64( baseTokenAmount, this.farmParams, "baseTokenAmount" ); const { address: farmAddress, rewardTokenMint } = this.farmParams; const userFarmPublicKey = ( await getUserFarmAddress(farmAddress, ownerAddress, TOKEN_PROGRAM_ID, ORCA_FARM_ID) )[0]; const globalFarms = await fetchGlobalFarms(this.connection, [farmAddress], ORCA_FARM_ID); const userFarms = await fetchUserFarms( this.connection, ownerAddress, [farmAddress], ORCA_FARM_ID ); if (!globalFarms) { throw new Error("Failed to get globalFarms information"); } const farm = new Aquafarm(globalFarms[0], ORCA_FARM_ID, userFarms && userFarms[0]); // If the user lacks the user farm, create it const initUserFarmInstruction = await createInitUserFarmInstruction( farm, userFarmPublicKey, _owner ); // If the user lacks the farm token account, create it const { address: userFarmTokenPublicKey, ...resolveFarmTokenInstructions } = await resolveOrCreateAssociatedTokenAddress( this.connection, _owner, farm.globalFarm.farmTokenMint ); // If the user lacks the reward token account, create it const { address: userRewardTokenPublicKey, ...resolveRewardTokenInstructions } = await resolveOrCreateAssociatedTokenAddress(this.connection, _owner, rewardTokenMint); // If the user lacks the base token account, create it const { address: userBaseTokenPublicKey, ...resolveBaseTokenInstructions } = await resolveOrCreateAssociatedTokenAddress( this.connection, _owner, this.farmParams.baseTokenMint ); // Approve transfer of base token to be converted to farm tokens const { userTransferAuthority, ...transferBaseTokenInstruction } = createApprovalInstruction( ownerAddress, baseTokenAmount_U64, userBaseTokenPublicKey ); // Convert base tokens to farm tokens const convertToFarmTokens = await createFarmConvertTokensInstruction( farm, userTransferAuthority.publicKey, userBaseTokenPublicKey, userFarmTokenPublicKey, userRewardTokenPublicKey, baseTokenAmount_U64, userFarmPublicKey, _owner ); return await new TransactionBuilder(this.connection, ownerAddress, _owner) .addInstruction(initUserFarmInstruction) .addInstruction(resolveFarmTokenInstructions) .addInstruction(resolveBaseTokenInstructions) .addInstruction(resolveRewardTokenInstructions) .addInstruction(transferBaseTokenInstruction) .addInstruction(convertToFarmTokens) .build(); } public async withdraw( owner: Keypair | PublicKey, baseTokenAmount: Decimal | OrcaU64 ): Promise { const _owner = new Owner(owner); const ownerAddress = _owner.publicKey; const baseTokenAmount_U64 = U64Utils.toFarmU64( baseTokenAmount, this.farmParams, "baseTokenAmount" ); const { address: farmAddress, rewardTokenMint } = this.farmParams; const userFarmPublicKey = ( await getUserFarmAddress(farmAddress, ownerAddress, TOKEN_PROGRAM_ID, ORCA_FARM_ID) )[0]; const globalFarms = await fetchGlobalFarms(this.connection, [farmAddress], ORCA_FARM_ID); const userFarms = await fetchUserFarms( this.connection, ownerAddress, [farmAddress], ORCA_FARM_ID ); if (!globalFarms) { throw new Error("Failed to get globalFarms information"); } const farm = new Aquafarm(globalFarms[0], ORCA_FARM_ID, userFarms && userFarms[0]); if (!farm.isUserFarmInitialized()) { throw new Error("Failed to get userFarm information. Warning: withdraw from deposit address"); } // If the user lacks the farm token account, create it const { address: userFarmTokenPublicKey, ...resolveFarmTokenInstructions } = await resolveOrCreateAssociatedTokenAddress( this.connection, _owner, farm.globalFarm.farmTokenMint ); // If the user lacks the reward token account, create it const { address: userRewardTokenPublicKey, ...resolveRewardTokenInstructions } = await resolveOrCreateAssociatedTokenAddress(this.connection, _owner, rewardTokenMint); // Get user's baseToken token account const { address: userBaseTokenPublicKey, ...resolveBaseTokenInstructions } = await resolveOrCreateAssociatedTokenAddress( this.connection, _owner, this.farmParams.baseTokenMint ); // Approve transfer of farm tokens to be reverted to base tokens const { userTransferAuthority, ...transferFarmTokenInstruction } = createApprovalInstruction( ownerAddress, baseTokenAmount_U64, userFarmTokenPublicKey ); // Revert farm tokens to base tokens const revertFromFarmTokens = await createFarmRevertTokensInstruction( farm, userTransferAuthority.publicKey, userBaseTokenPublicKey, userFarmTokenPublicKey, userRewardTokenPublicKey, baseTokenAmount_U64, _owner ); return await new TransactionBuilder(this.connection, ownerAddress, _owner) .addInstruction(resolveFarmTokenInstructions) .addInstruction(resolveRewardTokenInstructions) .addInstruction(resolveBaseTokenInstructions) .addInstruction(transferFarmTokenInstruction) .addInstruction(revertFromFarmTokens) .build(); } public async getHarvestableAmount(ownerPublicKey: PublicKey): Promise { const { address: farmAddress, baseTokenDecimals } = this.farmParams; const globalFarms = await fetchGlobalFarms(this.connection, [farmAddress], ORCA_FARM_ID); const userFarms = await fetchUserFarms( this.connection, ownerPublicKey, [farmAddress], ORCA_FARM_ID ); if (!globalFarms) { throw new Error("Failed to get globalFarms information"); } const farm = new Aquafarm(globalFarms[0], ORCA_FARM_ID, userFarms && userFarms[0]); if (!farm.isUserFarmInitialized()) { return OrcaU64.fromU64(ZERO, baseTokenDecimals); } const farmSupply = await this.getFarmSupply(); const harvestableAmount = farm.getCurrentHarvestableAmount(farmSupply.toU64()) ?? ZERO; return OrcaU64.fromU64(harvestableAmount, baseTokenDecimals); } public async harvest(owner: Keypair | PublicKey): Promise { const _owner = new Owner(owner); const ownerAddress = _owner.publicKey; const { address: farmAddress, rewardTokenMint } = this.farmParams; const globalFarms = await fetchGlobalFarms(this.connection, [farmAddress], ORCA_FARM_ID); const userFarms = await fetchUserFarms( this.connection, ownerAddress, [farmAddress], ORCA_FARM_ID ); if (!globalFarms) { throw new Error("Failed to get globalFarms information"); } const farm = new Aquafarm(globalFarms[0], ORCA_FARM_ID, userFarms && userFarms[0]); if (!farm.isUserFarmInitialized()) { throw new Error("Failed to get userFarm information"); } // If the user lacks the reward token account, create it const { address: userRewardTokenPublicKey, ...resolveRewardTokenInstructions } = await resolveOrCreateAssociatedTokenAddress(this.connection, _owner, rewardTokenMint); const harvestRewardInstruction = await createFarmHarvestRewardInstruction( farm, userRewardTokenPublicKey, _owner ); return await new TransactionBuilder(this.connection, ownerAddress, _owner) .addInstruction(resolveRewardTokenInstructions) .addInstruction(harvestRewardInstruction) .build(); } public async getDailyEmissions(): Promise { const { address, rewardTokenDecimals } = this.farmParams; const globalFarms = await fetchGlobalFarms(this.connection, [address], ORCA_FARM_ID); if (!globalFarms) { throw new Error("Failed to get globalFarms information"); } const value = new Decimal(globalFarms[0].emissionsPerSecondNumerator.toString()) .mul(60 * 60 * 24) .div(globalFarms[0].emissionsPerSecondDenominator.toString()) .div(new Decimal(10).pow(rewardTokenDecimals)); return OrcaU64.fromDecimal(value, rewardTokenDecimals); } } ================================================ FILE: src/model/orca/orca-impl.ts ================================================ import { Connection } from "@solana/web3.js"; import { Orca, OrcaFarm, OrcaPool, OrcaPoolConfig, OrcaFarmConfig, Network } from "../../public"; import { OrcaFactory } from "../orca-factory"; export class OrcaImpl implements Orca { private connection: Connection; private network: Network; private factory: OrcaFactory; constructor(connection: Connection, network: Network) { this.connection = connection; this.network = network; this.factory = new OrcaFactory(); } getPool(pool: OrcaPoolConfig): OrcaPool { return this.factory.getPool(this.connection, this.network, pool); } getFarm(farm: OrcaFarmConfig): OrcaFarm { return this.factory.getFarm(this.connection, this.network, farm); } } ================================================ FILE: src/model/orca/pool/orca-pool.ts ================================================ import { u64 } from "@solana/spl-token"; import { Connection, PublicKey, Keypair } from "@solana/web3.js"; import Decimal from "decimal.js"; import { defaultSlippagePercentage } from "../../../constants/orca-defaults"; import { OrcaU64, deriveAssociatedTokenAddress, deserializeAccount, getTokens, U64Utils, PoolTokenCount, getTokenCount, TransactionBuilder, OrcaPool, OrcaToken, OrcaPoolToken, Quote, TransactionPayload, Percentage, resolveOrCreateAssociatedTokenAddress, ZERO, DepositQuote, WithdrawQuote, DecimalUtil, Network, ORCA_TOKEN_SWAP_ID_DEVNET, ORCA_TOKEN_SWAP_ID, } from "../../../public"; import { createApprovalInstruction, createDepositInstruction, createSwapInstruction, createWithdrawInstruction, } from "../../../public/utils/web3/instructions/pool-instructions"; import { Owner } from "../../../public/utils/web3/key-utils"; import { QuotePoolParams, QuoteBuilderFactory } from "../../quote/quote-builder"; import { OrcaPoolParams } from "./pool-types"; export class OrcaPoolImpl implements OrcaPool { private connection: Connection; private poolParams: OrcaPoolParams; private orcaTokenSwapId: PublicKey; constructor(connection: Connection, network: Network, config: OrcaPoolParams) { this.connection = connection; this.poolParams = config; this.orcaTokenSwapId = network === Network.MAINNET ? ORCA_TOKEN_SWAP_ID : ORCA_TOKEN_SWAP_ID_DEVNET; } public getTokenA(): OrcaPoolToken { const tokenId = this.poolParams.tokenIds[0]; return this.poolParams.tokens[tokenId]; } public getTokenB(): OrcaPoolToken { const tokenId = this.poolParams.tokenIds[1]; return this.poolParams.tokens[tokenId]; } public getPoolTokenMint(): PublicKey { return this.poolParams.poolTokenMint; } public async getLPBalance(owner: PublicKey): Promise { const address = await deriveAssociatedTokenAddress(owner, this.poolParams.poolTokenMint); const accountInfo = await this.connection.getAccountInfo(address); // User does not have a balance for this account if (accountInfo == undefined) { return OrcaU64.fromNumber(0, this.poolParams.poolTokenDecimals); } const result = deserializeAccount(accountInfo?.data); if (result == undefined) { throw new Error("Failed to parse user account for LP token."); } return OrcaU64.fromU64(result.amount, this.poolParams.poolTokenDecimals); } public async getLPSupply(): Promise { const context = await this.connection.getTokenSupply(this.poolParams.poolTokenMint); const amt = new u64(context.value.amount); return OrcaU64.fromU64(amt, this.poolParams.poolTokenDecimals); } public async getQuote( inputToken: OrcaToken, inputAmount: Decimal | OrcaU64, slippage?: Decimal ): Promise { const { inputPoolToken, outputPoolToken } = getTokens( this.poolParams, inputToken.mint.toString() ); const { inputTokenCount, outputTokenCount } = await getTokenCount( this.connection, this.poolParams, inputPoolToken, outputPoolToken ); return this.getQuoteWithPoolAmounts( inputToken, inputAmount, inputTokenCount, outputTokenCount, slippage ); } public async getQuoteWithPoolAmounts( inputToken: OrcaToken, inputAmount: Decimal | OrcaU64, inputTokenPoolAmount: u64, outputTokenPoolAmount: u64, slippage?: Decimal ): Promise { const slippageTolerance = slippage === undefined ? defaultSlippagePercentage : Percentage.fromDecimal(slippage); const feeStructure = this.poolParams.feeStructure; const { inputPoolToken, outputPoolToken } = getTokens( this.poolParams, inputToken.mint.toString() ); const inputAmountU64 = U64Utils.toTokenU64(inputAmount, inputPoolToken, "inputAmount"); const { value: { feeCalculator }, } = await this.connection.getRecentBlockhashAndContext("singleGossip"); const quoteParams: QuotePoolParams = { inputToken: inputPoolToken, outputToken: outputPoolToken, inputTokenCount: inputTokenPoolAmount, outputTokenCount: outputTokenPoolAmount, feeStructure: feeStructure, slippageTolerance: slippageTolerance, lamportsPerSignature: feeCalculator.lamportsPerSignature, amp: this.poolParams.amp !== undefined ? new u64(this.poolParams.amp) : undefined, }; const quoteBuilder = QuoteBuilderFactory.getBuilder(this.poolParams.curveType); const quote = quoteBuilder?.buildQuote(quoteParams, inputAmountU64); if (quote == undefined) { throw new Error("Failed to get quote!"); } return quote; } public async swap( owner: Keypair | PublicKey, inputToken: OrcaToken, amountIn: Decimal | OrcaU64, minimumAmountOut: Decimal | OrcaU64 ): Promise { const _owner = new Owner(owner); const ownerAddress = _owner.publicKey; const { inputPoolToken, outputPoolToken } = getTokens( this.poolParams, inputToken.mint.toString() ); const amountInU64 = U64Utils.toTokenU64(amountIn, inputPoolToken, "amountIn"); const minimumAmountOutU64 = U64Utils.toTokenU64( minimumAmountOut, outputPoolToken, "minimumAmountOut" ); const { address: inputPoolTokenUserAddress, ...resolveInputAddrInstructions } = await resolveOrCreateAssociatedTokenAddress( this.connection, _owner, inputPoolToken.mint, amountInU64 ); const { address: outputPoolTokenUserAddress, ...resolveOutputAddrInstructions } = await resolveOrCreateAssociatedTokenAddress(this.connection, _owner, outputPoolToken.mint); if (inputPoolTokenUserAddress === undefined || outputPoolTokenUserAddress === undefined) { throw new Error("Unable to derive input / output token associated address."); } const { userTransferAuthority, ...approvalInstruction } = createApprovalInstruction( ownerAddress, amountInU64, inputPoolTokenUserAddress ); const swapInstruction = await createSwapInstruction( this.poolParams, _owner, inputPoolToken, inputPoolTokenUserAddress, outputPoolToken, outputPoolTokenUserAddress, amountInU64, minimumAmountOutU64, userTransferAuthority.publicKey, this.orcaTokenSwapId ); return await new TransactionBuilder(this.connection, ownerAddress, _owner) .addInstruction(resolveInputAddrInstructions) .addInstruction(resolveOutputAddrInstructions) .addInstruction(approvalInstruction) .addInstruction(swapInstruction) .build(); } public async getDepositQuote( maxTokenAIn: Decimal | OrcaU64, maxTokenBIn: Decimal | OrcaU64, slippage?: Decimal ): Promise { const slippageTolerance = slippage === undefined ? defaultSlippagePercentage : Percentage.fromDecimal(slippage); const maxTokenAIn_U64 = U64Utils.toTokenU64(maxTokenAIn, this.getTokenA(), "maxTokenAIn"); const maxTokenBIn_U64 = U64Utils.toTokenU64(maxTokenBIn, this.getTokenB(), "maxTokenBIn"); const { inputTokenCount: tokenAAmount, outputTokenCount: tokenBAmount } = await getTokenCount( this.connection, this.poolParams, this.getTokenA(), this.getTokenB() ); const lpSupply = await this.getLPSupply(); if (tokenAAmount.eq(ZERO) || tokenBAmount.eq(ZERO)) { return { minPoolTokenAmountOut: OrcaU64.fromU64(ZERO, lpSupply.scale), maxTokenAIn: OrcaU64.fromU64(maxTokenAIn_U64, this.getTokenA().scale), maxTokenBIn: OrcaU64.fromU64(maxTokenBIn_U64, this.getTokenB().scale), }; } const poolTokenAmountWithA = maxTokenAIn_U64 .mul(slippageTolerance.denominator) .mul(lpSupply.toU64()) .div(tokenAAmount) .div(slippageTolerance.numerator.add(slippageTolerance.denominator)); const poolTokenAmountWithB = maxTokenBIn_U64 .mul(slippageTolerance.denominator) .mul(lpSupply.toU64()) .div(tokenBAmount) .div(slippageTolerance.numerator.add(slippageTolerance.denominator)); // Pick the smaller value of the two to calculate the minimum poolTokenAmount out const minPoolTokenAmountOut_U64 = poolTokenAmountWithA.gt(poolTokenAmountWithB) ? poolTokenAmountWithB : poolTokenAmountWithA; return { minPoolTokenAmountOut: OrcaU64.fromU64(minPoolTokenAmountOut_U64, lpSupply.scale), maxTokenAIn: OrcaU64.fromU64(maxTokenAIn_U64, this.getTokenA().scale), maxTokenBIn: OrcaU64.fromU64(maxTokenBIn_U64, this.getTokenB().scale), }; } public async deposit( owner: Keypair | PublicKey, maxTokenAIn: Decimal | OrcaU64, maxTokenBIn: Decimal | OrcaU64, minPoolTokenAmountOut: Decimal | OrcaU64 ): Promise { const _owner = new Owner(owner); const ownerAddress = _owner.publicKey; const tokenA = this.getTokenA(); const tokenB = this.getTokenB(); const maxTokenAIn_U64 = U64Utils.toTokenU64(maxTokenAIn, tokenA, "maxTokenAIn"); const maxTokenBIn_U64 = U64Utils.toTokenU64(maxTokenBIn, tokenB, "maxTokenBIn"); const minPoolTokenAmountOut_U64 = U64Utils.toPoolU64( minPoolTokenAmountOut, this.poolParams, "poolTokenAmount" ); // If tokenA is SOL, this will create a new wSOL account with maxTokenAIn_U64 // Otherwise, get tokenA's associated token account const { address: userTokenAPublicKey, ...resolveTokenAInstrucitons } = await resolveOrCreateAssociatedTokenAddress( this.connection, _owner, tokenA.mint, maxTokenAIn_U64 ); // If tokenB is SOL, this will create a new wSOL account with maxTokenBIn_U64 // Otherwise, get tokenB's associated token account const { address: userTokenBPublicKey, ...resolveTokenBInstrucitons } = await resolveOrCreateAssociatedTokenAddress( this.connection, _owner, tokenB.mint, maxTokenBIn_U64 ); // If the user lacks the pool token account, create it const { address: userPoolTokenPublicKey, ...resolvePoolTokenInstructions } = await resolveOrCreateAssociatedTokenAddress( this.connection, _owner, this.poolParams.poolTokenMint ); // Approve transfer of the tokens being deposited const { userTransferAuthority, ...transferTokenAInstruction } = createApprovalInstruction( ownerAddress, maxTokenAIn_U64, userTokenAPublicKey ); const { ...transferTokenBInstruction } = createApprovalInstruction( ownerAddress, maxTokenBIn_U64, userTokenBPublicKey, userTransferAuthority ); // Create the deposit instruction const depositInstruction = await createDepositInstruction( this.poolParams, userTransferAuthority.publicKey, userTokenAPublicKey, userTokenBPublicKey, userPoolTokenPublicKey, minPoolTokenAmountOut_U64, maxTokenAIn_U64, maxTokenBIn_U64, tokenA.addr, tokenB.addr, this.orcaTokenSwapId, _owner ); return await new TransactionBuilder(this.connection, ownerAddress, _owner) .addInstruction(resolveTokenAInstrucitons) .addInstruction(resolveTokenBInstrucitons) .addInstruction(resolvePoolTokenInstructions) .addInstruction(transferTokenAInstruction) .addInstruction(transferTokenBInstruction) .addInstruction(depositInstruction) .build(); } public async getWithdrawQuote( withdrawTokenAmount: Decimal | OrcaU64, withdrawTokenMint: PublicKey, slippage?: Decimal ): Promise { const slippageTolerance = slippage === undefined ? defaultSlippagePercentage : Percentage.fromDecimal(slippage); const lpSupply = await this.getLPSupply(); const { inputTokenCount: tokenAAmount, outputTokenCount: tokenBAmount } = await getTokenCount( this.connection, this.poolParams, this.getTokenA(), this.getTokenB() ); // withdrawTokenAmount needs represent amounts for one of the following: poolTokenAmount, tokenAAmount, or tokenBAmount // determine which token this amount represents, then calculate poolTokenIn_U64 let poolTokenIn_U64 = ZERO; if (withdrawTokenMint.equals(this.getPoolTokenMint())) { poolTokenIn_U64 = U64Utils.toPoolU64( withdrawTokenAmount, this.poolParams, "withdrawTokenAmount" ); } else if ( withdrawTokenMint.equals(this.getTokenA().mint) || withdrawTokenMint.equals(this.getTokenB().mint) ) { const token = withdrawTokenMint.equals(this.getTokenA().mint) ? this.getTokenA() : this.getTokenB(); const totalAmount = token.mint.equals(this.getTokenA().mint) ? tokenAAmount : tokenBAmount; const numerator = withdrawTokenAmount instanceof OrcaU64 ? withdrawTokenAmount.toDecimal() : withdrawTokenAmount; const denominator = DecimalUtil.fromU64(totalAmount, token.scale); const poolTokenIn = lpSupply.toDecimal().div(denominator).mul(numerator); poolTokenIn_U64 = U64Utils.toPoolU64(poolTokenIn, this.poolParams, "poolTokenIn"); } else { throw new Error( `Unable to get withdraw quote with an invalid withdrawTokenMint ${withdrawTokenMint}` ); } if (poolTokenIn_U64.eq(ZERO)) { return { maxPoolTokenAmountIn: OrcaU64.fromU64(ZERO, lpSupply.scale), minTokenAOut: OrcaU64.fromU64(ZERO, this.getTokenA().scale), minTokenBOut: OrcaU64.fromU64(ZERO, this.getTokenB().scale), }; } const minTokenAOut = new OrcaU64( poolTokenIn_U64 .mul(slippageTolerance.denominator) .mul(tokenAAmount) .div(lpSupply.toU64()) .div(slippageTolerance.numerator.add(slippageTolerance.denominator)), this.getTokenA().scale ); const minTokenBOut = new OrcaU64( poolTokenIn_U64 .mul(slippageTolerance.denominator) .mul(tokenBAmount) .div(lpSupply.toU64()) .div(slippageTolerance.numerator.add(slippageTolerance.denominator)), this.getTokenB().scale ); return { maxPoolTokenAmountIn: OrcaU64.fromU64(poolTokenIn_U64, lpSupply.scale), minTokenAOut, minTokenBOut, }; } public async withdraw( owner: Keypair | PublicKey, poolTokenAmountIn: Decimal | OrcaU64, minTokenAOut: Decimal | OrcaU64, minTokenBOut: Decimal | OrcaU64 ): Promise { const _owner = new Owner(owner); const ownerAddress = _owner.publicKey; const tokenA = this.getTokenA(); const tokenB = this.getTokenB(); const minTokenAOut_U64 = U64Utils.toTokenU64(minTokenAOut, tokenA, "minTokenAOut"); const minTokenBOut_U64 = U64Utils.toTokenU64(minTokenBOut, tokenB, "minTokenBOut"); const poolTokenAmountIn_U64 = U64Utils.toPoolU64( poolTokenAmountIn, this.poolParams, "poolTokenAmountIn" ); // Create a token account for tokenA, if necessary const { address: userTokenAPublicKey, ...resolveTokenAInstrucitons } = await resolveOrCreateAssociatedTokenAddress(this.connection, _owner, tokenA.mint); // Create a token account for tokenB, if necessary const { address: userTokenBPublicKey, ...resolveTokenBInstrucitons } = await resolveOrCreateAssociatedTokenAddress(this.connection, _owner, tokenB.mint); // Get user's poolToken token account const { address: userPoolTokenPublicKey, ...resolvePoolTokenInstructions } = await resolveOrCreateAssociatedTokenAddress( this.connection, _owner, this.poolParams.poolTokenMint ); // Approve transfer of pool token const { userTransferAuthority, ...transferPoolTokenInstruction } = createApprovalInstruction( ownerAddress, poolTokenAmountIn_U64, userPoolTokenPublicKey ); // Create the withdraw instruction const withdrawInstruction = await createWithdrawInstruction( this.poolParams, userTransferAuthority.publicKey, userTokenAPublicKey, userTokenBPublicKey, userPoolTokenPublicKey, poolTokenAmountIn_U64, minTokenAOut_U64, minTokenBOut_U64, tokenA.addr, tokenB.addr, this.orcaTokenSwapId, _owner ); return await new TransactionBuilder(this.connection, ownerAddress, _owner) .addInstruction(resolveTokenAInstrucitons) .addInstruction(resolveTokenBInstrucitons) .addInstruction(resolvePoolTokenInstructions) .addInstruction(transferPoolTokenInstruction) .addInstruction(withdrawInstruction) .build(); } } ================================================ FILE: src/model/orca/pool/pool-types.ts ================================================ import { PublicKey } from "@solana/web3.js"; import { OrcaPoolToken } from "../../.."; import { Percentage } from "../../../public"; /** * An Orca token-swap pool * @param address The pool account address * @param nonce The nonce used to generate the pool authority * @param authority The pool authority PDA address to sign instructions * @param poolTokenMint Mint address for the pool token * @param poolTokenDecimals Number of decimal places for the pool token * @param feeAccount Public address of the pool token fee account * @param tokenIds The ids of the tokens in this pool * @param tokens The id, token object of the tokens in this pool * @param curveType Trading curve type. 0 - ConstantProduct, 1 - ConstantPrice, 2 - Stable, 3 - Offset * @param feeStructure The % of fees collected by this pool * @param amp The amplification coefficient for a stable curve pool (defines how flat the AMM curve is when prices are similar) */ export type OrcaPoolParams = { address: PublicKey; nonce: number; authority: PublicKey; poolTokenMint: PublicKey; poolTokenDecimals: number; feeAccount: PublicKey; tokenIds: string[]; tokens: Record; curveType: CurveType; feeStructure: FeeStructure; amp?: number; }; export enum CurveType { ConstantProduct, ConstantPrice, Stable, Offset, } /** * @param traderFee Percentage of the fee that goes to the liquidity providers * @param ownerFee Percentage of the fee that goes to orca */ export type FeeStructure = { traderFee: Percentage; ownerFee: Percentage; }; ================================================ FILE: src/model/orca-factory.ts ================================================ import { Connection } from "@solana/web3.js"; import { OrcaPoolConfig, OrcaPool, OrcaFarmConfig, OrcaFarm, Network } from ".."; import { orcaPoolConfigs, orcaFarmConfigs } from "../constants"; import { orcaDevnetFarmConfigs, orcaDevnetPoolConfigs } from "../constants/devnet"; import { getDevnetFarm, getDevnetPool } from "../public/devnet"; import { OrcaFarmImpl } from "./orca/farm/orca-farm"; import { OrcaPoolImpl } from "./orca/pool/orca-pool"; export class OrcaFactory { getPool(connection: Connection, network: Network, config: OrcaPoolConfig): OrcaPool { if (network === Network.DEVNET) { const devnetConfig = getDevnetPool(config); return new OrcaPoolImpl(connection, network, orcaDevnetPoolConfigs[devnetConfig]); } return new OrcaPoolImpl(connection, network, orcaPoolConfigs[config]); } getFarm(connection: Connection, network: Network, config: OrcaFarmConfig): OrcaFarm { if (network === Network.DEVNET) { const devnetConfig = getDevnetFarm(config); return new OrcaFarmImpl(connection, orcaDevnetFarmConfigs[devnetConfig]); } return new OrcaFarmImpl(connection, orcaFarmConfigs[config]); } } ================================================ FILE: src/model/quote/constant-product-quote.ts ================================================ import { u64 } from "@solana/spl-token"; import Decimal from "decimal.js"; import { solToken } from "../../constants/tokens"; import { ZERO, ONE, DecimalUtil, U64Utils, OrcaU64, Quote } from "../../public"; import { QuotePoolParams } from "./quote-builder"; /** * ConstantProductPools * * Product price curve: * x = inputTokenCount * y = outputTokenCount * k = x * y */ function calculateFee(inputTradeAmount: u64, feeNumerator: u64, feeDenominator: u64): u64 { if (feeNumerator.eq(ZERO) || inputTradeAmount.eq(ZERO)) { return ZERO; } const fee = inputTradeAmount.mul(feeNumerator).div(feeDenominator); // minimum fee of one token return fee.eq(ZERO) ? ONE : fee; } function getInputAmountLessFees(inputTradeAmount: u64, params: QuotePoolParams): u64 { const fees = getLPFees(inputTradeAmount, params); return fees.gt(inputTradeAmount) ? new u64(0) : inputTradeAmount.sub(fees); } function getRate(inputTradeAmountU64: u64, params: QuotePoolParams): Decimal { if (inputTradeAmountU64.eq(ZERO)) { return new Decimal(0); } const expectedOutputAmountU64 = getExpectedOutputAmount(inputTradeAmountU64, params); const inputTradeAmount = DecimalUtil.fromU64(inputTradeAmountU64, params.inputToken.scale); const outputTradeAmount = DecimalUtil.fromU64(expectedOutputAmountU64, params.outputToken.scale); return outputTradeAmount.div(inputTradeAmount).toDecimalPlaces(params.outputToken.scale); } function getPriceImpact(inputTradeAmount: u64, params: QuotePoolParams): Decimal { if (inputTradeAmount.eq(ZERO) || params.outputTokenCount.eq(ZERO)) { return new Decimal(0); } const noSlippageOutputCountU64 = getExpectedOutputAmountWithNoSlippage(inputTradeAmount, params); const outputCountU64 = getExpectedOutputAmount(inputTradeAmount, params); if (noSlippageOutputCountU64.isZero()) { // The minimum fee of one token makes inputTradeLessFees zero when the input is minimal, // and the output is also zero. return new Decimal(0); } const noSlippageOutputCount = DecimalUtil.fromU64( noSlippageOutputCountU64, params.outputToken.scale ); const outputCount = DecimalUtil.fromU64(outputCountU64, params.outputToken.scale); const impact = noSlippageOutputCount.sub(outputCount).div(noSlippageOutputCount); return impact.mul(100).toDecimalPlaces(params.outputToken.scale); } function getLPFees(inputTradeAmount: u64, params: QuotePoolParams): u64 { const { feeStructure } = params; const tradingFee = calculateFee( inputTradeAmount, feeStructure.traderFee.numerator, feeStructure.traderFee.denominator ); const ownerFee = calculateFee( inputTradeAmount, feeStructure.ownerFee.numerator, feeStructure.ownerFee.denominator ); return new u64(tradingFee.add(ownerFee).toString()); } function getExpectedOutputAmount(inputTradeAmount: u64, params: QuotePoolParams): u64 { const inputTradeLessFees = getInputAmountLessFees(inputTradeAmount, params); return getOutputAmount(inputTradeLessFees, params); } function getExpectedOutputAmountWithNoSlippage( inputTradeAmount: u64, params: QuotePoolParams ): u64 { if (params.inputTokenCount.eq(ZERO)) { return params.outputTokenCount; } const inputTradeLessFees = getInputAmountLessFees(inputTradeAmount, params); return inputTradeLessFees.mul(params.outputTokenCount).div(params.inputTokenCount); } function getMinimumAmountOut(inputTradeAmount: u64, params: QuotePoolParams): u64 { const slippageTolerance = params.slippageTolerance; const expectedOutputAmountFees = getExpectedOutputAmount(inputTradeAmount, params); const result = expectedOutputAmountFees .mul(slippageTolerance.denominator.sub(slippageTolerance.numerator)) .div(slippageTolerance.denominator); return result; } // Note: This function matches the calculation done on SERUM and on Web UI. // Given k = currInputTokenCount * currOutputTokenCount and k = newInputTokenCount * newOutputTokenCount, // solve for newOutputTokenCount function getOutputAmount(inputTradeAmount: u64, params: QuotePoolParams): u64 { const [poolInputAmount, poolOutputAmount] = [params.inputTokenCount, params.outputTokenCount]; const invariant = poolInputAmount.mul(poolOutputAmount); const [newPoolOutputAmount] = U64Utils.ceilingDivision( invariant, poolInputAmount.add(inputTradeAmount) ); const outputAmount = poolOutputAmount.sub(newPoolOutputAmount); return new u64(outputAmount.toString()); } function getNetworkFees(params: QuotePoolParams) { let numSigs; if (params.inputToken === solToken || params.outputToken === solToken) { numSigs = 3; } else { numSigs = 2; } return params.lamportsPerSignature * numSigs; } export class ConstantProductPoolQuoteBuilder { buildQuote(params: QuotePoolParams, inputTradeAmount: u64): Quote { return { getRate: () => getRate(inputTradeAmount, params), getPriceImpact: () => getPriceImpact(inputTradeAmount, params), getLPFees: () => OrcaU64.fromU64(getLPFees(inputTradeAmount, params), params.inputToken.scale), getNetworkFees: () => OrcaU64.fromNumber(getNetworkFees(params)), getExpectedOutputAmount: () => OrcaU64.fromU64( getExpectedOutputAmount(inputTradeAmount, params), params.outputToken.scale ), getMinOutputAmount: () => OrcaU64.fromU64(getMinimumAmountOut(inputTradeAmount, params), params.outputToken.scale), }; } } ================================================ FILE: src/model/quote/quote-builder.ts ================================================ import { u64 } from "@solana/spl-token"; import { OrcaToken, Quote } from "../.."; import { PoolTokenCount, Percentage } from "../../public"; import { FeeStructure, CurveType } from "../orca/pool/pool-types"; import { ConstantProductPoolQuoteBuilder } from "./constant-product-quote"; import { StablePoolQuoteBuilder } from "./stable-quote"; export type QuotePoolParams = PoolTokenCount & { inputToken: OrcaToken; outputToken: OrcaToken; inputTokenCount: u64; outputTokenCount: u64; feeStructure: FeeStructure; slippageTolerance: Percentage; lamportsPerSignature: number; amp?: u64; }; export interface QuoteBuilder { buildQuote(pool: QuotePoolParams, inputAmount: u64): Quote; } export class QuoteBuilderFactory { static getBuilder(curveType: CurveType): QuoteBuilder | undefined { switch (curveType) { case CurveType.ConstantProduct: return new ConstantProductPoolQuoteBuilder(); case CurveType.Stable: return new StablePoolQuoteBuilder(); default: return undefined; } } } ================================================ FILE: src/model/quote/stable-quote.ts ================================================ import { u64 } from "@solana/spl-token"; import Decimal from "decimal.js"; import { computeBaseOutputAmount, computeOutputAmount } from "@orca-so/stablecurve"; import { QuotePoolParams } from "./quote-builder"; import { DecimalUtil, OrcaU64, Quote, ZERO, ONE } from "../../public"; import { solToken } from "../../constants/tokens"; function calculateFee(inputTradeAmount: u64, feeNumerator: u64, feeDenominator: u64): u64 { if (feeNumerator.eq(ZERO) || inputTradeAmount.eq(ZERO)) { return ZERO; } const fee = inputTradeAmount.mul(feeNumerator).div(feeDenominator); // minimum fee of one token return fee.eq(ZERO) ? ONE : fee; } function getInputAmountLessFees(inputTradeAmount: u64, params: QuotePoolParams): u64 { const fees = getLPFees(inputTradeAmount, params); return fees.gt(inputTradeAmount) ? new u64(0) : inputTradeAmount.sub(fees); } function getOutputAmountWithNoSlippage( inputTradeAmountLessFees: u64, params: QuotePoolParams ): u64 { const [poolInputAmount, poolOutputAmount, amp] = [ params.inputTokenCount, params.outputTokenCount, params.amp!, ]; return computeBaseOutputAmount(inputTradeAmountLessFees, poolInputAmount, poolOutputAmount, amp); } function getOutputAmount(inputTradeAmountLessFees: u64, params: QuotePoolParams): u64 { const [poolInputAmount, poolOutputAmount, amp] = [ params.inputTokenCount, params.outputTokenCount, params.amp!, ]; return computeOutputAmount(inputTradeAmountLessFees, poolInputAmount, poolOutputAmount, amp); } function getExpectedOutputAmountWithNoSlippage( inputTradeAmount: u64, params: QuotePoolParams ): u64 { const inputTradeAmountLessFees = getInputAmountLessFees(inputTradeAmount, params); return getOutputAmountWithNoSlippage(inputTradeAmountLessFees, params); } function getExpectedOutputAmount(inputTradeAmount: u64, params: QuotePoolParams): u64 { const inputTradeAmountLessFees = getInputAmountLessFees(inputTradeAmount, params); return getOutputAmount(inputTradeAmountLessFees, params); } function getRate(inputTradeAmountU64: u64, params: QuotePoolParams): Decimal { if (inputTradeAmountU64.eq(ZERO)) { return new Decimal(0); } const expectedOutputAmountU64 = getExpectedOutputAmount(inputTradeAmountU64, params); const inputTradeAmount = DecimalUtil.fromU64(inputTradeAmountU64, params.inputToken.scale); const outputTradeAmount = DecimalUtil.fromU64(expectedOutputAmountU64, params.outputToken.scale); return outputTradeAmount.div(inputTradeAmount).toDecimalPlaces(params.outputToken.scale); } function getPriceImpact(inputTradeAmount: u64, params: QuotePoolParams): Decimal { if ( inputTradeAmount.eq(ZERO) || params.inputTokenCount.eq(ZERO) || params.outputTokenCount.eq(ZERO) ) { return new Decimal(0); } const noSlippageOutputCountU64 = getExpectedOutputAmountWithNoSlippage(inputTradeAmount, params); const outputCountU64 = getExpectedOutputAmount(inputTradeAmount, params); if (noSlippageOutputCountU64.isZero()) { // The minimum fee of one token makes inputTradeLessFees zero when the input is minimal, // and the output is also zero. return new Decimal(0); } const noSlippageOutputCount = DecimalUtil.fromU64( noSlippageOutputCountU64, params.outputToken.scale ); const outputCount = DecimalUtil.fromU64(outputCountU64, params.outputToken.scale); const impact = noSlippageOutputCount.sub(outputCount).div(noSlippageOutputCount); return impact.mul(100).toDecimalPlaces(params.outputToken.scale); } function getLPFees(inputTradeAmount: u64, params: QuotePoolParams): u64 { const { feeStructure } = params; const tradingFee = calculateFee( inputTradeAmount, feeStructure.traderFee.numerator, feeStructure.traderFee.denominator ); const ownerFee = calculateFee( inputTradeAmount, feeStructure.ownerFee.numerator, feeStructure.ownerFee.denominator ); return new u64(tradingFee.add(ownerFee).toString()); } function getMinimumAmountOut(inputTradeAmount: u64, params: QuotePoolParams): u64 { const slippageTolerance = params.slippageTolerance; const expectedOutputAmount = getExpectedOutputAmount(inputTradeAmount, params); return expectedOutputAmount .mul(slippageTolerance.denominator.sub(slippageTolerance.numerator)) .div(slippageTolerance.denominator); } function getNetworkFees(params: QuotePoolParams): number { let numSigs; if (params.inputToken === solToken || params.outputToken === solToken) { numSigs = 3; } else { numSigs = 2; } return params.lamportsPerSignature * numSigs; } export class StablePoolQuoteBuilder { buildQuote(params: QuotePoolParams, inputTradeAmount: u64): Quote { if (!params.amp) { throw new Error("amp param required for stable pool"); } return { getRate: () => getRate(inputTradeAmount, params), getPriceImpact: () => getPriceImpact(inputTradeAmount, params), getLPFees: () => OrcaU64.fromU64(getLPFees(inputTradeAmount, params), params.inputToken.scale), getNetworkFees: () => OrcaU64.fromNumber(getNetworkFees(params)), getExpectedOutputAmount: () => OrcaU64.fromU64( getExpectedOutputAmount(inputTradeAmount, params), params.outputToken.scale ), getMinOutputAmount: () => OrcaU64.fromU64(getMinimumAmountOut(inputTradeAmount, params), params.outputToken.scale), }; } } ================================================ FILE: src/public/devnet/farms/config.ts ================================================ /** * The following content is auto-generated. */ /** * A list of supported Orca farms in this SDK. */ export enum OrcaFarmConfig { SOL_USDC_AQ = "4GpUivZ2jvZqQ3vJRsoq5PwnYv6gdV9fJ9BzHT2JcRr7", SOL_USDT_AQ = "2E4Mp6y2gFRteXiANnwzAJEhHwD3NX1wru3XvxJpGBq2", USDC_USDT_AQ = "EBor1PR5XNGHjRVB6JDJuKVCQbvdr1CVZTaX1hTAdvQv", ETH_SOL_AQ = "8sFnpd7mM1AWxP1LXX2FWbbkaVtAopBPmPNZ9y6172WL", ETH_USDC_AQ = "9pRnvg7ihSJDLi6DGf3PLwr6xRRRrBPXsHYEgGL5hzgA", ORCA_SOL_AQ = "CmDdQhusZWyi9fue27VSktYgkHefm3JXNdzc9kCpyvYi", ORCA_USDC_AQ = "2ZEEntzoUN7XuMs88ukLGv5HRR1byL7wFWChryF5ZHri", SOL_USDC_DD = "AtJF9fbQ1pbz76NYo2jtKjHuzzyaFToHLCizYk6UoHHL", ETH_SOL_DD = "5NH9rNaoLKbPPP5zwCJTaMPkFACtfJA8wEmqWrXzgCMa", ETH_USDC_DD = "EeqPcczEZH2cjYBnQyGXBQx1DGs7KG1pobwdPKcwALhD", } ================================================ FILE: src/public/devnet/index.ts ================================================ export * from "./utils"; ================================================ FILE: src/public/devnet/pools/config.ts ================================================ /** * The following content is auto-generated. */ /** * A list of supported Orca pools in this SDK. */ export enum OrcaPoolConfig { SOL_USDC = "4GpUivZ2jvZqQ3vJRsoq5PwnYv6gdV9fJ9BzHT2JcRr7", SOL_USDT = "2E4Mp6y2gFRteXiANnwzAJEhHwD3NX1wru3XvxJpGBq2", USDC_USDT = "EBor1PR5XNGHjRVB6JDJuKVCQbvdr1CVZTaX1hTAdvQv", ETH_SOL = "8sFnpd7mM1AWxP1LXX2FWbbkaVtAopBPmPNZ9y6172WL", ETH_USDC = "9pRnvg7ihSJDLi6DGf3PLwr6xRRRrBPXsHYEgGL5hzgA", ORCA_SOL = "CmDdQhusZWyi9fue27VSktYgkHefm3JXNdzc9kCpyvYi", ORCA_USDC = "2ZEEntzoUN7XuMs88ukLGv5HRR1byL7wFWChryF5ZHri", } ================================================ FILE: src/public/devnet/utils.ts ================================================ import { OrcaPoolConfig, OrcaFarmConfig } from ".."; import { OrcaFarmConfig as OrcaDevnetFarmConfig } from "./farms/config"; import { OrcaPoolConfig as OrcaDevnetPoolConfig } from "./pools/config"; export function getDevnetPool(config: OrcaPoolConfig): OrcaDevnetPoolConfig { const entry = Object.entries(OrcaPoolConfig).find((arr) => arr[1] === config); if (!entry) { throw new Error("Invalid OrcaPoolConfig"); } const key = entry[0]; if (!isOrcaDevnetPoolConfig(key)) { throw new Error(`${key} does not exist in devnet`); } return OrcaDevnetPoolConfig[key]; } export function getDevnetFarm(config: OrcaFarmConfig): OrcaDevnetFarmConfig { const entry = Object.entries(OrcaFarmConfig).find((arr) => arr[1] === config); if (!entry) { throw new Error("Invalid OrcaFarmConfig"); } const key = entry[0]; if (!isOrcaDevnetFarmConfig(key)) { throw new Error(`${key} does not exist in devnet`); } return OrcaDevnetFarmConfig[key]; } /*** Type guards ***/ function isOrcaDevnetPoolConfig(key: string): key is keyof typeof OrcaDevnetPoolConfig { return OrcaDevnetPoolConfig[key as keyof typeof OrcaDevnetPoolConfig] !== undefined; } function isOrcaDevnetFarmConfig(key: string): key is keyof typeof OrcaDevnetFarmConfig { return OrcaDevnetFarmConfig[key as keyof typeof OrcaDevnetFarmConfig] !== undefined; } ================================================ FILE: src/public/farms/config.ts ================================================ /** * The following content is auto-generated. */ /** * A list of supported Orca farms in this SDK. */ export enum OrcaFarmConfig { SOL_USDC_AQ = "APDFRM3HMr8CAGXwKHiu2f5ePSpaiEJhaURwhsRrUUt9", SOL_USDT_AQ = "FZthQCuYHhcfiDma7QrX7buDHwrZEd7vL8SjS6LQa3Tx", ETH_SOL_AQ = "71FymgN2ZUf7VvVTLE8jYEnjP3jSK1Frp2XT1nHs8Hob", ETH_USDC_AQ = "3e1W6Aqcbuk2DfHUwRiRcyzpyYRRjg6yhZZcyEARydUX", RAY_SOL_AQ = "5kimD5W6yJpHRHCyPtnEyDsQRdiiJKivu5AqN3si82Jc", ROPE_SOL_AQ = "ADrvfPBsRcJfGsN6Bs385zYddH52nuM5FA8UaAkX9o2V", STEP_SOL_AQ = "8nTzqDXHriG2CXKbybeuEh1EqDQMtrbYMFWcP7AkiDaP", SRM_SOL_AQ = "9tf8rBSEQYG7AqL896fN2nZi1iYPqpWaLEdpbeQaC1Vy", FTT_SOL_AQ = "EsYaDKJCmcJtJHFuJYwQZwqohvVMCrFzcg8yo3i328No", COPE_SOL_AQ = "CzieDbGRdN1QGaGDNpSqzEA18bi881ccvkkGZi51pe1k", OXY_SOL_AQ = "7tYCdLN84EnTMkxM7HNamWJx7F4xgKe9KiiWvLyWjbgT", BTC_SOL_AQ = "Acxs19v6eUMTEfdvkvWkRB4bwFCHm3XV9jABCy7c1mXe", MER_SOL_AQ = "HiwRobjfHZ4zsPtqCC4oBS24pSmy4t8GGkXRbQj4yU6L", FIDA_SOL_AQ = "EYsNdtyu4gGTaGz8N5m5iQ3G1N6rDyMbR72B3CqbWW4W", MAPS_SOL_AQ = "99pfC8fWymXgbq3CvrExhx3UxQDC1fMWEWLbNT83F45e", USDC_USDT_AQ = "H2uzgruPvonVpCRhwwdukcpXK8TG17swFNzYFr2rtPxy", ORCA_SOL_AQ = "2uVjAuRXavpM6h1scGQaxqb6HVaNRn6T2X7HHXTabz25", ORCA_USDC_AQ = "n8Mpu28RjeYD7oUX3LG1tPxzhRZh3YYLRSHcHRdS3Zx", KIN_SOL_AQ = "HEvnD66WcBfTajS9adUYnGRBMDehFtLySiFHSD6kEBWs", SAMO_SOL_AQ = "D6N9j8F2DhtzDtrdpT74y3u2YmYAzcggiLc3nTjqux9M", LIQ_USDC_AQ = "3PD9SZFwXKkXr4akLf4ofo37ZUMycwML89R2P3qxcbZG", SNY_USDC_AQ = "AZpo4BJHHRetF96v6SGinFZBMXM4yWMo4RA8C4PriDLk", mSOL_USDC_AQ = "8PSfyiTVwPb6Rr2iZ8F3kNpbg65BCfJM9v8LfB916r44", SLRS_USDC_AQ = "AtB4nUmdyQfuWWJ9xAHw9xyVnJFfSjSuVWkiYan8y86w", PORT_USDC_AQ = "F8gPSpwVHj8FdAJAYULDuZBxFEJut87hUbARYYx3471w", SBR_USDC_AQ = "CS7fA5n4c2D82dUoHrYzS3gAqgqaoVSfgsr18kitp2xo", scnSOL_USDC_AQ = "Dkr8B675PGnNwEr9vTKXznjjHke5454EQdz3iaSbparB", pSOL_USDC_AQ = "C2YzN6MymD5HM2kPaH7bzcbqciyjfmpqyVaR3KA5V6z1", mSOL_SOL_AQ = "29cdoMgu6MS2VXpcMo1sqRdWEzdUR9tjvoh8fcK8Z87R", ORCA_PAI_AQ = "C7TH2jEJJaxVwwuvkbcDGfHUiZvEkkeYjyAcdTMi5ujb", ORCA_mSOL_AQ = "CVapmQn7HaU1yMDW3q6oUV4hx6XoYv54T4zfGXkuJqkA", scnSOL_SOL_AQ = "APNpzQvR91v1THbsAyG3HHrUEwvexWYeNCFLQuVnxgMc", ATLAS_USDC_AQ = "FZ8x1LCRSPDeHBDoAc3Gc6Y7ETCynuHEr5q5YWV7uRCJ", POLIS_USDC_AQ = "GteBdo9sqE7T41G8AJsaG9WHW48uXBwsLLznmu2TBdgy", BOP_USDC_AQ = "2gXDJZ7XAtQEtf4PRSQZKoq1WMuu1H44tQanbMA3YVpu", SAMO_USDC_AQ = "6VK1ksrmYGMBWUUZfygGF8tHRGpNxQEWv8pfvzQHdyyc", NINJA_SOL_AQ = "4X1oYoFWYtLebk51zuh889r1WFLe8Z9qWApj87hQMfML", SLIM_USDC_AQ = "BVWwyiHVHZQMPHsiW7dZH7bnBVKmbxdeEjWqVRciHCyo", wHAPI_USDC_AQ = "ELfBngAgvLEHVBuJQhhE7AW6eqLX7id2sfrBngVNVAUW", COPE_USDC_AQ = "HsauTv9s52Zv12eaDuSp6y7BEm4e4BHEyAsbdjyyWzPK", SUNNY_USDC_AQ = "GHuoeq9UnFBsBhMwH43eL3RWX5XVXbSRYJymmyMYpT7n", GRAPE_USDC_AQ = "EorFh8siFyLF1QTZ7cCXQaPGqyo7eb4SAgKtRH8Jcxjd", ABR_USDC_AQ = "GMzPbaCuQmeMUm1opH3oSCgKUjVgJUW14myq99RVPGX5", KURO_USDC_AQ = "DRknxb4ZFxXUTG6UJ5HupNHG1SmvBSCPzsZ1o9gAhyBi", MEDIA_USDC_AQ = "2toFgkQDoPrTJYGDEVoCasPXuL9uQnjvXJaDwa9LHyTx", TULIP_USDC_AQ = "4SBx8GXu8HhcVHWydQv1vsDdZs3G93XSL9CtMBny6hS5", MNGO_USDC_AQ = "H9yC7jDng974WwcU4kTGs7BKf7nBNswpdsP5bzbdXjib", stSOL_wstETH_AQ = "Eswigpwm3xsipkTqahGi2PEJsJcULQBwZgxhQpr6yBEa", SYP_USDC_AQ = "qJxKN9BhxbYvRNbjfK2uAVWboto6sonj8XC1ZEW5XTB", stSOL_wLDO_AQ = "74B9aMS7SA832xKngt5VLKmWAP3pa3qkUzWncTmQSsGF", whETH_SOL_AQ = "7aYnrdmdCRodDy2Czn6keUquUhjF1jPEmfwZPh488z8U", whETH_USDC_AQ = "7NPtjjAP7vhp4t5NCLyY4DY5rurvyc8cgZ2a2rYabRia", MNDE_mSOL_AQ = "5PHS5w6hQwFNnLz1jJFe7TVTxSQ98cDYC3akmiAoFMXs", WAG_USDC_AQ = "Df6XNHMF3uRVZnz7LCEGiZVax6rXgz76owtVkBHEjSb6", mSOL_USDT_AQ = "9cMWe4UYRPGAUUsTkjShJWVM7bk8DUBgxtwwH8asFJoV", mSOL_whETH_AQ = "5qoTq3qC4U7vFxo3iCzbXcaD1UEmDeCD63Dsuoct71oV", BTC_mSOL_AQ = "8nKJ4z9FSw6wrVZKASqBiS9DS1CiNsRnqwCCKVQjqdkB", IVN_SOL_AQ = "DfgCnzaiTXfPkAH1C1Z441b5MzjjTCEh134ioxqRZxYf", LARIX_USDC_AQ = "8sfThep3io4gvcGeuoAg1Rs8GDwKJjtcdAFHqQSSNAVE", PRT_USDC_AQ = "6jCERp5hKj37PCXP3VTjCDJeoPuSpnMDMz5A6jWQv3yS", JET_USDC_AQ = "GBijunwxa4Ni3JmYC6q6zgaVhSUJU6hVX5qTyJDRpNTc", stSOL_USDC_AQ = "GtQ1NT7R5aaTiST7K6ZWdMhwDdFxsSFvVFhBo8vyHGAq", wstETH_USDC_AQ = "5a6Y1ephcbKSoyLMQyD1JWbtqawCy8p2FtRL9v3zhaG5", AURY_USDC_AQ = "6mJqqT5TMgveDvxzBt3hrjGkPV5VAj7tacxFCT3GebXh", AVAX_USDC_AQ = "Hmfrtmo93DpSDmVNLQKcBS5D1ia5JatiRSok9ososubz", FTT_USDC_AQ = "FwCombynV2fTVizxPCNA2oZKoWXLZgdJThjE4Xv9sjxc", RAY_USDC_AQ = "4cXw2MYj94TFBXLL73fEpMCr8DPrW68JvrV8mzWgktbD", SLND_USDC_AQ = "F59gkD7NnsdJbFKrRZsiBC8PAooN4c56T8QmahfW1iXN", GOFX_USDC_AQ = "7vnps4VE5RTGAr5fmPZu7fSrk2VnM4Up838grZfqmxqE", WOOF_USDC_AQ = "9EjcYfHcG8f1mccpHyaAwpoxaUPiheC6KgLQjyD9aTb6", SDOGE_USDC_AQ = "CHTKUJGYRtBDqnxCFjxe5KEkZgxV98udbhuYYyzGxup5", CATO_USDC_AQ = "55r9txzQtmjTykmTXmBYZCVMg5z9squB8b5cSw2AhxA4", OOGI_USDC_AQ = "DSiHyHDn96bUQSZtizyCRLcQzrwohZeMpVu8rYJN1HzG", SONAR_USDC_AQ = "5MvQHx8eftU39JTucFsT315JFnQASuDQg3FqxTw7xcvN", APT_USDC_AQ = "HNrYngS1eoqkjWro9D3Y5Z9sWBDzPNK2tX4rfV2Up177", DFL_USDC_AQ = "AWrtTWG4Zgxw8D92bb3L3sQtGLD3zDztMPWsXSph8iBP", DFL_SOL_AQ = "9Y1vPaAsMz8X65DebMMnmBjbMo8i4jh4mcgiggZUUS3M", FRKT_USDC_AQ = "FnDxJPNk7pPmGHUbR4XUHmHevrkXHdna5D3sQKcAtjBL", TTT_USDC_AQ = "FGgP1npQTsC5Q4xBmQtNYSh51NKqNwdxBZy8JCo3igcu", UPS_USDC_AQ = "E1U63VXhNiWoUkVvjrfLDdV1oJrwE6zLde3bohr6jCqz", FANT_USDC_AQ = "GjG7JjTQfQpDxw4hWx4etP9oTaYCuCbPjsU8WaUT3xHB", BLOCK_USDC_AQ = "D8WjqtwC9CzBrQKfSf2ccCHFQuPYwyLv5KAy8WjT5vnf", RUN_USDC_AQ = "34Ppq6R8NfYBwWwPY4cBK4Afyb8hHaASQFukCzH6cV4n", UXP_USDC_AQ = "HjR8JgqNKQVMvdryqJw5RJ4PCE9WGk8sgbEF7S9S3obv", BTC_USDC_AQ = "J3kvcay3N16FBdawgnqoJ9v9p6XCvyCLE2Z9F5RLvGkj", MNDE_USDC_AQ = "12Uj74zgUUoBe4yeackwQ4qYtFMr9fk1xL6q5Nha6t2N", CHICKS_USDC_AQ = "71CBZeJ4tw38L9pSPoCz4fRsuWE64Fipyzotte7haoCS", ONESOL_USDC_AQ = "6MF5CHWAj5mS7FhpxiKz37CzR2eYTu236XpBKKMXCrGg", WMP_USDC_AQ = "HDgxKmiA8Pv82fNguhVeMkZqQkos2YksFPoP1KttWxX8", UNQ_USDC_AQ = "2VuGzaMrDnDyZfYvDwSXk38s7M2wpud7LDY3dGA1J9sy", BASIS_USDC_AQ = "GoaAiajubRgeCFEz9L6mLnSmT2QFegoJDH5tpLfivpj", GST_USDC_AQ = "E6FUnQHGHJVJg7oExVr5Moeaj1QpdpZQF5odYjHXWPZb", MEAN_USDC_AQ = "F5BTnwuMA6rxftTdbZ33VWKr2wrr6DuQHnd4guKmPSYQ", AART_USDC_AQ = "HCtyJzFUtYecXrA52s4Y9atq4J1fhT3cYsTX17XVSFag", SHDW_USDC_AQ = "DJqqvzSuPaWThfzwMjXx7H2ZmHDdwxza6NtFudtuXcpc", SHDW_SOL_AQ = "2ws7g3LBPdctfKn42Di9qxzQtUJ8ZL1aEAX2rGEQMNqh", SCY_USDC_AQ = "99ZHUQsgxL7K6PHrGNi1gSwawwPr7UA5fbWrYoHQ6qhX", SLC_USDC_AQ = "E5kSBqTDxFLbLNQaVVtPtnhEYVLMCK2fVSEKoMKL98qR", wUST_SOL_AQ = "6c13xsmyk7UaHUWZ2rm1MM3ZdrQRSBkQ9waaG25ridVs", wUST_USDC_AQ = "J1KfRtP5y2warpD7LdJhfBLPKoWwSqYuovdArSv1mpQ7", mSOL_wUST_AQ = "68YVjgPnTUPcBqZyghqvD2WPNsrLKsjYTmBKJzHRr4qd", wLUNA_wUST_AQ = "8Mh7drLbt3jFJYwp948XyvQscGLaLkChNcaH5wwaAoWA", stSOL_wUST_AQ = "HTZd53fYwYQRyAjiaPsZy9Gf41gobFdqkF4oKe3XLi95", JSOL_USDC_AQ = "AzEoVuNJyo9ByoLRZ5t6vav2Zg24vULNVJM41PgCKUqR", daoSOL_USDC_AQ = "CCyDxjdW3G7hPTthTMPTZ4bnhFF19XG6rx2fNiKeRQww", ORCA_USDT_AQ = "Gx4PoxenyQwhGGnKagAT35iVg4im1iKhJxDWqVhgu6tk", ORCA_whETH_AQ = "GsfyYHkSgC3Ta6aWR9MjB2sxoBrkGGeR2tAwXbpphf3", GENE_USDC_AQ = "7cuu94swKL5PtFQohKMAzyd1mjj65rgMW3GzLY31HCnK", CMFI_USDC_AQ = "85krvT9DxdYgoFLQDHTAGdvtNuLdAsc4xE5FkVLpN2aR", CELO_USDC_AQ = "HVLyX8mD8YvKgZJ4oB6rXJiCYMLpHKwB6iCiCjE1XwdT", FTM_USDC_AQ = "Gpzd833qSmv3kXpQmxEaqkrZTXZaRjhNAoqhf61qAhTG", BTC_ORCA_AQ = "DFpLFcQZqDKykyDePgip4r6MExVmBKWqTa12ezq6qxUY", HBB_USDC_AQ = "cL5WhffCYFRLM4We8VS2W684kM4pHyuvEDwp8Ddw48k", HBB_SOL_AQ = "FkKzu2HeMJZf4oHwoYPxLGVy3net5Jq8HAfnA5VqETgk", SB_USDC_AQ = "2Reqt4Sw9xNY8BoJ3EZLpFu5yVgNxFrbw8M3KiJpPn6o", stSOL_USDT_AQ = "4ni1nho89cDKAQ9ddbNQA9ieLYpzvJVmJpuogu5Ct5ur", SEEDED_USDC_AQ = "H7gyTmNCDXkD8MGMqnxqoD8ANszjcju4tjT6ERZ5dakf", AUDIO_USDC_AQ = "3hksYA17VxgiKSeihjnZkBbjc2CTbEBfvDCYgQhojTo5", MMA_USDC_AQ = "AaZRnJAnDyJyPD9uPJpJ8bzBGDCEi6jtBpUf92xErWPp", ONESOL_SOL_AQ = "9wPhuYapychVDSxmXqCZxy2Ka8Lmav4SHM72si8bfraV", PUFF_SOL_AQ = "Eho8h1BcoG5QWU7X9FzJafw5ErKUXtR2LobAJJZfWff4", SAO_USDC_AQ = "4iyU77yZbg8iD344vbwruAuDAf9i1EVV3FhZJDnWStBE", sRLYv2_SOL_AQ = "3dXdXg5HPyZ73GFC9LkSn3thdJUGeXWB8iSTHs5UcqiH", ZBC_USDC_AQ = "2LYgm6nGXmSSjfoEriPuYeGoNiWNxUs7n3rnTbDWN5c7", GMT_USDC_AQ = "CFxQF5kNAtbbDj298Xr47Sf4mkSyuzWpRH97hrdQ6kxi", NOVA_USDC_AQ = "DdAFNvDxtEHCgKj3JAM64zCKfMWhs4J9wEmRrjUAFiME", HBB_USDH_AQ = "7n2YW9qLkhGFArdZPLoF4hYPE2zw7xCACkVPXrUWnLuo", TAKI_sRLYv2_AQ = "6atKbS2Xz5vu7cqWBNk8KYkuakRzckZ9nvtUKf2k8Sc3", ZIG_USDC_AQ = "5vhh9ZnD9vnahRhFLP1EUEyYRSzvJwgw9U2xygsSJSrp", sRLY_SOL_AQ = "HfRgvhgscGX5GaP3rUrZAhh7gS4aJ2UQ7rNVX976rG6P", TAKI_sRLY_AQ = "3xaK5aWWLNRB73xUVX3cusLhDp65mTvP4fwW5Jwxakgs", stSOL_SOL_AQ = "4jjQSgFx33DUb1a7pgPsi3FbtZXDQ94b6QywjNK3NtZw", BTC_stSOL_AQ = "HYp9v7cY4wAxSsa6ijztQQ3GQ8iTttuG5vu8JNBDHoNh", stSOL_whETH_AQ = "FWurFWADrgmhb6Y44LEaCMnEHS2Tu3QGqd9oBcZtr8gT", LIQ_USDC_DD = "57vGdcMZLnbNr4TZ4hgrpGJZGR9vTPhu8L9bNKDrqxKT", STEP_SOL_DD = "GwrBA1F8rGummDCDd8NY9Eu1cLNuJqbT8WaGxgWpFwGL", SLRS_USDC_DD = "66xCxkffQZKBZLiHV3PDcfR8ANJTfnDRxPCaBdv4wxB7", PORT_USDC_DD = "4CGxvZdwiZgVMLXiTdJHTkJRUTpTSJCtmtCRbSkAxerE", COPE_USDC_DD = "9SDpBrfqNxjXcCzpKWM6yUKdfky975VJBD6xcu5cKf5s", BOP_USDC_DD = "A7vvbqENJj8kED3ABjphe8TvwpasQYtoWGKpjpLArMxa", SAMO_USDC_DD = "9voVuTq1S9bFZkF2Jo44HoVG63w2xDRT8eBzB23YbQud", wHAPI_USDC_DD = "Bfoi3RNnfdP5VeRGqvTA8MRN9ePGJoZgeKfe8WeBHUxE", SLIM_USDC_DD = "3K7aZhtwWJ2JS6GnbbgeDVnxd1q2hwhqasmgRsAMZ4yC", NINJA_SOL_DD = "7YyhptkxY81HPzFVfyCzA5UXxWdsNRD41ofLva3TuSpd", ATLAS_USDC_DD = "HFmY1ggCsCky1zJ1sfdkNR4zb3u5n38YNRdf4vsGu17t", POLIS_USDC_DD = "63JUKLnCAuNMPSPioEgbjjzp9Qk8qSEEM8eZqEtPqfLU", ABR_USDC_DD = "5uR5STASUmoGVHzqMeut98t26TfVkQqWU9f9dsv3NfJ6", KURO_USDC_DD = "6PGoaQdL9e463hdaFxHXsuPcjCHRK32CQ9PFKxvM7XY2", mSOL_USDC_DD = "5r3vDsNTGXXb9cGQfqyNuYD2bjhRPymGJBfDmKosR9Ev", ORCA_mSOL_DD = "3Duk5b6fLztPmS4ryV48FM1Q9WXUSMwz9jehAT4UtqpE", mSOL_SOL_DD = "3RTGL7gPF4V1ns1AeGFApT7cBEGVDfmJ77DqQi9AC6uG", stSOL_wstETH_DD = "3kT3oYuS1rCfhmqfgy6EKcbZdaJimaVEjoy25QiuEaoj", SYP_USDC_DD = "Ds4VGZhZzS2PMFzhzKeC3mwcQjdiCG21R76fTVbsSJyJ", MNDE_mSOL_DD = "2wPsMuzhEsC6GhV3qtFpmJF6atEgLGbnmQ8U43Y6fPxZ", mSOL_USDT_DD = "Afvh7TWfcT1E9eEEWJk17fPjnqk36hreTJJK5g3s4fm8", mSOL_whETH_DD = "58nifjPjF3CutGz2xMxvAMk7R9YgbVEc8Cstj4rCcs8j", BTC_mSOL_DD = "DzpLz78wuwyFsQToin8iDv6YK6aBEymRqQq82swiFh7r", IVN_SOL_DD = "HqajzzbGMST3yCCVBJuXvNVsWkY2DXqiBz9cTRmmyBMy", LARIX_USDC_DD = "DNAGfa7tK8csprRQmiDUwDaFfhw6ueHhVFHTCgTJ8HGs", GOFX_USDC_DD = "B95rdqSY4dqPwmt295XwBZZqZJYLmqDNXU6NvBpT4ep4", WOOF_USDC_DD = "4HaQXDz9gdLgKUjvNVtnLyNZoWNYKjh3XxH1TpLgiwmi", SDOGE_USDC_DD = "4kXYyZAMBdvgDaBKUGvRWJnHw9af7sCUPvpQ68PEdP8b", CATO_USDC_DD = "BHtZnTBMeY4EBEW5egGnuK5bdW12v6Dod6wFav79AyYx", OOGI_USDC_DD = "FiwSk36yi1DNWcuQUeNipAc1VKxa9Wv9AR2xFvyKUxAE", SONAR_USDC_DD = "GWmwwMGYBG4NqYdnsYrudzBnbgDC49MkBxdzhfLA9kVY", UPS_USDC_DD = "9fuv3emLQXECrTWqm2HaKT3wQhmvmgqmReZSMcu8PfpH", FANT_USDC_DD = "C2EcthTMaC5eATXVaXg5ctvMfUYYgFyNibybHes5D3S6", stSOL_USDC_DD = "3u2dNfGuU6C3vmSg5EvLPUpX57b3niqhWBV5Gc3WDEf5", WMP_USDC_DD = "Ce3VXSQGFEHqrQSEzcVb2Ro88Mcn56cYBUAXFx5tL9bo", CHICKS_USDC_DD = "GTcxXu3yw7yotq2UtAMvpEbx84ozJyrBwy77Cmem7m4X", UNQ_USDC_DD = "CsGTrgJ6oLx9UQow9aLjuAacjXTY53zT8B2FnAbfVZAS", MEAN_USDC_DD = "3h2VBX8533NB8eEH8rPXMdayodFDbgTHpbav6JqLZAQq", WAG_USDC_DD = "8Wu5sJpERA1J5iWcT8aMpt9cTAfKDLPbLpGjNsJoPgLc", SHDW_USDC_DD = "7WWHfufv8vuBC1x7GXA3pu7kgNhEQkXoq3CtbaQihAJ9", SHDW_SOL_DD = "BDStVBt4NS5bfda25ubK51kVRioV4yjKKCPbe96jeEms", AART_USDC_DD = "Bg7pZq7KdsQsnCQBeNpa4XVnrWfjUJNu3ViHoNB7YUZU", BASIS_USDC_DD = "4yx2aHMa7N4m1uUaBRy9QPtpstw3HFPtvcCPJQaGFHKL", SLC_USDC_DD = "X8GnAvxq942xXjNzqYPFQQ9JstJQNEA81uPeNoQpgrN", wUST_SOL_DD = "F49Cm3srGucQCBanA2xL7nSKHfH1QZd9vLdFtkg4LKnq", wUST_USDC_DD = "2mhVUMsG7eb3XhHjAbKpRZgWNyGZNCiWU7dRxauzZaGL", mSOL_wUST_DD = "6wqME6zPQzGDLugpnwZnVBKBbATC5nTaEa781Vj98yvM", wLUNA_wUST_DD = "3ZGKT28NXAqb2YtUAMvKixQvHNHT31Q5mK8AC2iBMs29", stSOL_wUST_DD = "3Q44iV4URXdbS4Tk1PGs5VdWQoCxHB7zdcdMnemo8jfH", CMFI_USDC_DD = "E8RVjS24pBuF3oCCeJVAgC4RQ7mVa5P3FGXqGbiczzvD", HBB_USDC_DD = "BxPd4x7gm6WQF6jsDCRQuQVZ2bopQ4KegMrqyQgdkPDk", CELO_USDC_DD = "9RRBDWZGWGVnHgazCpb9R1XApmHLBDya8Tq1yrzoMsKY", SB_USDC_DD = "3Wppx86xN7Dg7GLUTD9C7AqCt68qZkWzNYUdCS7t1pCk", FTM_USDC_DD = "E7Af9Fa2U1YqEkQpAYjXwDB5TJUou9VcN3ot33Gj6UY9", stSOL_USDT_DD = "CtvKaRLzCzRZCcYPwai7NCYBK4ArBj2oD6BfvMgJoiCN", SEEDED_USDC_DD = "H15WptGntFQifZmJHUzYBV9Mv7P27ofavEsF6yqpLTdX", ONESOL_SOL_DD = "Hva9oLa2GjoKdB45WoHujsX7MTpehByPshMrQpNDmkFq", MMA_USDC_DD = "H9qkbU2XYSQTk6JJJ2TMuZBthfkeCHigmuxB5jiQaamn", PUFF_SOL_DD = "Ge5kuYg5PekrPUeKzngw97Cnfngj8j6NCX5q1jTBkWSW", SAO_USDC_DD = "A9BeGSRJJYXPrMs81rVZxvkk16fopzgG5YkngntgTu7p", sRLYv2_SOL_DD = "6gkZ7QUmxmwPLS2NK3Dr6YHtTPZs6GQrkA595WSx5iLe", ZBC_USDC_DD = "7Hoi4adCSBzERdvSiUXtVDz79tiDxMD5HpDv7m9rs3Sb", NOVA_USDC_DD = "H2jZrZKx1fLY9LPi2ad5G2DVBWzMmUwPQLjRFERUroEH", HBB_USDH_DD = "DUGuXcpHX9y6WdTKgDm8XsECbf7pApA7ZvAsjUqHUoYn", ZIG_USDC_DD = "9nKbvVW9TjdnKt2NbfMaf9PHcg8zWWFgGTBfzUXdFcke", sRLY_SOL_DD = "HfkZkoPqZzd7S1F3BhkJN2Es1C5vabVYqfCecXG2MGHP", TAKI_sRLY_DD = "13HwDUH7yREGAwHSWnx4Kgnn6huL8yfCCBqaBr6NGVH6", stSOL_SOL_DD = "7ZvhrqdnP2NrQi2YCjQNd8jKJpLDMUuZg4wP7XJPjnVX", BTC_stSOL_DD = "GjBW6751wNJ99zYkr9QwSi98bvj1NgyAcYHfQDpemJfq", stSOL_whETH_DD = "9V9CavjccKJH66m4MJHzVBYzY2ZM3U3D5xUCP7HSyAUz", } ================================================ FILE: src/public/farms/index.ts ================================================ export * from "./config"; export * from "./types"; ================================================ FILE: src/public/farms/types.ts ================================================ import { Keypair, PublicKey } from "@solana/web3.js"; import Decimal from "decimal.js"; import { OrcaU64, TransactionPayload } from ".."; export type OrcaFarm = { /** * Query the balance for an user address * @param wallet The public key for the user. * @return Returns the amount of farm token the user owns for this pool. */ getFarmBalance: (owner: PublicKey) => Promise; /** * Query the supply of farm tokens for this pool. * @return Returns the supply of farm tokens for this pool. */ getFarmSupply: () => Promise; /** * Perfrom a deposit: send baseToken, and receive farmToken in return. * Fee for the transaction will be paid by the owner's wallet. * * NOTE: * 1. Associated Token Address initialization instructions will be appended if the ATA of the specified token does not exist in the user's wallet * 2. OrcaU64 must have the same scale as the corresponding token scale value * * @param owner The keypair for the user's wallet or just the user's public key * @param baseTokenAmount The amount of baseToken to deposit * @return The transaction signature of the deposit instruction */ deposit: ( owner: Keypair | PublicKey, baseTokenAmount: Decimal | OrcaU64 ) => Promise; /** * Perfrom a withdraw: send farmToken, and receive baseToken in return. * Fee for the transaction will be paid by the owner's wallet. * * WARNING: * 1. Withdraw is only supported from the public key that initiated the deposit. * * NOTE: * 1. Associated Token Address initialization instructions will be appended if the ATA of the specified token does not exist in the user's wallet * 2. OrcaU64 must have the same scale as the corresponding token scale value * * @param owner The keypair for the user's wallet or just the user's public key * @param baseTokenAmount The amount of baseToken to receive * @return The transaction signature of the deposit instruction */ withdraw: ( owner: Keypair | PublicKey, baseTokenAmount: Decimal | OrcaU64 ) => Promise; /** * Get the total amount of rewards that has accumulated in the user's farm. * * Returns 0 if: * 1. the user does not have a farm initialized (by calling deposit) * 2. the user's farm balance is empty * * @param ownerPublicKey The public key of the user * @return The amount of reward that can be harvestable by the user */ getHarvestableAmount: (ownerPublicKey: PublicKey) => Promise; /** * Harvest all of the rewards that has accumulated in the user's farm. * * Throws error if the user does not have a farm initialized (by calling deposit) * * @param owner The keypair for the user's wallet or just the user's public key * @return The transaction signature of the harvest instruction */ harvest: (owner: Keypair | PublicKey) => Promise; /** * Get amount of reward tokens emitted to all liquidity per day. */ getDailyEmissions: () => Promise; }; ================================================ FILE: src/public/index.ts ================================================ export * from "./utils"; export * from "./pools"; export * from "./main"; export * from "./farms"; ================================================ FILE: src/public/main/index.ts ================================================ export * from "./orca"; export * from "./types"; ================================================ FILE: src/public/main/orca.ts ================================================ import { Connection } from "@solana/web3.js"; import { Network } from ".."; import { OrcaImpl } from "../../model/orca/orca-impl"; import { Orca } from "./types"; /** * Retrieve an instance of the Orca SDK * @param connection Solana connection class * @returns An instance of Orca SDK */ export function getOrca(connection: Connection, network = Network.MAINNET): Orca { return new OrcaImpl(connection, network); } ================================================ FILE: src/public/main/types.ts ================================================ import { OrcaFarm, OrcaPool, OrcaPoolConfig, OrcaFarmConfig } from ".."; export type Orca = { /** * Get an instance of an Orca pool. * @param pool a pool config targeting an Orca pool */ getPool: (pool: OrcaPoolConfig) => OrcaPool; /** * Get an instance of an Orca farm. * @param farm a farm config targeting an Orca farm */ getFarm: (farm: OrcaFarmConfig) => OrcaFarm; }; ================================================ FILE: src/public/pools/config.ts ================================================ /** * The following content is auto-generated. */ /** * A list of supported Orca pools in this SDK. */ export enum OrcaPoolConfig { SOL_USDC = "APDFRM3HMr8CAGXwKHiu2f5ePSpaiEJhaURwhsRrUUt9", SOL_USDT = "FZthQCuYHhcfiDma7QrX7buDHwrZEd7vL8SjS6LQa3Tx", ETH_SOL = "71FymgN2ZUf7VvVTLE8jYEnjP3jSK1Frp2XT1nHs8Hob", ETH_USDC = "3e1W6Aqcbuk2DfHUwRiRcyzpyYRRjg6yhZZcyEARydUX", RAY_SOL = "5kimD5W6yJpHRHCyPtnEyDsQRdiiJKivu5AqN3si82Jc", ROPE_SOL = "ADrvfPBsRcJfGsN6Bs385zYddH52nuM5FA8UaAkX9o2V", STEP_SOL = "8nTzqDXHriG2CXKbybeuEh1EqDQMtrbYMFWcP7AkiDaP", SRM_SOL = "9tf8rBSEQYG7AqL896fN2nZi1iYPqpWaLEdpbeQaC1Vy", FTT_SOL = "EsYaDKJCmcJtJHFuJYwQZwqohvVMCrFzcg8yo3i328No", COPE_SOL = "CzieDbGRdN1QGaGDNpSqzEA18bi881ccvkkGZi51pe1k", OXY_SOL = "7tYCdLN84EnTMkxM7HNamWJx7F4xgKe9KiiWvLyWjbgT", BTC_SOL = "Acxs19v6eUMTEfdvkvWkRB4bwFCHm3XV9jABCy7c1mXe", MER_SOL = "HiwRobjfHZ4zsPtqCC4oBS24pSmy4t8GGkXRbQj4yU6L", FIDA_SOL = "EYsNdtyu4gGTaGz8N5m5iQ3G1N6rDyMbR72B3CqbWW4W", MAPS_SOL = "99pfC8fWymXgbq3CvrExhx3UxQDC1fMWEWLbNT83F45e", USDC_USDT = "H2uzgruPvonVpCRhwwdukcpXK8TG17swFNzYFr2rtPxy", ORCA_SOL = "2uVjAuRXavpM6h1scGQaxqb6HVaNRn6T2X7HHXTabz25", ORCA_USDC = "n8Mpu28RjeYD7oUX3LG1tPxzhRZh3YYLRSHcHRdS3Zx", KIN_SOL = "HEvnD66WcBfTajS9adUYnGRBMDehFtLySiFHSD6kEBWs", SAMO_SOL = "D6N9j8F2DhtzDtrdpT74y3u2YmYAzcggiLc3nTjqux9M", LIQ_USDC = "3PD9SZFwXKkXr4akLf4ofo37ZUMycwML89R2P3qxcbZG", SNY_USDC = "AZpo4BJHHRetF96v6SGinFZBMXM4yWMo4RA8C4PriDLk", mSOL_USDC = "8PSfyiTVwPb6Rr2iZ8F3kNpbg65BCfJM9v8LfB916r44", SLRS_USDC = "AtB4nUmdyQfuWWJ9xAHw9xyVnJFfSjSuVWkiYan8y86w", PORT_USDC = "F8gPSpwVHj8FdAJAYULDuZBxFEJut87hUbARYYx3471w", SBR_USDC = "CS7fA5n4c2D82dUoHrYzS3gAqgqaoVSfgsr18kitp2xo", scnSOL_USDC = "Dkr8B675PGnNwEr9vTKXznjjHke5454EQdz3iaSbparB", pSOL_USDC = "C2YzN6MymD5HM2kPaH7bzcbqciyjfmpqyVaR3KA5V6z1", mSOL_SOL = "29cdoMgu6MS2VXpcMo1sqRdWEzdUR9tjvoh8fcK8Z87R", ORCA_PAI = "C7TH2jEJJaxVwwuvkbcDGfHUiZvEkkeYjyAcdTMi5ujb", ORCA_mSOL = "CVapmQn7HaU1yMDW3q6oUV4hx6XoYv54T4zfGXkuJqkA", scnSOL_SOL = "APNpzQvR91v1THbsAyG3HHrUEwvexWYeNCFLQuVnxgMc", ATLAS_USDC = "FZ8x1LCRSPDeHBDoAc3Gc6Y7ETCynuHEr5q5YWV7uRCJ", POLIS_USDC = "GteBdo9sqE7T41G8AJsaG9WHW48uXBwsLLznmu2TBdgy", BOP_USDC = "2gXDJZ7XAtQEtf4PRSQZKoq1WMuu1H44tQanbMA3YVpu", SAMO_USDC = "6VK1ksrmYGMBWUUZfygGF8tHRGpNxQEWv8pfvzQHdyyc", NINJA_SOL = "4X1oYoFWYtLebk51zuh889r1WFLe8Z9qWApj87hQMfML", SLIM_USDC = "BVWwyiHVHZQMPHsiW7dZH7bnBVKmbxdeEjWqVRciHCyo", wHAPI_USDC = "ELfBngAgvLEHVBuJQhhE7AW6eqLX7id2sfrBngVNVAUW", COPE_USDC = "HsauTv9s52Zv12eaDuSp6y7BEm4e4BHEyAsbdjyyWzPK", SUNNY_USDC = "GHuoeq9UnFBsBhMwH43eL3RWX5XVXbSRYJymmyMYpT7n", GRAPE_USDC = "EorFh8siFyLF1QTZ7cCXQaPGqyo7eb4SAgKtRH8Jcxjd", ABR_USDC = "GMzPbaCuQmeMUm1opH3oSCgKUjVgJUW14myq99RVPGX5", KURO_USDC = "DRknxb4ZFxXUTG6UJ5HupNHG1SmvBSCPzsZ1o9gAhyBi", MEDIA_USDC = "2toFgkQDoPrTJYGDEVoCasPXuL9uQnjvXJaDwa9LHyTx", TULIP_USDC = "4SBx8GXu8HhcVHWydQv1vsDdZs3G93XSL9CtMBny6hS5", MNGO_USDC = "H9yC7jDng974WwcU4kTGs7BKf7nBNswpdsP5bzbdXjib", stSOL_wstETH = "Eswigpwm3xsipkTqahGi2PEJsJcULQBwZgxhQpr6yBEa", SYP_USDC = "qJxKN9BhxbYvRNbjfK2uAVWboto6sonj8XC1ZEW5XTB", stSOL_wLDO = "74B9aMS7SA832xKngt5VLKmWAP3pa3qkUzWncTmQSsGF", whETH_SOL = "7aYnrdmdCRodDy2Czn6keUquUhjF1jPEmfwZPh488z8U", whETH_USDC = "7NPtjjAP7vhp4t5NCLyY4DY5rurvyc8cgZ2a2rYabRia", MNDE_mSOL = "5PHS5w6hQwFNnLz1jJFe7TVTxSQ98cDYC3akmiAoFMXs", WAG_USDC = "Df6XNHMF3uRVZnz7LCEGiZVax6rXgz76owtVkBHEjSb6", mSOL_USDT = "9cMWe4UYRPGAUUsTkjShJWVM7bk8DUBgxtwwH8asFJoV", mSOL_whETH = "5qoTq3qC4U7vFxo3iCzbXcaD1UEmDeCD63Dsuoct71oV", BTC_mSOL = "8nKJ4z9FSw6wrVZKASqBiS9DS1CiNsRnqwCCKVQjqdkB", IVN_SOL = "DfgCnzaiTXfPkAH1C1Z441b5MzjjTCEh134ioxqRZxYf", LARIX_USDC = "8sfThep3io4gvcGeuoAg1Rs8GDwKJjtcdAFHqQSSNAVE", PRT_USDC = "6jCERp5hKj37PCXP3VTjCDJeoPuSpnMDMz5A6jWQv3yS", JET_USDC = "GBijunwxa4Ni3JmYC6q6zgaVhSUJU6hVX5qTyJDRpNTc", stSOL_USDC = "GtQ1NT7R5aaTiST7K6ZWdMhwDdFxsSFvVFhBo8vyHGAq", wstETH_USDC = "5a6Y1ephcbKSoyLMQyD1JWbtqawCy8p2FtRL9v3zhaG5", AURY_USDC = "6mJqqT5TMgveDvxzBt3hrjGkPV5VAj7tacxFCT3GebXh", AVAX_USDC = "Hmfrtmo93DpSDmVNLQKcBS5D1ia5JatiRSok9ososubz", FTT_USDC = "FwCombynV2fTVizxPCNA2oZKoWXLZgdJThjE4Xv9sjxc", RAY_USDC = "4cXw2MYj94TFBXLL73fEpMCr8DPrW68JvrV8mzWgktbD", SLND_USDC = "F59gkD7NnsdJbFKrRZsiBC8PAooN4c56T8QmahfW1iXN", GOFX_USDC = "7vnps4VE5RTGAr5fmPZu7fSrk2VnM4Up838grZfqmxqE", WOOF_USDC = "9EjcYfHcG8f1mccpHyaAwpoxaUPiheC6KgLQjyD9aTb6", SDOGE_USDC = "CHTKUJGYRtBDqnxCFjxe5KEkZgxV98udbhuYYyzGxup5", CATO_USDC = "55r9txzQtmjTykmTXmBYZCVMg5z9squB8b5cSw2AhxA4", OOGI_USDC = "DSiHyHDn96bUQSZtizyCRLcQzrwohZeMpVu8rYJN1HzG", SONAR_USDC = "5MvQHx8eftU39JTucFsT315JFnQASuDQg3FqxTw7xcvN", APT_USDC = "HNrYngS1eoqkjWro9D3Y5Z9sWBDzPNK2tX4rfV2Up177", DFL_USDC = "AWrtTWG4Zgxw8D92bb3L3sQtGLD3zDztMPWsXSph8iBP", DFL_SOL = "9Y1vPaAsMz8X65DebMMnmBjbMo8i4jh4mcgiggZUUS3M", FRKT_USDC = "FnDxJPNk7pPmGHUbR4XUHmHevrkXHdna5D3sQKcAtjBL", TTT_USDC = "FGgP1npQTsC5Q4xBmQtNYSh51NKqNwdxBZy8JCo3igcu", UPS_USDC = "E1U63VXhNiWoUkVvjrfLDdV1oJrwE6zLde3bohr6jCqz", FANT_USDC = "GjG7JjTQfQpDxw4hWx4etP9oTaYCuCbPjsU8WaUT3xHB", BLOCK_USDC = "D8WjqtwC9CzBrQKfSf2ccCHFQuPYwyLv5KAy8WjT5vnf", RUN_USDC = "34Ppq6R8NfYBwWwPY4cBK4Afyb8hHaASQFukCzH6cV4n", UXP_USDC = "HjR8JgqNKQVMvdryqJw5RJ4PCE9WGk8sgbEF7S9S3obv", BTC_USDC = "J3kvcay3N16FBdawgnqoJ9v9p6XCvyCLE2Z9F5RLvGkj", MNDE_USDC = "12Uj74zgUUoBe4yeackwQ4qYtFMr9fk1xL6q5Nha6t2N", CHICKS_USDC = "71CBZeJ4tw38L9pSPoCz4fRsuWE64Fipyzotte7haoCS", ONESOL_USDC = "6MF5CHWAj5mS7FhpxiKz37CzR2eYTu236XpBKKMXCrGg", WMP_USDC = "HDgxKmiA8Pv82fNguhVeMkZqQkos2YksFPoP1KttWxX8", UNQ_USDC = "2VuGzaMrDnDyZfYvDwSXk38s7M2wpud7LDY3dGA1J9sy", BASIS_USDC = "GoaAiajubRgeCFEz9L6mLnSmT2QFegoJDH5tpLfivpj", GST_USDC = "E6FUnQHGHJVJg7oExVr5Moeaj1QpdpZQF5odYjHXWPZb", MEAN_USDC = "F5BTnwuMA6rxftTdbZ33VWKr2wrr6DuQHnd4guKmPSYQ", AART_USDC = "HCtyJzFUtYecXrA52s4Y9atq4J1fhT3cYsTX17XVSFag", SHDW_USDC = "DJqqvzSuPaWThfzwMjXx7H2ZmHDdwxza6NtFudtuXcpc", SHDW_SOL = "2ws7g3LBPdctfKn42Di9qxzQtUJ8ZL1aEAX2rGEQMNqh", SCY_USDC = "99ZHUQsgxL7K6PHrGNi1gSwawwPr7UA5fbWrYoHQ6qhX", SLC_USDC = "E5kSBqTDxFLbLNQaVVtPtnhEYVLMCK2fVSEKoMKL98qR", wUST_SOL = "6c13xsmyk7UaHUWZ2rm1MM3ZdrQRSBkQ9waaG25ridVs", wUST_USDC = "J1KfRtP5y2warpD7LdJhfBLPKoWwSqYuovdArSv1mpQ7", mSOL_wUST = "68YVjgPnTUPcBqZyghqvD2WPNsrLKsjYTmBKJzHRr4qd", wLUNA_wUST = "8Mh7drLbt3jFJYwp948XyvQscGLaLkChNcaH5wwaAoWA", stSOL_wUST = "HTZd53fYwYQRyAjiaPsZy9Gf41gobFdqkF4oKe3XLi95", JSOL_USDC = "AzEoVuNJyo9ByoLRZ5t6vav2Zg24vULNVJM41PgCKUqR", daoSOL_USDC = "CCyDxjdW3G7hPTthTMPTZ4bnhFF19XG6rx2fNiKeRQww", ORCA_USDT = "Gx4PoxenyQwhGGnKagAT35iVg4im1iKhJxDWqVhgu6tk", ORCA_whETH = "GsfyYHkSgC3Ta6aWR9MjB2sxoBrkGGeR2tAwXbpphf3", GENE_USDC = "7cuu94swKL5PtFQohKMAzyd1mjj65rgMW3GzLY31HCnK", CMFI_USDC = "85krvT9DxdYgoFLQDHTAGdvtNuLdAsc4xE5FkVLpN2aR", CELO_USDC = "HVLyX8mD8YvKgZJ4oB6rXJiCYMLpHKwB6iCiCjE1XwdT", FTM_USDC = "Gpzd833qSmv3kXpQmxEaqkrZTXZaRjhNAoqhf61qAhTG", BTC_ORCA = "DFpLFcQZqDKykyDePgip4r6MExVmBKWqTa12ezq6qxUY", HBB_USDC = "cL5WhffCYFRLM4We8VS2W684kM4pHyuvEDwp8Ddw48k", HBB_SOL = "FkKzu2HeMJZf4oHwoYPxLGVy3net5Jq8HAfnA5VqETgk", SB_USDC = "2Reqt4Sw9xNY8BoJ3EZLpFu5yVgNxFrbw8M3KiJpPn6o", stSOL_USDT = "4ni1nho89cDKAQ9ddbNQA9ieLYpzvJVmJpuogu5Ct5ur", SEEDED_USDC = "H7gyTmNCDXkD8MGMqnxqoD8ANszjcju4tjT6ERZ5dakf", AUDIO_USDC = "3hksYA17VxgiKSeihjnZkBbjc2CTbEBfvDCYgQhojTo5", MMA_USDC = "AaZRnJAnDyJyPD9uPJpJ8bzBGDCEi6jtBpUf92xErWPp", ONESOL_SOL = "9wPhuYapychVDSxmXqCZxy2Ka8Lmav4SHM72si8bfraV", PUFF_SOL = "Eho8h1BcoG5QWU7X9FzJafw5ErKUXtR2LobAJJZfWff4", SAO_USDC = "4iyU77yZbg8iD344vbwruAuDAf9i1EVV3FhZJDnWStBE", sRLYv2_SOL = "3dXdXg5HPyZ73GFC9LkSn3thdJUGeXWB8iSTHs5UcqiH", ZBC_USDC = "2LYgm6nGXmSSjfoEriPuYeGoNiWNxUs7n3rnTbDWN5c7", GMT_USDC = "CFxQF5kNAtbbDj298Xr47Sf4mkSyuzWpRH97hrdQ6kxi", NOVA_USDC = "DdAFNvDxtEHCgKj3JAM64zCKfMWhs4J9wEmRrjUAFiME", HBB_USDH = "7n2YW9qLkhGFArdZPLoF4hYPE2zw7xCACkVPXrUWnLuo", TAKI_sRLYv2 = "6atKbS2Xz5vu7cqWBNk8KYkuakRzckZ9nvtUKf2k8Sc3", ZIG_USDC = "5vhh9ZnD9vnahRhFLP1EUEyYRSzvJwgw9U2xygsSJSrp", sRLY_SOL = "HfRgvhgscGX5GaP3rUrZAhh7gS4aJ2UQ7rNVX976rG6P", TAKI_sRLY = "3xaK5aWWLNRB73xUVX3cusLhDp65mTvP4fwW5Jwxakgs", stSOL_SOL = "4jjQSgFx33DUb1a7pgPsi3FbtZXDQ94b6QywjNK3NtZw", BTC_stSOL = "HYp9v7cY4wAxSsa6ijztQQ3GQ8iTttuG5vu8JNBDHoNh", stSOL_whETH = "FWurFWADrgmhb6Y44LEaCMnEHS2Tu3QGqd9oBcZtr8gT", } ================================================ FILE: src/public/pools/index.ts ================================================ export * from "./config"; export * from "./types"; ================================================ FILE: src/public/pools/types.ts ================================================ import { u64 } from "@solana/spl-token"; import { Keypair, PublicKey } from "@solana/web3.js"; import Decimal from "decimal.js"; import { OrcaU64 } from ".."; import { TransactionPayload } from "../utils"; export type DepositQuote = { minPoolTokenAmountOut: OrcaU64; // MISNOMER - this value represents the exact poolTokenAmountOut maxTokenAIn: OrcaU64; maxTokenBIn: OrcaU64; }; export type WithdrawQuote = { minTokenAOut: OrcaU64; minTokenBOut: OrcaU64; maxPoolTokenAmountIn: OrcaU64; // MISNOMER - this value represents the exact poolTokenAmountIn }; /** * Allows interactions with an Orca liquidity pool. */ export type OrcaPool = { /** * Query the token of tokenA in this pool. * @returns Returns the token id of tokenA in this pool */ getTokenA: () => OrcaPoolToken; /** * Query the token of tokenB in this pool. * @returns Returns the token id of tokenB in this pool */ getTokenB: () => OrcaPoolToken; /** * Query the mint public key for the pool token of this pool. * @returns Returns the tokenMint public key of this pool */ getPoolTokenMint: () => PublicKey; /** * Query the balance for an user address * @param wallet The public key for the user. * @return Returns the amount of LP token the user owns for this pool. */ getLPBalance: (owner: PublicKey) => Promise; /** * Query the supply of LP tokens for this pool. * @return Returns the supply of LP tokens for this pool */ getLPSupply: () => Promise; /** * Get the latest quote to trade one token to another in this pool * * Note: slippage supports a maximum scale of 1 (ex. 0.1%). Additional decimal places will be floored. * * @param inputTokenId The token you want to trade from * @param inputAmount The amount of token you would to trade * @param slippage An optional slippage in percentage you are willing to take in this trade (default: 0.1%) * @return Returns a quote on the exchanged token based on the input token amount */ getQuote: ( inputToken: OrcaToken, inputAmount: Decimal | OrcaU64, slippage?: Decimal ) => Promise; /** * Get the latest quote to trade on token to another in this pool using user provided pool amounts * * Note: slippage supports a maximum scale of 1 (ex. 0.1%). Additional decimal places will be floored. * * @param inputTokenId The token you want to trade from * @param inputAmount The amount of token you would to trade * @param inputTokenPoolAmount The amount of input tokens in the pool * @param outputTokenPoolAmount The amount of output tokens in the pool * @param slippage An optional slippage in percentage you are willing to take in this trade (default: 0.1%) * @return Returns a quote on the exchanged token based on the input token amount */ getQuoteWithPoolAmounts: ( inputToken: OrcaToken, inputAmount: Decimal | OrcaU64, inputTokenPoolAmount: u64, outputTokenPoolAmount: u64, slippage?: Decimal ) => Promise; /** * Perform a swap from the input type to the other token in the pool. * Fee for the transaction will be paid by the owner's wallet. * * NOTE: * 1. Associated Token Address initialization instructions will be appended if the ATA of the specified token does not exist in the user's wallet * 2. OrcaU64 must have the same scale as the corresponding token scale value * * @param owner The keypair for the user's wallet or just the user's public key * @param inputToken An Orca supported token in the user's wallet to swap from * @param amountIn The amount of inputToken to swap from * @param minimumAmountOut The minimum amount of outputToken to receive from this swap * @return The transaction signature of the swap instruction */ swap: ( owner: Keypair | PublicKey, inputToken: OrcaToken, amountIn: Decimal | OrcaU64, minimumAmountOut: Decimal | OrcaU64 ) => Promise; /** * Get suggested pool token deposit amount based on required constraints on maximum tokenA amount and maximum tokenB amount * * Note: * 1. minPoolTokenAmountOut in the output type is a misnomer, and it represents the _exact_ poolTokenAmountOut value * * @param maxTokenAIn The maximum amount of tokenA to deposit in exchange for pool token * @param maxTokenBIn The maximum amount of tokenB to deposit in exchange for pool token * @param slippage An optional slippage in percentage you are willing to take in deposit (default: 0.1%) * @return Returns the input for deposit */ getDepositQuote: ( maxTokenAIn: Decimal | OrcaU64, maxTokenBIn: Decimal | OrcaU64, slippage?: Decimal ) => Promise; /** * Perform a deposit: send tokenA and tokenB, and receive a poolToken in return. * Fee for the transaction will be paid by the owner's wallet. * * NOTE: * 1. Associated Token Address initialization instructions will be appended if the ATA of the specified token does not exist in the user's wallet * 2. OrcaU64 must have the same scale as the corresponding token scale value * * @param owner The keypair for the user's wallet or just the user's public key * @param maxTokenAIn The maximum amount of tokenA to send * @param maxTokenBIn The maximum amount of tokenB to send * @param minPoolTokenAmountOut The amount of poolToken to receive * @return The transaction signature of the deposit instruction */ deposit: ( owner: Keypair | PublicKey, maxTokenAIn: Decimal | OrcaU64, maxTokenBIn: Decimal | OrcaU64, minPoolTokenAmountOut: Decimal | OrcaU64 ) => Promise; /** * Get suggested withdraw token amounts based on required withdraw amount of the pool token / one of the paired tokens * * Throws error if withdrawTokenMint does not equal tokenMint of tokenA, tokenB, or poolToken of this pool * * Note: * 1. maxPoolTokenAmountIn in the output type is a misnomer, and it represents the _exact_ poolTokenAmountIn value * * @param withdrawTokenAmount The amount of tokens to withdraw in terms of tokenA amount, tokenB amount, or poolToken amount * @param withdrawTokenMint The token mint public key of tied to withdrawTokenAmount. It should be the mint of tokenA, tokenB, or poolToken * @param slippage An optional slippage in percentage you are willing to take in withdraw (default: 0.1%) * @return Returns the input for withdraw */ getWithdrawQuote: ( withdrawTokenAmount: Decimal | OrcaU64, withdrawTokenMint: PublicKey, slippage?: Decimal ) => Promise; /** * Perform a withdraw: send poolToken, and receive tokenA and tokenB in return. * Fee for the transaction will be paid by the owner's wallet. * * NOTE: * 1. Associated Token Address initialization instructions will be appended if the ATA of the specified token does not exist in the user's wallet * 2. OrcaU64 must have the same scale as the corresponding token scale value * * @param owner The keypair for the user's wallet or just the user's public key * @param poolTokenAmountIn The amount of poolToken to send * @param minTokenAOut The minimum amount of tokenA to receive * @param minTokenBOut The minimum amount of tokenB to receive * @return The transaction signature of the withdraw instruction */ withdraw: ( owner: Keypair | PublicKey, poolTokenAmountIn: Decimal | OrcaU64, minTokenAOut: Decimal | OrcaU64, minTokenBOut: Decimal | OrcaU64 ) => Promise; }; /** * An Orca Token * @param tag The tag of the token * @param name The presentable name of the token * @param mint The mint public key for the token * @param scale The scale of the u64 return type */ export type OrcaToken = { tag: string; name: string; mint: PublicKey; scale: number; }; /** * An Orca Token within an OrcaPool * @param addr The public key for this token for this Orca Pool */ export type OrcaPoolToken = OrcaToken & { addr: PublicKey; }; export type Quote = { /** * Returns the rate of exchange given the trade amount. Fees are included. * Rate is zero if the input trade amount, input or output token balance in pool is zero. * @returns a function that returns the rate of exchange when the quote was built (denominated by output token) */ getRate: () => Decimal; /** * Returns the fee that will be charged in this exchange. * @return a function that returns the fee (denominated by input token) that will be charged in this exchange. */ getLPFees: () => OrcaU64; /** * Return the network fee that will be charged to submit the transaction. * @return a function that returns the network fee in lamports that will be charged to submit the transaction. */ getNetworkFees: () => OrcaU64; /** * Returns the % impact to the rate if this transaction goes through. * @return a function to return the % impact to the rate if this transaction goes through. Zero if input or output token balance in pool is zero. */ getPriceImpact: () => Decimal; /** * Returns the expected amount of output tokens returned if this exchange is transacted. Fees applied. * @return a function to return the expected amount of output tokens returned if this exchange is transacted */ getExpectedOutputAmount: () => OrcaU64; /** * Returns the minimum amount of output tokens returned if this exchange is transacted. Fees & maximum slippage applied. * @return a function to return the minimum amount of output tokens returned if this exchange is transacted */ getMinOutputAmount: () => OrcaU64; }; ================================================ FILE: src/public/utils/constants.ts ================================================ import { PublicKey } from "@solana/web3.js"; export const ORCA_TOKEN_SWAP_ID: PublicKey = new PublicKey( "9W959DqEETiGZocYWCQPaJ6sBmUzgfxXfqGeTEdp3aQP" ); export const ORCA_TOKEN_SWAP_ID_DEVNET: PublicKey = new PublicKey( "3xQ8SWv2GaFXXpHZNqkXsdxq5DZciHBz6ZFoPPfbFd7U" ); export const SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID: PublicKey = new PublicKey( "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL" ); export const ORCA_FARM_ID: PublicKey = new PublicKey( "82yxjeMsvaURa4MbZZ7WZZHfobirZYkH1zF8fmeGtyaQ" ); ================================================ FILE: src/public/utils/index.ts ================================================ export * from "./constants"; export * from "./models"; export * from "./numbers"; export * from "./pool-utils"; export * from "./time-utils"; export * from "./web3"; export * from "./types"; ================================================ FILE: src/public/utils/models/index.ts ================================================ export * from "./instruction"; export * from "./percentage"; ================================================ FILE: src/public/utils/models/instruction.ts ================================================ import { Keypair, PublicKey, Signer, Transaction, TransactionInstruction, TransactionSignature, } from "@solana/web3.js"; export const emptyInstruction: Instruction = { instructions: [], cleanupInstructions: [], signers: [], }; export type Instruction = { instructions: TransactionInstruction[]; cleanupInstructions: TransactionInstruction[]; signers: Signer[]; }; export type TransactionPayload = { transaction: Transaction; signers: Signer[]; execute: () => Promise; }; ================================================ FILE: src/public/utils/models/percentage.ts ================================================ import { u64 } from "@solana/spl-token"; import Decimal from "decimal.js"; import { ZERO } from ".."; export class Percentage { readonly numerator: u64; readonly denominator: u64; constructor(numerator: u64, denominator: u64) { this.numerator = numerator; this.denominator = denominator; } public static fromDecimal(number: Decimal): Percentage { return Percentage.fromFraction(number.toDecimalPlaces(1).mul(10).toNumber(), 1000); } public static fromFraction(numerator: u64 | number, denominator: u64 | number): Percentage { const num = typeof numerator === "number" ? new u64(numerator.toString()) : numerator; const denom = typeof denominator === "number" ? new u64(denominator.toString()) : denominator; return new Percentage(num, denom); } public toString = (): string => { return `${this.numerator.toString()}/${this.denominator.toString()}`; }; public toDecimal() { if (this.denominator.eq(ZERO)) { return new Decimal(0); } return new Decimal(this.numerator.toString()).div(new Decimal(this.denominator.toString())); } public add(p2: Percentage): Percentage { const denomGcd = this.denominator.gcd(p2.denominator); const denomLcm = this.denominator.div(denomGcd).mul(p2.denominator); const p1DenomAdjustment = denomLcm.div(this.denominator); const p2DenomAdjustment = denomLcm.div(p2.denominator); const p1NumeratorAdjusted = this.numerator.mul(p1DenomAdjustment); const p2NumeratorAdjusted = p2.numerator.mul(p2DenomAdjustment); const newNumerator = p1NumeratorAdjusted.add(p2NumeratorAdjusted); return new Percentage(new u64(newNumerator.toString()), new u64(denomLcm.toString())); } } ================================================ FILE: src/public/utils/numbers/decimal-utils.ts ================================================ import { u64 } from "@solana/spl-token"; import Decimal from "decimal.js"; export class DecimalUtil { public static fromU64(input: u64, shift = 0): Decimal { return new Decimal(input.toString()).div(new Decimal(10).pow(shift)); } public static toU64(input: Decimal, shift = 0): u64 { if (input.isNeg()) { throw new Error("Negative decimal value ${input} cannot be converted to u64."); } const shiftedValue = input.mul(new Decimal(10).pow(shift)); const zeroDecimalValue = shiftedValue.trunc(); return new u64(zeroDecimalValue.toString()); } } ================================================ FILE: src/public/utils/numbers/index.ts ================================================ export * from "./decimal-utils"; export * from "./orca-u64"; export * from "./u64-utils"; ================================================ FILE: src/public/utils/numbers/orca-u64.ts ================================================ import { u64 } from "@solana/spl-token"; import Decimal from "decimal.js"; import { DecimalUtil } from "../../utils/numbers/decimal-utils"; /** * Orca's U64 wrapper class to help users convert to/from regular javascript number types * * * Examples: * OrcaU64(value: 99999, decimal: 0) -> 99999 * OrcaU64(value: 99999, decimal: 5) -> 0.99999 */ export class OrcaU64 { readonly value: u64; readonly scale: number; constructor(value: u64, scale = 0) { this.value = value; this.scale = Math.floor(scale); } /** * Create an OrcaU64 from a Decimal * @param value - an object representing the value of the u64 in Decimal form * @param scale - the number of digits after the decimal point to keep account for in this u64 * @returns OrcaU64 hosting a u64 representing the input value adjusted to the provided scale */ static fromDecimal(value: Decimal, scale = 0) { const dec = Math.floor(scale); return new OrcaU64(DecimalUtil.toU64(value, dec), dec); } /** * Create an OrcaU64 from a number * @param value - an object representing the value of the u64 in number form * @param scale - the number of digits after the decimal point to keep account for in this u64 * @returns OrcaU64 hosting a u64 representing the input value adjusted to the provided scale */ static fromNumber(value: number, scale = 0) { const dec = Math.floor(scale); return new OrcaU64(DecimalUtil.toU64(new Decimal(value), dec), dec); } /** * Create an OrcaU64 from a u64 * @param value - an object representing the value of the u64 * @param scale - the number of digits after the decimal point represented in this u64 * @returns OrcaU64 hosting the input u64 with the provided scale */ static fromU64(value: u64, scale = 0) { const dec = Math.floor(scale); return new OrcaU64(value, dec); } /** * Convert this OrcaU64 to Decimal. * @returns Decimal object that equals to the OrcaU64's value & scale */ public toDecimal() { return DecimalUtil.fromU64(this.value, this.scale); } /** * Convert this OrcaU64 to number. * @returns number that equals to the OrcaU64's value & scale */ public toNumber() { return DecimalUtil.fromU64(this.value, this.scale).toNumber(); } /** * Convert this OrcaU64 to u64. * @returns u64 that equals to the OrcaU64 value */ public toU64() { return new u64(this.value.toString()); } } ================================================ FILE: src/public/utils/numbers/u64-utils.ts ================================================ import { u64 } from "@solana/spl-token"; import Decimal from "decimal.js"; import { OrcaToken, OrcaU64 } from "../.."; import { OrcaFarmParams } from "../../../model/orca/farm/farm-types"; import { OrcaPoolParams } from "../../../model/orca/pool/pool-types"; import { DecimalUtil } from "./decimal-utils"; export const ZERO = new u64(0); export const ONE = new u64(1); export class U64Utils { public static toTokenU64(input: Decimal | OrcaU64, token: OrcaToken, varName: string) { if (input instanceof OrcaU64) { if (input.scale !== token.scale) { throw new Error( `${varName}'s scale of ${input.scale} does not match token's decimal of ${token.scale}` ); } return input.toU64(); } return DecimalUtil.toU64(input, token.scale); } public static toPoolU64(input: Decimal | OrcaU64, pool: OrcaPoolParams, varName: string) { if (input instanceof OrcaU64) { if (input.scale !== pool.poolTokenDecimals) { throw new Error( `${varName}'s scale of ${input.scale} does not match pool's decimal of ${pool.poolTokenDecimals}` ); } return input.toU64(); } return DecimalUtil.toU64(input, pool.poolTokenDecimals); } public static toFarmU64(input: Decimal | OrcaU64, farm: OrcaFarmParams, varName: string) { if (input instanceof OrcaU64) { if (input.scale !== farm.baseTokenDecimals) { throw new Error( `${varName}'s scale of ${input.scale} does not match baseToken's decimal of ${farm.baseTokenDecimals}` ); } return input.toU64(); } return DecimalUtil.toU64(input, farm.baseTokenDecimals); } // Note: divisor input variable modified in place // https://github.com/solana-labs/solana-program-library/blob/master/libraries/math/src/checked_ceil_div.rs#L5-L22 public static ceilingDivision(dividend: u64, divisor: u64): [u64, u64] { let quotient = dividend.div(divisor); if (quotient.eq(ZERO)) { return [ZERO, divisor]; } let remainder = dividend.mod(divisor); if (remainder.gt(ZERO)) { quotient = quotient.add(ONE); divisor = dividend.div(quotient); remainder = dividend.mod(quotient); if (remainder.gt(ZERO)) { divisor = divisor.add(ONE); } } return [quotient, divisor]; } } ================================================ FILE: src/public/utils/pool-utils.ts ================================================ import { OrcaPoolParams } from "../../model/orca/pool/pool-types"; export function getTokens(poolParams: OrcaPoolParams, inputTokenId: string) { if (poolParams.tokens[inputTokenId] == undefined) { throw new Error("Input token not part of pool"); } const tokenAId = poolParams.tokenIds[0]; const tokenBId = poolParams.tokenIds[1]; const forward = tokenAId == inputTokenId; const inputOrcaToken = forward ? poolParams.tokens[tokenAId] : poolParams.tokens[tokenBId]; const outputOrcaToken = forward ? poolParams.tokens[tokenBId] : poolParams.tokens[tokenAId]; return { inputPoolToken: inputOrcaToken, outputPoolToken: outputOrcaToken }; } ================================================ FILE: src/public/utils/time-utils.ts ================================================ export function nowMS() { return new Date().getTime(); } ================================================ FILE: src/public/utils/types.ts ================================================ export enum Network { MAINNET = "mainnet-beta", DEVNET = "devnet", } ================================================ FILE: src/public/utils/web3/ata-utils.ts ================================================ import { AccountLayout, TOKEN_PROGRAM_ID, u64 } from "@solana/spl-token"; import { Connection, Keypair, PublicKey } from "@solana/web3.js"; import { solToken } from "../../../constants/tokens"; import { SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID } from "../constants"; import { emptyInstruction, Instruction } from "../models/instruction"; import { deserializeAccount } from "./deserialize-account"; import { createAssociatedTokenAccountInstruction, createWSOLAccountInstructions, } from "./instructions/token-instructions"; import { Owner } from "./key-utils"; export type ResolvedTokenAddressInstruction = { address: PublicKey } & Instruction; /** * IMPORTANT: wrappedSolAmountIn should only be used for input/source token that * could be SOL. This is because when SOL is the output, it is the end * destination, and thus does not need to be wrapped with an amount. * * @param connection Solana connection class * @param owner The keypair for the user's wallet or just the user's public key * @param tokenMint Token mint address * @param wrappedSolAmountIn Optional. Only use for input/source token that could be SOL * @returns */ export async function resolveOrCreateAssociatedTokenAddress( connection: Connection, owner: Owner, tokenMint: PublicKey, wrappedSolAmountIn = new u64(0) ): Promise { if (!tokenMint.equals(solToken.mint)) { const derivedAddress = await deriveAssociatedTokenAddress(owner.publicKey, tokenMint); // Check if current wallet has an ATA for this spl-token mint. If not, create one. let resolveAtaInstruction = emptyInstruction; await connection.getAccountInfo(derivedAddress).then((info) => { const tokenAccountInfo = deserializeAccount(info?.data); if (!tokenAccountInfo) { resolveAtaInstruction = createAssociatedTokenAccountInstruction( derivedAddress, owner.publicKey, owner.publicKey, tokenMint, owner ); } }); return { address: derivedAddress, instructions: resolveAtaInstruction.instructions, cleanupInstructions: resolveAtaInstruction.cleanupInstructions, signers: resolveAtaInstruction.signers, }; } else { // TODO: Is there a way to store this cleaner? const accountRentExempt = await connection.getMinimumBalanceForRentExemption( AccountLayout.span ); // Create a temp-account to transfer SOL in the form of WSOL return createWSOLAccountInstructions( owner.publicKey, solToken.mint, wrappedSolAmountIn, accountRentExempt ); } } export async function deriveAssociatedTokenAddress( walletAddress: PublicKey, tokenMint: PublicKey ): Promise { return ( await PublicKey.findProgramAddress( [walletAddress.toBuffer(), TOKEN_PROGRAM_ID.toBuffer(), tokenMint.toBuffer()], SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID ) )[0]; } ================================================ FILE: src/public/utils/web3/deserialize-account.ts ================================================ import { AccountInfo, AccountLayout, u64 } from "@solana/spl-token"; import { PublicKey } from "@solana/web3.js"; export const deserializeAccount = (data: Buffer | undefined): AccountInfo | undefined => { if (data == undefined || data.length == 0) { return undefined; } const accountInfo = AccountLayout.decode(data); accountInfo.mint = new PublicKey(accountInfo.mint); accountInfo.owner = new PublicKey(accountInfo.owner); accountInfo.amount = u64.fromBuffer(accountInfo.amount); if (accountInfo.delegateOption === 0) { accountInfo.delegate = null; accountInfo.delegatedAmount = new u64(0); } else { accountInfo.delegate = new PublicKey(accountInfo.delegate); accountInfo.delegatedAmount = u64.fromBuffer(accountInfo.delegatedAmount); } accountInfo.isInitialized = accountInfo.state !== 0; accountInfo.isFrozen = accountInfo.state === 2; if (accountInfo.isNativeOption === 1) { accountInfo.rentExemptReserve = u64.fromBuffer(accountInfo.isNative); accountInfo.isNative = true; } else { accountInfo.rentExemptReserve = null; accountInfo.isNative = false; } if (accountInfo.closeAuthorityOption === 0) { accountInfo.closeAuthority = null; } else { accountInfo.closeAuthority = new PublicKey(accountInfo.closeAuthority); } return accountInfo; }; ================================================ FILE: src/public/utils/web3/get-token-count.ts ================================================ import { u64 } from "@solana/spl-token"; import { Connection } from "@solana/web3.js"; import { OrcaPoolToken } from "../.."; import { OrcaPoolParams } from "../../../model/orca/pool/pool-types"; import { deserializeAccount } from "./deserialize-account"; export type PoolTokenCount = { inputTokenCount: u64; outputTokenCount: u64; }; export async function getTokenCount( connection: Connection, poolParams: OrcaPoolParams, inputPoolToken: OrcaPoolToken, outputPoolToken: OrcaPoolToken ): Promise { if (poolParams.tokens[inputPoolToken.mint.toString()] == undefined) { throw new Error("Input token not part of pool"); } if (poolParams.tokens[outputPoolToken.mint.toString()] == undefined) { throw new Error("Output token not part of pool"); } const accountInfos = await connection.getMultipleAccountsInfo([ inputPoolToken.addr, outputPoolToken.addr, ]); const tokens = accountInfos.map((info) => info != undefined ? deserializeAccount(info.data) : undefined ); const inputTokenAccount = tokens[0], outputTokenAccount = tokens[1]; if (inputTokenAccount === undefined || outputTokenAccount === undefined) { throw new Error("Unable to fetch accounts for specified tokens."); } return { inputTokenCount: new u64(inputTokenAccount.amount), outputTokenCount: new u64(outputTokenAccount.amount), }; } ================================================ FILE: src/public/utils/web3/index.ts ================================================ export * from "./ata-utils"; export * from "./deserialize-account"; export * from "./get-token-count"; export * from "./transactions"; ================================================ FILE: src/public/utils/web3/instructions/farm-instructions.ts ================================================ import { Aquafarm } from "@orca-so/aquafarm"; import { u64 } from "@solana/spl-token"; import { PublicKey } from "@solana/web3.js"; import { Instruction, emptyInstruction } from "../.."; import { Owner } from "../key-utils"; export const createInitUserFarmInstruction = async ( farm: Aquafarm, userFarmPublicKey: PublicKey, owner: Owner ): Promise => { if (farm.isUserFarmInitialized()) { return emptyInstruction; } const initUserFarmIx = farm.constructInitUserFarmIx(owner.publicKey, userFarmPublicKey); return { instructions: [initUserFarmIx], cleanupInstructions: [], signers: owner.signer ? [owner.signer] : [], }; }; export const createFarmConvertTokensInstruction = async ( farm: Aquafarm, userTransferAuthorityPublicKey: PublicKey, userBaseTokenPublicKey: PublicKey, userFarmTokenPublicKey: PublicKey, userRewardTokenPublicKey: PublicKey, baseTokenAmount: u64, userFarmPublicKey: PublicKey, owner: Owner ): Promise => { let convertIx; if (!farm.userFarm) { convertIx = farm.constructConvertTokensIx( userTransferAuthorityPublicKey, userBaseTokenPublicKey, userFarmTokenPublicKey, userRewardTokenPublicKey, baseTokenAmount, userFarmPublicKey, owner.publicKey ); } else { convertIx = farm.constructConvertTokensIx( userTransferAuthorityPublicKey, userBaseTokenPublicKey, userFarmTokenPublicKey, userRewardTokenPublicKey, baseTokenAmount ); } if (!convertIx) { throw new Error("constructConvertTokensIx returned null"); } return { instructions: [convertIx], cleanupInstructions: [], signers: owner.signer ? [owner.signer] : [], }; }; export const createFarmRevertTokensInstruction = async ( farm: Aquafarm, userBurnAuthorityPublicKey: PublicKey, userBaseTokenPublicKey: PublicKey, userFarmTokenPublicKey: PublicKey, userRewardTokenPublicKey: PublicKey, baseTokenAmount: u64, owner: Owner ): Promise => { const revertIx = farm.constructRevertTokensIx( userBurnAuthorityPublicKey, userBaseTokenPublicKey, userFarmTokenPublicKey, userRewardTokenPublicKey, baseTokenAmount ); if (!revertIx) { throw new Error("constructRevertTokensIx returned null"); } return { instructions: [revertIx], cleanupInstructions: [], signers: owner.signer ? [owner.signer] : [], }; }; export const createFarmHarvestRewardInstruction = async ( farm: Aquafarm, userRewardTokenPublicKey: PublicKey, owner: Owner ): Promise => { const harvestIx = farm.constructHarvestIx(userRewardTokenPublicKey); return { instructions: [harvestIx], cleanupInstructions: [], signers: owner.signer ? [owner.signer] : [], }; }; ================================================ FILE: src/public/utils/web3/instructions/pool-instructions.ts ================================================ import { Token, TOKEN_PROGRAM_ID, u64 } from "@solana/spl-token"; import { TokenSwap } from "@solana/spl-token-swap"; import { Keypair, PublicKey } from "@solana/web3.js"; import { OrcaPoolParams } from "../../../../model/orca/pool/pool-types"; import { OrcaPoolToken } from "../../../pools"; import { Instruction } from "../../models"; import { Owner } from "../key-utils"; export const createApprovalInstruction = ( ownerAddress: PublicKey, approveAmount: u64, tokenUserAddress: PublicKey, userTransferAuthority?: Keypair ): { userTransferAuthority: Keypair } & Instruction => { userTransferAuthority = userTransferAuthority || new Keypair(); const approvalInstruction = Token.createApproveInstruction( TOKEN_PROGRAM_ID, tokenUserAddress, userTransferAuthority.publicKey, ownerAddress, [], approveAmount ); const revokeInstruction = Token.createRevokeInstruction( TOKEN_PROGRAM_ID, tokenUserAddress, ownerAddress, [] ); return { userTransferAuthority: userTransferAuthority, instructions: [approvalInstruction], cleanupInstructions: [revokeInstruction], signers: [userTransferAuthority], }; }; export const createSwapInstruction = async ( poolParams: OrcaPoolParams, owner: Owner, inputToken: OrcaPoolToken, inputTokenUserAddress: PublicKey, outputToken: OrcaPoolToken, outputTokenUserAddress: PublicKey, amountIn: u64, minimumAmountOut: u64, userTransferAuthority: PublicKey, orcaTokenSwapId: PublicKey ): Promise => { const amountInU64 = amountIn; const minimumAmountOutU64 = minimumAmountOut; const [authorityForPoolAddress] = await PublicKey.findProgramAddress( [poolParams.address.toBuffer()], orcaTokenSwapId ); const swapInstruction = TokenSwap.swapInstruction( poolParams.address, authorityForPoolAddress, userTransferAuthority, inputTokenUserAddress, inputToken.addr, outputToken.addr, outputTokenUserAddress, poolParams.poolTokenMint, poolParams.feeAccount, null, orcaTokenSwapId, TOKEN_PROGRAM_ID, amountInU64, minimumAmountOutU64 ); return { instructions: [swapInstruction], cleanupInstructions: [], signers: owner.signer ? [owner.signer] : [], }; }; export const createDepositInstruction = async ( poolParams: OrcaPoolParams, userTransferAuthorityPublicKey: PublicKey, userTokenAPublicKey: PublicKey, userTokenBPublicKey: PublicKey, userPoolTokenPublicKey: PublicKey, poolTokenAmount: u64, maximumTokenA: u64, maximumTokenB: u64, tokenAPublicKey: PublicKey, tokenBPublicKey: PublicKey, orcaTokenSwapId: PublicKey, owner: Owner ): Promise => { const depositInstruction = TokenSwap.depositAllTokenTypesInstruction( poolParams.address, poolParams.authority, userTransferAuthorityPublicKey, userTokenAPublicKey, userTokenBPublicKey, tokenAPublicKey, tokenBPublicKey, poolParams.poolTokenMint, userPoolTokenPublicKey, orcaTokenSwapId, TOKEN_PROGRAM_ID, poolTokenAmount, maximumTokenA, maximumTokenB ); return { instructions: [depositInstruction], cleanupInstructions: [], signers: owner.signer ? [owner.signer] : [], }; }; export const createWithdrawInstruction = async ( poolParams: OrcaPoolParams, userTransferAuthorityPublicKey: PublicKey, userTokenAPublicKey: PublicKey, userTokenBPublicKey: PublicKey, userPoolTokenPublicKey: PublicKey, poolTokenAmount: u64, minimumTokenA: u64, minimumTokenB: u64, tokenAPublicKey: PublicKey, tokenBPublicKey: PublicKey, orcaTokenSwapId: PublicKey, owner: Owner ): Promise => { const withdrawInstruction = TokenSwap.withdrawAllTokenTypesInstruction( poolParams.address, poolParams.authority, userTransferAuthorityPublicKey, poolParams.poolTokenMint, poolParams.feeAccount, userPoolTokenPublicKey, tokenAPublicKey, tokenBPublicKey, userTokenAPublicKey, userTokenBPublicKey, orcaTokenSwapId, TOKEN_PROGRAM_ID, poolTokenAmount, minimumTokenA, minimumTokenB ); return { instructions: [withdrawInstruction], cleanupInstructions: [], signers: owner.signer ? [owner.signer] : [], }; }; ================================================ FILE: src/public/utils/web3/instructions/token-instructions.ts ================================================ import { AccountLayout, Token, TOKEN_PROGRAM_ID, u64 } from "@solana/spl-token"; import { Keypair, PublicKey, SystemProgram, SYSVAR_RENT_PUBKEY, TransactionInstruction, } from "@solana/web3.js"; import { Instruction, SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID } from "../.."; import { ResolvedTokenAddressInstruction } from "../ata-utils"; import { Owner } from "../key-utils"; export const createWSOLAccountInstructions = ( owner: PublicKey, solMint: PublicKey, amountIn: u64, rentExemptLamports: number ): ResolvedTokenAddressInstruction => { const tempAccount = new Keypair(); const createAccountInstruction = SystemProgram.createAccount({ fromPubkey: owner, newAccountPubkey: tempAccount.publicKey, lamports: amountIn.toNumber() + rentExemptLamports, space: AccountLayout.span, programId: TOKEN_PROGRAM_ID, }); const initAccountInstruction = Token.createInitAccountInstruction( TOKEN_PROGRAM_ID, solMint, tempAccount.publicKey, owner ); const closeWSOLAccountInstruction = Token.createCloseAccountInstruction( TOKEN_PROGRAM_ID, tempAccount.publicKey, owner, owner, [] ); return { address: tempAccount.publicKey, instructions: [createAccountInstruction, initAccountInstruction], cleanupInstructions: [closeWSOLAccountInstruction], signers: [tempAccount], }; }; export function createAssociatedTokenAccountInstruction( associatedTokenAddress: PublicKey, fundSource: PublicKey, destination: PublicKey, tokenMint: PublicKey, fundAddressOwner: Owner ): Instruction { const systemProgramId = new PublicKey("11111111111111111111111111111111"); const keys = [ { pubkey: fundSource, isSigner: true, isWritable: true, }, { pubkey: associatedTokenAddress, isSigner: false, isWritable: true, }, { pubkey: destination, isSigner: false, isWritable: false, }, { pubkey: tokenMint, isSigner: false, isWritable: false, }, { pubkey: systemProgramId, isSigner: false, isWritable: false, }, { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false, }, { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false, }, ]; const createATAInstruction = new TransactionInstruction({ keys, programId: SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID, data: Buffer.from([]), }); return { instructions: [createATAInstruction], cleanupInstructions: [], signers: fundAddressOwner.signer ? [fundAddressOwner.signer] : [], }; } ================================================ FILE: src/public/utils/web3/key-utils.ts ================================================ import { Keypair, PublicKey, Signer } from "@solana/web3.js"; type _Owner = Keypair | PublicKey; export class Owner { private readonly _owner: _Owner; constructor(owner: _Owner) { this._owner = owner; } get publicKey(): PublicKey { if (Owner.isKeyPair(this._owner)) { return this._owner.publicKey; } return this._owner; } get signer(): Signer | undefined { return Owner.isKeyPair(this._owner) ? this._owner : undefined; } get isKeyPair(): boolean { return Owner.isKeyPair(this._owner); } get isPublicKey(): boolean { return Owner.isPublicKey(this._owner); } static isKeyPair(owner: _Owner): owner is Keypair { return (owner as Keypair).secretKey !== undefined; } static isPublicKey(owner: _Owner): owner is PublicKey { return !Owner.isKeyPair(owner); } } ================================================ FILE: src/public/utils/web3/transactions/index.ts ================================================ export * from "./transaction-builder"; ================================================ FILE: src/public/utils/web3/transactions/transaction-builder.ts ================================================ import { Connection, PublicKey, sendAndConfirmTransaction, Transaction, TransactionCtorFields, Signer, Keypair, TransactionInstruction, } from "@solana/web3.js"; import { Instruction } from "../.."; import { TransactionPayload } from "../../models"; import { Owner } from "../key-utils"; export class TransactionBuilder { private connection: Connection; private feePayer: PublicKey; private instructions: Instruction[]; private owner: Owner; constructor(connection: Connection, feePayer: PublicKey, owner: Owner) { this.connection = connection; this.feePayer = feePayer; this.instructions = []; this.owner = owner; } addInstruction(instruction: Instruction): TransactionBuilder { this.instructions.push(instruction); return this; } async build(): Promise { const recentBlockHash = (await this.connection.getRecentBlockhash("singleGossip")).blockhash; const txFields: TransactionCtorFields = { recentBlockhash: recentBlockHash, feePayer: this.feePayer, }; let instructions: TransactionInstruction[] = []; let cleanupInstructions: TransactionInstruction[] = []; let signers: Signer[] = []; this.instructions.forEach((curr) => { instructions = instructions.concat(curr.instructions); cleanupInstructions = curr.cleanupInstructions.concat(cleanupInstructions); signers = signers.concat(curr.signers); }); const transaction = new Transaction(txFields); transaction.add(...instructions.concat(cleanupInstructions)); transaction.feePayer = this.feePayer; return { transaction: transaction, signers: signers, execute: this.owner.isKeyPair ? async () => { return sendAndConfirmTransaction(this.connection, transaction, signers); } : async () => { throw new Error( "Please use a Keypair for the owner parameter to enable the execute function" ); }, }; } } ================================================ FILE: src/tsconfig.json ================================================ { "extends": "../tsconfig-base.json", "compilerOptions": { "composite": true, }, } ================================================ FILE: test/model/orca/quote/constant-product-quote.test.ts ================================================ import { u64 } from "@solana/spl-token"; import Decimal from "decimal.js"; import { OrcaToken } from "../../../../src"; import * as Token from "../../../../src/constants/tokens"; import { CurveType } from "../../../../src/model/orca/pool/pool-types"; import { QuoteBuilder, QuoteBuilderFactory, QuotePoolParams, } from "../../../../src/model/quote/quote-builder"; import { DecimalUtil, OrcaU64, Percentage } from "../../../../src/public"; import { defaultQuotePoolParams, defaultSOLToken, defaultUsdcToken } from "../../../test-utils"; import { Builder } from "builder-pattern"; const builder: QuoteBuilder = QuoteBuilderFactory.getBuilder( CurveType.ConstantProduct ) as QuoteBuilder; test("Input & Output tokens have different scale", () => { const params = Builder(defaultQuotePoolParams).build(); const quote = builder.buildQuote( params, DecimalUtil.toU64(new Decimal(10), params.inputToken.scale) ); expect(quote.getRate()).toEqual(new Decimal(24.175536)); expect(quote.getPriceImpact()).toEqual(new Decimal(0.036059)); expect(quote.getLPFees()).toEqual(new OrcaU64(new u64("30000000"), params.inputToken.scale)); expect(quote.getNetworkFees()).toEqual(new OrcaU64(new u64("10000"))); expect(quote.getMinOutputAmount()).toEqual( new OrcaU64(new u64("241513608"), params.outputToken.scale) ); expect(quote.getExpectedOutputAmount()).toEqual( new OrcaU64(new u64("241755364"), params.outputToken.scale) ); }); test("Input & Output tokens have the same scale", () => { const usdcTokenWithSameScale = Builder(Token.usdcToken) .scale(Token.solToken.scale) .build(); const params = Builder(defaultQuotePoolParams) .outputTokenCount(new u64("670432580208000")) .outputToken(usdcTokenWithSameScale) .build(); const quote = builder.buildQuote( params, DecimalUtil.toU64(new Decimal(10), params.inputToken.scale) ); expect(quote.getRate()).toEqual(new Decimal(24.175536404)); expect(quote.getPriceImpact()).toEqual(new Decimal(0.036059609)); expect(quote.getLPFees()).toEqual(new OrcaU64(new u64("30000000"), params.inputToken.scale)); expect(quote.getNetworkFees()).toEqual(new OrcaU64(new u64("10000"))); expect(quote.getMinOutputAmount()).toEqual( new OrcaU64(new u64("241513608677"), params.outputToken.scale) ); expect(quote.getExpectedOutputAmount()).toEqual( new OrcaU64(new u64("241755364042"), params.outputToken.scale) ); }); test("Input trade amount equal 0 ", () => { const params = Builder(defaultQuotePoolParams).build(); const quote = builder.buildQuote( params, DecimalUtil.toU64(new Decimal(0), params.inputToken.scale) ); expect(quote.getRate()).toEqual(new Decimal(0)); expect(quote.getPriceImpact()).toEqual(new Decimal(0)); expect(quote.getLPFees()).toEqual(new OrcaU64(new u64("0"), params.inputToken.scale)); expect(quote.getNetworkFees()).toEqual(new OrcaU64(new u64("10000"))); expect(quote.getMinOutputAmount()).toEqual(new OrcaU64(new u64("0"), params.outputToken.scale)); expect(quote.getExpectedOutputAmount()).toEqual( new OrcaU64(new u64("0"), params.outputToken.scale) ); }); test("Input Token Count is zero", () => { const params = Builder(defaultQuotePoolParams) .inputTokenCount(new u64("0")) .build(); const quote = builder.buildQuote( params, DecimalUtil.toU64(new Decimal(10), params.inputToken.scale) ); expect(quote.getRate()).toEqual(new Decimal(67043.258021)); expect(quote.getPriceImpact()).toEqual(new Decimal(0)); expect(quote.getLPFees()).toEqual(new OrcaU64(new u64("30000000"), params.inputToken.scale)); expect(quote.getNetworkFees()).toEqual(new OrcaU64(new u64("10000"))); expect(quote.getMinOutputAmount()).toEqual( new OrcaU64(new u64("669762147627"), params.outputToken.scale) ); expect(quote.getExpectedOutputAmount()).toEqual( new OrcaU64(new u64("670432580208"), params.outputToken.scale) ); }); test("Output Token Count is zero", () => { const params = Builder(defaultQuotePoolParams) .outputTokenCount(new u64("0")) .build(); const quote = builder.buildQuote( params, DecimalUtil.toU64(new Decimal(10), params.inputToken.scale) ); expect(quote.getRate()).toEqual(new Decimal(0)); expect(quote.getPriceImpact()).toEqual(new Decimal(0)); expect(quote.getLPFees()).toEqual(new OrcaU64(new u64("30000000"), params.inputToken.scale)); expect(quote.getNetworkFees()).toEqual(new OrcaU64(new u64("10000"))); expect(quote.getMinOutputAmount()).toEqual(new OrcaU64(new u64("0"), params.outputToken.scale)); expect(quote.getExpectedOutputAmount()).toEqual( new OrcaU64(new u64("0"), params.outputToken.scale) ); }); test("Minimum fee of one token", () => { const params = Builder(defaultQuotePoolParams) // 1,000,000 defaultUSDCToken = 10,000 defaultSOLToken .inputToken(defaultUsdcToken) .inputTokenCount(new u64("1000000000000")) .outputToken(defaultSOLToken) .outputTokenCount(new u64("10000000000000")) .build(); const quote = builder.buildQuote( params, DecimalUtil.toU64(new Decimal("0.0001"), params.inputToken.scale) ); expect(quote.getRate()).toEqual(new Decimal(0.00979)); expect(quote.getPriceImpact()).toEqual(new Decimal(0.102040816)); expect(quote.getLPFees()).toEqual(new OrcaU64(new u64("2"), params.inputToken.scale)); expect(quote.getNetworkFees()).toEqual(new OrcaU64(new u64("10000"))); expect(quote.getMinOutputAmount()).toEqual(new OrcaU64(new u64("978"), params.outputToken.scale)); expect(quote.getExpectedOutputAmount()).toEqual( new OrcaU64(new u64("979"), params.outputToken.scale) ); }); describe("Too small inputTradeAmount", () => { test("Too small inputTradeAmount (1 unit)", () => { const params = Builder(defaultQuotePoolParams) // 1,000,000 defaultUSDCToken = 10,000 defaultSOLToken .inputToken(defaultUsdcToken) .inputTokenCount(new u64("1000000000000")) .outputToken(defaultSOLToken) .outputTokenCount(new u64("10000000000000")) .build(); const quote = builder.buildQuote( params, DecimalUtil.toU64(new Decimal("0.000001"), params.inputToken.scale) ); expect(quote.getRate()).toEqual(new Decimal(0)); expect(quote.getPriceImpact()).toEqual(new Decimal(0)); expect(quote.getLPFees()).toEqual(new OrcaU64(new u64("2"), params.inputToken.scale)); expect(quote.getNetworkFees()).toEqual(new OrcaU64(new u64("10000"))); expect(quote.getMinOutputAmount()).toEqual(new OrcaU64(new u64("0"), params.outputToken.scale)); expect(quote.getExpectedOutputAmount()).toEqual( new OrcaU64(new u64("0"), params.outputToken.scale) ); }); test("Too small inputTradeAmount (2 unit)", () => { const params = Builder(defaultQuotePoolParams) // 1,000,000 defaultUSDCToken = 10,000 defaultSOLToken .inputToken(defaultUsdcToken) .inputTokenCount(new u64("1000000000000")) .outputToken(defaultSOLToken) .outputTokenCount(new u64("10000000000000")) .build(); const quote = builder.buildQuote( params, DecimalUtil.toU64(new Decimal("0.000002"), params.inputToken.scale) ); expect(quote.getRate()).toEqual(new Decimal(0)); expect(quote.getPriceImpact()).toEqual(new Decimal(0)); expect(quote.getLPFees()).toEqual(new OrcaU64(new u64("2"), params.inputToken.scale)); expect(quote.getNetworkFees()).toEqual(new OrcaU64(new u64("10000"))); expect(quote.getMinOutputAmount()).toEqual(new OrcaU64(new u64("0"), params.outputToken.scale)); expect(quote.getExpectedOutputAmount()).toEqual( new OrcaU64(new u64("0"), params.outputToken.scale) ); }); test("Too small inputTradeAmount (3 unit)", () => { const params = Builder(defaultQuotePoolParams) // 1,000,000 defaultUSDCToken = 10,000 defaultSOLToken .inputToken(defaultUsdcToken) .inputTokenCount(new u64("1000000000000")) .outputToken(defaultSOLToken) .outputTokenCount(new u64("10000000000000")) .build(); const quote = builder.buildQuote( params, DecimalUtil.toU64(new Decimal("0.000003"), params.inputToken.scale) ); expect(quote.getRate()).toEqual(new Decimal(0.003)); expect(quote.getPriceImpact()).toEqual(new Decimal(10.0)); expect(quote.getLPFees()).toEqual(new OrcaU64(new u64("2"), params.inputToken.scale)); expect(quote.getNetworkFees()).toEqual(new OrcaU64(new u64("10000"))); expect(quote.getMinOutputAmount()).toEqual(new OrcaU64(new u64("8"), params.outputToken.scale)); expect(quote.getExpectedOutputAmount()).toEqual( new OrcaU64(new u64("9"), params.outputToken.scale) ); }); }); describe("Slippage tolerance", () => { test("tolerance equal 0", () => { const params = Builder(defaultQuotePoolParams) .slippageTolerance(Percentage.fromDecimal(new Decimal(0))) .build(); const quote = builder.buildQuote( params, DecimalUtil.toU64(new Decimal(10), params.inputToken.scale) ); expect(quote.getRate()).toEqual(new Decimal(24.175536)); expect(quote.getPriceImpact()).toEqual(new Decimal(0.036059)); expect(quote.getLPFees()).toEqual(new OrcaU64(new u64("30000000"), params.inputToken.scale)); expect(quote.getNetworkFees()).toEqual(new OrcaU64(new u64("10000"))); expect(quote.getMinOutputAmount()).toEqual( new OrcaU64(new u64("241755364"), params.outputToken.scale) ); expect(quote.getExpectedOutputAmount()).toEqual( new OrcaU64(new u64("241755364"), params.outputToken.scale) ); }); test("tolerance equals 0.1", () => { const params = Builder(defaultQuotePoolParams) .slippageTolerance(Percentage.fromDecimal(new Decimal(0.1))) .build(); const quote = builder.buildQuote( params, DecimalUtil.toU64(new Decimal(10), params.inputToken.scale) ); expect(quote.getRate()).toEqual(new Decimal(24.175536)); expect(quote.getPriceImpact()).toEqual(new Decimal(0.036059)); expect(quote.getLPFees()).toEqual(new OrcaU64(new u64("30000000"), params.inputToken.scale)); expect(quote.getNetworkFees()).toEqual(new OrcaU64(new u64("10000"))); expect(quote.getMinOutputAmount()).toEqual( new OrcaU64(new u64("241513608"), params.outputToken.scale) ); expect(quote.getExpectedOutputAmount()).toEqual( new OrcaU64(new u64("241755364"), params.outputToken.scale) ); }); test("tolerance equals 1 ", () => { const params = Builder(defaultQuotePoolParams) .slippageTolerance(Percentage.fromDecimal(new Decimal(1))) .build(); const quote = builder.buildQuote( params, DecimalUtil.toU64(new Decimal(10), params.inputToken.scale) ); expect(quote.getRate()).toEqual(new Decimal(24.175536)); expect(quote.getPriceImpact()).toEqual(new Decimal(0.036059)); expect(quote.getLPFees()).toEqual(new OrcaU64(new u64("30000000"), params.inputToken.scale)); expect(quote.getNetworkFees()).toEqual(new OrcaU64(new u64("10000"))); expect(quote.getMinOutputAmount()).toEqual( new OrcaU64(new u64("239337810"), params.outputToken.scale) ); expect(quote.getExpectedOutputAmount()).toEqual( new OrcaU64(new u64("241755364"), params.outputToken.scale) ); }); }); ================================================ FILE: test/model/orca/quote/stable-quote.test.ts ================================================ import { u64 } from "@solana/spl-token"; import Decimal from "decimal.js"; import { CurveType } from "../../../../src/model/orca/pool/pool-types"; import { QuoteBuilder, QuoteBuilderFactory, QuotePoolParams, } from "../../../../src/model/quote/quote-builder"; import { DecimalUtil, OrcaU64, Percentage } from "../../../../src/public"; import { stableQuotePoolParams } from "../../../test-utils"; import { Builder } from "builder-pattern"; const builder: QuoteBuilder = QuoteBuilderFactory.getBuilder(CurveType.Stable) as QuoteBuilder; test("Input & Output tokens have same scale", () => { const params = Builder(stableQuotePoolParams).build(); const quote = builder.buildQuote( params, DecimalUtil.toU64(new Decimal(1e6), params.inputToken.scale) ); expect(quote.getRate()).toEqual(new Decimal(0.9987)); expect(quote.getPriceImpact()).toEqual(new Decimal(0.055222)); expect(quote.getLPFees()).toEqual(new OrcaU64(new u64("700000000"), params.inputToken.scale)); expect(quote.getNetworkFees()).toEqual(new OrcaU64(new u64("10000"))); expect(quote.getMinOutputAmount()).toEqual( new OrcaU64(new u64("997701271318"), params.outputToken.scale) ); expect(quote.getExpectedOutputAmount()).toEqual( new OrcaU64(new u64("998699971290"), params.outputToken.scale) ); }); test("Input trade amount equal 0 ", () => { const params = Builder(stableQuotePoolParams).build(); const quote = builder.buildQuote( params, DecimalUtil.toU64(new Decimal(0), params.inputToken.scale) ); expect(quote.getRate()).toEqual(new Decimal(0)); expect(quote.getPriceImpact()).toEqual(new Decimal(0)); expect(quote.getLPFees()).toEqual(new OrcaU64(new u64("0"), params.inputToken.scale)); expect(quote.getNetworkFees()).toEqual(new OrcaU64(new u64("10000"))); expect(quote.getMinOutputAmount()).toEqual(new OrcaU64(new u64("0"), params.outputToken.scale)); expect(quote.getExpectedOutputAmount()).toEqual( new OrcaU64(new u64("0"), params.outputToken.scale) ); }); test("Input Token Count is zero", () => { const params = Builder(stableQuotePoolParams) .inputTokenCount(new u64("0")) .build(); const quote = builder.buildQuote( params, DecimalUtil.toU64(new Decimal(1e6), params.inputToken.scale) ); expect(quote.getRate()).toEqual(new Decimal(19.577821)); expect(quote.getPriceImpact()).toEqual(new Decimal(0)); expect(quote.getLPFees()).toEqual(new OrcaU64(new u64("700000000"), params.inputToken.scale)); expect(quote.getNetworkFees()).toEqual(new OrcaU64(new u64("10000"))); // Recreating `OrcaU64` objects for the following checks to prevent the BN vs u64 mismatch error const minOutputAmount = quote.getMinOutputAmount(); expect(new OrcaU64(minOutputAmount.toU64(), minOutputAmount.scale)).toEqual( new OrcaU64(new u64("19558243405204"), params.outputToken.scale) ); const expectedOutputAmount = quote.getExpectedOutputAmount(); expect(new OrcaU64(expectedOutputAmount.toU64(), expectedOutputAmount.scale)).toEqual( new OrcaU64(new u64("19577821226431"), params.outputToken.scale) ); }); test("Output Token Count is zero", () => { const params = Builder(stableQuotePoolParams) .outputTokenCount(new u64("0")) .build(); const quote = builder.buildQuote( params, DecimalUtil.toU64(new Decimal(1e6), params.inputToken.scale) ); expect(quote.getRate()).toEqual(new Decimal(0)); expect(quote.getPriceImpact()).toEqual(new Decimal(0)); expect(quote.getLPFees()).toEqual(new OrcaU64(new u64("700000000"), params.inputToken.scale)); expect(quote.getNetworkFees()).toEqual(new OrcaU64(new u64("10000"))); expect(quote.getMinOutputAmount()).toEqual(new OrcaU64(new u64("0"), params.outputToken.scale)); expect(quote.getExpectedOutputAmount()).toEqual( new OrcaU64(new u64("0"), params.outputToken.scale) ); }); describe("Slippage tolerance", () => { test("tolerance equal 0%", () => { const params = Builder(stableQuotePoolParams) .slippageTolerance(Percentage.fromDecimal(new Decimal(0))) .build(); const quote = builder.buildQuote( params, DecimalUtil.toU64(new Decimal(1e6), params.inputToken.scale) ); expect(quote.getRate()).toEqual(new Decimal(0.9987)); expect(quote.getPriceImpact()).toEqual(new Decimal(0.055222)); expect(quote.getLPFees()).toEqual(new OrcaU64(new u64("700000000"), params.inputToken.scale)); expect(quote.getNetworkFees()).toEqual(new OrcaU64(new u64("10000"))); expect(quote.getMinOutputAmount()).toEqual( new OrcaU64(new u64("998699971290"), params.outputToken.scale) ); expect(quote.getExpectedOutputAmount()).toEqual( new OrcaU64(new u64("998699971290"), params.outputToken.scale) ); }); test("tolerance equals 0.1%", () => { const params = Builder(stableQuotePoolParams) .slippageTolerance(Percentage.fromDecimal(new Decimal(0.1))) .build(); const quote = builder.buildQuote( params, DecimalUtil.toU64(new Decimal(1e6), params.inputToken.scale) ); expect(quote.getRate()).toEqual(new Decimal(0.9987)); expect(quote.getPriceImpact()).toEqual(new Decimal(0.055222)); expect(quote.getLPFees()).toEqual(new OrcaU64(new u64("700000000"), params.inputToken.scale)); expect(quote.getNetworkFees()).toEqual(new OrcaU64(new u64("10000"))); expect(quote.getMinOutputAmount()).toEqual( new OrcaU64(new u64("997701271318"), params.outputToken.scale) ); expect(quote.getExpectedOutputAmount()).toEqual( new OrcaU64(new u64("998699971290"), params.outputToken.scale) ); }); test("tolerance equals 1%", () => { const params = Builder(stableQuotePoolParams) .slippageTolerance(Percentage.fromDecimal(new Decimal(1))) .build(); const quote = builder.buildQuote( params, DecimalUtil.toU64(new Decimal(1e6), params.inputToken.scale) ); expect(quote.getRate()).toEqual(new Decimal(0.9987)); expect(quote.getPriceImpact()).toEqual(new Decimal(0.055222)); expect(quote.getLPFees()).toEqual(new OrcaU64(new u64("700000000"), params.inputToken.scale)); expect(quote.getNetworkFees()).toEqual(new OrcaU64(new u64("10000"))); expect(quote.getMinOutputAmount()).toEqual( new OrcaU64(new u64("988712971577"), params.outputToken.scale) ); expect(quote.getExpectedOutputAmount()).toEqual( new OrcaU64(new u64("998699971290"), params.outputToken.scale) ); }); }); // Make sure that as amp goes up, a better price is quoted and price impact is lower describe("Amplification Coefficient", () => { test("amp is undefined", () => { const params = Builder(stableQuotePoolParams).amp(undefined).build(); expect(() => builder.buildQuote(params, DecimalUtil.toU64(new Decimal(1e6), params.inputToken.scale)) ).toThrow("amp param required for stable pool"); }); test("amp equals 10", () => { const params = Builder(stableQuotePoolParams).amp(new u64(10)).build(); const quote = builder.buildQuote( params, DecimalUtil.toU64(new Decimal(1e6), params.inputToken.scale) ); expect(quote.getRate()).toEqual(new Decimal(0.993818)); expect(quote.getPriceImpact()).toEqual(new Decimal(0.502629)); expect(quote.getLPFees()).toEqual(new OrcaU64(new u64("700000000"), params.inputToken.scale)); expect(quote.getNetworkFees()).toEqual(new OrcaU64(new u64("10000"))); expect(quote.getMinOutputAmount()).toEqual( new OrcaU64(new u64("992824297062"), params.outputToken.scale) ); expect(quote.getExpectedOutputAmount()).toEqual( new OrcaU64(new u64("993818115178"), params.outputToken.scale) ); }); test("amp equals 100", () => { const params = Builder(stableQuotePoolParams).amp(new u64(100)).build(); const quote = builder.buildQuote( params, DecimalUtil.toU64(new Decimal(1e6), params.inputToken.scale) ); expect(quote.getRate()).toEqual(new Decimal(0.9987)); expect(quote.getPriceImpact()).toEqual(new Decimal(0.055222)); expect(quote.getLPFees()).toEqual(new OrcaU64(new u64("700000000"), params.inputToken.scale)); expect(quote.getNetworkFees()).toEqual(new OrcaU64(new u64("10000"))); expect(quote.getMinOutputAmount()).toEqual( new OrcaU64(new u64("997701271318"), params.outputToken.scale) ); expect(quote.getExpectedOutputAmount()).toEqual( new OrcaU64(new u64("998699971290"), params.outputToken.scale) ); }); }); describe("Fee Structure", () => { test("both owner and trader fees are non-zero", () => { const params = Builder(stableQuotePoolParams) .feeStructure({ traderFee: Percentage.fromFraction(6, 10000), ownerFee: Percentage.fromFraction(1, 10000), }) .build(); const quote = builder.buildQuote( params, DecimalUtil.toU64(new Decimal(1e6), params.inputToken.scale) ); expect(quote.getRate()).toEqual(new Decimal(0.9987)); expect(quote.getPriceImpact()).toEqual(new Decimal(0.055222)); expect(quote.getLPFees()).toEqual(new OrcaU64(new u64("700000000"), params.inputToken.scale)); expect(quote.getNetworkFees()).toEqual(new OrcaU64(new u64("10000"))); expect(quote.getMinOutputAmount()).toEqual( new OrcaU64(new u64("997701271318"), params.outputToken.scale) ); expect(quote.getExpectedOutputAmount()).toEqual( new OrcaU64(new u64("998699971290"), params.outputToken.scale) ); }); test("owner fee is non-zero, trader fee is 0", () => { const params = Builder(stableQuotePoolParams) .feeStructure({ traderFee: Percentage.fromFraction(0, 10000), ownerFee: Percentage.fromFraction(1, 10000), }) .build(); const quote = builder.buildQuote( params, DecimalUtil.toU64(new Decimal(1e6), params.inputToken.scale) ); expect(quote.getRate()).toEqual(new Decimal(0.999299)); expect(quote.getPriceImpact()).toEqual(new Decimal(0.055253)); expect(quote.getLPFees()).toEqual(new OrcaU64(new u64("100000000"), params.inputToken.scale)); expect(quote.getNetworkFees()).toEqual(new OrcaU64(new u64("10000"))); expect(quote.getMinOutputAmount()).toEqual( new OrcaU64(new u64("998300007201"), params.outputToken.scale) ); expect(quote.getExpectedOutputAmount()).toEqual( new OrcaU64(new u64("999299306508"), params.outputToken.scale) ); }); test("trader fee is non-zero, owner fee is 0", () => { const params = Builder(stableQuotePoolParams) .feeStructure({ traderFee: Percentage.fromFraction(6, 10000), ownerFee: Percentage.fromFraction(0, 10000), }) .build(); const quote = builder.buildQuote( params, DecimalUtil.toU64(new Decimal(1e6), params.inputToken.scale) ); expect(quote.getRate()).toEqual(new Decimal(0.9988)); expect(quote.getPriceImpact()).toEqual(new Decimal(0.055227)); expect(quote.getLPFees()).toEqual(new OrcaU64(new u64("600000000"), params.inputToken.scale)); expect(quote.getNetworkFees()).toEqual(new OrcaU64(new u64("10000"))); expect(quote.getMinOutputAmount()).toEqual( new OrcaU64(new u64("997801060657"), params.outputToken.scale) ); expect(quote.getExpectedOutputAmount()).toEqual( new OrcaU64(new u64("998799860518"), params.outputToken.scale) ); }); test("both owner and trader fees are 0", () => { const params = Builder(stableQuotePoolParams) .feeStructure({ traderFee: Percentage.fromFraction(0, 10000), ownerFee: Percentage.fromFraction(0, 10000), }) .build(); const quote = builder.buildQuote( params, DecimalUtil.toU64(new Decimal(1e6), params.inputToken.scale) ); expect(quote.getRate()).toEqual(new Decimal(0.999399)); expect(quote.getPriceImpact()).toEqual(new Decimal(0.055258)); expect(quote.getLPFees()).toEqual(new OrcaU64(new u64(0), params.inputToken.scale)); expect(quote.getNetworkFees()).toEqual(new OrcaU64(new u64("10000"))); expect(quote.getMinOutputAmount()).toEqual( new OrcaU64(new u64("998399796479"), params.outputToken.scale) ); expect(quote.getExpectedOutputAmount()).toEqual( new OrcaU64(new u64("999399195675"), params.outputToken.scale) ); }); test("Minimum fee of one token", () => { const params = Builder(stableQuotePoolParams).build(); const quote = builder.buildQuote( params, DecimalUtil.toU64(new Decimal("0.0001"), params.inputToken.scale) ); expect(quote.getRate()).toEqual(new Decimal(0.98)); expect(quote.getPriceImpact()).toEqual(new Decimal(-1.030928)); expect(quote.getLPFees()).toEqual(new OrcaU64(new u64("2"), params.inputToken.scale)); expect(quote.getNetworkFees()).toEqual(new OrcaU64(new u64("10000"))); expect(quote.getMinOutputAmount()).toEqual( new OrcaU64(new u64("97"), params.outputToken.scale) ); expect(quote.getExpectedOutputAmount()).toEqual( new OrcaU64(new u64("98"), params.outputToken.scale) ); }); }); describe("Too small inputTradeAmount", () => { test("Too small inputTradeAmount (1 unit)", () => { const params = Builder(stableQuotePoolParams).build(); const quote = builder.buildQuote( params, DecimalUtil.toU64(new Decimal("0.000001"), params.inputToken.scale) ); expect(quote.getRate()).toEqual(new Decimal(0)); expect(quote.getPriceImpact()).toEqual(new Decimal(0)); expect(quote.getLPFees()).toEqual(new OrcaU64(new u64("2"), params.inputToken.scale)); expect(quote.getNetworkFees()).toEqual(new OrcaU64(new u64("10000"))); expect(quote.getMinOutputAmount()).toEqual(new OrcaU64(new u64("0"), params.outputToken.scale)); expect(quote.getExpectedOutputAmount()).toEqual( new OrcaU64(new u64("0"), params.outputToken.scale) ); }); test("Too small inputTradeAmount (2 unit)", () => { const params = Builder(stableQuotePoolParams).build(); const quote = builder.buildQuote( params, DecimalUtil.toU64(new Decimal("0.000002"), params.inputToken.scale) ); expect(quote.getRate()).toEqual(new Decimal(0)); expect(quote.getPriceImpact()).toEqual(new Decimal(0)); expect(quote.getLPFees()).toEqual(new OrcaU64(new u64("2"), params.inputToken.scale)); expect(quote.getNetworkFees()).toEqual(new OrcaU64(new u64("10000"))); expect(quote.getMinOutputAmount()).toEqual(new OrcaU64(new u64("0"), params.outputToken.scale)); expect(quote.getExpectedOutputAmount()).toEqual( new OrcaU64(new u64("0"), params.outputToken.scale) ); }); test("Too small inputTradeAmount (3 unit)", () => { const params = Builder(stableQuotePoolParams).build(); const quote = builder.buildQuote( params, DecimalUtil.toU64(new Decimal("0.000003"), params.inputToken.scale) ); expect(quote.getRate()).toEqual(new Decimal(0.333333)); expect(quote.getPriceImpact()).toEqual(new Decimal(0)); expect(quote.getLPFees()).toEqual(new OrcaU64(new u64("2"), params.inputToken.scale)); expect(quote.getNetworkFees()).toEqual(new OrcaU64(new u64("10000"))); expect(quote.getMinOutputAmount()).toEqual(new OrcaU64(new u64("0"), params.outputToken.scale)); expect(quote.getExpectedOutputAmount()).toEqual( new OrcaU64(new u64("1"), params.outputToken.scale) ); }); }); ================================================ FILE: test/public/utils/orca-u64.test.ts ================================================ import { u64 } from "@solana/spl-token"; import Decimal from "decimal.js"; import { OrcaU64 } from "../../../src/public"; // OrcaU64.fromDecimal describe.each([ { value: 0, scale: 9, expectedValue: new u64("0"), expectedScale: 9 }, { value: 25000, scale: 5, expectedValue: new u64("2500000000"), expectedScale: 5 }, { value: 15.58942, scale: 6, expectedValue: new u64("15589420"), expectedScale: 6 }, { value: 15.58942, scale: 6.7, expectedValue: new u64("15589420"), expectedScale: 6 }, ])("fromDecimal($value, $decimals)", ({ value, scale: decimals, expectedValue, expectedScale }) => { test(`returns {${expectedValue}, ${expectedScale}}`, () => { expect(OrcaU64.fromDecimal(new Decimal(value), decimals)).toEqual( new OrcaU64(expectedValue, expectedScale) ); }); }); // OrcaU64.fromNumber describe.each([ { value: 0, scale: 9, expectedValue: new u64("0"), expectedScale: 9 }, { value: 25000, scale: 5, expectedValue: new u64("2500000000"), expectedScale: 5 }, { value: 15.58942, scale: 6, expectedValue: new u64("15589420"), expectedScale: 6 }, { value: 15.58942, scale: 6.7, expectedValue: new u64("15589420"), expectedScale: 6 }, ])("fromNumber($value, $decimals)", ({ value, scale: decimals, expectedValue, expectedScale }) => { test(`returns {${expectedValue}, ${expectedScale}}`, () => { expect(OrcaU64.fromNumber(value, decimals)).toEqual(new OrcaU64(expectedValue, expectedScale)); }); }); // OrcaU64.fromU64 describe.each([ { value: new u64(0), scale: 9, expectedValue: new u64("0"), expectedScale: 9 }, { value: new u64(25000), scale: 5, expectedValue: new u64("25000"), expectedScale: 5 }, { value: new u64(15589420), scale: 6, expectedValue: new u64("15589420"), expectedScale: 6 }, { value: new u64(1), scale: 6.7, expectedValue: new u64("1"), expectedScale: 6, }, ])("fromU64($value, $decimals)", ({ value, scale: decimals, expectedValue, expectedScale }) => { test(`returns {${expectedValue}, ${expectedScale}}`, () => { expect(OrcaU64.fromU64(value, decimals)).toEqual(new OrcaU64(expectedValue, expectedScale)); }); }); // OrcaU64.toDecimal describe.each([ { value: OrcaU64.fromNumber(0, 9), expectedValue: 0 }, { value: OrcaU64.fromNumber(25000, 5), expectedValue: 25000 }, { value: OrcaU64.fromNumber(15.58942, 6), expectedValue: 15.58942 }, ])("toDecimal($value)", ({ value, expectedValue }) => { test(`returns {${expectedValue}}`, () => { expect(value.toDecimal()).toEqual(new Decimal(expectedValue)); }); }); // OrcaU64.toNumber describe.each([ { value: OrcaU64.fromNumber(0, 9), expectedValue: 0 }, { value: OrcaU64.fromNumber(25000, 5), expectedValue: 25000 }, { value: OrcaU64.fromNumber(15.58942, 6), expectedValue: 15.58942 }, ])("toNumber($value)", ({ value, expectedValue }) => { test(`returns {${expectedValue}}`, () => { expect(value.toNumber()).toEqual(expectedValue); }); }); // OrcaU64.toU64 describe.each([ { value: OrcaU64.fromU64(new u64(0), 5), expectedValue: new u64(0) }, { value: OrcaU64.fromU64(new u64(25000), 5), expectedValue: new u64(25000) }, { value: OrcaU64.fromU64(new u64(15589420), 6), expectedValue: new u64(15589420) }, ])("toU64($value)", ({ value, expectedValue }) => { test(`returns {${expectedValue}}`, () => { expect(value.toU64()).toEqual(expectedValue); }); }); ================================================ FILE: test/test-utils.ts ================================================ import { u64 } from "@solana/spl-token"; import { PublicKey } from "@solana/web3.js"; import Decimal from "decimal.js"; import { OrcaToken } from "../src"; import { FeeStructure } from "../src/model/orca/pool/pool-types"; import { QuotePoolParams } from "../src/model/quote/quote-builder"; import { Percentage } from "../src/public"; export const defaultSOLToken: OrcaToken = { tag: "SOL", name: "Solana", mint: new PublicKey("So11111111111111111111111111111111111111112"), scale: 9, }; export const defaultUsdcToken: OrcaToken = { tag: "USDC", name: "USD Coin", mint: new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"), scale: 6, }; export const defaultUsdtToken: OrcaToken = { tag: "USDT", name: "Tether USD", mint: new PublicKey("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"), scale: 6, }; export const defaultEthToken: OrcaToken = { tag: "ETH", name: "Ethereum", mint: new PublicKey("2FPyTwcZLUg1MDrwsyoP4D6s1tM7hAkHYRjkNb5w6Pxk"), scale: 6, }; export const defaultFeeStructure: FeeStructure = { traderFee: Percentage.fromDecimal(new Decimal(0.2)), ownerFee: Percentage.fromDecimal(new Decimal(0.1)), }; export const defaultLamportsPerSignature: number = 5000; export const defaultQuotePoolParams: QuotePoolParams = { inputTokenCount: new u64("27638693975460"), outputTokenCount: new u64("670432580208"), inputToken: defaultSOLToken, outputToken: defaultUsdcToken, feeStructure: defaultFeeStructure, slippageTolerance: Percentage.fromDecimal(new Decimal(0.1)), lamportsPerSignature: defaultLamportsPerSignature, }; export const stableQuotePoolParams: QuotePoolParams = { inputTokenCount: new u64("19768621149413"), outputTokenCount: new u64("19577821226623"), inputToken: defaultUsdcToken, outputToken: defaultUsdtToken, feeStructure: { traderFee: Percentage.fromFraction(6, 10000), ownerFee: Percentage.fromFraction(1, 10000), }, slippageTolerance: Percentage.fromDecimal(new Decimal(0.1)), lamportsPerSignature: defaultLamportsPerSignature, amp: new u64(100), }; ================================================ FILE: test/tsconfig.json ================================================ { "extends": "../tsconfig-base.json", "references": [ { "path": "../src" } ] } ================================================ FILE: test/utils/models/percentage.test.ts ================================================ import Decimal from "decimal.js"; import { Percentage } from "../../../src"; const oneOverThousand: Percentage = Percentage.fromFraction(1, 1000); const tenOverTenThousand: Percentage = Percentage.fromFraction(1, 10000); describe.each([ { p1: Percentage.fromFraction(1, 1000), p2: Percentage.fromFraction(1, 10000), expected: Percentage.fromFraction(11, 10000), }, { p1: Percentage.fromFraction(1, 3), p2: Percentage.fromFraction(1, 7), expected: Percentage.fromFraction(10, 21), }, { p1: Percentage.fromFraction(5, 10000), p2: Percentage.fromFraction(7, 10000), expected: Percentage.fromFraction(12, 10000), }, { p1: Percentage.fromFraction(0, 1000), p2: Percentage.fromFraction(0, 10000), expected: Percentage.fromFraction(0, 10000), }, { p1: Percentage.fromFraction(30, 10000), p2: Percentage.fromFraction(5, 10000), expected: Percentage.fromFraction(35, 10000), }, ])("Percentage.add", ({ p1, p2, expected }) => { test(`add(${p1.toString()}, ${p2.toString()}}) returns {${expected.toString()}}`, () => { expect(p1.add(p2).toString()).toEqual(expected.toString()); }); }); describe.each([ { p1: Percentage.fromFraction(1, 1000), expected: new Decimal(1).div(new Decimal(1000)), }, { p1: Percentage.fromFraction(1, 3), expected: new Decimal(1).div(new Decimal(3)), }, { p1: Percentage.fromFraction(5, 10000), expected: new Decimal(5).div(new Decimal(10000)), }, { p1: Percentage.fromFraction(0, 1000), expected: new Decimal(0).div(new Decimal(1000)), }, { p1: Percentage.fromFraction(30, 0), expected: new Decimal(0), }, ])("Percentage.toDecimal", ({ p1, expected }) => { test(`toDecimal(${p1.toString()}) returns {${expected.toString()}}`, () => { expect(p1.toDecimal()).toEqual(expected); }); }); ================================================ FILE: test/utils/numbers/decimal-utils.test.ts ================================================ import { u64 } from "@solana/spl-token"; import Decimal from "decimal.js"; import { DecimalUtil } from "../../../src/public"; /** * DecimalUtil.fromU64 */ describe.each([ { input: new u64("10"), shift: 1, expectedValue: new Decimal(1) }, { input: new u64("14250748290"), shift: 9, expectedValue: new Decimal(14.25074829) }, { input: new u64("5"), shift: 3, expectedValue: new Decimal(0.005) }, { input: new u64("0"), shift: 9, expectedValue: new Decimal(0) }, { input: new u64("10"), shift: -1, expectedValue: new Decimal(100) }, ])("DecimalUtil.fromU64", ({ input, shift, expectedValue }) => { test(`fromU64(${input.toString()}, ${shift}) returns {${expectedValue}}`, () => { expect(DecimalUtil.fromU64(input, shift)).toEqual(expectedValue); }); }); describe.each([ { input: new u64("10"), expectedValue: new Decimal(10) }, { input: new u64("0"), expectedValue: new Decimal(0) }, { input: new u64("5"), expectedValue: new Decimal(5) }, ])("DecimalUtil.fromU64", ({ input, expectedValue }) => { test(`fromU64(${input.toString()}) returns {${expectedValue}}`, () => { expect(DecimalUtil.fromU64(input)).toEqual(expectedValue); }); }); /** * DecimalUtil.toU64 */ describe.each([ { input: new Decimal(10), shift: 0, expectedValue: new u64("10") }, { input: new Decimal(10), shift: 1, expectedValue: new u64("100") }, { input: new Decimal(10.5), shift: 1, expectedValue: new u64("105") }, { input: new Decimal(10.5242425252), shift: 6, expectedValue: new u64("10524242") }, ])("DecimalUtil.toU64", ({ input, shift, expectedValue }) => { test(`toU64(${input}, ${shift}) returns {${expectedValue.toString()}}`, () => { expect(DecimalUtil.toU64(input, shift)).toEqual(expectedValue); }); }); describe.each([ { input: new Decimal(10), expectedValue: new u64("10") }, { input: new Decimal(10.5), expectedValue: new u64("10") }, ])("DecimalUtil.toU64", ({ input, expectedValue }) => { test(`toU64(${input}) returns {${expectedValue.toString()}}`, () => { expect(DecimalUtil.toU64(input)).toEqual(expectedValue); }); }); describe.each([{ input: new Decimal(-15) }])("DecimalUtil.toU64", ({ input }) => { test(`toU64(${input}) throws error }`, () => { expect(() => DecimalUtil.toU64(input)).toThrow(); }); }); ================================================ FILE: test/utils/numbers/u64-utils.test.ts ================================================ import { u64 } from "@solana/spl-token"; import { PublicKey } from "@solana/web3.js"; import Decimal from "decimal.js"; import { OrcaToken } from "../../../src"; import { OrcaU64, U64Utils } from "../../../src/public"; const tokenWithScale6: OrcaToken = { tag: "tag5", scale: 6, name: "name", mint: new PublicKey("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"), }; const tokenWithScale8: OrcaToken = { ...tokenWithScale6, scale: 8, }; /** * U64Utils.toTokenU64 */ describe.each([ { input: new Decimal(10), token: tokenWithScale6, expectedValue: new u64("10000000") }, { input: new Decimal(10.5233), token: tokenWithScale6, expectedValue: new u64("10523300") }, { input: new OrcaU64(new u64("105234058"), 8), token: tokenWithScale8, expectedValue: new u64("105234058"), }, ])("U64Utils.toTokenU64", ({ input, token, expectedValue }) => { test(`toTokenU64(${input.toString()}, ${token.tag} with dec ${ token.scale }) returns {${expectedValue}}`, () => { expect(U64Utils.toTokenU64(input, token, "someVarName")).toEqual(expectedValue); }); }); describe.each([ { input: new Decimal(-15), token: tokenWithScale6 }, { input: new OrcaU64(new u64("15"), 4), token: tokenWithScale6 }, ])("U64Utils.toTokenU64", ({ input, token }) => { test(`toTokenU64(${input}) throws error }`, () => { expect(() => U64Utils.toTokenU64(input, token, "someVarName")).toThrow(); }); }); ================================================ FILE: tsconfig-base.json ================================================ { "compilerOptions": { /* Visit https://aka.ms/tsconfig.json to read more about this file */ /* Basic Options */ // "incremental": true, /* Enable incremental compilation */ "target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ // "lib": [], /* Specify library files to be included in the compilation. */ "allowJs": true, /* Allow javascript files to be compiled. */ // "checkJs": true, /* Report errors in .js files. */ // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', 'react', 'react-jsx' or 'react-jsxdev'. */ "declaration": true, /* Generates corresponding '.d.ts' file. */ // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ // "sourceMap": true, /* Generates corresponding '.map' file. */ // "outFile": "./", /* Concatenate and emit output to single file. */ "outDir": "./dist", /* Redirect output structure to the directory. */ // "rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ // "composite": true, /* Enable project compilation */ // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ // "removeComments": true, /* Do not emit comments to output. */ // "noEmit": true, /* Do not emit outputs. */ // "importHelpers": true, /* Import emit helpers from 'tslib'. */ // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ /* Strict Type-Checking Options */ "strict": true, /* Enable all strict type-checking options. */ // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ // "strictNullChecks": true, /* Enable strict null checks. */ // "strictFunctionTypes": true, /* Enable strict checking of function types. */ // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ /* Additional Checks */ // "noUnusedLocals": true, /* Report errors on unused locals. */ // "noUnusedParameters": true, /* Report errors on unused parameters. */ // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ // "noPropertyAccessFromIndexSignature": true, /* Require undeclared properties from index signatures to use element accesses. */ /* Module Resolution Options */ // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ // "types": [], /* Type declaration files to be included in compilation. */ // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ /* Source Map Options */ // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ /* Experimental Options */ // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ /* Advanced Options */ "skipLibCheck": true, /* Skip type checking of declaration files. */ "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ } }