From 440734e0b67fdefe5c3e8c598e060b6f25f56f40 Mon Sep 17 00:00:00 2001 From: 0xBossanova <0xBossanova@proton.me> Date: Fri, 14 Apr 2023 11:48:43 +0200 Subject: [PATCH] feat: add rpc url scraper option to config and environment file --- .env.injective.example | 3 ++- .env.juno.example | 1 + .env.terra.example | 1 + src/core/types/base/botConfig.ts | 16 ++++++++++++---- src/core/types/modules.d.ts | 6 +++++- src/index.ts | 2 +- 6 files changed, 22 insertions(+), 7 deletions(-) diff --git a/.env.injective.example b/.env.injective.example index 8c88a70..841e591 100644 --- a/.env.injective.example +++ b/.env.injective.example @@ -23,7 +23,8 @@ SKIP_URL="https://injective-1-api.skip.money" SKIP_BID_WALLET="inj17yqtnk08ly94lgz3fzagfu2twsws33z7sfsv46" SKIP_BID_RATE="0.1" #e.g. 20% of the profit is used as a bid to win the auction CHAIN_PREFIX="inj" -RPC_URL="https://ww-juno-rpc.polkachu.com" #irrelevant overwritten by k8s frominjective +USE_RPC_URL_SCRAPER="0" +RPC_URL="" #change this GAS_UNIT_PRICE="0.0004" FLASHLOAN_ROUTER_ADDRESS="inj1hyja4uyjktpeh0fxzuw2fmjudr85rk2qxgqkvu" FLASHLOAN_FEE="0.15" \ No newline at end of file diff --git a/.env.juno.example b/.env.juno.example index 05a63ed..36ccda5 100644 --- a/.env.juno.example +++ b/.env.juno.example @@ -28,6 +28,7 @@ IGNORE_ADDRESSES='[""]' BASE_DENOM="ujuno" # The asset denom to be used as base asset. This should be the denom of a Native Token only. GAS_DENOM="ujuno" CHAIN_PREFIX="juno" +USE_RPC_URL_SCRAPER="0" RPC_URL=["https://juno-rpc.reece.sh"] #change this GAS_UNIT_PRICE="0.0025" FLASHLOAN_ROUTER_ADDRESS="juno1qa7vdlm6zgq3radal5sltyl4t4qd32feug9qs50kcxda46q230pqzny48s" diff --git a/.env.terra.example b/.env.terra.example index ca3af13..6f90407 100644 --- a/.env.terra.example +++ b/.env.terra.example @@ -24,6 +24,7 @@ SKIP_BID_RATE="0.1" #e.g. 10% of the profit is used as a bid to win the auction BASE_DENOM="uluna" GAS_DENOM="uluna" CHAIN_PREFIX="terra" +USE_RPC_URL_SCRAPER="0" RPC_URL=[""] ##change this GAS_UNIT_PRICE="0.015" FLASHLOAN_ROUTER_ADDRESS="terra1c8tpvta3umr4mpufvxmq39gyuw2knpyxyfgq8thpaeyw2r6a80qsg5wa00" diff --git a/src/core/types/base/botConfig.ts b/src/core/types/base/botConfig.ts index 881646f..7f1a5b3 100644 --- a/src/core/types/base/botConfig.ts +++ b/src/core/types/base/botConfig.ts @@ -24,6 +24,7 @@ interface LoggerConfig { export interface BotConfig { chainPrefix: string; rpcUrls: Array; + useRpcUrlScraper: boolean; ignoreAddresses: Set; poolEnvs: Array<{ pool: string; inputfee: number; outputfee: number; LPratio: number }>; maxPathPools: number; @@ -53,11 +54,17 @@ export interface BotConfig { */ export async function setBotConfig(envs: NodeJS.ProcessEnv): Promise { validateEnvs(envs); - let RPCURLS; - if (envs.RPC_URL) { - RPCURLS = await getRPCfromRegistry(envs.CHAIN_PREFIX, JSON.parse(envs.RPC_URL)); - } else { + let RPCURLS: Array; + if (envs.RPC_URL && envs.USE_RPC_URL_SCRAPER) { + const RPCURLS_PROVIDED = envs.RPC_URL.startsWith("[") ? JSON.parse(envs.RPC_URL) : [envs.RPC_URL]; + RPCURLS = await getRPCfromRegistry(envs.CHAIN_PREFIX, RPCURLS_PROVIDED); + } else if (!envs.RPC_URL && envs.USE_RPC_URL_SCRAPER) { RPCURLS = await getRPCfromRegistry(envs.CHAIN_PREFIX); + } else if (envs.RPC_URL) { + RPCURLS = envs.RPC_URL.startsWith("[") ? JSON.parse(envs.RPC_URL) : [envs.RPC_URL]; + } else { + console.log("no RPC URL provided or USE_RPC_URL_SCRAPER not set correctly"); + process.exit(1); } let pools = envs.POOLS.trim() .replace(/\n|\r|\t/g, "") @@ -129,6 +136,7 @@ export async function setBotConfig(envs: NodeJS.ProcessEnv): Promise const botConfig: BotConfig = { chainPrefix: envs.CHAIN_PREFIX, rpcUrls: RPCURLS, + useRpcUrlScraper: envs.USE_RPC_URL_SCRAPER == "1" ? true : false, poolEnvs: POOLS_ENVS, maxPathPools: MAX_PATH_HOPS, mappingFactoryRouter: FACTORIES_TO_ROUTERS_MAPPING, diff --git a/src/core/types/modules.d.ts b/src/core/types/modules.d.ts index 41845c6..85ac055 100644 --- a/src/core/types/modules.d.ts +++ b/src/core/types/modules.d.ts @@ -24,8 +24,12 @@ declare namespace NodeJS { /** * The http endpoint to the RPC. */ - RPC_URL: string; + /** + * Whether or not to use cosmos chainregistry for finding public endpoints and using them + * if necessary. + */ + USE_RPC_URL_SCRAPER: string; /** * A list of all the factories to map, separated by ", \n". * diff --git a/src/index.ts b/src/index.ts index be44322..f3b22da 100644 --- a/src/index.ts +++ b/src/index.ts @@ -25,11 +25,11 @@ dotenv.config(); */ async function main() { const botConfig = await setBotConfig(process.env); - let startupMessage = "===".repeat(30); startupMessage += "\n**White Whale Bot**\n"; startupMessage += "===".repeat(30); startupMessage += `\nEnvironment Variables:\n +**RPC ENDPOINT SCRAPER: ** \t${botConfig.useRpcUrlScraper} **RPC ENPDOINTS:** \t${botConfig.rpcUrls} **OFFER DENOM:** \t${JSON.stringify(botConfig.offerAssetInfo)} **FACTORIES_TO_ROUTERS_MAPPING:** \t${JSON.stringify(botConfig.mappingFactoryRouter)}