diff --git a/package.json b/package.json index 232a7b9..65779e2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@dappio-wonderland/gateway", - "version": "0.2.25", + "version": "0.2.25-test-7c3e268b", "description": "Dappio Gateway: The Framework that Empowers the Composability of Solana Programs", "main": "dist/index.js", "types": "dist/index.d.ts", @@ -8,10 +8,10 @@ "dist" ], "dependencies": { - "@dappio-wonderland/gateway-idls": "^0.2.8", + "@dappio-wonderland/gateway-idls": "^0.2.9", "@dappio-wonderland/navigator": "^0.2.26", "@dappio-wonderland/utils": "^0.2.0", - "@jup-ag/core": "1.0.0-beta.26", + "@jup-ag/core": "4.0.0-beta.4", "@project-serum/anchor": "^0.24.2", "@project-serum/borsh": "^0.2.5", "@project-serum/serum": "^0.13.61", @@ -47,6 +47,7 @@ "testAdapterNftFinance": "ANCHOR_WALLET=~/.config/solana/gateway.json ts-mocha -p ./tsconfig.json -t 1000000 tests/testAdapterNftFinance.ts", "testAdapterFrancium": "ANCHOR_WALLET=~/.config/solana/gateway.json ts-mocha -p ./tsconfig.json -t 1000000 tests/testAdapterFrancium.ts", "testAdapterKatana": "ANCHOR_WALLET=~/.config/solana/gateway.json ts-mocha -p ./tsconfig.json -t 1000000 tests/testAdapterKatana.ts", - "testAdapterFriktion": "ANCHOR_WALLET=~/.config/solana/gateway.json ts-mocha -p ./tsconfig.json -t 1000000 tests/testAdapterFriktion.ts" + "testAdapterFriktion": "ANCHOR_WALLET=~/.config/solana/gateway.json ts-mocha -p ./tsconfig.json -t 1000000 tests/testAdapterFriktion.ts", + "testAdapterJupiter": "ANCHOR_WALLET=~/.config/solana/gateway.json ts-mocha -p ./tsconfig.json -t 1000000 tests/testAdapterJupiter.ts" } } diff --git a/src/builder.ts b/src/builder.ts index 8660766..2a1c589 100644 --- a/src/builder.ts +++ b/src/builder.ts @@ -31,6 +31,7 @@ import { IProtocolNFTFarm, IProtocolNFTPool, IProtocolPool, + IProtocolSwap, IProtocolVault, LockNFTParams, PoolDirection, @@ -106,6 +107,9 @@ export class GatewayBuilder { poolDirection: PoolDirection.Obverse, swapMinOutAmount: new anchor.BN(0), farmType: [], + swapIndex: 0, + swapAmountConfig: [] as Uint8Array[], + swapRouteConfig: [] as Uint8Array[], }; this._metadata = { @@ -128,18 +132,29 @@ export class GatewayBuilder { // IProtocolSwap async swap(swapParams: SwapParams): Promise { // NOTE: No need to push protocol / action to queue since Jupiter apapter is not implemented yet + this.params.actionQueue.push(ActionType.Swap); + this.params.protocolQueue.push(swapParams.protocol); + this.params.versionQueue.push(1); this._metadata.fromTokenMint = swapParams.fromTokenMint; this._metadata.toTokenMint = swapParams.toTokenMint; this._adjustParams(); + let protocol: IProtocolSwap; + // TODO: Move the logic into protocols switch (swapParams.protocol) { case SupportedProtocols.Jupiter: - const protocol = new ProtocolJupiter(this._provider.connection, { - ...swapParams, - userKey: this._provider.wallet.publicKey, - }); + protocol = new ProtocolJupiter( + this._provider.connection, + this._program, + await this.getGatewayStateKey(), + this.params, + { + ...swapParams, + userKey: this._provider.wallet.publicKey, + } + ); // Jupiter only await protocol.build(); @@ -148,14 +163,21 @@ export class GatewayBuilder { this._metadata.routes = Boolean(this._metadata.routes) ? [...this._metadata.routes, await protocol.getRoute()] : [await protocol.getRoute()]; - - this._transactions = [...this._transactions, ...(await protocol.swap())]; - + this._metadata.addressLookupTables = protocol.getAddressLookupTables().map((a) => a.key); break; default: throw new Error("Unsupported Protocol"); } + const { txs, input } = await protocol.swap(); + + // Push input payload + (this.params.payloadQueue as Uint8Array[]).push(input); + // TODO: Extract the logic of index dispatch to a config file + this.params.inputIndexQueue.push(0); + + this._transactions = [...this._transactions, ...txs]; + return this; } @@ -1666,20 +1688,20 @@ export class GatewayBuilder { } // ZapIn only: Update poolTokenAInAmount if swapOutAmount has value - if (this.params?.swapMinOutAmount?.toNumber() > 0) { - const indexAddLiquidity = this.params.actionQueue.indexOf(ActionType.AddLiquidity); - // Note: ZapIn only - if (indexAddLiquidity > 0) { - switch (this.params.poolDirection) { - case PoolDirection.Obverse: - this.params.payloadQueue[indexAddLiquidity] = new anchor.BN(this.params.swapMinOutAmount.toNumber()); - break; - case PoolDirection.Reverse: - this.params.payloadQueue[indexAddLiquidity] = new anchor.BN(this.params.swapMinOutAmount.toNumber()); - break; - } - } - } + // if (this.params?.swapMinOutAmount?.toNumber() > 0) { + // const indexAddLiquidity = this.params.actionQueue.indexOf(ActionType.AddLiquidity); + // // Note: ZapIn only + // if (indexAddLiquidity > 0) { + // switch (this.params.poolDirection) { + // case PoolDirection.Obverse: + // this.params.payloadQueue[indexAddLiquidity] = new anchor.BN(this.params.swapMinOutAmount.toNumber()); + // break; + // case PoolDirection.Reverse: + // this.params.payloadQueue[indexAddLiquidity] = new anchor.BN(this.params.swapMinOutAmount.toNumber()); + // break; + // } + // } + // } } async finalize(): Promise { @@ -1718,6 +1740,7 @@ export class GatewayBuilder { async v0Transactions(addressLookupTable: anchor.web3.PublicKey[] = []): Promise { return compressV0(this._transactions, this._provider.wallet.publicKey, this._provider.connection, [ ...ADDRESS_LOOKUP_TABLES, + ...this._metadata.addressLookupTables, ...addressLookupTable, ]); } diff --git a/src/ids.ts b/src/ids.ts index 6896d62..a13b091 100644 --- a/src/ids.ts +++ b/src/ids.ts @@ -15,6 +15,12 @@ export const SOLEND_ADAPTER_PROGRAM_ID = new PublicKey("ADPTCXAFfJFVqcw73B4PWRZQ export const NFT_FINANCE_ADAPTER_PROGRAM_ID = new PublicKey("ADPTyBr92sBCE1hdYBRvXbMpF4hKs17xyDjFPxopcsrh"); +export const JUPITER_ADAPTER_PROGRAM_ID = new PublicKey("ADPT8iF4A7BSUWQ8AsVwmcod2suFzA4bpYpJj7kUWK3E"); + +export const SERUM_PROGRAM_ID = new PublicKey("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"); + +export const JUPITER_PROGRAM_ID = new PublicKey("JUP4Fb2cqiRUcaTHdrPC8h2gNsA2ETXiPDD33WcGuJB"); + export const NATIVE_SOL = new PublicKey("11111111111111111111111111111111"); export const WSOL = new PublicKey("So11111111111111111111111111111111111111112"); diff --git a/src/protocols/jupiter.ts b/src/protocols/jupiter.ts index 0f369e6..7880568 100644 --- a/src/protocols/jupiter.ts +++ b/src/protocols/jupiter.ts @@ -1,8 +1,19 @@ import * as anchor from "@project-serum/anchor"; import { Jupiter, RouteInfo } from "@jup-ag/core"; -import { IProtocolSwap, SwapParams } from "../types"; -import { WSOL } from "../ids"; -import { getAssociatedTokenAddress } from "@solana/spl-token-v2"; +import JSBI from "jsbi"; +import { GatewayParams, IProtocolSwap, PAYLOAD_SIZE, SwapParams } from "../types"; +import { GATEWAY_PROGRAM_ID, JUPITER_ADAPTER_PROGRAM_ID, JUPITER_PROGRAM_ID } from "../ids"; +import { Gateway } from "@dappio-wonderland/gateway-idls"; +import { getActivityIndex, getGatewayAuthority, sigHash } from "../utils"; + +// Parameter for storing `SwapLeg` from Jupiter +const MAX_SWAP_CONFIG_SIZE = 30; +// Parameter for swap hop allowed in Jupiter route, currently Jupiter set to 3. +// But we target to 2 due to CPI still have ix size restriction now, track progress here: +// https://github.com/solana-labs/solana/issues/26641 +const MAX_ROUTE_HOP = 2; +// Constraint to avoid exceed tx size limit after adding gateway keys in swap tx Jupiter generated +const MAX_RAW_SWAP_TX_SIZE = anchor.web3.PACKET_DATA_SIZE - anchor.web3.PUBLIC_KEY_LENGTH * 5 - 8; //1072; interface ProtocolJupiterParams extends SwapParams { userKey: anchor.web3.PublicKey; @@ -11,9 +22,16 @@ interface ProtocolJupiterParams extends SwapParams { export class ProtocolJupiter implements IProtocolSwap { private _jupiter: Jupiter; private _bestRoute: RouteInfo; - private _transactions: anchor.web3.Transaction[] = []; + private _transaction: anchor.web3.Transaction | anchor.web3.VersionedTransaction; + private _addressLookupTableAccounts: anchor.web3.AddressLookupTableAccount[] = []; - constructor(private _connection: anchor.web3.Connection, private _params: ProtocolJupiterParams) {} + constructor( + private _connection: anchor.web3.Connection, + private _gatewayProgram: anchor.Program, + private _gatewayStateKey: anchor.web3.PublicKey, + private _gatewayParams: GatewayParams, + private _params: ProtocolJupiterParams + ) {} async build(): Promise { this._jupiter = await Jupiter.load({ @@ -24,80 +42,137 @@ export class ProtocolJupiter implements IProtocolSwap { const routes = await this._jupiter.computeRoutes({ inputMint: this._params.fromTokenMint, outputMint: this._params.toTokenMint, - inputAmount: this._params.amount, // 1000000 => 1 USDC if inputToken.address is USDC mint - slippage: this._params.slippage, // 1 = 1% + amount: JSBI.BigInt(Math.floor(this._params.amount)), // 1000000 => 1 USDC if inputToken.address is USDC mint + slippageBps: Math.ceil(this._params.slippage * 100), // 100 = 1% // forceFetch (optional) to force fetching routes and not use the cache // intermediateTokens, if provided will only find routes that use the intermediate tokens // feeBps }); this._bestRoute = routes.routesInfos[0]; + for (let [i, route] of routes.routesInfos.entries()) { + console.log(i, ":"); + const { isLegible, swapTransaction, addressLookupTableAccounts } = await this._legibleRoute(route); + if (isLegible) { + this._bestRoute = route; + this._transaction = swapTransaction; + this._addressLookupTableAccounts = addressLookupTableAccounts; + break; + } + if (i == routes.routesInfos.length - 1) { + throw "Error: Failed to find a route that can pass through gateway."; + } + } + console.log("========"); } - async swap(): Promise { - const { transactions } = await this._jupiter.exchange({ - routeInfo: this._bestRoute, - userPublicKey: this._params.userKey, - }); - const { setupTransaction, swapTransaction, cleanupTransaction } = transactions; - - const userWSOLAta = await getAssociatedTokenAddress(WSOL, this._params.userKey); - - // Remove WSOL create instructions - // if (setupTransaction) { - // setupTransaction.instructions = setupTransaction.instructions.filter( - // (ix) => - // !( - // ix.programId.equals(ASSOCIATED_TOKEN_PROGRAM_ID) && - // ix.keys[1].pubkey.equals(userWSOLAta) - // ) - // ); - // } - - // Remove WSOL create/close instructions - // if (swapTransaction) { - // swapTransaction.instructions = swapTransaction.instructions - // .filter( - // (ix) => - // !( - // ix.programId.equals(ASSOCIATED_TOKEN_PROGRAM_ID) && - // ix.keys[1].pubkey.equals(userWSOLAta) - // ) - // ) - // .filter( - // (ix) => - // !( - // ix.programId.equals(TOKEN_PROGRAM_ID) && - // ix.keys[0].pubkey.equals(userWSOLAta) - // ) - // ); - // } - - // Remove WSOL close instructions - // if (cleanupTransaction) { - // cleanupTransaction.instructions = cleanupTransaction.instructions.filter( - // (ix) => - // !( - // ix.programId.equals(TOKEN_PROGRAM_ID) && - // ix.keys[0].pubkey.equals(userWSOLAta) - // ) - // ); - // } - - for (let transaction of [setupTransaction, swapTransaction, cleanupTransaction] - .filter(Boolean) - .filter((tx) => tx.instructions.length > 0)) { - this._transactions.push(transaction); + async swap(): Promise<{ txs: anchor.web3.Transaction[]; input: Buffer }> { + // Handle payload input here + let payload = Buffer.alloc(PAYLOAD_SIZE); + let swapRouteConfig = Buffer.alloc(MAX_SWAP_CONFIG_SIZE); + + let txs: anchor.web3.Transaction[] = []; + const preInstructions: anchor.web3.TransactionInstruction[] = []; + const postInstructions: anchor.web3.TransactionInstruction[] = []; + let remainingAccounts: anchor.web3.AccountMeta[]; + + let swapTransaction: anchor.web3.Transaction | anchor.web3.VersionedTransaction; + let addressLookupTableAccounts: anchor.web3.AddressLookupTableAccount[]; + if (this._transaction) { + swapTransaction = this._transaction; + addressLookupTableAccounts = this._addressLookupTableAccounts; + } else { + let exchangeInfo = await this._jupiter.exchange({ + routeInfo: this._bestRoute, + userPublicKey: this._params.userKey, + }); + swapTransaction = exchangeInfo.swapTransaction; + addressLookupTableAccounts = exchangeInfo.addressLookupTableAccounts; } - if (this._transactions.length == 0) { - throw new Error("Transactions are empty"); + let isTxV2 = true; + if ((swapTransaction as anchor.web3.Transaction).instructions) { + isTxV2 = false; } - return this._transactions; + + if (isTxV2) { + const swapTx = swapTransaction as anchor.web3.VersionedTransaction; + const decompiledMessage = anchor.web3.TransactionMessage.decompile(swapTx.message, { + addressLookupTableAccounts, + }); + const tx = new anchor.web3.Transaction(); + for (let ix of decompiledMessage.instructions) { + if (ix.programId.equals(JUPITER_PROGRAM_ID)) { + const { _swapAmountConfig, _swapRouteConfig } = this._getSwapConfig(ix.data); + _swapAmountConfig.copy(payload); + _swapRouteConfig.copy(swapRouteConfig); + tx.add(await this._wrap(ix)); + } else { + tx.add(ix); + } + } + (this._gatewayParams.swapAmountConfig as Uint8Array[]).push(payload.subarray(0, 18)); + (this._gatewayParams.swapRouteConfig as Uint8Array[]).push(swapRouteConfig); + + txs.push(tx); + + return { txs, input: payload }; + } else { + let isPreIx = true; + let swapIx: anchor.web3.TransactionInstruction; + for (let ix of (swapTransaction as anchor.web3.Transaction).instructions) { + if (ix.programId.equals(JUPITER_PROGRAM_ID)) { + remainingAccounts = ix.keys; + isPreIx = false; + swapIx = ix; + } else if (isPreIx) { + preInstructions.push(ix); + } else { + postInstructions.push(ix); + } + } + + // Extract config + const { _swapAmountConfig, _swapRouteConfig } = this._getSwapConfig(swapIx.data); + _swapAmountConfig.copy(payload); + _swapRouteConfig.copy(swapRouteConfig); + (this._gatewayParams.swapAmountConfig as Uint8Array[]).push(payload.subarray(0, 18)); + (this._gatewayParams.swapRouteConfig as Uint8Array[]).push(swapRouteConfig); + + const preTx = new anchor.web3.Transaction(); + if (preInstructions.length > 0) preTx.add(...preInstructions); + const postTx = new anchor.web3.Transaction(); + if (postInstructions.length > 0) postTx.add(...postInstructions); + const txSwap = await this._gatewayProgram.methods + .swap() + .accounts({ + gatewayState: this._gatewayStateKey, + adapterProgramId: JUPITER_ADAPTER_PROGRAM_ID, + baseProgramId: JUPITER_PROGRAM_ID, + activityIndex: await getActivityIndex(this._params.userKey), + gatewayAuthority: getGatewayAuthority(), + }) + .remainingAccounts(remainingAccounts) + .transaction(); + + txs.push(txSwap); + if (preTx.instructions.length > 0) { + txs = [preTx, ...txs]; + } + if (postTx.instructions.length > 0) { + txs = [...txs, postTx]; + } + } + + return { txs, input: payload }; } getSwapMinOutAmount(): number { - return this._bestRoute.outAmountWithSlippage; + return JSBI.toNumber(this._bestRoute.outAmount); + } + + getAddressLookupTables(): anchor.web3.AddressLookupTableAccount[] { + return this._addressLookupTableAccounts; } async getRoute() { @@ -109,4 +184,66 @@ export class ProtocolJupiter implements IProtocolSwap { }), }; } + + private async _legibleRoute(routeInfo: RouteInfo): Promise<{ + isLegible: boolean; + swapTransaction: anchor.web3.Transaction | anchor.web3.VersionedTransaction; + addressLookupTableAccounts: anchor.web3.AddressLookupTableAccount[]; + }> { + let { swapTransaction, addressLookupTableAccounts } = await this._jupiter.exchange({ + routeInfo, + userPublicKey: this._params.userKey, + }); + const isLegible = + routeInfo.marketInfos.length <= MAX_ROUTE_HOP && swapTransaction.serialize().length <= MAX_RAW_SWAP_TX_SIZE; + if (isLegible) console.log(swapTransaction.serialize().length); + return { isLegible, swapTransaction, addressLookupTableAccounts }; + } + + private _getSwapConfig(data: Buffer): { + _swapAmountConfig: Buffer; + _swapRouteConfig: Buffer; + } { + let _swapAmountConfig = Buffer.alloc(PAYLOAD_SIZE); + let _swapRouteConfig = Buffer.alloc(MAX_SWAP_CONFIG_SIZE); + // Extract config + const rawData = Uint8Array.from(data); + const swapConfig = { + protocolConfig: Buffer.from(rawData.slice(8, rawData.byteLength - 19)), // (regular)7 - 9 bytes, but sometimes(split swap) might be upto 17 bytes + inputAmount: Buffer.from(rawData.slice(rawData.byteLength - 19, rawData.byteLength - 11)), // u64 + outputAmount: Buffer.from(rawData.slice(rawData.byteLength - 11, rawData.byteLength - 3)), // u64 + slippageBps: Buffer.from(rawData.slice(rawData.byteLength - 3, rawData.byteLength - 1)), // u16 + platformFeeBps: Buffer.from(rawData.slice(rawData.byteLength - 1, rawData.byteLength)), // u8 + }; + + _swapAmountConfig.set(swapConfig.inputAmount); + _swapAmountConfig.set(swapConfig.outputAmount, 8); + _swapAmountConfig.set(swapConfig.slippageBps, 16); + if (swapConfig.protocolConfig.length < MAX_SWAP_CONFIG_SIZE) { + _swapRouteConfig.set([swapConfig.protocolConfig.length], 0); + _swapRouteConfig.set(swapConfig.protocolConfig, 1); + } else if (swapConfig.protocolConfig.length == MAX_SWAP_CONFIG_SIZE) { + _swapAmountConfig.set(swapConfig.protocolConfig, 0); + } else { + throw `Error: Currently Gateway only support swap config under ${MAX_SWAP_CONFIG_SIZE} bytes,\nplease change to another route to fix it or wait for the updates.`; + } + + return { _swapAmountConfig, _swapRouteConfig }; + } + + private async _wrap(ix: anchor.web3.TransactionInstruction): Promise { + const swapDiscriminator = Buffer.from(sigHash("global", "swap"), "hex"); + ix.data = swapDiscriminator; + ix.programId = GATEWAY_PROGRAM_ID; + ix.keys = [ + { pubkey: this._gatewayStateKey, isSigner: false, isWritable: true }, + { pubkey: JUPITER_ADAPTER_PROGRAM_ID, isSigner: false, isWritable: false }, + { pubkey: JUPITER_PROGRAM_ID, isSigner: false, isWritable: false }, + { pubkey: await getActivityIndex(this._params.userKey), isSigner: false, isWritable: false }, + { pubkey: getGatewayAuthority(), isSigner: false, isWritable: false }, + ...ix.keys, + ]; + + return ix; + } } diff --git a/src/types.ts b/src/types.ts index 4b263b7..623a4cf 100644 --- a/src/types.ts +++ b/src/types.ts @@ -13,8 +13,12 @@ import { RouteInfo, TransactionFeeInfo } from "@jup-ag/core"; export const PAYLOAD_SIZE = 32; export interface IProtocolSwap { - swap: () => void; - getSwapMinOutAmount: () => void; + swap: () => Promise<{ txs: anchor.web3.Transaction[]; input: Buffer }>; + getSwapMinOutAmount: () => number; + + build?: () => void; + getRoute?: () => any; + getAddressLookupTables?: () => anchor.web3.AddressLookupTableAccount[]; } export interface IProtocolPool { @@ -240,6 +244,7 @@ export interface GatewayMetadata { toTokenMint?: anchor.web3.PublicKey; addLiquidityTokenMint?: anchor.web3.PublicKey; removeLiquiditySingleToTokenMint?: anchor.web3.PublicKey; + addressLookupTables?: anchor.web3.PublicKey[]; } export interface SwapParams { @@ -468,6 +473,32 @@ export type GatewayParams = TypeDef< type: { array: ["u64", 2]; }; + }, + { + name: "swapIndex"; + type: "u8"; + }, + { + name: "swapAmountConfig"; + type: { + array: [ + { + array: ["u8", 18]; + }, + 4 + ]; + }; + }, + { + name: "swapRouteConfig"; + type: { + array: [ + { + array: ["u8", 30]; + }, + 4 + ]; + }; } ]; }; diff --git a/tests/testAdapterJupiter.ts b/tests/testAdapterJupiter.ts new file mode 100644 index 0000000..3547cd7 --- /dev/null +++ b/tests/testAdapterJupiter.ts @@ -0,0 +1,125 @@ +import * as anchor from "@project-serum/anchor"; +import { PublicKey, Connection } from "@solana/web3.js"; +import NodeWallet from "@project-serum/anchor/dist/cjs/nodewallet"; +import { GatewayBuilder, SupportedProtocols, SwapParams } from "../src"; + +describe("Gateway", () => { + const connection = new Connection("https://rpc-mainnet-fork.epochs.studio", { + commitment: "confirmed", + wsEndpoint: "wss://rpc-mainnet-fork.epochs.studio/ws", + }); + // const connection = new Connection("https://solana-api.projectserum.com", { + // commitment: "confirmed", + // confirmTransactionInitialTimeout: 180 * 1000, + // }); + // const connection = new Connection("https://solana-api.tt-prod.net", { + // commitment: "confirmed", + // confirmTransactionInitialTimeout: 180 * 1000, + // }); + // const connection = new Connection("https://ssc-dao.genesysgo.net", { + // commitment: "confirmed", + // confirmTransactionInitialTimeout: 180 * 1000, + // }); + // const connection = new Connection("https://api.mainnet-beta.solana.com", { + // commitment: "confirmed", + // confirmTransactionInitialTimeout: 180 * 1000, + // }); + // const connection = new Connection("https://solana-mainnet.g.alchemy.com/v2/7Us4nzuUS82Z33j3AKzhUOKRA7d_TkNh", { + // commitment: "confirmed", + // wsEndpoint: "wss://solana-mainnet.g.alchemy.com/v2/7Us4nzuUS82Z33j3AKzhUOKRA7d_TkNh", + // confirmTransactionInitialTimeout: 180 * 1000, + // }); + + const options = anchor.AnchorProvider.defaultOptions(); + const wallet = NodeWallet.local(); + let provider = new anchor.AnchorProvider(connection, wallet, options); + + anchor.setProvider(provider); + + const zapInAmount = 1000000; + + it("Swap in Jupiter", async () => { + const swapParams1: SwapParams = { + protocol: SupportedProtocols.Jupiter, + fromTokenMint: new PublicKey( + "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC + // "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R" // RAY + // "So11111111111111111111111111111111111111112" // WSOL + // "SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt" // SRM + // "7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj" // stSOL + // "2QHx6MmrsAXSKLynJ55GofBbveYaDPLvn6qgdefey5za" // GMT + // "orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE" // Orca + ), + toTokenMint: new PublicKey( + // "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R" // RAY + // "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB" // USDT + // "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC + // "SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt" // SRM + "orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE" // Orca + // "So11111111111111111111111111111111111111112" // WSOL + // "GENEtH5amGSi8kHAtQoezp1XEXwZJ8vcuePYnXdKrMYz" // GENE + // "66edZnAPEJSxnAK4SckuupssXpbu5doV57FUcghaqPsY" // PRGC + // "7s6NLX42eURZfpyuKkVLrr9ED9hJE8718cyXFsYKqq5g" // GEAR + // "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263" // Bonk + ), + amount: zapInAmount, // Swap half of the fromToken to proceed zapIn + slippage: 1, + jupiterMarketUrl: "https://rpc-mainnet-fork.epochs.studio/jup/market.json", + }; + + const swapParams2: SwapParams = { + protocol: SupportedProtocols.Jupiter, + fromTokenMint: new PublicKey( + "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC + // "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R" // RAY + // "So11111111111111111111111111111111111111112" // WSOL + // "SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt" // SRM + ), + toTokenMint: new PublicKey( + // "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R" // RAY + // "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB" // USDT + // "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC + // "SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt" // SRM + "So11111111111111111111111111111111111111112" // WSOL + // "GENEtH5amGSi8kHAtQoezp1XEXwZJ8vcuePYnXdKrMYz" // GENE + // "66edZnAPEJSxnAK4SckuupssXpbu5doV57FUcghaqPsY" // PRGC + // "7s6NLX42eURZfpyuKkVLrr9ED9hJE8718cyXFsYKqq5g" // GEAR + // "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263" // Bonk + ), + amount: zapInAmount, // Swap half of the fromToken to proceed zapIn + slippage: 1, + jupiterMarketUrl: "https://rpc-mainnet-fork.epochs.studio/jup/market.json", + }; + + const gateway = new GatewayBuilder(provider); + + await gateway.swap(swapParams1); + await gateway.swap(swapParams2); + await gateway.finalize(); + + console.log(gateway.params); + // console.log(`swapInAmount: ${gateway.params.swapInAmount}`); + // console.log(`swapMinOutAmount: ${gateway.params.swapMinOutAmount}`); + + const txs = await gateway.v0Transactions(); + console.log(txs); + + console.log("======"); + console.log("Txs are sent..."); + const recentBlockhash = await connection.getLatestBlockhash(); + for (let tx of txs) { + tx.message.recentBlockhash = recentBlockhash.blockhash; + console.log(tx.serialize().length); + tx.sign([wallet.payer]); + let versionMessage = tx.serialize(); + //const result = sendAndConfirmTransaction(connection, tx, wallet); + const sig = await connection.sendRawTransaction(versionMessage, { + skipPreflight: true, + commitment: "confirmed", + } as unknown as anchor.web3.ConfirmOptions); + console.log(sig); + } + console.log("Txs are executed"); + console.log("======"); + }); +}); diff --git a/tests/testAdapterRaydium.ts b/tests/testAdapterRaydium.ts index ae69608..d235d88 100644 --- a/tests/testAdapterRaydium.ts +++ b/tests/testAdapterRaydium.ts @@ -1,7 +1,6 @@ import * as anchor from "@project-serum/anchor"; import { PublicKey, Connection } from "@solana/web3.js"; import NodeWallet from "@project-serum/anchor/dist/cjs/nodewallet"; -import { getAccount, getAssociatedTokenAddress } from "@solana/spl-token-v2"; import { AddLiquidityParams, StakeParams, @@ -44,9 +43,9 @@ describe("Gateway", () => { const zapInAmount = 10000; - it("Swap + AddLiquidity + Stake in Raydium", async () => { + it("Swap(Jupiter) + AddLiquidity(Raydium) + Stake(Raydium)", async () => { const poolId = new anchor.web3.PublicKey( - // "GaqgfieVmnmY4ZsZHHA6L5RSVzCGL3sKx4UgHBaYNy8m" // RAY-SRM + "GaqgfieVmnmY4ZsZHHA6L5RSVzCGL3sKx4UgHBaYNy8m" // RAY-SRM // "AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA" // RAY-WSOL // "DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut" // RAY-USDT // "6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg" // RAY-USDC @@ -54,10 +53,10 @@ describe("Gateway", () => { // "8FrCybrh7UFznP1hVHg8kXZ8bhii37c7BGzmjkdcsGJp" // GENE-RAY (Pool V4) // "DPgYdwgz7ZytfrzLeRYJwXq9JGeskaXTRrM8biFEnLs1" // PRGC-USDC // "2N5HpqiZe2b5EKGhW1adx56chbWCAURHVqaH1gL9mppH" // GEAR-USDC - "58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2" // SOL-USDC + // "58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2" // SOL-USDC ); const farmId = new anchor.web3.PublicKey( - // "5DFbcYNLLy5SJiBpCCDzNSs7cWCsUbYnCkLXzcPQiKnR" // RAY-SRM + "5DFbcYNLLy5SJiBpCCDzNSs7cWCsUbYnCkLXzcPQiKnR" // RAY-SRM // "HUDr9BDaAGqi37xbQHzxCyXvfMCKPTPNF8g9c9bPu1Fu" // RAY-WSOL // "AvbVWpBi2e4C9HPmZgShGdPoNydG4Yw8GJvG9HUcLgce" // RAY-USDT // "CHYrUBX2RKX8iBg7gYTkccoGNBzP44LdaazMHCLcdEgS" // RAY-USDC @@ -65,20 +64,21 @@ describe("Gateway", () => { // "GVfLbXA3dpEHPvc4do9HvMZ8TACxm3x54BVrHPMEixcr" // GENE-RAY (Farm V5) // "GBjTMHf9TsRdMnP6S3ewAgpSoCacpZqQF1tXmnchborv" // PRGC-USDC (Farm V5) // "B7A3hAej7ZbAsVPM3M5ietDigQgxyucYPANJSGDVpQEw" // GEAR-USDC (Farm V5) - "GUzaohfNuFbBqQTnPgPSNciv3aUvriXYjQduRE3ZkqFw" // SOL-USDC + // "GUzaohfNuFbBqQTnPgPSNciv3aUvriXYjQduRE3ZkqFw" // SOL-USDC ); const swapParams: SwapParams = { protocol: SupportedProtocols.Jupiter, fromTokenMint: new PublicKey( - "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC - // "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R" // RAY + // "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC + "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R" // RAY + // "So11111111111111111111111111111111111111112" // WSOL ), toTokenMint: new PublicKey( // "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R" // RAY // "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB" // USDT // "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC - // "SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt" // SRM - "So11111111111111111111111111111111111111112" // WSOL + "SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt" // SRM + // "So11111111111111111111111111111111111111112" // WSOL // "GENEtH5amGSi8kHAtQoezp1XEXwZJ8vcuePYnXdKrMYz" // GENE // "66edZnAPEJSxnAK4SckuupssXpbu5doV57FUcghaqPsY" // PRGC // "7s6NLX42eURZfpyuKkVLrr9ED9hJE8718cyXFsYKqq5g" // GEAR @@ -94,7 +94,7 @@ describe("Gateway", () => { const stakeParams: StakeParams = { protocol: SupportedProtocols.Raydium, farmId, - version: 5, + version: 3, }; const gateway = new GatewayBuilder(provider); @@ -116,18 +116,33 @@ describe("Gateway", () => { console.log("======"); console.log("Txs are sent..."); + const recentBlockhash = await connection.getLatestBlockhash(); for (let tx of txs) { - const sig = await provider.sendAndConfirm(tx as anchor.web3.Transaction, [], { - skipPreflight: true, - commitment: "confirmed", - } as unknown as anchor.web3.ConfirmOptions); - console.log(sig); + if ((tx as anchor.web3.Transaction).instructions) { + const sig = await provider.sendAndConfirm(tx as anchor.web3.Transaction, [], { + skipPreflight: true, + commitment: "confirmed", + } as unknown as anchor.web3.ConfirmOptions); + console.log(sig); + } else { + const txV2 = tx as anchor.web3.VersionedTransaction; + txV2.message.recentBlockhash = recentBlockhash.blockhash; + console.log(txV2.serialize().length); + txV2.sign([wallet.payer]); + let versionMessage = txV2.serialize(); + //const result = sendAndConfirmTransaction(connection, tx, wallet); + const sig = await connection.sendRawTransaction(versionMessage, { + skipPreflight: true, + commitment: "confirmed", + } as unknown as anchor.web3.ConfirmOptions); + console.log(sig); + } } console.log("Txs are executed"); console.log("======"); }); - it("Unstake + Harvest + RemoveLiquidity + Swap in Raydium", async () => { + it("Unstake(Raydium) + Harvest(Raydium) + RemoveLiquidity(Raydium) + Swap(Jupiter)", async () => { const poolId = new anchor.web3.PublicKey( "GaqgfieVmnmY4ZsZHHA6L5RSVzCGL3sKx4UgHBaYNy8m" // RAY-SRM // "AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA" // RAY-WSOL @@ -152,7 +167,7 @@ describe("Gateway", () => { // Get share amount const ledgerKey = await raydium.infos.getFarmerId(farm, provider.wallet.publicKey, farm.version); const ledger = (await raydium.infos.getFarmer(connection, ledgerKey, farm.version)) as raydium.FarmerInfo; - const shareAmount = ledger.amount as number; + const shareAmount = Math.floor((ledger.amount as number) / 10); console.log(shareAmount); const { tokenAAmount, tokenBAmount } = await poolWrapper.getTokenAmounts(shareAmount); @@ -188,8 +203,8 @@ describe("Gateway", () => { // "SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt" // SRM // "So11111111111111111111111111111111111111112" // WSOL ), - amount: tokenAAmount, // swap coin to pc - slippage: 3, + amount: Math.floor(tokenAAmount), // swap coin to pc + slippage: 1, jupiterMarketUrl: "https://rpc-mainnet-fork.epochs.studio/jup/market.json", }; @@ -210,144 +225,33 @@ describe("Gateway", () => { console.log("======"); console.log("Txs are sent..."); - // for (let tx of txs) { - // const sig = await provider.sendAndConfirm(tx, [], { - // skipPreflight: true, - // commitment: "confirmed", - // } as unknown as anchor.web3.ConfirmOptions); - // console.log(sig); - // } - console.log("Txs are executed"); - console.log("======"); - }); - - it("Directly Stake and Unstake in Raydium", async () => { - const gateway1 = new GatewayBuilder(provider); - const poolId = new anchor.web3.PublicKey( - "GaqgfieVmnmY4ZsZHHA6L5RSVzCGL3sKx4UgHBaYNy8m" // RAY-SRM - // "AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA" // RAY-WSOL - // "DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut" // RAY-USDT - // "6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg" // RAY-USDC - ); - const farmId = new anchor.web3.PublicKey( - "5DFbcYNLLy5SJiBpCCDzNSs7cWCsUbYnCkLXzcPQiKnR" // RAY-SRM - // "HUDr9BDaAGqi37xbQHzxCyXvfMCKPTPNF8g9c9bPu1Fu" // RAY-WSOL - // "AvbVWpBi2e4C9HPmZgShGdPoNydG4Yw8GJvG9HUcLgce" // RAY-USDT - // "CHYrUBX2RKX8iBg7gYTkccoGNBzP44LdaazMHCLcdEgS" // RAY-USDC - ); - const swapParams: SwapParams = { - protocol: SupportedProtocols.Jupiter, - fromTokenMint: new PublicKey( - // "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC - "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R" // RAY - ), - toTokenMint: new PublicKey( - // "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB" // USDT - "SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt" // SRM - // "So11111111111111111111111111111111111111112" // WSOL - ), - amount: zapInAmount / 2, // Swap half of the fromToken to proceed zapIn - slippage: 3, - jupiterMarketUrl: "https://rpc-mainnet-fork.epochs.studio/jup/market.json", - }; - const addLiquidityParams: AddLiquidityParams = { - protocol: SupportedProtocols.Raydium, - poolId, - }; - - await gateway1.swap(swapParams); - await gateway1.addLiquidity(addLiquidityParams); - - await gateway1.finalize(); - - console.log(gateway1.params); - // console.log(`swapInAmount: ${gateway1.params.swapInAmount}`); - // console.log(`swapMinOutAmount: ${gateway1.params.swapMinOutAmount}`); - - const txs1 = gateway1.transactions(); - - console.log("======"); - console.log("Txs are sent..."); - // for (let tx of txs1) { - // const sig = await provider.sendAndConfirm(tx, [], { - // skipPreflight: true, - // commitment: "confirmed", - // } as unknown as anchor.web3.ConfirmOptions); - // console.log(sig); - // } - console.log("Txs are executed"); - console.log("======"); - - // Get LP amount - const pool = await raydium.infos.getPool(connection, poolId); - const userLpAta = await getAssociatedTokenAddress(pool.lpMint, provider.wallet.publicKey); - const userLpAtaAccount = await getAccount(connection, userLpAta); - const lpAmount = new anchor.BN(userLpAtaAccount.amount.toString()).toNumber(); - console.log(lpAmount); - - // Stake - const gateway2 = new GatewayBuilder(provider); - const stakeParams: StakeParams = { - protocol: SupportedProtocols.Raydium, - farmId, - lpAmount, - }; - - await gateway2.stake(stakeParams); - await gateway2.finalize(); - - const txs2 = gateway2.transactions(); - - console.log(gateway2.params); - - console.log("======"); - console.log("Txs are sent..."); - // for (let tx of txs2) { - // const sig = await provider.sendAndConfirm(tx, [], { - // skipPreflight: true, - // commitment: "confirmed", - // } as unknown as anchor.web3.ConfirmOptions); - // console.log(sig); - // } - console.log("Txs are executed"); - console.log("======"); - - // Get share amount - - const farm = (await raydium.infos.getFarm(connection, farmId)) as raydium.FarmInfo; - const ledgerKey = await raydium.infos.getFarmerId(farm, provider.wallet.publicKey, farm.version); - const ledger = await raydium.infos.getFarmer(connection, ledgerKey); - const shareAmount = ledger.amount as number; - console.log(shareAmount); - - const gateway3 = new GatewayBuilder(provider); - const unstakeParams: UnstakeParams = { - protocol: SupportedProtocols.Raydium, - farmId, - shareAmount: shareAmount / 2, // Unstake only half - }; - - await gateway3.unstake(unstakeParams); - await gateway3.finalize(); - - const txs3 = gateway3.transactions(); - - console.log(gateway3.params); - - console.log("======"); - console.log("Txs are sent..."); - // for (let tx of txs3) { - // const sig = await provider.sendAndConfirm(tx, [], { - // skipPreflight: true, - // commitment: "confirmed", - // } as unknown as anchor.web3.ConfirmOptions); - // console.log(sig); - // } + const recentBlockhash = await connection.getLatestBlockhash(); + for (let tx of txs) { + if ((tx as anchor.web3.Transaction).instructions) { + const sig = await provider.sendAndConfirm(tx as anchor.web3.Transaction, [], { + skipPreflight: true, + commitment: "confirmed", + } as unknown as anchor.web3.ConfirmOptions); + console.log(sig); + } else { + const txV2 = tx as anchor.web3.VersionedTransaction; + txV2.message.recentBlockhash = recentBlockhash.blockhash; + console.log(txV2.serialize().length); + txV2.sign([wallet.payer]); + let versionMessage = txV2.serialize(); + //const result = sendAndConfirmTransaction(connection, tx, wallet); + const sig = await connection.sendRawTransaction(versionMessage, { + skipPreflight: true, + commitment: "confirmed", + } as unknown as anchor.web3.ConfirmOptions); + console.log(sig); + } + } console.log("Txs are executed"); console.log("======"); }); - it("Swap (USDC => tokenA) + Swap (tokenA => tokenB) + AddLiquidity + Stake in Raydium", async () => { + it("Swap(USDC => tokenA) + Swap(USDC => tokenB) + AddLiquidity(Raydium) + Stake(Raydium)", async () => { const gateway = new GatewayBuilder(provider); const poolId = new anchor.web3.PublicKey( // "GaqgfieVmnmY4ZsZHHA6L5RSVzCGL3sKx4UgHBaYNy8m" // RAY-SRM @@ -427,12 +331,27 @@ describe("Gateway", () => { console.log("======"); console.log("Txs are sent..."); + const recentBlockhash = await connection.getLatestBlockhash(); for (let tx of txs) { - const sig = await provider.sendAndConfirm(tx as anchor.web3.Transaction, [], { - skipPreflight: true, - commitment: "confirmed", - } as unknown as anchor.web3.ConfirmOptions); - console.log(sig); + if ((tx as anchor.web3.Transaction).instructions) { + const sig = await provider.sendAndConfirm(tx as anchor.web3.Transaction, [], { + skipPreflight: true, + commitment: "confirmed", + } as unknown as anchor.web3.ConfirmOptions); + console.log(sig); + } else { + const txV2 = tx as anchor.web3.VersionedTransaction; + txV2.message.recentBlockhash = recentBlockhash.blockhash; + console.log(txV2.serialize().length); + txV2.sign([wallet.payer]); + let versionMessage = txV2.serialize(); + //const result = sendAndConfirmTransaction(connection, tx, wallet); + const sig = await connection.sendRawTransaction(versionMessage, { + skipPreflight: true, + commitment: "confirmed", + } as unknown as anchor.web3.ConfirmOptions); + console.log(sig); + } } console.log("Txs are executed"); console.log("======"); diff --git a/yarn.lock b/yarn.lock index 37b5ac7..a5de30c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,6 +9,56 @@ dependencies: regenerator-runtime "^0.13.11" +"@blockworks-foundation/mango-client@^3.4.7": + version "3.6.20" + resolved "https://registry.yarnpkg.com/@blockworks-foundation/mango-client/-/mango-client-3.6.20.tgz#66ed0ae4545959fdc31ca1918de0f931de579d41" + integrity sha512-Te0i52KUyp5e8jQQZlIMsTy9fKIfefPHvkA8+NRGIH80kQcnJKKfzw3T1NxaDsc3KFMZwpuN3m4afDNpKTuF0g== + dependencies: + "@project-serum/anchor" "^0.21.0" + "@project-serum/serum" "^0.13.65" + "@project-serum/sol-wallet-adapter" "^0.2.0" + "@solana/spl-token" "^0.1.6" + "@solana/web3.js" "^1.43.5" + big.js "^6.1.1" + bn.js "^5.1.0" + buffer-layout "^1.2.1" + cross-fetch "^3.1.5" + dotenv "^10.0.0" + toformat "^2.0.0" + yargs "^17.0.1" + +"@cremafinance/anchor-contrib@1.14.3": + version "1.14.3" + resolved "https://registry.yarnpkg.com/@cremafinance/anchor-contrib/-/anchor-contrib-1.14.3.tgz#87a0d9f734a990641ba4a79939e7ec0658ffb6f8" + integrity sha512-X57tRaZPWGpgCaYn0bXXDIQ6RzZedppwS5MhtGWm1EiM3flqi8RUxcY2VAsZikQ0inHvrDbEOY85hxPTx1VCtQ== + dependencies: + "@cremafinance/solana-contrib" "^1.14.3" + eventemitter3 "^4.0.7" + lodash.camelcase "^4.3.0" + lodash.mapvalues "^4.6.0" + tslib "^2.4.0" + +"@cremafinance/option-utils@^1.14.3": + version "1.14.3" + resolved "https://registry.yarnpkg.com/@cremafinance/option-utils/-/option-utils-1.14.3.tgz#f57689f3f329694169a0ee252a18ba99fdc29e8d" + integrity sha512-XWFEGo3A2H8A2lR4OgBwpJtLKRlRy8pe7Il/Z1cfgVurShl8z2TQn9LWEUOhEt4Bwjq8xRnK/v4F8YCIX5X82Q== + dependencies: + tslib "^2.4.0" + +"@cremafinance/solana-contrib@^1.14.3": + version "1.14.3" + resolved "https://registry.yarnpkg.com/@cremafinance/solana-contrib/-/solana-contrib-1.14.3.tgz#8a82c3b767273a0fb19195375d09f59229f21436" + integrity sha512-3cAF98Pyb9ySDljdcwPuCNmZ0wFv54Kh9lskqqPNj0oMVzStwknq2Kvipecr5iR2G7bF80/RptlV9RixuurjOA== + dependencies: + "@cremafinance/option-utils" "^1.14.3" + "@solana/buffer-layout" "^4.0.0" + "@types/promise-retry" "^1.1.3" + "@types/retry" "^0.12.2" + promise-retry "^2.0.1" + retry "^0.13.1" + tiny-invariant "^1.2.0" + tslib "^2.4.0" + "@cykura/sdk-core@npm:@jup-ag/cykura-sdk-core@0.1.8", "@jup-ag/cykura-sdk-core@0.1.8": version "0.1.8" resolved "https://registry.yarnpkg.com/@jup-ag/cykura-sdk-core/-/cykura-sdk-core-0.1.8.tgz#ba8724644e18d1006422dbba5c7701360a729b91" @@ -21,10 +71,10 @@ tiny-invariant "^1.1.0" toformat "^2.0.0" -"@dappio-wonderland/gateway-idls@^0.2.8": - version "0.2.8" - resolved "https://registry.yarnpkg.com/@dappio-wonderland/gateway-idls/-/gateway-idls-0.2.8.tgz#65af88946a483f1fd4b68fd9d7028387c6b2cad6" - integrity sha512-5xUskBwsEq/LhpZ63rQXIY9Xiaii9vicn8quKekJXsvW3L4nQ5qMtvmudE8sdJRmvRUV6uxHdTtMg2OqvhdRxQ== +"@dappio-wonderland/gateway-idls@^0.2.9": + version "0.2.9" + resolved "https://registry.yarnpkg.com/@dappio-wonderland/gateway-idls/-/gateway-idls-0.2.9.tgz#7d8720b7ffbd9dd4591655cad8ab4eb38cf8a5a3" + integrity sha512-hB36rmIvwnRNi0mJLActxVWSzorZgTcewEUVRAF2f0lmXAdFZTaVAaprYg5dhFt7XdHr60wQpCcyPDor4kBYcQ== "@dappio-wonderland/navigator@^0.2.26": version "0.2.26" @@ -54,6 +104,14 @@ "@solana/web3.js" "^1.66.2" "@types/lodash" "^4.14.191" +"@dradex/idl@npm:@jup-ag/dradex-idl@0.2.1", "@jup-ag/dradex-idl@0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@jup-ag/dradex-idl/-/dradex-idl-0.2.1.tgz#36cf9a75ca9712c0a588b6c0050744eab3a46c49" + integrity sha512-CZ5GZTLExy1+fw/tFOo6C4AbU0o/PcqJxxQpDp5UkSJ0SXbz7ZGMz9DfKu+htJuAwxwGgS/rbQfeBoU9fhDXuQ== + dependencies: + "@solana/buffer-layout" "4.0.0" + bn.js "5.2.1" + "@graphql-typed-document-node/core@^3.1.1": version "3.1.1" resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.1.1.tgz#076d78ce99822258cf813ecc1e7fa460fa74d052" @@ -71,44 +129,53 @@ dependencies: "@hapi/hoek" "^9.0.0" -"@jup-ag/core@1.0.0-beta.26": - version "1.0.0-beta.26" - resolved "https://registry.yarnpkg.com/@jup-ag/core/-/core-1.0.0-beta.26.tgz#fd2e637d982f809ad0373753e4f7e7d46c3a1ab0" - integrity sha512-TaUbh6eriuc59wnbM58HS2ahQHn3P3TAwBjwlqOIF3YHtuHP5OZB+Z7YkmHIl4UUvHcVy5cWqUEHnvfPDwDIdg== +"@jup-ag/core@4.0.0-beta.4": + version "4.0.0-beta.4" + resolved "https://registry.yarnpkg.com/@jup-ag/core/-/core-4.0.0-beta.4.tgz#d1b7be4e553537efa39b26c0d420bd44b42a3b15" + integrity sha512-6R5DdoOC1OTaAQND4Rnq1TjYBCrqjv/x/bZJDOJYdgj8rdvxtUEQkCco7E1j3eLspagV+1p/MolXdPLw21ZwNA== dependencies: - "@jup-ag/crema-sdk" "2.0.6" + "@jup-ag/crema-sdk-v2" "2.1.6" "@jup-ag/cykura-sdk" "0.1.25" "@jup-ag/cykura-sdk-core" "0.1.8" + "@jup-ag/deltafi-sdk" "0.0.2" + "@jup-ag/dradex-idl" "0.2.1" + "@jup-ag/dradex-sdk" "0.2.3" + "@jup-ag/goosefx-ssl-sdk" "1.2.17" + "@jup-ag/invariant" "0.9.35" "@jup-ag/lifinity-sdk" "0.1.72" - "@jup-ag/math" "1.0.0-beta.26" - "@jup-ag/whirlpool-sdk" "0.1.1" - "@mercurial-finance/optimist" "0.1.4" - "@project-serum/anchor" "0.23.0" + "@jup-ag/lifinity-sdk-v2" "1.0.8" + "@jup-ag/math" "4.0.0-beta.4" + "@jup-ag/raydium-clmm-sdk" "1.0.2" + "@jup-ag/whirlpools-sdk" "0.7.2" + "@mercurial-finance/dynamic-amm-sdk" "0.1.12" + "@mercurial-finance/optimist" "0.2.0" + "@mercurial-finance/vault-sdk" "0.3.3" + "@noble/hashes" "1.1.2" + "@project-serum/anchor" "0.24.2" "@project-serum/serum" "0.13.65" + "@pythnetwork/client" "2.7.3" "@saberhq/stableswap-sdk" "1.13.6" "@solana/spl-token" "0.1.8" + bignumber.js "9.1.0" bn.js "5.2.1" cross-fetch "3.1.5" - decimal.js "10.3.1" + decimal.js "10.4.2" + fzstd "~0.0.4" jsbi "4.3.0" promise-retry "2.0.1" -"@jup-ag/crema-sdk@2.0.6": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@jup-ag/crema-sdk/-/crema-sdk-2.0.6.tgz#cb432379ca9c4998cb41b4f574244d0070e99365" - integrity sha512-jfCWywBVKXs6tyXbtcY5kWIbx+HE0O0k9qGGaR4Y8ffLjycEChMQ8TmddBn3ZAPDfgwCeJQ7eE5jxVq9hM6zBA== +"@jup-ag/crema-sdk-v2@2.1.6": + version "2.1.6" + resolved "https://registry.yarnpkg.com/@jup-ag/crema-sdk-v2/-/crema-sdk-v2-2.1.6.tgz#d4b0b26250e2093c376c1d19395148d9a430ddf4" + integrity sha512-YhYfzbZCB0G0XciDO0vFXOpJsIn6kveVYolXuJ0toj2t7W0OM9NfvdtUvboUbhE92nJfzpHBScb3X9Qosb8KOA== dependencies: - "@saberhq/solana-contrib" "^1.12.66" - "@saberhq/token-utils" "^1.12.66" + "@cremafinance/anchor-contrib" "1.14.3" + "@project-serum/anchor" "^0.24.0" "@solana/buffer-layout" "^4.0.0" - "@solana/spl-token" "^0.1.8" - "@solana/spl-token-v2" "npm:@solana/spl-token@0.2.0" - "@solana/web3.js" "^1.36.0" - bn.js "^5.2.0" - bs58 "^5.0.0" + "@solana/web3.js" "^1.50.1" + bn.js "^5.2.1" decimal.js "^10.3.1" - jsbi "^4.2.0" - tiny-invariant "^1.2.0" + jsbi "^4.3.0" "@jup-ag/cykura-sdk@0.1.25": version "0.1.25" @@ -120,6 +187,61 @@ "@solana/web3.js" "^1.32.0" tiny-invariant "^1.1.0" +"@jup-ag/deltafi-sdk@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@jup-ag/deltafi-sdk/-/deltafi-sdk-0.0.2.tgz#f8ca171d735562028dccac1eac4b88c3cfa2e014" + integrity sha512-x5aibvJn4JSa7TnviYLDchkxOluvE9W209jy90YfuccNsIDRB3qhDK5rpSu8y2kInXJFA++CY5qTr2VklvdqtQ== + dependencies: + "@project-serum/anchor" "~0.24.2" + "@pythnetwork/client" "^2.5.1" + "@solana/spl-token" "^0.1.8" + bigint-buffer "^1.1.5" + bignumber.js "^9.1.0" + bn.js "^5.2.0" + +"@jup-ag/dradex-sdk@0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@jup-ag/dradex-sdk/-/dradex-sdk-0.2.3.tgz#8f3befe62c0d92c64d26b93d224811b9354bc96a" + integrity sha512-VGvJzy1aYFs7pdEBsyHipLDODG2JoczCBbNXkUjOMqf0RK8Cq0Ofwa6znDKDqK63sO+JdOD41dyQoswwsFUmVQ== + dependencies: + "@dradex/idl" "npm:@jup-ag/dradex-idl@0.2.1" + "@solana/spl-token" "^0.3.4" + decimal.js "^10.3.1" + jsbi "^4.3.0" + +"@jup-ag/goosefx-ssl-sdk@1.2.17": + version "1.2.17" + resolved "https://registry.yarnpkg.com/@jup-ag/goosefx-ssl-sdk/-/goosefx-ssl-sdk-1.2.17.tgz#f4417ff00e27263bfccfe80c9970f13391f6804d" + integrity sha512-ouBfsJqLeiWXccx026gEuOtoEo67uVt9FAFA3rP8fbX5DW9hS5n40vwGbAVXbftcbfJDdymsSep95WdjYJ4rZA== + dependencies: + "@project-serum/anchor" "^0.17.1-beta.1" + "@pythnetwork/client" "^2.8.0" + "@solana/buffer-layout" "^4.0.0" + "@solana/spl-token" "^0.2.0" + "@solana/web3.js" "^1.41.1" + +"@jup-ag/invariant@0.9.35": + version "0.9.35" + resolved "https://registry.yarnpkg.com/@jup-ag/invariant/-/invariant-0.9.35.tgz#53de404dae38023ea3834dda9bb2c7d83537c2d3" + integrity sha512-5OPWvfOQYfXMeI4JjlCxTvoF9MR9wVQ+zVGAtzfgrfkM0sFslJ0c+4pn1TwySc+FGw4MDehrKUMj86VtqZnYZg== + dependencies: + "@project-serum/anchor" "^0.24.0" + "@solana/spl-token-registry" "^0.2.4484" + invariant "^2.2.4" + +"@jup-ag/lifinity-sdk-v2@1.0.8": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@jup-ag/lifinity-sdk-v2/-/lifinity-sdk-v2-1.0.8.tgz#79116db8f3efda8d5873f7aec85a778881aedd63" + integrity sha512-9NKK3ky3mhCVRg93lkYYf6POTUXc6p033l4i4mYaUbqh3s0MNRn1zKqMoQmqSuJDVFzKQlVWWKLkuYv2+Wr86A== + dependencies: + "@project-serum/anchor" "0.24.2" + "@project-serum/borsh" "^0.2.5" + "@project-serum/serum" "^0.13.61" + "@pythnetwork/client" "^2.5.1" + "@solana/spl-token" "^0.1.8" + "@solana/web3.js" "^1.31.0" + decimal.js "^10.3.1" + "@jup-ag/lifinity-sdk@0.1.72": version "0.1.72" resolved "https://registry.yarnpkg.com/@jup-ag/lifinity-sdk/-/lifinity-sdk-0.1.72.tgz#ef120303d99cd371fbff9b04d63d8cb3b92c6d9b" @@ -133,37 +255,154 @@ "@solana/web3.js" "1.31.0" decimal.js "^10.3.1" -"@jup-ag/math@1.0.0-beta.26": - version "1.0.0-beta.26" - resolved "https://registry.yarnpkg.com/@jup-ag/math/-/math-1.0.0-beta.26.tgz#78945ecd3e72e0662c801d0b5ffdc021ee0a02c9" - integrity sha512-R7QmF9u0f+r7j9xH5DldoHHAr66/cGP8AiWC7Z3M2sK5bRSxuYW834/ZEhRmgEY42xmg+a7kQeBxaQnChF4bUg== +"@jup-ag/math@4.0.0-beta.4": + version "4.0.0-beta.4" + resolved "https://registry.yarnpkg.com/@jup-ag/math/-/math-4.0.0-beta.4.tgz#f4265cbfc3a27c34ceb35f2491e57525a045fe10" + integrity sha512-k9RKAb4DAPjjD7rvWfXNErIuyW8JutCyaLQchv3IRdBoyOMduxyJCslmTU/gur/RmMOHYLXoYjFYRUFVHMptGQ== dependencies: - decimal.js "10.3.1" + decimal.js "10.4.2" jsbi "4.3.0" -"@jup-ag/whirlpool-sdk@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@jup-ag/whirlpool-sdk/-/whirlpool-sdk-0.1.1.tgz#f305bea2cf205994b87358ee5ad667d3c84c320e" - integrity sha512-GaEnG+T4ltQ3eKLVEnBRpatrRsR1v6t6epnp/hlXDTxiHyfFaVK/gmfi6ckCXs+npL/y39OtwsO0QV2zkOJdcg== - dependencies: - "@orca-so/whirlpool-client-sdk" "npm:@jup-ag/whirlpool-client-sdk@0.0.8" - "@project-serum/anchor" "~0.23.0" - "@solana/spl-token" "~0.1.8" - axios "^0.25.0" - bn.js "~5.2.0" - decimal.js "~10.3.1" - tiny-invariant "~1.2.0" - -"@mercurial-finance/optimist@0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@mercurial-finance/optimist/-/optimist-0.1.4.tgz#3ed5155fe94d5df0f86d2f47a3506460109eed4a" - integrity sha512-m8QuyPx9j7fGd2grw0mD5WcYtBb8l7+OQI5aHdeIlxPg3QoPrbSdCHyFOuipYbvB0EY5YDbOmyeFwiTcBkBBSw== +"@jup-ag/raydium-clmm-sdk@1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@jup-ag/raydium-clmm-sdk/-/raydium-clmm-sdk-1.0.2.tgz#22e822c1fd3975af58a6e8c6fdc2deb2373dcf76" + integrity sha512-cFTmIqnKpoJeEgvjMTc3ylFO2mhfEDWDJVqP2t5rmxTy18MT6g7qXSTT3c8HVB3pM3TJAms1CA0MBC/0RS9YwQ== + dependencies: + "@project-serum/anchor" "0.24.2" + "@project-serum/borsh" "^0.2.5" + "@solana/spl-token" "0.1.8" + "@solana/web3.js" "^1.66.2" + decimal.js "^10.3.1" + +"@jup-ag/whirlpools-sdk@0.7.2": + version "0.7.2" + resolved "https://registry.yarnpkg.com/@jup-ag/whirlpools-sdk/-/whirlpools-sdk-0.7.2.tgz#c4cc2fa601686e5cb5f1020b8c50acf38c9fb529" + integrity sha512-q3QPZ4QCj5s9eaY000jmIPiaFVCuJ/cYAxdzR+0gEeDCgrcBl3eJsxvaIEnyElM6x2r6/lc+yhjJMP0kfrUYxQ== + dependencies: + "@orca-so/common-sdk" "^0.1.4" + "@project-serum/anchor" "~0.25.0" + "@solana/spl-token" "^0.1.8" + "@solana/web3.js" "^1.66.0" + decimal.js "^10.3.1" + tiny-invariant "^1.2.0" + +"@mercurial-finance/apricot-sdk@0.17.6": + version "0.17.6" + resolved "https://registry.yarnpkg.com/@mercurial-finance/apricot-sdk/-/apricot-sdk-0.17.6.tgz#e5e2266dbf3d454a09d745561f486aaa351d625a" + integrity sha512-/x/nMksG2h3uB7G4bPVXk0YjvsGVUniSikRmCf/VFFly9BqcRcBtSk4aMdSvIjYsJrpSzWVrHXUYeOtUF1ObDA== + dependencies: + "@solana/spl-token" "0.1.8" + "@solana/web3.js" "^1.37.0" + decimal.js "^10.3.1" + tiny-invariant "^1.1.0" + +"@mercurial-finance/dynamic-amm-sdk@0.1.12": + version "0.1.12" + resolved "https://registry.yarnpkg.com/@mercurial-finance/dynamic-amm-sdk/-/dynamic-amm-sdk-0.1.12.tgz#24e63c8c6b8f876fb8f643c4f20e34ffc2a9da8a" + integrity sha512-MscZP0Mpzs0oo7KsOZlQWvpwKSKAE+baf0E5usseuVnMvarYDDw/7gnZFt2Ot/lFRxv79McqwcV/mLJWW25OnQ== + dependencies: + "@mercurial-finance/vault-sdk" "0.3.3" + "@project-serum/anchor" "0.24.2" + "@saberhq/anchor-contrib" "^1.13.32" + "@saberhq/stableswap-sdk" "^1.13.32" + "@saberhq/token-utils" "1.13.32" + "@solana/spl-token" "0.1.8" + "@solana/spl-token-registry" "0.2.1105" + "@solana/web3.js" "^1.42.0" + bn-sqrt "^1.0.0" + bn.js "5.2.1" + decimal.js "^10.4.1" + dotenv "^16.0.1" + invariant "^2.2.4" + jsbi "^4.3.0" + +"@mercurial-finance/francium-sdk@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@mercurial-finance/francium-sdk/-/francium-sdk-1.4.3.tgz#aa6c43da1a923a700bec0b0e425fe72a76d8dd68" + integrity sha512-beFsxFx9WsHsImCSZAPXlitE4kQMugHczATishmJdxXGEHvBfJ3hrncjaWf+znwlMTknx8zYgPFfeP9JzbHHgw== + +"@mercurial-finance/optimist@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@mercurial-finance/optimist/-/optimist-0.2.0.tgz#03992ce6de460611006ac094037013bcb6a999b1" + integrity sha512-tUA1y83jTXroEClGN7dyhHxKZ+C+zKbSRx/LA7BltMumNG8mFSWJpi5uwkhmfhmSzvSgDob/qw0py3lFjw/FKQ== + dependencies: + promise-retry "2.0.1" + +"@mercurial-finance/optimist@^0.1.4": + version "0.1.8" + resolved "https://registry.yarnpkg.com/@mercurial-finance/optimist/-/optimist-0.1.8.tgz#d183dd4c0c09b9b446f9f90edff0265e63a5d1a2" + integrity sha512-2lkM07ia0QZzQqd8wOP1xiAazgRcfCoWXbcWwRAJZfNNuM0d6ybdyPJKagFU9r7vrlcEhLVCAlenRHMcFZ1v+w== + dependencies: + promise-retry "2.0.1" + +"@mercurial-finance/port-sdk@0.2.69": + version "0.2.69" + resolved "https://registry.yarnpkg.com/@mercurial-finance/port-sdk/-/port-sdk-0.2.69.tgz#79978c4be9175afb3640e18e16f21e439f203ef2" + integrity sha512-DDZBLkoIQVhLQRy+t7dVuiHNw0nAmWD7xqwMekHT71bBLU5ajQglRvQ9b8d2RQQn1WJsXhbGbc7eTUGWdZqWoQ== + dependencies: + "@solana/buffer-layout" "^3.0.0" + "@solana/spl-token" "0.1.8" + "@solana/spl-token-registry" "^0.2.1107" + "@solana/web3.js" "^1.32.0" + big.js "^6.1.1" + bn.js "^5.2.1" + buffer-layout "1.2.2" + +"@mercurial-finance/solend-sdk@0.6.5": + version "0.6.5" + resolved "https://registry.yarnpkg.com/@mercurial-finance/solend-sdk/-/solend-sdk-0.6.5.tgz#54b2fe6fb28356ba8e749e8c42fb9193cec4f258" + integrity sha512-544KqvD1IkpnyTUDOCt0yVlTcayt9rv+CTXHTFQDinWQQkA8uWBoiNbI0g49bJVE//Np3SbJSOgJmq5KlxgvWQ== + dependencies: + "@solana/web3.js" "^1.52.0" + bn.js "^5.2.0" + buffer "^6.0.3" + buffer-layout "^1.2.0" + +"@mercurial-finance/tulip-platform-sdk@2.0.30": + version "2.0.30" + resolved "https://registry.yarnpkg.com/@mercurial-finance/tulip-platform-sdk/-/tulip-platform-sdk-2.0.30.tgz#c528ca8efd96e4667d8d905274065d6435438ad6" + integrity sha512-ySPxAtFLtati9Vv7g3czrcNEiT9HBZboRDNnfEDmCFJqsub87Y2ZF125dpspaZzKUlolOrBIqBy1FZYIreMgfg== + dependencies: + "@project-serum/anchor" "^0.25.0" + "@project-serum/associated-token" "^0.1.1" + "@project-serum/borsh" "^0.2.5" + "@solana/web3.js" "^1.66.2" + lodash "^4.17.21" + +"@mercurial-finance/vault-sdk@0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@mercurial-finance/vault-sdk/-/vault-sdk-0.3.3.tgz#57aed78db652718190b6ee7d954644f88a189062" + integrity sha512-6zSLrvQp03x5101DV5+mZaQ3VZ+f78KQgGQEarMPrjm80F/Eb5ElNh7Od9S0BsEfL7nocM8yIi424wgH17/gLQ== + dependencies: + "@blockworks-foundation/mango-client" "^3.4.7" + "@mercurial-finance/apricot-sdk" "0.17.6" + "@mercurial-finance/francium-sdk" "1.4.3" + "@mercurial-finance/optimist" "^0.1.4" + "@mercurial-finance/port-sdk" "0.2.69" + "@mercurial-finance/solend-sdk" "0.6.5" + "@mercurial-finance/tulip-platform-sdk" "2.0.30" + "@project-serum/anchor" "0.24.2" + "@quarryprotocol/quarry-sdk" "5.0.2" + "@saberhq/anchor-contrib" "^1.13.6" + "@solana/buffer-layout" "^4.0.0" + "@solana/spl-token" "0.1.8" + "@solana/spl-token-registry" "0.2.1105" + "@solana/web3.js" "^1.42.0" + bn.js "5.2.1" + cross-fetch "^3.1.5" + decimal.js "10.3.1" + jsbi "4.3.0" "@noble/ed25519@^1.7.0": version "1.7.1" resolved "https://registry.yarnpkg.com/@noble/ed25519/-/ed25519-1.7.1.tgz#6899660f6fbb97798a6fbd227227c4589a454724" integrity sha512-Rk4SkJFaXZiznFyC/t77Q0NKS4FL7TLJJsVG2V2oiEq3kJVeTdxysEe/yRWSpnWMe808XRDJ+VFh5pt/FN5plw== +"@noble/hashes@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.2.tgz#e9e035b9b166ca0af657a7848eb2718f0f22f183" + integrity sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA== + "@noble/hashes@^1.1.2": version "1.1.4" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.4.tgz#2611ebf5764c1bf754da7c7794de4fb30512336d" @@ -174,21 +413,20 @@ resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.0.tgz#d15357f7c227e751d90aa06b05a0e5cf993ba8c1" integrity sha512-kbacwGSsH/CTout0ZnZWxnW1B+jH/7r/WAAKLBtrRJ/+CUH7lgmQzl3GTrQua3SGKWNSDsS6lmjnDpIJ5Dxyaw== -"@orca-so/whirlpool-client-sdk@npm:@jup-ag/whirlpool-client-sdk@0.0.8": - version "0.0.8" - resolved "https://registry.yarnpkg.com/@jup-ag/whirlpool-client-sdk/-/whirlpool-client-sdk-0.0.8.tgz#d3715266e0a76ab699078ce1f5525f80e09dd825" - integrity sha512-nlAE/huKAWNxJ9g9BhD7nWGqTg/s0kGjWYqccsYM1Nv6CjesvWdtl8N4k81enmYYU2jgjm6f4XYKA8zTLHsBsA== +"@orca-so/common-sdk@^0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@orca-so/common-sdk/-/common-sdk-0.1.4.tgz#4e87da14f525228ded7969431738a32260dc8495" + integrity sha512-reJyk60vEyDH4IutT+ulxy+FA12MfmVC9/13cLkcOBNTwtgV9/UIJnuA5I9ptqn4gaCols078n2el9nbtLsKaQ== dependencies: - "@project-serum/anchor" "~0.23.0" - "@solana/spl-token" "~0.1.8" - bn.js "~5.2.0" - decimal.js "~10.3.1" - lru-cache "^7.9.0" + "@project-serum/anchor" "~0.25.0" + "@solana/spl-token" "0.1.8" + decimal.js "^10.3.1" + tiny-invariant "^1.2.0" -"@project-serum/anchor@0.23.0", "@project-serum/anchor@~0.23.0": - version "0.23.0" - resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.23.0.tgz#2b2eb6b51601b073e8db26663aa2d6c2f2841771" - integrity sha512-LV2/ifZOJVFTZ4GbEloXln3iVfCvO1YM8i7BBCrUm4tehP7irMx4nr4/IabHWOzrQcQElsxSP/lb1tBp+2ff8A== +"@project-serum/anchor@0.24.2", "@project-serum/anchor@^0.24.0", "@project-serum/anchor@^0.24.2", "@project-serum/anchor@~0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.24.2.tgz#a3c52a99605c80735f446ca9b3a4885034731004" + integrity sha512-0/718g8/DnEuwAidUwh5wLYphUYXhUbiClkuRNhvNoa+1Y8a4g2tJyxoae+emV+PG/Gikd/QUBNMkIcimiIRTA== dependencies: "@project-serum/borsh" "^0.2.5" "@solana/web3.js" "^1.36.0" @@ -200,7 +438,6 @@ cross-fetch "^3.1.5" crypto-hash "^1.3.0" eventemitter3 "^4.0.7" - find "^0.3.0" js-sha256 "^0.9.0" pako "^2.0.3" snake-case "^3.0.4" @@ -226,6 +463,26 @@ snake-case "^3.0.4" toml "^3.0.0" +"@project-serum/anchor@^0.17.1-beta.1": + version "0.17.1-beta.2" + resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.17.1-beta.2.tgz#c93b460018c1e90a9104d5b5b71f2cb7718bed50" + integrity sha512-uUqojV+oTmzjf/OelVj7anD71/wWnkdKAaNpz4Q57T06XUaFPnNbOvKh7c991/WDVGXrdDCQcx6nRQEP1tQn2Q== + dependencies: + "@project-serum/borsh" "^0.2.2" + "@solana/web3.js" "^1.17.0" + base64-js "^1.5.1" + bn.js "^5.1.2" + bs58 "^4.0.1" + buffer-layout "^1.2.0" + camelcase "^5.3.1" + crypto-hash "^1.3.0" + eventemitter3 "^4.0.7" + find "^0.3.0" + js-sha256 "^0.9.0" + pako "^2.0.3" + snake-case "^3.0.4" + toml "^3.0.0" + "@project-serum/anchor@^0.20.1": version "0.20.1" resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.20.1.tgz#0937807e807e8332aa708cfef4bcb6cbb88b4129" @@ -246,6 +503,27 @@ snake-case "^3.0.4" toml "^3.0.0" +"@project-serum/anchor@^0.21.0": + version "0.21.0" + resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.21.0.tgz#ad5fb33744991ec1900cdb2fd22707c908b12b5f" + integrity sha512-flRuW/F+iC8mitNokx82LOXyND7Dyk6n5UUPJpQv/+NfySFrNFlzuQZaBZJ4CG5g9s8HS/uaaIz1nVkDR8V/QA== + dependencies: + "@project-serum/borsh" "^0.2.4" + "@solana/web3.js" "^1.17.0" + base64-js "^1.5.1" + bn.js "^5.1.2" + bs58 "^4.0.1" + buffer-layout "^1.2.2" + camelcase "^5.3.1" + cross-fetch "^3.1.5" + crypto-hash "^1.3.0" + eventemitter3 "^4.0.7" + find "^0.3.0" + js-sha256 "^0.9.0" + pako "^2.0.3" + snake-case "^3.0.4" + toml "^3.0.0" + "@project-serum/anchor@^0.22.0", "@project-serum/anchor@^0.22.1": version "0.22.1" resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.22.1.tgz#698a9620f94691de0a12bbc650a5c8380e2f0e8a" @@ -267,10 +545,10 @@ snake-case "^3.0.4" toml "^3.0.0" -"@project-serum/anchor@^0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.24.2.tgz#a3c52a99605c80735f446ca9b3a4885034731004" - integrity sha512-0/718g8/DnEuwAidUwh5wLYphUYXhUbiClkuRNhvNoa+1Y8a4g2tJyxoae+emV+PG/Gikd/QUBNMkIcimiIRTA== +"@project-serum/anchor@^0.25.0", "@project-serum/anchor@~0.25.0": + version "0.25.0" + resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.25.0.tgz#88ee4843336005cf5a64c80636ce626f0996f503" + integrity sha512-E6A5Y/ijqpfMJ5psJvbw0kVTzLZFUcOFgs6eSM2M2iWE1lVRF18T6hWZVNl6zqZsoz98jgnNHtVGJMs+ds9A7A== dependencies: "@project-serum/borsh" "^0.2.5" "@solana/web3.js" "^1.36.0" @@ -285,9 +563,15 @@ js-sha256 "^0.9.0" pako "^2.0.3" snake-case "^3.0.4" + superstruct "^0.15.4" toml "^3.0.0" -"@project-serum/borsh@^0.2.2", "@project-serum/borsh@^0.2.5": +"@project-serum/associated-token@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@project-serum/associated-token/-/associated-token-0.1.1.tgz#9acf745e84dad21e2ea26e06694704b9d698e532" + integrity sha512-Zc1wdqragbDiyBVagzIbIsMe37P7fgkArWZPIj+jJjDIoznlmYMK6ASU5mtdDZrPJ7sNABF/lzZ3+jvCCcU+oA== + +"@project-serum/borsh@^0.2.2", "@project-serum/borsh@^0.2.4", "@project-serum/borsh@^0.2.5": version "0.2.5" resolved "https://registry.yarnpkg.com/@project-serum/borsh/-/borsh-0.2.5.tgz#6059287aa624ecebbfc0edd35e4c28ff987d8663" integrity sha512-UmeUkUoKdQ7rhx6Leve1SssMR/Ghv8qrEiyywyxSWg7ooV7StdpPBhciiy5eB3T0qU1BXvdRNC8TdrkxK7WC5Q== @@ -295,7 +579,7 @@ bn.js "^5.1.2" buffer-layout "^1.2.0" -"@project-serum/serum@0.13.65", "@project-serum/serum@^0.13.61": +"@project-serum/serum@0.13.65", "@project-serum/serum@^0.13.61", "@project-serum/serum@^0.13.65": version "0.13.65" resolved "https://registry.yarnpkg.com/@project-serum/serum/-/serum-0.13.65.tgz#6d3cf07912f13985765237f053cca716fe84b0b0" integrity sha512-BHRqsTqPSfFB5p+MgI2pjvMBAQtO8ibTK2fYY96boIFkCI3TTwXDt2gUmspeChKO2pqHr5aKevmexzAcXxrSRA== @@ -306,6 +590,14 @@ bn.js "^5.1.2" buffer-layout "^1.2.0" +"@project-serum/sol-wallet-adapter@^0.2.0": + version "0.2.6" + resolved "https://registry.yarnpkg.com/@project-serum/sol-wallet-adapter/-/sol-wallet-adapter-0.2.6.tgz#b4cd25a566294354427c97c26d716112b91a0107" + integrity sha512-cpIb13aWPW8y4KzkZAPDgw+Kb+DXjCC6rZoH74MGm3I/6e/zKyGnfAuW5olb2zxonFqsYgnv7ev8MQnvSgJ3/g== + dependencies: + bs58 "^4.0.1" + eventemitter3 "^4.0.7" + "@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" @@ -359,21 +651,62 @@ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== -"@pythnetwork/client@^2.5.1": +"@pythnetwork/client@2.7.3": + version "2.7.3" + resolved "https://registry.yarnpkg.com/@pythnetwork/client/-/client-2.7.3.tgz#6075a16dc394d1734e76b04e907a680490a61536" + integrity sha512-+2k5JXxv/yUA6WMESSppJlg4T/AP+nZZfBnHmeG3RPCIJx+bargxFLCK4B2KgpQYdeTWb+2z8yRCNF7tHooCFQ== + dependencies: + buffer "^6.0.1" + +"@pythnetwork/client@^2.5.1", "@pythnetwork/client@^2.8.0": version "2.8.0" resolved "https://registry.yarnpkg.com/@pythnetwork/client/-/client-2.8.0.tgz#1b764d710f17c2f3cd3c9ba0c4ae74d26e72b01b" integrity sha512-YqqZSDDsEApC/F4H5ejcl8OCr7gsWv0noTK8YABT8pCtFRTQxXBP0r2S8KQMaIw1x97Mue/jkYybdMeFQzPjCw== dependencies: buffer "^6.0.1" -"@saberhq/option-utils@^1.14.11": +"@quarryprotocol/quarry-sdk@5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@quarryprotocol/quarry-sdk/-/quarry-sdk-5.0.2.tgz#f306ef4c0446a2ae7432e6e0593bc3dcb75812ee" + integrity sha512-wczlmNfb8fk6WCZsLLR7ysSjgxl6ZdEJ7cNDhgvFpU9E1YMSN1f2l2NK9yw+VksuLxWCightFsBrHSqqIftDzQ== + dependencies: + superstruct "^0.15.4" + tiny-invariant "^1.2.0" + tslib "^2.3.1" + +"@saberhq/anchor-contrib@^1.13.32", "@saberhq/anchor-contrib@^1.13.6": + version "1.14.11" + resolved "https://registry.yarnpkg.com/@saberhq/anchor-contrib/-/anchor-contrib-1.14.11.tgz#cebaac040faea643ade8ecb6afeeb2dcdf5a33a2" + integrity sha512-6fOMC9XjuMSpGin/5HGqDita/dYzndjMMUNjht7yQZzD9638cdjrAutwZjvYwMUepKLdJ5CQV4bE74bSeMF9HQ== + dependencies: + "@saberhq/solana-contrib" "^1.14.11" + eventemitter3 "^4.0.7" + lodash.camelcase "^4.3.0" + lodash.mapvalues "^4.6.0" + tslib "^2.4.0" + +"@saberhq/option-utils@^1.14.11", "@saberhq/option-utils@^1.14.9": version "1.14.11" resolved "https://registry.yarnpkg.com/@saberhq/option-utils/-/option-utils-1.14.11.tgz#db6c2e79ade3c8b15f90eb376c783c31358bf1ef" integrity sha512-v75bHrUYp791lGN6PnbX7eg8T8WbdGSX1y591IhC3WgZDdXPxC/lY1Puv/g9pXxytyCrftTLFehv8+2odMKsyw== dependencies: tslib "^2.4.0" -"@saberhq/solana-contrib@^1.12.66", "@saberhq/solana-contrib@^1.13.6", "@saberhq/solana-contrib@^1.14.11": +"@saberhq/solana-contrib@^1.13.32", "@saberhq/solana-contrib@^1.13.6", "@saberhq/solana-contrib@^1.14.9": + version "1.14.9" + resolved "https://registry.yarnpkg.com/@saberhq/solana-contrib/-/solana-contrib-1.14.9.tgz#ec82b69460035df995ab163f643de61c3b7bcc17" + integrity sha512-e09v3c62cZ2I7hcS7x4q1am4wd4v0VfiIEBZxWBpvTVCKmdbdpUWUKyecI88VHbyO9exBLGq1yxJZZsz0OPyUA== + dependencies: + "@saberhq/option-utils" "^1.14.9" + "@solana/buffer-layout" "^4.0.0" + "@types/promise-retry" "^1.1.3" + "@types/retry" "^0.12.2" + promise-retry "^2.0.1" + retry "^0.13.1" + tiny-invariant "^1.3.1" + tslib "^2.4.0" + +"@saberhq/solana-contrib@^1.14.11": version "1.14.11" resolved "https://registry.yarnpkg.com/@saberhq/solana-contrib/-/solana-contrib-1.14.11.tgz#d4a6a09f426afb353fc5727b06365446d4642bb7" integrity sha512-HOEJpTZnSGmrfJG2gV18vQbtI14ET9l4/Q1yyPk4R2dkydxZIfBIPCI9SRWZ9g01/nuob3Fryd79Ca6QDk7qjw== @@ -399,7 +732,42 @@ tiny-invariant "^1.2.0" tslib "^2.4.0" -"@saberhq/token-utils@^1.12.66", "@saberhq/token-utils@^1.13.6": +"@saberhq/stableswap-sdk@^1.13.32": + version "1.14.11" + resolved "https://registry.yarnpkg.com/@saberhq/stableswap-sdk/-/stableswap-sdk-1.14.11.tgz#88397d8a546888a92f767d98c83586ef0ced2f1d" + integrity sha512-nEOLIFC1QyeoNOtIQMotlyaGfYCsmyJJn0HqrjJL2tcX87zWOmH5aEEfhmg9jJ19aiFYPvQeQ6h8eKp+nFk9Ow== + dependencies: + "@saberhq/solana-contrib" "^1.14.11" + "@saberhq/token-utils" "^1.14.11" + "@solana/buffer-layout" "^4.0.0" + tiny-invariant "^1.3.1" + tslib "^2.4.0" + +"@saberhq/token-utils@1.13.32": + version "1.13.32" + resolved "https://registry.yarnpkg.com/@saberhq/token-utils/-/token-utils-1.13.32.tgz#2acc98bd4d3732b826396a70b958198e0d20dee8" + integrity sha512-n5ECiw82IQJwyq9bTkcrbNWVi+lAQoQlJlTmIye8odUQATBsqOWN+clqfrFkn/UMmezO60bo34bUaM0Oir7Pew== + dependencies: + "@saberhq/solana-contrib" "^1.13.32" + "@solana/buffer-layout" "^4.0.0" + "@solana/spl-token" "^0.1.8" + "@ubeswap/token-math" "^5.1.6" + tiny-invariant "^1.2.0" + tslib "^2.4.0" + +"@saberhq/token-utils@^1.13.6": + version "1.14.9" + resolved "https://registry.yarnpkg.com/@saberhq/token-utils/-/token-utils-1.14.9.tgz#265cb24134c504b04d247b3b8b84b74b6eb8cd52" + integrity sha512-iIcWQYFV2UBQtfQJIsnq38eW04hSgQiJDpshyT7Z69k6FZlAaNC5yvQQnCI1k4K/z7IZpu5W8Pq8XD665UG+AA== + dependencies: + "@saberhq/solana-contrib" "^1.14.9" + "@solana/buffer-layout" "^4.0.0" + "@solana/spl-token" "^0.1.8" + "@ubeswap/token-math" "^5.2.1" + tiny-invariant "^1.3.1" + tslib "^2.4.0" + +"@saberhq/token-utils@^1.14.11": version "1.14.11" resolved "https://registry.yarnpkg.com/@saberhq/token-utils/-/token-utils-1.14.11.tgz#bc895173245a46789b65080eb38722e99dbfeb22" integrity sha512-C+K1IHQuLwG6APT8wbrlvJPM4arTcNHnnydqZbMpsi1Zyyis+UPM3n/PgHmyX2ydtQ+GzPMLFMgxahtjicEgXw== @@ -438,6 +806,20 @@ bigint-buffer "^1.1.5" bignumber.js "^9.0.1" +"@solana/buffer-layout@4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-4.0.0.tgz#75b1b11adc487234821c81dfae3119b73a5fd734" + integrity sha512-lR0EMP2HC3+Mxwd4YcnZb0smnaDw7Bl2IQWZiTevRH5ZZBZn6VRWn3/92E3qdU4SSImJkA6IDHawOHAnx/qUvQ== + dependencies: + buffer "~6.0.3" + +"@solana/buffer-layout@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-3.0.0.tgz#b9353caeb9a1589cb77a1b145bcb1a9a93114326" + integrity sha512-MVdgAKKL39tEs0l8je0hKaXLQFb7Rdfb0Xg2LjFZd8Lfdazkg6xiS98uAZrEKvaoF3i4M95ei9RydkGIDMeo3w== + dependencies: + buffer "~6.0.3" + "@solana/buffer-layout@^4.0.0": version "4.0.1" resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz#b996235eaec15b1e0b5092a8ed6028df77fa6c15" @@ -445,6 +827,20 @@ dependencies: buffer "~6.0.3" +"@solana/spl-token-registry@0.2.1105": + version "0.2.1105" + resolved "https://registry.yarnpkg.com/@solana/spl-token-registry/-/spl-token-registry-0.2.1105.tgz#460fc363096aa59c5150f67736cddc1d5a810e8a" + integrity sha512-s9MIUoTAtqYsg1RaXIHXq7DhsUVS9VckvrwYuJBFn68YCZNSMUEquqaimbaHi88OVduFsApVAbKRmsGnJ9abIw== + dependencies: + cross-fetch "3.0.6" + +"@solana/spl-token-registry@^0.2.1107", "@solana/spl-token-registry@^0.2.4484": + version "0.2.4574" + resolved "https://registry.yarnpkg.com/@solana/spl-token-registry/-/spl-token-registry-0.2.4574.tgz#13f4636b7bec90d2bb43bbbb83512cd90d2ce257" + integrity sha512-JzlfZmke8Rxug20VT/VpI2XsXlsqMlcORIUivF+Yucj7tFi7A0dXG7h+2UnD0WaZJw8BrUz2ABNkUnv89vbv1A== + dependencies: + cross-fetch "3.0.6" + "@solana/spl-token-v2@npm:@solana/spl-token@0.2.0": version "0.2.0" resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.2.0.tgz#329bb6babb5de0f9c40035ddb1657f01a8347acd" @@ -455,7 +851,7 @@ "@solana/web3.js" "^1.32.0" start-server-and-test "^1.14.0" -"@solana/spl-token@0.1.8", "@solana/spl-token@^0.1.6", "@solana/spl-token@^0.1.8", "@solana/spl-token@^0.3.6", "@solana/spl-token@~0.1.8": +"@solana/spl-token@0.1.8", "@solana/spl-token@^0.1.6", "@solana/spl-token@^0.1.8", "@solana/spl-token@^0.2.0", "@solana/spl-token@^0.3.4", "@solana/spl-token@^0.3.6": version "0.1.8" resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.1.8.tgz#f06e746341ef8d04165e21fc7f555492a2a0faa6" integrity sha512-LZmYCKcPQDtJgecvWOgT/cnoIQPWjdH+QVyzPcFvyDUiT0DiRjZaam4aqNUyvchLFhzgunv3d9xOoyE34ofdoQ== @@ -467,7 +863,7 @@ buffer-layout "^1.2.0" dotenv "10.0.0" -"@solana/web3.js@1.31.0", "@solana/web3.js@^1.17.0", "@solana/web3.js@^1.21.0", "@solana/web3.js@^1.32.0", "@solana/web3.js@^1.36.0", "@solana/web3.js@^1.63.0", "@solana/web3.js@^1.66.2": +"@solana/web3.js@1.31.0", "@solana/web3.js@^1.17.0", "@solana/web3.js@^1.21.0", "@solana/web3.js@^1.31.0", "@solana/web3.js@^1.32.0", "@solana/web3.js@^1.36.0", "@solana/web3.js@^1.37.0", "@solana/web3.js@^1.41.1", "@solana/web3.js@^1.42.0", "@solana/web3.js@^1.43.5", "@solana/web3.js@^1.50.1", "@solana/web3.js@^1.52.0", "@solana/web3.js@^1.63.0", "@solana/web3.js@^1.66.0", "@solana/web3.js@^1.66.2": version "1.70.0" resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.70.0.tgz#14ad207f431861397db85921aad8df4e8374e7c8" integrity sha512-HwdI9LaHaszfpzgxJI44iP68mJWUeqK1TeSheKQsGkH5zlVyGWGmim50MyDWu2vXiuL8Akf2xEMSrDYyLordgg== @@ -581,7 +977,7 @@ dependencies: "@types/node" "*" -"@ubeswap/token-math@^5.2.1": +"@ubeswap/token-math@^5.1.6", "@ubeswap/token-math@^5.2.1": version "5.2.1" resolved "https://registry.yarnpkg.com/@ubeswap/token-math/-/token-math-5.2.1.tgz#66e70ba8d65b5fdb1b7459332fbdad4ddec32a64" integrity sha512-wkIKDKIl6rml4CVK3fvjjLVk55Z8qEYTgjxZx7MnrTwECazyhiDuekb9WAaDPXcW5QNffCu8uv4Ba8wE96CJsg== @@ -657,13 +1053,6 @@ axios@^0.21.1: dependencies: follow-redirects "^1.14.0" -axios@^0.25.0: - version "0.25.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.25.0.tgz#349cfbb31331a9b4453190791760a8d35b093e0a" - integrity sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g== - dependencies: - follow-redirects "^1.14.7" - axios@^0.27.2: version "0.27.2" resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" @@ -684,11 +1073,6 @@ base-x@^3.0.2: dependencies: safe-buffer "^5.0.1" -base-x@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-4.0.0.tgz#d0e3b7753450c73f8ad2389b5c018a4af7b2224a" - integrity sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw== - base64-js@^1.3.1, base64-js@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" @@ -711,7 +1095,12 @@ bigint-buffer@^1.1.5: dependencies: bindings "^1.3.0" -bignumber.js@^9.0.1: +bignumber.js@9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.0.tgz#8d340146107fe3a6cb8d40699643c302e8773b62" + integrity sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A== + +bignumber.js@^9.0.1, bignumber.js@^9.1.0: version "9.1.1" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6" integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== @@ -733,7 +1122,14 @@ bluebird@3.7.2: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -bn.js@5.2.1, bn.js@^5.0.0, bn.js@^5.1.0, bn.js@^5.1.2, bn.js@^5.2.0, bn.js@~5.2.0: +bn-sqrt@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/bn-sqrt/-/bn-sqrt-1.0.0.tgz#aac3fcb56a359850d8339d3925213ac27c22b782" + integrity sha512-XdCMQ7tfEF/f7nrQgnrJ+DLQBwQzSQyPOKIXdUOTcGEvsRKBcIsdfORp7B5H8DWo8FOzZ4+a2TjSZzaqKgzicg== + dependencies: + bn.js "^5.2.0" + +bn.js@5.2.1, bn.js@^5.0.0, bn.js@^5.1.0, bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== @@ -781,19 +1177,12 @@ bs58@^4.0.0, bs58@^4.0.1: dependencies: base-x "^3.0.2" -bs58@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/bs58/-/bs58-5.0.0.tgz#865575b4d13c09ea2a84622df6c8cbeb54ffc279" - integrity sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ== - dependencies: - base-x "^4.0.0" - buffer-from@^1.0.0, buffer-from@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer-layout@^1.2.0, buffer-layout@^1.2.2: +buffer-layout@1.2.2, buffer-layout@^1.2.0, buffer-layout@^1.2.1, buffer-layout@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/buffer-layout/-/buffer-layout-1.2.2.tgz#b9814e7c7235783085f9ca4966a0cfff112259d5" integrity sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA== @@ -806,7 +1195,7 @@ buffer@6.0.1: base64-js "^1.3.1" ieee754 "^1.2.1" -buffer@6.0.3, buffer@^6.0.1, buffer@~6.0.3: +buffer@6.0.3, buffer@^6.0.1, buffer@^6.0.3, buffer@~6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== @@ -868,6 +1257,15 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.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" @@ -897,6 +1295,13 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== +cross-fetch@3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.0.6.tgz#3a4040bc8941e653e0e9cf17f29ebcd177d3365c" + integrity sha512-KBPUbqgFjzWlVcURG+Svp9TlhA5uliYtiNx/0r8nv0pdypeQCRJ9IaSIc3q/x3q8t3F75cHuwxVql1HFGHCNJQ== + dependencies: + node-fetch "2.6.1" + cross-fetch@3.1.5, cross-fetch@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" @@ -942,11 +1347,16 @@ decimal.js-light@^2.5.1: resolved "https://registry.yarnpkg.com/decimal.js-light/-/decimal.js-light-2.5.1.tgz#134fd32508f19e208f4fb2f8dac0d2626a867934" integrity sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg== -decimal.js@10.3.1, decimal.js@~10.3.1: +decimal.js@10.3.1: version "10.3.1" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== +decimal.js@10.4.2, decimal.js@^10.4.1: + version "10.4.2" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.2.tgz#0341651d1d997d86065a2ce3a441fbd0d8e8b98e" + integrity sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA== + decimal.js@^10.3.1: version "10.4.3" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" @@ -980,11 +1390,16 @@ dot-case@^3.0.4: no-case "^3.0.4" tslib "^2.0.3" -dotenv@10.0.0: +dotenv@10.0.0, dotenv@^10.0.0: version "10.0.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== +dotenv@^16.0.1: + version "16.0.3" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" + integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== + duplexer@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" @@ -1109,7 +1524,7 @@ flat@^5.0.2: resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== -follow-redirects@^1.14.0, follow-redirects@^1.14.7, follow-redirects@^1.14.9: +follow-redirects@^1.14.0, follow-redirects@^1.14.9: version "1.15.2" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== @@ -1147,6 +1562,11 @@ fsevents@~2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== +fzstd@~0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/fzstd/-/fzstd-0.0.4.tgz#00f63df42ee7acde2c68b2d8b7be92b6c633d629" + integrity sha512-GNZEyoB2+mGNGhBBdRiPF1WE3xRK5VTOXFNiM8YqUmo5Lo/XeyvLtSSrWLN3NS7JRnwolabqsmE970MiqI69Ug== + 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" @@ -1247,6 +1667,13 @@ inherits@2: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -1336,6 +1763,11 @@ js-sha256@^0.9.0: resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.9.0.tgz#0b89ac166583e91ef9123644bd3c5334ce9d0966" integrity sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA== +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + js-yaml@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" @@ -1343,7 +1775,7 @@ js-yaml@4.1.0: dependencies: argparse "^2.0.1" -jsbi@4.3.0, jsbi@^4.1.0, jsbi@^4.2.0: +jsbi@4.3.0, jsbi@^4.1.0, jsbi@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/jsbi/-/jsbi-4.3.0.tgz#b54ee074fb6fcbc00619559305c8f7e912b04741" integrity sha512-SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g== @@ -1382,6 +1814,11 @@ 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.mapvalues@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" @@ -1405,6 +1842,13 @@ long@^4.0.0: resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + lower-case@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" @@ -1412,11 +1856,6 @@ lower-case@^2.0.2: dependencies: tslib "^2.0.3" -lru-cache@^7.9.0: - version "7.14.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.14.1.tgz#8da8d2f5f59827edb388e63e459ac23d6d408fea" - integrity sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA== - lunr@^2.3.9: version "2.3.9" resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" @@ -1591,6 +2030,11 @@ node-fetch@2, node-fetch@2.6.7: dependencies: whatwg-url "^5.0.0" +node-fetch@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + node-gyp-build@^4.3.0: version "4.5.0" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" @@ -1862,7 +2306,7 @@ stream-combiner@~0.0.4: dependencies: duplexer "~0.1.1" -string-width@^4.1.0, string-width@^4.2.0: +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== @@ -1898,6 +2342,11 @@ superstruct@^0.14.2: resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.14.2.tgz#0dbcdf3d83676588828f1cf5ed35cda02f59025b" integrity sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ== +superstruct@^0.15.4: + version "0.15.5" + resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.15.5.tgz#0f0a8d3ce31313f0d84c6096cd4fa1bfdedc9dab" + integrity sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ== + supports-color@8.1.1: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" @@ -1927,11 +2376,6 @@ tiny-invariant@^1.1.0, tiny-invariant@^1.2.0, tiny-invariant@^1.3.1: resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== -tiny-invariant@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.2.0.tgz#a1141f86b672a9148c72e978a19a73b9b94a15a9" - integrity sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg== - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -1992,7 +2436,7 @@ tsconfig-paths@^3.5.0: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0: +tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== @@ -2130,6 +2574,11 @@ yargs-parser@^20.2.2: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +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-unparser@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" @@ -2153,6 +2602,19 @@ yargs@16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" +yargs@^17.0.1: + version "17.6.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.2.tgz#2e23f2944e976339a1ee00f18c77fedee8332541" + integrity sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw== + 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@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a"