From ddeaf88ee612b66c6796e83193b0374a2f7bb7da Mon Sep 17 00:00:00 2001 From: Corey Rice Date: Thu, 25 Jan 2024 13:05:46 -0300 Subject: [PATCH 01/13] refactor: export addresses by network --- packages/token-converter-bot/src/config/addresses.ts | 3 +-- .../src/converter-bot/tokenConverterBot.ts | 5 ++--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/token-converter-bot/src/config/addresses.ts b/packages/token-converter-bot/src/config/addresses.ts index e40cb0f4..c7fc6c6b 100644 --- a/packages/token-converter-bot/src/config/addresses.ts +++ b/packages/token-converter-bot/src/config/addresses.ts @@ -6,8 +6,7 @@ import bscmainnetProtocolReserve from "@venusprotocol/protocol-reserve/deploymen import bsctestnetProtocolReserve from "@venusprotocol/protocol-reserve/deployments/bsctestnet_addresses.json"; import bscmainnetCore from "@venusprotocol/venus-protocol/deployments/bscmainnet_addresses.json"; import bsctestnetCore from "@venusprotocol/venus-protocol/deployments/bsctestnet_addresses.json"; - -import { SUPPORTED_CHAINS } from "./chains"; +import { SUPPORTED_CHAINS } from './chains'; const addresses = { bscmainnet: { diff --git a/packages/token-converter-bot/src/converter-bot/tokenConverterBot.ts b/packages/token-converter-bot/src/converter-bot/tokenConverterBot.ts index 49e4241f..bf505a94 100644 --- a/packages/token-converter-bot/src/converter-bot/tokenConverterBot.ts +++ b/packages/token-converter-bot/src/converter-bot/tokenConverterBot.ts @@ -1,7 +1,8 @@ import { Address, parseAbi } from "viem"; import TokenConverterOperator from "../config/abis/TokenConverterOperator"; -import addresses, { HasAddressFor } from "../config/addresses"; +import addresses from "../config/addresses"; +import type { SUPPORTED_CHAINS } from "../config/chains"; import { chains } from "../config/chains"; import { getPublicClient, getWalletClient } from "../config/clients"; import { Path } from "./path"; @@ -16,8 +17,6 @@ type SupportedConverters = const REVERT_IF_NOT_MINED_AFTER = 60n; // seconds -export type SUPPORTED_CHAINS = HasAddressFor<"TokenConverterOperator" | SupportedConverters>; - class Bot { private chainName: SUPPORTED_CHAINS; private operator: { address: Address; abi: typeof TokenConverterOperator }; From ee708930ae485a5384f5655ca4e5d4011a92cd90 Mon Sep 17 00:00:00 2001 From: Corey Rice Date: Thu, 25 Jan 2024 12:56:00 -0300 Subject: [PATCH 02/13] chore: add autogenerating abis for viem --- .../src/converter-bot/tokenConverterBot.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/token-converter-bot/src/converter-bot/tokenConverterBot.ts b/packages/token-converter-bot/src/converter-bot/tokenConverterBot.ts index bf505a94..ad11e4fb 100644 --- a/packages/token-converter-bot/src/converter-bot/tokenConverterBot.ts +++ b/packages/token-converter-bot/src/converter-bot/tokenConverterBot.ts @@ -1,6 +1,6 @@ import { Address, parseAbi } from "viem"; -import TokenConverterOperator from "../config/abis/TokenConverterOperator"; +import { tokenConverterOperatorAbi } from "../config/abis/generated"; import addresses from "../config/addresses"; import type { SUPPORTED_CHAINS } from "../config/chains"; import { chains } from "../config/chains"; @@ -19,7 +19,7 @@ const REVERT_IF_NOT_MINED_AFTER = 60n; // seconds class Bot { private chainName: SUPPORTED_CHAINS; - private operator: { address: Address; abi: typeof TokenConverterOperator }; + private operator: { address: Address; abi: typeof tokenConverterOperatorAbi }; private addresses: typeof addresses; private _walletClient?: ReturnType; private _publicClient?: ReturnType; @@ -29,7 +29,7 @@ class Bot { this.addresses = addresses[chainName]; this.operator = { address: addresses.TokenConverterOperator, - abi: TokenConverterOperator, + abi: tokenConverterOperatorAbi, }; } From 9ffc2d2225409d0c4a75a503d22af5f22aeec282 Mon Sep 17 00:00:00 2001 From: Corey Rice Date: Thu, 25 Jan 2024 13:29:30 -0300 Subject: [PATCH 03/13] feat: add subgraph client --- src/queries/TokenConvertersQuery.graphql | 18 +++++++++++++ subgraph-client/.graphclientrc.yml | 8 ++++++ subgraph-client/index.ts | 34 ++++++++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 src/queries/TokenConvertersQuery.graphql create mode 100644 subgraph-client/.graphclientrc.yml create mode 100644 subgraph-client/index.ts diff --git a/src/queries/TokenConvertersQuery.graphql b/src/queries/TokenConvertersQuery.graphql new file mode 100644 index 00000000..b9ba863b --- /dev/null +++ b/src/queries/TokenConvertersQuery.graphql @@ -0,0 +1,18 @@ +query TokenConverters { + tokenConverters { + id + converterNetwork { + id + } + destinationAddress + baseAsset + configs { + id + tokenAddressIn + tokenAddressOut + incentive + access + } + paused + } +} diff --git a/subgraph-client/.graphclientrc.yml b/subgraph-client/.graphclientrc.yml new file mode 100644 index 00000000..83bbbce6 --- /dev/null +++ b/subgraph-client/.graphclientrc.yml @@ -0,0 +1,8 @@ +sources: + - name: venus-protocol-reserve-chapel + handler: + graphql: + endpoint: https://api.thegraph.com/subgraphs/name/venusprotocol/venus-protocol-reserve-chapel + +documents: + - '../**/*.graphql' diff --git a/subgraph-client/index.ts b/subgraph-client/index.ts new file mode 100644 index 00000000..ecab7bd4 --- /dev/null +++ b/subgraph-client/index.ts @@ -0,0 +1,34 @@ +import { DocumentNode } from 'graphql'; +import { Client as UrqlClient, createClient } from 'urql/core'; + +import { + TokenConvertersDocument, +} from './.graphclient'; + +class SubgraphClient { + urqlClient: UrqlClient; + + constructor(url: string) { + this.urqlClient = createClient({ + url, + requestPolicy: 'network-only', + }); + } + + async query(document: DocumentNode, args: Record) { + const result = await this.urqlClient.query(document, args).toPromise(); + if (result.error) { + console.error(result.error); + } + return result; + } + + async getTokenConverters() { + const result = await this.query(TokenConvertersDocument, {}); + return result; + } +} + +export default new SubgraphClient( + 'https://api.thegraph.com/subgraphs/name/venusprotocol/venus-protocol-reserve-chapel', +); From 9841ef7e37b6428911672f4d50158f81fddccbda Mon Sep 17 00:00:00 2001 From: Corey Rice Date: Thu, 25 Jan 2024 19:44:29 -0300 Subject: [PATCH 04/13] feat: draft convert revenues script --- .../src/config/addresses.ts | 200 +++++++++++++++- .../formatTokenConverterConfigs.ts | 17 ++ .../src/converter-bot/index.ts | 224 ++++++++++++++++++ .../src/converter-bot/path.ts | 12 +- packages/token-converter-bot/wagmi.config.ts | 5 + src/queries/TokenConvertersQuery.graphql | 4 +- subgraph-client/.graphclientrc.yml | 2 +- subgraph-client/index.ts | 12 +- yarn.lock | 131 ++++++++-- 9 files changed, 576 insertions(+), 31 deletions(-) create mode 100644 packages/token-converter-bot/src/converter-bot/formatTokenConverterConfigs.ts create mode 100644 packages/token-converter-bot/src/converter-bot/index.ts diff --git a/packages/token-converter-bot/src/config/addresses.ts b/packages/token-converter-bot/src/config/addresses.ts index c7fc6c6b..bfc99302 100644 --- a/packages/token-converter-bot/src/config/addresses.ts +++ b/packages/token-converter-bot/src/config/addresses.ts @@ -6,7 +6,8 @@ import bscmainnetProtocolReserve from "@venusprotocol/protocol-reserve/deploymen import bsctestnetProtocolReserve from "@venusprotocol/protocol-reserve/deployments/bsctestnet_addresses.json"; import bscmainnetCore from "@venusprotocol/venus-protocol/deployments/bscmainnet_addresses.json"; import bsctestnetCore from "@venusprotocol/venus-protocol/deployments/bsctestnet_addresses.json"; -import { SUPPORTED_CHAINS } from './chains'; + +import { SUPPORTED_CHAINS } from "./chains"; const addresses = { bscmainnet: { @@ -66,4 +67,201 @@ export type SupportedConverters = const network = process.env.FORKED_NETWORK as SUPPORTED_CHAINS; +export const underlyingToVTokens = { + bsctestnet: { + // usdc + "0x16227d60f7a0e586c66b005219dfc887d13c9531": { + core: "0xD5C4C2e2facBEB59D0216D0595d63FcDc6F9A1a7", + isolated: undefined, + }, + // ankrBNB + "0x167f1f9ef531b3576201aa3146b13c57dbeda514": { + core: "0xe507B30C41E9e375BCe05197c1e09fc9ee40c0f6", + isolated: undefined, + }, + // trx old + "0x19e7215abf8b2716ee807c9f4b83af0e7f92653f": { + core: "0x369Fea97f6fB7510755DCA389088d9E2e2819278", + isolated: undefined, + }, + // stkBNB + "0x2999c176ebf66ecda3a646e70ceb5ff4d5fcfb8c": { + core: undefined, + isolated: [["0x596B11acAACF03217287939f88d63b51d3771704", "0x75aa42c832a8911B77219DbeBABBB40040d16987"]], + }, + // usdd + "0x2e2466e22fcbe0732be385ee2fbb9c59a1098382": { + core: undefined, + isolated: [ + ["0x11537D023f489E4EF0C7157cc729C7B69CbE0c97", "0xD804F74fe21290d213c46610ab171f7c2EeEBDE7"], + ["0x1F4f0989C51f12DAcacD4025018176711f3Bf289", "0xdeDf3B2bcF25d0023115fd71a0F8221C91C92B1a"], + ["0x10b57706AD2345e590c2eA4DC02faef0d9f5b08B", "0x899dDf81DfbbF5889a16D075c352F2b959Dd24A4"], + ["0x23a73971A6B9f6580c048B9CB188869B2A2aA2aD ", "0xa109DE0abaeefC521Ec29D89eA42E64F37A6882E"], + ["0x596B11acAACF03217287939f88d63b51d3771704", "0xD5b20708d8f0FcA52cb609938D0594C4e32E5DaD"], + ], + }, + // win + "0x2e6af3f3f059f43d764060968658c9f3c8f9479d": { + core: undefined, + isolated: [["0x11537D023f489E4EF0C7157cc729C7B69CbE0c97", "0xEe543D5de2Dbb5b07675Fc72831A2f1812428393"]], + }, + // XRP + "0x3022a32fdadb4f02281e8fab33e0a6811237aab0": { + core: "0x488aB2826a154da01CC4CC16A8C83d4720D3cA2C", + isolated: undefined, + }, + // bnbx + "0x327d6e6fac0228070884e913263cff9efed4a2c8": { + core: undefined, + isolated: [["0x596B11acAACF03217287939f88d63b51d3771704 ", "0x644A149853E5507AdF3e682218b8AC86cdD62951"]], + }, + // aave + "0x4b7268fc7c727b88c5fc127d41b491bfae63e144": { + core: "0x714db6c38A17883964B68a07d56cE331501d9eb6", + isolated: undefined, + }, + // planet + "0x52b4e1a2ba407813f829b4b3943a1e57768669a9": { + core: undefined, + isolated: [["0x23a73971A6B9f6580c048B9CB188869B2A2aA2aD ", "0xe237aA131E7B004aC88CB808Fa56AF3dc4C408f1"]], + }, + // ageur + "0x63061de4a25f24279aaab80400040684f92ee319": { + core: undefined, + isolated: [["0x10b57706AD2345e590c2eA4DC02faef0d9f5b08B ", "0x4E1D35166776825402d50AfE4286c500027211D1"]], + }, + // doge + "0x67d262ce2b8b846d9b94060bc04dc40a83f0e25b": { + core: "0xF912d3001CAf6DC4ADD366A62Cc9115B4303c9A9", + isolated: undefined, + }, + // alpaca + "0x6923189d91fdf62dbae623a55273f1d20306d9f2": { + core: undefined, + isolated: [["0x23a73971A6B9f6580c048B9CB188869B2A2aA2aD", "0xb7caC5Ef82cb7f9197ee184779bdc52c5490C02a"]], + }, + // sxp + "0x75107940cf1121232c0559c747a986defbc69da9": { + core: "0x74469281310195A04840Daf6EdF576F559a3dE80", + isolated: undefined, + }, + // trx + "0x7d21841dc10ba1c5797951efc62fadbbdd06704b": { + core: "0x6AF3Fdb3282c5bb6926269Db10837fa8Aec67C04", + isolated: [["0x11537D023f489E4EF0C7157cc729C7B69CbE0c97", "0x410286c43a525E1DCC7468a9B091C111C8324cd1"]], + }, + // bsw + "0x7fcc76fc1f573d8eb445c236cc282246bc562bce": { + core: undefined, + isolated: [["0x23a73971A6B9f6580c048B9CB188869B2A2aA2aD", "0x5e68913fbbfb91af30366ab1B21324410b49a308"]], + }, + // busd + "0x8301f2213c0eed49a7e28ae4c3e91722919b8b47": { + core: "0x08e0A5575De71037aE36AbfAfb516595fE68e5e4", + isolated: undefined, + }, + // uni + "0x8d2f061c75780d8d91c10a7230b907411acbc8fc": { + core: "0x171B468b52d7027F12cEF90cd065d6776a25E24e", + isolated: undefined, + }, + // ltc + "0x969f147b6b8d81f86175de33206a4fd43df17913": { + core: "0xAfc13BC065ABeE838540823431055D2ea52eBA52", + isolated: undefined, + }, + // eth + "0x98f7a83361f7ac8765ccebab1425da6b341958a7": { + core: "0x162D005F0Fff510E54958Cfc5CF32A3180A84aab", + isolated: undefined, + }, + // btcb + "0xa808e341e8e723dc6ba0bb5204bafc2330d7b8e4": { + core: "0xb6e9322C49FD75a367Fcb17B0Fcd62C5070EbCBe", + isolated: undefined, + }, + // wbnb + "0xae13d989dac2f0debff460ac112a837c89baa7cd": { + core: undefined, + isolated: [["0x596B11acAACF03217287939f88d63b51d3771704", "0x231dED0Dfc99634e52EE1a1329586bc970d773b3"]], + }, + // floki + "0xb22cf15fbc089d470f8e532aead2bab76be87c88": { + core: undefined, + isolated: [["0x1F4f0989C51f12DAcacD4025018176711f3Bf289", "0xef470AbC365F88e4582D8027172a392C473A5B53"]], + }, + // tusd + "0xb32171ecd878607ffc4f8fc0bcce6852bb3149e0": { + core: "0xEFAACF73CE2D38ED40991f29E72B12C74bd4cf23", + isolated: undefined, + }, + // twt + "0xb99c6b26fdf3678c6e2aff8466e3625a0e7182f8": { + core: undefined, + isolated: [["0x23a73971A6B9f6580c048B9CB188869B2A2aA2aD", "0x4C94e67d239aD585275Fdd3246Ab82c8a2668564"]], + }, + // ada + "0xcd34bc54106bd45a04ed99ebcc2a6a3e70d7210f": { + core: "0xcd34bc54106bd45a04ed99ebcc2a6a3e70d7210f", + isolated: undefined, + }, + // fdusd + "0xcf27439fa231af9931ee40c4f27bb77b83826f3c": { + core: "0xF06e662a00796c122AaAE935EC4F0Be3F74f5636", + isolated: undefined, + }, + // matic + "0xcfeb0103d4befa041ea4c2dacce7b3e83e1ae7e3": { + core: "0xcfeb0103d4befa041ea4c2dacce7b3e83e1ae7e3", + isolated: undefined, + }, + // snBNB + "0xd2af6a916bc77764dc63742bc30f71af4cf423f4": { + core: undefined, + isolated: [["0x596B11acAACF03217287939f88d63b51d3771704", "0xeffE7874C345aE877c1D893cd5160DDD359b24dA"]], + }, + // raca + "0xd60cc803d888a3e743f21d0bde4bf2cafdea1f26": { + core: undefined, + isolated: [["0x1F4f0989C51f12DAcacD4025018176711f3Bf289", "0x1958035231E125830bA5d17D168cEa07Bb42184a"]], + }, + // ankr + "0xe4a90eb942cf2da7238e8f6cc9ef510c49fc8b4b": { + core: undefined, + isolated: [["0x23a73971A6B9f6580c048B9CB188869B2A2aA2aD", "0xb677e080148368EeeE70fA3865d07E92c6500174"]], + }, + // hay + "0xe73774dfcd551bf75650772dc2cc56a2b6323453": { + core: undefined, + isolated: [["0x10b57706AD2345e590c2eA4DC02faef0d9f5b08B", "0x170d3b2da05cc2124334240fB34ad1359e34C562"]], + }, + // cake + "0xe8bd7ccc165faeb9b81569b05424771b9a20cbef": { + core: "0xeDaC03D29ff74b5fDc0CC936F6288312e1459BC6", + isolated: undefined, + }, + // btt + "0xe98344a7c691b200ef47c9b8829110087d832c64": { + core: undefined, + isolated: [["0x11537D023f489E4EF0C7157cc729C7B69CbE0c97", "0x47793540757c6E6D84155B33cd8D9535CFdb9334"]], + }, + // wbeth + "0xf9f98365566f4d55234f24b99caa1afbe6428d44": { + core: "0x35566ED3AF9E537Be487C98b1811cDf95ad0C32b", + isolated: undefined, + }, + // tusdold + "0xfec3a63401eb9c1476200d7c32c4009be0154169": { + core: "0xfec3a63401eb9c1476200d7c32c4009be0154169", + isolated: undefined, + }, + // xvs + "0xb9e0e753630434d7863528cc73cb7ac638a7c8ff": { + core: "0x6d6F697e34145Bb95c54E77482d97cc261Dc237E", + isolated: undefined, + }, + }, + bscmainnet: {}, +}[network]; + export default addresses[network]; diff --git a/packages/token-converter-bot/src/converter-bot/formatTokenConverterConfigs.ts b/packages/token-converter-bot/src/converter-bot/formatTokenConverterConfigs.ts new file mode 100644 index 00000000..08637591 --- /dev/null +++ b/packages/token-converter-bot/src/converter-bot/formatTokenConverterConfigs.ts @@ -0,0 +1,17 @@ +import { Address } from "viem"; + +import { TokenConvertersQuery } from "../../subgraph-client/.graphclient"; + +const formatTokenConverterConfigs = (data: TokenConvertersQuery["tokenConverters"]) => + data.reduce((acc, curr) => { + curr.configs.forEach(c => { + if (c.access === "ALL" || c.access === "ONLY_FOR_USERS") { + acc[curr.baseAsset] ||= {}; + acc[curr.baseAsset][c.tokenAddressOut] ||= []; + acc[curr.baseAsset][c.tokenAddressOut].push(curr.id as Address); + } + }); + return acc; + }, {} as Record>); + +export default formatTokenConverterConfigs; diff --git a/packages/token-converter-bot/src/converter-bot/index.ts b/packages/token-converter-bot/src/converter-bot/index.ts new file mode 100644 index 00000000..b1123f3c --- /dev/null +++ b/packages/token-converter-bot/src/converter-bot/index.ts @@ -0,0 +1,224 @@ +import * as dotenv from "dotenv"; +import { Abi, Address, parseUnits } from "viem"; + +import subgraphClient from "../../subgraph-client"; +import { + coreComptrollerAbi, + coreVTokenAbi, + protocolShareReserveAbi, + tokenConverterAbi, + vBnbAbi, + vBnbAdminAbi, +} from "../config/abis/generated"; +import addresses, { underlyingToVTokens } from "../config/addresses"; +import { SUPPORTED_CHAINS } from "../config/chains"; +import { getPublicClient, getWalletClient } from "../config/clients"; +import formatTokenConverterConfigs from "./formatTokenConverterConfigs"; +import { parsePath } from "./path"; +import TokenConverterBot from "./tokenConverterBot"; + +dotenv.config(); + +const network = process.env.FORKED_NETWORK as SUPPORTED_CHAINS; + +const client = getPublicClient(network); +const wallet = getWalletClient(network); + +const getCoreMarkets = async () => { + const markets = await client.readContract({ + address: addresses.Unitroller as Address, + abi: coreComptrollerAbi, + functionName: "getAllMarkets", + }); + return markets; +}; + +const formatResults = ( + results: ( + | { + error: Error; + result?: undefined; + status: "failure"; + } + | { + error?: undefined; + result: unknown; + status: "success"; + } + )[], + assetIn: Address, + assetOut: Address, + tokenConverters: Address[], +) => { + const chunkSize = 2; + for (let i = 0; i < results.length; i += chunkSize) { + const index = (i + chunkSize) / chunkSize - 1; + const tokenConverter = tokenConverters[index]; + + const curr = results.slice(i, i + chunkSize); + + return { + tokenConverter, + assetIn: { address: assetIn, balance: curr[0].result as bigint }, + assetOut: { address: assetOut, balance: curr[1].result as bigint }, + }; + } +}; + +const getBalances = async (assetIn: Address, assetOut: Address, tokenConverters: Address[]) => { + const corePoolMarkets = await getCoreMarkets(); + const results = await client.multicall({ + contracts: [ + { + address: addresses.ProtocolShareReserve as Address, + // @ts-ignore + abi: protocolShareReserveAbi, + // @ts-ignore + functionName: "releaseFunds", + // @ts-ignore + args: [addresses.Unitroller, corePoolMarkets], + }, + ...tokenConverters.reduce((acc, curr) => { + acc = acc.concat( + { + address: assetIn as Address, + abi: coreVTokenAbi, + functionName: "balanceOf", + args: [curr], + }, + { + address: assetOut as Address, + abi: coreVTokenAbi, + functionName: "balanceOf", + args: [curr], + }, + ); + return acc; + }, [] as { address: Address; abi: Abi; functionName: string; args?: readonly unknown[] | undefined }[]), + ], + }); + // Release funds will be empty + results.shift(); + const formattedResults = formatResults(results, assetIn, assetOut, tokenConverters); + return formattedResults; +}; + +// @todo +const checkForTrade = async (values: any[]) => { + const trades = values.filter(v => { + return v.value.assetOut.balance > 0; + }); + return trades; +}; + +// @todo +const executeTrade = async (t: any) => { + // @todo + const bot = new TokenConverterBot("bsctestnet"); + // @ts-ignore + const vTokens = underlyingToVTokens[t.assetOut.address]; + // @ts-ignore + if (vTokens.core) { + await wallet.writeContract({ + address: addresses.ProtocolShareReserve as Address, + // @ts-ignore + abi: protocolShareReserveAbi, + // @ts-ignore + functionName: "releaseFunds", + // @ts-ignore + args: [addresses.Unitroller, [vTokens.core]], + }); + } + if (vTokens.isolated) { + await wallet.writeContract({ + address: addresses.ProtocolShareReserve as Address, + // @ts-ignore + abi: protocolShareReserveAbi, + // @ts-ignore + functionName: "releaseFunds", + // @ts-ignore + args: [vTokens.isolated[0], [vTokens.isolated[1]]], + }); + } + + const { result: amountIn } = await client.simulateContract({ + address: t.tokenConverter as Address, + abi: tokenConverterAbi, + functionName: "getUpdatedAmountIn", + args: [t.assetOut.balance, t.assetIn.address, t.assetOut.address], + }); + + await bot.sanityCheck(); + + await bot.arbitrage( + t.tokenConverter, + parsePath([t.assetIn.address as Address, 500n, t.assetOut.address as Address]), + amountIn[1], + parseUnits("-0.1", 18), // @todo + ); +}; + +const main = async () => { + const { + data: { tokenConverters }, + } = await subgraphClient.getTokenConverters(); + const corePoolMarkets = await getCoreMarkets(); + await Promise.allSettled( + corePoolMarkets.map(async market => { + await wallet.writeContract({ + address: market, + abi: coreVTokenAbi, + functionName: "accrueInterest", + }); + }), + ); + + const totalReserves = await client.readContract({ + address: addresses.vBNB as Address, + abi: vBnbAbi, + functionName: "totalReserves", + }); + + const cash = await client.readContract({ + address: addresses.vBNB as Address, + abi: vBnbAbi, + functionName: "getCash", + }); + + await wallet.writeContract({ + address: addresses.VBNBAdmin as Address, + abi: vBnbAdminAbi, + functionName: "reduceReserves", + args: [totalReserves < cash ? totalReserves : cash], + }); + + const tokenConverterConfigs = formatTokenConverterConfigs(tokenConverters); + const results = await Promise.allSettled( + Object.keys(tokenConverterConfigs).map(async tokenIn => { + const results = await Promise.allSettled( + Object.keys(tokenConverterConfigs[tokenIn as Address]).map(async tokenOut => { + const result = await getBalances( + tokenIn as Address, + tokenOut as Address, + tokenConverterConfigs[tokenIn as Address][tokenOut as Address], + ); + return result; + }), + ); + return results; + }), + ); + + for (const r of results) { + // @ts-ignore + const trades = await checkForTrade(r?.value); + for (const t of trades) { + await executeTrade(t.value); + } + } +}; + +main().catch(error => { + console.error(error); + process.exit(1); +}); diff --git a/packages/token-converter-bot/src/converter-bot/path.ts b/packages/token-converter-bot/src/converter-bot/path.ts index 693cfd7a..05a6413e 100644 --- a/packages/token-converter-bot/src/converter-bot/path.ts +++ b/packages/token-converter-bot/src/converter-bot/path.ts @@ -1,14 +1,14 @@ import { Address, Hex, concat, numberToHex } from "viem"; -const ensureAddress = (addressOrNumber: Address | number): Address => { - if (typeof addressOrNumber === "number") { +const ensureAddress = (addressOrNumber: Address | bigint): Address => { + if (typeof addressOrNumber === "bigint") { throw new Error(`Invalid address: ${addressOrNumber}`); } return addressOrNumber; }; -const ensureNumber = (addressOrNumber: Address | number): number => { - if (typeof addressOrNumber !== "number") { +const ensureNumber = (addressOrNumber: Address | bigint): bigint => { + if (typeof addressOrNumber !== "bigint") { throw new Error(`Invalid number: ${addressOrNumber}`); } return addressOrNumber; @@ -17,11 +17,11 @@ const ensureNumber = (addressOrNumber: Address | number): number => { export interface Path { readonly start: Address; readonly end: Address; - readonly data: ReadonlyArray
; + readonly data: ReadonlyArray
; readonly hex: Hex; } -export const parsePath = (data: Array
): Path => { +export const parsePath = (data: Array
): Path => { const start = ensureAddress(data[0]); const end = ensureAddress(data[data.length - 1]); let hex: Hex = "0x"; diff --git a/packages/token-converter-bot/wagmi.config.ts b/packages/token-converter-bot/wagmi.config.ts index d1113ae8..010f7f94 100644 --- a/packages/token-converter-bot/wagmi.config.ts +++ b/packages/token-converter-bot/wagmi.config.ts @@ -1,6 +1,7 @@ import ilComptrollerArtifact from "@venusprotocol/isolated-pools/artifacts/contracts/Comptroller.sol/Comptroller.json" assert { type: "json" }; import poolLensArtifact from "@venusprotocol/isolated-pools/artifacts/contracts/Lens/PoolLens.sol/PoolLens.json" assert { type: "json" }; import protocolShareReserveArtifact from "@venusprotocol/protocol-reserve/artifacts/contracts/ProtocolReserve/ProtocolShareReserve.sol/ProtocolShareReserve.json" assert { type: "json" }; +import tokenConverterArtifact from "@venusprotocol/protocol-reserve/artifacts/contracts/TokenConverter/AbstractTokenConverter.sol/AbstractTokenConverter.json" assert { type: "json" }; import vBnbAdminArtifact from "@venusprotocol/venus-protocol/artifacts/contracts/Admin/VBNBAdmin.sol/VBNBAdmin.json" assert { type: "json" }; import vBNB from "@venusprotocol/venus-protocol/artifacts/contracts/Admin/VBNBAdminStorage.sol/VTokenInterface.json" assert { type: "json" }; import diamondComptrollerArtifact from "@venusprotocol/venus-protocol/artifacts/contracts/Comptroller/Diamond/DiamondConsolidated.sol/DiamondConsolidated.json" assert { type: "json" }; @@ -38,6 +39,10 @@ const getExternalContracts = async (): Promise<{ name: string; abi: Abi }[]> => abi: vBNB.abi as Abi, name: "vBNB", }, + { + abi: tokenConverterArtifact.abi as Abi, + name: "TokenConverter", + }, ]; export default defineConfig(async () => { diff --git a/src/queries/TokenConvertersQuery.graphql b/src/queries/TokenConvertersQuery.graphql index b9ba863b..dbf929a3 100644 --- a/src/queries/TokenConvertersQuery.graphql +++ b/src/queries/TokenConvertersQuery.graphql @@ -1,5 +1,5 @@ query TokenConverters { - tokenConverters { + tokenConverters(where: { paused: false} ) { id converterNetwork { id @@ -13,6 +13,6 @@ query TokenConverters { incentive access } - paused + paused(filter: Boolean): true } } diff --git a/subgraph-client/.graphclientrc.yml b/subgraph-client/.graphclientrc.yml index 83bbbce6..99d495e1 100644 --- a/subgraph-client/.graphclientrc.yml +++ b/subgraph-client/.graphclientrc.yml @@ -5,4 +5,4 @@ sources: endpoint: https://api.thegraph.com/subgraphs/name/venusprotocol/venus-protocol-reserve-chapel documents: - - '../**/*.graphql' + - "../**/*.graphql" diff --git a/subgraph-client/index.ts b/subgraph-client/index.ts index ecab7bd4..cb2c4de4 100644 --- a/subgraph-client/index.ts +++ b/subgraph-client/index.ts @@ -1,9 +1,7 @@ -import { DocumentNode } from 'graphql'; -import { Client as UrqlClient, createClient } from 'urql/core'; +import { DocumentNode } from "graphql"; +import { Client as UrqlClient, createClient } from "urql/core"; -import { - TokenConvertersDocument, -} from './.graphclient'; +import { TokenConvertersDocument } from "./.graphclient"; class SubgraphClient { urqlClient: UrqlClient; @@ -11,7 +9,7 @@ class SubgraphClient { constructor(url: string) { this.urqlClient = createClient({ url, - requestPolicy: 'network-only', + requestPolicy: "network-only", }); } @@ -30,5 +28,5 @@ class SubgraphClient { } export default new SubgraphClient( - 'https://api.thegraph.com/subgraphs/name/venusprotocol/venus-protocol-reserve-chapel', + "https://api.thegraph.com/subgraphs/name/venusprotocol/venus-protocol-reserve-chapel", ); diff --git a/yarn.lock b/yarn.lock index 2b6ec6be..efcaf3ee 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2914,6 +2914,13 @@ __metadata: languageName: node linkType: hard +"@telegraf/types@npm:^6.9.1": + version: 6.9.1 + resolution: "@telegraf/types@npm:6.9.1" + checksum: bafdded5413bfae9bb1369c311c063b7e210b3f950f7df2dc9acf10510ca5e1f928045264684afd31fe96d0645dc2a3d9b979cdb9c29d8a696a6738dd60fa4f9 + languageName: node + linkType: hard + "@trivago/prettier-plugin-sort-imports@npm:3.4.0": version: 3.4.0 resolution: "@trivago/prettier-plugin-sort-imports@npm:3.4.0" @@ -3488,6 +3495,14 @@ __metadata: languageName: node linkType: hard +"@venusprotocol/tg-error-reporter@workspace:packages/tg-error-reporter": + version: 0.0.0-use.local + resolution: "@venusprotocol/tg-error-reporter@workspace:packages/tg-error-reporter" + dependencies: + telegraf: ^4.15.3 + languageName: unknown + linkType: soft + "@venusprotocol/token-bridge@npm:1.0.0": version: 1.0.0 resolution: "@venusprotocol/token-bridge@npm:1.0.0" @@ -3730,6 +3745,15 @@ __metadata: languageName: node linkType: hard +"abort-controller@npm:^3.0.0": + version: 3.0.0 + resolution: "abort-controller@npm:3.0.0" + dependencies: + event-target-shim: ^5.0.0 + checksum: 170bdba9b47b7e65906a28c8ce4f38a7a369d78e2271706f020849c1bfe0ee2067d4261df8bbb66eb84f79208fd5b710df759d64191db58cfba7ce8ef9c54b75 + languageName: node + linkType: hard + "abstract-level@npm:^1.0.0, abstract-level@npm:^1.0.2, abstract-level@npm:^1.0.3, abstract-level@npm:^1.0.4": version: 1.0.4 resolution: "abstract-level@npm:1.0.4" @@ -4487,16 +4511,16 @@ __metadata: linkType: hard "browserslist@npm:^4.22.2": - version: 4.22.3 - resolution: "browserslist@npm:4.22.3" + version: 4.22.2 + resolution: "browserslist@npm:4.22.2" dependencies: - caniuse-lite: ^1.0.30001580 - electron-to-chromium: ^1.4.648 + caniuse-lite: ^1.0.30001565 + electron-to-chromium: ^1.4.601 node-releases: ^2.0.14 update-browserslist-db: ^1.0.13 bin: browserslist: cli.js - checksum: e62b17348e92143fe58181b02a6a97c4a98bd812d1dc9274673a54f73eec53dbed1c855ebf73e318ee00ee039f23c9a6d0e7629d24f3baef08c7a5b469742d57 + checksum: 33ddfcd9145220099a7a1ac533cecfe5b7548ffeb29b313e1b57be6459000a1f8fa67e781cf4abee97268ac594d44134fcc4a6b2b4750ceddc9796e3a22076d9 languageName: node linkType: hard @@ -4520,6 +4544,30 @@ __metadata: languageName: node linkType: hard +"buffer-alloc-unsafe@npm:^1.1.0": + version: 1.1.0 + resolution: "buffer-alloc-unsafe@npm:1.1.0" + checksum: c5e18bf51f67754ec843c9af3d4c005051aac5008a3992938dda1344e5cfec77c4b02b4ca303644d1e9a6e281765155ce6356d85c6f5ccc5cd21afc868def396 + languageName: node + linkType: hard + +"buffer-alloc@npm:^1.2.0": + version: 1.2.0 + resolution: "buffer-alloc@npm:1.2.0" + dependencies: + buffer-alloc-unsafe: ^1.1.0 + buffer-fill: ^1.0.0 + checksum: 560cd27f3cbe73c614867da373407d4506309c62fe18de45a1ce191f3785ec6ca2488d802ff82065798542422980ca25f903db078c57822218182c37c3576df5 + languageName: node + linkType: hard + +"buffer-fill@npm:^1.0.0": + version: 1.0.0 + resolution: "buffer-fill@npm:1.0.0" + checksum: c29b4723ddeab01e74b5d3b982a0c6828f2ded49cef049ddca3dac661c874ecdbcecb5dd8380cf0f4adbeb8cff90a7de724126750a1f1e5ebd4eb6c59a1315b1 + languageName: node + linkType: hard + "buffer-from@npm:^1.0.0": version: 1.1.2 resolution: "buffer-from@npm:1.1.2" @@ -4691,10 +4739,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30001580": - version: 1.0.30001582 - resolution: "caniuse-lite@npm:1.0.30001582" - checksum: 2fc420cb6e6080a9808781ff81a2f0d37d63897c8c981d477001be18e55c8ec33422cf966e49efdca61d4a5335d16a4d6a09d5bd6da22a8396d0dcd350b9b9da +"caniuse-lite@npm:^1.0.30001565": + version: 1.0.30001580 + resolution: "caniuse-lite@npm:1.0.30001580" + checksum: 8d287d1e2a64348365f55562457b52afc8c5e0e8ddf040e18e53395ca165241a697205611dc209dace5c7f7d1d3ee8d566672cce6f9668d658d7930b7a200875 languageName: node linkType: hard @@ -5715,10 +5763,10 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.4.648": - version: 1.4.653 - resolution: "electron-to-chromium@npm:1.4.653" - checksum: 5e1fb48e749811f4384cd7a9940585a124f46d2a9f5bdfd2d7e79685d55db448433da303bd0fb6c3665ed052299843b5661319e10119821defbc3be8ff8eb060 +"electron-to-chromium@npm:^1.4.601": + version: 1.4.645 + resolution: "electron-to-chromium@npm:1.4.645" + checksum: ac7d23b8123f09e2343016216b1a8f297ccfb4ae9dccefe3716023344cda8a81656916d40a87039fa3d448cac31c2c4147c6b913b22178a3a00d0221a8019513 languageName: node linkType: hard @@ -6501,6 +6549,13 @@ __metadata: languageName: node linkType: hard +"event-target-shim@npm:^5.0.0": + version: 5.0.1 + resolution: "event-target-shim@npm:5.0.1" + checksum: 1ffe3bb22a6d51bdeb6bf6f7cf97d2ff4a74b017ad12284cc9e6a279e727dc30a5de6bb613e5596ff4dc3e517841339ad09a7eec44266eccb1aa201a30448166 + languageName: node + linkType: hard + "evp_bytestokey@npm:^1.0.3": version: 1.0.3 resolution: "evp_bytestokey@npm:1.0.3" @@ -9635,6 +9690,13 @@ __metadata: languageName: node linkType: hard +"mri@npm:^1.2.0": + version: 1.2.0 + resolution: "mri@npm:1.2.0" + checksum: 83f515abbcff60150873e424894a2f65d68037e5a7fcde8a9e2b285ee9c13ac581b63cfc1e6826c4732de3aeb84902f7c1e16b7aff46cd3f897a0f757a894e85 + languageName: node + linkType: hard + "ms@npm:2.1.2": version: 2.1.2 resolution: "ms@npm:2.1.2" @@ -9760,7 +9822,7 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.1": +"node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.8": version: 2.7.0 resolution: "node-fetch@npm:2.7.0" dependencies: @@ -10401,6 +10463,13 @@ __metadata: languageName: node linkType: hard +"p-timeout@npm:^4.1.0": + version: 4.1.0 + resolution: "p-timeout@npm:4.1.0" + checksum: 321fec524c23a754e3f1487f2b0a5516fd32aba960d5610490eac56f8a0114b549a93f9919ffc05aa68956dc52e8330e0519f3ddf951d208d19c845f9cd778de + languageName: node + linkType: hard + "p-try@npm:^1.0.0": version: 1.0.0 resolution: "p-try@npm:1.0.0" @@ -11420,6 +11489,15 @@ __metadata: languageName: node linkType: hard +"safe-compare@npm:^1.1.4": + version: 1.1.4 + resolution: "safe-compare@npm:1.1.4" + dependencies: + buffer-alloc: ^1.2.0 + checksum: 8c0a08f7a2bec1b33400e17bb7cce40ebe0e53902dbba13735e0131fa432140650de2ab4750637623e02e28edab10fa439825b57a7e8b705cae1deb80a58e516 + languageName: node + linkType: hard + "safe-regex-test@npm:^1.0.0": version: 1.0.2 resolution: "safe-regex-test@npm:1.0.2" @@ -11438,6 +11516,13 @@ __metadata: languageName: node linkType: hard +"sandwich-stream@npm:^2.0.2": + version: 2.0.2 + resolution: "sandwich-stream@npm:2.0.2" + checksum: 666d3276e5390786a4ad69f04da472fb69940d1a279a22aebd49ae78ca8f12855503e69d71f77d4b415144a284ffa14efa811a097ad7df501a68c01438b91282 + languageName: node + linkType: hard + "sc-istanbul@npm:^0.4.5": version: 0.4.6 resolution: "sc-istanbul@npm:0.4.6" @@ -12367,6 +12452,24 @@ __metadata: languageName: node linkType: hard +"telegraf@npm:^4.15.3": + version: 4.15.3 + resolution: "telegraf@npm:4.15.3" + dependencies: + "@telegraf/types": ^6.9.1 + abort-controller: ^3.0.0 + debug: ^4.3.4 + mri: ^1.2.0 + node-fetch: ^2.6.8 + p-timeout: ^4.1.0 + safe-compare: ^1.1.4 + sandwich-stream: ^2.0.2 + bin: + telegraf: lib/cli.mjs + checksum: 350fd2928dd813bbeb8d338480556218f4c2fdc2e1f55e73e739f2e7589a76cc44f3a3279f3e56e6e74be0da75c665077a6d46b17c4885e7d19ca5a37463329d + languageName: node + linkType: hard + "temp-dir@npm:^3.0.0": version: 3.0.0 resolution: "temp-dir@npm:3.0.0" From 9fac7e2e686231edd5f5b56f660bce6322d9f9c1 Mon Sep 17 00:00:00 2001 From: Corey Rice Date: Mon, 29 Jan 2024 09:26:44 -0300 Subject: [PATCH 05/13] fix: only reduce reserves when cash is greter than 0 --- .../src/converter-bot/index.ts | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/packages/token-converter-bot/src/converter-bot/index.ts b/packages/token-converter-bot/src/converter-bot/index.ts index b1123f3c..4a82b843 100644 --- a/packages/token-converter-bot/src/converter-bot/index.ts +++ b/packages/token-converter-bot/src/converter-bot/index.ts @@ -185,12 +185,16 @@ const main = async () => { functionName: "getCash", }); - await wallet.writeContract({ - address: addresses.VBNBAdmin as Address, - abi: vBnbAdminAbi, - functionName: "reduceReserves", - args: [totalReserves < cash ? totalReserves : cash], - }); + if (cash > 0) { + await wallet.writeContract({ + address: addresses.VBNBAdmin as Address, + abi: vBnbAdminAbi, + functionName: "reduceReserves", + args: [totalReserves < cash ? totalReserves : cash], + }); + } else { + console.error("Unable to reduce reservers vBnb Admin is out of cash"); + } const tokenConverterConfigs = formatTokenConverterConfigs(tokenConverters); const results = await Promise.allSettled( From 643abe9c32c01455350516dd2f4bf15f8c6a007c Mon Sep 17 00:00:00 2001 From: Corey Rice Date: Wed, 31 Jan 2024 17:23:04 -0300 Subject: [PATCH 06/13] feat: integrate pancake swap sdk --- .gitignore | 3 + .prettierrc | 2 +- .../src/config/addresses.ts | 198 +++++---- .../src/converter-bot/index.ts | 56 ++- .../src/converter-bot/tokenConverterBot.ts | 186 +++++++-- packages/token-converter-bot/wagmi.config.ts | 5 - src/module.d.ts | 10 + yarn.lock | 382 +++++++++++++++++- 8 files changed, 685 insertions(+), 157 deletions(-) create mode 100644 src/module.d.ts diff --git a/.gitignore b/.gitignore index da0f2089..599b4757 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,6 @@ artifacts # Generated files packages/token-converter-bot/src/config/abis/generated.ts packages/token-converter-bot/subgraph-client/.graphclient + +# Build +dist diff --git a/.prettierrc b/.prettierrc index e794b58c..2ea5bfb3 100644 --- a/.prettierrc +++ b/.prettierrc @@ -2,7 +2,7 @@ "arrowParens": avoid, "bracketSpacing": true, "endOfLine": "auto", - "importOrder": ["module-alias/register", "", "^[./]"], + "importOrder": ["dotenv/config", "module-alias/register", "", "^[./]"], "importOrderParserPlugins": ["typescript", "importAssertions"], "importOrderSeparation": true, "importOrderSortSpecifiers": true, diff --git a/packages/token-converter-bot/src/config/addresses.ts b/packages/token-converter-bot/src/config/addresses.ts index bfc99302..e0d3ea2a 100644 --- a/packages/token-converter-bot/src/config/addresses.ts +++ b/packages/token-converter-bot/src/config/addresses.ts @@ -6,6 +6,7 @@ import bscmainnetProtocolReserve from "@venusprotocol/protocol-reserve/deploymen import bsctestnetProtocolReserve from "@venusprotocol/protocol-reserve/deployments/bsctestnet_addresses.json"; import bscmainnetCore from "@venusprotocol/venus-protocol/deployments/bscmainnet_addresses.json"; import bsctestnetCore from "@venusprotocol/venus-protocol/deployments/bsctestnet_addresses.json"; +import { Address } from "viem"; import { SUPPORTED_CHAINS } from "./chains"; @@ -67,197 +68,232 @@ export type SupportedConverters = const network = process.env.FORKED_NETWORK as SUPPORTED_CHAINS; -export const underlyingToVTokens = { +export const underlyingToVTokens: Record< + Address, + { core: Address | undefined; isolated: Array<[Address, Address]> | undefined } +> = { bsctestnet: { // usdc - "0x16227d60f7a0e586c66b005219dfc887d13c9531": { - core: "0xD5C4C2e2facBEB59D0216D0595d63FcDc6F9A1a7", + ["0x16227d60f7a0e586c66b005219dfc887d13c9531" as const]: { + core: "0xD5C4C2e2facBEB59D0216D0595d63FcDc6F9A1a7" as const, isolated: undefined, }, // ankrBNB - "0x167f1f9ef531b3576201aa3146b13c57dbeda514": { - core: "0xe507B30C41E9e375BCe05197c1e09fc9ee40c0f6", + ["0x167f1f9ef531b3576201aa3146b13c57dbeda514" as const]: { + core: "0xe507B30C41E9e375BCe05197c1e09fc9ee40c0f6" as const, isolated: undefined, }, // trx old - "0x19e7215abf8b2716ee807c9f4b83af0e7f92653f": { - core: "0x369Fea97f6fB7510755DCA389088d9E2e2819278", + ["0x19e7215abf8b2716ee807c9f4b83af0e7f92653f" as const]: { + core: "0x369Fea97f6fB7510755DCA389088d9E2e2819278" as const, isolated: undefined, }, // stkBNB - "0x2999c176ebf66ecda3a646e70ceb5ff4d5fcfb8c": { + ["0x2999c176ebf66ecda3a646e70ceb5ff4d5fcfb8c" as const]: { core: undefined, - isolated: [["0x596B11acAACF03217287939f88d63b51d3771704", "0x75aa42c832a8911B77219DbeBABBB40040d16987"]], + isolated: [ + ["0x596B11acAACF03217287939f88d63b51d3771704" as const, "0x75aa42c832a8911B77219DbeBABBB40040d16987" as const], + ] as [Address, Address][], }, // usdd - "0x2e2466e22fcbe0732be385ee2fbb9c59a1098382": { + ["0x2e2466e22fcbe0732be385ee2fbb9c59a1098382" as const]: { core: undefined, isolated: [ - ["0x11537D023f489E4EF0C7157cc729C7B69CbE0c97", "0xD804F74fe21290d213c46610ab171f7c2EeEBDE7"], - ["0x1F4f0989C51f12DAcacD4025018176711f3Bf289", "0xdeDf3B2bcF25d0023115fd71a0F8221C91C92B1a"], - ["0x10b57706AD2345e590c2eA4DC02faef0d9f5b08B", "0x899dDf81DfbbF5889a16D075c352F2b959Dd24A4"], - ["0x23a73971A6B9f6580c048B9CB188869B2A2aA2aD ", "0xa109DE0abaeefC521Ec29D89eA42E64F37A6882E"], - ["0x596B11acAACF03217287939f88d63b51d3771704", "0xD5b20708d8f0FcA52cb609938D0594C4e32E5DaD"], - ], + ["0x11537D023f489E4EF0C7157cc729C7B69CbE0c97" as const, "0xD804F74fe21290d213c46610ab171f7c2EeEBDE7" as const], + ["0x1F4f0989C51f12DAcacD4025018176711f3Bf289" as const, "0xdeDf3B2bcF25d0023115fd71a0F8221C91C92B1a" as const], + ["0x10b57706AD2345e590c2eA4DC02faef0d9f5b08B" as const, "0x899dDf81DfbbF5889a16D075c352F2b959Dd24A4" as const], + ["0x23a73971A6B9f6580c048B9CB188869B2A2aA2aD " as const, "0xa109DE0abaeefC521Ec29D89eA42E64F37A6882E" as const], + ["0x596B11acAACF03217287939f88d63b51d3771704" as const, "0xD5b20708d8f0FcA52cb609938D0594C4e32E5DaD" as const], + ] as [Address, Address][], }, // win - "0x2e6af3f3f059f43d764060968658c9f3c8f9479d": { + ["0x2e6af3f3f059f43d764060968658c9f3c8f9479d" as const]: { core: undefined, - isolated: [["0x11537D023f489E4EF0C7157cc729C7B69CbE0c97", "0xEe543D5de2Dbb5b07675Fc72831A2f1812428393"]], + isolated: [ + ["0x11537D023f489E4EF0C7157cc729C7B69CbE0c97" as const, "0xEe543D5de2Dbb5b07675Fc72831A2f1812428393" as const], + ] as [Address, Address][], }, // XRP - "0x3022a32fdadb4f02281e8fab33e0a6811237aab0": { - core: "0x488aB2826a154da01CC4CC16A8C83d4720D3cA2C", + ["0x3022a32fdadb4f02281e8fab33e0a6811237aab0" as const]: { + core: "0x488aB2826a154da01CC4CC16A8C83d4720D3cA2C" as const, isolated: undefined, }, // bnbx - "0x327d6e6fac0228070884e913263cff9efed4a2c8": { + ["0x327d6e6fac0228070884e913263cff9efed4a2c8" as const]: { core: undefined, - isolated: [["0x596B11acAACF03217287939f88d63b51d3771704 ", "0x644A149853E5507AdF3e682218b8AC86cdD62951"]], + isolated: [ + ["0x596B11acAACF03217287939f88d63b51d3771704" as const, "0x644A149853E5507AdF3e682218b8AC86cdD62951" as const], + ] as [Address, Address][], }, // aave - "0x4b7268fc7c727b88c5fc127d41b491bfae63e144": { - core: "0x714db6c38A17883964B68a07d56cE331501d9eb6", + ["0x4b7268fc7c727b88c5fc127d41b491bfae63e144" as const]: { + core: "0x714db6c38A17883964B68a07d56cE331501d9eb6" as const, isolated: undefined, }, // planet - "0x52b4e1a2ba407813f829b4b3943a1e57768669a9": { + ["0x52b4e1a2ba407813f829b4b3943a1e57768669a9" as const]: { core: undefined, - isolated: [["0x23a73971A6B9f6580c048B9CB188869B2A2aA2aD ", "0xe237aA131E7B004aC88CB808Fa56AF3dc4C408f1"]], + isolated: [ + ["0x23a73971A6B9f6580c048B9CB188869B2A2aA2aD" as const, "0xe237aA131E7B004aC88CB808Fa56AF3dc4C408f1" as const], + ] as [Address, Address][], }, // ageur - "0x63061de4a25f24279aaab80400040684f92ee319": { + ["0x63061de4a25f24279aaab80400040684f92ee319" as const]: { core: undefined, - isolated: [["0x10b57706AD2345e590c2eA4DC02faef0d9f5b08B ", "0x4E1D35166776825402d50AfE4286c500027211D1"]], + isolated: [ + ["0x10b57706AD2345e590c2eA4DC02faef0d9f5b08B" as const, "0x4E1D35166776825402d50AfE4286c500027211D1" as const], + ] as [Address, Address][], }, // doge - "0x67d262ce2b8b846d9b94060bc04dc40a83f0e25b": { - core: "0xF912d3001CAf6DC4ADD366A62Cc9115B4303c9A9", + ["0x67d262ce2b8b846d9b94060bc04dc40a83f0e25b" as const]: { + core: "0xF912d3001CAf6DC4ADD366A62Cc9115B4303c9A9" as const, isolated: undefined, }, // alpaca - "0x6923189d91fdf62dbae623a55273f1d20306d9f2": { + ["0x6923189d91fdf62dbae623a55273f1d20306d9f2" as const]: { core: undefined, - isolated: [["0x23a73971A6B9f6580c048B9CB188869B2A2aA2aD", "0xb7caC5Ef82cb7f9197ee184779bdc52c5490C02a"]], + isolated: [ + ["0x23a73971A6B9f6580c048B9CB188869B2A2aA2aD" as const, "0xb7caC5Ef82cb7f9197ee184779bdc52c5490C02a" as const], + ] as [Address, Address][], }, // sxp - "0x75107940cf1121232c0559c747a986defbc69da9": { - core: "0x74469281310195A04840Daf6EdF576F559a3dE80", + ["0x75107940cf1121232c0559c747a986defbc69da9" as const]: { + core: "0x74469281310195A04840Daf6EdF576F559a3dE80" as const, isolated: undefined, }, // trx - "0x7d21841dc10ba1c5797951efc62fadbbdd06704b": { - core: "0x6AF3Fdb3282c5bb6926269Db10837fa8Aec67C04", - isolated: [["0x11537D023f489E4EF0C7157cc729C7B69CbE0c97", "0x410286c43a525E1DCC7468a9B091C111C8324cd1"]], + ["0x7d21841dc10ba1c5797951efc62fadbbdd06704b" as const]: { + core: "0x6AF3Fdb3282c5bb6926269Db10837fa8Aec67C04" as const, + isolated: [ + ["0x11537D023f489E4EF0C7157cc729C7B69CbE0c97" as const, "0x410286c43a525E1DCC7468a9B091C111C8324cd1" as const], + ] as [Address, Address][], }, // bsw - "0x7fcc76fc1f573d8eb445c236cc282246bc562bce": { + ["0x7fcc76fc1f573d8eb445c236cc282246bc562bce" as const]: { core: undefined, - isolated: [["0x23a73971A6B9f6580c048B9CB188869B2A2aA2aD", "0x5e68913fbbfb91af30366ab1B21324410b49a308"]], + isolated: [ + ["0x23a73971A6B9f6580c048B9CB188869B2A2aA2aD" as const, "0x5e68913fbbfb91af30366ab1B21324410b49a308" as const], + ] as [Address, Address][], }, // busd - "0x8301f2213c0eed49a7e28ae4c3e91722919b8b47": { - core: "0x08e0A5575De71037aE36AbfAfb516595fE68e5e4", + ["0x8301f2213c0eed49a7e28ae4c3e91722919b8b47" as const]: { + core: "0x08e0A5575De71037aE36AbfAfb516595fE68e5e4" as const, isolated: undefined, }, // uni - "0x8d2f061c75780d8d91c10a7230b907411acbc8fc": { - core: "0x171B468b52d7027F12cEF90cd065d6776a25E24e", + ["0x8d2f061c75780d8d91c10a7230b907411acbc8fc" as const]: { + core: "0x171B468b52d7027F12cEF90cd065d6776a25E24e" as const, isolated: undefined, }, // ltc - "0x969f147b6b8d81f86175de33206a4fd43df17913": { - core: "0xAfc13BC065ABeE838540823431055D2ea52eBA52", + ["0x969f147b6b8d81f86175de33206a4fd43df17913" as const]: { + core: "0xAfc13BC065ABeE838540823431055D2ea52eBA52" as const, isolated: undefined, }, // eth - "0x98f7a83361f7ac8765ccebab1425da6b341958a7": { - core: "0x162D005F0Fff510E54958Cfc5CF32A3180A84aab", + ["0x98f7a83361f7ac8765ccebab1425da6b341958a7" as const]: { + core: "0x162D005F0Fff510E54958Cfc5CF32A3180A84aab" as const, isolated: undefined, }, // btcb - "0xa808e341e8e723dc6ba0bb5204bafc2330d7b8e4": { - core: "0xb6e9322C49FD75a367Fcb17B0Fcd62C5070EbCBe", + ["0xa808e341e8e723dc6ba0bb5204bafc2330d7b8e4" as const]: { + core: "0xb6e9322C49FD75a367Fcb17B0Fcd62C5070EbCBe" as const, isolated: undefined, }, // wbnb - "0xae13d989dac2f0debff460ac112a837c89baa7cd": { + ["0xae13d989dac2f0debff460ac112a837c89baa7cd" as const]: { core: undefined, - isolated: [["0x596B11acAACF03217287939f88d63b51d3771704", "0x231dED0Dfc99634e52EE1a1329586bc970d773b3"]], + isolated: [ + ["0x596B11acAACF03217287939f88d63b51d3771704" as const, "0x231dED0Dfc99634e52EE1a1329586bc970d773b3" as const], + ] as [Address, Address][], }, // floki - "0xb22cf15fbc089d470f8e532aead2bab76be87c88": { + ["0xb22cf15fbc089d470f8e532aead2bab76be87c88" as const]: { core: undefined, - isolated: [["0x1F4f0989C51f12DAcacD4025018176711f3Bf289", "0xef470AbC365F88e4582D8027172a392C473A5B53"]], + isolated: [ + ["0x1F4f0989C51f12DAcacD4025018176711f3Bf289" as const, "0xef470AbC365F88e4582D8027172a392C473A5B53" as const], + ] as [Address, Address][], }, // tusd - "0xb32171ecd878607ffc4f8fc0bcce6852bb3149e0": { - core: "0xEFAACF73CE2D38ED40991f29E72B12C74bd4cf23", + ["0xb32171ecd878607ffc4f8fc0bcce6852bb3149e0" as const]: { + core: "0xEFAACF73CE2D38ED40991f29E72B12C74bd4cf23" as const, isolated: undefined, }, // twt - "0xb99c6b26fdf3678c6e2aff8466e3625a0e7182f8": { + ["0xb99c6b26fdf3678c6e2aff8466e3625a0e7182f8" as const]: { core: undefined, - isolated: [["0x23a73971A6B9f6580c048B9CB188869B2A2aA2aD", "0x4C94e67d239aD585275Fdd3246Ab82c8a2668564"]], + isolated: [ + ["0x23a73971A6B9f6580c048B9CB188869B2A2aA2aD" as const, "0x4C94e67d239aD585275Fdd3246Ab82c8a2668564" as const], + ] as [Address, Address][], }, // ada - "0xcd34bc54106bd45a04ed99ebcc2a6a3e70d7210f": { - core: "0xcd34bc54106bd45a04ed99ebcc2a6a3e70d7210f", + ["0xcd34bc54106bd45a04ed99ebcc2a6a3e70d7210f" as const]: { + core: "0xcd34bc54106bd45a04ed99ebcc2a6a3e70d7210f" as const, isolated: undefined, }, // fdusd - "0xcf27439fa231af9931ee40c4f27bb77b83826f3c": { - core: "0xF06e662a00796c122AaAE935EC4F0Be3F74f5636", + ["0xcf27439fa231af9931ee40c4f27bb77b83826f3c" as const]: { + core: "0xF06e662a00796c122AaAE935EC4F0Be3F74f5636" as const, isolated: undefined, }, // matic - "0xcfeb0103d4befa041ea4c2dacce7b3e83e1ae7e3": { - core: "0xcfeb0103d4befa041ea4c2dacce7b3e83e1ae7e3", + ["0xcfeb0103d4befa041ea4c2dacce7b3e83e1ae7e3" as const]: { + core: "0xcfeb0103d4befa041ea4c2dacce7b3e83e1ae7e3" as const, isolated: undefined, }, // snBNB - "0xd2af6a916bc77764dc63742bc30f71af4cf423f4": { + ["0xd2af6a916bc77764dc63742bc30f71af4cf423f4" as const]: { core: undefined, - isolated: [["0x596B11acAACF03217287939f88d63b51d3771704", "0xeffE7874C345aE877c1D893cd5160DDD359b24dA"]], + isolated: [ + ["0x596B11acAACF03217287939f88d63b51d3771704" as const, "0xeffE7874C345aE877c1D893cd5160DDD359b24dA" as const], + ] as [Address, Address][], }, // raca - "0xd60cc803d888a3e743f21d0bde4bf2cafdea1f26": { + ["0xd60cc803d888a3e743f21d0bde4bf2cafdea1f26" as const]: { core: undefined, - isolated: [["0x1F4f0989C51f12DAcacD4025018176711f3Bf289", "0x1958035231E125830bA5d17D168cEa07Bb42184a"]], + isolated: [ + ["0x1F4f0989C51f12DAcacD4025018176711f3Bf289" as const, "0x1958035231E125830bA5d17D168cEa07Bb42184a" as const], + ] as [Address, Address][], }, // ankr - "0xe4a90eb942cf2da7238e8f6cc9ef510c49fc8b4b": { + ["0xe4a90eb942cf2da7238e8f6cc9ef510c49fc8b4b" as const]: { core: undefined, - isolated: [["0x23a73971A6B9f6580c048B9CB188869B2A2aA2aD", "0xb677e080148368EeeE70fA3865d07E92c6500174"]], + isolated: [ + ["0x23a73971A6B9f6580c048B9CB188869B2A2aA2aD" as const, "0xb677e080148368EeeE70fA3865d07E92c6500174" as const], + ] as [Address, Address][], }, // hay - "0xe73774dfcd551bf75650772dc2cc56a2b6323453": { + ["0xe73774dfcd551bf75650772dc2cc56a2b6323453" as const]: { core: undefined, - isolated: [["0x10b57706AD2345e590c2eA4DC02faef0d9f5b08B", "0x170d3b2da05cc2124334240fB34ad1359e34C562"]], + isolated: [ + ["0x10b57706AD2345e590c2eA4DC02faef0d9f5b08B" as const, "0x170d3b2da05cc2124334240fB34ad1359e34C562" as const], + ] as [Address, Address][], }, // cake - "0xe8bd7ccc165faeb9b81569b05424771b9a20cbef": { - core: "0xeDaC03D29ff74b5fDc0CC936F6288312e1459BC6", + ["0xe8bd7ccc165faeb9b81569b05424771b9a20cbef" as const]: { + core: "0xeDaC03D29ff74b5fDc0CC936F6288312e1459BC6" as const, isolated: undefined, }, // btt - "0xe98344a7c691b200ef47c9b8829110087d832c64": { + ["0xe98344a7c691b200ef47c9b8829110087d832c64" as const]: { core: undefined, - isolated: [["0x11537D023f489E4EF0C7157cc729C7B69CbE0c97", "0x47793540757c6E6D84155B33cd8D9535CFdb9334"]], + isolated: [ + ["0x11537D023f489E4EF0C7157cc729C7B69CbE0c97" as const, "0x47793540757c6E6D84155B33cd8D9535CFdb9334" as const], + ] as [Address, Address][], }, // wbeth - "0xf9f98365566f4d55234f24b99caa1afbe6428d44": { - core: "0x35566ED3AF9E537Be487C98b1811cDf95ad0C32b", + ["0xf9f98365566f4d55234f24b99caa1afbe6428d44" as const]: { + core: "0x35566ED3AF9E537Be487C98b1811cDf95ad0C32b" as const, isolated: undefined, }, // tusdold - "0xfec3a63401eb9c1476200d7c32c4009be0154169": { - core: "0xfec3a63401eb9c1476200d7c32c4009be0154169", + ["0xfec3a63401eb9c1476200d7c32c4009be0154169" as const]: { + core: "0xfec3a63401eb9c1476200d7c32c4009be0154169" as const, isolated: undefined, }, // xvs - "0xb9e0e753630434d7863528cc73cb7ac638a7c8ff": { - core: "0x6d6F697e34145Bb95c54E77482d97cc261Dc237E", + ["0xb9e0e753630434d7863528cc73cb7ac638a7c8ff" as const]: { + core: "0x6d6F697e34145Bb95c54E77482d97cc261Dc237E" as const, isolated: undefined, }, }, diff --git a/packages/token-converter-bot/src/converter-bot/index.ts b/packages/token-converter-bot/src/converter-bot/index.ts index 4a82b843..580b2d57 100644 --- a/packages/token-converter-bot/src/converter-bot/index.ts +++ b/packages/token-converter-bot/src/converter-bot/index.ts @@ -1,5 +1,6 @@ -import * as dotenv from "dotenv"; -import { Abi, Address, parseUnits } from "viem"; +import "dotenv/config"; + +import { Abi, Address } from "viem"; import subgraphClient from "../../subgraph-client"; import { @@ -7,17 +8,20 @@ import { coreVTokenAbi, protocolShareReserveAbi, tokenConverterAbi, - vBnbAbi, vBnbAdminAbi, } from "../config/abis/generated"; import addresses, { underlyingToVTokens } from "../config/addresses"; import { SUPPORTED_CHAINS } from "../config/chains"; import { getPublicClient, getWalletClient } from "../config/clients"; +import TokenConverterBot from "./TokenConverterBot"; import formatTokenConverterConfigs from "./formatTokenConverterConfigs"; import { parsePath } from "./path"; -import TokenConverterBot from "./tokenConverterBot"; -dotenv.config(); +interface BalanceResult { + tokenConverter: Address; + assetIn: { address: Address; balance: bigint }; + assetOut: { address: Address; balance: bigint }; +} const network = process.env.FORKED_NETWORK as SUPPORTED_CHAINS; @@ -71,11 +75,8 @@ const getBalances = async (assetIn: Address, assetOut: Address, tokenConverters: contracts: [ { address: addresses.ProtocolShareReserve as Address, - // @ts-ignore abi: protocolShareReserveAbi, - // @ts-ignore functionName: "releaseFunds", - // @ts-ignore args: [addresses.Unitroller, corePoolMarkets], }, ...tokenConverters.reduce((acc, curr) => { @@ -103,40 +104,32 @@ const getBalances = async (assetIn: Address, assetOut: Address, tokenConverters: return formattedResults; }; -// @todo -const checkForTrade = async (values: any[]) => { +const checkForTrade = async (values: { value: BalanceResult }[]) => { const trades = values.filter(v => { return v.value.assetOut.balance > 0; }); return trades; }; -// @todo -const executeTrade = async (t: any) => { - // @todo - const bot = new TokenConverterBot("bsctestnet"); - // @ts-ignore +const executeTrade = async (t: BalanceResult) => { + const bot = new TokenConverterBot(network); + const vTokens = underlyingToVTokens[t.assetOut.address]; - // @ts-ignore + if (vTokens.core) { await wallet.writeContract({ address: addresses.ProtocolShareReserve as Address, - // @ts-ignore abi: protocolShareReserveAbi, - // @ts-ignore functionName: "releaseFunds", - // @ts-ignore args: [addresses.Unitroller, [vTokens.core]], }); } + if (vTokens.isolated) { await wallet.writeContract({ address: addresses.ProtocolShareReserve as Address, - // @ts-ignore abi: protocolShareReserveAbi, - // @ts-ignore functionName: "releaseFunds", - // @ts-ignore args: [vTokens.isolated[0], [vTokens.isolated[1]]], }); } @@ -150,12 +143,13 @@ const executeTrade = async (t: any) => { await bot.sanityCheck(); - await bot.arbitrage( - t.tokenConverter, - parsePath([t.assetIn.address as Address, 500n, t.assetOut.address as Address]), - amountIn[1], - parseUnits("-0.1", 18), // @todo - ); + const trade = await bot.getBestTrade(t.assetIn.address, t.assetOut.address, amountIn[1]); + + const fee = BigInt(trade.routes[0].pools[0].fee); + const flashPayment = trade.inputAmount.numerator * (fee / 100000n + 1n); + const minIncome = t.assetOut.balance - flashPayment; + const path = parsePath([t.assetIn.address, fee, t.assetOut.address]); + await bot.arbitrage(t.tokenConverter, path, amountIn[1], minIncome); }; const main = async () => { @@ -175,13 +169,13 @@ const main = async () => { const totalReserves = await client.readContract({ address: addresses.vBNB as Address, - abi: vBnbAbi, + abi: coreVTokenAbi, functionName: "totalReserves", }); const cash = await client.readContract({ address: addresses.vBNB as Address, - abi: vBnbAbi, + abi: coreVTokenAbi, functionName: "getCash", }); @@ -193,7 +187,7 @@ const main = async () => { args: [totalReserves < cash ? totalReserves : cash], }); } else { - console.error("Unable to reduce reservers vBnb Admin is out of cash"); + console.error("Unable to reduce reservers vBNB Admin is out of cash."); } const tokenConverterConfigs = formatTokenConverterConfigs(tokenConverters); diff --git a/packages/token-converter-bot/src/converter-bot/tokenConverterBot.ts b/packages/token-converter-bot/src/converter-bot/tokenConverterBot.ts index ad11e4fb..e5235e72 100644 --- a/packages/token-converter-bot/src/converter-bot/tokenConverterBot.ts +++ b/packages/token-converter-bot/src/converter-bot/tokenConverterBot.ts @@ -1,4 +1,8 @@ +import { Currency, CurrencyAmount, Token, TradeType } from "@pancakeswap/sdk"; +import { BaseRoute, Pool, QuoteProvider, SmartRouter, SmartRouterTrade, V3Pool } from "@pancakeswap/smart-router/evm"; +import { Client as UrqlClient, createClient } from "urql/core"; import { Address, parseAbi } from "viem"; +import { Hex, encodePacked } from "viem"; import { tokenConverterOperatorAbi } from "../config/abis/generated"; import addresses from "../config/addresses"; @@ -7,30 +11,41 @@ import { chains } from "../config/chains"; import { getPublicClient, getWalletClient } from "../config/clients"; import { Path } from "./path"; -type SupportedConverters = - | "BTCBPrimeConverter" - | "ETHPrimeConverter" - | "RiskFundConverter" - | "USDCPrimeConverter" - | "USDTPrimeConverter" - | "XVSVaultConverter"; - const REVERT_IF_NOT_MINED_AFTER = 60n; // seconds -class Bot { +export const NETWORK_IDS: Record = { + bsctestnet: 97, + bscmainnet: 56, +}; + +export const getOutputCurrency = (pool: V3Pool, inputToken: Token): Currency => { + const { token0, token1 } = pool; + return token0.equals(inputToken) ? token1 : token0; +}; + +export class TokenConverterBot { private chainName: SUPPORTED_CHAINS; private operator: { address: Address; abi: typeof tokenConverterOperatorAbi }; private addresses: typeof addresses; private _walletClient?: ReturnType; private _publicClient?: ReturnType; + private v3SubgraphClient: UrqlClient; + private quoteProvider: QuoteProvider; + private tokens: Map; constructor(chainName: SUPPORTED_CHAINS) { this.chainName = chainName; - this.addresses = addresses[chainName]; + this.addresses = addresses; this.operator = { address: addresses.TokenConverterOperator, abi: tokenConverterOperatorAbi, }; + this.v3SubgraphClient = createClient({ + url: "https://api.thegraph.com/subgraphs/name/pancakeswap/exchange-v3-bsc", + requestPolicy: "network-only", + }); + this.quoteProvider = SmartRouter.createQuoteProvider({ onChainProvider: () => this.publicClient }); + this.tokens = new Map(); } get publicClient() { @@ -41,6 +56,32 @@ class Bot { return (this._walletClient ||= getWalletClient(this.chainName)); } + getToken = async (address: Address): Promise => { + if (this.tokens.has(address)) { + return this.tokens.get(address) as Currency; + } + const [{ result: decimals }, { result: symbol }] = await this.publicClient.multicall({ + contracts: [ + { + address, + abi: parseAbi(["function decimals() external pure returns (uint8)"]), + functionName: "decimals", + }, + { + address, + abi: parseAbi(["function symbol() external pure returns (string memory)"]), + functionName: "symbol", + }, + ], + }); + if (decimals && symbol) { + const token = new Token(NETWORK_IDS[this.chainName], address, decimals, symbol); + this.tokens.set(address, token); + return token; + } + throw new Error(`Unable to fetch token details for ${address}`); + }; + async sanityCheck() { const expected = this.addresses.PancakeSwapRouter; const actual = await this.publicClient.readContract({ @@ -52,40 +93,119 @@ class Bot { } } - async arbitrage(converter: SupportedConverters, path: Path, amount: bigint, minIncome: bigint) { - const converterAddress = this.addresses[converter]; + async getBestTrade( + swapFrom: Address, + swapTo: Address, + amount: bigint, + ): Promise> { + const swapFromToken = await this.getToken(swapFrom); + const swapToToken = await this.getToken(swapTo); + const candidatePools = await SmartRouter.getV3CandidatePools({ + onChainProvider: () => this.publicClient, + subgraphProvider: () => this.v3SubgraphClient, + currencyA: swapFromToken, + currencyB: swapToToken, + }); + + const trade = await SmartRouter.getBestTrade( + CurrencyAmount.fromRawAmount(swapToToken, amount), + swapFromToken, + TradeType.EXACT_OUTPUT, + { + gasPriceWei: () => this.publicClient.getGasPrice(), + maxHops: 1, + + maxSplits: 0, + poolProvider: SmartRouter.createStaticPoolProvider(candidatePools), + quoteProvider: this.quoteProvider, + quoterOptimization: true, + }, + ); + + if (!trade) { + throw new Error("No trade found"); + } + + return trade as SmartRouterTrade; + } + + encodeExactOutputPath(route: BaseRoute): Hex { + const firstInputToken: Token = route.input.wrapped; + + const { path, types } = route.pools.reduce( + ( + // eslint-disable-next-line @typescript-eslint/no-shadow + { inputToken, path, types }: { inputToken: Token; path: (string | number)[]; types: string[] }, + pool_: Pool, + index: number, + ): { inputToken: Token; path: (string | number)[]; types: string[] } => { + if (!("fee" in pool_)) { + throw new Error("Undefined fee"); + } + const pool = pool_ as V3Pool; + const outputToken = getOutputCurrency(pool, inputToken).wrapped; + if (index === 0) { + return { + inputToken: outputToken, + types: ["address", "uint24", "address"], + path: [inputToken.address, pool.fee, outputToken.address], + }; + } + return { + inputToken: outputToken, + types: [...types, "uint24", "address"], + path: [...path, pool.fee, outputToken.address], + }; + }, + { inputToken: firstInputToken, path: [], types: [] }, + ); + + return encodePacked(types.reverse(), path.reverse()); + } + + async arbitrage(converterAddress: Address, path: Path, amount: bigint, minIncome: bigint) { const beneficiary = this.walletClient.account.address; const chain = chains[this.chainName]; + const block = await this.publicClient.getBlock(); + if (minIncome < 0n) { await this.walletClient.writeContract({ address: path.end, chain, abi: parseAbi(["function approve(address,uint256)"]), functionName: "approve", - args: [this.operator.address, -minIncome], + args: [this.operator.address, -minIncome], // + amount + }); + } + try { + await this.walletClient.writeContract({ + ...this.operator, + chain, + functionName: "convert", + args: [ + { + beneficiary, + tokenToReceiveFromConverter: path.end, + amount, + minIncome, + tokenToSendToConverter: path.start, + converter: converterAddress, + path: path.hex, + deadline: block.timestamp + REVERT_IF_NOT_MINED_AFTER, + }, + ], + }); + } catch (e) { + console.error("Conversion failed", { + converterAddress, + assetIn: path.start, + assetOut: path.end, + amount, + minIncome, }); } - - const block = await this.publicClient.getBlock(); - await this.walletClient.writeContract({ - ...this.operator, - chain, - functionName: "convert", - args: [ - { - beneficiary, - tokenToReceiveFromConverter: path.end, - amount, - minIncome, - tokenToSendToConverter: path.start, - converter: converterAddress, - path: path.hex, - deadline: block.timestamp + REVERT_IF_NOT_MINED_AFTER, - }, - ], - }); } } -export default Bot; +export default TokenConverterBot; diff --git a/packages/token-converter-bot/wagmi.config.ts b/packages/token-converter-bot/wagmi.config.ts index 010f7f94..62d87e41 100644 --- a/packages/token-converter-bot/wagmi.config.ts +++ b/packages/token-converter-bot/wagmi.config.ts @@ -3,7 +3,6 @@ import poolLensArtifact from "@venusprotocol/isolated-pools/artifacts/contracts/ import protocolShareReserveArtifact from "@venusprotocol/protocol-reserve/artifacts/contracts/ProtocolReserve/ProtocolShareReserve.sol/ProtocolShareReserve.json" assert { type: "json" }; import tokenConverterArtifact from "@venusprotocol/protocol-reserve/artifacts/contracts/TokenConverter/AbstractTokenConverter.sol/AbstractTokenConverter.json" assert { type: "json" }; import vBnbAdminArtifact from "@venusprotocol/venus-protocol/artifacts/contracts/Admin/VBNBAdmin.sol/VBNBAdmin.json" assert { type: "json" }; -import vBNB from "@venusprotocol/venus-protocol/artifacts/contracts/Admin/VBNBAdminStorage.sol/VTokenInterface.json" assert { type: "json" }; import diamondComptrollerArtifact from "@venusprotocol/venus-protocol/artifacts/contracts/Comptroller/Diamond/DiamondConsolidated.sol/DiamondConsolidated.json" assert { type: "json" }; import coreVTokenArtifact from "@venusprotocol/venus-protocol/artifacts/contracts/Tokens/VTokens/VBep20Delegate.sol/VBep20Delegate.json" assert { type: "json" }; import { defineConfig } from "@wagmi/cli"; @@ -35,10 +34,6 @@ const getExternalContracts = async (): Promise<{ name: string; abi: Abi }[]> => abi: vBnbAdminArtifact.abi as Abi, name: "VBnbAdmin", }, - { - abi: vBNB.abi as Abi, - name: "vBNB", - }, { abi: tokenConverterArtifact.abi as Abi, name: "TokenConverter", diff --git a/src/module.d.ts b/src/module.d.ts new file mode 100644 index 00000000..c08d1934 --- /dev/null +++ b/src/module.d.ts @@ -0,0 +1,10 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +/* eslint-disable @typescript-eslint/no-unused-vars */ +declare module "@pancakeswap/smart-router/evm" { + export type BaseRoute = any; + export type Pool = any; + export type QuoteProvider = any; + export const SmartRouter: any; + export type SmartRouterTrade = any; + export type V3Pool = any; +} diff --git a/yarn.lock b/yarn.lock index efcaf3ee..638e17e7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,6 +1,3 @@ -# This file is generated by running "yarn install" inside your project. -# Manual changes might be lost - proceed with caution! - __metadata: version: 6 cacheKey: 8 @@ -2460,6 +2457,114 @@ __metadata: languageName: node linkType: hard +"@pancakeswap/chains@npm:0.4.0, @pancakeswap/chains@npm:^0.4.0": + version: 0.4.0 + resolution: "@pancakeswap/chains@npm:0.4.0" + checksum: c9f2a7023b850fadcaa46b54d15fba3172795a5b2f9f03c323fbe647fe990fdeb88a413b1775a503c5e93d6290634f5b2fb1046dec8ce5f4039e8e4769e56e68 + languageName: node + linkType: hard + +"@pancakeswap/multicall@npm:3.4.0": + version: 3.4.0 + resolution: "@pancakeswap/multicall@npm:3.4.0" + dependencies: + "@pancakeswap/chains": 0.4.0 + "@pancakeswap/sdk": 5.7.5 + viem: 1.19.11 + checksum: 3a7b2c6f448573fb535b19847178630fb9ace1b50c71e33ed3a60ef9170b46e8b726d0a3b9595e3b12c25f14dde50db4a74a83cea5dd70356b011c9b76c36b0a + languageName: node + linkType: hard + +"@pancakeswap/sdk@npm:5.7.5, @pancakeswap/sdk@npm:^5.7.5": + version: 5.7.5 + resolution: "@pancakeswap/sdk@npm:5.7.5" + dependencies: + "@pancakeswap/chains": ^0.4.0 + "@pancakeswap/swap-sdk-core": 1.0.0 + big.js: ^5.2.2 + decimal.js-light: ^2.5.0 + tiny-invariant: ^1.3.0 + tiny-warning: ^1.0.3 + toformat: ^2.0.0 + viem: 1.19.11 + checksum: dab0c4526753b1325da2c3d4ac56ce0269f5520a37fe0335040a92e11988f9608cb0627c7d73eec8b0c812524c77d980b2c8416c630d5105e491a6252c72f8a5 + languageName: node + linkType: hard + +"@pancakeswap/smart-router@npm:^4.14.2": + version: 4.14.2 + resolution: "@pancakeswap/smart-router@npm:4.14.2" + dependencies: + "@pancakeswap/chains": 0.4.0 + "@pancakeswap/multicall": 3.4.0 + "@pancakeswap/sdk": 5.7.5 + "@pancakeswap/swap-sdk-core": 1.0.0 + "@pancakeswap/token-lists": 0.0.9 + "@pancakeswap/tokens": 0.6.1 + "@pancakeswap/v3-sdk": 3.7.7 + async-retry: ^1.3.1 + debug: ^4.3.4 + graphql: ^16.8.1 + graphql-request: 5.0.0 + lodash: ^4.17.21 + mnemonist: ^0.38.3 + stats-lite: ^2.2.0 + tiny-invariant: ^1.3.0 + viem: 1.19.11 + zod: ^3.22.3 + checksum: a75c6b9cdeda7e5990baffbb68b81c0889f0d1253f011afdb81bea97d59e08eb817c907f13154a1a68b64019a741838238cf3ae1e473d50e02098d32862559e4 + languageName: node + linkType: hard + +"@pancakeswap/swap-sdk-core@npm:1.0.0": + version: 1.0.0 + resolution: "@pancakeswap/swap-sdk-core@npm:1.0.0" + dependencies: + big.js: ^5.2.2 + decimal.js-light: ^2.5.0 + tiny-invariant: ^1.1.0 + tiny-warning: ^1.0.3 + toformat: ^2.0.0 + checksum: 522d52e5ba283214a17a4412a4b7f58e56c11d0eb81b7decac2459ac8a795a339d372f0bc4ae8e2aed30d60c1d30dadfd898f4f09b1b15b3d128b24bd1d26307 + languageName: node + linkType: hard + +"@pancakeswap/token-lists@npm:0.0.9": + version: 0.0.9 + resolution: "@pancakeswap/token-lists@npm:0.0.9" + dependencies: + "@pancakeswap/swap-sdk-core": 1.0.0 + ajv: ^6.12.3 + lodash: ^4.17.21 + peerDependencies: + "@reduxjs/toolkit": ^1.9.1 + jotai: ^2.4.3 + localforage: ^1.10.0 + react: ^18.2.0 + peerDependenciesMeta: + "@reduxjs/toolkit": + optional: true + jotai: + optional: true + localforage: + optional: true + react: + optional: true + checksum: a0709ee78bac16bf85e5764128ba2f410d6cbd0c82d4f6dbddde9cf8ab5e32075614003cded29593307ef352d4182d710e546db36053ac83449adb87d20a930a + languageName: node + linkType: hard + +"@pancakeswap/tokens@npm:0.6.1": + version: 0.6.1 + resolution: "@pancakeswap/tokens@npm:0.6.1" + dependencies: + "@pancakeswap/chains": 0.4.0 + "@pancakeswap/sdk": 5.7.5 + "@pancakeswap/token-lists": 0.0.9 + checksum: bfa5dfa1eba3c27c11e99e0616357e31008cf1f016e149c24b3ee1b79680d1384d611cd25a4c06bd7a41fe3d6080a7b1bc6fd4e09eed738c55c642a8e49cd988 + languageName: node + linkType: hard + "@pancakeswap/v3-core@npm:^1.0.2": version: 1.0.2 resolution: "@pancakeswap/v3-core@npm:1.0.2" @@ -2467,6 +2572,57 @@ __metadata: languageName: node linkType: hard +"@pancakeswap/v3-sdk@npm:3.7.7": + version: 3.7.7 + resolution: "@pancakeswap/v3-sdk@npm:3.7.7" + dependencies: + "@pancakeswap/chains": 0.4.0 + "@pancakeswap/sdk": 5.7.5 + "@pancakeswap/swap-sdk-core": 1.0.0 + "@pancakeswap/tokens": 0.6.1 + big.js: ^5.2.2 + decimal.js-light: ^2.5.0 + tiny-invariant: ^1.3.0 + tiny-warning: ^1.0.3 + toformat: ^2.0.0 + viem: 1.19.11 + checksum: 8f5e7fb38062c31644c78805e429050d5c336d4984b0ad28fae8c693cd61f8de89c7dd12d50228388d03b0f1cb92f645a56ab81e410ef5ef202a92e4c5ff65cd + languageName: node + linkType: hard + +"@peculiar/asn1-schema@npm:^2.3.8": + version: 2.3.8 + resolution: "@peculiar/asn1-schema@npm:2.3.8" + dependencies: + asn1js: ^3.0.5 + pvtsutils: ^1.3.5 + tslib: ^2.6.2 + checksum: 1f4dd421f1411df8bc52bca12b1cef710434c13ff0a8b5746ede42b10d62b5ad06a3925c4a6db53102aaf1e589947539a6955fa8554a9b8ebb1ffa38b0155a24 + languageName: node + linkType: hard + +"@peculiar/json-schema@npm:^1.1.12": + version: 1.1.12 + resolution: "@peculiar/json-schema@npm:1.1.12" + dependencies: + tslib: ^2.0.0 + checksum: b26ececdc23c5ef25837f8be8d1eb5e1c8bb6e9ae7227ac59ffea57fff56bd05137734e7685e9100595d3d88d906dff638ef8d1df54264c388d3eac1b05aa060 + languageName: node + linkType: hard + +"@peculiar/webcrypto@npm:^1.4.0": + version: 1.4.5 + resolution: "@peculiar/webcrypto@npm:1.4.5" + dependencies: + "@peculiar/asn1-schema": ^2.3.8 + "@peculiar/json-schema": ^1.1.12 + pvtsutils: ^1.3.5 + tslib: ^2.6.2 + webcrypto-core: ^1.7.8 + checksum: a07b49b44d9bfa75647e5633ad1c0232dab43d3a592e5579f5288dabd319138f2714cf5451d7b8f728d7ed16c9cb159aab6313bcd79f8ce9ed4b2933f9f3a72b + languageName: node + linkType: hard + "@pkgjs/parseargs@npm:^0.11.0": version: 0.11.0 resolution: "@pkgjs/parseargs@npm:0.11.0" @@ -3488,13 +3644,20 @@ __metadata: languageName: node linkType: hard -"@venusprotocol/solidity-utilities@npm:1.3.0, @venusprotocol/solidity-utilities@npm:^1.1.0, @venusprotocol/solidity-utilities@npm:^1.2.0, @venusprotocol/solidity-utilities@npm:^1.3.0": +"@venusprotocol/solidity-utilities@npm:1.3.0, @venusprotocol/solidity-utilities@npm:^1.2.0, @venusprotocol/solidity-utilities@npm:^1.3.0": version: 1.3.0 resolution: "@venusprotocol/solidity-utilities@npm:1.3.0" checksum: d1109365a5e01959c47b25fb129373db93792e60bf1bc0ed324b63c2a64f6e4a7878ebf016cfade94bc41a2c1245d3e861fdc6b8c5844ac210ed1d73e7307e72 languageName: node linkType: hard +"@venusprotocol/solidity-utilities@npm:^1.1.0": + version: 1.1.0 + resolution: "@venusprotocol/solidity-utilities@npm:1.1.0" + checksum: 3b17ec451cd0ba5aaea76686c7bef35757fb158709214be094f73ebd0d643c79817159f7aa162cc694e1a5ee1f02b20e26211a65929113b985827959aae99fa7 + languageName: node + linkType: hard + "@venusprotocol/tg-error-reporter@workspace:packages/tg-error-reporter": version: 0.0.0-use.local resolution: "@venusprotocol/tg-error-reporter@workspace:packages/tg-error-reporter" @@ -3522,6 +3685,9 @@ __metadata: version: 0.0.0-use.local resolution: "@venusprotocol/token-converter-bot@workspace:packages/token-converter-bot" dependencies: + "@graphprotocol/client-cli": ^3.0.0 + "@pancakeswap/sdk": ^5.7.5 + "@pancakeswap/smart-router": ^4.14.2 "@pancakeswap/v3-core": ^1.0.2 "@typechain/ethers-v5": ^10.1.0 "@typechain/hardhat": ^6.1.2 @@ -3539,7 +3705,8 @@ __metadata: ts-node: ^10.9.1 typechain: ^8.3.2 typescript: ^5.3.2 - viem: ^2.1.1 + urql: ^3.0.3 + viem: ^2.7.1 languageName: unknown linkType: soft @@ -3862,6 +4029,32 @@ __metadata: languageName: node linkType: hard +"ajv-formats@npm:^2.1.1": + version: 2.1.1 + resolution: "ajv-formats@npm:2.1.1" + dependencies: + ajv: ^8.0.0 + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + checksum: 4a287d937f1ebaad4683249a4c40c0fa3beed30d9ddc0adba04859026a622da0d317851316ea64b3680dc60f5c3c708105ddd5d5db8fe595d9d0207fd19f90b7 + languageName: node + linkType: hard + +"ajv@npm:^6.10.0, ajv@npm:^6.12.3, ajv@npm:^6.12.4, ajv@npm:^6.12.6": + version: 6.12.6 + resolution: "ajv@npm:6.12.6" + dependencies: + fast-deep-equal: ^3.1.1 + fast-json-stable-stringify: ^2.0.0 + json-schema-traverse: ^0.4.1 + uri-js: ^4.2.2 + checksum: 874972efe5c4202ab0a68379481fbd3d1b5d0a7bd6d3cc21d40d3536ebff3352a2a1fabb632d4fd2cc7fe4cbdcd5ed6782084c9bbf7f32a1536d18f9da5007d4 + languageName: node + linkType: hard + "ajv@npm:^6.10.0, ajv@npm:^6.12.4, ajv@npm:^6.12.6": version: 6.12.6 resolution: "ajv@npm:6.12.6" @@ -4244,7 +4437,7 @@ __metadata: languageName: node linkType: hard -"async-retry@npm:^1.3.3": +"async-retry@npm:^1.3.1, async-retry@npm:^1.3.3": version: 1.3.3 resolution: "async-retry@npm:1.3.3" dependencies: @@ -6625,6 +6818,20 @@ __metadata: languageName: node linkType: hard +"extract-files@npm:^11.0.0": + version: 11.0.0 + resolution: "extract-files@npm:11.0.0" + checksum: 39ebd92772e9a1e30d1e3112fb7db85d353c8243640635668b615ac1d605ceb79fbb13d17829dd308993ef37bb189ad99817f79ab164ae95c9bb3df9f440bd16 + languageName: node + linkType: hard + +"extract-files@npm:^9.0.0": + version: 9.0.0 + resolution: "extract-files@npm:9.0.0" + checksum: c31781d090f8d8f62cc541f1023b39ea863f24bd6fb3d4011922d71cbded70cef8191f2b70b43ec6cb5c5907cdad1dc5e9f29f78228936c10adc239091d8ab64 + languageName: node + linkType: hard + "fast-base64-decode@npm:^1.0.0": version: 1.0.0 resolution: "fast-base64-decode@npm:1.0.0" @@ -6872,6 +7079,17 @@ __metadata: languageName: node linkType: hard +"form-data@npm:^3.0.0": + version: 3.0.1 + resolution: "form-data@npm:3.0.1" + dependencies: + asynckit: ^0.4.0 + combined-stream: ^1.0.8 + mime-types: ^2.1.12 + checksum: b019e8d35c8afc14a2bd8a7a92fa4f525a4726b6d5a9740e8d2623c30e308fbb58dc8469f90415a856698933c8479b01646a9dff33c87cc4e76d72aedbbf860d + languageName: node + linkType: hard + "form-data@npm:^4.0.0": version: 4.0.0 resolution: "form-data@npm:4.0.0" @@ -7440,6 +7658,87 @@ __metadata: languageName: node linkType: hard +"graphql-import-node@npm:^0.0.5": + version: 0.0.5 + resolution: "graphql-import-node@npm:0.0.5" + peerDependencies: + graphql: "*" + checksum: a9af565f3422e9e732dcf97077deff3f94b9af0d7e8001bb65a3cac607a462664f902b3603ead1626b294928c4b6302cb6aa2d49254444d465ce87c629fb842d + languageName: node + linkType: hard + +"graphql-request@npm:5.0.0": + version: 5.0.0 + resolution: "graphql-request@npm:5.0.0" + dependencies: + "@graphql-typed-document-node/core": ^3.1.1 + cross-fetch: ^3.1.5 + extract-files: ^9.0.0 + form-data: ^3.0.0 + peerDependencies: + graphql: 14 - 16 + checksum: 2e8900d10cded401b253a05650719321123e3b0ad5bc57523288892e0226dccf43668ec937753420084f649fb4e3f998f2547c884b746a3e91fa0a43f93e62d4 + languageName: node + linkType: hard + +"graphql-tag@npm:^2.11.0": + version: 2.12.6 + resolution: "graphql-tag@npm:2.12.6" + dependencies: + tslib: ^2.1.0 + peerDependencies: + graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: b15162a3d62f17b9b79302445b9ee330e041582f1c7faca74b9dec5daa74272c906ec1c34e1c50592bb6215e5c3eba80a309103f6ba9e4c1cddc350c46f010df + languageName: node + linkType: hard + +"graphql-ws@npm:5.12.1": + version: 5.12.1 + resolution: "graphql-ws@npm:5.12.1" + peerDependencies: + graphql: ">=0.11 <=16" + checksum: 88d587c431feba681957faecd96101bb3860e1a4765f34b8cae1c514e7f98754b5f31c6b3127775e4732f26883b0802fe426bf9f7031c16cd0b25a27ad90ec9c + languageName: node + linkType: hard + +"graphql-ws@npm:^5.12.1": + version: 5.14.3 + resolution: "graphql-ws@npm:5.14.3" + peerDependencies: + graphql: ">=0.11 <=16" + checksum: c5bfdeb6d06f528e2222e71bf830b2f4f3e5b95419453d3b650cef9fe012e0126f121e4858d950edf3db1fb209a056b592643751624d1bc1fc71ecbe546d53d5 + languageName: node + linkType: hard + +"graphql-yoga@npm:^3.9.1": + version: 3.9.1 + resolution: "graphql-yoga@npm:3.9.1" + dependencies: + "@envelop/core": ^3.0.4 + "@envelop/validation-cache": ^5.1.2 + "@graphql-tools/executor": ^0.0.18 + "@graphql-tools/schema": ^9.0.18 + "@graphql-tools/utils": ^9.2.1 + "@graphql-yoga/logger": ^0.0.1 + "@graphql-yoga/subscription": ^3.1.0 + "@whatwg-node/fetch": ^0.8.4 + "@whatwg-node/server": ^0.7.3 + dset: ^3.1.1 + lru-cache: ^7.14.1 + tslib: ^2.3.1 + peerDependencies: + graphql: ^15.2.0 || ^16.0.0 + checksum: 7a1e6cd6d40d5b011c472217a0ec860c72c38656a03b209da1d4b0cc8eb7fab1b5576f88fe5d0657f5b935fb1dd588154c21878c932132095ad63c7ae3d55a21 + languageName: node + linkType: hard + +"graphql@npm:^16.8.1": + version: 16.8.1 + resolution: "graphql@npm:16.8.1" + checksum: 8d304b7b6f708c8c5cc164b06e92467dfe36aff6d4f2cf31dd19c4c2905a0e7b89edac4b7e225871131fd24e21460836b369de0c06532644d15b461d55b1ccc0 + languageName: node + linkType: hard + "handlebars@npm:^4.0.1, handlebars@npm:^4.7.7": version: 4.7.8 resolution: "handlebars@npm:4.7.8" @@ -8440,6 +8739,13 @@ __metadata: languageName: node linkType: hard +"isnumber@npm:~1.0.0": + version: 1.0.0 + resolution: "isnumber@npm:1.0.0" + checksum: 245dba1670bc5b0e0e0788ca0231f05eaa2425586b22d5acc44add14ac8f025b12e1a346b3a069e0c194cd93c0c2bfe55820dba5582500a3f45f4212a667b7f3 + languageName: node + linkType: hard + "isomorphic-unfetch@npm:^3.0.0": version: 3.1.0 resolution: "isomorphic-unfetch@npm:3.1.0" @@ -9635,6 +9941,15 @@ __metadata: languageName: node linkType: hard +"mkdirp@npm:^3.0.0": + version: 3.0.1 + resolution: "mkdirp@npm:3.0.1" + bin: + mkdirp: dist/cjs/src/bin.js + checksum: 972deb188e8fb55547f1e58d66bd6b4a3623bf0c7137802582602d73e6480c1c2268dcbafbfb1be466e00cc7e56ac514d7fd9334b7cf33e3e2ab547c16f83a8d + languageName: node + linkType: hard + "mnemonist@npm:^0.38.0": version: 0.38.5 resolution: "mnemonist@npm:0.38.5" @@ -9644,6 +9959,15 @@ __metadata: languageName: node linkType: hard +"mnemonist@npm:^0.38.0, mnemonist@npm:^0.38.3": + version: 0.38.5 + resolution: "mnemonist@npm:0.38.5" + dependencies: + obliterator: ^2.0.0 + checksum: 66080afc1616866beb164e230c432964d6eed467cf37ad00e9c10161b8267928124ca8f1d0ecfea86c85568acfa62d54faaf646a86968d1135189a0fdfdd6b78 + languageName: node + linkType: hard + "mocha@npm:^10.0.0, mocha@npm:^10.2.0": version: 10.2.0 resolution: "mocha@npm:10.2.0" @@ -12137,6 +12461,15 @@ __metadata: languageName: node linkType: hard +"stats-lite@npm:^2.2.0": + version: 2.2.0 + resolution: "stats-lite@npm:2.2.0" + dependencies: + isnumber: ~1.0.0 + checksum: ea153c195c48692b00bfbb04fd8760d30c161edf62be31dc3475554da1f22f362461fa953ca5465c6e7977a1b927bf8cb4b1df8230c43f6a8f48fe2c125c98eb + languageName: node + linkType: hard + "statuses@npm:2.0.1": version: 2.0.1 resolution: "statuses@npm:2.0.1" @@ -13214,6 +13547,27 @@ __metadata: languageName: node linkType: hard +"viem@npm:^2.7.1": + version: 2.7.1 + resolution: "viem@npm:2.7.1" + dependencies: + "@adraffy/ens-normalize": 1.10.0 + "@noble/curves": 1.2.0 + "@noble/hashes": 1.3.2 + "@scure/bip32": 1.3.2 + "@scure/bip39": 1.2.1 + abitype: 1.0.0 + isows: 1.0.3 + ws: 8.13.0 + peerDependencies: + typescript: ">=5.0.4" + peerDependenciesMeta: + typescript: + optional: true + checksum: 856810b098ec6e099603e1cead73f71c6c9cae28ceac327c39d56742e2c29bcfa4aa9070a96aef1313740ffc0b8a854744557a36d469239743bd2df1a55970a6 + languageName: node + linkType: hard + "walk-up-path@npm:^3.0.1": version: 3.0.1 resolution: "walk-up-path@npm:3.0.1" @@ -13576,6 +13930,22 @@ __metadata: languageName: node linkType: hard +"zod-to-json-schema@npm:^3.20.5": + version: 3.22.4 + resolution: "zod-to-json-schema@npm:3.22.4" + peerDependencies: + zod: ^3.22.4 + checksum: 22f89d505cc3d93020de38e4471362fbecd73a8df58017553ad57fb14e69b6f2f88bcdfe9f84b291442ed0654f97344d517af291d23848e43e6e208ee23dac2b + languageName: node + linkType: hard + +"zod@npm:^3.21.4, zod@npm:^3.22.2, zod@npm:^3.22.3": + version: 3.22.4 + resolution: "zod@npm:3.22.4" + checksum: 80bfd7f8039b24fddeb0718a2ec7c02aa9856e4838d6aa4864335a047b6b37a3273b191ef335bf0b2002e5c514ef261ffcda5a589fb084a48c336ffc4cdbab7f + languageName: node + linkType: hard + "zod@npm:^3.22.2": version: 3.22.4 resolution: "zod@npm:3.22.4" From 6ce085499b2facfda8b67067ebf2511a37dd2c3f Mon Sep 17 00:00:00 2001 From: Corey Rice Date: Thu, 1 Feb 2024 13:13:43 -0300 Subject: [PATCH 07/13] feat: support isolated markets --- packages/token-converter-bot/package.json | 9 +- .../token-converter-bot/src/config/clients.ts | 32 - .../src/config/clients/publicClient.ts | 14 + .../src/config/clients/walletClient.ts | 25 + ...tokenConverterBot.ts => TokenConverter.ts} | 53 +- .../src/converter-bot/index.ts | 225 +- .../queries/read/readCoreMarkets.ts | 17 + .../queries/read/readIsolatedMarkets.ts | 18 + .../read/readTokenConverterConfigs.ts} | 13 +- .../read/readTokenConvertersTokenBalances.ts | 90 + .../src/converter-bot/types.ts | 3 + .../token-converter-bot/src}/module.d.ts | 0 .../subgraph-client}/.graphclientrc.yml | 2 +- .../subgraph-client}/index.ts | 0 .../queries/TokenConvertersQuery.graphql | 1 - packages/token-converter-bot/tsconfig.json | 6 +- yarn.lock | 2938 ++++++++++++++++- 17 files changed, 3077 insertions(+), 369 deletions(-) delete mode 100644 packages/token-converter-bot/src/config/clients.ts create mode 100644 packages/token-converter-bot/src/config/clients/publicClient.ts create mode 100644 packages/token-converter-bot/src/config/clients/walletClient.ts rename packages/token-converter-bot/src/converter-bot/{tokenConverterBot.ts => TokenConverter.ts} (81%) create mode 100644 packages/token-converter-bot/src/converter-bot/queries/read/readCoreMarkets.ts create mode 100644 packages/token-converter-bot/src/converter-bot/queries/read/readIsolatedMarkets.ts rename packages/token-converter-bot/src/converter-bot/{formatTokenConverterConfigs.ts => queries/read/readTokenConverterConfigs.ts} (53%) create mode 100644 packages/token-converter-bot/src/converter-bot/queries/read/readTokenConvertersTokenBalances.ts create mode 100644 packages/token-converter-bot/src/converter-bot/types.ts rename {src => packages/token-converter-bot/src}/module.d.ts (100%) rename {subgraph-client => packages/token-converter-bot/subgraph-client}/.graphclientrc.yml (88%) rename {subgraph-client => packages/token-converter-bot/subgraph-client}/index.ts (100%) rename {src => packages/token-converter-bot/subgraph-client}/queries/TokenConvertersQuery.graphql (88%) diff --git a/packages/token-converter-bot/package.json b/packages/token-converter-bot/package.json index 901bfb95..76422860 100644 --- a/packages/token-converter-bot/package.json +++ b/packages/token-converter-bot/package.json @@ -10,7 +10,8 @@ "prettier": "prettier --write \"**/*.{js,json,md,ts,yaml,yml}\"", "prettier:check": "prettier --check \"**/*.{js,json,md,ts,yaml,yml}\"", "generate-abis": "yarn wagmi generate", - "postinstall": "yarn generate-abis" + "postinstall": "yarn generate-abis", + " ": "rm -rf /subgraph-client/.graphclient && npx graphclient build --dir ./subgraph-client" }, "keywords": [], "author": "Venus", @@ -19,8 +20,12 @@ "node": ">=18.0.0" }, "dependencies": { + "@graphprotocol/client-cli": "^3.0.0", + "@pancakeswap/sdk": "^5.7.5", + "abitype": "0.10.0", + "graphql": "^16.8.1", "hardhat": "^2.19.5", - "viem": "^2.1.1" + "urql": "^3.0.3" }, "devDependencies": { "@pancakeswap/v3-core": "^1.0.2", diff --git a/packages/token-converter-bot/src/config/clients.ts b/packages/token-converter-bot/src/config/clients.ts deleted file mode 100644 index 478a6a42..00000000 --- a/packages/token-converter-bot/src/config/clients.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { HttpTransport, PublicClient, WalletClient, createPublicClient, createWalletClient, http } from "viem"; -import { PrivateKeyAccount, privateKeyToAccount } from "viem/accounts"; - -import { chains } from "./chains"; -import type { SUPPORTED_CHAINS } from "./chains"; - -export const getPublicClient = ( - chainName: SUPPORTED_CHAINS, -): PublicClient => { - return createPublicClient({ - chain: chains[chainName], - transport: http(process.env[`LIVE_NETWORK_${chainName}`]), - }); -}; - -const readPrivateKeyFromEnv = (chainName: string): PrivateKeyAccount => { - const key = process.env[`PRIVATE_KEY_${chainName}`]; - if (key?.startsWith("0x")) { - return privateKeyToAccount(key as `0x${string}`); - } - throw new Error(`Invalid private key for ${chainName}. Please specify PRIVATE_KEY_${chainName} env variable.`); -}; - -export const getWalletClient = ( - chainName: SUPPORTED_CHAINS, -): WalletClient => { - return createWalletClient({ - chain: chains[chainName], - transport: http(process.env[`LIVE_NETWORK_${chainName}`]), - account: readPrivateKeyFromEnv(chainName), - }); -}; diff --git a/packages/token-converter-bot/src/config/clients/publicClient.ts b/packages/token-converter-bot/src/config/clients/publicClient.ts new file mode 100644 index 00000000..5064e6b1 --- /dev/null +++ b/packages/token-converter-bot/src/config/clients/publicClient.ts @@ -0,0 +1,14 @@ +import { HttpTransport, PublicClient, createPublicClient, http } from "viem"; + +import { chains } from "../chains"; +import type { SUPPORTED_CHAINS } from "../chains"; + +export const getPublicClient = (): PublicClient => { + const chainName = process.env.FORKED_NETWORK as SUPPORTED_CHAINS; + return createPublicClient({ + chain: chains[chainName], + transport: http(process.env[`LIVE_NETWORK_${chainName}`]), + }); +}; + +export default getPublicClient(); diff --git a/packages/token-converter-bot/src/config/clients/walletClient.ts b/packages/token-converter-bot/src/config/clients/walletClient.ts new file mode 100644 index 00000000..5f9967f6 --- /dev/null +++ b/packages/token-converter-bot/src/config/clients/walletClient.ts @@ -0,0 +1,25 @@ + +import { HttpTransport, WalletClient, createWalletClient, http } from "viem"; +import { PrivateKeyAccount, privateKeyToAccount } from "viem/accounts"; + +import { chains } from "../chains"; +import type { SUPPORTED_CHAINS } from "../chains"; + +const readPrivateKeyFromEnv = (chainName: string): PrivateKeyAccount => { + const key = process.env[`PRIVATE_KEY_${chainName}`]; + if (key?.startsWith("0x")) { + return privateKeyToAccount(key as `0x${string}`); + } + throw new Error(`Invalid private key for ${chainName}. Please specify PRIVATE_KEY_${chainName} env variable.`); +}; + +export const getWalletClient = (): WalletClient => { + const chainName = process.env.FORKED_NETWORK as SUPPORTED_CHAINS; + return createWalletClient({ + chain: chains[chainName], + transport: http(process.env[`LIVE_NETWORK_${chainName}`]), + account: readPrivateKeyFromEnv(chainName), + }); +}; + +export default getWalletClient(); \ No newline at end of file diff --git a/packages/token-converter-bot/src/converter-bot/tokenConverterBot.ts b/packages/token-converter-bot/src/converter-bot/TokenConverter.ts similarity index 81% rename from packages/token-converter-bot/src/converter-bot/tokenConverterBot.ts rename to packages/token-converter-bot/src/converter-bot/TokenConverter.ts index e5235e72..71726e2c 100644 --- a/packages/token-converter-bot/src/converter-bot/tokenConverterBot.ts +++ b/packages/token-converter-bot/src/converter-bot/TokenConverter.ts @@ -1,34 +1,29 @@ import { Currency, CurrencyAmount, Token, TradeType } from "@pancakeswap/sdk"; import { BaseRoute, Pool, QuoteProvider, SmartRouter, SmartRouterTrade, V3Pool } from "@pancakeswap/smart-router/evm"; import { Client as UrqlClient, createClient } from "urql/core"; -import { Address, parseAbi } from "viem"; -import { Hex, encodePacked } from "viem"; +import { Address, Hex, encodePacked, erc20Abi, parseAbi } from "viem"; import { tokenConverterOperatorAbi } from "../config/abis/generated"; import addresses from "../config/addresses"; import type { SUPPORTED_CHAINS } from "../config/chains"; import { chains } from "../config/chains"; -import { getPublicClient, getWalletClient } from "../config/clients"; -import { Path } from "./path"; +import publicClient from "../config/clients/publicClient"; +import walletClient from "../config/clients/walletClient"; const REVERT_IF_NOT_MINED_AFTER = 60n; // seconds - -export const NETWORK_IDS: Record = { - bsctestnet: 97, - bscmainnet: 56, -}; +const MAX_HOPS = 5; export const getOutputCurrency = (pool: V3Pool, inputToken: Token): Currency => { const { token0, token1 } = pool; return token0.equals(inputToken) ? token1 : token0; }; -export class TokenConverterBot { +export class TokenConverter { private chainName: SUPPORTED_CHAINS; private operator: { address: Address; abi: typeof tokenConverterOperatorAbi }; private addresses: typeof addresses; - private _walletClient?: ReturnType; - private _publicClient?: ReturnType; + private _walletClient?: typeof walletClient; + private _publicClient?: typeof publicClient; private v3SubgraphClient: UrqlClient; private quoteProvider: QuoteProvider; private tokens: Map; @@ -49,11 +44,11 @@ export class TokenConverterBot { } get publicClient() { - return (this._publicClient ||= getPublicClient(this.chainName)); + return (this._publicClient ||= publicClient); } get walletClient() { - return (this._walletClient ||= getWalletClient(this.chainName)); + return (this._walletClient ||= walletClient); } getToken = async (address: Address): Promise => { @@ -64,18 +59,18 @@ export class TokenConverterBot { contracts: [ { address, - abi: parseAbi(["function decimals() external pure returns (uint8)"]), + abi: erc20Abi, functionName: "decimals", }, { address, - abi: parseAbi(["function symbol() external pure returns (string memory)"]), + abi: erc20Abi, functionName: "symbol", }, ], }); if (decimals && symbol) { - const token = new Token(NETWORK_IDS[this.chainName], address, decimals, symbol); + const token = new Token(chains[this.chainName].id, address, decimals, symbol); this.tokens.set(address, token); return token; } @@ -113,7 +108,7 @@ export class TokenConverterBot { TradeType.EXACT_OUTPUT, { gasPriceWei: () => this.publicClient.getGasPrice(), - maxHops: 1, + maxHops: MAX_HOPS, maxSplits: 0, poolProvider: SmartRouter.createStaticPoolProvider(candidatePools), @@ -163,7 +158,12 @@ export class TokenConverterBot { return encodePacked(types.reverse(), path.reverse()); } - async arbitrage(converterAddress: Address, path: Path, amount: bigint, minIncome: bigint) { + async arbitrage( + converterAddress: Address, + trade: SmartRouterTrade, + amount: bigint, + minIncome: bigint, + ) { const beneficiary = this.walletClient.account.address; const chain = chains[this.chainName]; @@ -171,11 +171,11 @@ export class TokenConverterBot { if (minIncome < 0n) { await this.walletClient.writeContract({ - address: path.end, + address: trade.outputAmount.address, chain, abi: parseAbi(["function approve(address,uint256)"]), functionName: "approve", - args: [this.operator.address, -minIncome], // + amount + args: [this.operator.address, -minIncome], }); } try { @@ -186,12 +186,12 @@ export class TokenConverterBot { args: [ { beneficiary, - tokenToReceiveFromConverter: path.end, + tokenToReceiveFromConverter: trade.outputAmount.address, amount, minIncome, - tokenToSendToConverter: path.start, + tokenToSendToConverter: trade.inputAmount.address, converter: converterAddress, - path: path.hex, + path: this.encodeExactOutputPath(trade.route), deadline: block.timestamp + REVERT_IF_NOT_MINED_AFTER, }, ], @@ -199,8 +199,7 @@ export class TokenConverterBot { } catch (e) { console.error("Conversion failed", { converterAddress, - assetIn: path.start, - assetOut: path.end, + trade, amount, minIncome, }); @@ -208,4 +207,4 @@ export class TokenConverterBot { } } -export default TokenConverterBot; +export default TokenConverter; diff --git a/packages/token-converter-bot/src/converter-bot/index.ts b/packages/token-converter-bot/src/converter-bot/index.ts index 580b2d57..571d2969 100644 --- a/packages/token-converter-bot/src/converter-bot/index.ts +++ b/packages/token-converter-bot/src/converter-bot/index.ts @@ -1,186 +1,93 @@ import "dotenv/config"; -import { Abi, Address } from "viem"; - -import subgraphClient from "../../subgraph-client"; -import { - coreComptrollerAbi, - coreVTokenAbi, - protocolShareReserveAbi, - tokenConverterAbi, - vBnbAdminAbi, -} from "../config/abis/generated"; +import { Address } from "viem"; + +import { coreVTokenAbi, protocolShareReserveAbi, tokenConverterAbi, vBnbAdminAbi } from "../config/abis/generated"; import addresses, { underlyingToVTokens } from "../config/addresses"; import { SUPPORTED_CHAINS } from "../config/chains"; -import { getPublicClient, getWalletClient } from "../config/clients"; -import TokenConverterBot from "./TokenConverterBot"; -import formatTokenConverterConfigs from "./formatTokenConverterConfigs"; -import { parsePath } from "./path"; - -interface BalanceResult { - tokenConverter: Address; - assetIn: { address: Address; balance: bigint }; - assetOut: { address: Address; balance: bigint }; -} +import publicClient from "../config/clients/publicClient"; +import walletClient from "../config/clients/walletClient"; +import TokenConverter from "./TokenConverter"; +import readCoreMarkets from "./queries/read/readCoreMarkets"; +import readIsolatedMarkets from "./queries/read/readIsolatedMarkets"; +import readTokenConverterConfigs from "./queries/read/readTokenConverterConfigs"; +import readTokenConvertersTokenBalances, { BalanceResult } from "./queries/read/readTokenConvertersTokenBalances"; +import type { Pool } from "./types"; const network = process.env.FORKED_NETWORK as SUPPORTED_CHAINS; -const client = getPublicClient(network); -const wallet = getWalletClient(network); +const isFulfilled = (input: PromiseSettledResult): input is PromiseFulfilledResult => + input.status === "fulfilled"; -const getCoreMarkets = async () => { - const markets = await client.readContract({ - address: addresses.Unitroller as Address, - abi: coreComptrollerAbi, - functionName: "getAllMarkets", - }); - return markets; -}; - -const formatResults = ( - results: ( - | { - error: Error; - result?: undefined; - status: "failure"; - } - | { - error?: undefined; - result: unknown; - status: "success"; - } - )[], - assetIn: Address, - assetOut: Address, - tokenConverters: Address[], -) => { - const chunkSize = 2; - for (let i = 0; i < results.length; i += chunkSize) { - const index = (i + chunkSize) / chunkSize - 1; - const tokenConverter = tokenConverters[index]; - - const curr = results.slice(i, i + chunkSize); - - return { - tokenConverter, - assetIn: { address: assetIn, balance: curr[0].result as bigint }, - assetOut: { address: assetOut, balance: curr[1].result as bigint }, - }; - } -}; - -const getBalances = async (assetIn: Address, assetOut: Address, tokenConverters: Address[]) => { - const corePoolMarkets = await getCoreMarkets(); - const results = await client.multicall({ - contracts: [ - { - address: addresses.ProtocolShareReserve as Address, - abi: protocolShareReserveAbi, - functionName: "releaseFunds", - args: [addresses.Unitroller, corePoolMarkets], - }, - ...tokenConverters.reduce((acc, curr) => { - acc = acc.concat( - { - address: assetIn as Address, - abi: coreVTokenAbi, - functionName: "balanceOf", - args: [curr], - }, - { - address: assetOut as Address, - abi: coreVTokenAbi, - functionName: "balanceOf", - args: [curr], - }, - ); - return acc; - }, [] as { address: Address; abi: Abi; functionName: string; args?: readonly unknown[] | undefined }[]), - ], - }); - // Release funds will be empty - results.shift(); - const formattedResults = formatResults(results, assetIn, assetOut, tokenConverters); - return formattedResults; -}; +const checkForTrades = async (values: PromiseSettledResult[]) => { + const trades = values.reduce((acc, curr) => { + if (isFulfilled(curr)) { + acc = acc.concat(curr.value.filter(v => v.assetOut.balance > 0)); + } + return acc; + }, [] as BalanceResult[]); -const checkForTrade = async (values: { value: BalanceResult }[]) => { - const trades = values.filter(v => { - return v.value.assetOut.balance > 0; - }); return trades; }; const executeTrade = async (t: BalanceResult) => { - const bot = new TokenConverterBot(network); + const tokenConverter = new TokenConverter(network); const vTokens = underlyingToVTokens[t.assetOut.address]; if (vTokens.core) { - await wallet.writeContract({ + await walletClient.writeContract({ address: addresses.ProtocolShareReserve as Address, abi: protocolShareReserveAbi, functionName: "releaseFunds", - args: [addresses.Unitroller, [vTokens.core]], + args: [addresses.Unitroller as Address, [vTokens.core]], }); } if (vTokens.isolated) { - await wallet.writeContract({ - address: addresses.ProtocolShareReserve as Address, - abi: protocolShareReserveAbi, - functionName: "releaseFunds", - args: [vTokens.isolated[0], [vTokens.isolated[1]]], - }); + for (const vToken of vTokens.isolated) { + await walletClient.writeContract({ + address: addresses.ProtocolShareReserve as Address, + abi: protocolShareReserveAbi, + functionName: "releaseFunds", + args: [vToken[0], [vToken[1]]], + }); + } } - const { result: amountIn } = await client.simulateContract({ + const { result: amountIn } = await publicClient.simulateContract({ address: t.tokenConverter as Address, abi: tokenConverterAbi, functionName: "getUpdatedAmountIn", args: [t.assetOut.balance, t.assetIn.address, t.assetOut.address], }); - await bot.sanityCheck(); + const trade = await tokenConverter.getBestTrade(t.assetIn.address, t.assetOut.address, amountIn[1]); - const trade = await bot.getBestTrade(t.assetIn.address, t.assetOut.address, amountIn[1]); + const minIncome = t.assetOut.balance - trade.inputAmount.numerator; - const fee = BigInt(trade.routes[0].pools[0].fee); - const flashPayment = trade.inputAmount.numerator * (fee / 100000n + 1n); - const minIncome = t.assetOut.balance - flashPayment; - const path = parsePath([t.assetIn.address, fee, t.assetOut.address]); - await bot.arbitrage(t.tokenConverter, path, amountIn[1], minIncome); + await tokenConverter.arbitrage(t.tokenConverter, trade, amountIn[1], minIncome); }; -const main = async () => { - const { - data: { tokenConverters }, - } = await subgraphClient.getTokenConverters(); - const corePoolMarkets = await getCoreMarkets(); - await Promise.allSettled( - corePoolMarkets.map(async market => { - await wallet.writeContract({ - address: market, - abi: coreVTokenAbi, - functionName: "accrueInterest", - }); - }), - ); - - const totalReserves = await client.readContract({ +/** + * Checks total reserves and available cash and then uses the vBNB admin + * to send the reserves ProtocolShare Reserve to be distributed + */ +const reduceReserves = async () => { + const totalReserves = await publicClient.readContract({ address: addresses.vBNB as Address, abi: coreVTokenAbi, functionName: "totalReserves", }); - const cash = await client.readContract({ + const cash = await publicClient.readContract({ address: addresses.vBNB as Address, abi: coreVTokenAbi, functionName: "getCash", }); if (cash > 0) { - await wallet.writeContract({ + await walletClient.writeContract({ address: addresses.VBNBAdmin as Address, abi: vBnbAdminAbi, functionName: "reduceReserves", @@ -189,13 +96,41 @@ const main = async () => { } else { console.error("Unable to reduce reservers vBNB Admin is out of cash."); } +}; + +const accrueInterest = async (allPools: Pool[]) => { + const allMarkets = allPools.reduce((acc, curr) => { + acc.concat(curr[1]); + return acc; + }, [] as Address[]); + + // Accrue Interest in all markets + await Promise.allSettled( + allMarkets.map(async market => { + await walletClient.writeContract({ + address: market, + abi: coreVTokenAbi, + functionName: "accrueInterest", + }); + }), + ); +}; + +const main = async () => { + const tokenConverterConfigs = await readTokenConverterConfigs(); + const corePoolMarkets = await readCoreMarkets(); + const isolatedPoolsMarkets = await readIsolatedMarkets(); + const allPools = [...corePoolMarkets, ...isolatedPoolsMarkets]; + + await accrueInterest(allPools); + await reduceReserves(); - const tokenConverterConfigs = formatTokenConverterConfigs(tokenConverters); const results = await Promise.allSettled( Object.keys(tokenConverterConfigs).map(async tokenIn => { const results = await Promise.allSettled( Object.keys(tokenConverterConfigs[tokenIn as Address]).map(async tokenOut => { - const result = await getBalances( + const result = await readTokenConvertersTokenBalances( + allPools, tokenIn as Address, tokenOut as Address, tokenConverterConfigs[tokenIn as Address][tokenOut as Address], @@ -208,15 +143,13 @@ const main = async () => { ); for (const r of results) { - // @ts-ignore - const trades = await checkForTrade(r?.value); - for (const t of trades) { - await executeTrade(t.value); + if (isFulfilled[]>(r)) { + const trades = await checkForTrades(r.value); + for (const t of trades) { + await executeTrade(t); + } } } }; -main().catch(error => { - console.error(error); - process.exit(1); -}); +export default main(); diff --git a/packages/token-converter-bot/src/converter-bot/queries/read/readCoreMarkets.ts b/packages/token-converter-bot/src/converter-bot/queries/read/readCoreMarkets.ts new file mode 100644 index 00000000..ec5fe76f --- /dev/null +++ b/packages/token-converter-bot/src/converter-bot/queries/read/readCoreMarkets.ts @@ -0,0 +1,17 @@ +import { Address } from "viem"; + +import { coreComptrollerAbi } from "../../../config/abis/generated"; +import addresses from "../../../config/addresses"; +import publicClient from "../../../config/clients/publicClient"; +import type { Pool } from "../../types"; + +const readCoreMarkets = async (): Promise => { + const markets = await publicClient.readContract({ + address: addresses.Unitroller as Address, + abi: coreComptrollerAbi, + functionName: "getAllMarkets", + }); + return [[addresses.Unitroller as Address, markets]]; +}; + +export default readCoreMarkets; diff --git a/packages/token-converter-bot/src/converter-bot/queries/read/readIsolatedMarkets.ts b/packages/token-converter-bot/src/converter-bot/queries/read/readIsolatedMarkets.ts new file mode 100644 index 00000000..9cc9c26f --- /dev/null +++ b/packages/token-converter-bot/src/converter-bot/queries/read/readIsolatedMarkets.ts @@ -0,0 +1,18 @@ +import { Address } from "viem"; + +import { poolLensAbi } from "../../../config/abis/generated"; +import addresses from "../../../config/addresses"; +import publicClient from "../../../config/clients/publicClient"; +import type { Pool } from "../../types"; + +const readIsolatedMarkets = async (): Promise => { + const markets = await publicClient.readContract({ + address: addresses.PoolLens as Address, + abi: poolLensAbi, + functionName: "getAllPools", + args: [addresses.PoolRegistry as Address], + }); + return markets.map((pool): [Address, Address[]] => [pool.comptroller, pool.vTokens.map(vToken => vToken.vToken)]); +}; + +export default readIsolatedMarkets; diff --git a/packages/token-converter-bot/src/converter-bot/formatTokenConverterConfigs.ts b/packages/token-converter-bot/src/converter-bot/queries/read/readTokenConverterConfigs.ts similarity index 53% rename from packages/token-converter-bot/src/converter-bot/formatTokenConverterConfigs.ts rename to packages/token-converter-bot/src/converter-bot/queries/read/readTokenConverterConfigs.ts index 08637591..983a2dfe 100644 --- a/packages/token-converter-bot/src/converter-bot/formatTokenConverterConfigs.ts +++ b/packages/token-converter-bot/src/converter-bot/queries/read/readTokenConverterConfigs.ts @@ -1,6 +1,7 @@ import { Address } from "viem"; -import { TokenConvertersQuery } from "../../subgraph-client/.graphclient"; +import subgraphClient from "../../../../subgraph-client"; +import { TokenConvertersQuery } from "../../../../subgraph-client/.graphclient"; const formatTokenConverterConfigs = (data: TokenConvertersQuery["tokenConverters"]) => data.reduce((acc, curr) => { @@ -14,4 +15,12 @@ const formatTokenConverterConfigs = (data: TokenConvertersQuery["tokenConverters return acc; }, {} as Record>); -export default formatTokenConverterConfigs; +const readTokenConverterConfigs = async () => { + const { + data: { tokenConverters }, + } = await subgraphClient.getTokenConverters(); + const tokenConverterConfigs = formatTokenConverterConfigs(tokenConverters); + return tokenConverterConfigs; +}; + +export default readTokenConverterConfigs; diff --git a/packages/token-converter-bot/src/converter-bot/queries/read/readTokenConvertersTokenBalances.ts b/packages/token-converter-bot/src/converter-bot/queries/read/readTokenConvertersTokenBalances.ts new file mode 100644 index 00000000..eacfe892 --- /dev/null +++ b/packages/token-converter-bot/src/converter-bot/queries/read/readTokenConvertersTokenBalances.ts @@ -0,0 +1,90 @@ +import "dotenv/config"; + +import { Abi, Address } from "viem"; + +import { coreVTokenAbi, protocolShareReserveAbi } from "../../../config/abis/generated"; +import addresses from "../../../config/addresses"; +import publicClient from "../../../config/clients/publicClient"; + +export interface BalanceResult { + tokenConverter: Address; + assetIn: { address: Address; balance: bigint }; + assetOut: { address: Address; balance: bigint }; +} + +const formatResults = ( + results: ( + | { + error: Error; + result?: undefined; + status: "failure"; + } + | { + error?: undefined; + result: unknown; + status: "success"; + } + )[], + assetIn: Address, + assetOut: Address, + tokenConverters: Address[], +): BalanceResult[] => { + const chunkSize = 2; + const balances: BalanceResult[] = []; + for (let i = 0; i < results.length; i += chunkSize) { + const index = (i + chunkSize) / chunkSize - 1; + const tokenConverter = tokenConverters[index]; + + const curr = results.slice(i, i + chunkSize); + + balances.push({ + tokenConverter, + assetIn: { address: assetIn, balance: curr[0].result as bigint }, + assetOut: { address: assetOut, balance: curr[1].result as bigint }, + }); + } + return balances; +}; + +const readTokenConvertersTokenBalances = async ( + pools: [Address, readonly Address[]][], + assetIn: Address, + assetOut: Address, + tokenConverters: Address[], +): Promise => { + const releaseFundsCalls = pools.map(pool => ({ + address: addresses.ProtocolShareReserve as Address, + abi: protocolShareReserveAbi, + functionName: "releaseFunds", + args: pool, + })); + const results = await publicClient.multicall({ + contracts: [ + ...releaseFundsCalls, + ...tokenConverters.reduce((acc, curr) => { + acc = acc.concat([ + { + address: assetIn as Address, + abi: coreVTokenAbi, + functionName: "balanceOf", + args: [curr], + }, + { + address: assetOut as Address, + abi: coreVTokenAbi, + functionName: "balanceOf", + args: [curr], + }, + ]); + return acc; + }, [] as { address: Address; abi: Abi; functionName: string; args?: readonly unknown[] | undefined }[]), + ], + }); + + // Release funds will be empty + results.splice(0, releaseFundsCalls.length); + const formattedResults = formatResults(results, assetIn, assetOut, tokenConverters); + return formattedResults; +}; + +export default readTokenConvertersTokenBalances; diff --git a/packages/token-converter-bot/src/converter-bot/types.ts b/packages/token-converter-bot/src/converter-bot/types.ts new file mode 100644 index 00000000..cf03fb92 --- /dev/null +++ b/packages/token-converter-bot/src/converter-bot/types.ts @@ -0,0 +1,3 @@ +import { Address } from "viem"; + +export type Pool = [Address, readonly Address[]]; diff --git a/src/module.d.ts b/packages/token-converter-bot/src/module.d.ts similarity index 100% rename from src/module.d.ts rename to packages/token-converter-bot/src/module.d.ts diff --git a/subgraph-client/.graphclientrc.yml b/packages/token-converter-bot/subgraph-client/.graphclientrc.yml similarity index 88% rename from subgraph-client/.graphclientrc.yml rename to packages/token-converter-bot/subgraph-client/.graphclientrc.yml index 99d495e1..5ed282c6 100644 --- a/subgraph-client/.graphclientrc.yml +++ b/packages/token-converter-bot/subgraph-client/.graphclientrc.yml @@ -5,4 +5,4 @@ sources: endpoint: https://api.thegraph.com/subgraphs/name/venusprotocol/venus-protocol-reserve-chapel documents: - - "../**/*.graphql" + - "./queries/*.graphql" diff --git a/subgraph-client/index.ts b/packages/token-converter-bot/subgraph-client/index.ts similarity index 100% rename from subgraph-client/index.ts rename to packages/token-converter-bot/subgraph-client/index.ts diff --git a/src/queries/TokenConvertersQuery.graphql b/packages/token-converter-bot/subgraph-client/queries/TokenConvertersQuery.graphql similarity index 88% rename from src/queries/TokenConvertersQuery.graphql rename to packages/token-converter-bot/subgraph-client/queries/TokenConvertersQuery.graphql index dbf929a3..5145bf39 100644 --- a/src/queries/TokenConvertersQuery.graphql +++ b/packages/token-converter-bot/subgraph-client/queries/TokenConvertersQuery.graphql @@ -13,6 +13,5 @@ query TokenConverters { incentive access } - paused(filter: Boolean): true } } diff --git a/packages/token-converter-bot/tsconfig.json b/packages/token-converter-bot/tsconfig.json index 41716a7d..220e8554 100644 --- a/packages/token-converter-bot/tsconfig.json +++ b/packages/token-converter-bot/tsconfig.json @@ -1,3 +1,7 @@ { - "extends": "../../tsconfig" + "extends": "../../tsconfig", + "compilerOptions": { + "skipLibCheck": true, + }, + "files": ["src/module.d.ts", "src/environment.d.ts"], } diff --git a/yarn.lock b/yarn.lock index 638e17e7..97ea6d7e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -16,7 +16,7 @@ __metadata: languageName: node linkType: hard -"@ampproject/remapping@npm:^2.1.0": +"@ampproject/remapping@npm:^2.1.0, @ampproject/remapping@npm:^2.2.0": version: 2.2.1 resolution: "@ampproject/remapping@npm:2.2.1" dependencies: @@ -26,6 +26,58 @@ __metadata: languageName: node linkType: hard +"@ardatan/fast-json-stringify@npm:^0.0.6": + version: 0.0.6 + resolution: "@ardatan/fast-json-stringify@npm:0.0.6" + dependencies: + "@fastify/deepmerge": ^1.0.0 + fast-deep-equal: ^3.1.3 + rfdc: ^1.2.0 + peerDependencies: + ajv: ^8.10.0 + ajv-formats: ^2.1.1 + checksum: 16a1ee50c6863fc03cc6efb949dd1e3d5843c584f4231f3b9fb33b7f3bcd85a9ab7aac5f02e683cf37c94c272d37b3495d724beadcf6b1a14eafe7bf3d85f91b + languageName: node + linkType: hard + +"@ardatan/relay-compiler@npm:12.0.0": + version: 12.0.0 + resolution: "@ardatan/relay-compiler@npm:12.0.0" + dependencies: + "@babel/core": ^7.14.0 + "@babel/generator": ^7.14.0 + "@babel/parser": ^7.14.0 + "@babel/runtime": ^7.0.0 + "@babel/traverse": ^7.14.0 + "@babel/types": ^7.0.0 + babel-preset-fbjs: ^3.4.0 + chalk: ^4.0.0 + fb-watchman: ^2.0.0 + fbjs: ^3.0.0 + glob: ^7.1.1 + immutable: ~3.7.6 + invariant: ^2.2.4 + nullthrows: ^1.1.1 + relay-runtime: 12.0.0 + signedsource: ^1.0.0 + yargs: ^15.3.1 + peerDependencies: + graphql: "*" + bin: + relay-compiler: bin/relay-compiler + checksum: f0cec120d02961ee8652e0dde72d9e425bc97cad5d0f767d8764cfd30952294eb2838432f33e4da8bb6999d0c13dcd1df128280666bfea373294d98aa8033ae7 + languageName: node + linkType: hard + +"@ardatan/sync-fetch@npm:^0.0.1": + version: 0.0.1 + resolution: "@ardatan/sync-fetch@npm:0.0.1" + dependencies: + node-fetch: ^2.6.1 + checksum: af39bdfb4c2b35bd2c6acc540a5e302730dae17e73d3a18cd1a4aa50c1c741cb1869dffdef1379c491da5ad2e3cfa2bf3a8064e6046c12b46c6a97f54f100a8d + languageName: node + linkType: hard + "@aws-crypto/sha256-js@npm:1.2.2": version: 1.2.2 resolution: "@aws-crypto/sha256-js@npm:1.2.2" @@ -86,7 +138,7 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.23.5": +"@babel/compat-data@npm:^7.20.5, @babel/compat-data@npm:^7.23.5": version: 7.23.5 resolution: "@babel/compat-data@npm:7.23.5" checksum: 06ce244cda5763295a0ea924728c09bae57d35713b675175227278896946f922a63edf803c322f855a3878323d48d0255a2a3023409d2a123483c8a69ebb4744 @@ -116,6 +168,29 @@ __metadata: languageName: node linkType: hard +"@babel/core@npm:^7.14.0": + version: 7.23.9 + resolution: "@babel/core@npm:7.23.9" + dependencies: + "@ampproject/remapping": ^2.2.0 + "@babel/code-frame": ^7.23.5 + "@babel/generator": ^7.23.6 + "@babel/helper-compilation-targets": ^7.23.6 + "@babel/helper-module-transforms": ^7.23.3 + "@babel/helpers": ^7.23.9 + "@babel/parser": ^7.23.9 + "@babel/template": ^7.23.9 + "@babel/traverse": ^7.23.9 + "@babel/types": ^7.23.9 + convert-source-map: ^2.0.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.3 + semver: ^6.3.1 + checksum: 634a511f74db52a5f5a283c1121f25e2227b006c095b84a02a40a9213842489cd82dc7d61cdc74e10b5bcd9bb0a4e28bab47635b54c7e2256d47ab57356e2a76 + languageName: node + linkType: hard + "@babel/generator@npm:7.17.7": version: 7.17.7 resolution: "@babel/generator@npm:7.17.7" @@ -127,7 +202,7 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.17.3, @babel/generator@npm:^7.17.7, @babel/generator@npm:^7.23.6": +"@babel/generator@npm:^7.14.0, @babel/generator@npm:^7.17.3, @babel/generator@npm:^7.17.7, @babel/generator@npm:^7.23.6": version: 7.23.6 resolution: "@babel/generator@npm:7.23.6" dependencies: @@ -139,7 +214,16 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.17.7": +"@babel/helper-annotate-as-pure@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-annotate-as-pure@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: 53da330f1835c46f26b7bf4da31f7a496dee9fd8696cca12366b94ba19d97421ce519a74a837f687749318f94d1a37f8d1abcbf35e8ed22c32d16373b2f6198d + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.20.7, @babel/helper-compilation-targets@npm:^7.22.15, @babel/helper-compilation-targets@npm:^7.23.6": version: 7.23.6 resolution: "@babel/helper-compilation-targets@npm:7.23.6" dependencies: @@ -152,6 +236,25 @@ __metadata: languageName: node linkType: hard +"@babel/helper-create-class-features-plugin@npm:^7.18.6": + version: 7.23.10 + resolution: "@babel/helper-create-class-features-plugin@npm:7.23.10" + dependencies: + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-function-name": ^7.23.0 + "@babel/helper-member-expression-to-functions": ^7.23.0 + "@babel/helper-optimise-call-expression": ^7.22.5 + "@babel/helper-replace-supers": ^7.22.20 + "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.6 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: ff0730c21f0e73b9e314701bca6568bb5885dff2aa3c32b1e2e3d18ed2818f56851b9ffdbe2e8008c9bb94b265a1443883ae4c1ca5dde278ce71ac4218006d68 + languageName: node + linkType: hard + "@babel/helper-environment-visitor@npm:^7.16.7, @babel/helper-environment-visitor@npm:^7.22.20": version: 7.22.20 resolution: "@babel/helper-environment-visitor@npm:7.22.20" @@ -178,6 +281,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-member-expression-to-functions@npm:^7.22.15, @babel/helper-member-expression-to-functions@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/helper-member-expression-to-functions@npm:7.23.0" + dependencies: + "@babel/types": ^7.23.0 + checksum: 494659361370c979ada711ca685e2efe9460683c36db1b283b446122596602c901e291e09f2f980ecedfe6e0f2bd5386cb59768285446530df10c14df1024e75 + languageName: node + linkType: hard + "@babel/helper-module-imports@npm:^7.22.15": version: 7.22.15 resolution: "@babel/helper-module-imports@npm:7.22.15" @@ -187,7 +299,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.17.7": +"@babel/helper-module-transforms@npm:^7.17.7, @babel/helper-module-transforms@npm:^7.23.3": version: 7.23.3 resolution: "@babel/helper-module-transforms@npm:7.23.3" dependencies: @@ -202,6 +314,35 @@ __metadata: languageName: node linkType: hard +"@babel/helper-optimise-call-expression@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-optimise-call-expression@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: c70ef6cc6b6ed32eeeec4482127e8be5451d0e5282d5495d5d569d39eb04d7f1d66ec99b327f45d1d5842a9ad8c22d48567e93fc502003a47de78d122e355f7c + languageName: node + linkType: hard + +"@babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.8.0": + version: 7.22.5 + resolution: "@babel/helper-plugin-utils@npm:7.22.5" + checksum: c0fc7227076b6041acd2f0e818145d2e8c41968cc52fb5ca70eed48e21b8fe6dd88a0a91cbddf4951e33647336eb5ae184747ca706817ca3bef5e9e905151ff5 + languageName: node + linkType: hard + +"@babel/helper-replace-supers@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-replace-supers@npm:7.22.20" + dependencies: + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-member-expression-to-functions": ^7.22.15 + "@babel/helper-optimise-call-expression": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: a0008332e24daedea2e9498733e3c39b389d6d4512637e000f96f62b797e702ee24a407ccbcd7a236a551590a38f31282829a8ef35c50a3c0457d88218cae639 + languageName: node + linkType: hard + "@babel/helper-simple-access@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-simple-access@npm:7.22.5" @@ -211,6 +352,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: 1012ef2295eb12dc073f2b9edf3425661e9b8432a3387e62a8bc27c42963f1f216ab3124228015c748770b2257b4f1fda882ca8fa34c0bf485e929ae5bc45244 + languageName: node + linkType: hard + "@babel/helper-split-export-declaration@npm:^7.16.7, @babel/helper-split-export-declaration@npm:^7.22.6": version: 7.22.6 resolution: "@babel/helper-split-export-declaration@npm:7.22.6" @@ -241,7 +391,7 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.17.8": +"@babel/helpers@npm:^7.17.8, @babel/helpers@npm:^7.23.9": version: 7.23.9 resolution: "@babel/helpers@npm:7.23.9" dependencies: @@ -272,7 +422,7 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.17.3, @babel/parser@npm:^7.17.8, @babel/parser@npm:^7.23.6, @babel/parser@npm:^7.23.9": +"@babel/parser@npm:^7.14.0, @babel/parser@npm:^7.16.8, @babel/parser@npm:^7.17.3, @babel/parser@npm:^7.17.8, @babel/parser@npm:^7.23.6, @babel/parser@npm:^7.23.9": version: 7.23.9 resolution: "@babel/parser@npm:7.23.9" bin: @@ -281,6 +431,337 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-proposal-class-properties@npm:^7.0.0": + version: 7.18.6 + resolution: "@babel/plugin-proposal-class-properties@npm:7.18.6" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 49a78a2773ec0db56e915d9797e44fd079ab8a9b2e1716e0df07c92532f2c65d76aeda9543883916b8e0ff13606afeffa67c5b93d05b607bc87653ad18a91422 + languageName: node + linkType: hard + +"@babel/plugin-proposal-object-rest-spread@npm:^7.0.0": + version: 7.20.7 + resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.20.7" + dependencies: + "@babel/compat-data": ^7.20.5 + "@babel/helper-compilation-targets": ^7.20.7 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/plugin-syntax-object-rest-spread": ^7.8.3 + "@babel/plugin-transform-parameters": ^7.20.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 1329db17009964bc644484c660eab717cb3ca63ac0ab0f67c651a028d1bc2ead51dc4064caea283e46994f1b7221670a35cbc0b4beb6273f55e915494b5aa0b2 + languageName: node + linkType: hard + +"@babel/plugin-syntax-class-properties@npm:^7.0.0": + version: 7.12.13 + resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" + dependencies: + "@babel/helper-plugin-utils": ^7.12.13 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 24f34b196d6342f28d4bad303612d7ff566ab0a013ce89e775d98d6f832969462e7235f3e7eaf17678a533d4be0ba45d3ae34ab4e5a9dcbda5d98d49e5efa2fc + languageName: node + linkType: hard + +"@babel/plugin-syntax-flow@npm:^7.0.0, @babel/plugin-syntax-flow@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-syntax-flow@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: c6e6f355d6ace5f4a9e7bb19f1fed2398aeb9b62c4c671a189d81b124f9f5bb77c4225b6e85e19339268c60a021c1e49104e450375de5e6bb70612190d9678af + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-assertions@npm:^7.20.0": + version: 7.23.3 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 883e6b35b2da205138caab832d54505271a3fee3fc1e8dc0894502434fc2b5d517cbe93bbfbfef8068a0fb6ec48ebc9eef3f605200a489065ba43d8cddc1c9a7 + languageName: node + linkType: hard + +"@babel/plugin-syntax-jsx@npm:^7.0.0, @babel/plugin-syntax-jsx@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-syntax-jsx@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 89037694314a74e7f0e7a9c8d3793af5bf6b23d80950c29b360db1c66859d67f60711ea437e70ad6b5b4b29affe17eababda841b6c01107c2b638e0493bafb4e + languageName: node + linkType: hard + +"@babel/plugin-syntax-object-rest-spread@npm:^7.0.0, @babel/plugin-syntax-object-rest-spread@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: fddcf581a57f77e80eb6b981b10658421bc321ba5f0a5b754118c6a92a5448f12a0c336f77b8abf734841e102e5126d69110a306eadb03ca3e1547cab31f5cbf + languageName: node + linkType: hard + +"@babel/plugin-transform-arrow-functions@npm:^7.0.0": + version: 7.23.3 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 1e99118176e5366c2636064d09477016ab5272b2a92e78b8edb571d20bc3eaa881789a905b20042942c3c2d04efc530726cf703f937226db5ebc495f5d067e66 + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoped-functions@npm:^7.0.0": + version: 7.23.3 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: e63b16d94ee5f4d917e669da3db5ea53d1e7e79141a2ec873c1e644678cdafe98daa556d0d359963c827863d6b3665d23d4938a94a4c5053a1619c4ebd01d020 + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoping@npm:^7.0.0": + version: 7.23.4 + resolution: "@babel/plugin-transform-block-scoping@npm:7.23.4" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: fc4b2100dd9f2c47d694b4b35ae8153214ccb4e24ef545c259a9db17211b18b6a430f22799b56db8f6844deaeaa201af45a03331d0c80cc28b0c4e3c814570e4 + languageName: node + linkType: hard + +"@babel/plugin-transform-classes@npm:^7.0.0": + version: 7.23.8 + resolution: "@babel/plugin-transform-classes@npm:7.23.8" + dependencies: + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-compilation-targets": ^7.23.6 + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-function-name": ^7.23.0 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-replace-supers": ^7.22.20 + "@babel/helper-split-export-declaration": ^7.22.6 + globals: ^11.1.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7dee6cebe52131d2d16944f36e1fdb9d4b24f44d0e7e450f93a44435d001f17cc0789a4cb6b15ec67c8e484581b8a730b5c3ec374470f29ff0133086955b8c58 + languageName: node + linkType: hard + +"@babel/plugin-transform-computed-properties@npm:^7.0.0": + version: 7.23.3 + resolution: "@babel/plugin-transform-computed-properties@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/template": ^7.22.15 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 80452661dc25a0956f89fe98cb562e8637a9556fb6c00d312c57653ce7df8798f58d138603c7e1aad96614ee9ccd10c47e50ab9ded6b6eded5adeb230d2a982e + languageName: node + linkType: hard + +"@babel/plugin-transform-destructuring@npm:^7.0.0": + version: 7.23.3 + resolution: "@babel/plugin-transform-destructuring@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 9e015099877272501162419bfe781689aec5c462cd2aec752ee22288f209eec65969ff11b8fdadca2eaddea71d705d3bba5b9c60752fcc1be67874fcec687105 + languageName: node + linkType: hard + +"@babel/plugin-transform-flow-strip-types@npm:^7.0.0": + version: 7.23.3 + resolution: "@babel/plugin-transform-flow-strip-types@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-flow": ^7.23.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: de38cc5cf948bc19405ea041292181527a36f59f08d787a590415fac36e9b0c7992f0d3e2fd3b9402089bafdaa1a893291a0edf15beebfd29bdedbbe582fee9b + languageName: node + linkType: hard + +"@babel/plugin-transform-for-of@npm:^7.0.0": + version: 7.23.6 + resolution: "@babel/plugin-transform-for-of@npm:7.23.6" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 228c060aa61f6aa89dc447170075f8214863b94f830624e74ade99c1a09316897c12d76e848460b0b506593e58dbc42739af6dc4cb0fe9b84dffe4a596050a36 + languageName: node + linkType: hard + +"@babel/plugin-transform-function-name@npm:^7.0.0": + version: 7.23.3 + resolution: "@babel/plugin-transform-function-name@npm:7.23.3" + dependencies: + "@babel/helper-compilation-targets": ^7.22.15 + "@babel/helper-function-name": ^7.23.0 + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 355c6dbe07c919575ad42b2f7e020f320866d72f8b79181a16f8e0cd424a2c761d979f03f47d583d9471b55dcd68a8a9d829b58e1eebcd572145b934b48975a6 + languageName: node + linkType: hard + +"@babel/plugin-transform-literals@npm:^7.0.0": + version: 7.23.3 + resolution: "@babel/plugin-transform-literals@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 519a544cd58586b9001c4c9b18da25a62f17d23c48600ff7a685d75ca9eb18d2c5e8f5476f067f0a8f1fea2a31107eff950b9864833061e6076dcc4bdc3e71ed + languageName: node + linkType: hard + +"@babel/plugin-transform-member-expression-literals@npm:^7.0.0": + version: 7.23.3 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 95cec13c36d447c5aa6b8e4c778b897eeba66dcb675edef01e0d2afcec9e8cb9726baf4f81b4bbae7a782595aed72e6a0d44ffb773272c3ca180fada99bf92db + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-commonjs@npm:^7.0.0": + version: 7.23.3 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.23.3" + dependencies: + "@babel/helper-module-transforms": ^7.23.3 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-simple-access": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 720a231ceade4ae4d2632478db4e7fecf21987d444942b72d523487ac8d715ca97de6c8f415c71e939595e1a4776403e7dc24ed68fe9125ad4acf57753c9bff7 + languageName: node + linkType: hard + +"@babel/plugin-transform-object-super@npm:^7.0.0": + version: 7.23.3 + resolution: "@babel/plugin-transform-object-super@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-replace-supers": ^7.22.20 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: e495497186f621fa79026e183b4f1fbb172fd9df812cbd2d7f02c05b08adbe58012b1a6eb6dd58d11a30343f6ec80d0f4074f9b501d70aa1c94df76d59164c53 + languageName: node + linkType: hard + +"@babel/plugin-transform-parameters@npm:^7.0.0, @babel/plugin-transform-parameters@npm:^7.20.7": + version: 7.23.3 + resolution: "@babel/plugin-transform-parameters@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a735b3e85316d17ec102e3d3d1b6993b429bdb3b494651c9d754e3b7d270462ee1f1a126ccd5e3d871af5e683727e9ef98c9d34d4a42204fffaabff91052ed16 + languageName: node + linkType: hard + +"@babel/plugin-transform-property-literals@npm:^7.0.0": + version: 7.23.3 + resolution: "@babel/plugin-transform-property-literals@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 16b048c8e87f25095f6d53634ab7912992f78e6997a6ff549edc3cf519db4fca01c7b4e0798530d7f6a05228ceee479251245cdd850a5531c6e6f404104d6cc9 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-display-name@npm:^7.0.0": + version: 7.23.3 + resolution: "@babel/plugin-transform-react-display-name@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7f86964e8434d3ddbd3c81d2690c9b66dbf1cd8bd9512e2e24500e9fa8cf378bc52c0853270b3b82143aba5965aec04721df7abdb768f952b44f5c6e0b198779 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx@npm:^7.0.0": + version: 7.23.4 + resolution: "@babel/plugin-transform-react-jsx@npm:7.23.4" + dependencies: + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-module-imports": ^7.22.15 + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/plugin-syntax-jsx": ^7.23.3 + "@babel/types": ^7.23.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d8b8c52e8e22e833bf77c8d1a53b0a57d1fd52ba9596a319d572de79446a8ed9d95521035bc1175c1589d1a6a34600d2e678fa81d81bac8fac121137097f1f0a + languageName: node + linkType: hard + +"@babel/plugin-transform-shorthand-properties@npm:^7.0.0": + version: 7.23.3 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 5d677a03676f9fff969b0246c423d64d77502e90a832665dc872a5a5e05e5708161ce1effd56bb3c0f2c20a1112fca874be57c8a759d8b08152755519281f326 + languageName: node + linkType: hard + +"@babel/plugin-transform-spread@npm:^7.0.0": + version: 7.23.3 + resolution: "@babel/plugin-transform-spread@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8fd5cac201e77a0b4825745f4e07a25f923842f282f006b3a79223c00f61075c8868d12eafec86b2642cd0b32077cdd32314e27bcb75ee5e6a68c0144140dcf2 + languageName: node + linkType: hard + +"@babel/plugin-transform-template-literals@npm:^7.0.0": + version: 7.23.3 + resolution: "@babel/plugin-transform-template-literals@npm:7.23.3" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b16c5cb0b8796be0118e9c144d15bdc0d20a7f3f59009c6303a6e9a8b74c146eceb3f05186f5b97afcba7cfa87e34c1585a22186e3d5b22f2fd3d27d959d92b2 + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.18.3": + version: 7.23.9 + resolution: "@babel/runtime@npm:7.23.9" + dependencies: + regenerator-runtime: ^0.14.0 + checksum: 6bbebe8d27c0c2dd275d1ac197fc1a6c00e18dab68cc7aaff0adc3195b45862bae9c4cc58975629004b0213955b2ed91e99eccb3d9b39cabea246c657323d667 + languageName: node + linkType: hard + "@babel/template@npm:^7.16.7, @babel/template@npm:^7.22.15, @babel/template@npm:^7.23.9": version: 7.23.9 resolution: "@babel/template@npm:7.23.9" @@ -310,7 +791,7 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.17.3, @babel/traverse@npm:^7.23.9": +"@babel/traverse@npm:^7.14.0, @babel/traverse@npm:^7.16.8, @babel/traverse@npm:^7.17.3, @babel/traverse@npm:^7.23.9": version: 7.23.9 resolution: "@babel/traverse@npm:7.23.9" dependencies: @@ -338,7 +819,7 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.17.0, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.6, @babel/types@npm:^7.23.9, @babel/types@npm:^7.8.3": +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.16.8, @babel/types@npm:^7.17.0, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.4, @babel/types@npm:^7.23.6, @babel/types@npm:^7.23.9, @babel/types@npm:^7.8.3": version: 7.23.9 resolution: "@babel/types@npm:7.23.9" dependencies: @@ -642,11 +1123,57 @@ __metadata: languageName: node linkType: hard -"@esbuild/aix-ppc64@npm:0.19.12": - version: 0.19.12 - resolution: "@esbuild/aix-ppc64@npm:0.19.12" - conditions: os=aix & cpu=ppc64 - languageName: node +"@envelop/core@npm:^3.0.4, @envelop/core@npm:^3.0.6": + version: 3.0.6 + resolution: "@envelop/core@npm:3.0.6" + dependencies: + "@envelop/types": 3.0.2 + tslib: ^2.5.0 + checksum: ccc1d1964875a7be0771ad76f057689699ae398e74a6526c2f70d37a3770fb1cacb1356aaeaef3d17084042331161273c8e2d8e4713cc62fd7f4f770d8f8a5d3 + languageName: node + linkType: hard + +"@envelop/extended-validation@npm:^2.0.6": + version: 2.0.6 + resolution: "@envelop/extended-validation@npm:2.0.6" + dependencies: + "@graphql-tools/utils": ^8.8.0 + tslib: ^2.5.0 + peerDependencies: + "@envelop/core": ^3.0.6 + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: 5d2172cd451d1b7248af1028c3a3cea0dd8fe9f416449f71fa91f9573acf3bb7c9ca59d3c817579dc30ac7f3abb9a4a528f549dceeac242a2230ab185b59faaa + languageName: node + linkType: hard + +"@envelop/types@npm:3.0.2": + version: 3.0.2 + resolution: "@envelop/types@npm:3.0.2" + dependencies: + tslib: ^2.5.0 + checksum: 605e63bd3a0be3ec0f465735531b8575151f508d02c02e07213e5a30a740e74d0bf5827dcac86432ecf95b782f7bc82de806188dda5ba24407680c495012ebb9 + languageName: node + linkType: hard + +"@envelop/validation-cache@npm:^5.1.2": + version: 5.1.3 + resolution: "@envelop/validation-cache@npm:5.1.3" + dependencies: + hash-it: ^6.0.0 + lru-cache: ^6.0.0 + tslib: ^2.5.0 + peerDependencies: + "@envelop/core": ^3.0.6 + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: a73b31a988e04ce3db2b4149ef57059aaeae934d70acbf070815315cbcffbe07743707ce544b1cce95f9ab2e173af87678ba43bea3b362f0a308f13f9f3543fe + languageName: node + linkType: hard + +"@esbuild/aix-ppc64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/aix-ppc64@npm:0.19.12" + conditions: os=aix & cpu=ppc64 + languageName: node linkType: hard "@esbuild/android-arm64@npm:0.19.12": @@ -1150,157 +1677,1139 @@ __metadata: languageName: node linkType: hard -"@ethersproject/random@npm:5.7.0, @ethersproject/random@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/random@npm:5.7.0" +"@ethersproject/random@npm:5.7.0, @ethersproject/random@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/random@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + checksum: 017829c91cff6c76470852855108115b0b52c611b6be817ed1948d56ba42d6677803ec2012aa5ae298a7660024156a64c11fcf544e235e239ab3f89f0fff7345 + languageName: node + linkType: hard + +"@ethersproject/rlp@npm:5.7.0, @ethersproject/rlp@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/rlp@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + checksum: bce165b0f7e68e4d091c9d3cf47b247cac33252df77a095ca4281d32d5eeaaa3695d9bc06b2b057c5015353a68df89f13a4a54a72e888e4beeabbe56b15dda6e + languageName: node + linkType: hard + +"@ethersproject/sha2@npm:5.7.0, @ethersproject/sha2@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/sha2@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + hash.js: 1.1.7 + checksum: 09321057c022effbff4cc2d9b9558228690b5dd916329d75c4b1ffe32ba3d24b480a367a7cc92d0f0c0b1c896814d03351ae4630e2f1f7160be2bcfbde435dbc + languageName: node + linkType: hard + +"@ethersproject/signing-key@npm:5.7.0, @ethersproject/signing-key@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/signing-key@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + bn.js: ^5.2.1 + elliptic: 6.5.4 + hash.js: 1.1.7 + checksum: 8f8de09b0aac709683bbb49339bc0a4cd2f95598f3546436c65d6f3c3a847ffa98e06d35e9ed2b17d8030bd2f02db9b7bd2e11c5cf8a71aad4537487ab4cf03a + languageName: node + linkType: hard + +"@ethersproject/solidity@npm:5.7.0, @ethersproject/solidity@npm:^5.4.0, @ethersproject/solidity@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/solidity@npm:5.7.0" + dependencies: + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/sha2": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + checksum: 9a02f37f801c96068c3e7721f83719d060175bc4e80439fe060e92bd7acfcb6ac1330c7e71c49f4c2535ca1308f2acdcb01e00133129aac00581724c2d6293f3 + languageName: node + linkType: hard + +"@ethersproject/strings@npm:5.7.0, @ethersproject/strings@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/strings@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + checksum: 5ff78693ae3fdf3cf23e1f6dc047a61e44c8197d2408c42719fef8cb7b7b3613a4eec88ac0ed1f9f5558c74fe0de7ae3195a29ca91a239c74b9f444d8e8b50df + languageName: node + linkType: hard + +"@ethersproject/transactions@npm:5.7.0, @ethersproject/transactions@npm:^5.4.0, @ethersproject/transactions@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/transactions@npm:5.7.0" + dependencies: + "@ethersproject/address": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/rlp": ^5.7.0 + "@ethersproject/signing-key": ^5.7.0 + checksum: a31b71996d2b283f68486241bff0d3ea3f1ba0e8f1322a8fffc239ccc4f4a7eb2ea9994b8fd2f093283fd75f87bae68171e01b6265261f821369aca319884a79 + languageName: node + linkType: hard + +"@ethersproject/units@npm:5.7.0": + version: 5.7.0 + resolution: "@ethersproject/units@npm:5.7.0" + dependencies: + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + checksum: 304714f848cd32e57df31bf545f7ad35c2a72adae957198b28cbc62166daa929322a07bff6e9c9ac4577ab6aa0de0546b065ed1b2d20b19e25748b7d475cb0fc + languageName: node + linkType: hard + +"@ethersproject/wallet@npm:5.7.0, @ethersproject/wallet@npm:^5.4.0, @ethersproject/wallet@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/wallet@npm:5.7.0" + dependencies: + "@ethersproject/abstract-provider": ^5.7.0 + "@ethersproject/abstract-signer": ^5.7.0 + "@ethersproject/address": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/hash": ^5.7.0 + "@ethersproject/hdnode": ^5.7.0 + "@ethersproject/json-wallets": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/random": ^5.7.0 + "@ethersproject/signing-key": ^5.7.0 + "@ethersproject/transactions": ^5.7.0 + "@ethersproject/wordlists": ^5.7.0 + checksum: a4009bf7331eddab38e3015b5e9101ef92de7f705b00a6196b997db0e5635b6d83561674d46c90c6f77b87c0500fe4a6b0183ba13749efc22db59c99deb82fbd + languageName: node + linkType: hard + +"@ethersproject/web@npm:5.7.1, @ethersproject/web@npm:^5.7.0": + version: 5.7.1 + resolution: "@ethersproject/web@npm:5.7.1" + dependencies: + "@ethersproject/base64": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + checksum: 7028c47103f82fd2e2c197ce0eecfacaa9180ffeec7de7845b1f4f9b19d84081b7a48227aaddde05a4aaa526af574a9a0ce01cc0fc75e3e371f84b38b5b16b2b + languageName: node + linkType: hard + +"@ethersproject/wordlists@npm:5.7.0, @ethersproject/wordlists@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/wordlists@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/hash": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + checksum: 30eb6eb0731f9ef5faa44bf9c0c6e950bcaaef61e4d2d9ce0ae6d341f4e2d6d1f4ab4f8880bfce03b7aac4b862fb740e1421170cfbf8e2aafc359277d49e6e97 + languageName: node + linkType: hard + +"@fastify/busboy@npm:^2.0.0": + version: 2.1.0 + resolution: "@fastify/busboy@npm:2.1.0" + checksum: 3233abd10f73e50668cb4bb278a79b7b3fadd30215ac6458299b0e5a09a29c3586ec07597aae6bd93f5cbedfcef43a8aeea51829cd28fc13850cdbcd324c28d5 + languageName: node + linkType: hard + +"@fastify/deepmerge@npm:^1.0.0": + version: 1.3.0 + resolution: "@fastify/deepmerge@npm:1.3.0" + checksum: 33ec927905dca320d7ae9535a1521909f7c82339706345324ab6287ad100589a799b8257c15b0e582c7bb74e2aa4883d82ba0228d7b116aa8789ada4f78d6974 + languageName: node + linkType: hard + +"@graphprotocol/client-add-source-name@npm:^2.0.0": + version: 2.0.0 + resolution: "@graphprotocol/client-add-source-name@npm:2.0.0" + dependencies: + lodash: ^4.17.21 + tslib: ^2.4.0 + peerDependencies: + "@graphql-mesh/types": ^0.78.0 || ^0.79.0 || ^0.80.0 || ^0.81.0 || ^0.82.0 || ^0.83.0 || ^0.84.0 || ^0.85.0 || ^0.89.0 || ^0.90.0 || ^0.91.0 || ^0.93.0 + "@graphql-tools/delegate": ^9.0.32 || ^10.0.0 + "@graphql-tools/utils": ^9.2.1 || ^10.0.0 + "@graphql-tools/wrap": ^9.4.2 || ^10.0.0 + graphql: ^15.2.0 || ^16.0.0 + checksum: 693a1748348601145b2ea39b1de6024600a9aae6f5a403da9a1e5a8846166489ab5a8bc4443d4287958d42fefa2f7577ff5a916aa33ae04f02ae570fef6e241c + languageName: node + linkType: hard + +"@graphprotocol/client-auto-pagination@npm:^2.0.0": + version: 2.0.0 + resolution: "@graphprotocol/client-auto-pagination@npm:2.0.0" + dependencies: + lodash: ^4.17.21 + tslib: ^2.4.0 + peerDependencies: + "@graphql-mesh/types": ^0.78.0 || ^0.79.0 || ^0.80.0 || ^0.81.0 || ^0.82.0 || ^0.83.0 || ^0.84.0 || ^0.85.0 || ^0.89.0 || ^0.90.0 || ^0.91.0 || ^0.93.0 + "@graphql-tools/delegate": ^9.0.32 || ^10.0.0 + "@graphql-tools/utils": ^9.2.1 || ^10.0.0 + "@graphql-tools/wrap": ^9.4.2 || ^10.0.0 + graphql: ^15.2.0 || ^16.0.0 + checksum: c0208dcecdbeb716874ed0ff496c60c39873ff0cd6c3b5bf0e34a1622b94da99674506b3667579dde075295f9608dbea960505013552dc64beea8a9011241337 + languageName: node + linkType: hard + +"@graphprotocol/client-auto-type-merging@npm:^2.0.0": + version: 2.0.0 + resolution: "@graphprotocol/client-auto-type-merging@npm:2.0.0" + dependencies: + "@graphql-mesh/transform-type-merging": ^0.93.0 + tslib: ^2.4.0 + peerDependencies: + "@graphql-mesh/types": ^0.78.0 || ^0.79.0 || ^0.80.0 || ^0.81.0 || ^0.82.0 || ^0.83.0 || ^0.84.0 || ^0.85.0 || ^0.89.0 || ^0.90.0 || ^0.91.0 || ^0.93.0 + "@graphql-tools/delegate": ^9.0.32 || ^10.0.0 + graphql: ^15.2.0 || ^16.0.0 + checksum: 5345436e73a6f194f28039fc200cd8d2624e30df45880b5ceda3c00b4a251fc240953e9e92f20a2dcbdaec7dc0592b8d71f30ae9fd7b029dc33294490f23e89e + languageName: node + linkType: hard + +"@graphprotocol/client-block-tracking@npm:^2.0.0": + version: 2.0.0 + resolution: "@graphprotocol/client-block-tracking@npm:2.0.0" + dependencies: + "@graphql-tools/utils": ^10.0.0 + tslib: ^2.4.0 + peerDependencies: + "@graphql-tools/delegate": ^9.0.32 || ^10.0.0 + graphql: ^15.2.0 || ^16.0.0 + checksum: 19981ca41951c562f6d8590af6d7f5281305ea107c254deaa68e8f712ae0f64639759291f858d8f38756117b2bf69a43c4f451d9e663655a9cbd83a3577a8fca + languageName: node + linkType: hard + +"@graphprotocol/client-cli@npm:^3.0.0": + version: 3.0.0 + resolution: "@graphprotocol/client-cli@npm:3.0.0" + dependencies: + "@graphprotocol/client-add-source-name": ^2.0.0 + "@graphprotocol/client-auto-pagination": ^2.0.0 + "@graphprotocol/client-auto-type-merging": ^2.0.0 + "@graphprotocol/client-block-tracking": ^2.0.0 + "@graphprotocol/client-polling-live": ^2.0.0 + "@graphql-mesh/cli": ^0.82.33 + "@graphql-mesh/graphql": ^0.93.0 + tslib: ^2.4.0 + peerDependencies: + graphql: ^15.2.0 || ^16.0.0 + bin: + graphclient: cjs/bin.js + checksum: 30c47795e183e8b2eac0db5fe4f4a5d70b708e6e69fdf8e5be5bf4e48610a83f4cd5120de5f7d81b40476268f0ec0349688b4c1fac4311f5ddef106361d46d02 + languageName: node + linkType: hard + +"@graphprotocol/client-polling-live@npm:^2.0.0": + version: 2.0.0 + resolution: "@graphprotocol/client-polling-live@npm:2.0.0" + dependencies: + "@repeaterjs/repeater": ^3.0.4 + tslib: ^2.4.0 + peerDependencies: + "@envelop/core": ^2.4.2 || ^3.0.0 || ^4.0.0 + "@graphql-tools/merge": ^8.3.14 || ^9.0.0 + graphql: ^15.2.0 || ^16.0.0 + checksum: 37d4527db229c921d26f625c95314caa59f37b3004b8a5a7b769fbb5aabd1fd2a2002c17deed1ec43a0f738cf09769267920b368eda0675b373dc99ccbf826cb + languageName: node + linkType: hard + +"@graphql-codegen/core@npm:^3.1.0": + version: 3.1.0 + resolution: "@graphql-codegen/core@npm:3.1.0" + dependencies: + "@graphql-codegen/plugin-helpers": ^4.1.0 + "@graphql-tools/schema": ^9.0.0 + "@graphql-tools/utils": ^9.1.1 + tslib: ~2.5.0 + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: 7ace2b185242d00575b877b0bbb884c66915d246ba17a98c0ab82c2ee3a93ff2c9ae9d7d75a1d346de02ca8f12eb02801ffe2da4846da6e164b43176cd02dd8c + languageName: node + linkType: hard + +"@graphql-codegen/plugin-helpers@npm:^2.7.2": + version: 2.7.2 + resolution: "@graphql-codegen/plugin-helpers@npm:2.7.2" + dependencies: + "@graphql-tools/utils": ^8.8.0 + change-case-all: 1.0.14 + common-tags: 1.8.2 + import-from: 4.0.0 + lodash: ~4.17.0 + tslib: ~2.4.0 + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: 66e0d507ad5db60b67092ebf7632d464d56ab446ac8fd87c293e00d9016944912d8cf9199e3e026b0a9247a50f50c4118a44f49e13675db64211652cd6259b05 + languageName: node + linkType: hard + +"@graphql-codegen/plugin-helpers@npm:^3.0.0": + version: 3.1.2 + resolution: "@graphql-codegen/plugin-helpers@npm:3.1.2" + dependencies: + "@graphql-tools/utils": ^9.0.0 + change-case-all: 1.0.15 + common-tags: 1.8.2 + import-from: 4.0.0 + lodash: ~4.17.0 + tslib: ~2.4.0 + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: 4d0c615738570681b5ffd3c07305a35d6aa3e5fd87c9199c0a670b95529ab865b1df978ce584d5b415107a567ac484e56a48db129a6d1d2eb8a254fbd3260e39 + languageName: node + linkType: hard + +"@graphql-codegen/plugin-helpers@npm:^4.1.0, @graphql-codegen/plugin-helpers@npm:^4.2.0": + version: 4.2.0 + resolution: "@graphql-codegen/plugin-helpers@npm:4.2.0" + dependencies: + "@graphql-tools/utils": ^9.0.0 + change-case-all: 1.0.15 + common-tags: 1.8.2 + import-from: 4.0.0 + lodash: ~4.17.0 + tslib: ~2.5.0 + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: 5d26adc132026916db061d23b06fc2c329f372f19ecf56e39bd2b30082bff642f2030cd6dc0bad8d2d3ab781c1e145384e040310a479b83d85ec804b2983646d + languageName: node + linkType: hard + +"@graphql-codegen/schema-ast@npm:^3.0.1": + version: 3.0.1 + resolution: "@graphql-codegen/schema-ast@npm:3.0.1" + dependencies: + "@graphql-codegen/plugin-helpers": ^4.1.0 + "@graphql-tools/utils": ^9.0.0 + tslib: ~2.5.0 + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: 620aa67a4ae59ccb4609763b7347d05e2cec62bf1362be3e1e01fc00969cdbb858398542aa261128e5b5e3cb6808b77861bdcf82662e80326e72b418f25f465f + languageName: node + linkType: hard + +"@graphql-codegen/typed-document-node@npm:^4.0.1": + version: 4.0.1 + resolution: "@graphql-codegen/typed-document-node@npm:4.0.1" + dependencies: + "@graphql-codegen/plugin-helpers": ^4.2.0 + "@graphql-codegen/visitor-plugin-common": 3.1.1 + auto-bind: ~4.0.0 + change-case-all: 1.0.15 + tslib: ~2.5.0 + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: fedbcab3cd5852a91b8d3840e5ec156b18605334e45a9ac4265ace54fefef612840f6d4f300924746d91e7d3908daf29610c915230047d4ec5316b61897e1986 + languageName: node + linkType: hard + +"@graphql-codegen/typescript-generic-sdk@npm:^3.1.0": + version: 3.1.0 + resolution: "@graphql-codegen/typescript-generic-sdk@npm:3.1.0" + dependencies: + "@graphql-codegen/plugin-helpers": ^3.0.0 + "@graphql-codegen/visitor-plugin-common": 2.13.1 + auto-bind: ~4.0.0 + tslib: ~2.4.0 + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + graphql-tag: ^2.0.0 + checksum: b2cefeabd411cb014f8a249fea2679633e5667480316f321e11fbf782106fd15a1b85e8a6c7b6d97748336634b5131215b4e7ddb4bdddcf87db8b4cfc9a38e44 + languageName: node + linkType: hard + +"@graphql-codegen/typescript-operations@npm:^3.0.4": + version: 3.0.4 + resolution: "@graphql-codegen/typescript-operations@npm:3.0.4" + dependencies: + "@graphql-codegen/plugin-helpers": ^4.2.0 + "@graphql-codegen/typescript": ^3.0.4 + "@graphql-codegen/visitor-plugin-common": 3.1.1 + auto-bind: ~4.0.0 + tslib: ~2.5.0 + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: 734ce9d77d377037b2ac8ae70c02b7d733dee1917bb0559daedc44afade1b7eea2b7d88f10404c2fca82719fd9588a5e482e609fae1169639b8b94a3e7577fcd + languageName: node + linkType: hard + +"@graphql-codegen/typescript-resolvers@npm:^3.2.1": + version: 3.2.1 + resolution: "@graphql-codegen/typescript-resolvers@npm:3.2.1" + dependencies: + "@graphql-codegen/plugin-helpers": ^4.2.0 + "@graphql-codegen/typescript": ^3.0.4 + "@graphql-codegen/visitor-plugin-common": 3.1.1 + "@graphql-tools/utils": ^9.0.0 + auto-bind: ~4.0.0 + tslib: ~2.5.0 + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: a84f8fc68fe778beabbf537f1312699a220a3a605d972403075d8307fb7fe9aec73ae2eb5b42dea9f3a7c91deabfe6e1271d607e1b2c84b346686107f39354fb + languageName: node + linkType: hard + +"@graphql-codegen/typescript@npm:^3.0.4": + version: 3.0.4 + resolution: "@graphql-codegen/typescript@npm:3.0.4" + dependencies: + "@graphql-codegen/plugin-helpers": ^4.2.0 + "@graphql-codegen/schema-ast": ^3.0.1 + "@graphql-codegen/visitor-plugin-common": 3.1.1 + auto-bind: ~4.0.0 + tslib: ~2.5.0 + peerDependencies: + graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: ede5311c5f620e16c3e98f51bdcedc7fd42f2c552a8ca5a946f757dc9709c384a12d32d088769d04041461d3318159ad0644f70056aea1877ee80a0bdc48de1f + languageName: node + linkType: hard + +"@graphql-codegen/visitor-plugin-common@npm:2.13.1": + version: 2.13.1 + resolution: "@graphql-codegen/visitor-plugin-common@npm:2.13.1" + dependencies: + "@graphql-codegen/plugin-helpers": ^2.7.2 + "@graphql-tools/optimize": ^1.3.0 + "@graphql-tools/relay-operation-optimizer": ^6.5.0 + "@graphql-tools/utils": ^8.8.0 + auto-bind: ~4.0.0 + change-case-all: 1.0.14 + dependency-graph: ^0.11.0 + graphql-tag: ^2.11.0 + parse-filepath: ^1.0.2 + tslib: ~2.4.0 + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: 0c329aa6e435602f2f6c1569ec2091b7850f58cc5dca7ac763c38c82588545ec1110c1de587f5f3949b11ff96f94401d1e63e329607d78424583b276fd08f1ae + languageName: node + linkType: hard + +"@graphql-codegen/visitor-plugin-common@npm:3.1.1": + version: 3.1.1 + resolution: "@graphql-codegen/visitor-plugin-common@npm:3.1.1" + dependencies: + "@graphql-codegen/plugin-helpers": ^4.2.0 + "@graphql-tools/optimize": ^1.3.0 + "@graphql-tools/relay-operation-optimizer": ^6.5.0 + "@graphql-tools/utils": ^9.0.0 + auto-bind: ~4.0.0 + change-case-all: 1.0.15 + dependency-graph: ^0.11.0 + graphql-tag: ^2.11.0 + parse-filepath: ^1.0.2 + tslib: ~2.5.0 + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: 8dbef75ba0576a7de5e134b53778d64d818084df01e74554adc979f08db8446e9734889575c820449b6ef9febd6a9005fb89c7c9c101a9e398c195b5c3279353 + languageName: node + linkType: hard + +"@graphql-inspector/core@npm:3.3.0": + version: 3.3.0 + resolution: "@graphql-inspector/core@npm:3.3.0" + dependencies: + dependency-graph: 0.11.0 + object-inspect: 1.10.3 + tslib: ^2.0.0 + peerDependencies: + graphql: ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: 5416ab629df2fc6ac9c2b744889df198c415af11424047050146f431d56bb8b160bd447abf725a159a75b077fe74b93b6b1073123a90d62ac1b277385495b6ca + languageName: node + linkType: hard + +"@graphql-mesh/cache-localforage@npm:^0.93.1": + version: 0.93.1 + resolution: "@graphql-mesh/cache-localforage@npm:0.93.1" + dependencies: + localforage: 1.10.0 + peerDependencies: + "@graphql-mesh/types": ^0.93.1 + "@graphql-mesh/utils": ^0.93.1 + graphql: "*" + tslib: ^2.4.0 + checksum: 2b52a498f3e4839daf33eb2fb72feb69d82820a700a952c7a6815c24d58ef02844b487928f49c2b0711d8c9780ac0142785b27dbfb5e402a41a066a699aec638 + languageName: node + linkType: hard + +"@graphql-mesh/cli@npm:^0.82.33": + version: 0.82.35 + resolution: "@graphql-mesh/cli@npm:0.82.35" + dependencies: + "@graphql-codegen/core": ^3.1.0 + "@graphql-codegen/typed-document-node": ^4.0.1 + "@graphql-codegen/typescript": ^3.0.4 + "@graphql-codegen/typescript-generic-sdk": ^3.1.0 + "@graphql-codegen/typescript-operations": ^3.0.4 + "@graphql-codegen/typescript-resolvers": ^3.2.1 + "@graphql-mesh/config": ^0.93.1 + "@graphql-mesh/cross-helpers": ^0.3.4 + "@graphql-mesh/http": ^0.93.1 + "@graphql-mesh/runtime": ^0.93.1 + "@graphql-mesh/store": ^0.93.1 + "@graphql-mesh/types": ^0.93.1 + "@graphql-mesh/utils": ^0.93.1 + "@graphql-tools/utils": ^9.2.1 + ajv: ^8.12.0 + change-case: ^4.1.2 + cosmiconfig: ^8.1.3 + dnscache: ^1.0.2 + dotenv: ^16.0.3 + graphql-import-node: ^0.0.5 + graphql-ws: ^5.12.1 + json-bigint-patch: ^0.0.8 + json5: ^2.2.3 + mkdirp: ^3.0.0 + open: ^7.4.2 + pascal-case: ^3.1.2 + rimraf: ^5.0.0 + ts-node: ^10.9.1 + tsconfig-paths: ^4.2.0 + tslib: ^2.4.0 + typescript: ^5.0.4 + ws: ^8.13.0 + yargs: ^17.7.1 + peerDependencies: + graphql: "*" + bin: + gql-mesh: cjs/bin.js + graphql-mesh: cjs/bin.js + graphql-mesh-esm: esm/bin.js + mesh: cjs/bin.js + checksum: 0174e7cfa296bb355d18998d32af52b095a3225c0386afadca539cb4be152bd679d31257a3e9039c8b21dd410b73b1df68252967828edcfed9d98205d5cea8d5 + languageName: node + linkType: hard + +"@graphql-mesh/config@npm:^0.93.1": + version: 0.93.1 + resolution: "@graphql-mesh/config@npm:0.93.1" + dependencies: + "@envelop/core": ^3.0.6 + "@graphql-mesh/cache-localforage": ^0.93.1 + "@graphql-mesh/merger-bare": ^0.93.1 + "@graphql-mesh/merger-stitching": ^0.93.1 + "@graphql-tools/code-file-loader": ^7.3.22 + "@graphql-tools/graphql-file-loader": ^7.5.17 + "@graphql-tools/load": ^7.8.14 + "@whatwg-node/fetch": ^0.8.3 + camel-case: ^4.1.2 + param-case: ^3.0.4 + pascal-case: ^3.1.2 + peerDependencies: + "@graphql-mesh/cross-helpers": ^0.3.4 + "@graphql-mesh/runtime": ^0.93.1 + "@graphql-mesh/store": ^0.93.1 + "@graphql-mesh/types": ^0.93.1 + "@graphql-mesh/utils": ^0.93.1 + "@graphql-tools/utils": ^9.2.1 + graphql: "*" + tslib: ^2.4.0 + checksum: 4d371a0a95b9081904fcabcf8f05faef77197caf18e69655b15131da87446264490bb1c32221e32b74063bef2c233685c35ce8017914ed4e357088ba3b66e426 + languageName: node + linkType: hard + +"@graphql-mesh/cross-helpers@npm:^0.3.4": + version: 0.3.4 + resolution: "@graphql-mesh/cross-helpers@npm:0.3.4" + dependencies: + path-browserify: 1.0.1 + react-native-fs: 2.20.0 + react-native-path: 0.0.5 + peerDependencies: + "@graphql-tools/utils": ^9.2.1 + graphql: "*" + checksum: 7689e1c76819996dfbf8ef6ea56013b9e0ec5d6a6bcebed746badb25dc66c797f737a9cc06d7a938665c498f8a7f71166cdfd670b4ef394fd58cae83ec456b3e + languageName: node + linkType: hard + +"@graphql-mesh/graphql@npm:^0.93.0": + version: 0.93.1 + resolution: "@graphql-mesh/graphql@npm:0.93.1" + dependencies: + "@graphql-mesh/string-interpolation": ^0.4.4 + "@graphql-tools/delegate": ^9.0.32 + "@graphql-tools/url-loader": ^7.17.18 + "@graphql-tools/wrap": ^9.4.2 + lodash.get: ^4.4.2 + peerDependencies: + "@graphql-mesh/cross-helpers": ^0.3.4 + "@graphql-mesh/store": ^0.93.1 + "@graphql-mesh/types": ^0.93.1 + "@graphql-mesh/utils": ^0.93.1 + "@graphql-tools/utils": ^9.2.1 + graphql: "*" + tslib: ^2.4.0 + checksum: 81b30362453c6dd77d067c669ed23abc6440dc185bb5141147e03d7b4c3bf8f77e2e54ae14c782414b44931df84969d6311bb38f80db5be9604cf3cacd283cc1 + languageName: node + linkType: hard + +"@graphql-mesh/http@npm:^0.93.1": + version: 0.93.2 + resolution: "@graphql-mesh/http@npm:0.93.2" + dependencies: + fets: ^0.1.1 + graphql-yoga: ^3.9.1 + peerDependencies: + "@graphql-mesh/cross-helpers": ^0.3.4 + "@graphql-mesh/runtime": ^0.93.2 + "@graphql-mesh/types": ^0.93.1 + "@graphql-mesh/utils": ^0.93.1 + graphql: "*" + tslib: ^2.4.0 + checksum: 346c81404e22fa97dc476bcbbf141c699aff31ac895da32abbbaf9892a846b31fccf621af6c02732ef9782ffb65b67467d8248ed705ffc5dce8704db7e7cf7a3 + languageName: node + linkType: hard + +"@graphql-mesh/merger-bare@npm:^0.93.1": + version: 0.93.1 + resolution: "@graphql-mesh/merger-bare@npm:0.93.1" + dependencies: + "@graphql-mesh/merger-stitching": 0.93.1 + "@graphql-tools/schema": 9.0.19 + peerDependencies: + "@graphql-mesh/types": ^0.93.1 + "@graphql-mesh/utils": ^0.93.1 + "@graphql-tools/utils": ^9.2.1 + graphql: "*" + tslib: ^2.4.0 + checksum: 0a56b7845051efd81a78f5b247f9f77cf98f68cb451ab3b110a2259f24bc36182ac3bda5bd9c05b3c7ec7b6be6575e6bff01f29cadb039802e408fc22b467328 + languageName: node + linkType: hard + +"@graphql-mesh/merger-stitching@npm:0.93.1, @graphql-mesh/merger-stitching@npm:^0.93.1": + version: 0.93.1 + resolution: "@graphql-mesh/merger-stitching@npm:0.93.1" + dependencies: + "@graphql-tools/delegate": ^9.0.32 + "@graphql-tools/schema": ^9.0.18 + "@graphql-tools/stitch": ^8.7.48 + "@graphql-tools/stitching-directives": ^2.3.34 + peerDependencies: + "@graphql-mesh/store": ^0.93.1 + "@graphql-mesh/types": ^0.93.1 + "@graphql-mesh/utils": ^0.93.1 + "@graphql-tools/utils": ^9.2.1 + graphql: "*" + tslib: ^2.4.0 + checksum: 229a194a291361f9be9c357545b5706ac3ed3529fd2f89355b9ffe462c880d3abce463db74e863b6c2fbb8a537eb7429e1060e20014b446233ac9771d909e7bf + languageName: node + linkType: hard + +"@graphql-mesh/runtime@npm:^0.93.1": + version: 0.93.2 + resolution: "@graphql-mesh/runtime@npm:0.93.2" + dependencies: + "@envelop/core": ^3.0.6 + "@envelop/extended-validation": ^2.0.6 + "@graphql-mesh/string-interpolation": ^0.4.4 + "@graphql-tools/batch-delegate": ^8.4.25 + "@graphql-tools/batch-execute": ^8.5.19 + "@graphql-tools/delegate": ^9.0.32 + "@graphql-tools/wrap": ^9.4.2 + "@whatwg-node/fetch": ^0.8.3 + peerDependencies: + "@graphql-mesh/cross-helpers": ^0.3.4 + "@graphql-mesh/types": ^0.93.1 + "@graphql-mesh/utils": ^0.93.1 + "@graphql-tools/utils": ^9.2.1 + graphql: "*" + tslib: ^2.4.0 + checksum: 341a5546c8ecad6728ff717a8e52febfce3b1ae432bf1b211e4f24df6f80ab2bf56ef1ec8f6cfb4a8fa27dd37d4066122efdade8df07b8b700624ee4dd553087 + languageName: node + linkType: hard + +"@graphql-mesh/store@npm:^0.93.1": + version: 0.93.1 + resolution: "@graphql-mesh/store@npm:0.93.1" + dependencies: + "@graphql-inspector/core": 3.3.0 + peerDependencies: + "@graphql-mesh/cross-helpers": ^0.3.4 + "@graphql-mesh/types": ^0.93.1 + "@graphql-mesh/utils": ^0.93.1 + "@graphql-tools/utils": ^9.2.1 + graphql: "*" + tslib: ^2.4.0 + checksum: 4e902be3ce28e10fdae8ad0367e57ed78fad9a57cf587adced3a74f40e2b2887a39cb5e5c9a1af4c3558eb97f01fd16d412aee89ec9eedbd92c7ce3503978ca8 + languageName: node + linkType: hard + +"@graphql-mesh/string-interpolation@npm:^0.4.4": + version: 0.4.4 + resolution: "@graphql-mesh/string-interpolation@npm:0.4.4" + dependencies: + dayjs: 1.11.7 + json-pointer: 0.6.2 + lodash.get: 4.4.2 + peerDependencies: + graphql: "*" + tslib: ^2.4.0 + checksum: 00aba904722e2f420ac2c3bad553c4065b7fe2c605524fccc38ca782e39bc257490bcb8f8ec58b0dc6537ac33158d2c59568ef18e5c37374de0fa8e230dfe77d + languageName: node + linkType: hard + +"@graphql-mesh/transform-type-merging@npm:^0.93.0": + version: 0.93.1 + resolution: "@graphql-mesh/transform-type-merging@npm:0.93.1" + dependencies: + "@graphql-tools/delegate": ^9.0.32 + "@graphql-tools/stitching-directives": ^2.3.34 + peerDependencies: + "@graphql-mesh/types": ^0.93.1 + "@graphql-mesh/utils": ^0.93.1 + graphql: "*" + tslib: ^2.4.0 + checksum: 1e58eaecf8c39b2045a6422ec4d5e3a45c262c3b162e7ed9b2ddcc9dfa97a23ba48fd91f9718f97f0393eb68fe20374c68acb35508efbaefaae8e19493d6fa8a + languageName: node + linkType: hard + +"@graphql-mesh/types@npm:^0.93.1": + version: 0.93.2 + resolution: "@graphql-mesh/types@npm:0.93.2" + dependencies: + "@graphql-tools/batch-delegate": ^8.4.25 + "@graphql-tools/delegate": ^9.0.32 + "@graphql-typed-document-node/core": ^3.2.0 + peerDependencies: + "@graphql-mesh/store": ^0.93.1 + "@graphql-tools/utils": ^9.2.1 + graphql: "*" + tslib: ^2.4.0 + checksum: b9eea8dbf84089aa32bfd2eb4c1e20891495020b24af30f1c57f868be065e5b9016b7b3e4f38717185807ab582d80832bcef6224878bcb93735619fdec718ca5 + languageName: node + linkType: hard + +"@graphql-mesh/utils@npm:^0.93.1": + version: 0.93.2 + resolution: "@graphql-mesh/utils@npm:0.93.2" + dependencies: + "@graphql-mesh/string-interpolation": ^0.4.4 + "@graphql-tools/delegate": ^9.0.32 + dset: ^3.1.2 + js-yaml: ^4.1.0 + lodash.get: ^4.4.2 + lodash.topath: ^4.5.2 + tiny-lru: ^8.0.2 + peerDependencies: + "@graphql-mesh/cross-helpers": ^0.3.4 + "@graphql-mesh/types": ^0.93.2 + "@graphql-tools/utils": ^9.2.1 + graphql: "*" + tslib: ^2.4.0 + checksum: ce2e7a14767a91a9b171d77c68f1b1e38deb552dd6fb1c2325d066254148450707c3de5fa7cd2082d894e56827773479ed70e39639b05dc08d6fd83664518c8f + languageName: node + linkType: hard + +"@graphql-tools/batch-delegate@npm:^8.4.25, @graphql-tools/batch-delegate@npm:^8.4.27": + version: 8.4.27 + resolution: "@graphql-tools/batch-delegate@npm:8.4.27" + dependencies: + "@graphql-tools/delegate": ^9.0.35 + "@graphql-tools/utils": ^9.2.1 + dataloader: 2.2.2 + tslib: ^2.4.0 + value-or-promise: ^1.0.12 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: bce6be3fe59609c4fcabfb72cdb1ea9d46205220d262a67fbe1271a1e65be92b8053f038b6fb927ca2b407221e38150a0e12a32b822c0040015729973f735ef8 + languageName: node + linkType: hard + +"@graphql-tools/batch-execute@npm:^8.5.19, @graphql-tools/batch-execute@npm:^8.5.22": + version: 8.5.22 + resolution: "@graphql-tools/batch-execute@npm:8.5.22" + dependencies: + "@graphql-tools/utils": ^9.2.1 + dataloader: ^2.2.2 + tslib: ^2.4.0 + value-or-promise: ^1.0.12 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 4f7f7ba104737a57d0bd5b2b38b8dbf24d6db9e3ce8f8d1b8c3109702305c212b54b7642853c1584b12ce3a9136286b600076e94861c0bd1d29a218f44401224 + languageName: node + linkType: hard + +"@graphql-tools/code-file-loader@npm:^7.3.22": + version: 7.3.23 + resolution: "@graphql-tools/code-file-loader@npm:7.3.23" + dependencies: + "@graphql-tools/graphql-tag-pluck": 7.5.2 + "@graphql-tools/utils": ^9.2.1 + globby: ^11.0.3 + tslib: ^2.4.0 + unixify: ^1.0.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: fb1dfa807b9d5798936c7fe31cf5356412d9b5a25a08d5952b607921637afbe26555cb662cf97f82dfdf47ed8e7c2a42f527238fb2defd3be4505e15fb6027c3 + languageName: node + linkType: hard + +"@graphql-tools/delegate@npm:^9.0.31, @graphql-tools/delegate@npm:^9.0.32, @graphql-tools/delegate@npm:^9.0.35": + version: 9.0.35 + resolution: "@graphql-tools/delegate@npm:9.0.35" + dependencies: + "@graphql-tools/batch-execute": ^8.5.22 + "@graphql-tools/executor": ^0.0.20 + "@graphql-tools/schema": ^9.0.19 + "@graphql-tools/utils": ^9.2.1 + dataloader: ^2.2.2 + tslib: ^2.5.0 + value-or-promise: ^1.0.12 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 4edd827d1767dc33ea1e28f8ceb30f82e1cdb47a9390cecc0a45f51594c6df28d11b2c2eec083e27fa45a76451c8490f2f826effc2dff9977de3fe1b66b2aadb + languageName: node + linkType: hard + +"@graphql-tools/executor-graphql-ws@npm:^0.0.14": + version: 0.0.14 + resolution: "@graphql-tools/executor-graphql-ws@npm:0.0.14" + dependencies: + "@graphql-tools/utils": ^9.2.1 + "@repeaterjs/repeater": 3.0.4 + "@types/ws": ^8.0.0 + graphql-ws: 5.12.1 + isomorphic-ws: 5.0.0 + tslib: ^2.4.0 + ws: 8.13.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: c18f3ca3d70098017ff71045ae13de1d88c8dc0954af0d7a389aebdc831c82b678f9cf9b50ed065d5262d59a558b4f9be3b7b04e5002bae47a503493fc0b7542 + languageName: node + linkType: hard + +"@graphql-tools/executor-http@npm:^0.1.7": + version: 0.1.10 + resolution: "@graphql-tools/executor-http@npm:0.1.10" + dependencies: + "@graphql-tools/utils": ^9.2.1 + "@repeaterjs/repeater": ^3.0.4 + "@whatwg-node/fetch": ^0.8.1 + dset: ^3.1.2 + extract-files: ^11.0.0 + meros: ^1.2.1 + tslib: ^2.4.0 + value-or-promise: ^1.0.12 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: d5cb0b9f8deb2335cac3b0e8fa5a63e827fafd35d1dae88f4ae201f3ce0531be95a8ec3b0b7fbe618a66ad5838e3c574cf8f965c3d71b49b7dbcd7ba2e67019d + languageName: node + linkType: hard + +"@graphql-tools/executor-legacy-ws@npm:^0.0.11": + version: 0.0.11 + resolution: "@graphql-tools/executor-legacy-ws@npm:0.0.11" + dependencies: + "@graphql-tools/utils": ^9.2.1 + "@types/ws": ^8.0.0 + isomorphic-ws: 5.0.0 + tslib: ^2.4.0 + ws: 8.13.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: f9dd5dc87537c6adb3e1fb8e083944cfd9b2a9b34016f705b7b99105e744f11290f23aee726bb05ae32411c7d07a1ebc7b5bd35445053fc44877979f0ce4cd2e + languageName: node + linkType: hard + +"@graphql-tools/executor@npm:^0.0.18": + version: 0.0.18 + resolution: "@graphql-tools/executor@npm:0.0.18" + dependencies: + "@graphql-tools/utils": ^9.2.1 + "@graphql-typed-document-node/core": 3.2.0 + "@repeaterjs/repeater": 3.0.4 + tslib: ^2.4.0 + value-or-promise: 1.0.12 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 7387155d6736455ad0c40c263ff964d734cdd79cdc8a5ddb43c805cabfa3d381d8ea21605a1ec0b0242898d248a909e370433849ffed92a2721aa27f73caf0ab + languageName: node + linkType: hard + +"@graphql-tools/executor@npm:^0.0.20": + version: 0.0.20 + resolution: "@graphql-tools/executor@npm:0.0.20" + dependencies: + "@graphql-tools/utils": ^9.2.1 + "@graphql-typed-document-node/core": 3.2.0 + "@repeaterjs/repeater": ^3.0.4 + tslib: ^2.4.0 + value-or-promise: ^1.0.12 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 5390800be4a346eb7d37d51458cd9cf4a24e01014fe1b392682ea4bce2b27fc1d5c7aebcb3dafaeefcb0a89e5b307fc2060816533b61d6796e0fa0e5e1f10959 + languageName: node + linkType: hard + +"@graphql-tools/graphql-file-loader@npm:^7.5.17": + version: 7.5.17 + resolution: "@graphql-tools/graphql-file-loader@npm:7.5.17" + dependencies: + "@graphql-tools/import": 6.7.18 + "@graphql-tools/utils": ^9.2.1 + globby: ^11.0.3 + tslib: ^2.4.0 + unixify: ^1.0.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: f0d6768fbb03fe6c5a0a2c1fe78e2fa8c009b13d6c40a7153c61e7266348192386310ace85dd46a96fa4317a4a37c02d1959fd2a0c6eaa521446234506147cdc + languageName: node + linkType: hard + +"@graphql-tools/graphql-tag-pluck@npm:7.5.2": + version: 7.5.2 + resolution: "@graphql-tools/graphql-tag-pluck@npm:7.5.2" + dependencies: + "@babel/parser": ^7.16.8 + "@babel/plugin-syntax-import-assertions": ^7.20.0 + "@babel/traverse": ^7.16.8 + "@babel/types": ^7.16.8 + "@graphql-tools/utils": ^9.2.1 + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: fbe2419f97ca700bb5f3fa7ff7a4ecab2519732339c2f5807ff0fc33dcb50e3b6e921b6c0b285992b34e95cb812d514f0d62d82f9275a8c074bcaff64cbff7bb + languageName: node + linkType: hard + +"@graphql-tools/import@npm:6.7.18": + version: 6.7.18 + resolution: "@graphql-tools/import@npm:6.7.18" + dependencies: + "@graphql-tools/utils": ^9.2.1 + resolve-from: 5.0.0 + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 15c32c5937899a25f8c2b0dee98ca1e1245ba85a56a8a59d52c2c78693da2e95fb27f235ef95c3a576bd96843d53541b6d90931a0032c0011dea871d53b5027a + languageName: node + linkType: hard + +"@graphql-tools/load@npm:^7.8.14": + version: 7.8.14 + resolution: "@graphql-tools/load@npm:7.8.14" dependencies: - "@ethersproject/bytes": ^5.7.0 - "@ethersproject/logger": ^5.7.0 - checksum: 017829c91cff6c76470852855108115b0b52c611b6be817ed1948d56ba42d6677803ec2012aa5ae298a7660024156a64c11fcf544e235e239ab3f89f0fff7345 + "@graphql-tools/schema": ^9.0.18 + "@graphql-tools/utils": ^9.2.1 + p-limit: 3.1.0 + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 12ffd6460da3d996d614faa3ced99f526247334bb671301b15ed1d2153314a8813f734d863086d154891ac4b35da090668f0ea7702508d19f8dd0f72413b585c languageName: node linkType: hard -"@ethersproject/rlp@npm:5.7.0, @ethersproject/rlp@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/rlp@npm:5.7.0" +"@graphql-tools/merge@npm:^8.4.1, @graphql-tools/merge@npm:^8.4.2": + version: 8.4.2 + resolution: "@graphql-tools/merge@npm:8.4.2" dependencies: - "@ethersproject/bytes": ^5.7.0 - "@ethersproject/logger": ^5.7.0 - checksum: bce165b0f7e68e4d091c9d3cf47b247cac33252df77a095ca4281d32d5eeaaa3695d9bc06b2b057c5015353a68df89f13a4a54a72e888e4beeabbe56b15dda6e + "@graphql-tools/utils": ^9.2.1 + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 96d57a3e810055a2883bf9d3450e88082da207ffb1406222c9fa954e47bac4a328696785fdb7eec95a030d5f75504f7b4c6484c94f248cee13e6ad25aca70c75 languageName: node linkType: hard -"@ethersproject/sha2@npm:5.7.0, @ethersproject/sha2@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/sha2@npm:5.7.0" +"@graphql-tools/optimize@npm:^1.3.0": + version: 1.4.0 + resolution: "@graphql-tools/optimize@npm:1.4.0" dependencies: - "@ethersproject/bytes": ^5.7.0 - "@ethersproject/logger": ^5.7.0 - hash.js: 1.1.7 - checksum: 09321057c022effbff4cc2d9b9558228690b5dd916329d75c4b1ffe32ba3d24b480a367a7cc92d0f0c0b1c896814d03351ae4630e2f1f7160be2bcfbde435dbc + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: bccbc596f2007ae706ee948e900f3174aa80ef043e8ae3467f735a10df0b31873bafdd20c0ef09b662171363a31e2d0859adb362bbf762da00245f8e9fd501b0 languageName: node linkType: hard -"@ethersproject/signing-key@npm:5.7.0, @ethersproject/signing-key@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/signing-key@npm:5.7.0" +"@graphql-tools/relay-operation-optimizer@npm:^6.5.0": + version: 6.5.18 + resolution: "@graphql-tools/relay-operation-optimizer@npm:6.5.18" dependencies: - "@ethersproject/bytes": ^5.7.0 - "@ethersproject/logger": ^5.7.0 - "@ethersproject/properties": ^5.7.0 - bn.js: ^5.2.1 - elliptic: 6.5.4 - hash.js: 1.1.7 - checksum: 8f8de09b0aac709683bbb49339bc0a4cd2f95598f3546436c65d6f3c3a847ffa98e06d35e9ed2b17d8030bd2f02db9b7bd2e11c5cf8a71aad4537487ab4cf03a + "@ardatan/relay-compiler": 12.0.0 + "@graphql-tools/utils": ^9.2.1 + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 56a8c7e6a0bf5fa4d5106276f69c08630a95659eb4300249b3dd28e2057ebb7e7815c51beadf98acdbf695cad5937988d16a3d01ca74fc120c76892968fbeb2b languageName: node linkType: hard -"@ethersproject/solidity@npm:5.7.0, @ethersproject/solidity@npm:^5.4.0, @ethersproject/solidity@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/solidity@npm:5.7.0" +"@graphql-tools/schema@npm:9.0.19, @graphql-tools/schema@npm:^9.0.0, @graphql-tools/schema@npm:^9.0.18, @graphql-tools/schema@npm:^9.0.19": + version: 9.0.19 + resolution: "@graphql-tools/schema@npm:9.0.19" dependencies: - "@ethersproject/bignumber": ^5.7.0 - "@ethersproject/bytes": ^5.7.0 - "@ethersproject/keccak256": ^5.7.0 - "@ethersproject/logger": ^5.7.0 - "@ethersproject/sha2": ^5.7.0 - "@ethersproject/strings": ^5.7.0 - checksum: 9a02f37f801c96068c3e7721f83719d060175bc4e80439fe060e92bd7acfcb6ac1330c7e71c49f4c2535ca1308f2acdcb01e00133129aac00581724c2d6293f3 + "@graphql-tools/merge": ^8.4.1 + "@graphql-tools/utils": ^9.2.1 + tslib: ^2.4.0 + value-or-promise: ^1.0.12 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 1be91f61bf4be0c1c9aa640a6ad5b58328d5434d15e78ba73a47263420939db6741ad6723dece4611257e7e1e56518e116b76513a3014305d3f52d67aafb62fb languageName: node linkType: hard -"@ethersproject/strings@npm:5.7.0, @ethersproject/strings@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/strings@npm:5.7.0" +"@graphql-tools/stitch@npm:^8.7.48": + version: 8.7.50 + resolution: "@graphql-tools/stitch@npm:8.7.50" dependencies: - "@ethersproject/bytes": ^5.7.0 - "@ethersproject/constants": ^5.7.0 - "@ethersproject/logger": ^5.7.0 - checksum: 5ff78693ae3fdf3cf23e1f6dc047a61e44c8197d2408c42719fef8cb7b7b3613a4eec88ac0ed1f9f5558c74fe0de7ae3195a29ca91a239c74b9f444d8e8b50df + "@graphql-tools/batch-delegate": ^8.4.27 + "@graphql-tools/delegate": ^9.0.35 + "@graphql-tools/executor": ^0.0.20 + "@graphql-tools/merge": ^8.4.2 + "@graphql-tools/schema": ^9.0.18 + "@graphql-tools/utils": ^9.2.1 + "@graphql-tools/wrap": ^9.4.2 + tslib: ^2.4.0 + value-or-promise: ^1.0.11 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: dfa6dbf81c68a9859e489d576d8aebba80bd631dc979a6e33e6379f290481455e995c30ff8a14a9f7df5b5927758f1404adae7586e5ce75b4f393d8d338e28e8 languageName: node linkType: hard -"@ethersproject/transactions@npm:5.7.0, @ethersproject/transactions@npm:^5.4.0, @ethersproject/transactions@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/transactions@npm:5.7.0" +"@graphql-tools/stitching-directives@npm:^2.3.34": + version: 2.3.34 + resolution: "@graphql-tools/stitching-directives@npm:2.3.34" dependencies: - "@ethersproject/address": ^5.7.0 - "@ethersproject/bignumber": ^5.7.0 - "@ethersproject/bytes": ^5.7.0 - "@ethersproject/constants": ^5.7.0 - "@ethersproject/keccak256": ^5.7.0 - "@ethersproject/logger": ^5.7.0 - "@ethersproject/properties": ^5.7.0 - "@ethersproject/rlp": ^5.7.0 - "@ethersproject/signing-key": ^5.7.0 - checksum: a31b71996d2b283f68486241bff0d3ea3f1ba0e8f1322a8fffc239ccc4f4a7eb2ea9994b8fd2f093283fd75f87bae68171e01b6265261f821369aca319884a79 + "@graphql-tools/delegate": ^9.0.31 + "@graphql-tools/utils": ^9.2.1 + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: a1e5726fdec32211327484cde54dd0b46057c97b02f91808ff48d879af419e0d9129b7fcc9db399ceb2cac234328cf480dbdb4963160e9bf32a9314679f52628 languageName: node linkType: hard -"@ethersproject/units@npm:5.7.0": - version: 5.7.0 - resolution: "@ethersproject/units@npm:5.7.0" +"@graphql-tools/url-loader@npm:^7.17.18": + version: 7.17.18 + resolution: "@graphql-tools/url-loader@npm:7.17.18" dependencies: - "@ethersproject/bignumber": ^5.7.0 - "@ethersproject/constants": ^5.7.0 - "@ethersproject/logger": ^5.7.0 - checksum: 304714f848cd32e57df31bf545f7ad35c2a72adae957198b28cbc62166daa929322a07bff6e9c9ac4577ab6aa0de0546b065ed1b2d20b19e25748b7d475cb0fc + "@ardatan/sync-fetch": ^0.0.1 + "@graphql-tools/delegate": ^9.0.31 + "@graphql-tools/executor-graphql-ws": ^0.0.14 + "@graphql-tools/executor-http": ^0.1.7 + "@graphql-tools/executor-legacy-ws": ^0.0.11 + "@graphql-tools/utils": ^9.2.1 + "@graphql-tools/wrap": ^9.4.2 + "@types/ws": ^8.0.0 + "@whatwg-node/fetch": ^0.8.0 + isomorphic-ws: ^5.0.0 + tslib: ^2.4.0 + value-or-promise: ^1.0.11 + ws: ^8.12.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: e4deccaa4b333a91022e9a19594e6c696c4463c94f091893c8d056e4090b2c8c5e5036b0e7bcce79f0c4c0ad2f0e6f3c8d170a765f0d5a2ba29965bee096f355 languageName: node linkType: hard -"@ethersproject/wallet@npm:5.7.0, @ethersproject/wallet@npm:^5.4.0, @ethersproject/wallet@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/wallet@npm:5.7.0" +"@graphql-tools/utils@npm:^10.0.0": + version: 10.0.13 + resolution: "@graphql-tools/utils@npm:10.0.13" dependencies: - "@ethersproject/abstract-provider": ^5.7.0 - "@ethersproject/abstract-signer": ^5.7.0 - "@ethersproject/address": ^5.7.0 - "@ethersproject/bignumber": ^5.7.0 - "@ethersproject/bytes": ^5.7.0 - "@ethersproject/hash": ^5.7.0 - "@ethersproject/hdnode": ^5.7.0 - "@ethersproject/json-wallets": ^5.7.0 - "@ethersproject/keccak256": ^5.7.0 - "@ethersproject/logger": ^5.7.0 - "@ethersproject/properties": ^5.7.0 - "@ethersproject/random": ^5.7.0 - "@ethersproject/signing-key": ^5.7.0 - "@ethersproject/transactions": ^5.7.0 - "@ethersproject/wordlists": ^5.7.0 - checksum: a4009bf7331eddab38e3015b5e9101ef92de7f705b00a6196b997db0e5635b6d83561674d46c90c6f77b87c0500fe4a6b0183ba13749efc22db59c99deb82fbd + "@graphql-typed-document-node/core": ^3.1.1 + cross-inspect: 1.0.0 + dset: ^3.1.2 + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 1e09f2dc5700a1d4be19a63024f9bc0edbeec5eaeb8bca31c95d0a1d2934b9a33adf7f2205800d8c58ec91656f3ecac954c1c9126eddc7f25600586d5eb23eb5 languageName: node linkType: hard -"@ethersproject/web@npm:5.7.1, @ethersproject/web@npm:^5.7.0": - version: 5.7.1 - resolution: "@ethersproject/web@npm:5.7.1" +"@graphql-tools/utils@npm:^8.8.0": + version: 8.13.1 + resolution: "@graphql-tools/utils@npm:8.13.1" dependencies: - "@ethersproject/base64": ^5.7.0 - "@ethersproject/bytes": ^5.7.0 - "@ethersproject/logger": ^5.7.0 - "@ethersproject/properties": ^5.7.0 - "@ethersproject/strings": ^5.7.0 - checksum: 7028c47103f82fd2e2c197ce0eecfacaa9180ffeec7de7845b1f4f9b19d84081b7a48227aaddde05a4aaa526af574a9a0ce01cc0fc75e3e371f84b38b5b16b2b + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: ff04fdeb29e9ac596ea53386cd5b23cd741bb14c1997c6b0ba3c34ca165bd82b528a355e8c8e2ba726eb39e833ba9cbb0851ba0addb8c6d367089a1145bf9a49 languageName: node linkType: hard -"@ethersproject/wordlists@npm:5.7.0, @ethersproject/wordlists@npm:^5.7.0": - version: 5.7.0 - resolution: "@ethersproject/wordlists@npm:5.7.0" +"@graphql-tools/utils@npm:^9.0.0, @graphql-tools/utils@npm:^9.1.1, @graphql-tools/utils@npm:^9.2.1": + version: 9.2.1 + resolution: "@graphql-tools/utils@npm:9.2.1" dependencies: - "@ethersproject/bytes": ^5.7.0 - "@ethersproject/hash": ^5.7.0 - "@ethersproject/logger": ^5.7.0 - "@ethersproject/properties": ^5.7.0 - "@ethersproject/strings": ^5.7.0 - checksum: 30eb6eb0731f9ef5faa44bf9c0c6e950bcaaef61e4d2d9ce0ae6d341f4e2d6d1f4ab4f8880bfce03b7aac4b862fb740e1421170cfbf8e2aafc359277d49e6e97 + "@graphql-typed-document-node/core": ^3.1.1 + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 94ed12df5f49e5c338322ffd931236a687a3d5c443bf499f9baab5d4fcd9792234111142be8aa506a01ca2e82732996c4e1d8f6159ff9cc7fdc5c97f63e55226 languageName: node linkType: hard -"@fastify/busboy@npm:^2.0.0": - version: 2.1.0 - resolution: "@fastify/busboy@npm:2.1.0" - checksum: 3233abd10f73e50668cb4bb278a79b7b3fadd30215ac6458299b0e5a09a29c3586ec07597aae6bd93f5cbedfcef43a8aeea51829cd28fc13850cdbcd324c28d5 +"@graphql-tools/wrap@npm:^9.4.2": + version: 9.4.2 + resolution: "@graphql-tools/wrap@npm:9.4.2" + dependencies: + "@graphql-tools/delegate": ^9.0.31 + "@graphql-tools/schema": ^9.0.18 + "@graphql-tools/utils": ^9.2.1 + tslib: ^2.4.0 + value-or-promise: ^1.0.12 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 294d529a4b8e90cceaaa691e3b67d932626ad59a53260166e0281506a4e1a2b9d1c018984dffd0edcf518555baee23beaa8665167226da014d4d0b58c37cd744 + languageName: node + linkType: hard + +"@graphql-typed-document-node/core@npm:3.2.0, @graphql-typed-document-node/core@npm:^3.1.1, @graphql-typed-document-node/core@npm:^3.2.0": + version: 3.2.0 + resolution: "@graphql-typed-document-node/core@npm:3.2.0" + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: fa44443accd28c8cf4cb96aaaf39d144a22e8b091b13366843f4e97d19c7bfeaf609ce3c7603a4aeffe385081eaf8ea245d078633a7324c11c5ec4b2011bb76d + languageName: node + linkType: hard + +"@graphql-yoga/logger@npm:^0.0.1": + version: 0.0.1 + resolution: "@graphql-yoga/logger@npm:0.0.1" + dependencies: + tslib: ^2.3.1 + checksum: 56de91d03d6c163187bfacbdea4b3317b69d789cc2374f5d1ef3c058a0c98d8540088bd0e4435177f2afd074429e18e45182f3854247e7ec92c769432a74a7d4 + languageName: node + linkType: hard + +"@graphql-yoga/subscription@npm:^3.1.0": + version: 3.1.0 + resolution: "@graphql-yoga/subscription@npm:3.1.0" + dependencies: + "@graphql-yoga/typed-event-target": ^1.0.0 + "@repeaterjs/repeater": ^3.0.4 + "@whatwg-node/events": 0.0.2 + tslib: ^2.3.1 + checksum: 0496d20bcd6a5630bdd87c8dfa87de53e4be3fa1b5b7ecb114d5329ff93a46e188ae50069f47c7423d1fabe3baf6fbe61a1f3b87e0e2fe20f41c4d9b18e14ff6 + languageName: node + linkType: hard + +"@graphql-yoga/typed-event-target@npm:^1.0.0": + version: 1.0.0 + resolution: "@graphql-yoga/typed-event-target@npm:1.0.0" + dependencies: + "@repeaterjs/repeater": ^3.0.4 + tslib: ^2.3.1 + checksum: fc194c3e7f8ed00447c53ead4b2ac72948a53052866464e531b09880b2a017bd303e5171134848a5bed8c11a841b9817685bf6b445b4c0e622305a090d0a014e languageName: node linkType: hard @@ -2464,6 +3973,13 @@ __metadata: languageName: node linkType: hard +"@pancakeswap/chains@npm:^0.4.0": + version: 0.4.0 + resolution: "@pancakeswap/chains@npm:0.4.0" + checksum: c9f2a7023b850fadcaa46b54d15fba3172795a5b2f9f03c323fbe647fe990fdeb88a413b1775a503c5e93d6290634f5b2fb1046dec8ce5f4039e8e4769e56e68 + languageName: node + linkType: hard + "@pancakeswap/multicall@npm:3.4.0": version: 3.4.0 resolution: "@pancakeswap/multicall@npm:3.4.0" @@ -2491,6 +4007,22 @@ __metadata: languageName: node linkType: hard +"@pancakeswap/sdk@npm:^5.7.5": + version: 5.7.5 + resolution: "@pancakeswap/sdk@npm:5.7.5" + dependencies: + "@pancakeswap/chains": ^0.4.0 + "@pancakeswap/swap-sdk-core": 1.0.0 + big.js: ^5.2.2 + decimal.js-light: ^2.5.0 + tiny-invariant: ^1.3.0 + tiny-warning: ^1.0.3 + toformat: ^2.0.0 + viem: 1.19.11 + checksum: dab0c4526753b1325da2c3d4ac56ce0269f5520a37fe0335040a92e11988f9608cb0627c7d73eec8b0c812524c77d980b2c8416c630d5105e491a6252c72f8a5 + languageName: node + linkType: hard + "@pancakeswap/smart-router@npm:^4.14.2": version: 4.14.2 resolution: "@pancakeswap/smart-router@npm:4.14.2" @@ -2657,6 +4189,20 @@ __metadata: languageName: node linkType: hard +"@repeaterjs/repeater@npm:3.0.4": + version: 3.0.4 + resolution: "@repeaterjs/repeater@npm:3.0.4" + checksum: cca0db3e802bc26fcce0b4a574074d9956da53bf43094de03c0e4732d05e13441279a92f0b96e2a7a39da50933684947a138c1213406eaafe39cfd4683d6c0df + languageName: node + linkType: hard + +"@repeaterjs/repeater@npm:^3.0.4": + version: 3.0.5 + resolution: "@repeaterjs/repeater@npm:3.0.5" + checksum: 4f66020679a2e7a93fbd43d40a7ae6a187d6d7d148b019cca025791dade452599848bd20cd225861a65629571806c551a18cd40190426eb74b050710ac3ae865 + languageName: node + linkType: hard + "@scure/base@npm:~1.1.0, @scure/base@npm:~1.1.2, @scure/base@npm:~1.1.4": version: 1.1.5 resolution: "@scure/base@npm:1.1.5" @@ -3257,7 +4803,7 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:^7.0.12": +"@types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.9": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" checksum: 97ed0cb44d4070aecea772b7b2e2ed971e10c81ec87dd4ecc160322ffa55ff330dace1793489540e3e318d90942064bb697cc0f8989391797792d919737b3b98 @@ -3385,6 +4931,15 @@ __metadata: languageName: node linkType: hard +"@types/ws@npm:^8.0.0": + version: 8.5.10 + resolution: "@types/ws@npm:8.5.10" + dependencies: + "@types/node": "*" + checksum: 3ec416ea2be24042ebd677932a462cf16d2080393d8d7d0b1b3f5d6eaa4a7387aaf0eefb99193c0bfd29444857cf2e0c3ac89899e130550dc6c14ada8a46d25e + languageName: node + linkType: hard + "@typescript-eslint/eslint-plugin@npm:^6.13.1": version: 6.20.0 resolution: "@typescript-eslint/eslint-plugin@npm:6.20.0" @@ -3508,6 +5063,17 @@ __metadata: languageName: node linkType: hard +"@urql/core@npm:^3.2.0": + version: 3.2.2 + resolution: "@urql/core@npm:3.2.2" + dependencies: + wonka: ^6.1.2 + peerDependencies: + graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: 5e8d90c77ce76b1bb273ba38072b688c31bd2761f2484748dbf4106170eb4ef86bcaf683858e6d97f67d13e3a2503938de70dbd6deafa8925c5c6b534f657e85 + languageName: node + linkType: hard + "@venusprotocol/governance-contracts@npm:^1.4.0, @venusprotocol/governance-contracts@npm:^1.4.0-dev.1": version: 1.4.0 resolution: "@venusprotocol/governance-contracts@npm:1.4.0" @@ -3687,7 +5253,6 @@ __metadata: dependencies: "@graphprotocol/client-cli": ^3.0.0 "@pancakeswap/sdk": ^5.7.5 - "@pancakeswap/smart-router": ^4.14.2 "@pancakeswap/v3-core": ^1.0.2 "@typechain/ethers-v5": ^10.1.0 "@typechain/hardhat": ^6.1.2 @@ -3699,14 +5264,15 @@ __metadata: "@venusprotocol/oracle": ^1.7.3 "@venusprotocol/solidity-utilities": ^1.1.0 "@wagmi/cli": ^2.0.4 + abitype: 0.10.0 eslint: ^7.32.0 + graphql: ^16.8.1 hardhat: ^2.19.5 prettier: 2.7.1 ts-node: ^10.9.1 typechain: ^8.3.2 typescript: ^5.3.2 urql: ^3.0.3 - viem: ^2.7.1 languageName: unknown linkType: soft @@ -3834,6 +5400,66 @@ __metadata: languageName: node linkType: hard +"@whatwg-node/cookie-store@npm:^0.0.1": + version: 0.0.1 + resolution: "@whatwg-node/cookie-store@npm:0.0.1" + dependencies: + "@whatwg-node/events": ^0.0.3 + tslib: ^2.3.1 + checksum: b19ba18a6bc944a7fd41b1cb59263b3a7cc8e8389ea9476a7e5b1a539b6e33a590848701aebe95062de75e29cfab49897637b9aecfcaddba29b113391e354e68 + languageName: node + linkType: hard + +"@whatwg-node/events@npm:0.0.2": + version: 0.0.2 + resolution: "@whatwg-node/events@npm:0.0.2" + checksum: 6d491801d36967d5d62443cca6ef39d41cf882d575839d2e9d1a5f394722cd24ef84fe9e897bb72c01bd198871fda9ff0e8b1ac5aa6f3f814f87d92b7f28fdcc + languageName: node + linkType: hard + +"@whatwg-node/events@npm:^0.0.3": + version: 0.0.3 + resolution: "@whatwg-node/events@npm:0.0.3" + checksum: af26f40d4d0a0f5f0ee45fc6124afb8d6b33988dae96ab0fb87aa5e66d1ff08a749491b9da533ea524bbaebd4a770736f254d574a91ab4455386aa098cee8c77 + languageName: node + linkType: hard + +"@whatwg-node/fetch@npm:^0.8.0, @whatwg-node/fetch@npm:^0.8.1, @whatwg-node/fetch@npm:^0.8.2, @whatwg-node/fetch@npm:^0.8.3, @whatwg-node/fetch@npm:^0.8.4": + version: 0.8.8 + resolution: "@whatwg-node/fetch@npm:0.8.8" + dependencies: + "@peculiar/webcrypto": ^1.4.0 + "@whatwg-node/node-fetch": ^0.3.6 + busboy: ^1.6.0 + urlpattern-polyfill: ^8.0.0 + web-streams-polyfill: ^3.2.1 + checksum: 891407ba57e32e5af70a3b0a86980c4466dcf2ba8581b6927475c85400280b163085519e98821dd94776da9aa1b0b1e221e718009e2abed9c8a0d4721025b2ab + languageName: node + linkType: hard + +"@whatwg-node/node-fetch@npm:^0.3.6": + version: 0.3.6 + resolution: "@whatwg-node/node-fetch@npm:0.3.6" + dependencies: + "@whatwg-node/events": ^0.0.3 + busboy: ^1.6.0 + fast-querystring: ^1.1.1 + fast-url-parser: ^1.1.3 + tslib: ^2.3.1 + checksum: d3d7b0a0242c0511c7b666de66d9096fb24ea251426ce76e3a26a8ca17408de5d4d4f81b5aaec840cc7025f0321fb97e06067c53f377c844a5a9473dd76491ae + languageName: node + linkType: hard + +"@whatwg-node/server@npm:^0.7.3, @whatwg-node/server@npm:^0.7.4": + version: 0.7.7 + resolution: "@whatwg-node/server@npm:0.7.7" + dependencies: + "@whatwg-node/fetch": ^0.8.3 + tslib: ^2.3.1 + checksum: 7f931e3aa7f6fd5a224b10709d032798e0710409c28ffcca244a96e85cfb308e384543dff68397405d5f53ce5a2effa1be420613eb17b53bcab97d0407ebc5b9 + languageName: node + linkType: hard + "JSONStream@npm:^1.3.5": version: 1.3.5 resolution: "JSONStream@npm:1.3.5" @@ -3882,18 +5508,18 @@ __metadata: languageName: node linkType: hard -"abitype@npm:1.0.0": - version: 1.0.0 - resolution: "abitype@npm:1.0.0" +"abitype@npm:0.9.8": + version: 0.9.8 + resolution: "abitype@npm:0.9.8" peerDependencies: typescript: ">=5.0.4" - zod: ^3 >=3.22.0 + zod: ^3 >=3.19.1 peerDependenciesMeta: typescript: optional: true zod: optional: true - checksum: ea2c0548c3ba58c37a6de7483d63389074da498e63d803b742bbe94eb4eaa1f51a35d000c424058b2583aef56698cf07c696eb3bc4dd0303bc20c6f0826a241a + checksum: d7d887f29d6821e3f7a400de9620511b80ead3f85c5c87308aaec97965d3493e6687ed816e88722b4f512249bd66dee9e69231b49af0e1db8f69400a62c87cf6 languageName: node linkType: hard @@ -4067,7 +5693,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^8.0.1, ajv@npm:^8.11.0": +"ajv@npm:^8.0.0, ajv@npm:^8.0.1, ajv@npm:^8.11.0, ajv@npm:^8.12.0": version: 8.12.0 resolution: "ajv@npm:8.12.0" dependencies: @@ -4400,13 +6026,24 @@ __metadata: languageName: node linkType: hard -"asap@npm:~2.0.6": +"asap@npm:^2.0.6, asap@npm:~2.0.3, asap@npm:~2.0.6": version: 2.0.6 resolution: "asap@npm:2.0.6" checksum: b296c92c4b969e973260e47523207cd5769abd27c245a68c26dc7a0fe8053c55bb04360237cb51cab1df52be939da77150ace99ad331fb7fb13b3423ed73ff3d languageName: node linkType: hard +"asn1js@npm:^3.0.1, asn1js@npm:^3.0.5": + version: 3.0.5 + resolution: "asn1js@npm:3.0.5" + dependencies: + pvtsutils: ^1.3.2 + pvutils: ^1.1.3 + tslib: ^2.4.0 + checksum: 3b6af1bbadd5762ef8ead5daf2f6bda1bc9e23bc825c4dcc996aa1f9521ad7390a64028565d95d98090d69c8431f004c71cccb866004759169d7c203cf9075eb + languageName: node + linkType: hard + "assertion-error@npm:^1.1.0": version: 1.1.0 resolution: "assertion-error@npm:1.1.0" @@ -4476,6 +6113,13 @@ __metadata: languageName: node linkType: hard +"auto-bind@npm:~4.0.0": + version: 4.0.0 + resolution: "auto-bind@npm:4.0.0" + checksum: 00cad71cce5742faccb7dd65c1b55ebc4f45add4b0c9a1547b10b05bab22813230133b0c892c67ba3eb969a4524710c5e43cc45c72898ec84e56f3a596e7a04f + languageName: node + linkType: hard + "available-typed-arrays@npm:^1.0.5": version: 1.0.6 resolution: "available-typed-arrays@npm:1.0.6" @@ -4503,6 +6147,50 @@ __metadata: languageName: node linkType: hard +"babel-plugin-syntax-trailing-function-commas@npm:^7.0.0-beta.0": + version: 7.0.0-beta.0 + resolution: "babel-plugin-syntax-trailing-function-commas@npm:7.0.0-beta.0" + checksum: e37509156ca945dd9e4b82c66dd74f2d842ad917bd280cb5aa67960942300cd065eeac476d2514bdcdedec071277a358f6d517c31d9f9244d9bbc3619a8ecf8a + languageName: node + linkType: hard + +"babel-preset-fbjs@npm:^3.4.0": + version: 3.4.0 + resolution: "babel-preset-fbjs@npm:3.4.0" + dependencies: + "@babel/plugin-proposal-class-properties": ^7.0.0 + "@babel/plugin-proposal-object-rest-spread": ^7.0.0 + "@babel/plugin-syntax-class-properties": ^7.0.0 + "@babel/plugin-syntax-flow": ^7.0.0 + "@babel/plugin-syntax-jsx": ^7.0.0 + "@babel/plugin-syntax-object-rest-spread": ^7.0.0 + "@babel/plugin-transform-arrow-functions": ^7.0.0 + "@babel/plugin-transform-block-scoped-functions": ^7.0.0 + "@babel/plugin-transform-block-scoping": ^7.0.0 + "@babel/plugin-transform-classes": ^7.0.0 + "@babel/plugin-transform-computed-properties": ^7.0.0 + "@babel/plugin-transform-destructuring": ^7.0.0 + "@babel/plugin-transform-flow-strip-types": ^7.0.0 + "@babel/plugin-transform-for-of": ^7.0.0 + "@babel/plugin-transform-function-name": ^7.0.0 + "@babel/plugin-transform-literals": ^7.0.0 + "@babel/plugin-transform-member-expression-literals": ^7.0.0 + "@babel/plugin-transform-modules-commonjs": ^7.0.0 + "@babel/plugin-transform-object-super": ^7.0.0 + "@babel/plugin-transform-parameters": ^7.0.0 + "@babel/plugin-transform-property-literals": ^7.0.0 + "@babel/plugin-transform-react-display-name": ^7.0.0 + "@babel/plugin-transform-react-jsx": ^7.0.0 + "@babel/plugin-transform-shorthand-properties": ^7.0.0 + "@babel/plugin-transform-spread": ^7.0.0 + "@babel/plugin-transform-template-literals": ^7.0.0 + babel-plugin-syntax-trailing-function-commas: ^7.0.0-beta.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: b3352cf690729125997f254bc31b9c4db347f8646f1571958ced1c45f0da89439e183e1c88e35397eb0361b9e1fbb1dd8142d3f4647814deb427e53c54f44d5f + languageName: node + linkType: hard + "balanced-match@npm:^1.0.0": version: 1.0.2 resolution: "balanced-match@npm:1.0.2" @@ -4510,6 +6198,13 @@ __metadata: languageName: node linkType: hard +"base-64@npm:^0.1.0": + version: 0.1.0 + resolution: "base-64@npm:0.1.0" + checksum: 5a42938f82372ab5392cbacc85a5a78115cbbd9dbef9f7540fa47d78763a3a8bd7d598475f0d92341f66285afd377509851a9bb5c67bbecb89686e9255d5b3eb + languageName: node + linkType: hard + "base-x@npm:^3.0.2": version: 3.0.9 resolution: "base-x@npm:3.0.9" @@ -4540,6 +6235,13 @@ __metadata: languageName: node linkType: hard +"big.js@npm:^5.2.2": + version: 5.2.2 + resolution: "big.js@npm:5.2.2" + checksum: b89b6e8419b097a8fb4ed2399a1931a68c612bce3cfd5ca8c214b2d017531191070f990598de2fc6f3f993d91c0f08aa82697717f6b3b8732c9731866d233c9e + languageName: node + linkType: hard + "bigint-crypto-utils@npm:^3.0.23": version: 3.3.0 resolution: "bigint-crypto-utils@npm:3.3.0" @@ -4737,6 +6439,15 @@ __metadata: languageName: node linkType: hard +"bser@npm:2.1.1": + version: 2.1.1 + resolution: "bser@npm:2.1.1" + dependencies: + node-int64: ^0.4.0 + checksum: 9ba4dc58ce86300c862bffc3ae91f00b2a03b01ee07f3564beeeaf82aa243b8b03ba53f123b0b842c190d4399b94697970c8e7cf7b1ea44b61aa28c3526a4449 + languageName: node + linkType: hard + "buffer-alloc-unsafe@npm:^1.1.0": version: 1.1.0 resolution: "buffer-alloc-unsafe@npm:1.1.0" @@ -4823,6 +6534,15 @@ __metadata: languageName: node linkType: hard +"busboy@npm:^1.6.0": + version: 1.6.0 + resolution: "busboy@npm:1.6.0" + dependencies: + streamsearch: ^1.1.0 + checksum: 32801e2c0164e12106bf236291a00795c3c4e4b709ae02132883fe8478ba2ae23743b11c5735a0aae8afe65ac4b6ca4568b91f0d9fed1fdbc32ede824a73746e + languageName: node + linkType: hard + "bytes@npm:3.1.2": version: 3.1.2 resolution: "bytes@npm:3.1.2" @@ -4918,7 +6638,7 @@ __metadata: languageName: node linkType: hard -"camelcase@npm:^5.3.1": +"camelcase@npm:^5.0.0, camelcase@npm:^5.3.1": version: 5.3.1 resolution: "camelcase@npm:5.3.1" checksum: e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b @@ -5055,6 +6775,42 @@ __metadata: languageName: node linkType: hard +"change-case-all@npm:1.0.14": + version: 1.0.14 + resolution: "change-case-all@npm:1.0.14" + dependencies: + change-case: ^4.1.2 + is-lower-case: ^2.0.2 + is-upper-case: ^2.0.2 + lower-case: ^2.0.2 + lower-case-first: ^2.0.2 + sponge-case: ^1.0.1 + swap-case: ^2.0.2 + title-case: ^3.0.3 + upper-case: ^2.0.2 + upper-case-first: ^2.0.2 + checksum: 6ff893e005e1bf115cc2969cc5ca3610f7c6ece9e90b7927ed12c980c7d3ea9a565150d246c6dba0fee21aaacbd38d69b98a4670d96b892c76f66e46616506d3 + languageName: node + linkType: hard + +"change-case-all@npm:1.0.15": + version: 1.0.15 + resolution: "change-case-all@npm:1.0.15" + dependencies: + change-case: ^4.1.2 + is-lower-case: ^2.0.2 + is-upper-case: ^2.0.2 + lower-case: ^2.0.2 + lower-case-first: ^2.0.2 + sponge-case: ^1.0.1 + swap-case: ^2.0.2 + title-case: ^3.0.3 + upper-case: ^2.0.2 + upper-case-first: ^2.0.2 + checksum: e1dabdcd8447a3690f3faf15f92979dfbc113109b50916976e1d5e518e6cfdebee4f05f54d0ca24fb79a4bf835185b59ae25e967bb3dc10bd236a775b19ecc52 + languageName: node + linkType: hard + "change-case@npm:^4.1.2": version: 4.1.2 resolution: "change-case@npm:4.1.2" @@ -5247,6 +7003,17 @@ __metadata: languageName: node linkType: hard +"cliui@npm:^6.0.0": + version: 6.0.0 + resolution: "cliui@npm:6.0.0" + dependencies: + string-width: ^4.2.0 + strip-ansi: ^6.0.0 + wrap-ansi: ^6.2.0 + checksum: 4fcfd26d292c9f00238117f39fc797608292ae36bac2168cfee4c85923817d0607fe21b3329a8621e01aedf512c99b7eaa60e363a671ffd378df6649fb48ae42 + languageName: node + linkType: hard + "cliui@npm:^7.0.2": version: 7.0.4 resolution: "cliui@npm:7.0.4" @@ -5402,6 +7169,13 @@ __metadata: languageName: node linkType: hard +"common-tags@npm:1.8.2": + version: 1.8.2 + resolution: "common-tags@npm:1.8.2" + checksum: 767a6255a84bbc47df49a60ab583053bb29a7d9687066a18500a516188a062c4e4cd52de341f22de0b07062e699b1b8fe3cfa1cb55b241cb9301aeb4f45b4dff + languageName: node + linkType: hard + "compare-func@npm:^2.0.0": version: 2.0.0 resolution: "compare-func@npm:2.0.0" @@ -5551,6 +7325,13 @@ __metadata: languageName: node linkType: hard +"convert-source-map@npm:^2.0.0": + version: 2.0.0 + resolution: "convert-source-map@npm:2.0.0" + checksum: 63ae9933be5a2b8d4509daca5124e20c14d023c820258e484e32dc324d34c2754e71297c94a05784064ad27615037ef677e3f0c00469fb55f409d2bb21261035 + languageName: node + linkType: hard + "cookie@npm:^0.4.1": version: 0.4.2 resolution: "cookie@npm:0.4.2" @@ -5577,7 +7358,7 @@ __metadata: languageName: node linkType: hard -"cosmiconfig@npm:^8.0.0": +"cosmiconfig@npm:^8.0.0, cosmiconfig@npm:^8.1.3": version: 8.3.6 resolution: "cosmiconfig@npm:8.3.6" dependencies: @@ -5637,6 +7418,24 @@ __metadata: languageName: node linkType: hard +"cross-fetch@npm:^3.1.5": + version: 3.1.8 + resolution: "cross-fetch@npm:3.1.8" + dependencies: + node-fetch: ^2.6.12 + checksum: 78f993fa099eaaa041122ab037fe9503ecbbcb9daef234d1d2e0b9230a983f64d645d088c464e21a247b825a08dc444a6e7064adfa93536d3a9454b4745b3632 + languageName: node + linkType: hard + +"cross-inspect@npm:1.0.0": + version: 1.0.0 + resolution: "cross-inspect@npm:1.0.0" + dependencies: + tslib: ^2.4.0 + checksum: 975c81799549627027254eb70f1c349cefb14435d580bea6f351f510c839dcb1a9288983407bac2ad317e6eff29cf1e99299606da21f404562bfa64cec502239 + languageName: node + linkType: hard + "cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" @@ -5680,6 +7479,20 @@ __metadata: languageName: node linkType: hard +"dataloader@npm:2.2.2, dataloader@npm:^2.2.2": + version: 2.2.2 + resolution: "dataloader@npm:2.2.2" + checksum: 4dabd247089c29f194e94d5434d504f99156c5c214a03463c20f3f17f40398d7e179edee69a27c16e315519ac8739042a810090087ae26449a0e685156a02c65 + languageName: node + linkType: hard + +"dayjs@npm:1.11.7": + version: 1.11.7 + resolution: "dayjs@npm:1.11.7" + checksum: 5003a7c1dd9ed51385beb658231c3548700b82d3548c0cfbe549d85f2d08e90e972510282b7506941452c58d32136d6362f009c77ca55381a09c704e9f177ebb + languageName: node + linkType: hard + "death@npm:^1.1.0": version: 1.1.0 resolution: "death@npm:1.1.0" @@ -5718,7 +7531,7 @@ __metadata: languageName: node linkType: hard -"decamelize@npm:^1.1.0": +"decamelize@npm:^1.1.0, decamelize@npm:^1.2.0": version: 1.2.0 resolution: "decamelize@npm:1.2.0" checksum: ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa @@ -5732,6 +7545,13 @@ __metadata: languageName: node linkType: hard +"decimal.js-light@npm:^2.5.0": + version: 2.5.1 + resolution: "decimal.js-light@npm:2.5.1" + checksum: f5a2c7eac1c4541c8ab8a5c8abea64fc1761cefc7794bd5f8afd57a8a78d1b51785e0c4e4f85f4895a043eaa90ddca1edc3981d1263eb6ddce60f32bf5fe66c9 + languageName: node + linkType: hard + "decompress-response@npm:^6.0.0": version: 6.0.0 resolution: "decompress-response@npm:6.0.0" @@ -5823,6 +7643,13 @@ __metadata: languageName: node linkType: hard +"dependency-graph@npm:0.11.0, dependency-graph@npm:^0.11.0": + version: 0.11.0 + resolution: "dependency-graph@npm:0.11.0" + checksum: 477204beaa9be69e642bc31ffe7a8c383d0cf48fa27acbc91c5df01431ab913e65c154213d2ef83d034c98d77280743ec85e5da018a97a18dd43d3c0b78b28cd + languageName: node + linkType: hard + "deprecation@npm:^2.0.0": version: 2.3.1 resolution: "deprecation@npm:2.3.1" @@ -5882,6 +7709,16 @@ __metadata: languageName: node linkType: hard +"dnscache@npm:^1.0.2": + version: 1.0.2 + resolution: "dnscache@npm:1.0.2" + dependencies: + asap: ^2.0.6 + lodash.clone: ^4.5.0 + checksum: e42ccad52138837e8806d15d41e60cad8c7e09e5681fee02c32d5705a0be8e7146bc3992478088b6135b8c279c0f69e3f7586d57e40a18dc9904ccb796ed1c52 + languageName: node + linkType: hard + "doctrine@npm:^2.1.0": version: 2.1.0 resolution: "doctrine@npm:2.1.0" @@ -5933,13 +7770,20 @@ __metadata: languageName: node linkType: hard -"dotenv@npm:^16.0.1, dotenv@npm:^16.3.1": +"dotenv@npm:^16.0.1, dotenv@npm:^16.0.3, dotenv@npm:^16.3.1": version: 16.4.1 resolution: "dotenv@npm:16.4.1" checksum: a343f0a1d156deef8c60034f797969867af4dbccfacedd4ac15fad04547e7ffe0553b58fc3b27a5837950f0d977e38e9234943fbcec4aeced4e3d044309a76ab languageName: node linkType: hard +"dset@npm:^3.1.1, dset@npm:^3.1.2": + version: 3.1.3 + resolution: "dset@npm:3.1.3" + checksum: 5db964a36c60c51aa3f7088bfe1dc5c0eedd9a6ef3b216935bb70ef4a7b8fc40fd2f9bb16b9a4692c9c9772cea60cfefb108d2d09fbd53c85ea8f6cd54502d6a + languageName: node + linkType: hard + "duplexer2@npm:~0.1.0": version: 0.1.4 resolution: "duplexer2@npm:0.1.4" @@ -6839,6 +8683,13 @@ __metadata: languageName: node linkType: hard +"fast-decode-uri-component@npm:^1.0.1": + version: 1.0.1 + resolution: "fast-decode-uri-component@npm:1.0.1" + checksum: 427a48fe0907e76f0e9a2c228e253b4d8a8ab21d130ee9e4bb8339c5ba4086235cf9576831f7b20955a752eae4b525a177ff9d5825dd8d416e7726939194fbee + languageName: node + linkType: hard + "fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" @@ -6880,6 +8731,24 @@ __metadata: languageName: node linkType: hard +"fast-querystring@npm:^1.1.1": + version: 1.1.2 + resolution: "fast-querystring@npm:1.1.2" + dependencies: + fast-decode-uri-component: ^1.0.1 + checksum: 7149f82ee9ac39a9c08c7ffe435b9f6deade76ae5e3675fe1835720513e8c4bc541e666b4b7b1c0c07e08f369dcf4828d00f2bee39889a90a168e1439cf27b0b + languageName: node + linkType: hard + +"fast-url-parser@npm:^1.1.3": + version: 1.1.3 + resolution: "fast-url-parser@npm:1.1.3" + dependencies: + punycode: ^1.3.2 + checksum: 5043d0c4a8d775ff58504d56c096563c11b113e4cb8a2668c6f824a1cd4fb3812e2fdf76537eb24a7ce4ae7def6bd9747da630c617cf2a4b6ce0c42514e4f21c + languageName: node + linkType: hard + "fastest-levenshtein@npm:^1.0.16": version: 1.0.16 resolution: "fastest-levenshtein@npm:1.0.16" @@ -6896,6 +8765,57 @@ __metadata: languageName: node linkType: hard +"fb-watchman@npm:^2.0.0": + version: 2.0.2 + resolution: "fb-watchman@npm:2.0.2" + dependencies: + bser: 2.1.1 + checksum: b15a124cef28916fe07b400eb87cbc73ca082c142abf7ca8e8de6af43eca79ca7bd13eb4d4d48240b3bd3136eaac40d16e42d6edf87a8e5d1dd8070626860c78 + languageName: node + linkType: hard + +"fbjs-css-vars@npm:^1.0.0": + version: 1.0.2 + resolution: "fbjs-css-vars@npm:1.0.2" + checksum: 72baf6d22c45b75109118b4daecb6c8016d4c83c8c0f23f683f22e9d7c21f32fff6201d288df46eb561e3c7d4bb4489b8ad140b7f56444c453ba407e8bd28511 + languageName: node + linkType: hard + +"fbjs@npm:^3.0.0": + version: 3.0.5 + resolution: "fbjs@npm:3.0.5" + dependencies: + cross-fetch: ^3.1.5 + fbjs-css-vars: ^1.0.0 + loose-envify: ^1.0.0 + object-assign: ^4.1.0 + promise: ^7.1.1 + setimmediate: ^1.0.5 + ua-parser-js: ^1.0.35 + checksum: e609b5b64686bc96495a5c67728ed9b2710b9b3d695c5759c5f5e47c9483d1c323543ac777a86459e3694efc5712c6ce7212e944feb19752867d699568bb0e54 + languageName: node + linkType: hard + +"fets@npm:^0.1.1": + version: 0.1.5 + resolution: "fets@npm:0.1.5" + dependencies: + "@ardatan/fast-json-stringify": ^0.0.6 + "@whatwg-node/cookie-store": ^0.0.1 + "@whatwg-node/fetch": ^0.8.2 + "@whatwg-node/server": ^0.7.4 + ajv: ^8.12.0 + ajv-formats: ^2.1.1 + hotscript: ^1.0.11 + json-schema-to-ts: ^2.7.2 + openapi-types: ^12.1.0 + tslib: ^2.3.1 + zod: ^3.21.4 + zod-to-json-schema: ^3.20.5 + checksum: ca2364bbe2717e9310e9543f1c1a0b698e879626716f5463afbc07bfc4b901c21c15e384defb75b34fcd40adda133da76af9ba2a540f66765fd8695d5ba095d2 + languageName: node + linkType: hard + "figures@npm:^2.0.0": version: 2.0.0 resolution: "figures@npm:2.0.0" @@ -7051,6 +8971,13 @@ __metadata: languageName: node linkType: hard +"foreach@npm:^2.0.4": + version: 2.0.6 + resolution: "foreach@npm:2.0.6" + checksum: f7b68494545ee41cbd0b0425ebf5386c265dc38ef2a9b0d5cd91a1b82172e939b4cf9387f8e0ebf6db4e368fc79ed323f2198424d5c774515ac3ed9b08901c0e + languageName: node + linkType: hard + "foreground-child@npm:^3.1.0": version: 3.1.1 resolution: "foreground-child@npm:3.1.1" @@ -7301,7 +9228,7 @@ __metadata: languageName: node linkType: hard -"get-caller-file@npm:^2.0.5": +"get-caller-file@npm:^2.0.1, get-caller-file@npm:^2.0.5": version: 2.0.5 resolution: "get-caller-file@npm:2.0.5" checksum: b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 @@ -7443,7 +9370,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^10.2.2, glob@npm:^10.3.10": +"glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.7": version: 10.3.10 resolution: "glob@npm:10.3.10" dependencies: @@ -7471,7 +9398,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.0.0, glob@npm:^7.1.3": +"glob@npm:^7.0.0, glob@npm:^7.1.1, glob@npm:^7.1.3": version: 7.2.3 resolution: "glob@npm:7.2.3" dependencies: @@ -7568,7 +9495,7 @@ __metadata: languageName: node linkType: hard -"globby@npm:^11.1.0": +"globby@npm:^11.0.3, globby@npm:^11.1.0": version: 11.1.0 resolution: "globby@npm:11.1.0" dependencies: @@ -8008,6 +9935,13 @@ __metadata: languageName: node linkType: hard +"hash-it@npm:^6.0.0": + version: 6.0.0 + resolution: "hash-it@npm:6.0.0" + checksum: 10ca948ff7902a752344c3975c1a5c76ba9e4aa0363032f347a7235cce98473dce60fe4399b05979596aedf649adaf5b3f792a55b9b64ad59ae686e43300c2d1 + languageName: node + linkType: hard + "hash.js@npm:1.1.7, hash.js@npm:^1.0.0, hash.js@npm:^1.0.3, hash.js@npm:^1.1.7": version: 1.1.7 resolution: "hash.js@npm:1.1.7" @@ -8096,6 +10030,13 @@ __metadata: languageName: node linkType: hard +"hotscript@npm:^1.0.11": + version: 1.0.13 + resolution: "hotscript@npm:1.0.13" + checksum: 09141bde1dfea1fd28e21b3c8c6e849593998dc42fc93980404bd1ad8e66ae96c0bacf03b53ee645fa736e56bcc135176ba08c1f20e93566c26856f7f3024d9c + languageName: node + linkType: hard + "http-basic@npm:^8.1.1": version: 8.1.3 resolution: "http-basic@npm:8.1.3" @@ -8255,6 +10196,13 @@ __metadata: languageName: node linkType: hard +"immediate@npm:~3.0.5": + version: 3.0.6 + resolution: "immediate@npm:3.0.6" + checksum: f9b3486477555997657f70318cc8d3416159f208bec4cca3ff3442fd266bc23f50f0c9bd8547e1371a6b5e82b821ec9a7044a4f7b944798b25aa3cc6d5e63e62 + languageName: node + linkType: hard + "immutable@npm:^4.0.0-rc.12": version: 4.3.5 resolution: "immutable@npm:4.3.5" @@ -8262,6 +10210,13 @@ __metadata: languageName: node linkType: hard +"immutable@npm:~3.7.6": + version: 3.7.6 + resolution: "immutable@npm:3.7.6" + checksum: 8cccfb22d3ecf14fe0c474612e96d6bb5d117493e7639fe6642fb81e78c9ac4b698dd8a322c105001a709ad873ffc90e30bad7db5d9a3ef0b54a6e1db0258e8e + languageName: node + linkType: hard + "import-fresh@npm:^3.0.0, import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0": version: 3.3.0 resolution: "import-fresh@npm:3.3.0" @@ -8282,6 +10237,13 @@ __metadata: languageName: node linkType: hard +"import-from@npm:4.0.0": + version: 4.0.0 + resolution: "import-from@npm:4.0.0" + checksum: 1fa29c05b048da18914e91d9a529e5d9b91774bebbfab10e53f59bcc1667917672b971cf102fee857f142e5e433ce69fa1f0a596e1c7d82f9947a5ec352694b9 + languageName: node + linkType: hard + "import-meta-resolve@npm:^4.0.0": version: 4.0.0 resolution: "import-meta-resolve@npm:4.0.0" @@ -8398,6 +10360,15 @@ __metadata: languageName: node linkType: hard +"invariant@npm:^2.2.4": + version: 2.2.4 + resolution: "invariant@npm:2.2.4" + dependencies: + loose-envify: ^1.0.0 + checksum: cc3182d793aad82a8d1f0af697b462939cb46066ec48bbf1707c150ad5fad6406137e91a262022c269702e01621f35ef60269f6c0d7fd178487959809acdfb14 + languageName: node + linkType: hard + "io-ts@npm:1.10.4": version: 1.10.4 resolution: "io-ts@npm:1.10.4" @@ -8421,6 +10392,16 @@ __metadata: languageName: node linkType: hard +"is-absolute@npm:^1.0.0": + version: 1.0.0 + resolution: "is-absolute@npm:1.0.0" + dependencies: + is-relative: ^1.0.0 + is-windows: ^1.0.1 + checksum: 9d16b2605eda3f3ce755410f1d423e327ad3a898bcb86c9354cf63970ed3f91ba85e9828aa56f5d6a952b9fae43d0477770f78d37409ae8ecc31e59ebc279b27 + languageName: node + linkType: hard + "is-array-buffer@npm:^3.0.1, is-array-buffer@npm:^3.0.2": version: 3.0.2 resolution: "is-array-buffer@npm:3.0.2" @@ -8508,6 +10489,15 @@ __metadata: languageName: node linkType: hard +"is-docker@npm:^2.0.0": + version: 2.2.1 + resolution: "is-docker@npm:2.2.1" + bin: + is-docker: cli.js + checksum: 3fef7ddbf0be25958e8991ad941901bf5922ab2753c46980b60b05c1bf9c9c2402d35e6dc32e4380b980ef5e1970a5d9d5e5aa2e02d77727c3b6b5e918474c56 + languageName: node + linkType: hard + "is-extglob@npm:^2.1.1": version: 2.1.1 resolution: "is-extglob@npm:2.1.1" @@ -8559,6 +10549,15 @@ __metadata: languageName: node linkType: hard +"is-lower-case@npm:^2.0.2": + version: 2.0.2 + resolution: "is-lower-case@npm:2.0.2" + dependencies: + tslib: ^2.0.3 + checksum: ba57dd1201e15fd9b590654736afccf1b3b68e919f40c23ef13b00ebcc639b1d9c2f81fe86415bff3e8eccffec459786c9ac9dc8f3a19cfa4484206c411c1d7d + languageName: node + linkType: hard + "is-negative-zero@npm:^2.0.2": version: 2.0.2 resolution: "is-negative-zero@npm:2.0.2" @@ -8613,6 +10612,15 @@ __metadata: languageName: node linkType: hard +"is-relative@npm:^1.0.0": + version: 1.0.0 + resolution: "is-relative@npm:1.0.0" + dependencies: + is-unc-path: ^1.0.0 + checksum: 3271a0df109302ef5e14a29dcd5d23d9788e15ade91a40b942b035827ffbb59f7ce9ff82d036ea798541a52913cbf9d2d0b66456340887b51f3542d57b5a4c05 + languageName: node + linkType: hard + "is-shared-array-buffer@npm:^1.0.2": version: 1.0.2 resolution: "is-shared-array-buffer@npm:1.0.2" @@ -8681,6 +10689,15 @@ __metadata: languageName: node linkType: hard +"is-unc-path@npm:^1.0.0": + version: 1.0.0 + resolution: "is-unc-path@npm:1.0.0" + dependencies: + unc-path-regex: ^0.1.2 + checksum: e8abfde203f7409f5b03a5f1f8636e3a41e78b983702ef49d9343eb608cdfe691429398e8815157519b987b739bcfbc73ae7cf4c8582b0ab66add5171088eab6 + languageName: node + linkType: hard + "is-unicode-supported@npm:^0.1.0": version: 0.1.0 resolution: "is-unicode-supported@npm:0.1.0" @@ -8702,6 +10719,15 @@ __metadata: languageName: node linkType: hard +"is-upper-case@npm:^2.0.2": + version: 2.0.2 + resolution: "is-upper-case@npm:2.0.2" + dependencies: + tslib: ^2.0.3 + checksum: cf4fd43c00c2e72cd5cff911923070b89f0933b464941bd782e2315385f80b5a5acd772db3b796542e5e3cfed735f4dffd88c54d62db1ebfc5c3daa7b1af2bc6 + languageName: node + linkType: hard + "is-weakref@npm:^1.0.2": version: 1.0.2 resolution: "is-weakref@npm:1.0.2" @@ -8711,6 +10737,22 @@ __metadata: languageName: node linkType: hard +"is-windows@npm:^1.0.1": + version: 1.0.2 + resolution: "is-windows@npm:1.0.2" + checksum: 438b7e52656fe3b9b293b180defb4e448088e7023a523ec21a91a80b9ff8cdb3377ddb5b6e60f7c7de4fa8b63ab56e121b6705fe081b3cf1b828b0a380009ad7 + languageName: node + linkType: hard + +"is-wsl@npm:^2.1.1": + version: 2.2.0 + resolution: "is-wsl@npm:2.2.0" + dependencies: + is-docker: ^2.0.0 + checksum: 20849846ae414997d290b75e16868e5261e86ff5047f104027026fd61d8b5a9b0b3ade16239f35e1a067b3c7cc02f70183cb661010ed16f4b6c7c93dad1b19d8 + languageName: node + linkType: hard + "isarray@npm:^1.0.0, isarray@npm:~1.0.0": version: 1.0.0 resolution: "isarray@npm:1.0.0" @@ -8756,6 +10798,15 @@ __metadata: languageName: node linkType: hard +"isomorphic-ws@npm:5.0.0, isomorphic-ws@npm:^5.0.0": + version: 5.0.0 + resolution: "isomorphic-ws@npm:5.0.0" + peerDependencies: + ws: "*" + checksum: e20eb2aee09ba96247465fda40c6d22c1153394c0144fa34fe6609f341af4c8c564f60ea3ba762335a7a9c306809349f9b863c8beedf2beea09b299834ad5398 + languageName: node + linkType: hard + "isows@npm:1.0.3": version: 1.0.3 resolution: "isows@npm:1.0.3" @@ -8826,7 +10877,7 @@ __metadata: languageName: node linkType: hard -"js-tokens@npm:^4.0.0": +"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78 @@ -8865,6 +10916,13 @@ __metadata: languageName: node linkType: hard +"json-bigint-patch@npm:^0.0.8": + version: 0.0.8 + resolution: "json-bigint-patch@npm:0.0.8" + checksum: 593de25b2b9dc161cd2c97afda3210602dbe5de1849baee616ecfc25d7daac399400fba7f50a73d69849686bbe9860061a2e04b181f11d0878fde76c3b05801a + languageName: node + linkType: hard + "json-buffer@npm:3.0.1": version: 3.0.1 resolution: "json-buffer@npm:3.0.1" @@ -8893,6 +10951,26 @@ __metadata: languageName: node linkType: hard +"json-pointer@npm:0.6.2": + version: 0.6.2 + resolution: "json-pointer@npm:0.6.2" + dependencies: + foreach: ^2.0.4 + checksum: 668143014b16d7f90e6f0e6c2d756b00b799424f58d750794a79a24cbce595855b224f7861986aaff719579558fbab81fb83c7371f5e24aded9dc33b3838de30 + languageName: node + linkType: hard + +"json-schema-to-ts@npm:^2.7.2": + version: 2.12.0 + resolution: "json-schema-to-ts@npm:2.12.0" + dependencies: + "@babel/runtime": ^7.18.3 + "@types/json-schema": ^7.0.9 + ts-algebra: ^1.2.2 + checksum: 6dc4bc836591d888beb20e8bf45dfa3b75df4a331f18675bd2e39a2262e105e0dc86012031fff0be408499a07ae8bc30f5a879c24696189b2c30a34edd5fa72f + languageName: node + linkType: hard + "json-schema-traverse@npm:^0.4.1": version: 0.4.1 resolution: "json-schema-traverse@npm:0.4.1" @@ -8939,7 +11017,7 @@ __metadata: languageName: node linkType: hard -"json5@npm:^2.1.2": +"json5@npm:^2.1.2, json5@npm:^2.2.2, json5@npm:^2.2.3": version: 2.2.3 resolution: "json5@npm:2.2.3" bin: @@ -9245,6 +11323,15 @@ __metadata: languageName: node linkType: hard +"lie@npm:3.1.1": + version: 3.1.1 + resolution: "lie@npm:3.1.1" + dependencies: + immediate: ~3.0.5 + checksum: 6da9f2121d2dbd15f1eca44c0c7e211e66a99c7b326ec8312645f3648935bc3a658cf0e9fa7b5f10144d9e2641500b4f55bd32754607c3de945b5f443e50ddd1 + languageName: node + linkType: hard + "lines-and-columns@npm:^1.1.6": version: 1.2.4 resolution: "lines-and-columns@npm:1.2.4" @@ -9271,6 +11358,15 @@ __metadata: languageName: node linkType: hard +"localforage@npm:1.10.0": + version: 1.10.0 + resolution: "localforage@npm:1.10.0" + dependencies: + lie: 3.1.1 + checksum: f2978b434dafff9bcb0d9498de57d97eba165402419939c944412e179cab1854782830b5ec196212560b22712d1dd03918939f59cf1d4fc1d756fca7950086cf + languageName: node + linkType: hard + "locate-path@npm:^2.0.0": version: 2.0.0 resolution: "locate-path@npm:2.0.0" @@ -9329,6 +11425,13 @@ __metadata: languageName: node linkType: hard +"lodash.clone@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.clone@npm:4.5.0" + checksum: 5839f22acf3a43c026ac4325f7bcd378f34967415cd0b9fd7efa9bbbf38dc665900d36e040944c5afab94a51ff8a24f6cfc3781fe439705cbad5c722e9506b16 + languageName: node + linkType: hard + "lodash.escaperegexp@npm:^4.1.2": version: 4.1.2 resolution: "lodash.escaperegexp@npm:4.1.2" @@ -9336,6 +11439,13 @@ __metadata: languageName: node linkType: hard +"lodash.get@npm:4.4.2, lodash.get@npm:^4.4.2": + version: 4.4.2 + resolution: "lodash.get@npm:4.4.2" + checksum: e403047ddb03181c9d0e92df9556570e2b67e0f0a930fcbbbd779370972368f5568e914f913e93f3b08f6d492abc71e14d4e9b7a18916c31fa04bd2306efe545 + languageName: node + linkType: hard + "lodash.isequal@npm:^4.5.0": version: 4.5.0 resolution: "lodash.isequal@npm:4.5.0" @@ -9406,6 +11516,13 @@ __metadata: languageName: node linkType: hard +"lodash.topath@npm:^4.5.2": + version: 4.5.2 + resolution: "lodash.topath@npm:4.5.2" + checksum: 04583e220f4bb1c4ac0008ff8f46d9cb4ddce0ea1090085790da30a41f4cb1b904d885cb73257fca619fa825cd96f9bb97c67d039635cb76056e18f5e08bfdee + languageName: node + linkType: hard + "lodash.truncate@npm:^4.4.2": version: 4.4.2 resolution: "lodash.truncate@npm:4.4.2" @@ -9434,7 +11551,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:4.17.21, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.21, lodash@npm:^4.17.4": +"lodash@npm:4.17.21, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:~4.17.0": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 @@ -9461,6 +11578,17 @@ __metadata: languageName: node linkType: hard +"loose-envify@npm:^1.0.0": + version: 1.4.0 + resolution: "loose-envify@npm:1.4.0" + dependencies: + js-tokens: ^3.0.0 || ^4.0.0 + bin: + loose-envify: cli.js + checksum: 6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4 + languageName: node + linkType: hard + "loupe@npm:^2.3.6": version: 2.3.7 resolution: "loupe@npm:2.3.7" @@ -9470,6 +11598,15 @@ __metadata: languageName: node linkType: hard +"lower-case-first@npm:^2.0.2": + version: 2.0.2 + resolution: "lower-case-first@npm:2.0.2" + dependencies: + tslib: ^2.0.3 + checksum: 33e3da1098ddda219ce125d4ab7a78a944972c0ee8872e95b6ccc35df8ad405284ab233b0ba4d72315ad1a06fe2f0d418ee4cba9ec1ef1c386dea78899fc8958 + languageName: node + linkType: hard + "lower-case@npm:^2.0.2": version: 2.0.2 resolution: "lower-case@npm:2.0.2" @@ -9511,6 +11648,13 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^7.14.1": + version: 7.18.3 + resolution: "lru-cache@npm:7.18.3" + checksum: e550d772384709deea3f141af34b6d4fa392e2e418c1498c078de0ee63670f1f46f5eee746e8ef7e69e1c895af0d4224e62ee33e66a543a14763b0f2e74c1356 + languageName: node + linkType: hard + "lru_map@npm:^0.3.3": version: 0.3.3 resolution: "lru_map@npm:0.3.3" @@ -9553,6 +11697,13 @@ __metadata: languageName: node linkType: hard +"map-cache@npm:^0.2.0": + version: 0.2.2 + resolution: "map-cache@npm:0.2.2" + checksum: 3067cea54285c43848bb4539f978a15dedc63c03022abeec6ef05c8cb6829f920f13b94bcaf04142fc6a088318e564c4785704072910d120d55dbc2e0c421969 + languageName: node + linkType: hard + "map-obj@npm:^1.0.0": version: 1.0.1 resolution: "map-obj@npm:1.0.1" @@ -9682,6 +11833,18 @@ __metadata: languageName: node linkType: hard +"meros@npm:^1.2.1": + version: 1.3.0 + resolution: "meros@npm:1.3.0" + peerDependencies: + "@types/node": ">=13" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: ea86c83fe9357d3eb2f5bad20909e12642c7bc8c10340d9bd0968b48f69ec453de14f7e5032d138ad04cb10d79b8c9fb3c9601bb515e8fbdf9bec4eed62994ad + languageName: node + linkType: hard + "micro-ftch@npm:^0.3.1": version: 0.3.1 resolution: "micro-ftch@npm:0.3.1" @@ -10146,7 +12309,7 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.8": +"node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.12, node-fetch@npm:^2.6.8": version: 2.7.0 resolution: "node-fetch@npm:2.7.0" dependencies: @@ -10191,6 +12354,13 @@ __metadata: languageName: node linkType: hard +"node-int64@npm:^0.4.0": + version: 0.4.0 + resolution: "node-int64@npm:0.4.0" + checksum: d0b30b1ee6d961851c60d5eaa745d30b5c95d94bc0e74b81e5292f7c42a49e3af87f1eb9e89f59456f80645d679202537de751b7d72e9e40ceea40c5e449057e + languageName: node + linkType: hard + "node-releases@npm:^2.0.14": version: 2.0.14 resolution: "node-releases@npm:2.0.14" @@ -10263,6 +12433,15 @@ __metadata: languageName: node linkType: hard +"normalize-path@npm:^2.1.1": + version: 2.1.1 + resolution: "normalize-path@npm:2.1.1" + dependencies: + remove-trailing-separator: ^1.0.1 + checksum: 7e9cbdcf7f5b8da7aa191fbfe33daf290cdcd8c038f422faf1b8a83c972bf7a6d94c5be34c4326cb00fb63bc0fd97d9fbcfaf2e5d6142332c2cd36d2e1b86cea + languageName: node + linkType: hard + "normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": version: 3.0.0 resolution: "normalize-path@npm:3.0.0" @@ -10485,6 +12664,13 @@ __metadata: languageName: node linkType: hard +"nullthrows@npm:^1.1.1": + version: 1.1.1 + resolution: "nullthrows@npm:1.1.1" + checksum: 10806b92121253eb1b08ecf707d92480f5331ba8ae5b23fa3eb0548ad24196eb797ed47606153006568a5733ea9e528a3579f21421f7828e09e7756f4bdd386f + languageName: node + linkType: hard + "number-to-bn@npm:1.7.0": version: 1.7.0 resolution: "number-to-bn@npm:1.7.0" @@ -10502,6 +12688,13 @@ __metadata: languageName: node linkType: hard +"object-inspect@npm:1.10.3": + version: 1.10.3 + resolution: "object-inspect@npm:1.10.3" + checksum: 9a56db2e0146fe94a7a9c78f677a2a28eec11d0ae13430e0bb2cb908fdd2d3feb7dbba7c638b9b7f88ace01d9a937227a8801709d13afb76613775aeb68632d3 + languageName: node + linkType: hard + "object-inspect@npm:^1.13.1, object-inspect@npm:^1.9.0": version: 1.13.1 resolution: "object-inspect@npm:1.13.1" @@ -10596,6 +12789,23 @@ __metadata: languageName: node linkType: hard +"open@npm:^7.4.2": + version: 7.4.2 + resolution: "open@npm:7.4.2" + dependencies: + is-docker: ^2.0.0 + is-wsl: ^2.1.1 + checksum: 3333900ec0e420d64c23b831bc3467e57031461d843c801f569b2204a1acc3cd7b3ec3c7897afc9dde86491dfa289708eb92bba164093d8bd88fb2c231843c91 + languageName: node + linkType: hard + +"openapi-types@npm:^12.1.0": + version: 12.1.3 + resolution: "openapi-types@npm:12.1.3" + checksum: 7fa5547f87a58d2aa0eba6e91d396f42d7d31bc3ae140e61b5d60b47d2fd068b48776f42407d5a8da7280cf31195aa128c2fc285e8bb871d1105edee5647a0bb + languageName: node + linkType: hard + "optionator@npm:^0.8.1": version: 0.8.3 resolution: "optionator@npm:0.8.3" @@ -10685,6 +12895,15 @@ __metadata: languageName: node linkType: hard +"p-limit@npm:3.1.0, p-limit@npm:^3.0.2": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: ^0.1.0 + checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 + languageName: node + linkType: hard + "p-limit@npm:^1.1.0": version: 1.3.0 resolution: "p-limit@npm:1.3.0" @@ -10703,15 +12922,6 @@ __metadata: languageName: node linkType: hard -"p-limit@npm:^3.0.2": - version: 3.1.0 - resolution: "p-limit@npm:3.1.0" - dependencies: - yocto-queue: ^0.1.0 - checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 - languageName: node - linkType: hard - "p-limit@npm:^4.0.0": version: 4.0.0 resolution: "p-limit@npm:4.0.0" @@ -10885,6 +13095,17 @@ __metadata: languageName: node linkType: hard +"parse-filepath@npm:^1.0.2": + version: 1.0.2 + resolution: "parse-filepath@npm:1.0.2" + dependencies: + is-absolute: ^1.0.0 + map-cache: ^0.2.0 + path-root: ^0.1.1 + checksum: 6794c3f38d3921f0f7cc63fb1fb0c4d04cd463356ad389c8ce6726d3c50793b9005971f4138975a6d7025526058d5e65e9bfe634d0765e84c4e2571152665a69 + languageName: node + linkType: hard + "parse-json@npm:^4.0.0": version: 4.0.0 resolution: "parse-json@npm:4.0.0" @@ -10928,6 +13149,13 @@ __metadata: languageName: node linkType: hard +"path-browserify@npm:1.0.1": + version: 1.0.1 + resolution: "path-browserify@npm:1.0.1" + checksum: c6d7fa376423fe35b95b2d67990060c3ee304fc815ff0a2dc1c6c3cfaff2bd0d572ee67e18f19d0ea3bbe32e8add2a05021132ac40509416459fffee35200699 + languageName: node + linkType: hard + "path-case@npm:^3.0.4": version: 3.0.4 resolution: "path-case@npm:3.0.4" @@ -10987,6 +13215,22 @@ __metadata: languageName: node linkType: hard +"path-root-regex@npm:^0.1.0": + version: 0.1.2 + resolution: "path-root-regex@npm:0.1.2" + checksum: dcd75d1f8e93faabe35a58e875b0f636839b3658ff2ad8c289463c40bc1a844debe0dab73c3398ef9dc8f6ec6c319720aff390cf4633763ddcf3cf4b1bbf7e8b + languageName: node + linkType: hard + +"path-root@npm:^0.1.1": + version: 0.1.1 + resolution: "path-root@npm:0.1.1" + dependencies: + path-root-regex: ^0.1.0 + checksum: ff88aebfc1c59ace510cc06703d67692a11530989920427625e52b66a303ca9b3d4059b0b7d0b2a73248d1ad29bcb342b8b786ec00592f3101d38a45fd3b2e08 + languageName: node + linkType: hard + "path-scurry@npm:^1.10.1": version: 1.10.1 resolution: "path-scurry@npm:1.10.1" @@ -11219,6 +13463,15 @@ __metadata: languageName: node linkType: hard +"promise@npm:^7.1.1": + version: 7.3.1 + resolution: "promise@npm:7.3.1" + dependencies: + asap: ~2.0.3 + checksum: 475bb069130179fbd27ed2ab45f26d8862376a137a57314cf53310bdd85cc986a826fd585829be97ebc0aaf10e9d8e68be1bfe5a4a0364144b1f9eedfa940cf1 + languageName: node + linkType: hard + "promise@npm:^8.0.0": version: 8.3.0 resolution: "promise@npm:8.3.0" @@ -11262,6 +13515,13 @@ __metadata: languageName: node linkType: hard +"punycode@npm:^1.3.2": + version: 1.4.1 + resolution: "punycode@npm:1.4.1" + checksum: fa6e698cb53db45e4628559e557ddaf554103d2a96a1d62892c8f4032cd3bc8871796cae9eabc1bc700e2b6677611521ce5bb1d9a27700086039965d0cf34518 + languageName: node + linkType: hard + "punycode@npm:^2.1.0": version: 2.3.1 resolution: "punycode@npm:2.3.1" @@ -11269,6 +13529,22 @@ __metadata: languageName: node linkType: hard +"pvtsutils@npm:^1.3.2, pvtsutils@npm:^1.3.5": + version: 1.3.5 + resolution: "pvtsutils@npm:1.3.5" + dependencies: + tslib: ^2.6.1 + checksum: e734516b3cb26086c18bd9c012fefe818928a5073178842ab7e62885a090f1dd7bda9c7bb8cd317167502cb8ec86c0b1b0ccd71dac7ab469382a4518157b0d12 + languageName: node + linkType: hard + +"pvutils@npm:^1.1.3": + version: 1.1.3 + resolution: "pvutils@npm:1.1.3" + checksum: 2ee26a9e5176c348977d6ec00d8ee80bff62f51743b1c5fe8abeeb4c5d29d9959cdfe0ce146707a9e6801bce88190fed3002d720b072dc87d031c692820b44c9 + languageName: node + linkType: hard + "qrcode-terminal@npm:^0.12.0": version: 0.12.0 resolution: "qrcode-terminal@npm:0.12.0" @@ -11343,6 +13619,29 @@ __metadata: languageName: node linkType: hard +"react-native-fs@npm:2.20.0": + version: 2.20.0 + resolution: "react-native-fs@npm:2.20.0" + dependencies: + base-64: ^0.1.0 + utf8: ^3.0.0 + peerDependencies: + react-native: "*" + react-native-windows: "*" + peerDependenciesMeta: + react-native-windows: + optional: true + checksum: 0be9bb9a5c13b501d0a3006efc3aa5c0b5b211456ee04718297f4e522532f3527f1daa220bd67d3b82d819ed8fdab8f64b7d6e0d7b768c1fd1d8ec9122d94316 + languageName: node + linkType: hard + +"react-native-path@npm:0.0.5": + version: 0.0.5 + resolution: "react-native-path@npm:0.0.5" + checksum: d5a88ef8a3c4f28cb7aed87ac5be898428417e7ec2ce4dd0a82e87d641a7a3ed590e066693099a5fba2bbde427db5ecc6a5ad811cd42cc5d03c5c08a9e40fa74 + languageName: node + linkType: hard + "read-cmd-shim@npm:^4.0.0": version: 4.0.0 resolution: "read-cmd-shim@npm:4.0.0" @@ -11507,6 +13806,13 @@ __metadata: languageName: node linkType: hard +"regenerator-runtime@npm:^0.14.0": + version: 0.14.1 + resolution: "regenerator-runtime@npm:0.14.1" + checksum: 9f57c93277b5585d3c83b0cf76be47b473ae8c6d9142a46ce8b0291a04bb2cf902059f0f8445dcabb3fb7378e5fe4bb4ea1e008876343d42e46d3b484534ce38 + languageName: node + linkType: hard + "regexp.prototype.flags@npm:^1.5.1": version: 1.5.1 resolution: "regexp.prototype.flags@npm:1.5.1" @@ -11543,6 +13849,24 @@ __metadata: languageName: node linkType: hard +"relay-runtime@npm:12.0.0": + version: 12.0.0 + resolution: "relay-runtime@npm:12.0.0" + dependencies: + "@babel/runtime": ^7.0.0 + fbjs: ^3.0.0 + invariant: ^2.2.4 + checksum: 51cdc8a5e04188982452ae4e7c6ac7d6375ee769130d24ce8e8f9cdd45aa7e11ecd68670f56e30dcee1b4974585e88ecce19e69a9868b80cda0db7678c3b8f0a + languageName: node + linkType: hard + +"remove-trailing-separator@npm:^1.0.1": + version: 1.1.0 + resolution: "remove-trailing-separator@npm:1.1.0" + checksum: d3c20b5a2d987db13e1cca9385d56ecfa1641bae143b620835ac02a6b70ab88f68f117a0021838db826c57b31373d609d52e4f31aca75fc490c862732d595419 + languageName: node + linkType: hard + "req-cwd@npm:^2.0.0": version: 2.0.0 resolution: "req-cwd@npm:2.0.0" @@ -11575,6 +13899,13 @@ __metadata: languageName: node linkType: hard +"require-main-filename@npm:^2.0.0": + version: 2.0.0 + resolution: "require-main-filename@npm:2.0.0" + checksum: e9e294695fea08b076457e9ddff854e81bffbe248ed34c1eec348b7abbd22a0d02e8d75506559e2265e96978f3c4720bd77a6dad84755de8162b357eb6c778c7 + languageName: node + linkType: hard + "resolve-alpn@npm:^1.2.0": version: 1.2.1 resolution: "resolve-alpn@npm:1.2.1" @@ -11710,6 +14041,13 @@ __metadata: languageName: node linkType: hard +"rfdc@npm:^1.2.0": + version: 1.3.1 + resolution: "rfdc@npm:1.3.1" + checksum: d5d1e930aeac7e0e0a485f97db1356e388bdbeff34906d206fe524dd5ada76e95f186944d2e68307183fdc39a54928d4426bbb6734851692cfe9195efba58b79 + languageName: node + linkType: hard + "rimraf@npm:^2.2.8": version: 2.7.1 resolution: "rimraf@npm:2.7.1" @@ -11732,6 +14070,17 @@ __metadata: languageName: node linkType: hard +"rimraf@npm:^5.0.0": + version: 5.0.5 + resolution: "rimraf@npm:5.0.5" + dependencies: + glob: ^10.3.7 + bin: + rimraf: dist/esm/bin.mjs + checksum: d66eef829b2e23b16445f34e73d75c7b7cf4cbc8834b04720def1c8f298eb0753c3d76df77325fad79d0a2c60470525d95f89c2475283ad985fd7441c32732d1 + languageName: node + linkType: hard + "ripemd160@npm:^2.0.0, ripemd160@npm:^2.0.1": version: 2.0.2 resolution: "ripemd160@npm:2.0.2" @@ -12126,6 +14475,13 @@ __metadata: languageName: node linkType: hard +"signedsource@npm:^1.0.0": + version: 1.0.0 + resolution: "signedsource@npm:1.0.0" + checksum: 64b2c8d7a48de9009cfd3aff62bb7c88abf3b8e0421f17ebb1d7f5ca9cc9c3ad10f5a1e3ae6cd804e4e6121c87b668202ae9057065f058ddfbf34ea65f63945d + languageName: node + linkType: hard + "sigstore@npm:^2.2.0": version: 2.2.0 resolution: "sigstore@npm:2.2.0" @@ -12436,6 +14792,15 @@ __metadata: languageName: node linkType: hard +"sponge-case@npm:^1.0.1": + version: 1.0.1 + resolution: "sponge-case@npm:1.0.1" + dependencies: + tslib: ^2.0.3 + checksum: 64f53d930f63c5a9e59d4cae487c1ffa87d25eab682833b01d572cc885e7e3fdbad4f03409a41f03ecb27f1f8959432253eb48332c7007c3388efddb24ba2792 + languageName: node + linkType: hard + "sprintf-js@npm:~1.0.2": version: 1.0.3 resolution: "sprintf-js@npm:1.0.3" @@ -12496,6 +14861,13 @@ __metadata: languageName: node linkType: hard +"streamsearch@npm:^1.1.0": + version: 1.1.0 + resolution: "streamsearch@npm:1.1.0" + checksum: 1cce16cea8405d7a233d32ca5e00a00169cc0e19fbc02aa839959985f267335d435c07f96e5e0edd0eadc6d39c98d5435fb5bbbdefc62c41834eadc5622ad942 + languageName: node + linkType: hard + "string-format@npm:^2.0.0": version: 2.0.0 resolution: "string-format@npm:2.0.0" @@ -12726,6 +15098,15 @@ __metadata: languageName: node linkType: hard +"swap-case@npm:^2.0.2": + version: 2.0.2 + resolution: "swap-case@npm:2.0.2" + dependencies: + tslib: ^2.0.3 + checksum: 6e21c9e1b3cd5735eb2af679a99ec3efc78a14e3d4d5e3fd594e254b91cfd37185b3d1c6e41b22f53a2cdf5d1b963ce30c0fe8b78337e3fd43d0137084670a5f + languageName: node + linkType: hard + "sync-request@npm:^6.0.0": version: 6.1.0 resolution: "sync-request@npm:6.1.0" @@ -12888,6 +15269,20 @@ __metadata: languageName: node linkType: hard +"tiny-invariant@npm:^1.1.0, tiny-invariant@npm:^1.3.0": + version: 1.3.1 + resolution: "tiny-invariant@npm:1.3.1" + checksum: 872dbd1ff20a21303a2fd20ce3a15602cfa7fcf9b228bd694a52e2938224313b5385a1078cb667ed7375d1612194feaca81c4ecbe93121ca1baebe344de4f84c + languageName: node + linkType: hard + +"tiny-lru@npm:^8.0.2": + version: 8.0.2 + resolution: "tiny-lru@npm:8.0.2" + checksum: ec4d884914626760eef05cd57850f21a153adeeb7c4242eb8d44a031f1bd8489f18c1bf5d6f10f0a11c5dcfe03b302f26b00f2b879b38853599486bf0dca8c97 + languageName: node + linkType: hard + "tiny-relative-date@npm:^1.3.0": version: 1.3.0 resolution: "tiny-relative-date@npm:1.3.0" @@ -12895,6 +15290,22 @@ __metadata: languageName: node linkType: hard +"tiny-warning@npm:^1.0.3": + version: 1.0.3 + resolution: "tiny-warning@npm:1.0.3" + checksum: da62c4acac565902f0624b123eed6dd3509bc9a8d30c06e017104bedcf5d35810da8ff72864400ad19c5c7806fc0a8323c68baf3e326af7cb7d969f846100d71 + languageName: node + linkType: hard + +"title-case@npm:^3.0.3": + version: 3.0.3 + resolution: "title-case@npm:3.0.3" + dependencies: + tslib: ^2.0.3 + checksum: e8b7ea006b53cf3208d278455d9f1e22c409459d7f9878da324fa3b18cc0aef8560924c19c744e870394a5d9cddfdbe029ebae9875909ee7f4fc562e7cbfc53e + languageName: node + linkType: hard + "tmp@npm:0.0.33": version: 0.0.33 resolution: "tmp@npm:0.0.33" @@ -12920,6 +15331,13 @@ __metadata: languageName: node linkType: hard +"toformat@npm:^2.0.0": + version: 2.0.0 + resolution: "toformat@npm:2.0.0" + checksum: c75341911a811a85c309e2c3eb8e9c7b60f26e2c629170179fc92ed339a2faf44433ebde75d4ac6dbe6f55a2aa044e1d4cd5242dbdd5e4c047babbe6defd8387 + languageName: node + linkType: hard + "toidentifier@npm:1.0.1": version: 1.0.1 resolution: "toidentifier@npm:1.0.1" @@ -12955,6 +15373,13 @@ __metadata: languageName: node linkType: hard +"ts-algebra@npm:^1.2.2": + version: 1.2.2 + resolution: "ts-algebra@npm:1.2.2" + checksum: eea0c08fba10c4a758086079c575a32c4c050f50087e06fcc1ccd53b045bdf7bdb0ab9597a52a241a714f058ff047cedbddcb1539de5e66bb424aa5b33c677a1 + languageName: node + linkType: hard + "ts-api-utils@npm:^1.0.1": version: 1.0.3 resolution: "ts-api-utils@npm:1.0.3" @@ -13037,6 +15462,17 @@ __metadata: languageName: node linkType: hard +"tsconfig-paths@npm:^4.2.0": + version: 4.2.0 + resolution: "tsconfig-paths@npm:4.2.0" + dependencies: + json5: ^2.2.2 + minimist: ^1.2.6 + strip-bom: ^3.0.0 + checksum: 28c5f7bbbcabc9dabd4117e8fdc61483f6872a1c6b02a4b1c4d68c5b79d06896c3cc9547610c4c3ba64658531caa2de13ead1ea1bf321c7b53e969c4752b98c7 + languageName: node + linkType: hard + "tslib@npm:^1.11.1, tslib@npm:^1.9.3": version: 1.14.1 resolution: "tslib@npm:1.14.1" @@ -13044,13 +15480,27 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.3.1, tslib@npm:^2.5.0": +"tslib@npm:^2.0.0, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.5.0, tslib@npm:^2.6.1, tslib@npm:^2.6.2": version: 2.6.2 resolution: "tslib@npm:2.6.2" checksum: 329ea56123005922f39642318e3d1f0f8265d1e7fcb92c633e0809521da75eeaca28d2cf96d7248229deb40e5c19adf408259f4b9640afd20d13aecc1430f3ad languageName: node linkType: hard +"tslib@npm:~2.4.0": + version: 2.4.1 + resolution: "tslib@npm:2.4.1" + checksum: 19480d6e0313292bd6505d4efe096a6b31c70e21cf08b5febf4da62e95c265c8f571f7b36fcc3d1a17e068032f59c269fab3459d6cd3ed6949eafecf64315fca + languageName: node + linkType: hard + +"tslib@npm:~2.5.0": + version: 2.5.3 + resolution: "tslib@npm:2.5.3" + checksum: 88902b309afaf83259131c1e13da1dceb0ad1682a213143a1346a649143924d78cf3760c448b84d796938fd76127183894f8d85cbb3bf9c4fddbfcc140c0003c + languageName: node + linkType: hard + "tsort@npm:0.0.1": version: 0.0.1 resolution: "tsort@npm:0.0.1" @@ -13254,7 +15704,7 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^4.6.4 || ^5.2.2, typescript@npm:^5.3.2": +"typescript@npm:^4.6.4 || ^5.2.2, typescript@npm:^5.0.4, typescript@npm:^5.3.2": version: 5.3.3 resolution: "typescript@npm:5.3.3" bin: @@ -13264,7 +15714,7 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@^4.6.4 || ^5.2.2#~builtin, typescript@patch:typescript@^5.3.2#~builtin": +"typescript@patch:typescript@^4.6.4 || ^5.2.2#~builtin, typescript@patch:typescript@^5.0.4#~builtin, typescript@patch:typescript@^5.3.2#~builtin": version: 5.3.3 resolution: "typescript@patch:typescript@npm%3A5.3.3#~builtin::version=5.3.3&hash=f456af" bin: @@ -13288,6 +15738,13 @@ __metadata: languageName: node linkType: hard +"ua-parser-js@npm:^1.0.35": + version: 1.0.37 + resolution: "ua-parser-js@npm:1.0.37" + checksum: 4d481c720d523366d7762dc8a46a1b58967d979aacf786f9ceceb1cd767de069f64a4bdffb63956294f1c0696eb465ddb950f28ba90571709e33521b4bd75e07 + languageName: node + linkType: hard + "uglify-js@npm:^3.1.4": version: 3.17.4 resolution: "uglify-js@npm:3.17.4" @@ -13309,6 +15766,13 @@ __metadata: languageName: node linkType: hard +"unc-path-regex@npm:^0.1.2": + version: 0.1.2 + resolution: "unc-path-regex@npm:0.1.2" + checksum: a05fa2006bf4606051c10fc7968f08ce7b28fa646befafa282813aeb1ac1a56f65cb1b577ca7851af2726198d59475bb49b11776036257b843eaacee2860a4ec + languageName: node + linkType: hard + "undici-types@npm:~5.26.4": version: 5.26.5 resolution: "undici-types@npm:5.26.5" @@ -13394,6 +15858,15 @@ __metadata: languageName: node linkType: hard +"unixify@npm:^1.0.0": + version: 1.0.0 + resolution: "unixify@npm:1.0.0" + dependencies: + normalize-path: ^2.1.1 + checksum: 3be30e48579fc6c7390bd59b4ab9e745fede0c164dfb7351cf710bd1dbef8484b1441186205af6bcb13b731c0c88caf9b33459f7bf8c89e79c046e656ae433f0 + languageName: node + linkType: hard + "unpipe@npm:1.0.0": version: 1.0.0 resolution: "unpipe@npm:1.0.0" @@ -13449,7 +15922,27 @@ __metadata: languageName: node linkType: hard -"utf8@npm:3.0.0": +"urlpattern-polyfill@npm:^8.0.0": + version: 8.0.2 + resolution: "urlpattern-polyfill@npm:8.0.2" + checksum: d2cc0905a613c77e330c426e8697ee522dd9640eda79ac51160a0f6350e103f09b8c327623880989f8ba7325e8d95267b745aa280fdcc2aead80b023e16bd09d + languageName: node + linkType: hard + +"urql@npm:^3.0.3": + version: 3.0.4 + resolution: "urql@npm:3.0.4" + dependencies: + "@urql/core": ^3.2.0 + wonka: ^6.0.0 + peerDependencies: + graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + react: ">= 16.8.0" + checksum: 7ed020a63a81f2095ae6821799a05d09e61805dbc303913d2c1947684177ed135cba00051341459fef77beeef67a6e8694274a9342f8bcaf03126afc8f5a9d44 + languageName: node + linkType: hard + +"utf8@npm:3.0.0, utf8@npm:^3.0.0": version: 3.0.0 resolution: "utf8@npm:3.0.0" checksum: cb89a69ad9ab393e3eae9b25305b3ff08bebca9adc839191a34f90777eb2942f86a96369d2839925fea58f8f722f7e27031d697f10f5f39690f8c5047303e62d @@ -13505,6 +15998,34 @@ __metadata: languageName: node linkType: hard +"value-or-promise@npm:1.0.12, value-or-promise@npm:^1.0.11, value-or-promise@npm:^1.0.12": + version: 1.0.12 + resolution: "value-or-promise@npm:1.0.12" + checksum: f53a66c75b7447c90bbaf946a757ca09c094629cb80ba742f59c980ec3a69be0a385a0e75505dedb4e757862f1a994ca4beaf083a831f24d3ffb3d4bb18cd1e1 + languageName: node + linkType: hard + +"viem@npm:1.19.11": + version: 1.19.11 + resolution: "viem@npm:1.19.11" + dependencies: + "@adraffy/ens-normalize": 1.10.0 + "@noble/curves": 1.2.0 + "@noble/hashes": 1.3.2 + "@scure/bip32": 1.3.2 + "@scure/bip39": 1.2.1 + abitype: 0.9.8 + isows: 1.0.3 + ws: 8.13.0 + peerDependencies: + typescript: ">=5.0.4" + peerDependenciesMeta: + typescript: + optional: true + checksum: 33a26f361bb2597fe0b02dc98382eb66b83473c3a9765833969a45ac7b4017fa62d7ddc42f9d4d0f3473bec7096eb081651851473b4d0ff4ab56f71a2f6378a2 + languageName: node + linkType: hard + "viem@npm:2.0.0": version: 2.0.0 resolution: "viem@npm:2.0.0" @@ -13584,6 +16105,13 @@ __metadata: languageName: node linkType: hard +"web-streams-polyfill@npm:^3.2.1": + version: 3.3.2 + resolution: "web-streams-polyfill@npm:3.3.2" + checksum: 0292f4113c1bda40d8e8ecebee39eb14cc2e2e560a65a6867980e394537a2645130e2c73f5ef6e641fd3697d2f71720ccf659aebaf69a9d5a773f653a0fdf39d + languageName: node + linkType: hard + "web3-utils@npm:^1.3.6": version: 1.10.3 resolution: "web3-utils@npm:1.10.3" @@ -13600,6 +16128,19 @@ __metadata: languageName: node linkType: hard +"webcrypto-core@npm:^1.7.8": + version: 1.7.8 + resolution: "webcrypto-core@npm:1.7.8" + dependencies: + "@peculiar/asn1-schema": ^2.3.8 + "@peculiar/json-schema": ^1.1.12 + asn1js: ^3.0.1 + pvtsutils: ^1.3.5 + tslib: ^2.6.2 + checksum: 58567b41db3acc3af45b344ba967c2de9a725a988fe8c8b4006eaf1f76050c577bd2fdfacc9294a7991f768cd1bae23ec3eb17fda630e5d7d395100910575ba3 + languageName: node + linkType: hard + "webidl-conversions@npm:^3.0.0": version: 3.0.1 resolution: "webidl-conversions@npm:3.0.1" @@ -13630,6 +16171,13 @@ __metadata: languageName: node linkType: hard +"which-module@npm:^2.0.0": + version: 2.0.1 + resolution: "which-module@npm:2.0.1" + checksum: 1967b7ce17a2485544a4fdd9063599f0f773959cca24176dbe8f405e55472d748b7c549cd7920ff6abb8f1ab7db0b0f1b36de1a21c57a8ff741f4f1e792c52be + languageName: node + linkType: hard + "which-typed-array@npm:^1.1.11, which-typed-array@npm:^1.1.13": version: 1.1.13 resolution: "which-typed-array@npm:1.1.13" @@ -13694,6 +16242,13 @@ __metadata: languageName: node linkType: hard +"wonka@npm:^6.0.0, wonka@npm:^6.1.2": + version: 6.3.4 + resolution: "wonka@npm:6.3.4" + checksum: 6bb57955cb2982fb469a7824484e6854b436f89a7f10b6a981348789d88fbc944665771adc4cc404f62416417eb47ab2b8657d898e5301ccd4a53eaac6a10508 + languageName: node + linkType: hard + "word-wrap@npm:~1.2.3": version: 1.2.5 resolution: "word-wrap@npm:1.2.5" @@ -13736,6 +16291,17 @@ __metadata: languageName: node linkType: hard +"wrap-ansi@npm:^6.2.0": + version: 6.2.0 + resolution: "wrap-ansi@npm:6.2.0" + dependencies: + ansi-styles: ^4.0.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + checksum: 6cd96a410161ff617b63581a08376f0cb9162375adeb7956e10c8cd397821f7eb2a6de24eb22a0b28401300bf228c86e50617cd568209b5f6775b93c97d2fe3a + languageName: node + linkType: hard + "wrap-ansi@npm:^8.1.0": version: 8.1.0 resolution: "wrap-ansi@npm:8.1.0" @@ -13809,6 +16375,21 @@ __metadata: languageName: node linkType: hard +"ws@npm:^8.12.0, ws@npm:^8.13.0": + version: 8.16.0 + resolution: "ws@npm:8.16.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: feb3eecd2bae82fa8a8beef800290ce437d8b8063bdc69712725f21aef77c49cb2ff45c6e5e7fce622248f9c7abaee506bae0a9064067ffd6935460c7357321b + languageName: node + linkType: hard + "xtend@npm:~4.0.1": version: 4.0.2 resolution: "xtend@npm:4.0.2" @@ -13816,6 +16397,13 @@ __metadata: languageName: node linkType: hard +"y18n@npm:^4.0.0": + version: 4.0.3 + resolution: "y18n@npm:4.0.3" + checksum: 014dfcd9b5f4105c3bb397c1c8c6429a9df004aa560964fb36732bfb999bfe83d45ae40aeda5b55d21b1ee53d8291580a32a756a443e064317953f08025b1aa4 + languageName: node + linkType: hard + "y18n@npm:^5.0.5": version: 5.0.8 resolution: "y18n@npm:5.0.8" @@ -13844,6 +16432,16 @@ __metadata: languageName: node linkType: hard +"yargs-parser@npm:^18.1.2": + version: 18.1.3 + resolution: "yargs-parser@npm:18.1.3" + dependencies: + camelcase: ^5.0.0 + decamelize: ^1.2.0 + checksum: 60e8c7d1b85814594d3719300ecad4e6ae3796748b0926137bfec1f3042581b8646d67e83c6fc80a692ef08b8390f21ddcacb9464476c39bbdf52e34961dd4d9 + languageName: node + linkType: hard + "yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.3": version: 20.2.9 resolution: "yargs-parser@npm:20.2.9" @@ -13885,7 +16483,26 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^17.0.0, yargs@npm:^17.5.1": +"yargs@npm:^15.3.1": + version: 15.4.1 + resolution: "yargs@npm:15.4.1" + dependencies: + cliui: ^6.0.0 + decamelize: ^1.2.0 + find-up: ^4.1.0 + get-caller-file: ^2.0.1 + require-directory: ^2.1.1 + require-main-filename: ^2.0.0 + set-blocking: ^2.0.0 + string-width: ^4.2.0 + which-module: ^2.0.0 + y18n: ^4.0.0 + yargs-parser: ^18.1.2 + checksum: 40b974f508d8aed28598087720e086ecd32a5fd3e945e95ea4457da04ee9bdb8bdd17fd91acff36dc5b7f0595a735929c514c40c402416bbb87c03f6fb782373 + languageName: node + linkType: hard + +"yargs@npm:^17.0.0, yargs@npm:^17.5.1, yargs@npm:^17.7.1": version: 17.7.2 resolution: "yargs@npm:17.7.2" dependencies: @@ -13939,6 +16556,13 @@ __metadata: languageName: node linkType: hard +"zod@npm:^3.21.4, zod@npm:^3.22.2": + version: 3.22.4 + resolution: "zod@npm:3.22.4" + checksum: 80bfd7f8039b24fddeb0718a2ec7c02aa9856e4838d6aa4864335a047b6b37a3273b191ef335bf0b2002e5c514ef261ffcda5a589fb084a48c336ffc4cdbab7f + languageName: node + linkType: hard + "zod@npm:^3.21.4, zod@npm:^3.22.2, zod@npm:^3.22.3": version: 3.22.4 resolution: "zod@npm:3.22.4" From cb46af572d0d00018ad694b193c570a1085aa439 Mon Sep 17 00:00:00 2001 From: Corey Rice Date: Fri, 2 Feb 2024 11:11:30 -0300 Subject: [PATCH 08/13] refactor: update env files --- .../smart-contracts/.env.example | 0 packages/token-converter-bot/.env.example | 23 +++++++++++++++++++ packages/token-converter-bot/package.json | 4 +++- .../src/config/addresses.ts | 3 +-- .../src/config/clients/publicClient.ts | 2 +- .../src/config/clients/walletClient.ts | 2 +- .../src/converter-bot/index.ts | 2 +- .../token-converter-bot/src/environment.d.ts | 2 +- 8 files changed, 31 insertions(+), 7 deletions(-) rename .env.example => packages/smart-contracts/.env.example (100%) create mode 100644 packages/token-converter-bot/.env.example diff --git a/.env.example b/packages/smart-contracts/.env.example similarity index 100% rename from .env.example rename to packages/smart-contracts/.env.example diff --git a/packages/token-converter-bot/.env.example b/packages/token-converter-bot/.env.example new file mode 100644 index 00000000..01015e36 --- /dev/null +++ b/packages/token-converter-bot/.env.example @@ -0,0 +1,23 @@ +# true or false +FORK=false +NETWORK=bscmainnet + +TELEGRAM_BOT_TOKEN +TELEGRAM_BOT_CHANNEL + +# PRIVATE_KEY_= + +## Archive nodes +#ARCHIVE_NODE_bsctestnet=https://bsc-testnet.nodereal.io/v1/ +#ARCHIVE_NODE_bscmainnet=https://bsc-mainnet.nodereal.io/v1/ +#ARCHIVE_NODE_bscmainnet=http://127.0.0.1:1248 +#ARCHIVE_NODE_sepolia=https://ethereum-sepolia.blockpi.network/v1/rpc/public +#ARCHIVE_NODE_ethereum=https://eth-mainnet.nodereal.io/v1/ +#ARCHIVE_NODE_ethereum=http://127.0.0.1:1248 + +# DEPLOYER_PRIVATE_KEY + +ETHERSCAN_API_KEY= +REPORT_GAS= + +EXPORT=false diff --git a/packages/token-converter-bot/package.json b/packages/token-converter-bot/package.json index 76422860..0230b63b 100644 --- a/packages/token-converter-bot/package.json +++ b/packages/token-converter-bot/package.json @@ -22,10 +22,12 @@ "dependencies": { "@graphprotocol/client-cli": "^3.0.0", "@pancakeswap/sdk": "^5.7.5", + "@pancakeswap/smart-router": "^4.14.2", "abitype": "0.10.0", "graphql": "^16.8.1", "hardhat": "^2.19.5", - "urql": "^3.0.3" + "urql": "^3.0.3", + "viem": "^2.7.1" }, "devDependencies": { "@pancakeswap/v3-core": "^1.0.2", diff --git a/packages/token-converter-bot/src/config/addresses.ts b/packages/token-converter-bot/src/config/addresses.ts index e0d3ea2a..c264f653 100644 --- a/packages/token-converter-bot/src/config/addresses.ts +++ b/packages/token-converter-bot/src/config/addresses.ts @@ -7,7 +7,6 @@ import bsctestnetProtocolReserve from "@venusprotocol/protocol-reserve/deploymen import bscmainnetCore from "@venusprotocol/venus-protocol/deployments/bscmainnet_addresses.json"; import bsctestnetCore from "@venusprotocol/venus-protocol/deployments/bsctestnet_addresses.json"; import { Address } from "viem"; - import { SUPPORTED_CHAINS } from "./chains"; const addresses = { @@ -66,7 +65,7 @@ export type SupportedConverters = | "USDTPrimeConverter" | "XVSVaultConverter"; -const network = process.env.FORKED_NETWORK as SUPPORTED_CHAINS; +const network = process.env.NETWORK as SUPPORTED_CHAINS; export const underlyingToVTokens: Record< Address, diff --git a/packages/token-converter-bot/src/config/clients/publicClient.ts b/packages/token-converter-bot/src/config/clients/publicClient.ts index 5064e6b1..7a770696 100644 --- a/packages/token-converter-bot/src/config/clients/publicClient.ts +++ b/packages/token-converter-bot/src/config/clients/publicClient.ts @@ -4,7 +4,7 @@ import { chains } from "../chains"; import type { SUPPORTED_CHAINS } from "../chains"; export const getPublicClient = (): PublicClient => { - const chainName = process.env.FORKED_NETWORK as SUPPORTED_CHAINS; + const chainName = process.env.NETWORK as SUPPORTED_CHAINS; return createPublicClient({ chain: chains[chainName], transport: http(process.env[`LIVE_NETWORK_${chainName}`]), diff --git a/packages/token-converter-bot/src/config/clients/walletClient.ts b/packages/token-converter-bot/src/config/clients/walletClient.ts index 5f9967f6..a65d7f34 100644 --- a/packages/token-converter-bot/src/config/clients/walletClient.ts +++ b/packages/token-converter-bot/src/config/clients/walletClient.ts @@ -14,7 +14,7 @@ const readPrivateKeyFromEnv = (chainName: string): PrivateKeyAccount => { }; export const getWalletClient = (): WalletClient => { - const chainName = process.env.FORKED_NETWORK as SUPPORTED_CHAINS; + const chainName = process.env.NETWORK as SUPPORTED_CHAINS; return createWalletClient({ chain: chains[chainName], transport: http(process.env[`LIVE_NETWORK_${chainName}`]), diff --git a/packages/token-converter-bot/src/converter-bot/index.ts b/packages/token-converter-bot/src/converter-bot/index.ts index 571d2969..1c2ba123 100644 --- a/packages/token-converter-bot/src/converter-bot/index.ts +++ b/packages/token-converter-bot/src/converter-bot/index.ts @@ -14,7 +14,7 @@ import readTokenConverterConfigs from "./queries/read/readTokenConverterConfigs" import readTokenConvertersTokenBalances, { BalanceResult } from "./queries/read/readTokenConvertersTokenBalances"; import type { Pool } from "./types"; -const network = process.env.FORKED_NETWORK as SUPPORTED_CHAINS; +const network = process.env.NETWORK as SUPPORTED_CHAINS; const isFulfilled = (input: PromiseSettledResult): input is PromiseFulfilledResult => input.status === "fulfilled"; diff --git a/packages/token-converter-bot/src/environment.d.ts b/packages/token-converter-bot/src/environment.d.ts index 182915ea..f34daf4f 100644 --- a/packages/token-converter-bot/src/environment.d.ts +++ b/packages/token-converter-bot/src/environment.d.ts @@ -2,7 +2,7 @@ declare global { namespace NodeJS { interface ProcessEnv { - FORKED_NETWORK: "bsctestnet" | "bscmainnet"; + NETWORK: "bsctestnet" | "bscmainnet"; } } } From 4452b9aa8c622fe0f64c5c08b25bca63e42858a1 Mon Sep 17 00:00:00 2001 From: Corey Rice Date: Fri, 2 Feb 2024 11:13:18 -0300 Subject: [PATCH 09/13] refactor: account for denominator of inputAmount --- packages/token-converter-bot/src/converter-bot/index.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/token-converter-bot/src/converter-bot/index.ts b/packages/token-converter-bot/src/converter-bot/index.ts index 1c2ba123..c57afe87 100644 --- a/packages/token-converter-bot/src/converter-bot/index.ts +++ b/packages/token-converter-bot/src/converter-bot/index.ts @@ -1,5 +1,5 @@ import "dotenv/config"; - +import { Fraction } from "@pancakeswap/sdk"; import { Address } from "viem"; import { coreVTokenAbi, protocolShareReserveAbi, tokenConverterAbi, vBnbAdminAbi } from "../config/abis/generated"; @@ -64,7 +64,8 @@ const executeTrade = async (t: BalanceResult) => { const trade = await tokenConverter.getBestTrade(t.assetIn.address, t.assetOut.address, amountIn[1]); - const minIncome = t.assetOut.balance - trade.inputAmount.numerator; + + const minIncome = BigInt(new Fraction(t.assetOut.balance, 1).subtract(new Fraction(trade.inputAmount.numerator, trade.inputAmount.denominator)).toFixed(0, {})); await tokenConverter.arbitrage(t.tokenConverter, trade, amountIn[1], minIncome); }; From 5602bac13be402db02eb1a9e2744a9961282b535 Mon Sep 17 00:00:00 2001 From: Corey Rice Date: Fri, 2 Feb 2024 11:13:37 -0300 Subject: [PATCH 10/13] refactor: subgraph url by network --- packages/token-converter-bot/src/config/index.ts | 10 ++++++++++ .../src/converter-bot/TokenConverter.ts | 3 ++- 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 packages/token-converter-bot/src/config/index.ts diff --git a/packages/token-converter-bot/src/config/index.ts b/packages/token-converter-bot/src/config/index.ts new file mode 100644 index 00000000..c04add3c --- /dev/null +++ b/packages/token-converter-bot/src/config/index.ts @@ -0,0 +1,10 @@ +const subgraphUrlByNetwork = { + bsctestnet: "https://api.thegraph.com/subgraphs/name/pancakeswap/exchange-v3-chapel", + bscmainnet: "https://api.thegraph.com/subgraphs/name/pancakeswap/exchange-v3-bsc" +} + +const config = { + subgraphUrl: subgraphUrlByNetwork[process.env.NETWORK] +} + +export default config diff --git a/packages/token-converter-bot/src/converter-bot/TokenConverter.ts b/packages/token-converter-bot/src/converter-bot/TokenConverter.ts index 71726e2c..48dcae21 100644 --- a/packages/token-converter-bot/src/converter-bot/TokenConverter.ts +++ b/packages/token-converter-bot/src/converter-bot/TokenConverter.ts @@ -9,6 +9,7 @@ import type { SUPPORTED_CHAINS } from "../config/chains"; import { chains } from "../config/chains"; import publicClient from "../config/clients/publicClient"; import walletClient from "../config/clients/walletClient"; +import config from '../config'; const REVERT_IF_NOT_MINED_AFTER = 60n; // seconds const MAX_HOPS = 5; @@ -36,7 +37,7 @@ export class TokenConverter { abi: tokenConverterOperatorAbi, }; this.v3SubgraphClient = createClient({ - url: "https://api.thegraph.com/subgraphs/name/pancakeswap/exchange-v3-bsc", + url: config.subgraphUrl, requestPolicy: "network-only", }); this.quoteProvider = SmartRouter.createQuoteProvider({ onChainProvider: () => this.publicClient }); From 242fe3a169c7a750b73c1fc65e0949b4bf9ab367 Mon Sep 17 00:00:00 2001 From: Corey Rice Date: Fri, 2 Feb 2024 11:17:52 -0300 Subject: [PATCH 11/13] fix: update lockfile --- .github/workflows/cd.yaml | 4 +- .github/workflows/ci.yaml | 18 ++- .yarnrc.yml | 2 - yarn.lock | 275 ++++++++------------------------------ 4 files changed, 64 insertions(+), 235 deletions(-) diff --git a/.github/workflows/cd.yaml b/.github/workflows/cd.yaml index 40f08c4f..97c6c8ee 100644 --- a/.github/workflows/cd.yaml +++ b/.github/workflows/cd.yaml @@ -18,11 +18,11 @@ jobs: - uses: actions/setup-node@v2 with: + node-version: 20 cache: "yarn" - name: Install dependencies - # Hack to get around failing "ethereumjs-abi The remote archive doesn't match the expected checksum" error - run: YARN_CHECKSUM_BEHAVIOR=update yarn + run: yarn - name: Build run: yarn workspace @venusprotocol/keeper-bot-contracts run build diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 0eb83c9e..e7089f55 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -16,12 +16,11 @@ jobs: - name: Setup Node.js environment uses: actions/setup-node@v2 with: - node-version: 18 + node-version: 20 cache: "yarn" - name: Install dependencies - # Hack to get around failing "ethereumjs-abi The remote archive doesn't match the expected checksum" error - run: YARN_CHECKSUM_BEHAVIOR=update yarn + run: yarn - name: Check linting of solidity and typescript run: yarn lint @@ -36,7 +35,7 @@ jobs: - uses: actions/setup-node@v2 with: - node-version: 18 + node-version: 20 cache: "yarn" - name: Install deps @@ -46,6 +45,7 @@ jobs: run: | source .env.example yarn workspace @venusprotocol/keeper-bot-contracts run hardhat:compile && yarn workspace @venusprotocol/keeper-bot-contracts run hardhat:coverage + - name: Code Coverage Report uses: irongut/CodeCoverageSummary@v1.3.0 continue-on-error: true @@ -78,12 +78,11 @@ jobs: - name: Setup Node.js environment uses: actions/setup-node@v2 with: - node-version: 18 + node-version: 20 cache: "yarn" - name: Install dependencies - # Hack to get around failing "ethereumjs-abi The remote archive doesn't match the expected checksum" error - run: YARN_CHECKSUM_BEHAVIOR=update yarn + run: yarn - name: Build run: yarn workspace @venusprotocol/keeper-bot-contracts run build @@ -106,12 +105,11 @@ jobs: - name: Setup Node.js environment uses: actions/setup-node@v2 with: - node-version: 18 + node-version: 20 cache: "yarn" - name: Install dependencies - # Hack to get around failing "ethereumjs-abi The remote archive doesn't match the expected checksum" error - run: YARN_CHECKSUM_BEHAVIOR=update yarn + run: yarn - name: Export deployments run: | diff --git a/.yarnrc.yml b/.yarnrc.yml index 942c46ac..1f813f99 100644 --- a/.yarnrc.yml +++ b/.yarnrc.yml @@ -5,5 +5,3 @@ plugins: spec: "@yarnpkg/plugin-workspace-tools" yarnPath: .yarn/releases/yarn-3.2.2.cjs - -checksumBehavior: update diff --git a/yarn.lock b/yarn.lock index 97ea6d7e..9954662b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,3 +1,6 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + __metadata: version: 6 cacheKey: 8 @@ -3973,13 +3976,6 @@ __metadata: languageName: node linkType: hard -"@pancakeswap/chains@npm:^0.4.0": - version: 0.4.0 - resolution: "@pancakeswap/chains@npm:0.4.0" - checksum: c9f2a7023b850fadcaa46b54d15fba3172795a5b2f9f03c323fbe647fe990fdeb88a413b1775a503c5e93d6290634f5b2fb1046dec8ce5f4039e8e4769e56e68 - languageName: node - linkType: hard - "@pancakeswap/multicall@npm:3.4.0": version: 3.4.0 resolution: "@pancakeswap/multicall@npm:3.4.0" @@ -4007,22 +4003,6 @@ __metadata: languageName: node linkType: hard -"@pancakeswap/sdk@npm:^5.7.5": - version: 5.7.5 - resolution: "@pancakeswap/sdk@npm:5.7.5" - dependencies: - "@pancakeswap/chains": ^0.4.0 - "@pancakeswap/swap-sdk-core": 1.0.0 - big.js: ^5.2.2 - decimal.js-light: ^2.5.0 - tiny-invariant: ^1.3.0 - tiny-warning: ^1.0.3 - toformat: ^2.0.0 - viem: 1.19.11 - checksum: dab0c4526753b1325da2c3d4ac56ce0269f5520a37fe0335040a92e11988f9608cb0627c7d73eec8b0c812524c77d980b2c8416c630d5105e491a6252c72f8a5 - languageName: node - linkType: hard - "@pancakeswap/smart-router@npm:^4.14.2": version: 4.14.2 resolution: "@pancakeswap/smart-router@npm:4.14.2" @@ -4616,13 +4596,6 @@ __metadata: languageName: node linkType: hard -"@telegraf/types@npm:^6.9.1": - version: 6.9.1 - resolution: "@telegraf/types@npm:6.9.1" - checksum: bafdded5413bfae9bb1369c311c063b7e210b3f950f7df2dc9acf10510ca5e1f928045264684afd31fe96d0645dc2a3d9b979cdb9c29d8a696a6738dd60fa4f9 - languageName: node - linkType: hard - "@trivago/prettier-plugin-sort-imports@npm:3.4.0": version: 3.4.0 resolution: "@trivago/prettier-plugin-sort-imports@npm:3.4.0" @@ -5210,28 +5183,13 @@ __metadata: languageName: node linkType: hard -"@venusprotocol/solidity-utilities@npm:1.3.0, @venusprotocol/solidity-utilities@npm:^1.2.0, @venusprotocol/solidity-utilities@npm:^1.3.0": +"@venusprotocol/solidity-utilities@npm:1.3.0, @venusprotocol/solidity-utilities@npm:^1.1.0, @venusprotocol/solidity-utilities@npm:^1.2.0, @venusprotocol/solidity-utilities@npm:^1.3.0": version: 1.3.0 resolution: "@venusprotocol/solidity-utilities@npm:1.3.0" checksum: d1109365a5e01959c47b25fb129373db93792e60bf1bc0ed324b63c2a64f6e4a7878ebf016cfade94bc41a2c1245d3e861fdc6b8c5844ac210ed1d73e7307e72 languageName: node linkType: hard -"@venusprotocol/solidity-utilities@npm:^1.1.0": - version: 1.1.0 - resolution: "@venusprotocol/solidity-utilities@npm:1.1.0" - checksum: 3b17ec451cd0ba5aaea76686c7bef35757fb158709214be094f73ebd0d643c79817159f7aa162cc694e1a5ee1f02b20e26211a65929113b985827959aae99fa7 - languageName: node - linkType: hard - -"@venusprotocol/tg-error-reporter@workspace:packages/tg-error-reporter": - version: 0.0.0-use.local - resolution: "@venusprotocol/tg-error-reporter@workspace:packages/tg-error-reporter" - dependencies: - telegraf: ^4.15.3 - languageName: unknown - linkType: soft - "@venusprotocol/token-bridge@npm:1.0.0": version: 1.0.0 resolution: "@venusprotocol/token-bridge@npm:1.0.0" @@ -5253,6 +5211,7 @@ __metadata: dependencies: "@graphprotocol/client-cli": ^3.0.0 "@pancakeswap/sdk": ^5.7.5 + "@pancakeswap/smart-router": ^4.14.2 "@pancakeswap/v3-core": ^1.0.2 "@typechain/ethers-v5": ^10.1.0 "@typechain/hardhat": ^6.1.2 @@ -5273,6 +5232,7 @@ __metadata: typechain: ^8.3.2 typescript: ^5.3.2 urql: ^3.0.3 + viem: ^2.7.1 languageName: unknown linkType: soft @@ -5523,6 +5483,21 @@ __metadata: languageName: node linkType: hard +"abitype@npm:1.0.0": + version: 1.0.0 + resolution: "abitype@npm:1.0.0" + peerDependencies: + typescript: ">=5.0.4" + zod: ^3 >=3.22.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + checksum: ea2c0548c3ba58c37a6de7483d63389074da498e63d803b742bbe94eb4eaa1f51a35d000c424058b2583aef56698cf07c696eb3bc4dd0303bc20c6f0826a241a + languageName: node + linkType: hard + "abitype@npm:^0.9.8": version: 0.9.10 resolution: "abitype@npm:0.9.10" @@ -5538,15 +5513,6 @@ __metadata: languageName: node linkType: hard -"abort-controller@npm:^3.0.0": - version: 3.0.0 - resolution: "abort-controller@npm:3.0.0" - dependencies: - event-target-shim: ^5.0.0 - checksum: 170bdba9b47b7e65906a28c8ce4f38a7a369d78e2271706f020849c1bfe0ee2067d4261df8bbb66eb84f79208fd5b710df759d64191db58cfba7ce8ef9c54b75 - languageName: node - linkType: hard - "abstract-level@npm:^1.0.0, abstract-level@npm:^1.0.2, abstract-level@npm:^1.0.3, abstract-level@npm:^1.0.4": version: 1.0.4 resolution: "abstract-level@npm:1.0.4" @@ -5681,18 +5647,6 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.10.0, ajv@npm:^6.12.4, ajv@npm:^6.12.6": - version: 6.12.6 - resolution: "ajv@npm:6.12.6" - dependencies: - fast-deep-equal: ^3.1.1 - fast-json-stable-stringify: ^2.0.0 - json-schema-traverse: ^0.4.1 - uri-js: ^4.2.2 - checksum: 874972efe5c4202ab0a68379481fbd3d1b5d0a7bd6d3cc21d40d3536ebff3352a2a1fabb632d4fd2cc7fe4cbdcd5ed6782084c9bbf7f32a1536d18f9da5007d4 - languageName: node - linkType: hard - "ajv@npm:^8.0.0, ajv@npm:^8.0.1, ajv@npm:^8.11.0, ajv@npm:^8.12.0": version: 8.12.0 resolution: "ajv@npm:8.12.0" @@ -6120,7 +6074,7 @@ __metadata: languageName: node linkType: hard -"available-typed-arrays@npm:^1.0.5": +"available-typed-arrays@npm:^1.0.5, available-typed-arrays@npm:^1.0.6": version: 1.0.6 resolution: "available-typed-arrays@npm:1.0.6" checksum: 8295571eb86447138adf64a0df0c08ae61250b17190bba30e1fae8c80a816077a6d028e5506f602c382c0197d3080bae131e92e331139d55460989580eeae659 @@ -6406,16 +6360,16 @@ __metadata: linkType: hard "browserslist@npm:^4.22.2": - version: 4.22.2 - resolution: "browserslist@npm:4.22.2" + version: 4.22.3 + resolution: "browserslist@npm:4.22.3" dependencies: - caniuse-lite: ^1.0.30001565 - electron-to-chromium: ^1.4.601 + caniuse-lite: ^1.0.30001580 + electron-to-chromium: ^1.4.648 node-releases: ^2.0.14 update-browserslist-db: ^1.0.13 bin: browserslist: cli.js - checksum: 33ddfcd9145220099a7a1ac533cecfe5b7548ffeb29b313e1b57be6459000a1f8fa67e781cf4abee97268ac594d44134fcc4a6b2b4750ceddc9796e3a22076d9 + checksum: e62b17348e92143fe58181b02a6a97c4a98bd812d1dc9274673a54f73eec53dbed1c855ebf73e318ee00ee039f23c9a6d0e7629d24f3baef08c7a5b469742d57 languageName: node linkType: hard @@ -6448,30 +6402,6 @@ __metadata: languageName: node linkType: hard -"buffer-alloc-unsafe@npm:^1.1.0": - version: 1.1.0 - resolution: "buffer-alloc-unsafe@npm:1.1.0" - checksum: c5e18bf51f67754ec843c9af3d4c005051aac5008a3992938dda1344e5cfec77c4b02b4ca303644d1e9a6e281765155ce6356d85c6f5ccc5cd21afc868def396 - languageName: node - linkType: hard - -"buffer-alloc@npm:^1.2.0": - version: 1.2.0 - resolution: "buffer-alloc@npm:1.2.0" - dependencies: - buffer-alloc-unsafe: ^1.1.0 - buffer-fill: ^1.0.0 - checksum: 560cd27f3cbe73c614867da373407d4506309c62fe18de45a1ce191f3785ec6ca2488d802ff82065798542422980ca25f903db078c57822218182c37c3576df5 - languageName: node - linkType: hard - -"buffer-fill@npm:^1.0.0": - version: 1.0.0 - resolution: "buffer-fill@npm:1.0.0" - checksum: c29b4723ddeab01e74b5d3b982a0c6828f2ded49cef049ddca3dac661c874ecdbcecb5dd8380cf0f4adbeb8cff90a7de724126750a1f1e5ebd4eb6c59a1315b1 - languageName: node - linkType: hard - "buffer-from@npm:^1.0.0": version: 1.1.2 resolution: "buffer-from@npm:1.1.2" @@ -6599,7 +6529,7 @@ __metadata: languageName: node linkType: hard -"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2, call-bind@npm:^1.0.4, call-bind@npm:^1.0.5": +"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2, call-bind@npm:^1.0.5": version: 1.0.5 resolution: "call-bind@npm:1.0.5" dependencies: @@ -6652,10 +6582,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30001565": - version: 1.0.30001580 - resolution: "caniuse-lite@npm:1.0.30001580" - checksum: 8d287d1e2a64348365f55562457b52afc8c5e0e8ddf040e18e53395ca165241a697205611dc209dace5c7f7d1d3ee8d566672cce6f9668d658d7930b7a200875 +"caniuse-lite@npm:^1.0.30001580": + version: 1.0.30001583 + resolution: "caniuse-lite@npm:1.0.30001583" + checksum: 35d34eac99c1f55a2232180254e9b674dd6326a89310e6896863bb0484278c6cdf1e934c9fbfb8ef7b215c47467354051f46dfce571f9b34c413f53b67c55aa1 languageName: node linkType: hard @@ -7800,10 +7730,10 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.4.601": - version: 1.4.645 - resolution: "electron-to-chromium@npm:1.4.645" - checksum: ac7d23b8123f09e2343016216b1a8f297ccfb4ae9dccefe3716023344cda8a81656916d40a87039fa3d448cac31c2c4147c6b913b22178a3a00d0221a8019513 +"electron-to-chromium@npm:^1.4.648": + version: 1.4.655 + resolution: "electron-to-chromium@npm:1.4.655" + checksum: ba6ab875b4eff00fc883e5fbce7cbe94aba20b53b6a52e9a4189eef3f71796a9c9efe01cb0d48a3cba529a6beacd5a2a685282b076ab56d55efcfa67fc926bce languageName: node linkType: hard @@ -8586,13 +8516,6 @@ __metadata: languageName: node linkType: hard -"event-target-shim@npm:^5.0.0": - version: 5.0.1 - resolution: "event-target-shim@npm:5.0.1" - checksum: 1ffe3bb22a6d51bdeb6bf6f7cf97d2ff4a74b017ad12284cc9e6a279e727dc30a5de6bb613e5596ff4dc3e517841339ad09a7eec44266eccb1aa201a30448166 - languageName: node - linkType: hard - "evp_bytestokey@npm:^1.0.3": version: 1.0.3 resolution: "evp_bytestokey@npm:1.0.3" @@ -9910,10 +9833,12 @@ __metadata: languageName: node linkType: hard -"has-tostringtag@npm:^1.0.0": - version: 1.0.1 - resolution: "has-tostringtag@npm:1.0.1" - checksum: 5e03ae1c2ecf0de970586b894bb9d98fea941bbe2073ad541495bf770f4f9d454efc21b25603fbbec224540168805836c3ae6266f79e60dc4334830557ea6e65 +"has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.1": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" + dependencies: + has-symbols: ^1.0.3 + checksum: 999d60bb753ad714356b2c6c87b7fb74f32463b8426e159397da4bde5bca7e598ab1073f4d8d4deafac297f2eb311484cd177af242776bf05f0d11565680468d languageName: node linkType: hard @@ -10681,11 +10606,11 @@ __metadata: linkType: hard "is-typed-array@npm:^1.1.10, is-typed-array@npm:^1.1.12, is-typed-array@npm:^1.1.9": - version: 1.1.12 - resolution: "is-typed-array@npm:1.1.12" + version: 1.1.13 + resolution: "is-typed-array@npm:1.1.13" dependencies: - which-typed-array: ^1.1.11 - checksum: 4c89c4a3be07186caddadf92197b17fda663a9d259ea0d44a85f171558270d36059d1c386d34a12cba22dfade5aba497ce22778e866adc9406098c8fc4771796 + which-typed-array: ^1.1.14 + checksum: 150f9ada183a61554c91e1c4290086d2c100b0dff45f60b028519be72a8db964da403c48760723bf5253979b8dffe7b544246e0e5351dcd05c5fdb1dcc1dc0f0 languageName: node linkType: hard @@ -12113,15 +12038,6 @@ __metadata: languageName: node linkType: hard -"mnemonist@npm:^0.38.0": - version: 0.38.5 - resolution: "mnemonist@npm:0.38.5" - dependencies: - obliterator: ^2.0.0 - checksum: 66080afc1616866beb164e230c432964d6eed467cf37ad00e9c10161b8267928124ca8f1d0ecfea86c85568acfa62d54faaf646a86968d1135189a0fdfdd6b78 - languageName: node - linkType: hard - "mnemonist@npm:^0.38.0, mnemonist@npm:^0.38.3": version: 0.38.5 resolution: "mnemonist@npm:0.38.5" @@ -12177,13 +12093,6 @@ __metadata: languageName: node linkType: hard -"mri@npm:^1.2.0": - version: 1.2.0 - resolution: "mri@npm:1.2.0" - checksum: 83f515abbcff60150873e424894a2f65d68037e5a7fcde8a9e2b285ee9c13ac581b63cfc1e6826c4732de3aeb84902f7c1e16b7aff46cd3f897a0f757a894e85 - languageName: node - linkType: hard - "ms@npm:2.1.2": version: 2.1.2 resolution: "ms@npm:2.1.2" @@ -12309,7 +12218,7 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.12, node-fetch@npm:^2.6.8": +"node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.12": version: 2.7.0 resolution: "node-fetch@npm:2.7.0" dependencies: @@ -12997,13 +12906,6 @@ __metadata: languageName: node linkType: hard -"p-timeout@npm:^4.1.0": - version: 4.1.0 - resolution: "p-timeout@npm:4.1.0" - checksum: 321fec524c23a754e3f1487f2b0a5516fd32aba960d5610490eac56f8a0114b549a93f9919ffc05aa68956dc52e8330e0519f3ddf951d208d19c845f9cd778de - languageName: node - linkType: hard - "p-try@npm:^1.0.0": version: 1.0.0 resolution: "p-try@npm:1.0.0" @@ -14162,15 +14064,6 @@ __metadata: languageName: node linkType: hard -"safe-compare@npm:^1.1.4": - version: 1.1.4 - resolution: "safe-compare@npm:1.1.4" - dependencies: - buffer-alloc: ^1.2.0 - checksum: 8c0a08f7a2bec1b33400e17bb7cce40ebe0e53902dbba13735e0131fa432140650de2ab4750637623e02e28edab10fa439825b57a7e8b705cae1deb80a58e516 - languageName: node - linkType: hard - "safe-regex-test@npm:^1.0.0": version: 1.0.2 resolution: "safe-regex-test@npm:1.0.2" @@ -14189,13 +14082,6 @@ __metadata: languageName: node linkType: hard -"sandwich-stream@npm:^2.0.2": - version: 2.0.2 - resolution: "sandwich-stream@npm:2.0.2" - checksum: 666d3276e5390786a4ad69f04da472fb69940d1a279a22aebd49ae78ca8f12855503e69d71f77d4b415144a284ffa14efa811a097ad7df501a68c01438b91282 - languageName: node - linkType: hard - "sc-istanbul@npm:^0.4.5": version: 0.4.6 resolution: "sc-istanbul@npm:0.4.6" @@ -15166,24 +15052,6 @@ __metadata: languageName: node linkType: hard -"telegraf@npm:^4.15.3": - version: 4.15.3 - resolution: "telegraf@npm:4.15.3" - dependencies: - "@telegraf/types": ^6.9.1 - abort-controller: ^3.0.0 - debug: ^4.3.4 - mri: ^1.2.0 - node-fetch: ^2.6.8 - p-timeout: ^4.1.0 - safe-compare: ^1.1.4 - sandwich-stream: ^2.0.2 - bin: - telegraf: lib/cli.mjs - checksum: 350fd2928dd813bbeb8d338480556218f4c2fdc2e1f55e73e739f2e7589a76cc44f3a3279f3e56e6e74be0da75c665077a6d46b17c4885e7d19ca5a37463329d - languageName: node - linkType: hard - "temp-dir@npm:^3.0.0": version: 3.0.0 resolution: "temp-dir@npm:3.0.0" @@ -16047,27 +15915,6 @@ __metadata: languageName: node linkType: hard -"viem@npm:^2.1.1": - version: 2.7.1 - resolution: "viem@npm:2.7.1" - dependencies: - "@adraffy/ens-normalize": 1.10.0 - "@noble/curves": 1.2.0 - "@noble/hashes": 1.3.2 - "@scure/bip32": 1.3.2 - "@scure/bip39": 1.2.1 - abitype: 1.0.0 - isows: 1.0.3 - ws: 8.13.0 - peerDependencies: - typescript: ">=5.0.4" - peerDependenciesMeta: - typescript: - optional: true - checksum: 856810b098ec6e099603e1cead73f71c6c9cae28ceac327c39d56742e2c29bcfa4aa9070a96aef1313740ffc0b8a854744557a36d469239743bd2df1a55970a6 - languageName: node - linkType: hard - "viem@npm:^2.7.1": version: 2.7.1 resolution: "viem@npm:2.7.1" @@ -16178,16 +16025,16 @@ __metadata: languageName: node linkType: hard -"which-typed-array@npm:^1.1.11, which-typed-array@npm:^1.1.13": - version: 1.1.13 - resolution: "which-typed-array@npm:1.1.13" +"which-typed-array@npm:^1.1.13, which-typed-array@npm:^1.1.14": + version: 1.1.14 + resolution: "which-typed-array@npm:1.1.14" dependencies: - available-typed-arrays: ^1.0.5 - call-bind: ^1.0.4 + available-typed-arrays: ^1.0.6 + call-bind: ^1.0.5 for-each: ^0.3.3 gopd: ^1.0.1 - has-tostringtag: ^1.0.0 - checksum: 3828a0d5d72c800e369d447e54c7620742a4cc0c9baf1b5e8c17e9b6ff90d8d861a3a6dd4800f1953dbf80e5e5cec954a289e5b4a223e3bee4aeb1f8c5f33309 + has-tostringtag: ^1.0.1 + checksum: efe30c143c58630dde8ab96f9330e20165bacd77ca843c602b510120a415415573bcdef3ccbc30a0e5aaf20f257360cfe24712aea0008f149ce5bb99834c0c0b languageName: node linkType: hard @@ -16556,23 +16403,9 @@ __metadata: languageName: node linkType: hard -"zod@npm:^3.21.4, zod@npm:^3.22.2": - version: 3.22.4 - resolution: "zod@npm:3.22.4" - checksum: 80bfd7f8039b24fddeb0718a2ec7c02aa9856e4838d6aa4864335a047b6b37a3273b191ef335bf0b2002e5c514ef261ffcda5a589fb084a48c336ffc4cdbab7f - languageName: node - linkType: hard - "zod@npm:^3.21.4, zod@npm:^3.22.2, zod@npm:^3.22.3": version: 3.22.4 resolution: "zod@npm:3.22.4" checksum: 80bfd7f8039b24fddeb0718a2ec7c02aa9856e4838d6aa4864335a047b6b37a3273b191ef335bf0b2002e5c514ef261ffcda5a589fb084a48c336ffc4cdbab7f languageName: node linkType: hard - -"zod@npm:^3.22.2": - version: 3.22.4 - resolution: "zod@npm:3.22.4" - checksum: 80bfd7f8039b24fddeb0718a2ec7c02aa9856e4838d6aa4864335a047b6b37a3273b191ef335bf0b2002e5c514ef261ffcda5a589fb084a48c336ffc4cdbab7f - languageName: node - linkType: hard From 8d81f67142bd242c00b604e35451cf32e5023669 Mon Sep 17 00:00:00 2001 From: Corey Rice Date: Fri, 2 Feb 2024 12:27:56 -0300 Subject: [PATCH 12/13] fix: tests --- .github/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index e7089f55..cd2afcc2 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -43,7 +43,7 @@ jobs: - name: Run hardhat compile and tests coverage run: | - source .env.example + source packages/smart-contracts/.env.example yarn workspace @venusprotocol/keeper-bot-contracts run hardhat:compile && yarn workspace @venusprotocol/keeper-bot-contracts run hardhat:coverage - name: Code Coverage Report From 2eb4c75504b03ffb3c2b626d39fc421c79cf28f5 Mon Sep 17 00:00:00 2001 From: Corey Rice Date: Fri, 2 Feb 2024 12:36:25 -0300 Subject: [PATCH 13/13] chore: :shirt: lint --- packages/token-converter-bot/src/config/addresses.ts | 1 + .../src/config/clients/walletClient.ts | 3 +-- packages/token-converter-bot/src/config/index.ts | 10 +++++----- .../src/converter-bot/TokenConverter.ts | 2 +- .../token-converter-bot/src/converter-bot/index.ts | 8 ++++++-- packages/token-converter-bot/tsconfig.json | 4 ++-- 6 files changed, 16 insertions(+), 12 deletions(-) diff --git a/packages/token-converter-bot/src/config/addresses.ts b/packages/token-converter-bot/src/config/addresses.ts index c264f653..9d1d1890 100644 --- a/packages/token-converter-bot/src/config/addresses.ts +++ b/packages/token-converter-bot/src/config/addresses.ts @@ -7,6 +7,7 @@ import bsctestnetProtocolReserve from "@venusprotocol/protocol-reserve/deploymen import bscmainnetCore from "@venusprotocol/venus-protocol/deployments/bscmainnet_addresses.json"; import bsctestnetCore from "@venusprotocol/venus-protocol/deployments/bsctestnet_addresses.json"; import { Address } from "viem"; + import { SUPPORTED_CHAINS } from "./chains"; const addresses = { diff --git a/packages/token-converter-bot/src/config/clients/walletClient.ts b/packages/token-converter-bot/src/config/clients/walletClient.ts index a65d7f34..7dd1b6c6 100644 --- a/packages/token-converter-bot/src/config/clients/walletClient.ts +++ b/packages/token-converter-bot/src/config/clients/walletClient.ts @@ -1,4 +1,3 @@ - import { HttpTransport, WalletClient, createWalletClient, http } from "viem"; import { PrivateKeyAccount, privateKeyToAccount } from "viem/accounts"; @@ -22,4 +21,4 @@ export const getWalletClient = (): WalletClient { const trade = await tokenConverter.getBestTrade(t.assetIn.address, t.assetOut.address, amountIn[1]); - - const minIncome = BigInt(new Fraction(t.assetOut.balance, 1).subtract(new Fraction(trade.inputAmount.numerator, trade.inputAmount.denominator)).toFixed(0, {})); + const minIncome = BigInt( + new Fraction(t.assetOut.balance, 1) + .subtract(new Fraction(trade.inputAmount.numerator, trade.inputAmount.denominator)) + .toFixed(0, {}), + ); await tokenConverter.arbitrage(t.tokenConverter, trade, amountIn[1], minIncome); }; diff --git a/packages/token-converter-bot/tsconfig.json b/packages/token-converter-bot/tsconfig.json index 220e8554..9971b490 100644 --- a/packages/token-converter-bot/tsconfig.json +++ b/packages/token-converter-bot/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig", "compilerOptions": { - "skipLibCheck": true, + "skipLibCheck": true }, - "files": ["src/module.d.ts", "src/environment.d.ts"], + "files": ["src/module.d.ts", "src/environment.d.ts"] }