Skip to content
This repository has been archived by the owner on Jul 17, 2023. It is now read-only.

generate new fork #56

Open
wants to merge 81 commits into
base: release/1.1.4
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
81 commits
Select commit Hold shift + click to select a range
dc9b587
Fix bug in example. The first parameter for pool.getQuote() should be…
0xalexbai Sep 23, 2021
db535ee
Aquafarm withdraw/deposit support (#41)
Sep 25, 2021
4ab426f
Bump 1.1.5, update README with aquafarm (#45)
Sep 27, 2021
7e8895b
Enhance readability. (#44)
0xalexbai Sep 29, 2021
4ed2f68
Add DoubleDip farms; Update pools, tokens (#46)
Oct 1, 2021
8e4c38c
1.1.6
Oct 1, 2021
503c244
Farm harvest, getHarvestableAmount api (#49)
Oct 7, 2021
f3de5c2
Pool add getDepositQuote, getWithdrawQuote api's (#47)
Oct 8, 2021
e7264c7
Update Usage section of readme (#48)
Oct 8, 2021
d3a95a7
Bump to 1.1.7 (#50)
Oct 8, 2021
87956e6
Update with new tokens, pools, farms (#51)
Oct 11, 2021
887e53f
Bump to 1.1.8 (#52)
Oct 11, 2021
020b738
Bump to 1.1.9; add prepublishOnly script; typo (#53)
Oct 11, 2021
9ec0ef7
Add new pools (#54)
Nov 3, 2021
8168fd2
Bump to 1.1.10
Nov 3, 2021
19b8dd3
Add getDailyEmissions api to farm (#55)
Nov 4, 2021
eeeffd6
Add new pools (#58)
Nov 4, 2021
018fada
Bump to 1.1.11
Nov 4, 2021
ad6409a
Batch get token count (#57)
Arrowana Nov 5, 2021
bcee8c8
Bump to 1.1.12
Nov 5, 2021
5866056
Update pools (#60)
Nov 10, 2021
5f22e78
Bump to 1.1.13
Nov 10, 2021
67bb4bb
Update pools (#62)
Nov 17, 2021
2e19023
Bump to 1.1.14
Nov 17, 2021
e503a7f
Add devnet (#63)
Nov 18, 2021
9e72461
Bump to 1.2.0
Nov 18, 2021
685597d
Add pool api for getQuoteWithPoolAmounts (#64)
Nov 20, 2021
4e9bafb
Bump to 1.2.1
Nov 20, 2021
44f557c
Update pool (#65)
Nov 22, 2021
955cc25
Bump to 1.2.2
Nov 22, 2021
da474ea
Update pool (#66)
Nov 24, 2021
33870c2
Bump to 1.2.3
Nov 24, 2021
7875dd1
Update pool (#67)
Nov 25, 2021
642be41
Bump to 1.2.4
Nov 25, 2021
a648442
Add comments on misnomer properties in DepositQuote and WithdrawQuote…
Dec 3, 2021
26bb84a
Bump to 1.2.5
Dec 3, 2021
cfe7855
Pool update (#73)
Dec 6, 2021
4f14831
Update README.md (#72)
bradenkeith Dec 6, 2021
58560ff
Bump to 1.2.6
Dec 6, 2021
3091bc0
Pool update (#75)
Dec 9, 2021
8ae8919
Bump to 1.2.7
Dec 9, 2021
f9568f8
Pool update (#77)
Dec 16, 2021
4aeb211
Bump to 1.2.8
Dec 16, 2021
4642d78
Pool update (#78)
Dec 23, 2021
4a89450
Bump to 1.2.9
Dec 23, 2021
22a5015
Pool update (#79)
Dec 25, 2021
d1898b4
Bump to 1.2.10
Dec 25, 2021
70518f3
Pool update (#80)
Dec 28, 2021
b56acf7
Bump to 1.2.11
Dec 28, 2021
4d574b6
Pool update (#81)
Dec 28, 2021
5163cf6
Bump to 1.2.12
Dec 28, 2021
23187ab
Pool update (#83)
Dec 30, 2021
aced804
Bump to 1.2.13
Dec 30, 2021
f89d9f3
Pool update (#84)
Jan 4, 2022
b78a8a9
Bump to 1.2.14
Jan 4, 2022
3b495fc
Pool update (#85)
Jan 9, 2022
87cb55e
Bump to 1.2.15
Jan 9, 2022
ec8b788
Pool update (#86)
Jan 12, 2022
97bc567
Bump to 1.2.16
Jan 12, 2022
069f7ac
Pool update (#87)
Jan 14, 2022
4aab2b8
Bump to 1.2.17
Jan 14, 2022
898bb4d
Pool update (#89)
Jan 24, 2022
d231754
Bump to 1.2.18
Jan 24, 2022
ec3db7f
Execute cleanup instructions in reverse order (#90)
Jan 25, 2022
f4aac09
Bump to 1.2.19
Jan 25, 2022
41ca9f1
Pool update (#91)
Jan 26, 2022
37f2b7c
Bump to 1.2.20
Jan 26, 2022
d042fc9
Pool update (#92)
Jan 28, 2022
65d7bcc
Bump to 1.2.21
Jan 28, 2022
e8f01a4
Pool update (#93)
Feb 5, 2022
7a8b76d
Bump to 1.2.22
Feb 5, 2022
78b93ed
Pool update (#95)
Feb 17, 2022
57a355d
Bump to 1.2.23
Feb 17, 2022
99dc9da
Pool update (#99)
Apr 7, 2022
e04a5c4
v1.2.24
Apr 7, 2022
dbded0f
Update Tokenlist with new tokens (#102)
odcheung Jun 11, 2022
55eb802
v1.2.25
odcheung Jun 11, 2022
36e050f
Update README.md
Yihwan Jul 26, 2022
295436f
Update README.md
Jul 31, 2022
cee0446
fix: minimum fee of one token (#108)
yugure-orca Oct 30, 2022
a551fa7
Update README
rawfalafel May 1, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -115,3 +115,5 @@ dist
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.*

.vscode/*
181 changes: 150 additions & 31 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,21 @@
⚠️ **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 exchange platform.
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
Expand All @@ -13,10 +25,28 @@ Learn more Orca [here](https://docs.orca.so).

- 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)
- Deposit/Withdraw from OrcaPools

- More trader information (APY, Volume)

# Installation

Expand All @@ -33,38 +63,127 @@ 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, OrcaPoolConfig, OrcaU64 } from "@orca-so/sdk";

try {
const connection = new Connection(url, "singleGossip");
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);
const owner: Keypair = getKeyPair();

// Get an instance of the ETH-USDC orca pool
let pool = orca.getPool(OrcaPoolConfig.ETH_USDC);

// Get the number of ETH-USDC LP tokens in your wallet
let ethUsdcLPBalance = await pool.getLPBalance(owner.publicKey);

// Get the total supply of ETH-USDC LP tokens
let ethUsdcLPSupply = await pool.getLPSupply();

// Get a quote of exchanging 1.1 ETH to USDC with a slippage tolerance of 0.1%
// From the quote, you can get the current rate, fees, expected output amount and minimum output amount
let usdcToken = pool.getTokenB();
let tradeValue = new Decimal(1.1);
let quote = await pool.getQuote(usdcToken, tradeValue, new Decimal(0.1));

// Perform a swap for 1USDC to the quoted minimum amount of ETH
// If the user does not have the Associated Token Address(ATA) to receive the output token, the ATA
// instructions will be appended in the transaction.
const txId = await pool.swap(owner, usdcToken, tradeValue, quote.getMinOutputAmount()).execute();
} catch (err) {
// Handle errors
}

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**
Expand Down
4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
{
"name": "@orca-so/sdk",
"version": "1.1.4",
"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",
Expand Down Expand Up @@ -34,6 +35,7 @@
"watch": "tsc -w -p src",
"prettier-format": "prettier --config .prettierrc 'src/**/*.ts' --write",
"prepare": "husky install",
"prepublishOnly": "tsc -p src",
"test": "jest"
},
"lint-staged": {
Expand Down
113 changes: 113 additions & 0 deletions src/constants/devnet/farms.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
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<string, OrcaFarmParams> = {
"4GpUivZ2jvZqQ3vJRsoq5PwnYv6gdV9fJ9BzHT2JcRr7": solUsdcAqFarm,
"2E4Mp6y2gFRteXiANnwzAJEhHwD3NX1wru3XvxJpGBq2": solUsdtAqFarm,
EBor1PR5XNGHjRVB6JDJuKVCQbvdr1CVZTaX1hTAdvQv: usdcUsdtAqFarm,
"8sFnpd7mM1AWxP1LXX2FWbbkaVtAopBPmPNZ9y6172WL": ethSolAqFarm,
"9pRnvg7ihSJDLi6DGf3PLwr6xRRRrBPXsHYEgGL5hzgA": ethUsdcAqFarm,
CmDdQhusZWyi9fue27VSktYgkHefm3JXNdzc9kCpyvYi: orcaSolAqFarm,
"2ZEEntzoUN7XuMs88ukLGv5HRR1byL7wFWChryF5ZHri": orcaUsdcAqFarm,
AtJF9fbQ1pbz76NYo2jtKjHuzzyaFToHLCizYk6UoHHL: solUsdcDoubleDip,
"5NH9rNaoLKbPPP5zwCJTaMPkFACtfJA8wEmqWrXzgCMa": ethSolDoubleDip,
EeqPcczEZH2cjYBnQyGXBQx1DGs7KG1pobwdPKcwALhD: ethUsdcDoubleDip,
};
2 changes: 2 additions & 0 deletions src/constants/devnet/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export { orcaDevnetPoolConfigs } from "./pools";
export { orcaDevnetFarmConfigs } from "./farms";
Loading