aggr icon indicating copy to clipboard operation
aggr copied to clipboard

Serum (Solana) exchange support

Open lmvdz opened this issue 3 years ago • 6 comments

Hi @Tucsky,

I've added Serum exchange in this PR.

A couple of things need to be done to get this to work:

// This will generate a valid market.json to use with serum-vial
const axios = require('axios')
const solana_token_list_url = 'https://raw.githubusercontent.com/solana-labs/token-list/main/src/tokens/solana.tokenlist.json';
const { Connection, PublicKey, clusterApiUrl } = require('@solana/web3.js');
const  { Market } = require('@project-serum/serum');
const fs = require('fs');
let connection = new Connection(clusterApiUrl('mainnet-beta'));


const programAddress = new PublicKey("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"); // Serum v3 market program id


const serum_vial_market_template = {
    "name": "",
    "baseMintAddress": "",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "version": 3,
    "address": "",
    "programId": "",
    "baseCurrency": "",
    "quoteCurrency": "USDC",
    "tickSize": "",
    "minOrderSize": "",
    "deprecated": ""
}

if (!fs.existsSync('./markets.json')) {
    fs.writeFileSync('./markets.json', JSON.stringify([], null, 4))
}

function getSerumVialMarkets() {
    return new Promise(function(resolve, reject) {
        axios.get(solana_token_list_url).then(response => response.data).then(token_list => {
            token_list.tokens.filter(t => t.chainId === 101 && t.extensions !== undefined && t.extensions.serumV3Usdc !== undefined).forEach((token, index, tokens) => {
                setTimeout(() => {
                    connection.getAccountInfo(new PublicKey(token.extensions.serumV3Usdc)).then((accountInfo) => {
                        if (accountInfo.owner.toBase58() !== programAddress.toBase58()) {
                            console.error(new Error('invalid serumV3Usdc'), token)
                        } else {
                            Market.load(connection, new PublicKey(token.extensions.serumV3Usdc), {}, programAddress).then(market => {
                                const tokenMarket = JSON.parse(JSON.stringify(serum_vial_market_template))
                                tokenMarket.name = token.symbol + "/USDC"
                                tokenMarket.baseMintAddress = token.address;
                                tokenMarket.address = token.extensions.serumV3Usdc;
                                tokenMarket.programId = programAddress.toBase58()
                                tokenMarket.baseCurrency = token.symbol
                                tokenMarket.minOrderSize = market.minOrderSize;
                                tokenMarket.tickSize = market.tickSize;
                                tokenMarket.deprecated = false;
                                const markets = JSON.parse(fs.readFileSync('./markets.json'))
                                if (markets.filter(m => m.baseMintAddress === token.address).length === 0) {
                                    markets.push(tokenMarket)
                                } else {
                                    let existingMarket = markets[markets.indexOf(markets.filter(m => m.address === token.extensions.serumV3Usdc)[0])];
                                    existingMarket = { ...existingMarket, ...tokenMarket }
                                    markets[markets.indexOf(markets.filter(m => m.address === token.extensions.serumV3Usdc)[0])] = existingMarket;
                                }
                                fs.writeFileSync('./markets.json', JSON.stringify(markets, null, 4))
                                console.log('loaded market - ' + tokenMarket.name)
                                if (index === tokens.length - 1) {
                                    resolve(JSON.parse(fs.readFileSync('./markets.json')))
                                }
                            }).catch(error => {
                                console.error(error);
                                console.error(index + " - failed to load", token)
                                if (index === tokens.length - 1) {
                                    resolve(JSON.parse(fs.readFileSync('./markets.json')))
                                }
                            })
                        }
                    })
                }, 1100 * index)
            })
        })
    })
}

npm install -g serum-vial serum-vial --markets-json market.json serum-vial by default uses the serumproject solana rpc node https://github.com/tardis-dev/serum-vial if you want to use your own solana rpc node https://docs.solana.com/running-validator add the endpoint of serum-vial instance to the cors.aggr.trade

image image

lmvdz avatar Nov 20 '21 22:11 lmvdz

Thank you for the work, why not query the github directly from the serum.ts ?

export default class extends Exchange {
  id = 'SERUM'

  protected endpoints = {
    PRODUCTS: 'https://raw.githubusercontent.com/solana-labs/token-list/main/src/tokens/solana.tokenlist.json'
  }

  getUrl() {
    return 'wss://api.serum-vial.dev/v1/ws'
  }

  formatProducts(data) {
    return data.tokens
      .filter(t => t.chainId === 101 && t.extensions !== undefined && t.extensions.serumV3Usdc !== undefined)
      .map(token => token.symbol + '/USDC')
      .filter((v, i, a) => a.indexOf(v) === i)
  }

...

Just need to ignore proxy configuration when target is raw.githubusercontent.com I only tested on my local but I was able to get it to work :)

Tucsky avatar Nov 21 '21 12:11 Tucsky

Thank you for the work, why not query the github directly from the serum.ts ?

export default class extends Exchange {
  id = 'SERUM'

  protected endpoints = {
    PRODUCTS: 'https://raw.githubusercontent.com/solana-labs/token-list/main/src/tokens/solana.tokenlist.json'
  }

  getUrl() {
    return 'wss://api.serum-vial.dev/v1/ws'
  }

  formatProducts(data) {
    return data.tokens
      .filter(t => t.chainId === 101 && t.extensions !== undefined && t.extensions.serumV3Usdc !== undefined)
      .map(token => token.symbol + '/USDC')
      .filter((v, i, a) => a.indexOf(v) === i)
  }

...

Just need to ignore proxy configuration when target is raw.githubusercontent.com I only tested on my local but I was able to get it to work :)

So there are a lot of coins excluded from the market.json if you use just the serum-vial provided dev url The serum-vial needs all the markets from the raw.githubusercontent.com

lmvdz avatar Nov 21 '21 13:11 lmvdz

https://api.serum-vial.dev/v1/markets - 82 entries my markets.json script - 156 entries

lmvdz avatar Nov 21 '21 13:11 lmvdz

https://api.serum-vial.dev/v1/markets - 82 entries my markets.json script - 156 entries

This is what I get from the github url... 157 pairs

["ECHO/USDC","KITTY/USDC","OTR/USDC","TBK/USDC","BIP/USDC","INU/USDC","WIPE/USDC","SNJ/USDC","ALM/USDC","SWOLE/USDC","BOKU/USDC","OOGI/USDC","SPKL/USDC","TRTLS/USDC","SLX/USDC","SLB/USDC","SOLA/USDC","SOL/USDC","IVN/USDC","BTC/USDC","ETH/USDC","YFI/USDC","LINK/USDC","SUSHI/USDC","ALEPH/USDC","SXP/USDC","HGET/USDC","CREAM/USDC","UBXT/USDC","HNT/USDC","FRONT/USDC","AKRO/USDC","HXRO/USDC","UNI/USDC","SRM/USDC","FTT/USDC","MSRM/USDC","TOMO/USDC","LUA/USDC","MATH/USDC","KEEP/USDC","FIDA/USDC","KIN/USDC","MAPS/USDC","OXY/USDC","USDT/USDC","RAY/USDC","EOSBEAR/USDC","MIDBULL/USDC","METARARITY/USDC","XCOPE/USDC","COPE/USDC","INO/USDC","ROPE/USDC","MEDIA/USDC","STEP/USDC","SAMO/USDC","ATLAS/USDC","POLIS/USDC","DOI/USDC","HOSA/USDC","TCW/USDC","LOST/USDC","LOVE/USDC","MRDR/USDC","PFP/USDC","AVE/USDC","ASF/USDC","TLS/USDC","SPT/USDC","PBA/USDC","UWB/USDC","OMPH/USDC","SATM/USDC","SDOGE/USDC","HOLD/USDC","FROG/USDC","CRT/USDC","SKEM/USDC","SOLAPE/USDC","WOOF/USDC","MER/USDC","LOTTO/USDC","BOLE/USDC","MIT/USDC","AUSS/USDC","TULIP/USDC","KEKW/USDC","DWT/USDC","DOGA/USDC","CHEEMS/USDC","CATO/USDC","NINJA/USDC","LLAMA/USDC","BOP/USDC","DXL/USDC","PIPANA/USDC","KLB/USDC","ORCA/USDC","renBTC/USDC","renBCH/USDC","renDOGE/USDC","renLUNA/USDC","renZEC/USDC","SAIL/USDC","RIN/USDC","POTATO/USDC","STVA/USDC","LIQ/USDC","CRP/USDC","SLRS/USDC","SODA/USDC","SOLBERRY/USDC","CRYN/USDC","SBR/USDC","mSOL/USDC","BET/USDC","PORT/USDC","MNGO/USDC","UPS/USDC","gSAIL/USDC","SUNNY/USDC","CYS/USDC","UPFI/USDC","HOTTO/USDC","CRY/USDC","ASH/USDC","BST/USDC","AGTE/USDC","HIMA/USDC","GOATS/USDC","HP/USDC","FRIES/USDC","CUBE/USDC","SMBT/USDC","FLOOF/USDC","DOGETH/USDC","OOAH/USDC","PUSSY/USDC","JESUS/USDC","CATOMIAOU/USDC","BITCH/USDC","SHIBETOSHI/USDC","KissMe/USDC","DoggyStyle/USDC","LEONIDAS/USDC","WAGMI/USDC","SLT/USDC","CRAT/USDC","GAMESHIB/USDC","SAFE/USDC","DEEZ/USDC","NinjaDoge/USDC","SHIBMOON/USDC","GALAXY/USDC","UNISOL/USDC","POLE/USDC"]

look good

Tucsky avatar Nov 21 '21 15:11 Tucsky

Right, but the serum-vial link I posted in my previous comment is where the data of trades comes from. If serum vial isn't listening for all 156 markets then your list from raw GitHub will have pairs which won't be able to subscribe to serum vial for data

That script I wrote maps the raw GitHub data to the correct market format for serum vial

https://api.serum-vial.dev/v1/markets looks like the site is down here is the list from the site I had loaded in memory

  {
    "name": "ALEPH/USDC",
    "baseCurrency": "ALEPH",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "GcoKtAmTy5QyuijXSmJKBtFdt99e6Buza18Js7j9AJ6e",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "CsZ5LZkDS7h9TDKjrbL7VAwQZ9nsRu8vJLhRYfmGaN8K",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.0001,
    "minOrderSize": 0.1,
    "deprecated": false
  },
  {
    "name": "BTC/USDC",
    "baseCurrency": "BTC",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "A8YFbxQYFVqKZaoYJLLUVcQiWP7G2MeEgW5wsAQgMvFw",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.1,
    "minOrderSize": 0.0001,
    "deprecated": false
  },
  {
    "name": "ETH/USDC",
    "baseCurrency": "ETH",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "4tSvZvnbyzHXLMTiFonMyxZoHmFqau1XArcRCVHLZ5gX",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "2FPyTwcZLUg1MDrwsyoP4D6s1tM7hAkHYRjkNb5w6Pxk",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.01,
    "minOrderSize": 0.001,
    "deprecated": false
  },
  {
    "name": "SRM/USDC",
    "baseCurrency": "SRM",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "ByRys5tuUWDgL73G8JBAEfkdFf8JWBzPBDHsBVQ5vbQA",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.001,
    "minOrderSize": 0.1,
    "deprecated": false
  },
  {
    "name": "SUSHI/USDC",
    "baseCurrency": "SUSHI",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "A1Q9iJDVVS8Wsswr9ajeZugmj64bQVCYLZQLra2TMBMo",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "AR1Mtgh7zAtxuxGd2XPovXPVjcSdY3i4rQYisNadjfKy",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.001,
    "minOrderSize": 0.01,
    "deprecated": false
  },
  {
    "name": "SXP/USDC",
    "baseCurrency": "SXP",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "4LUro5jaPaTurXK737QAxgJywdhABnFAMQkXX4ZyqqaZ",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "SF3oTvfWzEP3DTwGSvUXRrGTvr75pdZNnBLAH9bzMuX",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.001,
    "minOrderSize": 0.1,
    "deprecated": false
  },
  {
    "name": "MSRM/USDC",
    "baseCurrency": "MSRM",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "4VKLSYdvrQ5ngQrt1d2VS8o4ewvb2MMUZLiejbnGPV33",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "MSRMcoVyrFxnSgo5uXwone5SKcGhT1KEJMFEkMEWf9L",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.000001,
    "minOrderSize": 1,
    "deprecated": false
  },
  {
    "name": "FTT/USDC",
    "baseCurrency": "FTT",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "2Pbh1CvRVku1TgewMfycemghf6sU9EyuFDcNXqvRmSxc",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "AGFEad2et2ZJif9jaGpdMixQqvW5i81aBdvKe7PHNfz3",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.001,
    "minOrderSize": 0.1,
    "deprecated": false
  },
  {
    "name": "YFI/USDC",
    "baseCurrency": "YFI",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "7qcCo8jqepnjjvB5swP4Afsr3keVBs6gNpBTNubd1Kr2",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "3JSf5tPeuscJGtaCp5giEiDhv51gQ4v3zWg8DGgyLfAB",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 1,
    "minOrderSize": 0.0001,
    "deprecated": false
  },
  {
    "name": "LINK/USDC",
    "baseCurrency": "LINK",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "3hwH1txjJVS8qv588tWrjHfRxdqNjBykM1kMcit484up",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "CWE8jPTUYhdCTZYWPTe1o5DFqfdjzWKc9WKz6rSjQUdG",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.001,
    "minOrderSize": 0.01,
    "deprecated": false
  },
  {
    "name": "HGET/USDC",
    "baseCurrency": "HGET",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "88vztw7RTN6yJQchVvxrs6oXUDryvpv9iJaFa1EEmg87",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "BtZQfWqDGbk9Wf2rXEiWyQBdBY1etnUUn6zEphvVS7yN",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.001,
    "minOrderSize": 0.1,
    "deprecated": false
  },
  {
    "name": "CREAM/USDC",
    "baseCurrency": "CREAM",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "7nZP6feE94eAz9jmfakNJWPwEKaeezuKKC5D1vrnqyo2",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "5Fu5UUgbjpUvdBveb3a1JTNirL8rXtiYeSMWvKjtUNQv",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.01,
    "minOrderSize": 0.01,
    "deprecated": false
  },
  {
    "name": "UBXT/USDC",
    "baseCurrency": "UBXT",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "2wr3Ab29KNwGhtzr5HaPCyfU1qGJzTUAN4amCLZWaD1H",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "873KLxCbz7s9Kc4ZzgYRtNmhfkQrhfyWGZJBmyCbC3ei",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.000001,
    "minOrderSize": 1,
    "deprecated": false
  },
  {
    "name": "HNT/USDC",
    "baseCurrency": "HNT",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "CnUV42ZykoKUnMDdyefv5kP6nDSJf7jFd7WXAecC6LYr",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "HqB7uswoVg4suaQiDP3wjxob1G5WdZ144zhdStwMCq7e",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.0001,
    "minOrderSize": 0.1,
    "deprecated": false
  },
  {
    "name": "FRONT/USDC",
    "baseCurrency": "FRONT",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "9Zx1CvxSVdroKMMWf2z8RwrnrLiQZ9VkQ7Ex3syQqdSH",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "9S4t2NEAiJVMvPdRYKVrfJpBafPBLtvbvyS3DecojQHw",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.0001,
    "minOrderSize": 0.1,
    "deprecated": false
  },
  {
    "name": "AKRO/USDC",
    "baseCurrency": "AKRO",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "5CZXTTgVZKSzgSA3AFMN5a2f3hmwmmJ6hU8BHTEJ3PX8",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "6WNVCuxCGJzNjmMZoKyhZJwvJ5tYpsLyAtagzYASqBoF",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.000001,
    "minOrderSize": 1,
    "deprecated": false
  },
  {
    "name": "HXRO/USDC",
    "baseCurrency": "HXRO",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "6Pn1cSiRos3qhBf54uBP9ZQg8x3JTardm1dL3n4p29tA",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "DJafV9qemGp7mLMEn5wrfqaFwxsbLgUsGVS16zKRk9kc",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.0001,
    "minOrderSize": 0.01,
    "deprecated": false
  },
  {
    "name": "UNI/USDC",
    "baseCurrency": "UNI",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "6JYHjaQBx6AtKSSsizDMwozAEDEZ5KBsSUzH7kRjGJon",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "DEhAasscXF4kEGxFgJ3bq4PpVGp5wyUxMRvn6TzGVHaw",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.0001,
    "minOrderSize": 0.01,
    "deprecated": false
  },
  {
    "name": "MATH/USDC",
    "baseCurrency": "MATH",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "J7cPYBrXVy8Qeki2crZkZavcojf2sMRyQU7nx438Mf8t",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "GeDS162t9yGJuLEHPWXXGrb1zwkzinCgRwnT8vHYjKza",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.00001,
    "minOrderSize": 1,
    "deprecated": false
  },
  {
    "name": "TOMO/USDC",
    "baseCurrency": "TOMO",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "8BdpjpSD5n3nk8DQLqPUyTZvVqFu6kcff5bzUX5dqDpy",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "GXMvfY2jpQctDqZ9RoU3oWPhufKiCcFEfchvYumtX7jd",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.0001,
    "minOrderSize": 0.1,
    "deprecated": false
  },
  {
    "name": "LUA/USDC",
    "baseCurrency": "LUA",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "4xyWjQ74Eifq17vbue5Ut9xfFNfuVB116tZLEpiZuAn8",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "EqWCKXfs3x47uVosDpTRgFniThL9Y8iCztJaapxbEaVX",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.00001,
    "minOrderSize": 10,
    "deprecated": false
  },
  {
    "name": "SRM/SOL",
    "baseCurrency": "SRM",
    "quoteCurrency": "SOL",
    "version": 3,
    "address": "jyei9Fpj2GtHLDDGgcuhDacxYLLiSyxU4TY7KxB2xai",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt",
    "quoteMintAddress": "So11111111111111111111111111111111111111112",
    "tickSize": 0.001,
    "minOrderSize": 0.1,
    "deprecated": false
  },
  {
    "name": "SOL/USDC",
    "baseCurrency": "SOL",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "9wFFyRfZBsuAha4YcuxcXLKwMxJR43S7fPfQLusDBzvT",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "So11111111111111111111111111111111111111112",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.001,
    "minOrderSize": 0.1,
    "deprecated": false
  },
  {
    "name": "FIDA/USDC",
    "baseCurrency": "FIDA",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "E14BKBhDWD4EuTkWj1ooZezesGxMW8LPCps4W5PuzZJo",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "EchesyfXePKdLtoiZSL8pBe8Myagyy8ZRqsACNCFGnvp",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.0001,
    "minOrderSize": 0.1,
    "deprecated": false
  },
  {
    "name": "KIN/USDC",
    "baseCurrency": "KIN",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "Bn6NPyr6UzrFAwC4WmvPvDr2Vm8XSUnFykM2aQroedgn",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "kinXdEcpDQeHPEuQnqmUgtYykqKGVFq6CeVX5iAHJq6",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 1e-7,
    "minOrderSize": 1000,
    "deprecated": false
  },
  {
    "name": "MAPS/USDC",
    "baseCurrency": "MAPS",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "3A8XQRWXC7BjLpgLDDBhQJLT5yPCzS16cGYRKHkKxvYo",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "MAPS41MDahZ9QdKXhVa4dWB9RuyfV4XqhyAZ8XcYepb",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.0001,
    "minOrderSize": 1,
    "deprecated": false
  },
  {
    "name": "KEEP/USDC",
    "baseCurrency": "KEEP",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "3rgacody9SvM88QR83GHaNdEEx4Fe2V2ed5GJp2oeKDr",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "GUohe4DJUA5FKPWo3joiPgsB7yzer7LpDmt1Vhzy3Zht",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.0001,
    "minOrderSize": 1,
    "deprecated": false
  },
  {
    "name": "MSRM/USDT",
    "baseCurrency": "MSRM",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "5nLJ22h1DUfeCfwbFxPYK8zbfbri7nA9bXoDcR8AcJjs",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "MSRMcoVyrFxnSgo5uXwone5SKcGhT1KEJMFEkMEWf9L",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 0.000001,
    "minOrderSize": 1,
    "deprecated": false
  },
  {
    "name": "ETH/USDT",
    "baseCurrency": "ETH",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "7dLVkUfBVfCGkFhSXDCq1ukM9usathSgS716t643iFGF",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "2FPyTwcZLUg1MDrwsyoP4D6s1tM7hAkHYRjkNb5w6Pxk",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 0.01,
    "minOrderSize": 0.001,
    "deprecated": false
  },
  {
    "name": "SXP/USDT",
    "baseCurrency": "SXP",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "8afKwzHR3wJE7W7Y5hvQkngXh6iTepSZuutRMMy96MjR",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "SF3oTvfWzEP3DTwGSvUXRrGTvr75pdZNnBLAH9bzMuX",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 0.001,
    "minOrderSize": 0.1,
    "deprecated": false
  },
  {
    "name": "CEL/USDT",
    "baseCurrency": "CEL",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "cgani53cMZgYfRMgSrNekJTMaLmccRfspsfTbXWRg7u",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "DgHK9mfhMtUwwv54GChRrU54T2Em5cuszq2uMuen1ZVE",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 0.0001,
    "minOrderSize": 1,
    "deprecated": false
  },
  {
    "name": "ALEPH/USDT",
    "baseCurrency": "ALEPH",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "Gyp1UGRgbrb6z8t7fpssxEKQgEmcJ4pVnWW3ds2p6ZPY",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "CsZ5LZkDS7h9TDKjrbL7VAwQZ9nsRu8vJLhRYfmGaN8K",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 0.0001,
    "minOrderSize": 0.1,
    "deprecated": false
  },
  {
    "name": "CREAM/USDT",
    "baseCurrency": "CREAM",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "4ztJEvQyryoYagj2uieep3dyPwG2pyEwb2dKXTwmXe82",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "5Fu5UUgbjpUvdBveb3a1JTNirL8rXtiYeSMWvKjtUNQv",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 0.01,
    "minOrderSize": 0.01,
    "deprecated": false
  },
  {
    "name": "KEEP/USDT",
    "baseCurrency": "KEEP",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "HEGnaVL5i48ubPBqWAhodnZo8VsSLzEM3Gfc451DnFj9",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "GUohe4DJUA5FKPWo3joiPgsB7yzer7LpDmt1Vhzy3Zht",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 0.0001,
    "minOrderSize": 1,
    "deprecated": false
  },
  {
    "name": "HNT/USDT",
    "baseCurrency": "HNT",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "8FpuMGLtMZ7Wt9ZvyTGuTVwTwwzLYfS5NZWcHxbP1Wuh",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "HqB7uswoVg4suaQiDP3wjxob1G5WdZ144zhdStwMCq7e",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 0.0001,
    "minOrderSize": 0.1,
    "deprecated": false
  },
  {
    "name": "MAPS/USDT",
    "baseCurrency": "MAPS",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "5GAPymgnnWieGcRrcghZdA3aanefqa4cZx1ZSE8UTyMV",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "MAPS41MDahZ9QdKXhVa4dWB9RuyfV4XqhyAZ8XcYepb",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 0.0001,
    "minOrderSize": 1,
    "deprecated": false
  },
  {
    "name": "TRYB/USDT",
    "baseCurrency": "TRYB",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "AADohBGxvf7bvixs2HKC3dG2RuU3xpZDwaTzYFJThM8U",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "6ry4WBDvAwAnrYJVv6MCog4J8zx6S3cPgSqnTsDZ73AR",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 0.00001,
    "minOrderSize": 10,
    "deprecated": false
  },
  {
    "name": "FIDA/USDT",
    "baseCurrency": "FIDA",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "EbV7pPpEvheLizuYX3gUCvWM8iySbSRAhu2mQ5Vz2Mxf",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "EchesyfXePKdLtoiZSL8pBe8Myagyy8ZRqsACNCFGnvp",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 0.0001,
    "minOrderSize": 0.1,
    "deprecated": false
  },
  {
    "name": "RSR/USDT",
    "baseCurrency": "RSR",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "FcPet5fz9NLdbXwVM6kw2WTHzRAD7mT78UjwTpawd7hJ",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "7ncCLJpP3MNww17LW8bRvx8odQQnubNtfNZBL5BgAEHW",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 0.00001,
    "minOrderSize": 10,
    "deprecated": false
  },
  {
    "name": "SRM/USDT",
    "baseCurrency": "SRM",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "AtNnsY1AyRERWJ8xCskfz38YdvruWVJQUVXgScC1iPb",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 0.001,
    "minOrderSize": 0.1,
    "deprecated": false
  },
  {
    "name": "RAY/USDT",
    "baseCurrency": "RAY",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "teE55QrL4a4QSfydR9dnHF97jgCfptpuigbb53Lo95g",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 0.001,
    "minOrderSize": 0.1,
    "deprecated": false
  },
  {
    "name": "BTC/USDT",
    "baseCurrency": "BTC",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "C1EuT9VokAKLiW7i2ASnZUvxDoKuKkCpDDeNxAptuNe4",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 0.1,
    "minOrderSize": 0.0001,
    "deprecated": false
  },
  {
    "name": "FTT/USDT",
    "baseCurrency": "FTT",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "Hr3wzG8mZXNHV7TuL6YqtgfVUesCqMxGYCEyP3otywZE",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "AGFEad2et2ZJif9jaGpdMixQqvW5i81aBdvKe7PHNfz3",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 0.001,
    "minOrderSize": 0.1,
    "deprecated": false
  },
  {
    "name": "AKRO/USDT",
    "baseCurrency": "AKRO",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "HLvRdctRB48F9yLnu9E24LUTRt89D48Z35yi1HcxayDf",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "6WNVCuxCGJzNjmMZoKyhZJwvJ5tYpsLyAtagzYASqBoF",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 0.000001,
    "minOrderSize": 1,
    "deprecated": false
  },
  {
    "name": "UNI/USDT",
    "baseCurrency": "UNI",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "2SSnWNrc83otLpfRo792P6P3PESZpdr8cu2r8zCE6bMD",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "DEhAasscXF4kEGxFgJ3bq4PpVGp5wyUxMRvn6TzGVHaw",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 0.0001,
    "minOrderSize": 0.01,
    "deprecated": false
  },
  {
    "name": "UBXT/USDT",
    "baseCurrency": "UBXT",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "F1T7b6pnR8Pge3qmfNUfW6ZipRDiGpMww6TKTrRU4NiL",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "873KLxCbz7s9Kc4ZzgYRtNmhfkQrhfyWGZJBmyCbC3ei",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 0.000001,
    "minOrderSize": 1,
    "deprecated": false
  },
  {
    "name": "SOL/USDT",
    "baseCurrency": "SOL",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "HWHvQhFmJB3NUcu1aihKmrKegfVxBEHzwVX6yZCKEsi1",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "So11111111111111111111111111111111111111112",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 0.001,
    "minOrderSize": 0.1,
    "deprecated": false
  },
  {
    "name": "LUA/USDT",
    "baseCurrency": "LUA",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "35tV8UsHH8FnSAi3YFRrgCu4K9tb883wKnAXpnihot5r",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "EqWCKXfs3x47uVosDpTRgFniThL9Y8iCztJaapxbEaVX",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 0.00001,
    "minOrderSize": 10,
    "deprecated": false
  },
  {
    "name": "SUSHI/USDT",
    "baseCurrency": "SUSHI",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "6DgQRTpJTnAYBSShngAVZZDq7j9ogRN1GfSQ3cq9tubW",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "AR1Mtgh7zAtxuxGd2XPovXPVjcSdY3i4rQYisNadjfKy",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 0.001,
    "minOrderSize": 0.01,
    "deprecated": false
  },
  {
    "name": "MATH/USDT",
    "baseCurrency": "MATH",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "2WghiBkDL2yRhHdvm8CpprrkmfguuQGJTCDfPSudKBAZ",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "GeDS162t9yGJuLEHPWXXGrb1zwkzinCgRwnT8vHYjKza",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 0.00001,
    "minOrderSize": 1,
    "deprecated": false
  },
  {
    "name": "HGET/USDT",
    "baseCurrency": "HGET",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "ErQXxiNfJgd4fqQ58PuEw5xY35TZG84tHT6FXf5s4UxY",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "BtZQfWqDGbk9Wf2rXEiWyQBdBY1etnUUn6zEphvVS7yN",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 0.001,
    "minOrderSize": 0.1,
    "deprecated": false
  },
  {
    "name": "FRONT/USDT",
    "baseCurrency": "FRONT",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "CGC4UgWwqA9PET6Tfx6o6dLv94EK2coVkPtxgNHuBtxj",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "9S4t2NEAiJVMvPdRYKVrfJpBafPBLtvbvyS3DecojQHw",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 0.0001,
    "minOrderSize": 0.1,
    "deprecated": false
  },
  {
    "name": "TOMO/USDT",
    "baseCurrency": "TOMO",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "GnKPri4thaGipzTbp8hhSGSrHgG4F8MFiZVrbRn16iG2",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "GXMvfY2jpQctDqZ9RoU3oWPhufKiCcFEfchvYumtX7jd",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 0.0001,
    "minOrderSize": 0.1,
    "deprecated": false
  },
  {
    "name": "AAVE/USDT",
    "baseCurrency": "AAVE",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "6bxuB5N3bt3qW8UnPNLgMMzDq5sEH8pFmYJYGgzvE11V",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "dK83wTVypEpa1pqiBbHY3MNuUnT3ADUZM4wk9VZXZEc",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 0.01,
    "minOrderSize": 0.01,
    "deprecated": false
  },
  {
    "name": "HXRO/USDT",
    "baseCurrency": "HXRO",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "4absuMsgemvdjfkgdLQq1zKEjw3dHBoCWkzKoctndyqd",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "DJafV9qemGp7mLMEn5wrfqaFwxsbLgUsGVS16zKRk9kc",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 0.0001,
    "minOrderSize": 0.01,
    "deprecated": false
  },
  {
    "name": "KIN/USDT",
    "baseCurrency": "KIN",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "4nCFQr8sahhhL4XJ7kngGFBmpkmyf3xLzemuMhn6mWTm",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "kinXdEcpDQeHPEuQnqmUgtYykqKGVFq6CeVX5iAHJq6",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 1e-7,
    "minOrderSize": 1000,
    "deprecated": false
  },
  {
    "name": "YFI/USDT",
    "baseCurrency": "YFI",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "3Xg9Q4VtZhD4bVYJbTfgGWFV5zjE3U7ztSHa938zizte",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "3JSf5tPeuscJGtaCp5giEiDhv51gQ4v3zWg8DGgyLfAB",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 1,
    "minOrderSize": 0.0001,
    "deprecated": false
  },
  {
    "name": "LINK/USDT",
    "baseCurrency": "LINK",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "3yEZ9ZpXSQapmKjLAGKZEzUNA1rcupJtsDp5mPBWmGZR",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "CWE8jPTUYhdCTZYWPTe1o5DFqfdjzWKc9WKz6rSjQUdG",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 0.001,
    "minOrderSize": 0.01,
    "deprecated": false
  },
  {
    "name": "SWAG/USDT",
    "baseCurrency": "SWAG",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "J2XSt77XWim5HwtUM8RUwQvmRXNZsbMKpp5GTKpHafvf",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "9F9fNTT6qwjsu4X4yWYKZpsbw5qT7o6yR2i57JF2jagy",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 0.01,
    "minOrderSize": 1,
    "deprecated": false
  },
  {
    "name": "USDT/USDC",
    "baseCurrency": "USDT",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "77quYg4MGneUdjgXCunt9GgM1usmrxKY31twEy3WHwcS",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.0001,
    "minOrderSize": 1,
    "deprecated": false
  },
  {
    "name": "OXY/USDT",
    "baseCurrency": "OXY",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "GKLev6UHeX1KSDCyo2bzyG6wqhByEzDBkmYTxEdmYJgB",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "z3dn17yLaGMKffVogeFHQ9zWVcXgqgf3PQnDsNs2g6M",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 0.0001,
    "minOrderSize": 1,
    "deprecated": false
  },
  {
    "name": "OXY/WUSDT",
    "baseCurrency": "OXY",
    "quoteCurrency": "WUSDT",
    "version": 3,
    "address": "HdBhZrnrxpje39ggXnTb6WuTWVvj5YKcSHwYGQCRsVj",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "z3dn17yLaGMKffVogeFHQ9zWVcXgqgf3PQnDsNs2g6M",
    "quoteMintAddress": "BQcdHdAQW1hczDbBi9hiegXAR7A98Q9jx3X3iBBBDiq4",
    "tickSize": 0.0001,
    "minOrderSize": 1,
    "deprecated": false
  },
  {
    "name": "OXY/USDC",
    "baseCurrency": "OXY",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "GZ3WBFsqntmERPwumFEYgrX2B7J7G11MzNZAy7Hje27X",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "z3dn17yLaGMKffVogeFHQ9zWVcXgqgf3PQnDsNs2g6M",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.0001,
    "minOrderSize": 1,
    "deprecated": false
  },
  {
    "name": "xCOPE/USDC",
    "baseCurrency": "xCOPE",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "7MpMwArporUHEGW7quUpkPZp5L5cHPs9eKUfKCdaPHq2",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "3K6rftdAaQYMPunrtNRHgnK2UAtjm2JwyT2oCiTDouYE",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.01,
    "minOrderSize": 1,
    "deprecated": false
  },
  {
    "name": "COPE/USDC",
    "baseCurrency": "COPE",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "6fc7v3PmjZG9Lk2XTot6BywGyYLkBQuzuFKd4FpCsPxk",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "8HGyAAB1yoM1ttS7pXjHMa3dukTFGQggnFFH3hJZgzQh",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.001,
    "minOrderSize": 0.001,
    "deprecated": false
  },
  {
    "name": "MER/USDT",
    "baseCurrency": "MER",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "6HwcY27nbeb933UkEcxqJejtjWLfNQFWkGCjAVNes6g7",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "MERt85fc5boKw3BW1eYdxonEuJNvXbiMbs6hvheau5K",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 0.00001,
    "minOrderSize": 0.1,
    "deprecated": false
  },
  {
    "name": "MER/USDC",
    "baseCurrency": "MER",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "G4LcexdCzzJUKZfqyVDQFzpkjhB1JoCNL8Kooxi9nJz5",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "MERt85fc5boKw3BW1eYdxonEuJNvXbiMbs6hvheau5K",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.001,
    "minOrderSize": 0.1,
    "deprecated": false
  },
  {
    "name": "SNY/USDC",
    "baseCurrency": "SNY",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "DPfj2jYwPaezkCmUNm5SSYfkrkz8WFqwGLcxDDUsN3gA",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "4dmKkXNHdgYsXqBHCuMikNQWwVomZURhYvkkX5c4pQ7y",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.0001,
    "minOrderSize": 0.01,
    "deprecated": false
  },
  {
    "name": "SLRS/USDC",
    "baseCurrency": "SLRS",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "2Gx3UfV831BAh8uQv1FKSPKS9yajfeeD8GJ4ZNb2o2YP",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "SLRSSpSLUTP7okbCUBYStWCo1vUgyt775faPqz8HUMr",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.0001,
    "minOrderSize": 0.1,
    "deprecated": false
  },
  {
    "name": "ETHV/USDT",
    "baseCurrency": "ETHV",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "HrgkuJryyKRserkoz7LBFYkASzhXHWp9XA6fRYCA6PHb",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "EL3yFeyHezeNugdKgNWmtSXGgRyCLhczcndm8HR8NCK2",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 0.01,
    "minOrderSize": 0.01,
    "deprecated": false
  },
  {
    "name": "IETHV/USDT",
    "baseCurrency": "IETHV",
    "quoteCurrency": "USDT",
    "version": 3,
    "address": "5aoLj1bySDhhWjo7cLfT3pF2gqNGd63uEJ9HMSfASESL",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "HZzCWPqGNmDoyL5Q2SxTVTMWgv2LsCaogvzkXa5Lhyi",
    "quoteMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB",
    "tickSize": 0.01,
    "minOrderSize": 0.01,
    "deprecated": false
  },
  {
    "name": "SBR/USDC",
    "baseCurrency": "SBR",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "HXBi8YBwbh4TXF6PjVw81m8Z3Cc4WBofvauj5SBFdgUs",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "Saber2gLauYim4Mvftnrasomsv6NvAuncvMEZwcLpD1",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.0001,
    "minOrderSize": 0.01,
    "deprecated": false
  },
  {
    "name": "renBTC/USDC",
    "baseCurrency": "renBTC",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "74Ciu5yRzhe8TFTHvQuEVbFZJrbnCMRoohBK33NNiPtv",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "CDJWUqTcYTVAKXAVXoQZFes5JUFc7owSeq7eMQcDSbo5",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.01,
    "minOrderSize": 0.0001,
    "deprecated": false
  },
  {
    "name": "renDOGE/USDC",
    "baseCurrency": "renDOGE",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "5FpKCWYXgHWZ9CdDMHjwxAfqxJLdw2PRXuAmtECkzADk",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "ArUkYE2XDKzqy77PRRGjo4wREWwqk6RXTfM9NeqzPvjU",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.00001,
    "minOrderSize": 1,
    "deprecated": false
  },
  {
    "name": "DXL/USDC",
    "baseCurrency": "DXL",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "DYfigimKWc5VhavR4moPBibx9sMcWYVSjVdWvPztBPTa",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "GsNzxJfFn6zQdJGeYsupJWzUAm57Ba7335mfhWvFiE9Z",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.0001,
    "minOrderSize": 0.01,
    "deprecated": false
  },
  {
    "name": "MNGO/USDC",
    "baseCurrency": "MNGO",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "3d4rzwpy9iGdCZvgxcu7B1YocYffVLsQXPXkBZKt2zLc",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "MangoCzJ36AjZyKwVj3VnYU4GTonjfVEnJmvvWaxLac",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.0001,
    "minOrderSize": 1,
    "deprecated": false
  },
  {
    "name": "CYS/USDC",
    "baseCurrency": "CYS",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "6V6y6QFi17QZC9qNRpVp7SaPiHpCTp2skbRQkUyZZXPW",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "BRLsMczKuaR5w9vSubF4j8HwEGGprVAyyVgS4EX7DKEg",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.001,
    "minOrderSize": 0.001,
    "deprecated": false
  },
  {
    "name": "POLIS/USDC",
    "baseCurrency": "POLIS",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "HxFLKUAmAMLz1jtT3hbvCMELwH5H9tpM2QugP8sKyfhW",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "poLisWXnNRwC6oBu1vHiuKQzFjGL4XDSu4g9qjz9qVk",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.0001,
    "minOrderSize": 0.1,
    "deprecated": false
  },
  {
    "name": "ATLAS/USDC",
    "baseCurrency": "ATLAS",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "Di66GTLsV64JgCCYGVcY21RZ173BHkjJVgPyezNN7P1K",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "ATLASXmbPQxBUYbxPsV97usA3fPQYEqzQBUHgiFCUsXx",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.00001,
    "minOrderSize": 0.1,
    "deprecated": false
  },
  {
    "name": "LIKE/USDC",
    "baseCurrency": "LIKE",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "3WptgZZu34aiDrLMUiPntTYZGNZ72yT1yxHYxSdbTArX",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "3bRTivrVsitbmCTGtqwp7hxXPsybkjn4XLNtPsHqa3zR",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.00001,
    "minOrderSize": 1,
    "deprecated": false
  },
  {
    "name": "MSOL/USDC",
    "baseCurrency": "MSOL",
    "quoteCurrency": "USDC",
    "version": 3,
    "address": "6oGsL2puUgySccKzn9XA9afqF217LfxP5ocq4B3LWsjy",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So",
    "quoteMintAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "tickSize": 0.001,
    "minOrderSize": 0.001,
    "deprecated": false
  },
  {
    "name": "MSOL/SOL",
    "baseCurrency": "MSOL",
    "quoteCurrency": "SOL",
    "version": 3,
    "address": "5cLrMai1DsLRYc1Nio9qMTicsWtvzjzZfJPXyAoF4t1Z",
    "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
    "baseMintAddress": "mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So",
    "quoteMintAddress": "So11111111111111111111111111111111111111112",
    "tickSize": 1e-7,
    "minOrderSize": 0.01,
    "deprecated": false
  }
]```

lmvdz avatar Nov 21 '21 17:11 lmvdz

Found this RPC: https://free.rpcpool.com serum-vial --endpoint https://free.rpcpool.com

lmvdz avatar Dec 02 '21 19:12 lmvdz