List known markets and coins. Remove assumptions about default DEX program IDs
This commit is contained in:
parent
338f5d229a
commit
6a5e61bc4d
|
@ -1,4 +1,5 @@
|
||||||
export { Market, Orderbook, OpenOrders } from './market';
|
export { Market, Orderbook, OpenOrders } from './market';
|
||||||
export { DexInstructions, DEX_PROGRAM_ID } from './instructions';
|
export { DexInstructions } from './instructions';
|
||||||
|
export { TOKEN_MINTS, MARKETS } from './tokens_and_markets';
|
||||||
export { decodeEventQueue, decodeRequestQueue } from './queue';
|
export { decodeEventQueue, decodeRequestQueue } from './queue';
|
||||||
export * as TokenInstructions from './token-instructions';
|
export * as TokenInstructions from './token-instructions';
|
||||||
|
|
|
@ -7,17 +7,9 @@ import {
|
||||||
u64,
|
u64,
|
||||||
VersionedLayout,
|
VersionedLayout,
|
||||||
} from './layout';
|
} from './layout';
|
||||||
import {
|
import { SYSVAR_RENT_PUBKEY, TransactionInstruction } from '@solana/web3.js';
|
||||||
PublicKey,
|
|
||||||
SYSVAR_RENT_PUBKEY,
|
|
||||||
TransactionInstruction,
|
|
||||||
} from '@solana/web3.js';
|
|
||||||
import { TOKEN_PROGRAM_ID } from './token-instructions';
|
import { TOKEN_PROGRAM_ID } from './token-instructions';
|
||||||
|
|
||||||
export const DEX_PROGRAM_ID = new PublicKey(
|
|
||||||
'4ckmDgGdxQoPDLUkDT3vHgSAkzA3QRdNq5ywwY4sUSJn',
|
|
||||||
);
|
|
||||||
|
|
||||||
export const INSTRUCTION_LAYOUT = new VersionedLayout(
|
export const INSTRUCTION_LAYOUT = new VersionedLayout(
|
||||||
0,
|
0,
|
||||||
union(u32('instruction')),
|
union(u32('instruction')),
|
||||||
|
@ -84,7 +76,7 @@ export class DexInstructions {
|
||||||
feeRateBps,
|
feeRateBps,
|
||||||
vaultSignerNonce,
|
vaultSignerNonce,
|
||||||
quoteDustThreshold,
|
quoteDustThreshold,
|
||||||
programId = DEX_PROGRAM_ID,
|
programId,
|
||||||
}) {
|
}) {
|
||||||
return new TransactionInstruction({
|
return new TransactionInstruction({
|
||||||
keys: [
|
keys: [
|
||||||
|
@ -124,7 +116,7 @@ export class DexInstructions {
|
||||||
maxQuantity,
|
maxQuantity,
|
||||||
orderType,
|
orderType,
|
||||||
clientId,
|
clientId,
|
||||||
programId = DEX_PROGRAM_ID,
|
programId,
|
||||||
}) {
|
}) {
|
||||||
return new TransactionInstruction({
|
return new TransactionInstruction({
|
||||||
keys: [
|
keys: [
|
||||||
|
@ -156,7 +148,7 @@ export class DexInstructions {
|
||||||
baseVault,
|
baseVault,
|
||||||
quoteVault,
|
quoteVault,
|
||||||
limit,
|
limit,
|
||||||
programId = DEX_PROGRAM_ID,
|
programId,
|
||||||
}) {
|
}) {
|
||||||
return new TransactionInstruction({
|
return new TransactionInstruction({
|
||||||
keys: [
|
keys: [
|
||||||
|
@ -178,7 +170,7 @@ export class DexInstructions {
|
||||||
eventQueue,
|
eventQueue,
|
||||||
openOrdersAccounts,
|
openOrdersAccounts,
|
||||||
limit,
|
limit,
|
||||||
programId = DEX_PROGRAM_ID,
|
programId,
|
||||||
}) {
|
}) {
|
||||||
return new TransactionInstruction({
|
return new TransactionInstruction({
|
||||||
keys: [
|
keys: [
|
||||||
|
@ -203,7 +195,7 @@ export class DexInstructions {
|
||||||
side,
|
side,
|
||||||
orderId,
|
orderId,
|
||||||
openOrdersSlot,
|
openOrdersSlot,
|
||||||
programId = DEX_PROGRAM_ID,
|
programId,
|
||||||
}) {
|
}) {
|
||||||
return new TransactionInstruction({
|
return new TransactionInstruction({
|
||||||
keys: [
|
keys: [
|
||||||
|
@ -225,7 +217,7 @@ export class DexInstructions {
|
||||||
owner,
|
owner,
|
||||||
requestQueue,
|
requestQueue,
|
||||||
clientId,
|
clientId,
|
||||||
programId = DEX_PROGRAM_ID,
|
programId,
|
||||||
}) {
|
}) {
|
||||||
return new TransactionInstruction({
|
return new TransactionInstruction({
|
||||||
keys: [
|
keys: [
|
||||||
|
@ -250,7 +242,7 @@ export class DexInstructions {
|
||||||
baseWallet,
|
baseWallet,
|
||||||
quoteWallet,
|
quoteWallet,
|
||||||
vaultSigner,
|
vaultSigner,
|
||||||
programId = DEX_PROGRAM_ID,
|
programId,
|
||||||
}) {
|
}) {
|
||||||
return new TransactionInstruction({
|
return new TransactionInstruction({
|
||||||
keys: [
|
keys: [
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { blob, seq, struct, u8 } from 'buffer-layout';
|
import { blob, seq, struct, u8 } from 'buffer-layout';
|
||||||
import { accountFlagsLayout, publicKeyLayout, u128, u64 } from './layout';
|
import { accountFlagsLayout, publicKeyLayout, u128, u64 } from './layout';
|
||||||
import { Slab, SLAB_LAYOUT } from './slab';
|
import { Slab, SLAB_LAYOUT } from './slab';
|
||||||
import { DEX_PROGRAM_ID, DexInstructions } from './instructions';
|
import { DexInstructions } from './instructions';
|
||||||
import BN from 'bn.js';
|
import BN from 'bn.js';
|
||||||
import {
|
import {
|
||||||
Account,
|
Account,
|
||||||
|
@ -75,7 +75,7 @@ export class Market {
|
||||||
baseMintDecimals: number,
|
baseMintDecimals: number,
|
||||||
quoteMintDecimals: number,
|
quoteMintDecimals: number,
|
||||||
options: MarketOptions = {},
|
options: MarketOptions = {},
|
||||||
programId: PublicKey = DEX_PROGRAM_ID,
|
programId: PublicKey,
|
||||||
) {
|
) {
|
||||||
const { skipPreflight = false, confirmations = 0 } = options;
|
const { skipPreflight = false, confirmations = 0 } = options;
|
||||||
if (!decoded.accountFlags.initialized || !decoded.accountFlags.market) {
|
if (!decoded.accountFlags.initialized || !decoded.accountFlags.market) {
|
||||||
|
@ -98,7 +98,7 @@ export class Market {
|
||||||
connection: Connection,
|
connection: Connection,
|
||||||
address: PublicKey,
|
address: PublicKey,
|
||||||
options: MarketOptions = {},
|
options: MarketOptions = {},
|
||||||
programId: PublicKey = DEX_PROGRAM_ID,
|
programId: PublicKey,
|
||||||
) {
|
) {
|
||||||
const { owner, data } = throwIfNull(
|
const { owner, data } = throwIfNull(
|
||||||
await connection.getAccountInfo(address),
|
await connection.getAccountInfo(address),
|
||||||
|
@ -842,11 +842,7 @@ export class OpenOrders {
|
||||||
orders!: BN[];
|
orders!: BN[];
|
||||||
clientIds!: BN[];
|
clientIds!: BN[];
|
||||||
|
|
||||||
constructor(
|
constructor(address: PublicKey, decoded, programId: PublicKey) {
|
||||||
address: PublicKey,
|
|
||||||
decoded,
|
|
||||||
programId: PublicKey = DEX_PROGRAM_ID,
|
|
||||||
) {
|
|
||||||
this.address = address;
|
this.address = address;
|
||||||
this._programId = programId;
|
this._programId = programId;
|
||||||
Object.assign(this, decoded);
|
Object.assign(this, decoded);
|
||||||
|
@ -860,7 +856,7 @@ export class OpenOrders {
|
||||||
connection: Connection,
|
connection: Connection,
|
||||||
marketAddress: PublicKey,
|
marketAddress: PublicKey,
|
||||||
ownerAddress: PublicKey,
|
ownerAddress: PublicKey,
|
||||||
programId: PublicKey = DEX_PROGRAM_ID,
|
programId: PublicKey,
|
||||||
) {
|
) {
|
||||||
const filters = [
|
const filters = [
|
||||||
{
|
{
|
||||||
|
@ -892,7 +888,7 @@ export class OpenOrders {
|
||||||
static async load(
|
static async load(
|
||||||
connection: Connection,
|
connection: Connection,
|
||||||
address: PublicKey,
|
address: PublicKey,
|
||||||
programId: PublicKey = DEX_PROGRAM_ID,
|
programId: PublicKey,
|
||||||
) {
|
) {
|
||||||
const accountInfo = await connection.getAccountInfo(address);
|
const accountInfo = await connection.getAccountInfo(address);
|
||||||
if (accountInfo === null) {
|
if (accountInfo === null) {
|
||||||
|
@ -904,7 +900,7 @@ export class OpenOrders {
|
||||||
static fromAccountInfo(
|
static fromAccountInfo(
|
||||||
address: PublicKey,
|
address: PublicKey,
|
||||||
accountInfo: AccountInfo<Buffer>,
|
accountInfo: AccountInfo<Buffer>,
|
||||||
programId: PublicKey = DEX_PROGRAM_ID,
|
programId: PublicKey,
|
||||||
) {
|
) {
|
||||||
const { owner, data } = accountInfo;
|
const { owner, data } = accountInfo;
|
||||||
if (!owner.equals(programId)) {
|
if (!owner.equals(programId)) {
|
||||||
|
@ -922,7 +918,7 @@ export class OpenOrders {
|
||||||
marketAddress: PublicKey,
|
marketAddress: PublicKey,
|
||||||
ownerAddress: PublicKey,
|
ownerAddress: PublicKey,
|
||||||
newAccountAddress: PublicKey,
|
newAccountAddress: PublicKey,
|
||||||
programId: PublicKey = DEX_PROGRAM_ID,
|
programId: PublicKey,
|
||||||
) {
|
) {
|
||||||
return SystemProgram.createAccount({
|
return SystemProgram.createAccount({
|
||||||
fromPubkey: ownerAddress,
|
fromPubkey: ownerAddress,
|
||||||
|
|
|
@ -14,6 +14,14 @@ export const WRAPPED_SOL_MINT = new PublicKey(
|
||||||
'So11111111111111111111111111111111111111112',
|
'So11111111111111111111111111111111111111112',
|
||||||
);
|
);
|
||||||
|
|
||||||
|
export const SRM_MINT = new PublicKey(
|
||||||
|
'SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt',
|
||||||
|
);
|
||||||
|
|
||||||
|
export const MSRM_MINT = new PublicKey(
|
||||||
|
'MSRMcoVyrFxnSgo5uXwone5SKcGhT1KEJMFEkMEWf9L',
|
||||||
|
);
|
||||||
|
|
||||||
const LAYOUT = BufferLayout.union(BufferLayout.u8('instruction'));
|
const LAYOUT = BufferLayout.union(BufferLayout.u8('instruction'));
|
||||||
LAYOUT.addVariant(
|
LAYOUT.addVariant(
|
||||||
0,
|
0,
|
||||||
|
|
|
@ -0,0 +1,198 @@
|
||||||
|
import { MSRM_MINT, SRM_MINT, WRAPPED_SOL_MINT } from './token-instructions';
|
||||||
|
import { PublicKey } from '@solana/web3.js';
|
||||||
|
|
||||||
|
export const TOKEN_MINTS: Array<{ address: PublicKey; name: string }> = [
|
||||||
|
{
|
||||||
|
address: new PublicKey('9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E'),
|
||||||
|
name: 'BTC',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
address: new PublicKey('2FPyTwcZLUg1MDrwsyoP4D6s1tM7hAkHYRjkNb5w6Pxk'),
|
||||||
|
name: 'ETH',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
address: new PublicKey('AGFEad2et2ZJif9jaGpdMixQqvW5i81aBdvKe7PHNfz3'),
|
||||||
|
name: 'FTT',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
address: new PublicKey('3JSf5tPeuscJGtaCp5giEiDhv51gQ4v3zWg8DGgyLfAB'),
|
||||||
|
name: 'YFI',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
address: new PublicKey('CWE8jPTUYhdCTZYWPTe1o5DFqfdjzWKc9WKz6rSjQUdG'),
|
||||||
|
name: 'LINK',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
address: new PublicKey('Ga2AXHpfAF6mv2ekZwcsJFqu7wB4NV331qNH7fW9Nst8'),
|
||||||
|
name: 'XRP',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
address: new PublicKey('BQcdHdAQW1hczDbBi9hiegXAR7A98Q9jx3X3iBBBDiq4'),
|
||||||
|
name: 'USDT',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
address: new PublicKey('BXXkv6z8ykpG1yuvUDPgh732wzVHB69RnB9YgSYh3itW'),
|
||||||
|
name: 'USDC',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
address: MSRM_MINT,
|
||||||
|
name: 'MSRM',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
address: SRM_MINT,
|
||||||
|
name: 'SRM',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
address: new PublicKey('AR1Mtgh7zAtxuxGd2XPovXPVjcSdY3i4rQYisNadjfKy'),
|
||||||
|
name: 'SUSHI',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
address: new PublicKey('SF3oTvfWzEP3DTwGSvUXRrGTvr75pdZNnBLAH9bzMuX'),
|
||||||
|
name: 'SXP',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
address: new PublicKey('CsZ5LZkDS7h9TDKjrbL7VAwQZ9nsRu8vJLhRYfmGaN8K'),
|
||||||
|
name: 'ALEPH',
|
||||||
|
},
|
||||||
|
{ address: WRAPPED_SOL_MINT, name: 'SOL' },
|
||||||
|
];
|
||||||
|
|
||||||
|
export const MARKETS: Array<{
|
||||||
|
address: PublicKey;
|
||||||
|
name: string;
|
||||||
|
programId: PublicKey;
|
||||||
|
deprecated: boolean;
|
||||||
|
}> = [
|
||||||
|
{
|
||||||
|
address: new PublicKey('EmCzMQfXMgNHcnRoFwAdPe1i2SuiSzMj1mx6wu3KN2uA'),
|
||||||
|
name: 'ALEPH/USDT',
|
||||||
|
deprecated: false,
|
||||||
|
programId: new PublicKey('4ckmDgGdxQoPDLUkDT3vHgSAkzA3QRdNq5ywwY4sUSJn'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
address: new PublicKey('B37pZmwrwXHjpgvd9hHDAx1yeDsNevTnbbrN9W12BoGK'),
|
||||||
|
name: 'ALEPH/USDC',
|
||||||
|
deprecated: false,
|
||||||
|
programId: new PublicKey('4ckmDgGdxQoPDLUkDT3vHgSAkzA3QRdNq5ywwY4sUSJn'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
address: new PublicKey('8AcVjMG2LTbpkjNoyq8RwysokqZunkjy3d5JDzxC6BJa'),
|
||||||
|
name: 'BTC/USDT',
|
||||||
|
deprecated: false,
|
||||||
|
programId: new PublicKey('4ckmDgGdxQoPDLUkDT3vHgSAkzA3QRdNq5ywwY4sUSJn'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
address: new PublicKey('CAgAeMD7quTdnr6RPa7JySQpjf3irAmefYNdTb6anemq'),
|
||||||
|
name: 'BTC/USDC',
|
||||||
|
deprecated: false,
|
||||||
|
programId: new PublicKey('4ckmDgGdxQoPDLUkDT3vHgSAkzA3QRdNq5ywwY4sUSJn'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
address: new PublicKey('HfCZdJ1wfsWKfYP2qyWdXTT5PWAGWFctzFjLH48U1Hsd'),
|
||||||
|
name: 'ETH/USDT',
|
||||||
|
deprecated: false,
|
||||||
|
programId: new PublicKey('4ckmDgGdxQoPDLUkDT3vHgSAkzA3QRdNq5ywwY4sUSJn'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
address: new PublicKey('ASKiV944nKg1W9vsf7hf3fTsjawK6DwLwrnB2LH9n61c'),
|
||||||
|
name: 'ETH/USDC',
|
||||||
|
deprecated: false,
|
||||||
|
programId: new PublicKey('4ckmDgGdxQoPDLUkDT3vHgSAkzA3QRdNq5ywwY4sUSJn'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
address: new PublicKey('8mDuvJJSgoodovMRYArtVVYBbixWYdGzR47GPrRT65YJ'),
|
||||||
|
name: 'SOL/USDT',
|
||||||
|
deprecated: false,
|
||||||
|
programId: new PublicKey('BJ3jrUzddfuSrZHXSCxMUUQsjKEyLmuuyZebkcaFp2fg'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
address: new PublicKey('Cdp72gDcYMCLLk3aDkPxjeiirKoFqK38ECm8Ywvk94Wi'),
|
||||||
|
name: 'SOL/USDC',
|
||||||
|
deprecated: false,
|
||||||
|
programId: new PublicKey('BJ3jrUzddfuSrZHXSCxMUUQsjKEyLmuuyZebkcaFp2fg'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
address: new PublicKey('HARFLhSq8nECZk4DVFKvzqXMNMA9a3hjvridGMFizeLa'),
|
||||||
|
name: 'SRM/USDT',
|
||||||
|
deprecated: false,
|
||||||
|
programId: new PublicKey('4ckmDgGdxQoPDLUkDT3vHgSAkzA3QRdNq5ywwY4sUSJn'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
address: new PublicKey('68J6nkWToik6oM9rTatKSR5ibVSykAtzftBUEAvpRsys'),
|
||||||
|
name: 'SRM/USDC',
|
||||||
|
deprecated: false,
|
||||||
|
programId: new PublicKey('4ckmDgGdxQoPDLUkDT3vHgSAkzA3QRdNq5ywwY4sUSJn'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
address: new PublicKey('DzFjazak6EKHnaB2w6qSsArnj28CV1TKd2Smcj9fqtHW'),
|
||||||
|
name: 'SUSHI/USDT',
|
||||||
|
deprecated: false,
|
||||||
|
programId: new PublicKey('4ckmDgGdxQoPDLUkDT3vHgSAkzA3QRdNq5ywwY4sUSJn'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
address: new PublicKey('9wDmxsfwaDb2ysmZpBLzxKzoWrF1zHzBN7PV5EmJe19R'),
|
||||||
|
name: 'SUSHI/USDC',
|
||||||
|
deprecated: false,
|
||||||
|
programId: new PublicKey('4ckmDgGdxQoPDLUkDT3vHgSAkzA3QRdNq5ywwY4sUSJn'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
address: new PublicKey('GuvWMATdEV6DExWnXncPYEzn4ePWYkvGdC8pu8gsn7m7'),
|
||||||
|
name: 'SXP/USDT',
|
||||||
|
deprecated: false,
|
||||||
|
programId: new PublicKey('4ckmDgGdxQoPDLUkDT3vHgSAkzA3QRdNq5ywwY4sUSJn'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
address: new PublicKey('GbQSffne1NcJbS4jsewZEpRGYVR4RNnuVUN8Ht6vAGb6'),
|
||||||
|
name: 'SXP/USDC',
|
||||||
|
deprecated: false,
|
||||||
|
programId: new PublicKey('4ckmDgGdxQoPDLUkDT3vHgSAkzA3QRdNq5ywwY4sUSJn'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
address: new PublicKey('H4snTKK9adiU15gP22ErfZYtro3aqR9BTMXiH3AwiUTQ'),
|
||||||
|
name: 'MSRM/USDT',
|
||||||
|
deprecated: false,
|
||||||
|
programId: new PublicKey('4ckmDgGdxQoPDLUkDT3vHgSAkzA3QRdNq5ywwY4sUSJn'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
address: new PublicKey('7kgkDyW7dmyMeP8KFXzbcUZz1R2WHsovDZ7n3ihZuNDS'),
|
||||||
|
name: 'MSRM/USDC',
|
||||||
|
deprecated: false,
|
||||||
|
programId: new PublicKey('4ckmDgGdxQoPDLUkDT3vHgSAkzA3QRdNq5ywwY4sUSJn'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
address: new PublicKey('DHDdghmkBhEpReno3tbzBPtsxCt6P3KrMzZvxavTktJt'),
|
||||||
|
name: 'FTT/USDT',
|
||||||
|
deprecated: false,
|
||||||
|
programId: new PublicKey('4ckmDgGdxQoPDLUkDT3vHgSAkzA3QRdNq5ywwY4sUSJn'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
address: new PublicKey('FZqrBXz7ADGsmDf1TM9YgysPUfvtG8rJiNUrqDpHc9Au'),
|
||||||
|
name: 'FTT/USDC',
|
||||||
|
deprecated: false,
|
||||||
|
programId: new PublicKey('4ckmDgGdxQoPDLUkDT3vHgSAkzA3QRdNq5ywwY4sUSJn'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
address: new PublicKey('5zu5bTZZvqESAAgFsr12CUMxdQvMrvU9CgvC1GW8vJdf'),
|
||||||
|
name: 'YFI/USDT',
|
||||||
|
deprecated: false,
|
||||||
|
programId: new PublicKey('4ckmDgGdxQoPDLUkDT3vHgSAkzA3QRdNq5ywwY4sUSJn'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
address: new PublicKey('FJg9FUtbN3fg3YFbMCFiZKjGh5Bn4gtzxZmtxFzmz9kT'),
|
||||||
|
name: 'YFI/USDC',
|
||||||
|
deprecated: false,
|
||||||
|
programId: new PublicKey('4ckmDgGdxQoPDLUkDT3vHgSAkzA3QRdNq5ywwY4sUSJn'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
address: new PublicKey('F5xschQBMpu1gD2q1babYEAVJHR1buj1YazLiXyQNqSW'),
|
||||||
|
name: 'LINK/USDT',
|
||||||
|
deprecated: false,
|
||||||
|
programId: new PublicKey('4ckmDgGdxQoPDLUkDT3vHgSAkzA3QRdNq5ywwY4sUSJn'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
address: new PublicKey('7GZ59DMgJ7D6dfoJTpszPayTRyua9jwcaGJXaRMMF1my'),
|
||||||
|
name: 'LINK/USDC',
|
||||||
|
deprecated: false,
|
||||||
|
programId: new PublicKey('4ckmDgGdxQoPDLUkDT3vHgSAkzA3QRdNq5ywwY4sUSJn'),
|
||||||
|
},
|
||||||
|
];
|
Loading…
Reference in New Issue