diff --git a/package.json b/package.json index 33c170e..798162b 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "dependencies": { "@raydium-io/raydium-sdk-v2": "0.1.92-alpha", "@solana/spl-token": "^0.4.6", + "@triton-one/yellowstone-grpc": "^1.2.0", "@types/jsonfile": "^6.1.4", "bs58": "^5.0.0", "decimal.js": "^10.4.3", diff --git a/src/config.ts.template b/src/config.ts.template index f2a4b74..7130d04 100644 --- a/src/config.ts.template +++ b/src/config.ts.template @@ -58,3 +58,6 @@ export const fetchTokenAccountData = async () => { }) return tokenAccountData } + +export const grpcUrl = '' +export const grpcToken = '' diff --git a/src/grpc/README.md b/src/grpc/README.md new file mode 100644 index 0000000..f6241a5 --- /dev/null +++ b/src/grpc/README.md @@ -0,0 +1 @@ +All demos in this folder need to use grpc, you can contact the rpc service provider to purchase. \ No newline at end of file diff --git a/src/grpc/ammPoolInfo.ts b/src/grpc/ammPoolInfo.ts new file mode 100644 index 0000000..3e05205 --- /dev/null +++ b/src/grpc/ammPoolInfo.ts @@ -0,0 +1,94 @@ +import { liquidityStateV4Layout, splAccountLayout } from "@raydium-io/raydium-sdk-v2"; +import { TOKEN_PROGRAM_ID } from "@solana/spl-token"; +import Client from "@triton-one/yellowstone-grpc"; +import base58 from "bs58"; +import Decimal from "decimal.js"; +import { grpcToken, grpcUrl } from "../config"; + +async function ammPoolInfo() { + const programId = '675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8' + const auth = '5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1' + + const client = new Client(grpcUrl, grpcToken, undefined); + const rpcConnInfo = await client.subscribe(); + + rpcConnInfo.on("data", (data) => { + callback(data, programId) + }); + + await new Promise((resolve, reject) => { + if (rpcConnInfo === undefined) throw Error('rpc conn error') + rpcConnInfo.write({ + slots: {}, + accounts: { + ammUpdate: { + owner: [programId], + account: [], + filters: [{ datasize: `${liquidityStateV4Layout.span}` }], + nonemptyTxnSignature: true, + }, + vaultUpdate: { + owner: [TOKEN_PROGRAM_ID.toString()], + account: [], + filters: [{ memcmp: { offset: `${splAccountLayout.offsetOf('owner')}`, base58: auth } }], + nonemptyTxnSignature: true, + }, + }, + transactions: {}, + transactionsStatus: {}, + blocks: {}, + blocksMeta: {}, + accountsDataSlice: [], + entry: {}, + commitment: 1 + }, (err: Error) => { + if (err === null || err === undefined) { + resolve(); + } else { + reject(err); + } + }); + }).catch((reason) => { + console.error(reason); + throw reason; + }); +} + +const vaultToPoolId: { [key: string]: { poolId: string, type: 'base' | 'quote' } } = {} +const poolInfoCache: { [key: string]: { poolInfo: ReturnType, vaultA: ReturnType | undefined, vaultB: ReturnType | undefined } } = {} + +async function callback(_data: any, programId: string) { + if (_data.filters.includes('ammUpdate')) { + const data = _data.account + + const formatData = liquidityStateV4Layout.decode(data.account.data) + const pk = base58.encode(data.account.pubkey) + + poolInfoCache[pk] = { poolInfo: formatData, vaultA: undefined, vaultB: undefined } + vaultToPoolId[formatData.baseVault.toString()] = { poolId: pk, type: 'base' } + vaultToPoolId[formatData.quoteVault.toString()] = { poolId: pk, type: 'quote' } + } else if (_data.filters.includes('vaultUpdate')) { + const data = _data.account + + const formatData = splAccountLayout.decode(data.account.data) + const pk = base58.encode(data.account.pubkey) + + if (vaultToPoolId[pk] === undefined) return + + const _poolType = vaultToPoolId[pk] + + if (_poolType.type === 'base') { + poolInfoCache[_poolType.poolId].vaultA = formatData + } else { + poolInfoCache[_poolType.poolId].vaultB = formatData + } + + if (poolInfoCache[_poolType.poolId].vaultA === undefined || poolInfoCache[_poolType.poolId].vaultB === undefined) return + + const vaultA = new Decimal(poolInfoCache[_poolType.poolId].vaultA!.amount.sub(poolInfoCache[_poolType.poolId].poolInfo.baseNeedTakePnl).toString()).div(10 ** poolInfoCache[_poolType.poolId].poolInfo.baseDecimal.toNumber()) + const vaultB = new Decimal(poolInfoCache[_poolType.poolId].vaultB!.amount.sub(poolInfoCache[_poolType.poolId].poolInfo.quoteNeedTakePnl).toString()).div(10 ** poolInfoCache[_poolType.poolId].poolInfo.quoteDecimal.toNumber()) + console.log(_poolType.poolId, vaultA, vaultB, vaultB.div(vaultA)) + } +} + +ammPoolInfo() diff --git a/src/grpc/clmmPoolInfo.ts b/src/grpc/clmmPoolInfo.ts new file mode 100644 index 0000000..3247ece --- /dev/null +++ b/src/grpc/clmmPoolInfo.ts @@ -0,0 +1,57 @@ +import { PoolInfoLayout, SqrtPriceMath } from '@raydium-io/raydium-sdk-v2'; +import Client from "@triton-one/yellowstone-grpc"; +import base58 from "bs58"; +import { grpcToken, grpcUrl } from "../config"; + +async function clmmPoolInfo() { + const programId = 'CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK' + + const client = new Client(grpcUrl, grpcToken, undefined); + const rpcConnInfo = await client.subscribe(); + + rpcConnInfo.on("data", (data) => { + callback(data, programId) + }); + + await new Promise((resolve, reject) => { + if (rpcConnInfo === undefined) throw Error('rpc conn error') + rpcConnInfo.write({ + slots: {}, + accounts: { + ammUpdate: { + owner: [programId], + account: [], + filters: [{ datasize: `${PoolInfoLayout.span}` }], + nonemptyTxnSignature: true, + }, + }, + transactions: {}, + transactionsStatus: {}, + blocks: {}, + blocksMeta: {}, + accountsDataSlice: [], + entry: {}, + commitment: 1 + }, (err: Error) => { + if (err === null || err === undefined) { + resolve(); + } else { + reject(err); + } + }); + }).catch((reason) => { + console.error(reason); + throw reason; + }); +} + +async function callback(_data: any, programId: string) { + const data = _data.account + + const formatData = PoolInfoLayout.decode(data.account.data) + const pk = base58.encode(data.account.pubkey) + + console.log(pk, SqrtPriceMath.sqrtPriceX64ToPrice(formatData.sqrtPriceX64, formatData.mintDecimalsA, formatData.mintDecimalsB)) +} + +clmmPoolInfo() diff --git a/src/grpc/cpmmPoolInfo.ts b/src/grpc/cpmmPoolInfo.ts new file mode 100644 index 0000000..0da3f45 --- /dev/null +++ b/src/grpc/cpmmPoolInfo.ts @@ -0,0 +1,100 @@ +import { CpmmPoolInfoLayout, splAccountLayout } from "@raydium-io/raydium-sdk-v2"; +import { TOKEN_2022_PROGRAM_ID, TOKEN_PROGRAM_ID } from "@solana/spl-token"; +import Client from "@triton-one/yellowstone-grpc"; +import base58 from "bs58"; +import Decimal from "decimal.js"; +import { grpcToken, grpcUrl } from "../config"; + +async function cpmmPoolInfo() { + const programId = 'CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C' + const auth = 'GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL' + + const client = new Client(grpcUrl, grpcToken, undefined); + const rpcConnInfo = await client.subscribe(); + + rpcConnInfo.on("data", (data) => { + callback(data, programId) + }); + + await new Promise((resolve, reject) => { + if (rpcConnInfo === undefined) throw Error('rpc conn error') + rpcConnInfo.write({ + slots: {}, + accounts: { + ammUpdate: { + owner: [programId], + account: [], + filters: [{ datasize: `${CpmmPoolInfoLayout.span}` }], + nonemptyTxnSignature: true, + }, + vaultUpdate: { + owner: [TOKEN_PROGRAM_ID.toString()], + account: [], + filters: [{ memcmp: { offset: `${splAccountLayout.offsetOf('owner')}`, base58: auth } }], + nonemptyTxnSignature: true, + }, + vault2022Update: { + owner: [TOKEN_2022_PROGRAM_ID.toString()], + account: [], + filters: [{ memcmp: { offset: `${splAccountLayout.offsetOf('owner')}`, base58: auth } }], + nonemptyTxnSignature: true, + }, + }, + transactions: {}, + transactionsStatus: {}, + blocks: {}, + blocksMeta: {}, + accountsDataSlice: [], + entry: {}, + commitment: 1 + }, (err: Error) => { + if (err === null || err === undefined) { + resolve(); + } else { + reject(err); + } + }); + }).catch((reason) => { + console.error(reason); + throw reason; + }); +} + +const vaultToPoolId: { [key: string]: { poolId: string, type: 'base' | 'quote' } } = {} +const poolInfoCache: { [key: string]: { poolInfo: ReturnType, vaultA: ReturnType | undefined, vaultB: ReturnType | undefined } } = {} + +async function callback(_data: any, programId: string) { + if (_data.filters.includes('ammUpdate')) { + const data = _data.account + + const formatData = CpmmPoolInfoLayout.decode(data.account.data) + const pk = base58.encode(data.account.pubkey) + + poolInfoCache[pk] = { poolInfo: formatData, vaultA: undefined, vaultB: undefined } + vaultToPoolId[formatData.vaultA.toString()] = { poolId: pk, type: 'base' } + vaultToPoolId[formatData.vaultB.toString()] = { poolId: pk, type: 'quote' } + } else if (_data.filters.includes('vaultUpdate') || _data.filters.includes('vault2022Update')) { + const data = _data.account + + const formatData = splAccountLayout.decode(data.account.data) + const pk = base58.encode(data.account.pubkey) + + if (vaultToPoolId[pk] === undefined) return + + const _poolType = vaultToPoolId[pk] + + if (_poolType.type === 'base') { + poolInfoCache[_poolType.poolId].vaultA = formatData + } else { + poolInfoCache[_poolType.poolId].vaultB = formatData + } + + if (poolInfoCache[_poolType.poolId].vaultA === undefined || poolInfoCache[_poolType.poolId].vaultB === undefined) return + + const vaultA = new Decimal(poolInfoCache[_poolType.poolId].vaultA!.amount.sub(poolInfoCache[_poolType.poolId].poolInfo.fundFeesMintA).sub(poolInfoCache[_poolType.poolId].poolInfo.protocolFeesMintA).toString()).div(10 ** poolInfoCache[_poolType.poolId].poolInfo.mintDecimalA) + const vaultB = new Decimal(poolInfoCache[_poolType.poolId].vaultB!.amount.sub(poolInfoCache[_poolType.poolId].poolInfo.fundFeesMintB).sub(poolInfoCache[_poolType.poolId].poolInfo.protocolFeesMintB).toString()).div(10 ** poolInfoCache[_poolType.poolId].poolInfo.mintDecimalB) + console.log(_poolType.poolId, vaultA, vaultB, vaultB.div(vaultA)) + } +} + +cpmmPoolInfo() diff --git a/src/grpc/subNewAmmPool.ts b/src/grpc/subNewAmmPool.ts new file mode 100644 index 0000000..1b12a31 --- /dev/null +++ b/src/grpc/subNewAmmPool.ts @@ -0,0 +1,122 @@ +import { ApiPoolInfoV4, Market, MARKET_STATE_LAYOUT_V3, SPL_MINT_LAYOUT } from "@raydium-io/raydium-sdk-v2"; +import { PublicKey } from '@solana/web3.js'; +import Client from "@triton-one/yellowstone-grpc"; +import base58 from "bs58"; +import { connection, grpcToken, grpcUrl } from "../config"; + +async function subNewAmmPool() { + const programId = '675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8' + const createPoolFeeAccount = '7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5' // only mainnet, dev pls use 3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR + + const client = new Client(grpcUrl, grpcToken, undefined); + const rpcConnInfo = await client.subscribe(); + + rpcConnInfo.on("data", (data) => { + callback(data, programId) + }); + + await new Promise((resolve, reject) => { + if (rpcConnInfo === undefined) throw Error('rpc conn error') + rpcConnInfo.write({ + slots: {}, + accounts: {}, + transactions: { + transactionsSubKey: { + accountInclude: [createPoolFeeAccount], + accountExclude: [], + accountRequired: [] + } + }, + transactionsStatus: {}, + blocks: {}, + blocksMeta: {}, + accountsDataSlice: [], + entry: {}, + commitment: 1 + }, (err: Error) => { + if (err === null || err === undefined) { + resolve(); + } else { + reject(err); + } + }); + }).catch((reason) => { + console.error(reason); + throw reason; + }); +} + +async function callback(data: any, programId: string) { + if (!data.filters.includes('transactionsSubKey')) return undefined + + const info = data.transaction + if (info.transaction.meta.err !== undefined) return undefined + + const formatData: { + updateTime: number, slot: number, txid: string, poolInfos: ApiPoolInfoV4[] + } = { + updateTime: new Date().getTime(), + slot: info.slot, + txid: base58.encode(info.transaction.signature), + poolInfos: [] + } + + const accounts = info.transaction.transaction.message.accountKeys.map((i: Buffer) => base58.encode(i)) + for (const item of [...info.transaction.transaction.message.instructions, ...info.transaction.meta.innerInstructions.map((i: any) => i.instructions).flat()]) { + if (accounts[item.programIdIndex] !== programId) continue + + if ([...(item.data as Buffer).values()][0] != 1) continue + + const keyIndex = [...(item.accounts as Buffer).values()] + + const startTime = new Date().getTime() + console.log(new Date().toJSON(), 'new pool Id: ', accounts[keyIndex[4]]); + + const [baseMintAccount, quoteMintAccount, marketAccount] = await connection.getMultipleAccountsInfo([ + new PublicKey(accounts[keyIndex[8]]), + new PublicKey(accounts[keyIndex[9]]), + new PublicKey(accounts[keyIndex[16]]), + ]) + + if (baseMintAccount === null || quoteMintAccount === null || marketAccount === null) throw Error('get account info error') + + const baseMintInfo = SPL_MINT_LAYOUT.decode(baseMintAccount.data) + const quoteMintInfo = SPL_MINT_LAYOUT.decode(quoteMintAccount.data) + const marketInfo = MARKET_STATE_LAYOUT_V3.decode(marketAccount.data) + + formatData.poolInfos.push({ + id: accounts[keyIndex[4]], + baseMint: accounts[keyIndex[8]], + quoteMint: accounts[keyIndex[9]], + lpMint: accounts[keyIndex[7]], + baseDecimals: baseMintInfo.decimals, + quoteDecimals: quoteMintInfo.decimals, + lpDecimals: baseMintInfo.decimals, + version: 4, + programId: programId, + authority: accounts[keyIndex[5]], + openOrders: accounts[keyIndex[6]], + targetOrders: accounts[keyIndex[12]], + baseVault: accounts[keyIndex[10]], + quoteVault: accounts[keyIndex[11]], + withdrawQueue: PublicKey.default.toString(), + lpVault: PublicKey.default.toString(), + marketVersion: 3, + marketProgramId: marketAccount.owner.toString(), + marketId: accounts[keyIndex[16]], + marketAuthority: Market.getAssociatedAuthority({ programId: marketAccount.owner, marketId: new PublicKey(accounts[keyIndex[16]]) }).publicKey.toString(), + marketBaseVault: marketInfo.baseVault.toString(), + marketQuoteVault: marketInfo.quoteVault.toString(), + marketBids: marketInfo.bids.toString(), + marketAsks: marketInfo.asks.toString(), + marketEventQueue: marketInfo.eventQueue.toString(), + lookupTableAccount: PublicKey.default.toString() + }) + } + + console.log(formatData) + + return formatData +} + +subNewAmmPool() diff --git a/yarn.lock b/yarn.lock index 6f82d44..34025c5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -33,6 +33,24 @@ resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== +"@grpc/grpc-js@^1.8.0": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.12.2.tgz#97eda82dd49bb9c24eaf6434ea8d7de446e95aac" + integrity sha512-bgxdZmgTrJZX50OjyVwz3+mNEnCTNkh3cIqGPWVNeW9jX6bn1ZkU80uPd+67/ZpIJIjRQ9qaHCjhavyoWYxumg== + dependencies: + "@grpc/proto-loader" "^0.7.13" + "@js-sdsl/ordered-map" "^4.4.2" + +"@grpc/proto-loader@^0.7.13": + version "0.7.13" + resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.7.13.tgz#f6a44b2b7c9f7b609f5748c6eac2d420e37670cf" + integrity sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw== + dependencies: + lodash.camelcase "^4.3.0" + long "^5.0.0" + protobufjs "^7.2.5" + yargs "^17.7.2" + "@isaacs/cliui@^8.0.2": version "8.0.2" resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" @@ -63,6 +81,11 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" +"@js-sdsl/ordered-map@^4.4.2": + version "4.4.2" + resolved "https://registry.yarnpkg.com/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz#9299f82874bab9e4c7f9c48d865becbfe8d6907c" + integrity sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw== + "@noble/curves@^1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.4.0.tgz#f05771ef64da724997f69ee1261b2417a49522d6" @@ -202,6 +225,59 @@ "@pnpm/network.ca-file" "^1.0.1" config-chain "^1.1.11" +"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" + integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== + +"@protobufjs/base64@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" + integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== + +"@protobufjs/codegen@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" + integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== + +"@protobufjs/eventemitter@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" + integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== + +"@protobufjs/fetch@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" + integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== + dependencies: + "@protobufjs/aspromise" "^1.1.1" + "@protobufjs/inquire" "^1.1.0" + +"@protobufjs/float@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" + integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== + +"@protobufjs/inquire@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" + integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== + +"@protobufjs/path@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" + integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== + +"@protobufjs/pool@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" + integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== + +"@protobufjs/utf8@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" + integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== + "@raydium-io/raydium-sdk-v2@0.1.92-alpha": version "0.1.92-alpha" resolved "https://registry.yarnpkg.com/@raydium-io/raydium-sdk-v2/-/raydium-sdk-v2-0.1.92-alpha.tgz#06b782725b3a7c5188d6fb0f0292cec6f0af12ed" @@ -505,6 +581,13 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== +"@triton-one/yellowstone-grpc@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@triton-one/yellowstone-grpc/-/yellowstone-grpc-1.2.0.tgz#fd09b8476cc52f94867d8547a55f1fd5d904c636" + integrity sha512-TtElO7e8o6ADVPYvABOJrakN8q2v/53x6IJ1qchl798IRQp4yZoLSD6CZXl0zzUQXp8h8fP9ZbNZ+q05bGVw8Q== + dependencies: + "@grpc/grpc-js" "^1.8.0" + "@tsconfig/node10@^1.0.7": version "1.0.9" resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" @@ -569,6 +652,13 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.18.tgz#8dfb97f0da23c2293e554c5a50d61ef134d7697f" integrity sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA== +"@types/node@>=13.7.0": + version "22.10.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.1.tgz#41ffeee127b8975a05f8c4f83fb89bcb2987d766" + integrity sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ== + dependencies: + undici-types "~6.20.0" + "@types/node@^12.12.54": version "12.20.55" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" @@ -960,6 +1050,15 @@ cli-table3@^0.6.3: optionalDependencies: "@colors/colors" "1.5.0" +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -1176,6 +1275,11 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" +escalade@^3.1.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + escape-goat@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-4.0.0.tgz#9424820331b510b0666b98f7873fe11ac4aa8081" @@ -1314,6 +1418,11 @@ gauge@^4.0.3: strip-ansi "^6.0.1" wide-align "^1.1.5" +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + get-stdin@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" @@ -1779,11 +1888,21 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +long@^5.0.0: + version "5.2.3" + resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" + integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== + lowercase-keys@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" @@ -2376,6 +2495,24 @@ proto-list@~1.2.1: resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== +protobufjs@^7.2.5: + version "7.4.0" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.4.0.tgz#7efe324ce9b3b61c82aae5de810d287bc08a248a" + integrity sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/node" ">=13.7.0" + long "^5.0.0" + proxy-from-env@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" @@ -2469,6 +2606,11 @@ remote-git-tags@^3.0.0: resolved "https://registry.yarnpkg.com/remote-git-tags/-/remote-git-tags-3.0.0.tgz#424f8ec2cdea00bb5af1784a49190f25e16983c3" integrity sha512-C9hAO4eoEsX+OXA4rla66pXZQ+TLQ8T9dttgQj18yuKlPMTVkIkdYXvlMC55IuUsIkV6DpmQYi10JKFLaU+l7w== +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" @@ -2710,16 +2852,7 @@ ssri@^9.0.0: dependencies: minipass "^3.1.1" -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -2744,14 +2877,7 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -2900,6 +3026,11 @@ typescript@^5.3.3: resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== +undici-types@~6.20.0: + version "6.20.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" + integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== + unique-filename@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-2.0.1.tgz#e785f8675a9a7589e0ac77e0b5c34d2eaeac6da2" @@ -3043,7 +3174,7 @@ widest-line@^4.0.1: dependencies: string-width "^5.0.1" -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -3096,11 +3227,34 @@ xdg-basedir@^5.0.1, xdg-basedir@^5.1.0: resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-5.1.0.tgz#1efba19425e73be1bc6f2a6ceb52a3d2c884c0c9" integrity sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ== +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^17.7.2: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"