tardis-dev / serum-vial Goto Github PK
View Code? Open in Web Editor NEWReal-time WebSocket market data API for Serum
License: Mozilla Public License 2.0
Real-time WebSocket market data API for Serum
License: Mozilla Public License 2.0
Docker container keeps crashing.
Reproduce: pull i docker container and run it.
l2snapshot
for requested marketsl2update
messages with changes only (deltas)match
messages with trades as wellSince yesterday met the following exceptions:
2021-11-24T20:24:32.564Z error: Serum producer worker 10 error occurred: The user aborted a request. undefined
Uncaught Exception thrown { type: 'aborted', message: 'The user aborted a request.' }
take a look at market, it seems that each time it is a different market. looks like the error is from client side.
When solana-labs/solana#12237 or solana-labs/solana#9910 is implemented we could use it, but what about now?
Hi
qq - I'm in the situation where I need both a tradeId
field and fee information on trade events but there doesn't appear to be a message with contains both. Is there anything the prevents the L3 fill
event having the tradeId
or L2 trade
event having fee information?
Thanks
Hi @thaaddeus , have just run into a strange problem which only occurred in this one case when processing data for SOL/USDC on 20220620; the time ordered sequence of events is given below:
2022-06-20T19:06:45.209Z: open
message for order 631339815922709507324380
180.0 @ 34.225, slot 138327374
2022-06-20T19:06:52.228Z: fill
message for order 631339815922709507324380
, traded for 83.7 against order 340282366920938463463374607431664944666
, slot 138327386
2022-06-20T19:06:59.126Z: An orderbook snapshot is written to recover some issue in the data; however, the slot
associated with this update is 138327272 - this implies to me that it should be processed before handling the above open and fill, since related to an earlier block. In previous experiments it was found to be necessary to ignore the timestamp on snapshots and order messages by the slot for processing - however...
2022-06-20T19:07:01.134Z: Another open
message for order 631339815922709507324380
, now for [email protected], slot 138327402
2022-06-20T19:07:01.134Z: A duplicate of the fill
messages for order 631339815922709507324380
, traded for 83.7 against order 340282366920938463463374607431664944666
, slot 138327402
2022-06-20T19:07:01.134Z: done
message for 631339815922709507324380
(reason = filled), as expected based on the second set of messages
Need then to confirm the correct way to order the messages when processing historically; currently ordering by slot
and then by the order in which the messages were received, which has worked well in all other dates, but the above suggests that, at least for snapshots, the slot may not always be sufficient for sorting the messages, and timestamp may need to be considered... any advice would be appreciated.
This recording was using v1.6.1, I do note that 1.7.0 is now available and will update, but since this has only occurred once since starting to record I won't be able to say whether the issue is resolved by the update - if the update is expected to fix this, please let me know.
Hello,
after the basic installation via
npx serum-vial
or
npm install -g serum-vial
serum-vial
i get the Error Serum producer worker 12 error occurred: mint not found Error: mint not found
Here the full output:
2022-06-11T05:53:26.744Z info: Starting serum-vial server with options {"port":8000,"nodeEndpoint":"https://solana-api.projectserum.com","minionsCount":1,"commitment":"confirmed","bootDelay":500}
2022-06-11T05:53:26.746Z info: Starting single minion worker...
2022-06-11T05:53:27.286Z info: Listening on port 8000 {"minionId":1}
2022-06-11T05:53:27.390Z info: Starting serum producers for 140 markets, rpc endpoint: https://solana-api.projectserum.com
2022-06-11T05:53:27.870Z info: Serum producer starting for soALEPH/USDC market...
2022-06-11T05:53:28.336Z info: Starting RPC client {"nodeWsEndpoint":"wss://solana-api.projectserum.com/","nodeRestEndpoint":"https://solana-api.projectserum.com","marketName":"soALEPH/USDC","commitment":"confirmed"}
2022-06-11T05:53:28.435Z info: Serum producer starting for BTC/USDC market...
2022-06-11T05:53:28.755Z info: Starting RPC client {"nodeWsEndpoint":"wss://solana-api.projectserum.com/","nodeRestEndpoint":"https://solana-api.projectserum.com","marketName":"BTC/USDC","commitment":"confirmed"}
2022-06-11T05:53:28.908Z info: Serum producer starting for soETH/USDC market...
2022-06-11T05:53:28.979Z info: Established new RPC WebSocket connection... {"market":"soALEPH/USDC"}
2022-06-11T05:53:28.979Z info: Serum producer started for soALEPH/USDC market...
2022-06-11T05:53:29.259Z info: Starting RPC client {"nodeWsEndpoint":"wss://solana-api.projectserum.com/","nodeRestEndpoint":"https://solana-api.projectserum.com","marketName":"soETH/USDC","commitment":"confirmed"}
2022-06-11T05:53:29.375Z info: Established new RPC WebSocket connection... {"market":"BTC/USDC"}
2022-06-11T05:53:29.375Z info: Serum producer started for BTC/USDC market...
2022-06-11T05:53:29.511Z info: Serum producer starting for SRM/USDC market...
2022-06-11T05:53:29.872Z info: Starting RPC client {"nodeWsEndpoint":"wss://solana-api.projectserum.com/","nodeRestEndpoint":"https://solana-api.projectserum.com","marketName":"SRM/USDC","commitment":"confirmed"}
2022-06-11T05:53:29.896Z info: Established new RPC WebSocket connection... {"market":"soETH/USDC"}
2022-06-11T05:53:29.896Z info: Serum producer started for soETH/USDC market...
2022-06-11T05:53:29.987Z info: Serum producer starting for soSUSHI/USDC market...
2022-06-11T05:53:30.306Z info: Starting RPC client {"nodeWsEndpoint":"wss://solana-api.projectserum.com/","nodeRestEndpoint":"https://solana-api.projectserum.com","marketName":"soSUSHI/USDC","commitment":"confirmed"}
2022-06-11T05:53:30.514Z info: Established new RPC WebSocket connection... {"market":"SRM/USDC"}
2022-06-11T05:53:30.514Z info: Serum producer starting for soSXP/USDC market...
2022-06-11T05:53:30.514Z info: Serum producer started for SRM/USDC market...
2022-06-11T05:53:30.842Z info: Established new RPC WebSocket connection... {"market":"soSUSHI/USDC"}
2022-06-11T05:53:30.842Z info: Serum producer started for soSUSHI/USDC market...
2022-06-11T05:53:30.876Z info: Starting RPC client {"nodeWsEndpoint":"wss://solana-api.projectserum.com/","nodeRestEndpoint":"https://solana-api.projectserum.com","marketName":"soSXP/USDC","commitment":"confirmed"}
2022-06-11T05:53:31.037Z info: Serum producer starting for MSRM/USDC market...
2022-06-11T05:53:31.378Z info: Starting RPC client {"nodeWsEndpoint":"wss://solana-api.projectserum.com/","nodeRestEndpoint":"https://solana-api.projectserum.com","marketName":"MSRM/USDC","commitment":"confirmed"}
2022-06-11T05:53:31.485Z info: Established new RPC WebSocket connection... {"market":"soSXP/USDC"}
2022-06-11T05:53:31.485Z info: Serum producer started for soSXP/USDC market...
2022-06-11T05:53:31.531Z info: Serum producer starting for soFTT/USDC market...
2022-06-11T05:53:31.907Z info: Established new RPC WebSocket connection... {"market":"MSRM/USDC"}
2022-06-11T05:53:31.907Z info: Serum producer started for MSRM/USDC market...
2022-06-11T05:53:31.974Z info: Starting RPC client {"nodeWsEndpoint":"wss://solana-api.projectserum.com/","nodeRestEndpoint":"https://solana-api.projectserum.com","marketName":"soFTT/USDC","commitment":"confirmed"}
2022-06-11T05:53:32.045Z info: Serum producer starting for soYFI/USDC market...
2022-06-11T05:53:32.617Z info: Serum producer starting for soLINK/USDC market...
2022-06-11T05:53:32.789Z info: Starting RPC client {"nodeWsEndpoint":"wss://solana-api.projectserum.com/","nodeRestEndpoint":"https://solana-api.projectserum.com","marketName":"soYFI/USDC","commitment":"confirmed"}
2022-06-11T05:53:33.171Z info: Serum producer starting for soHGET/USDC market...
2022-06-11T05:53:33.182Z info: Established new RPC WebSocket connection... {"market":"soFTT/USDC"}
2022-06-11T05:53:33.183Z info: Serum producer started for soFTT/USDC market...
2022-06-11T05:53:33.297Z info: Starting RPC client {"nodeWsEndpoint":"wss://solana-api.projectserum.com/","nodeRestEndpoint":"https://solana-api.projectserum.com","marketName":"soLINK/USDC","commitment":"confirmed"}
2022-06-11T05:53:33.678Z info: Serum producer starting for soCREAM/USDC market...
2022-06-11T05:53:33.921Z info: Established new RPC WebSocket connection... {"market":"soYFI/USDC"}
2022-06-11T05:53:33.922Z info: Serum producer started for soYFI/USDC market...
2022-06-11T05:53:33.972Z error: Serum producer worker 12 error occurred: mint not found Error: mint not found
at throwIfNull (C:\Users\user\AppData\Roaming\npm\node_modules\serum-vial\node_modules\@project-serum\serum\lib\market.js:1078:15)
at getMintDecimals (C:\Users\user\AppData\Roaming\npm\node_modules\serum-vial\node_modules\@project-serum\serum\lib\market.js:1048:22)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async Promise.all (index 0)
at async Function.load (C:\Users\user\AppData\Roaming\npm\node_modules\serum-vial\node_modules\@project-serum\serum\lib\market.js:143:55)
at async SerumProducer.run (C:\Users\user\AppData\Roaming\npm\node_modules\serum-vial\dist\serum_producer.js:36:24)
Uncaught Exception thrown Error: mint not found
at throwIfNull (C:\Users\user\AppData\Roaming\npm\node_modules\serum-vial\node_modules\@project-serum\serum\lib\market.js:1078:15)
at getMintDecimals (C:\Users\user\AppData\Roaming\npm\node_modules\serum-vial\node_modules\@project-serum\serum\lib\market.js:1048:22)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async Promise.all (index 0)
at async Function.load (C:\Users\user\AppData\Roaming\npm\node_modules\serum-vial\node_modules\@project-serum\serum\lib\market.js:143:55)
at async SerumProducer.run (C:\Users\user\AppData\Roaming\npm\node_modules\serum-vial\dist\serum_producer.js:36:24)
Hi @thaaddeus, a couple of other possible issues in the message progression which have been encountered:
Quite regularly observe situation where an order is opened, fill
messages are received for a part of the order size, and then a done
message with reason=filled
is received - suspect that these are orders which are partially filled and then cancelled, and so should be flagged as reason=canceled
?
There are also regular cases where a fill
message is received with maker=true
, but no open
message for the order has previously been generated. I expect that here the order is opened and immediately filled in full or in part on the same update; I would expect this scenario to produce both an open
and a fill
for the order (since it doesn't make sense to have a maker
fill for an order that hasn't been opened on the book).
Let me know if you need any other info.
Thanks!
Getting this crash with version 1.4.10, node/v16.0.0, using an RPCPool endpoint. Was running fine for a few hours before this:
2021-12-21T18:54:28.116Z info: Established new RPC WebSocket connection... {"market":"HGET/USDC"}
2021-12-21T18:54:28.213Z info: Established new RPC WebSocket connection... {"market":"DXL/USDC"}
2021-12-21T18:54:28.228Z info: Established new RPC WebSocket connection... {"market":"MNGO/USDC"}
2021-12-21T18:54:28.262Z info: Established new RPC WebSocket connection... {"market":"KIN/USDC"}
2021-12-21T18:54:28.263Z info: Established new RPC WebSocket connection... {"market":"ALEPH/USDC"}
2021-12-21T18:54:28.469Z info: Established new RPC WebSocket connection... {"market":"MSOL/USDC"}
2021-12-21T18:54:28.536Z error: Serum producer worker 31 error occurred: _subscribeToAccountsNotifications WS closed Error: _subscribeToAccountsNotifications WS closed
at AccountsChangeNotifications._subscribeToAccountsNotifications (/Users/tnugent/.nvm/versions/node/v16.0.0/lib/node_modules/serum-vial/dist/rpc_client.js:331:23)
at WebSocket.ws.onopen (/Users/tnugent/.nvm/versions/node/v16.0.0/lib/node_modules/serum-vial/dist/rpc_client.js:191:18)
at runMicrotasks ()
at processTicksAndRejections (node:internal/process/task_queues:96:5)
Uncaught Exception thrown Error: _subscribeToAccountsNotifications WS closed
at AccountsChangeNotifications._subscribeToAccountsNotifications (/Users/tnugent/.nvm/versions/node/v16.0.0/lib/node_modules/serum-vial/dist/rpc_client.js:331:23)
at WebSocket.ws.onopen (/Users/tnugent/.nvm/versions/node/v16.0.0/lib/node_modules/serum-vial/dist/rpc_client.js:191:18)
at runMicrotasks ()
at processTicksAndRejections (node:internal/process/task_queues:96:5)
FATAL ERROR: v8::HandleScope::CreateHandle() Cannot create a handle without a HandleScope
1: 0x10d988ee5 node::Abort() (.cold.1) [/Users/tnugent/.nvm/versions/node/v16.0.0/bin/node]
2: 0x10c63edc9 node::Abort() [/Users/tnugent/.nvm/versions/node/v16.0.0/bin/node]
3: 0x10c63ef2f node::OnFatalError(char const*, char const*) [/Users/tnugent/.nvm/versions/node/v16.0.0/bin/node]
4: 0x10c7bb1be v8::Utils::ReportApiFailure(char const*, char const*) [/Users/tnugent/.nvm/versions/node/v16.0.0/bin/node]
5: 0x10c94f9b2 v8::internal::HandleScope::Extend(v8::internal::Isolate*) [/Users/tnugent/.nvm/versions/node/v16.0.0/bin/node]
6: 0x10c9674d8 v8::internal::FactoryBasev8::internal::Factory::NewRawOneByteString(int, v8::internal::AllocationType) [/Users/tnugent/.nvm/versions/node/v16.0.0/bin/node]
7: 0x10c96e10c v8::internal::Factory::NewStringFromOneByte(v8::internal::Vector const&, v8::internal::AllocationType) [/Users/tnugent/.nvm/versions/node/v16.0.0/bin/node]
8: 0x10c7df0ef v8::String::NewFromOneByte(v8::Isolate*, unsigned char const*, v8::NewStringType, int) [/Users/tnugent/.nvm/versions/node/v16.0.0/bin/node]
9: 0x10c783dc4 node::crypto::TLSWrap::InvokeQueued(int, char const*) [/Users/tnugent/.nvm/versions/node/v16.0.0/bin/node]
10: 0x10c783a6f node::crypto::TLSWrap::Destroy() [/Users/tnugent/.nvm/versions/node/v16.0.0/bin/node]
11: 0x10c783902 node::crypto::TLSWrap::~TLSWrap() [/Users/tnugent/.nvm/versions/node/v16.0.0/bin/node]
12: 0x10c783b8e node::crypto::TLSWrap::~TLSWrap() [/Users/tnugent/.nvm/versions/node/v16.0.0/bin/node]
13: 0x10c5e021f node::Environment::RunCleanup() [/Users/tnugent/.nvm/versions/node/v16.0.0/bin/node]
14: 0x10c573ea4 node::FreeEnvironment(node::Environment*) [/Users/tnugent/.nvm/versions/node/v16.0.0/bin/node]
15: 0x10c6e3a55 node::worker::Worker::Run() [/Users/tnugent/.nvm/versions/node/v16.0.0/bin/node]
16: 0x10c6e76b2 node::worker::Worker::StartThread(v8::FunctionCallbackInfov8::Value const&)::$_3::__invoke(void*) [/Users/tnugent/.nvm/versions/node/v16.0.0/bin/node]
17: 0x7fff2052f8fc _pthread_start [/usr/lib/system/libsystem_pthread.dylib]
18: 0x7fff2052b443 thread_start [/usr/lib/system/libsystem_pthread.dylib]
Abort trap: 6
Hi! At first, thank you for the awesome project! I'm testing it for a week now and I see it's all stable, but the CPU load average differs from 16 to 100+ day to day for my setup process 140+ Serum markets. Do you have any recommendations about hardware setup? Thanks!
Hello. I've got the application crash, please find details below. Thank you.
serum-vial
, please find logs below,http://myinstance.com:8000/v1/markets
in a browser.$ docker logs -f --timestamps zen_banach [234/865]
2021-06-02T16:23:34.740003026Z 2021-06-02T16:23:34.732Z info: Starting serum-vial server with options {"port":8000,"nodeEndpoint":"https://api.rpcpool.com","validateL3Diffs":false,"minio
nsCount":2,"commitment":"confirmed"}
2021-06-02T16:23:34.740560264Z 2021-06-02T16:23:34.739Z info: Starting 2 minion workers...
2021-06-02T16:23:35.937257814Z 2021-06-02T16:23:35.934Z info: Listening on port 8000 {"minionId":2}
2021-06-02T16:23:36.059843636Z 2021-06-02T16:23:36.057Z info: Listening on port 8000 {"minionId":1}
2021-06-02T16:23:36.158306117Z 2021-06-02T16:23:36.157Z info: Starting serum producers for 67 markets, rpc endpoint: https://api.rpcpool.com
2021-06-02T16:23:38.084784429Z 2021-06-02T16:23:38.080Z info: Serum producer starting for ALEPH/USDC market...
2021-06-02T16:23:40.025392466Z 2021-06-02T16:23:40.019Z info: Serum producer starting for BTC/USDC market...
2021-06-02T16:23:40.831377811Z 2021-06-02T16:23:40.802Z info: Serum producer starting for ETH/USDC market...
2021-06-02T16:23:41.331070285Z 2021-06-02T16:23:41.328Z info: Serum producer starting for SRM/USDC market...
2021-06-02T16:23:41.563597066Z 2021-06-02T16:23:41.548Z info: Serum producer starting for SUSHI/USDC market...
...
2021-06-02T16:24:42.810154085Z 2021-06-02T16:24:42.808Z info: Serum producer starting for MER/USDC market...
2021-06-02T16:27:23.750183298Z 2021-06-02T16:27:23.749Z error: Serum producer worker 3 error occurred: The user aborted a request. undefined
2021-06-02T16:27:23.755628684Z Uncaught Exception thrown Error [ERR_UNHANDLED_ERROR]: Unhandled error. ({ type: 'aborted', message: 'The user aborted a request.' })
2021-06-02T16:27:23.755912112Z at new NodeError (node:internal/errors:329:5)
2021-06-02T16:27:23.756065527Z at process.emit (node:events:358:17)
2021-06-02T16:27:23.756075406Z at emitUnhandledRejectionOrErr (node:internal/event_target:639:11)
2021-06-02T16:27:23.756079143Z at MessagePort.[nodejs.internal.kHybridDispatch] (node:internal/event_target:464:9)
2021-06-02T16:27:23.756082830Z at MessagePort.exports.emitMessage (node:internal/per_context/messageport:23:28) {
2021-06-02T16:27:23.756086417Z code: 'ERR_UNHANDLED_ERROR',
2021-06-02T16:27:23.756090294Z context: { type: 'aborted', message: 'The user aborted a request.' }
2021-06-02T16:27:23.756094963Z }
2021-06-02T16:27:23.895902761Z uv loop at [0x7f8dbedb2b38] has open handles:
2021-06-02T16:27:23.895977841Z [0x7f8da0414ab0] poll (active)
2021-06-02T16:27:23.895983271Z Close callback: 0x24
2021-06-02T16:27:23.895987048Z Data: 0x7f8da00c4420
2021-06-02T16:27:23.895990575Z (First field): 0x7f8da0414ab0
2021-06-02T16:27:23.895993791Z [0x7f8da01a6660] poll (active)
2021-06-02T16:27:23.895996977Z Close callback: (nil)
2021-06-02T16:27:23.896000143Z Data: 0x7f8da0170f60
2021-06-02T16:27:23.896003399Z (First field): 0x7f8da01a6660
2021-06-02T16:27:23.896006635Z uv loop at [0x7f8dbedb2b38] has 2 open handles in total
2021-06-02T16:27:23.896009931Z node[7]: ../src/debug_utils.cc:322:void node::CheckedUvLoopClose(uv_loop_t*): Assertion `0 && "uv_loop_close() while having open handles"' failed.
2021-06-02T16:27:23.900816718Z 1: 0xa89e60 node::Abort() [node]
2021-06-02T16:27:23.900888581Z 2: 0xa89ede [node]
2021-06-02T16:27:23.900893972Z 3: 0xa02ed1 [node]
2021-06-02T16:27:23.900897007Z 4: 0xb52980 node::worker::Worker::Run() [node]
2021-06-02T16:27:23.900900303Z 5: 0xb529c8 [node]
2021-06-02T16:27:23.900903459Z 6: 0x7f8dc671a4a4 [/lib/x86_64-linux-gnu/libpthread.so.0]
2021-06-02T16:27:23.900906675Z 7: 0x7f8dc645cd0f clone [/lib/x86_64-linux-gnu/libc.so.6]
2021-06-02T16:27:23.996931626Z Aborted
There is an issue with frequent socket termination from this if condition
https://github.com/tardis-dev/serum-vial/blob/master/src/rpc_client.ts#L257
I've found out that a response to "ping" message is error: { code: -32601, message: 'Method not found' }
and when we receive it in the condition above we terminate Socket connection, but it's not necessary - because nothing went wrong.
may subscribe and then get a snapshot?
Line 228 in 3379ede
Because with current way, get and than subscribe, can miss some data.
Also, may be periodically push full data from time to time to clients?
match
const subscribeL2 = {
op: 'subscribe',
channel: 'trades',
markets: ['BTC/USDC']
}
ws.send(JSON.stringify(subscribeL2))
}```
i receive some trades right after running code
then no trades update anymore, about 2-3 min, it stop
I failed run serum-vial. Can anyone help?
$ npx serum-vial
/mnt/Archive/Downloads/node_modules/serum-vial/dist/helpers.js:85
exports.minionReadyChannel = new BroadcastChannel('MinionReady');
^
TypeError: BroadcastChannel is not a constructor
at Object.<anonymous> (/mnt/Archive/Downloads/node_modules/serum-vial/dist/helpers.js:85:30)
at Module._compile (internal/modules/cjs/loader.js:999:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
at Module.load (internal/modules/cjs/loader.js:863:32)
at Function.Module._load (internal/modules/cjs/loader.js:708:14)
at Module.require (internal/modules/cjs/loader.js:887:19)
at require (internal/modules/cjs/helpers.js:74:18)
at Object.<anonymous> (/mnt/Archive/Downloads/node_modules/serum-vial/dist/boot_server.js:10:19)
at Module._compile (internal/modules/cjs/loader.js:999:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
npm ERR! code 1
npm ERR! path /mnt/Archive/Downloads
npm ERR! command failed
npm ERR! command sh -c serum-vial
npm ERR! A complete log of this run can be found in:
npm ERR! /home/notooth/.npm/_logs/2021-12-26T04_12_48_590Z-debug.log
This is a great project, it's very important for my trading. I use the publicly hosted server but I have a question please:
Do you wait for Finalized slots? Because otherwise it can be sending trades that end up being reversed after a chain fork.
Hi there. Thank you for this package.
I get this error after executing either the npx
or the global npm
setup:
Unhandled Rejection at Promise Error: Out of order notification after publish: market: current slot 41529994, update slot: 41529994
at AccountsNotification._update (/Users/sully/.nvm/versions/node/v14.13.1/lib/node_modules/serum-machine/dist/serum-producer.js:128:23)
at Object.callback (/Users/sully/.nvm/versions/node/v14.13.1/lib/node_modules/serum-machine/dist/serum-producer.js:96:22)
at Connection._wsOnAccountNotification (/Users/sully/.nvm/versions/node/v14.13.1/lib/node_modules/serum-machine/node_modules/@solana/web3.js/lib/index.cjs.js:5209:17)
at Client.emit (/Users/sully/.nvm/versions/node/v14.13.1/lib/node_modules/serum-machine/node_modules/eventemitter3/index.js:181:35)
at /Users/sully/.nvm/versions/node/v14.13.1/lib/node_modules/serum-machine/node_modules/rpc-websockets/dist/lib/client.js:425:22
at processTicksAndRejections (internal/process/task_queues.js:93:5) Promise {
<rejected> Error: Out of order notification after publish: market: current slot 41529994, update slot: 41529994
at AccountsNotification._update (/Users/sully/.nvm/versions/node/v14.13.1/lib/node_modules/serum-machine/dist/serum-producer.js:128:23)
at Object.callback (/Users/sully/.nvm/versions/node/v14.13.1/lib/node_modules/serum-machine/dist/serum-producer.js:96:22)
at Connection._wsOnAccountNotification (/Users/sully/.nvm/versions/node/v14.13.1/lib/node_modules/serum-machine/node_modules/@solana/web3.js/lib/index.cjs.js:5209:17)
at Client.emit (/Users/sully/.nvm/versions/node/v14.13.1/lib/node_modules/serum-machine/node_modules/eventemitter3/index.js:181:35)
at /Users/sully/.nvm/versions/node/v14.13.1/lib/node_modules/serum-machine/node_modules/rpc-websockets/dist/lib/client.js:425:22
at processTicksAndRejections (internal/process/task_queues.js:93:5)
}
Hello. I have the latest dockerized Serum Vial running on a 6 CPU and 16Gb RAM machine that works with a dedicated Solana RPC node querying for 143 markets data. There is a lot of WebSocket connection warning messages as mentioned below. I see they usually appear in 5-10 minutes after an instance starts. Is it a problem and what side I should tune to fix it (Solana RPC, Serum Vial, or connectivity between them)? Let me know if the full log may help. Thank you!
warn: WS send error: write ECONNRESET
warn: WS send error: write EPIPE
warn: WS send error: WebSocket is not open: readyState 2
warn: WS send error: WebSocket is not open: readyState 3 (CLOSED)
warn: Out of order notification for PUBLISHED event: current slot 77095564, update slot: 77095564, resetting... {"market":"SRM/SOL"}
Hello.
I have 3 Serum Vial instances running. Also, there is monitoring with blackbox_exporter tracks their availability. It checks http://my-serum-vial.net:8000/v1/market
request returns a response with HTTP 200 status with 30 seconds timeout.
Frequently all 3 instances don't respond. I see this behavior in instances spinning for more than 2 days. Please find a screenshot from the monitoring dashboard below. Each time plot goes down means an instance gave no response. At the same time, WebSockets API continues to provide data.
I am currently trying to set up Serum Vial with my own Solana Validator, and I am getting this error:
/home/linuxbrew/.linuxbrew/lib/node_modules/serum-vial/dist/helpers.js:84
exports.minionReadyChannel = new BroadcastChannel('MinionReady');
^
TypeError: BroadcastChannel is not a constructor
How can I fix this?
Relevant Solana issue: solana-labs/solana#12237
I did read you had limited time to test, but 1.3.0 seems to be broken for level3 messages.
The simplest possible test:
serum-vial
websocat
or similar and send {"op":"subscribe","channel":"level3","markets":["SOL/USDC"]}
Expected:
Actual:
Reverting to 1.2.10 and it works.
After running solana-test-validator and deploying serum-dex, I still cannot to run serum-vial. Can anyone help?
$ npx serum-vial --endpoint http://127.0.0.1:1024 --ws-endpoint-port 8899
...
2021-12-27T11:48:45.092Z info: No market data published for prolonged time {"lastPublishTimestamp":"2021-12-27T11:48:00.088Z","noDataPublishedForSeconds":45.003}
2021-12-27T11:49:00.092Z info: No market data published for prolonged time {"lastPublishTimestamp":"2021-12-27T11:48:00.088Z","noDataPublishedForSeconds":60.004}
2021-12-27T11:49:15.093Z info: No market data published for prolonged time {"lastPublishTimestamp":"2021-12-27T11:48:00.088Z","noDataPublishedForSeconds":75.004}
2021-12-27T11:49:30.094Z info: No market data published for prolonged time {"lastPublishTimestamp":"2021-12-27T11:48:00.088Z","noDataPublishedForSeconds":90.006}
2021-12-27T11:49:45.094Z info: No market data published for prolonged time {"lastPublishTimestamp":"2021-12-27T11:48:00.088Z","noDataPublishedForSeconds":105.006}
2021-12-27T11:50:00.094Z info: No market data published for prolonged time {"lastPublishTimestamp":"2021-12-27T11:48:00.088Z","noDataPublishedForSeconds":120.006}
2021-12-27T11:50:15.094Z info: No market data published for prolonged time {"lastPublishTimestamp":"2021-12-27T11:48:00.088Z","noDataPublishedForSeconds":135.006}
2021-12-27T11:50:30.095Z info: No market data published for prolonged time {"lastPublishTimestamp":"2021-12-27T11:48:00.088Z","noDataPublishedForSeconds":150.007}
2021-12-27T11:50:45.095Z info: No market data published for prolonged time {"lastPublishTimestamp":"2021-12-27T11:48:00.088Z","noDataPublishedForSeconds":165.007}
2021-12-27T11:51:00.096Z info: No market data published for prolonged time {"lastPublishTimestamp":"2021-12-27T11:48:00.088Z","noDataPublishedForSeconds":180.007}
2021-12-27T11:51:13.691Z error: Serum producer worker 2 error occurred: Error
at RPCClient._getAccountInfoRPCResponseRaw (/home/notooth/.npm/_npx/3cad36236d7e47f4/node_modules/serum-vial/dist/rpc_client.js:94:23)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async executeAndRetry (/home/notooth/.npm/_npx/3cad36236d7e47f4/node_modules/serum-vial/dist/helpers.js:97:20)
at async RPCClient.getAccountInfo (/home/notooth/.npm/_npx/3cad36236d7e47f4/node_modules/serum-vial/dist/rpc_client.js:51:28)
at async Function.load (/home/notooth/.npm/_npx/3cad36236d7e47f4/node_modules/@project-serum/serum/lib/market.js:133:45)
at async SerumProducer.run (/home/notooth/.npm/_npx/3cad36236d7e47f4/node_modules/serum-vial/dist/serum_producer.js:36:24)
Uncaught Exception thrown Error
at RPCClient._getAccountInfoRPCResponseRaw (/home/notooth/.npm/_npx/3cad36236d7e47f4/node_modules/serum-vial/dist/rpc_client.js:94:23)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async executeAndRetry (/home/notooth/.npm/_npx/3cad36236d7e47f4/node_modules/serum-vial/dist/helpers.js:97:20)
at async RPCClient.getAccountInfo (/home/notooth/.npm/_npx/3cad36236d7e47f4/node_modules/serum-vial/dist/rpc_client.js:51:28)
at async Function.load (/home/notooth/.npm/_npx/3cad36236d7e47f4/node_modules/@project-serum/serum/lib/market.js:133:45)
at async SerumProducer.run (/home/notooth/.npm/_npx/3cad36236d7e47f4/node_modules/serum-vial/dist/serum_producer.js:36:24)
uv loop at [0x7f81737fda98] has open handles:
[0x7f816010e420] poll (active)
Close callback: 0xfcfa01fc8c400107
Data: 0x5b6f740
(First field): 0x7f816010e420
uv loop at [0x7f81737fda98] has 1 open handles in total
node[3060801]: ../src/debug_utils.cc:322:void node::CheckedUvLoopClose(uv_loop_t*): Assertion `0 && "uv_loop_close() while having open handles"' failed.
1: 0xb00d90 node::Abort() [node]
2: 0xb00e0e [node]
3: 0xa73cd1 [node]
4: 0xbc9e10 node::worker::Worker::Run() [node]
5: 0xbc9e58 [node]
6: 0x7f8182893ea7 [/lib/x86_64-linux-gnu/libpthread.so.0]
7: 0x7f81827c3def clone [/lib/x86_64-linux-gnu/libc.so.6]
Aborted
I was just wondering how difficult it would be to extend the rest interface to support adding/removing markets without restarting the feed and potentially causing gaps?
BTW Thanks for the great work, this is super useful!
From what I hear getting a validator running locally costs as much as 1 SOL per day. Which is quite hefty these days :) is that what you're doing or are you setting up a validator with voting? Can you explain? @thaaddeus ?
Since nearly two weeks the BNB/USDC Spotmarket in https://api.serum-vial.dev/v1/markets is deprecated now.
The new one has the address: 4UPUurKveNEJgBqJzqHPyi8DhedvpYsMXi7d43CjAg2f
Hi
I was just wondering whether there is something equivalent to an execution identifier for fills on Serum? I assume it's possible to get partial fills (?) so the order_id wouldn't be unique and also could receive multiple partials with the same timestamp (?) Perhaps there is a suitable alternative SHA256(blockhash, offset)?
Thanks
Andrew
First of all thanks for a great project!
How should I start this application if I need all non-deprecated markets from serum-ts/markets.json? Are there any secrets?
Why it's working so well on your public example?
If I start the application with 10 markets or less โ everything works just fine.
If I increase the number of markets to more than 80 โ messages come with a delay of up to 5 minutes.
For context, I am trying to build an application, that saves all trades on all markets to DB for generating OHLCV data + generating real-time charts.
Thanks.
Hello. An unexpected shutdown happened with an error shown below.
2021-05-03T15:28:37.614Z error: Minion worker 2 error occurred: failed to get info about account 2WghiBkDL2yRhHdvm8CpprrkmfguuQGJTCDfPSudKBAZ: FetchError: request to https://api.mainnet-beta.solana.com/ failed, reason: socket hang up Error: failed to get info about account 2WghiBkDL2yRhHdvm8CpprrkmfguuQGJTCDfPSudKBAZ: FetchError: request to https://api.mainnet-beta.solana.com/ failed, reason: socket hang up
at Connection.getAccountInfo (/usr/local/lib/node_modules/serum-vial/node_modules/@solana/web3.js/lib/index.cjs.js:3535:13)
at processTicksAndRejections (node:internal/process/task_queues:94:5)
at async Function.load (/usr/local/lib/node_modules/serum-vial/node_modules/@project-serum/serum/lib/market.js:104:45)
at async /usr/local/lib/node_modules/serum-vial/dist/minion.js:64:102
at async Promise.all (index 48)
at async Minion._listMarkets (/usr/local/lib/node_modules/serum-vial/dist/minion.js:62:33)
Uncaught Exception thrown Error: failed to get info about account 2WghiBkDL2yRhHdvm8CpprrkmfguuQGJTCDfPSudKBAZ: FetchError: request to https://api.mainnet-beta.solana.com/ failed, reason: socket hang up
at Connection.getAccountInfo (/usr/local/lib/node_modules/serum-vial/node_modules/@solana/web3.js/lib/index.cjs.js:3535:13)
at processTicksAndRejections (node:internal/process/task_queues:94:5)
at async Function.load (/usr/local/lib/node_modules/serum-vial/node_modules/@project-serum/serum/lib/market.js:104:45)
at async /usr/local/lib/node_modules/serum-vial/dist/minion.js:64:102
at async Promise.all (index 48)
at async Minion._listMarkets (/usr/local/lib/node_modules/serum-vial/dist/minion.js:62:33)
uv loop at [0x7f1f47ffeb38] has open handles:
[0x7f1f3c1b3040] poll (active)
Close callback: 0x91
Data: 0x7f1f3c38c800
(First field): 0x7f1f3c1b3040
uv loop at [0x7f1f47ffeb38] has 1 open handles in total
node[7]: ../src/debug_utils.cc:322:void node::CheckedUvLoopClose(uv_loop_t*): Assertion `0 && "uv_loop_close() while having open handles"' failed.
1: 0xa89e60 node::Abort() [node]
2: 0xa89ede [node]
3: 0xa02ed1 [node]
4: 0xb52980 node::worker::Worker::Run() [node]
5: 0xb529c8 [node]
6: 0x7f1f5fb524a4 [/lib/x86_64-linux-gnu/libpthread.so.0]
7: 0x7f1f5f894d0f clone [/lib/x86_64-linux-gnu/libc.so.6]
Aborted
I am currently getting a connection refused error when running serum-vial connected to my local validator after approx. 1 min. (So serum-vial fetches data for 1 min and then errors with the message below.)
I assume it's more related to the node itself (might be wrong though), nevertheless I don't really see why this behaviour occurred. So any pointers would be appreciated.
Error log below:
2021-06-03T14:47:14.463Z error: Serum producer worker 2 error occurred: request to http://localhost:8899/ failed, reason: connect ECONNREFUSED 127.0.0.1:8899 undefined
Uncaught Exception thrown Error [ERR_UNHANDLED_ERROR]: Unhandled error. ({
message: 'request to http://localhost:8899/ failed, reason: connect ECONNREFUSED 127.0.0.1:8899',
type: 'system',
errno: 'ECONNREFUSED',
code: 'ECONNREFUSED'
})
docker logs serum_dex_socket
2020-10-08T06:45:58.434Z serum-machine:serum-producer starting...
Unhandled Rejection at Promise Error: Out of order notification after publish: market: current slot 39982060, update slot: 39982060
at AccountsNotification._update (/usr/local/lib/node_modules/serum-machine/dist/serum-producer.js:128:23)
at Object.callback (/usr/local/lib/node_modules/serum-machine/dist/serum-producer.js:96:22)
at Connection._wsOnAccountNotification (/usr/local/lib/node_modules/serum-machine/node_modules/@solana/web3.js/lib/index.cjs.js:5209:17)
at Client.emit (/usr/local/lib/node_modules/serum-machine/node_modules/eventemitter3/index.js:181:35)
at /usr/local/lib/node_modules/serum-machine/node_modules/rpc-websockets/dist/lib/client.js:425:22
at processTicksAndRejections (internal/process/task_queues.js:93:5) Promise {
<rejected> Error: Out of order notification after publish: market: current slot 39982060, update slot: 39982060
at AccountsNotification._update (/usr/local/lib/node_modules/serum-machine/dist/serum-producer.js:128:23)
at Object.callback (/usr/local/lib/node_modules/serum-machine/dist/serum-producer.js:96:22)
at Connection._wsOnAccountNotification (/usr/local/lib/node_modules/serum-machine/node_modules/@solana/web3.js/lib/index.cjs.js:5209:17)
at Client.emit (/usr/local/lib/node_modules/serum-machine/node_modules/eventemitter3/index.js:181:35)
at /usr/local/lib/node_modules/serum-machine/node_modules/rpc-websockets/dist/lib/client.js:425:22
at processTicksAndRejections (internal/process/task_queues.js:93:5)
}
Enable closeOnBackpressureLimit
uNetworking/uWebSockets#1056 when released
Hi, is LUNA going to be made available? Seems to be available on mango's spot and perp markets
Hi,
I was wondering about what exactly the minions-count parameter does, and when it is necessary to increase it past the default of "1" -- The current description in the readme is kind of recursive. How many would I need for how many markets (IE if I am streaming every market with l3snapshot, do I need more than 1?), and what kind of impact does it have on the RPC for increasing it? If it is too low, what errors/symptoms are there?
I'm trying to filter level3 messages which involve orders from my wallet. I thought I would be able to use the account.property but it seems that the account string is not permanently linked to the wallet and get's re-issued periodically. Is there any other way to identify the owner of the bid/ask?
I tried to follow the docs and added a custom markets however i always get invalid market Name ,
bellow is my market.json
[ { "address": "GcoKtAmTy5QyuijXSmJKBtFdt99e6Buza18Js7j9AJ6e", "baseMintAddress": "CsZ5LZkDS7h9TDKjrbL7VAwQZ9nsRu8vJLhRYfmGaN8K", "deprecated": false, "name": "ALEPH/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "A8YFbxQYFVqKZaoYJLLUVcQiWP7G2MeEgW5wsAQgMvFw", "baseMintAddress": "9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E", "deprecated": false, "name": "BTC/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "4tSvZvnbyzHXLMTiFonMyxZoHmFqau1XArcRCVHLZ5gX", "baseMintAddress": "2FPyTwcZLUg1MDrwsyoP4D6s1tM7hAkHYRjkNb5w6Pxk", "deprecated": false, "name": "ETH/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "ByRys5tuUWDgL73G8JBAEfkdFf8JWBzPBDHsBVQ5vbQA", "baseMintAddress": "SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt", "deprecated": false, "name": "SRM/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "A1Q9iJDVVS8Wsswr9ajeZugmj64bQVCYLZQLra2TMBMo", "baseMintAddress": "AR1Mtgh7zAtxuxGd2XPovXPVjcSdY3i4rQYisNadjfKy", "deprecated": false, "name": "SUSHI/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "4LUro5jaPaTurXK737QAxgJywdhABnFAMQkXX4ZyqqaZ", "baseMintAddress": "SF3oTvfWzEP3DTwGSvUXRrGTvr75pdZNnBLAH9bzMuX", "deprecated": false, "name": "SXP/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "4VKLSYdvrQ5ngQrt1d2VS8o4ewvb2MMUZLiejbnGPV33", "baseMintAddress": "MSRMcoVyrFxnSgo5uXwone5SKcGhT1KEJMFEkMEWf9L", "deprecated": false, "name": "MSRM/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "2Pbh1CvRVku1TgewMfycemghf6sU9EyuFDcNXqvRmSxc", "baseMintAddress": "AGFEad2et2ZJif9jaGpdMixQqvW5i81aBdvKe7PHNfz3", "deprecated": false, "name": "FTT/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "7qcCo8jqepnjjvB5swP4Afsr3keVBs6gNpBTNubd1Kr2", "baseMintAddress": "3JSf5tPeuscJGtaCp5giEiDhv51gQ4v3zWg8DGgyLfAB", "deprecated": false, "name": "YFI/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "3hwH1txjJVS8qv588tWrjHfRxdqNjBykM1kMcit484up", "baseMintAddress": "CWE8jPTUYhdCTZYWPTe1o5DFqfdjzWKc9WKz6rSjQUdG", "deprecated": false, "name": "LINK/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "88vztw7RTN6yJQchVvxrs6oXUDryvpv9iJaFa1EEmg87", "baseMintAddress": "BtZQfWqDGbk9Wf2rXEiWyQBdBY1etnUUn6zEphvVS7yN", "deprecated": false, "name": "HGET/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "7nZP6feE94eAz9jmfakNJWPwEKaeezuKKC5D1vrnqyo2", "baseMintAddress": "5Fu5UUgbjpUvdBveb3a1JTNirL8rXtiYeSMWvKjtUNQv", "deprecated": false, "name": "CREAM/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "2wr3Ab29KNwGhtzr5HaPCyfU1qGJzTUAN4amCLZWaD1H", "baseMintAddress": "873KLxCbz7s9Kc4ZzgYRtNmhfkQrhfyWGZJBmyCbC3ei", "deprecated": false, "name": "UBXT/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "CnUV42ZykoKUnMDdyefv5kP6nDSJf7jFd7WXAecC6LYr", "baseMintAddress": "HqB7uswoVg4suaQiDP3wjxob1G5WdZ144zhdStwMCq7e", "deprecated": false, "name": "HNT/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "9Zx1CvxSVdroKMMWf2z8RwrnrLiQZ9VkQ7Ex3syQqdSH", "baseMintAddress": "9S4t2NEAiJVMvPdRYKVrfJpBafPBLtvbvyS3DecojQHw", "deprecated": false, "name": "FRONT/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "5CZXTTgVZKSzgSA3AFMN5a2f3hmwmmJ6hU8BHTEJ3PX8", "baseMintAddress": "6WNVCuxCGJzNjmMZoKyhZJwvJ5tYpsLyAtagzYASqBoF", "deprecated": false, "name": "AKRO/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "6Pn1cSiRos3qhBf54uBP9ZQg8x3JTardm1dL3n4p29tA", "baseMintAddress": "DJafV9qemGp7mLMEn5wrfqaFwxsbLgUsGVS16zKRk9kc", "deprecated": false, "name": "HXRO/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "6JYHjaQBx6AtKSSsizDMwozAEDEZ5KBsSUzH7kRjGJon", "baseMintAddress": "DEhAasscXF4kEGxFgJ3bq4PpVGp5wyUxMRvn6TzGVHaw", "deprecated": false, "name": "UNI/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "J7cPYBrXVy8Qeki2crZkZavcojf2sMRyQU7nx438Mf8t", "baseMintAddress": "GeDS162t9yGJuLEHPWXXGrb1zwkzinCgRwnT8vHYjKza", "deprecated": false, "name": "MATH/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "8BdpjpSD5n3nk8DQLqPUyTZvVqFu6kcff5bzUX5dqDpy", "baseMintAddress": "GXMvfY2jpQctDqZ9RoU3oWPhufKiCcFEfchvYumtX7jd", "deprecated": false, "name": "TOMO/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "4xyWjQ74Eifq17vbue5Ut9xfFNfuVB116tZLEpiZuAn8", "baseMintAddress": "EqWCKXfs3x47uVosDpTRgFniThL9Y8iCztJaapxbEaVX", "deprecated": false, "name": "LUA/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "jyei9Fpj2GtHLDDGgcuhDacxYLLiSyxU4TY7KxB2xai", "baseMintAddress": "SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt", "deprecated": false, "name": "SRM/SOL", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "9wFFyRfZBsuAha4YcuxcXLKwMxJR43S7fPfQLusDBzvT", "baseMintAddress": "So11111111111111111111111111111111111111112", "deprecated": false, "name": "SOL/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "E14BKBhDWD4EuTkWj1ooZezesGxMW8LPCps4W5PuzZJo", "baseMintAddress": "EchesyfXePKdLtoiZSL8pBe8Myagyy8ZRqsACNCFGnvp", "deprecated": false, "name": "FIDA/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "Bn6NPyr6UzrFAwC4WmvPvDr2Vm8XSUnFykM2aQroedgn", "baseMintAddress": "kinXdEcpDQeHPEuQnqmUgtYykqKGVFq6CeVX5iAHJq6", "deprecated": false, "name": "KIN/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "3A8XQRWXC7BjLpgLDDBhQJLT5yPCzS16cGYRKHkKxvYo", "baseMintAddress": "MAPS41MDahZ9QdKXhVa4dWB9RuyfV4XqhyAZ8XcYepb", "deprecated": false, "name": "MAPS/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "3rgacody9SvM88QR83GHaNdEEx4Fe2V2ed5GJp2oeKDr", "baseMintAddress": "GUohe4DJUA5FKPWo3joiPgsB7yzer7LpDmt1Vhzy3Zht", "deprecated": false, "name": "KEEP/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "5nLJ22h1DUfeCfwbFxPYK8zbfbri7nA9bXoDcR8AcJjs", "baseMintAddress": "MSRMcoVyrFxnSgo5uXwone5SKcGhT1KEJMFEkMEWf9L", "deprecated": false, "name": "MSRM/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "7dLVkUfBVfCGkFhSXDCq1ukM9usathSgS716t643iFGF", "baseMintAddress": "2FPyTwcZLUg1MDrwsyoP4D6s1tM7hAkHYRjkNb5w6Pxk", "deprecated": false, "name": "ETH/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "8afKwzHR3wJE7W7Y5hvQkngXh6iTepSZuutRMMy96MjR", "baseMintAddress": "SF3oTvfWzEP3DTwGSvUXRrGTvr75pdZNnBLAH9bzMuX", "deprecated": false, "name": "SXP/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "cgani53cMZgYfRMgSrNekJTMaLmccRfspsfTbXWRg7u", "baseMintAddress": "DgHK9mfhMtUwwv54GChRrU54T2Em5cuszq2uMuen1ZVE", "deprecated": false, "name": "CEL/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "Gyp1UGRgbrb6z8t7fpssxEKQgEmcJ4pVnWW3ds2p6ZPY", "baseMintAddress": "CsZ5LZkDS7h9TDKjrbL7VAwQZ9nsRu8vJLhRYfmGaN8K", "deprecated": false, "name": "ALEPH/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "4ztJEvQyryoYagj2uieep3dyPwG2pyEwb2dKXTwmXe82", "baseMintAddress": "5Fu5UUgbjpUvdBveb3a1JTNirL8rXtiYeSMWvKjtUNQv", "deprecated": false, "name": "CREAM/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "HEGnaVL5i48ubPBqWAhodnZo8VsSLzEM3Gfc451DnFj9", "baseMintAddress": "GUohe4DJUA5FKPWo3joiPgsB7yzer7LpDmt1Vhzy3Zht", "deprecated": false, "name": "KEEP/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "8FpuMGLtMZ7Wt9ZvyTGuTVwTwwzLYfS5NZWcHxbP1Wuh", "baseMintAddress": "HqB7uswoVg4suaQiDP3wjxob1G5WdZ144zhdStwMCq7e", "deprecated": false, "name": "HNT/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "5GAPymgnnWieGcRrcghZdA3aanefqa4cZx1ZSE8UTyMV", "baseMintAddress": "MAPS41MDahZ9QdKXhVa4dWB9RuyfV4XqhyAZ8XcYepb", "deprecated": false, "name": "MAPS/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "AADohBGxvf7bvixs2HKC3dG2RuU3xpZDwaTzYFJThM8U", "baseMintAddress": "6ry4WBDvAwAnrYJVv6MCog4J8zx6S3cPgSqnTsDZ73AR", "deprecated": false, "name": "TRYB/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "EbV7pPpEvheLizuYX3gUCvWM8iySbSRAhu2mQ5Vz2Mxf", "baseMintAddress": "EchesyfXePKdLtoiZSL8pBe8Myagyy8ZRqsACNCFGnvp", "deprecated": false, "name": "FIDA/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "FcPet5fz9NLdbXwVM6kw2WTHzRAD7mT78UjwTpawd7hJ", "baseMintAddress": "7ncCLJpP3MNww17LW8bRvx8odQQnubNtfNZBL5BgAEHW", "deprecated": false, "name": "RSR/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "AtNnsY1AyRERWJ8xCskfz38YdvruWVJQUVXgScC1iPb", "baseMintAddress": "SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt", "deprecated": false, "name": "SRM/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "teE55QrL4a4QSfydR9dnHF97jgCfptpuigbb53Lo95g", "baseMintAddress": "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R", "deprecated": false, "name": "RAY/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "C1EuT9VokAKLiW7i2ASnZUvxDoKuKkCpDDeNxAptuNe4", "baseMintAddress": "9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E", "deprecated": false, "name": "BTC/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "Hr3wzG8mZXNHV7TuL6YqtgfVUesCqMxGYCEyP3otywZE", "baseMintAddress": "AGFEad2et2ZJif9jaGpdMixQqvW5i81aBdvKe7PHNfz3", "deprecated": false, "name": "FTT/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "HLvRdctRB48F9yLnu9E24LUTRt89D48Z35yi1HcxayDf", "baseMintAddress": "6WNVCuxCGJzNjmMZoKyhZJwvJ5tYpsLyAtagzYASqBoF", "deprecated": false, "name": "AKRO/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "2SSnWNrc83otLpfRo792P6P3PESZpdr8cu2r8zCE6bMD", "baseMintAddress": "DEhAasscXF4kEGxFgJ3bq4PpVGp5wyUxMRvn6TzGVHaw", "deprecated": false, "name": "UNI/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "F1T7b6pnR8Pge3qmfNUfW6ZipRDiGpMww6TKTrRU4NiL", "baseMintAddress": "873KLxCbz7s9Kc4ZzgYRtNmhfkQrhfyWGZJBmyCbC3ei", "deprecated": false, "name": "UBXT/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "HWHvQhFmJB3NUcu1aihKmrKegfVxBEHzwVX6yZCKEsi1", "baseMintAddress": "So11111111111111111111111111111111111111112", "deprecated": false, "name": "SOL/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "35tV8UsHH8FnSAi3YFRrgCu4K9tb883wKnAXpnihot5r", "baseMintAddress": "EqWCKXfs3x47uVosDpTRgFniThL9Y8iCztJaapxbEaVX", "deprecated": false, "name": "LUA/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "6DgQRTpJTnAYBSShngAVZZDq7j9ogRN1GfSQ3cq9tubW", "baseMintAddress": "AR1Mtgh7zAtxuxGd2XPovXPVjcSdY3i4rQYisNadjfKy", "deprecated": false, "name": "SUSHI/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "2WghiBkDL2yRhHdvm8CpprrkmfguuQGJTCDfPSudKBAZ", "baseMintAddress": "GeDS162t9yGJuLEHPWXXGrb1zwkzinCgRwnT8vHYjKza", "deprecated": false, "name": "MATH/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "ErQXxiNfJgd4fqQ58PuEw5xY35TZG84tHT6FXf5s4UxY", "baseMintAddress": "BtZQfWqDGbk9Wf2rXEiWyQBdBY1etnUUn6zEphvVS7yN", "deprecated": false, "name": "HGET/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "CGC4UgWwqA9PET6Tfx6o6dLv94EK2coVkPtxgNHuBtxj", "baseMintAddress": "9S4t2NEAiJVMvPdRYKVrfJpBafPBLtvbvyS3DecojQHw", "deprecated": false, "name": "FRONT/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "GnKPri4thaGipzTbp8hhSGSrHgG4F8MFiZVrbRn16iG2", "baseMintAddress": "GXMvfY2jpQctDqZ9RoU3oWPhufKiCcFEfchvYumtX7jd", "deprecated": false, "name": "TOMO/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "6bxuB5N3bt3qW8UnPNLgMMzDq5sEH8pFmYJYGgzvE11V", "baseMintAddress": "dK83wTVypEpa1pqiBbHY3MNuUnT3ADUZM4wk9VZXZEc", "deprecated": false, "name": "AAVE/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "7cknqHAuGpfVXPtFoJpFvUjJ8wkmyEfbFusmwMfNy3FE", "baseMintAddress": "MAPS41MDahZ9QdKXhVa4dWB9RuyfV4XqhyAZ8XcYepb", "deprecated": false, "name": "MAPS/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "4absuMsgemvdjfkgdLQq1zKEjw3dHBoCWkzKoctndyqd", "baseMintAddress": "DJafV9qemGp7mLMEn5wrfqaFwxsbLgUsGVS16zKRk9kc", "deprecated": false, "name": "HXRO/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "4nCFQr8sahhhL4XJ7kngGFBmpkmyf3xLzemuMhn6mWTm", "baseMintAddress": "kinXdEcpDQeHPEuQnqmUgtYykqKGVFq6CeVX5iAHJq6", "deprecated": false, "name": "KIN/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "3Xg9Q4VtZhD4bVYJbTfgGWFV5zjE3U7ztSHa938zizte", "baseMintAddress": "3JSf5tPeuscJGtaCp5giEiDhv51gQ4v3zWg8DGgyLfAB", "deprecated": false, "name": "YFI/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "3yEZ9ZpXSQapmKjLAGKZEzUNA1rcupJtsDp5mPBWmGZR", "baseMintAddress": "CWE8jPTUYhdCTZYWPTe1o5DFqfdjzWKc9WKz6rSjQUdG", "deprecated": false, "name": "LINK/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "J2XSt77XWim5HwtUM8RUwQvmRXNZsbMKpp5GTKpHafvf", "baseMintAddress": "9F9fNTT6qwjsu4X4yWYKZpsbw5qT7o6yR2i57JF2jagy", "deprecated": false, "name": "SWAG/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "77quYg4MGneUdjgXCunt9GgM1usmrxKY31twEy3WHwcS", "baseMintAddress": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB", "deprecated": false, "name": "USDT/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "GKLev6UHeX1KSDCyo2bzyG6wqhByEzDBkmYTxEdmYJgB", "baseMintAddress": "z3dn17yLaGMKffVogeFHQ9zWVcXgqgf3PQnDsNs2g6M", "deprecated": false, "name": "OXY/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "HdBhZrnrxpje39ggXnTb6WuTWVvj5YKcSHwYGQCRsVj", "baseMintAddress": "z3dn17yLaGMKffVogeFHQ9zWVcXgqgf3PQnDsNs2g6M", "deprecated": false, "name": "OXY/WUSDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "GZ3WBFsqntmERPwumFEYgrX2B7J7G11MzNZAy7Hje27X", "baseMintAddress": "z3dn17yLaGMKffVogeFHQ9zWVcXgqgf3PQnDsNs2g6M", "deprecated": false, "name": "OXY/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "7MpMwArporUHEGW7quUpkPZp5L5cHPs9eKUfKCdaPHq2", "baseMintAddress": "3K6rftdAaQYMPunrtNRHgnK2UAtjm2JwyT2oCiTDouYE", "deprecated": false, "name": "xCOPE/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "6fc7v3PmjZG9Lk2XTot6BywGyYLkBQuzuFKd4FpCsPxk", "baseMintAddress": "8HGyAAB1yoM1ttS7pXjHMa3dukTFGQggnFFH3hJZgzQh", "deprecated": false, "name": "COPE/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "6HwcY27nbeb933UkEcxqJejtjWLfNQFWkGCjAVNes6g7", "baseMintAddress": "MERt85fc5boKw3BW1eYdxonEuJNvXbiMbs6hvheau5K", "deprecated": false, "name": "MER/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "G4LcexdCzzJUKZfqyVDQFzpkjhB1JoCNL8Kooxi9nJz5", "baseMintAddress": "MERt85fc5boKw3BW1eYdxonEuJNvXbiMbs6hvheau5K", "deprecated": false, "name": "MER/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "DPfj2jYwPaezkCmUNm5SSYfkrkz8WFqwGLcxDDUsN3gA", "baseMintAddress": "4dmKkXNHdgYsXqBHCuMikNQWwVomZURhYvkkX5c4pQ7y", "deprecated": false, "name": "SNY/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "2Gx3UfV831BAh8uQv1FKSPKS9yajfeeD8GJ4ZNb2o2YP", "baseMintAddress": "SLRSSpSLUTP7okbCUBYStWCo1vUgyt775faPqz8HUMr", "deprecated": false, "name": "SLRS/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "HrgkuJryyKRserkoz7LBFYkASzhXHWp9XA6fRYCA6PHb", "baseMintAddress": "EL3yFeyHezeNugdKgNWmtSXGgRyCLhczcndm8HR8NCK2", "deprecated": false, "name": "ETHV/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "5aoLj1bySDhhWjo7cLfT3pF2gqNGd63uEJ9HMSfASESL", "baseMintAddress": "HZzCWPqGNmDoyL5Q2SxTVTMWgv2LsCaogvzkXa5Lhyi", "deprecated": false, "name": "IETHV/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "HXBi8YBwbh4TXF6PjVw81m8Z3Cc4WBofvauj5SBFdgUs", "baseMintAddress": "Saber2gLauYim4Mvftnrasomsv6NvAuncvMEZwcLpD1", "deprecated": false, "name": "SBR/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "74Ciu5yRzhe8TFTHvQuEVbFZJrbnCMRoohBK33NNiPtv", "baseMintAddress": "CDJWUqTcYTVAKXAVXoQZFes5JUFc7owSeq7eMQcDSbo5", "deprecated": false, "name": "renBTC/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "5FpKCWYXgHWZ9CdDMHjwxAfqxJLdw2PRXuAmtECkzADk", "baseMintAddress": "ArUkYE2XDKzqy77PRRGjo4wREWwqk6RXTfM9NeqzPvjU", "deprecated": false, "name": "renDOGE/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "DYfigimKWc5VhavR4moPBibx9sMcWYVSjVdWvPztBPTa", "baseMintAddress": "GsNzxJfFn6zQdJGeYsupJWzUAm57Ba7335mfhWvFiE9Z", "deprecated": false, "name": "DXL/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "3d4rzwpy9iGdCZvgxcu7B1YocYffVLsQXPXkBZKt2zLc", "baseMintAddress": "MangoCzJ36AjZyKwVj3VnYU4GTonjfVEnJmvvWaxLac", "deprecated": false, "name": "MNGO/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "6V6y6QFi17QZC9qNRpVp7SaPiHpCTp2skbRQkUyZZXPW", "baseMintAddress": "BRLsMczKuaR5w9vSubF4j8HwEGGprVAyyVgS4EX7DKEg", "deprecated": false, "name": "CYS/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "HxFLKUAmAMLz1jtT3hbvCMELwH5H9tpM2QugP8sKyfhW", "baseMintAddress": "poLisWXnNRwC6oBu1vHiuKQzFjGL4XDSu4g9qjz9qVk", "deprecated": false, "name": "POLIS/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "Di66GTLsV64JgCCYGVcY21RZ173BHkjJVgPyezNN7P1K", "baseMintAddress": "ATLASXmbPQxBUYbxPsV97usA3fPQYEqzQBUHgiFCUsXx", "deprecated": false, "name": "ATLAS/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "3WptgZZu34aiDrLMUiPntTYZGNZ72yT1yxHYxSdbTArX", "baseMintAddress": "3bRTivrVsitbmCTGtqwp7hxXPsybkjn4XLNtPsHqa3zR", "deprecated": false, "name": "LIKE/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "6oGsL2puUgySccKzn9XA9afqF217LfxP5ocq4B3LWsjy", "baseMintAddress": "mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So", "deprecated": false, "name": "MSOL/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "5cLrMai1DsLRYc1Nio9qMTicsWtvzjzZfJPXyAoF4t1Z", "baseMintAddress": "mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So", "deprecated": false, "name": "MSOL/SOL", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "GREiyoFSEM7zMce3VugkCggdUYXVK5MijJgGwn7DkVPF", "baseMintAddress": "CwChm6p9Q3yFrjzVeiLTTbsoJkooscof5SJYZc2CrNqG", "deprecated": false, "name": "ETHBULL/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "J2eCTuKaABG91kCzJset2UfQRoggHcY2Cq7Stu7natXr", "baseMintAddress": "5TY71D29Cyuk9UrsSxLXw2quJBpS7xDDFuFu2K9W7Wf9", "deprecated": false, "name": "IBVOL/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "EnDY66AMMan9FFntp2nNrLW8E8qsXK9Cxi6GZ5QCgRXz", "baseMintAddress": "22xoSp66BDt4x4Q5xqxjaSnirdEyharoBziSFChkLFLy", "deprecated": false, "name": "BCHBULL/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "7ygqNwjA94Qu8YKxB8j2ePXYEFyWLcYGUUCVzV9puAhJ", "baseMintAddress": "Gnhy3boBT4MA8TTjGip5ND2uNsceh1Wgeaw1rYJo51ZY", "deprecated": false, "name": "MAPSPOOL/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "G1uoNqQzdasMUvXV66Eki5dwjWv5N9YU8oHKJrE4mfka", "baseMintAddress": "9iDWyYZ5VHBCxxmWZogoY3Z6FSbKsX4WFe37c728krdT", "deprecated": false, "name": "OXYPOOL/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "3V2sfA9rCnBwjfqGca2UDxD4fVvPXW9GNAQCqAepKC9Q", "baseMintAddress": "93a1L7xaEV7vZGzNXCcb9ztZedbpKgUiTHYxmFKJwKvc", "deprecated": false, "name": "RAYPOOL/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "CjsuF2gB28KqgniogCbbpp7FDMBwAkTawEN3gYKsgfS8", "baseMintAddress": "7CnFGR9mZWyAtWxPcVuTewpyC3A3MDW4nLsu5NY6PDbd", "deprecated": false, "name": "SECO/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "9MFFsTVgw6gKPZ1rpc6CSJSLaiNAonChcS7zCCMrAwEP", "baseMintAddress": "DgHK9mfhMtUwwv54GChRrU54T2Em5cuszq2uMuen1ZVE", "deprecated": false, "name": "CEL/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "GJWnwZJ599xjf7cRPP93aaVKqD5xUG5PBLNypHgPxitF", "baseMintAddress": "9wRD14AhdZ3qV8et3eBQVsrb3UoBZDUbJGyFckpTg8sj", "deprecated": false, "name": "PAXG/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "E6umfgnsastaGANjpvzb15jaXdZH1wsg4ENHARgbjqUz", "baseMintAddress": "38i2NQxjp5rt5B3KogqrxmBxgrAwaB3W1f1GmiKqh9MS", "deprecated": false, "name": "GRT/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "QzB9DfWbNAUpfkwLNMLGfkK1AM2zttkMYGSwx5iCnGe", "baseMintAddress": "3GECTP7H4Tww3w8jEPJCJtXUtXxiZty31S9szs84CcwQ", "deprecated": false, "name": "HOLY/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "4FPFh1iAiitKYMCPDBmEQrZVgA1DVMKHZBU2R7wjQWuu", "baseMintAddress": "A6aY2ceogBz1VaXBxm1j2eJuNZMRqrWUAnKecrMH85zj", "deprecated": false, "name": "LQID/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "7AHAKkL94Mx2VAkQb2kk74oNsxDnQ6aab4XwKwisfFdB", "baseMintAddress": "D68NB5JkzvyNCZAvi6EGtEcGvSoRNPanU9heYTAUFFRa", "deprecated": false, "name": "PERP/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "CAww1itfT8rFeTCJCLZqTq9anZ7FpC8NzULNLcJMG4Qa", "baseMintAddress": "dK83wTVypEpa1pqiBbHY3MNuUnT3ADUZM4wk9VZXZEc", "deprecated": false, "name": "AAVE/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "Dbyf1PPrAXfMe1LdEq57QW9GY1D4nNEt2fKVGEo6S3MU", "baseMintAddress": "Avz2fmevhhu87WYtWQCFj9UjKRjF9Z9QWwN2ih9yF95G", "deprecated": false, "name": "COMP/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "2xiv8A5xrJ7RnGdxXB42uFEkYHJjszEhaJyKKt4WaLep", "baseMintAddress": "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R", "deprecated": false, "name": "RAY/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "Cm4MmknScg7qbKqytb1mM92xgDxv3TNXos4tKbBqTDy7", "baseMintAddress": "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R", "deprecated": false, "name": "RAY/SRM", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "6jx6aoNFbmorwyncVP5V5ESKfuFc9oUYebob1iF6tgN4", "baseMintAddress": "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R", "deprecated": false, "name": "RAY/ETH", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "C6tp2RVZnxBPFbnAsfTjis8BN9tycESAT4SgDQgbbrsA", "baseMintAddress": "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R", "deprecated": false, "name": "RAY/SOL", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "3BqiaptVkdDCJWz3gea31z1tC3qYfBktUffrSjXjYHWy", "baseMintAddress": "5TY71D29Cyuk9UrsSxLXw2quJBpS7xDDFuFu2K9W7Wf9", "deprecated": false, "name": "IBVOL/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "9wH4Krv8Vim3op3JAu5NGZQdGxU8HLGAHZh3K77CemxC", "baseMintAddress": "EchesyfXePKdLtoiZSL8pBe8Myagyy8ZRqsACNCFGnvp", "deprecated": false, "name": "FIDA/RAY", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "Fcxy8qYgs8MZqiLx2pijjay6LHsSUqXW47pwMGysa3i9", "baseMintAddress": "kinXdEcpDQeHPEuQnqmUgtYykqKGVFq6CeVX5iAHJq6", "deprecated": false, "name": "KIN/RAY", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "HcVjkXmvA1815Es3pSiibsRaFw8r9Gy7BhyzZX83Zhjx", "baseMintAddress": "z3dn17yLaGMKffVogeFHQ9zWVcXgqgf3PQnDsNs2g6M", "deprecated": false, "name": "OXY/RAY", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "7Q4hee42y8ZGguqKmwLhpFNqVTjeVNNBqhx8nt32VF85", "baseMintAddress": "MAPS41MDahZ9QdKXhVa4dWB9RuyfV4XqhyAZ8XcYepb", "deprecated": false, "name": "MAPS/RAY", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "4Sg1g8U2ZuGnGYxAhc6MmX9MX7yZbrrraPkCQ9MdCPtF", "baseMintAddress": "8PMHT4swUMtBzgHnh5U564N5sjPSiUz2cjEQzFnnP1Fo", "deprecated": false, "name": "ROPE/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "97qCB4cAVSTthvJu3eNoEx6AY6DLuRDtCoPm5Tdyg77S", "baseMintAddress": "StepAscQoEioFxxWGnh2sLBDFp9d8rvKz2Yp39iDpyT", "deprecated": false, "name": "STEP/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "6xC1ia74NbGZdBkySTw93wdxN4Sh2VfULtXh1utPaJDJ", "baseMintAddress": "3JSf5tPeuscJGtaCp5giEiDhv51gQ4v3zWg8DGgyLfAB", "deprecated": false, "name": "YFI/SRM", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "CDvQqnMrt9rmjAxGGE6GTPUdzLpEhgNuNZ1tWAvPsF3W", "baseMintAddress": "AGFEad2et2ZJif9jaGpdMixQqvW5i81aBdvKe7PHNfz3", "deprecated": false, "name": "FTT/SRM", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "HfsedaWauvDaLPm6rwgMc6D5QRmhr8siqGtS6tf2wthU", "baseMintAddress": "9n4nbM75f5Ui33ZbPYXn59EwSgE8CGsHtAeTH5YFeJ9E", "deprecated": false, "name": "BTC/SRM", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "FGYAizUhNEC9GBmj3UyxdiRWmGjR3TfzMq2dznwYnjtH", "baseMintAddress": "AR1Mtgh7zAtxuxGd2XPovXPVjcSdY3i4rQYisNadjfKy", "deprecated": false, "name": "SUSHI/SRM", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "FafaYTnhDbLAFsr5qkD2ZwapRxaPrEn99z59UG4zqRmZ", "baseMintAddress": "CWE8jPTUYhdCTZYWPTe1o5DFqfdjzWKc9WKz6rSjQUdG", "deprecated": false, "name": "LINK/SRM", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "FR3SPJmgfRSKKQ2ysUZBu7vJLpzTixXnjzb84bY3Diif", "baseMintAddress": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU", "deprecated": false, "name": "SAMO/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "FfiqqvJcVL7oCCu8WQUMHLUC2dnHQPAPjTdSzsERFWjb", "baseMintAddress": "ETAtLmCmsoiEEKfNrHKJ2kYy3MoABhU6NQvpSfij5tDs", "deprecated": false, "name": "MEDIA/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "8GufnKq7YnXKhnB3WNhgy5PzU9uvHbaaRrZWQK6ixPxW", "baseMintAddress": "TuLipcqtGVXP9XR62wM8WWCm6a9vhLs7T1uoWBk6FDs", "deprecated": false, "name": "TULIP/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "GqQLxU1Dc6a7NYWRWdgbcGSTHirjy4quFivxXJGDzDCz", "baseMintAddress": "8KK6NLSnfGN87rpM9UNWid2kUjFdYYK6qD1RDNuEhCSb", "deprecated": false, "name": "MERPOOL/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "GekRdc4eD9qnfPTjUMK5NdQDho8D9ByGrtnqhMNCTm36", "baseMintAddress": "xxxxa1sKNGwFtw2kFn8XauW9xq8hBZ5kVtcSesTT9fW", "deprecated": false, "name": "SLIM/SOL", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "Eg35DZcYLx6JvZfrEAWgDPfSXJbx2N7hbEwVD56RiXnk", "baseMintAddress": "FETUGUMHsz8ivDmc3pZuFeAf3e3YFvGPbygziW7iTTc4", "deprecated": false, "name": "SNYPOOL/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "GX26tyJyDxiFj5oaKvNB9npAHNgdoV9ZYHs5ijs5yG2U", "baseMintAddress": "51tMb3zBKDiQhNwGqpgwbavaGH54mk8fXFzxTc1xnasg", "deprecated": false, "name": "APEX/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "FLKUQGh9VAG4otn4njLPUf5gaUPx5aAZ2Q6xWiD3hH5u", "baseMintAddress": "4wjPQJ6PrkC4dHhYghwJzGBVP78DkBzA2U3kHoFNBuhj", "deprecated": false, "name": "LIQ/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "7gZNLDbWE73ueAoHuAeFoSu7JqmorwCLpNTBXHtYSFTa", "baseMintAddress": "E5ndSkaB17Dm7CsD22dvcjfrYSDLCxFcMd6z8ddCk5wp", "deprecated": false, "name": "CCAI/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "Cud48DK2qoxsWNzQeTL5D8sAiHsGwG8Ev1VMNcYLayxt", "baseMintAddress": "EdAhkbj5nF9sRM7XN7ewuW8C9XEUMs8P7cnoQ57SYE96", "deprecated": false, "name": "FAB/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "8N1KkhaCYDpj3awD58d85n973EwkpeYnRp84y1kdZpMX", "baseMintAddress": "orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE", "deprecated": false, "name": "ORCA/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "Aubv1QBFh4bwB2wbP1DaPW21YyQBLfgjg8L4PHTaPzRc", "baseMintAddress": "SUNNYWgPQmFxe9wTZzNK7iPnJ3vYDrkgnxJRJm1s3ag", "deprecated": false, "name": "SUNNY/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "7MmPwD1K56DthW14P1PnWZ4zPCbPWemGs3YggcT1KzsM", "baseMintAddress": "BLwTnYKqf7u4qjgZrrsKeNs2EzWkMLqVCu6j8iHyrNA3", "deprecated": false, "name": "BOP/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "2Si6XDdpv5zcvYna221eZZrsjsp5xeYoz9W1TVdMdbnt", "baseMintAddress": "Amt5wUJREJQC5pX7Z48YSK812xmu4j3sQVupNhtsEuY8", "deprecated": false, "name": "FROG/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "CwK9brJ43MR4BJz2dwnDM7EXCNyHhGqCJDrAdsEts8n5", "baseMintAddress": "9nEqaUcb16sQ3Tn1psbkWqyhPdLmfHWjKGymREjsAgTE", "deprecated": false, "name": "WOOF/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "FhiqrjSsQuEEe2FUMxzkwFadsAwA9ea9YMJLivEFKFbQ", "baseMintAddress": "HAgX1HSfok8DohiNCS54FnC2UJkDSrRVnT38W3iWFwc8", "deprecated": false, "name": "sCAT/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "7MtgLYSEgsq626pvcEAwaDqs2KiZsaJUX2qGpRZbcDWY", "baseMintAddress": "J8K4k3wPtpeimFxzQ3fLAe963Sy8rH33H7XB6pTa6D22", "deprecated": false, "name": "DGEN/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "4zffJaPyeXZ2wr4whHgP39QyTfurqZ2BEd4M5W6SEuon", "baseMintAddress": "GHvFFSZ9BctWsEc5nujR1MTmmJWY7tgQz2AXE6WVFtGN", "deprecated": false, "name": "SOLAPE/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "9fe1MWiKqUdwift3dEpxuRHWftG72rysCRHbxDy6i9xB", "baseMintAddress": "5p2zjqCd1WJzAVgcEnjhb9zWDU7b9XVhFhx4usiyN7jB", "deprecated": false, "name": "CATO/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "9G2bAA5Uv8JyPZteuP73GJLUGg5CMbhMLCRSBUBLoXyt", "baseMintAddress": "7fCzz6ZDHm4UWC9Se1RPLmiyeuQ6kStxpcAP696EuE1E", "deprecated": false, "name": "SHBL/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "HSpeWWRqBJ4HH2FPyfDhoN1AUq3gYoDenQGZASSqzYW1", "baseMintAddress": "AMdnw9H5DFtQwZowVFr4kUgSXJzLokKSinvgGiUoLSps", "deprecated": false, "name": "MOLA/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "HSfEpP3ciPBC5bBdtjBDa8BxsUW32zUzRGLPpPuDyVY4", "baseMintAddress": "xxxxa1sKNGwFtw2kFn8XauW9xq8hBZ5kVtcSesTT9fW", "deprecated": false, "name": "SLIM/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "6hwK66FfUdyhncdQVxWFPRqY8y6usEvzekUaqtpKEKLr", "baseMintAddress": "6kwTqmdQkJd8qRr9RjSnUX9XJ24RmJRSrU1rsragP97Y", "deprecated": false, "name": "SAIL/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "4vvPk9cDzYVSs2rygf2gWAhRVo5DFYtFMSgz5FzypCcs", "baseMintAddress": "bhog3BmBLwqWz9Pah7xeeFDL4kjJGDYXaoxCZ3452ex", "deprecated": false, "name": "BHOG/SOL", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "E3U6GzZwQMDXtd7ABdsfxYx6oeLyaeh6dc6Ez91ZXQrG", "baseMintAddress": "9MhNoxy1PbmEazjPo9kiZPCcG7BiFbhi3bWZXZgacfpp", "deprecated": false, "name": "ACMN/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "J4oPt5Q3FYxrznkXLkbosAWrJ4rZLqJpGqz7vZUL4eMM", "baseMintAddress": "FgX1WD9WzMU3yLwXaFSarPfkgzjLb2DZCqmkx9ExpuvJ", "deprecated": false, "name": "NINJA/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "BeF2PKq2jmTJraWEhP28H8BQHUVtuzTyFogtKkxi6D6", "baseMintAddress": "Lrxqnh6ZHKbGy3dcrCED43nsoLkM1LTzU2jRfWe8qUC", "deprecated": false, "name": "LARIX/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "CsNZMtypiGgxm6JrmYVJWnLnJNsERrmT3mQqujLsGZj", "baseMintAddress": "PRT88RkA4Kg5z7pKnezeNH4mafTvtQdfFgpQTGRjz44", "deprecated": false, "name": "PRT/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "2Ux1EYeWsxywPKouRCNiALCZ1y3m563Tc4hq1kQganiq", "baseMintAddress": "E5rk3nmgLUuKUiS94gg4bpWwWwyjCMtddsAXkTFLtHEy", "deprecated": false, "name": "WOO/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "9cuBrXXSH9Uw51JB9odLqEyeF5RQSeRpcfXbEW2L8X6X", "baseMintAddress": "FnKE9n6aGjQoNWRBZXy4RW6LZVao7qwBonUbiD7edUmZ", "deprecated": false, "name": "SYP/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "DNxn3qM61GZddidjrzc95398SCWhm5BUyt8Y8SdKYr8W", "baseMintAddress": "ALMmmmbt5KNrPPUBFE4dAKUKSPWTop5s3kUGCdF69gmw", "deprecated": false, "name": "ALM/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "Gne8eeLRXF4PgY3N3L2sMsaWDGJgoWZuPDTm7n6p1oe8", "baseMintAddress": "7dHX7nVDtytz5ng9DNyiDMud9gcYimfjngKHrVvH6C4", "deprecated": false, "name": "MEOW/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "G3Bss3a2tif6eHNzWCh14g5k2H4rwBAmE42tbckUWG5T", "baseMintAddress": "5jFnsfx36DyGk8uVGrbXnVUMTsBkPXGpx6e69BiGFzko", "deprecated": false, "name": "INU/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "KrGK6ZHyE7Nt35D7GqAKJYAYUPUysGtVBgTXsJuAxMT", "baseMintAddress": "4SZjjNABoqhbd4hnapbvoEPEqT8mnNkfbEoAwALf1V8t", "deprecated": false, "name": "CAVE/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "Ak1UDskYAjztX5YkxW8dmERjLwS9fYmk1b3G6fpWDxp6", "baseMintAddress": "PoLEXM5xikzieXENFvP7WwHJPorcFiCUVuMo9BAGZT3", "deprecated": false, "name": "POLE/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "9tr5uMYHgtJ5yG4SeqHA6kJUdzXrK6QCNGYgewQevuuS", "baseMintAddress": "FoqP7aTaibT5npFKYKQQdyonL99vkW8YALNPwWepdvf5", "deprecated": false, "name": "BIP/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "7oFXusrpvDzbY6gMM81RjS6YEALETXTwWdUKXXBVojgu", "baseMintAddress": "FaiPGacTM7YBmacumbg4ZnDx7sKtGcG3LkcVoqfddEA7", "deprecated": false, "name": "BULL/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "9oCx3vFm5ERDVdjmJHsqE5BJ4eLP4g1aTpf5T4RyRqVy", "baseMintAddress": "BYLotMdQmq579hhP9xDcuCJky9kmMrbp77eoktmm7a5Y", "deprecated": false, "name": "CKG/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "eju5JDyaf29jYNfq7VrVAocVxGayDEHVHHiM7MYc331", "baseMintAddress": "3m7A2A8HHdqmiDrjAfaddj7Hxd88FrBHA1KSoqjoELtu", "deprecated": false, "name": "WAGMI/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "4M1uP9mYnbraCvw4JuiqFas63K1o74LeoJwpVDW3AAmG", "baseMintAddress": "EZF2sPJRe26e8iyXaCrmEefrGVBkqqNGv9UPGG9EnTQz", "deprecated": false, "name": "FUM/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "4JP75nztBEo5rYhW1LTQyc4qfjPB33jMWEUvp2DGrQQR", "baseMintAddress": "HEhMLvpSdPviukafKwVN8BnBUTamirptsQ6Wxo5Cyv8s", "deprecated": false, "name": "FTR/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "Dvm8jjdAy8uyXn9WXjS2p1mcPeFTuYS6yW2eUL9SJE8p", "baseMintAddress": "CN7qFa5iYkHz99PTctvT4xXUHnxwjQ5MHxCuTJtPN5uS", "deprecated": false, "name": "BOKU/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "9oXkdAWFyjDH8BbYrDVJ77r6GWPmUWo9ZYYpE25SZ2td", "baseMintAddress": "2Kc38rfQ49DFaKHQaWbijkE7fcymUMLY5guUiUsDmFfn", "deprecated": false, "name": "KURO/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "2wgi2FabNsSDdb8dke9mHFB67QtMYjYa318HpSqyJLDD", "baseMintAddress": "GFX1ZjR2P15tmrSwow6FjyDYcEkoFb4p4gJCpLBjaxHD", "deprecated": false, "name": "GOFX/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "BHqcTEDhCoZgvXcsSbwnTuzPdxv1HPs6Kz4AnPpNrGuq", "baseMintAddress": "5tN42n9vMi6ubp67Uy4NnmM5DMZYN8aS8GeB3bEDHr6E", "deprecated": false, "name": "WAG/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "HYM1HS6MM4E1NxgHPH4Wnth7ztXsYTpbB2Rh9raje8Xq", "baseMintAddress": "Bx1fDtvTN6NvE4kjdPHQXtmGSg582bZx9fGy4DQNMmAT", "deprecated": false, "name": "SOLC/USDT", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "85CTDt8gNfJhmqE3Xm2smDm54HmeT1jvLfPVBTkX8BTX", "baseMintAddress": "GpYMp8eP3HADY8x1jLVfFVBVYqxFNxT5mFhZAZt9Poco", "deprecated": false, "name": "CAPE/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "3DEfX1JPAPWKgeBW2XUr7Z1ztNNwbYhhD5EinGC7x1Lf", "baseMintAddress": "7JYZmXjHenJxgLUtBxgYsFfoABmWQFA1fW3tHQKUBThV", "deprecated": false, "name": "WEED/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "8pJg7JGfvEfBc14a9wtfAi39doTEeyJHMwqdJrtxsqVx", "baseMintAddress": "Ac7GiHwC7vZU2y97GRh9rqCqqnKAAgopYrTAtKccHxUk", "deprecated": false, "name": "SINU/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "ArKuemtzjpqP5H3P4S21nzhtLZtsq7nMCN6ecA9yvMX9", "baseMintAddress": "cqNTpypmbwghrf1G9VGvSENcw7M7wGSQ7JS8UTQWXwb", "deprecated": false, "name": "SCUM/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "6zH7zwXKyTCUFEGGSjzr4ndegLLPGRAhT2mfcWc6wP1w", "baseMintAddress": "6cH34XtzNgCDwb7NFbiji1a1N8F3FgmXTrFxvzBZNVui", "deprecated": false, "name": "KINGSHIB/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "HY9J1nsJxrem6w4uBRaWi2A7iNruNFEooMFopfM584Mv", "baseMintAddress": "AVKnbqNQgXDY8kbnno9eSGfwpVz5idimBnDKiz1vbWAh", "deprecated": false, "name": "PART/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "91WiupLKLjP8ENihdgiZ53j49aosNm1EYXdLbRD6GAY4", "baseMintAddress": "BKGp1At3yLDK1NE2gfMuwv1QMAHBwnqgSdULsyzjUagA", "deprecated": false, "name": "SHIBETOSHI/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "9BrQcZ8wMDJ7ibsQKckCd85x5mkqEXL56hnTuvyziPY3", "baseMintAddress": "DiJWJ6hgV7Vm5JP6SU7xvo7nULR14UvrGoWmSu34fEvZ", "deprecated": false, "name": "SolBullDog/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "ESd3PskTov69tkW5MmfdV8K7hXR35EXRYorWMNn61dD3", "baseMintAddress": "5L2YboFbHAUpBDDJjvDB5M6pu9CW2FRjyDB2asZyvjtE", "deprecated": false, "name": "PIXL/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "HCvX4un57v1SdYQ2LFywaDYyZySqLHMQ5cojq5kQJM3y", "baseMintAddress": "6F9XriABHfWhit6zmMUYAQBSy6XK5VF1cHXuW5LDpRtC", "deprecated": false, "name": "RUN/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" }, { "address": "9d2NsCGUidYc4b4JD8vc9hbhm1HdTfGpCByUAUakGHCB", "baseMintAddress": "J7WYVzFNynk9D28eBCccw2EYkygygiLDCVCabV7CupWL", "deprecated": false, "name": "MONGOOSE/USDC", "programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" } ]
Hi, I'm trying to use --markets-json with my custom markets.json file to limit the serum-vial to listen to only a subset of markets, however this option seems to be not working.
The command I use: npx serum-vial --endpoint <my_rpc_endpoint> --markets-json <absolute_path_to_my_json_file>
The json file contains:
[
{
"address": "9wFFyRfZBsuAha4YcuxcXLKwMxJR43S7fPfQLusDBzvT",
"deprecated": false,
"name": "SOL/USDC",
"programId": "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"
}
]
hello, i'm trying to add some custom markets ,
any guide how to do it ?
Thanks
Hi @thaaddeus,
Have noticed during examination of data recorded via this excellent software a scenario which implies that the logic for ordering messages published to the level3 stream appears to require some modification.
In short, there are several instances where an order is open
ed on a particular update, and on the same update a fill
message is generated for a different order which is already on the book. In a number of cases the newly placed order is for a better price than the existing one which is traded; this implies immediately that in fact the fill
message should be handled before the open
, since if the new order were already open when the fill occurred, it would have traded against the incoming order instead of the existing.
For example, I see progressions like the following:
1. 2021-11-03T17:48:55.477Z : Sell limit order #4147160109163233996678936 *open* for 2996.7 SOL @ 224.818 USDT
2. 2021-11-03T17:55:29.956Z : Sell limit order #4146828067769907224750968 *open* for 130.5 SOL @ 224.800 USDT
3. 2021-11-03T17:55:29.956Z : Sell limit order #4147160109163233996678936 *traded* for 0.6 SOL @ 224.818 USDT
If analysing this, it would be expected that the order open at 2. should be traded against any incoming order, as it is for a better price - clearly the trade at 3. then actually occurred before the open at 2. The message ordering from the level3 stream should reflect this.
It can also occur that all three messages are generated from the same update, and have the same timestamp, implying that the first order was immediately partially filled when it was received - the same principle applies here.
1. 2021-11-03T18:47:06.482Z : Buy limit order #4323732343436781781789141 *open* for 300.0 SOL @ 234.389 USDT
2. 2021-11-03T18:47:06.482Z : Buy limit order #4327292565043007725251028 *open* for 22.0 SOL @ 234.582 USDT
3. 2021-11-03T18:47:06.482Z : Buy limit order #4323732343436781781789141 *traded* for 198.2 SOL @ 234.389 USDT
Have not investigated yet if there is any way to confirm the ordering via the update data received from RPC node; if not then would perhaps have to develop logic which compares the price of open
s and fill
s on the same update in order to deduce an ordering which is correct at least in relation to the traded prices.
Kindly let me know if you agree with this assessment, and if needing any further information or input from my side.
Thanks!
Hi @thaaddeus ; firstly, thanks for the great work on this, awesome to have L3 streaming capability available for Serum ecosystem DEXs :)
Have been battling with an issue that seems to occur following some l3snapshot message publishing events; happens mostly after certain invalid l3diff detections, but has been seen also at initial subscription.
I am using the level2 stream in order to confirm the correctness of local reconstruction of the l3 orderbook (as kind of a "gap detection" mechanism in the absence of the message sequence numbers which would be used for CEX L3 streams); what I have observed is this:
l3snapshot
and l2snapshot
are received and processed successfully; these agree perfectly (of course, as they are created at the same time from the same data)l2update
message received, on which some price levels have been modified - however, no corresponding L3 updates (open
/change
/fill
/done
) are published at the same time. This obviously leads to a misalignment of the local L3 book with the published L2. I have defined my logic such that this triggers a forced reconnect; usually reconnecting to obtain a fresh snapshot and messages solves the issue, but have been instances where this repeated over several re-subscriptions.Note this does not occur for every l3snapshot processed, and the agreement is perfect much of the time. Have unfortunately not managed to identify anything particularly special about the cases where it does occur - only thoughts I have had are that it may happen only when a particularly large update occurs directly after the snapshot is produced, or perhaps related to the time between the update producing the snapshot and the next change.
Any insight or advice you may be able to give on this would be much appreciated (even more so, a fix in the next version ๐)
Certain RPC endpoints will send 429 and 413 responses when rate or data limits have been hit. Currently serum-vial will retry in fixed 50ms backoff increments per subscribed market. This typically leads to hammering the server when it's already rate limiting.
Suggestions:
Hi
Is there a reason you don't support finalized commitment level?
Thanks
Hello. Can I connect to Solana RPC with basic HTTP Auth specifying login in a password in endpoint
argument like https://login:[email protected]
?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.