From 7b7b47ad7e9b5ea829eb948a4fd30f8a2caf196a Mon Sep 17 00:00:00 2001 From: Roman Yarlykov Date: Mon, 19 Jan 2026 12:31:42 +0500 Subject: [PATCH 1/5] add: GenericDeploy --- dist/index.cjs.js | 2040 +++++++- dist/index.cjs.js.map | 8 +- dist/index.esm.js | 2029 +++++++- dist/index.esm.js.map | 8 +- dist/types/hardhat.config.d.ts | 1 - dist/types/src/constants/conceroNetworks.d.ts | 8 + .../src/constants/deploymentVariables.d.ts | 15 + dist/types/src/deploy/GenericDeploy.d.ts | 12 + dist/types/src/index.d.ts | 3 +- dist/types/src/utils/createViemChain.d.ts | 3 + dist/types/src/utils/getEnvVar.d.ts | 2 + .../src/utils/getTrezorDeployEnabled.d.ts | 1 + dist/types/src/utils/getWallet.d.ts | 2 + dist/types/src/utils/index.d.ts | 7 + dist/types/src/utils/log.d.ts | 4 + dist/types/src/utils/updateEnvVariable.d.ts | 6 + dist/types/types/ConceroNetwork.d.ts | 41 + dist/types/types/deploymentVariables.d.ts | 21 + hardhat.config.ts | 1 - package.json | 11 +- src/constants/conceroNetworks.ts | 108 + src/constants/deploymentVariables.ts | 50 + src/deploy/GenericDeploy.ts | 71 + src/index.ts | 2 + src/networks/types.ts | 12 +- src/utils/createViemChain.ts | 29 + src/utils/getEnvVar.ts | 15 + src/utils/getTrezorDeployEnabled.ts | 4 + src/utils/getWallet.ts | 52 + src/utils/index.ts | 17 + src/utils/log.ts | 43 + src/utils/updateEnvVariable.ts | 50 + tsconfig.json | 3 +- types/ConceroNetwork.ts | 46 + types/deploymentVariables.ts | 27 + types/hardhat.d.ts | 9 + yarn.lock | 4395 ++++++++++++++++- 37 files changed, 8864 insertions(+), 292 deletions(-) create mode 100644 dist/types/src/constants/conceroNetworks.d.ts create mode 100644 dist/types/src/constants/deploymentVariables.d.ts create mode 100644 dist/types/src/deploy/GenericDeploy.d.ts create mode 100644 dist/types/src/utils/createViemChain.d.ts create mode 100644 dist/types/src/utils/getEnvVar.d.ts create mode 100644 dist/types/src/utils/getTrezorDeployEnabled.d.ts create mode 100644 dist/types/src/utils/getWallet.d.ts create mode 100644 dist/types/src/utils/index.d.ts create mode 100644 dist/types/src/utils/log.d.ts create mode 100644 dist/types/src/utils/updateEnvVariable.d.ts create mode 100644 dist/types/types/ConceroNetwork.d.ts create mode 100644 dist/types/types/deploymentVariables.d.ts create mode 100644 src/constants/conceroNetworks.ts create mode 100644 src/constants/deploymentVariables.ts create mode 100644 src/deploy/GenericDeploy.ts create mode 100644 src/utils/createViemChain.ts create mode 100644 src/utils/getEnvVar.ts create mode 100644 src/utils/getTrezorDeployEnabled.ts create mode 100644 src/utils/getWallet.ts create mode 100644 src/utils/index.ts create mode 100644 src/utils/log.ts create mode 100644 src/utils/updateEnvVariable.ts create mode 100644 types/ConceroNetwork.ts create mode 100644 types/deploymentVariables.ts create mode 100644 types/hardhat.d.ts diff --git a/dist/index.cjs.js b/dist/index.cjs.js index 220d468..ced85ec 100644 --- a/dist/index.cjs.js +++ b/dist/index.cjs.js @@ -1,7 +1,9 @@ "use strict"; +var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __esm = (fn, res) => function __init() { return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; @@ -18,6 +20,14 @@ var __copyProps = (to, from, except, desc) => { } return to; }; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // node_modules/viem/_esm/errors/version.js @@ -29,12 +39,12 @@ var init_version = __esm({ }); // node_modules/viem/_esm/errors/base.js -function walk(err, fn) { - if (fn?.(err)) - return err; - if (err && typeof err === "object" && "cause" in err && err.cause !== void 0) - return walk(err.cause, fn); - return fn ? null : err; +function walk(err2, fn) { + if (fn?.(err2)) + return err2; + if (err2 && typeof err2 === "object" && "cause" in err2 && err2.cause !== void 0) + return walk(err2.cause, fn); + return fn ? null : err2; } var errorConfig, BaseError; var init_base = __esm({ @@ -444,6 +454,7 @@ var index_exports = {}; __export(index_exports, { TokenSender: () => TokenSender, config: () => config, + genericDeploy: () => genericDeploy, getNetworkEnvKey: () => getNetworkEnvKey, getNetworkKey: () => getNetworkKey, hardhatDeployWrapper: () => hardhatDeployWrapper, @@ -489,6 +500,1757 @@ var networkTypes = { localhost: "localhost" }; +// node_modules/@concero/concero-networks/output/chains.mainnet.json +var chains_mainnet_default = { + "1": { + id: "1", + chainSelector: 1, + name: "ethereum", + rpcUrls: [ + "https://cloudflare-eth.com", + "https://eth1.lava.build", + "https://mainnet.gateway.tenderly.co", + "https://eth.drpc.org", + "https://gateway.tenderly.co/public/mainnet", + "https://go.getblock.io/aefd01aa907c4805ba3c00a9e5b48c6b", + "https://0xrpc.io/eth", + "https://eth-mainnet.rpcfast.com?api_key=xbhWBI1Wkguk8SNMu1bvvLurPGLXmgwYeC4S6g2H7WdwFigZSmPWVZRxrskEQwIf", + "https://rpc.eth.gateway.fm", + "https://1rpc.io/eth", + "https://eth-mainnet.public.blastapi.io", + "https://ethereum-rpc.publicnode.com", + "https://rpc.mevblocker.io/fast", + "https://eth.meowrpc.com", + "https://eth.api.pocket.network", + "https://ethereum-public.nodies.app", + "https://rpc.flashbots.net/fast", + "https://ethereum-json-rpc.stakely.io", + "https://eth.llamarpc.com", + "https://eth.rpc.blxrbdn.com", + "https://ethereum.public.blockpi.network/v1/rpc/public", + "https://ethereum-mainnet.gateway.tatum.io", + "https://eth.blockrazor.xyz", + "https://api-ethereum-mainnet-reth.n.dwellir.com/2ccf18bf-2916-4198-8856-42172854353c", + "https://eth.merkle.io", + "https://eth-mainnet.nodereal.io/v1/1659dfb40aa24bbb8153a677b98064d7", + "https://rpc.flashbots.net", + "https://rpc.mevblocker.io/fullprivacy", + "https://rpc.mevblocker.io/noreverts", + "https://rpc.fullsend.to", + "https://eth.api.onfinality.io/public", + "https://public-eth.nownodes.io", + "https://openapi.bitstack.com/v1/wNFxbiJyQsSeLrX8RRCHi7NpRxrlErZk/DjShIqLishPCTB9HiMkPHXjUM9CNM9Na/ETH/mainnet", + "https://core.gashawk.io/rpc", + "https://rpc.mevblocker.io", + "https://ethereum.rpc.subquery.network/public" + ], + nativeCurrency: { + name: "Ethereum", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [ + { + name: "Etherscan", + url: "https://etherscan.io", + apiUrl: "https://api.etherscan.io/api" + } + ], + finalityConfirmations: 75, + minBlockConfirmations: 1, + deployments: {} + }, + "10": { + id: "10", + chainSelector: 10, + name: "optimism", + rpcUrls: [ + "https://optimism.drpc.org", + "https://go.getblock.io/e8a75f8dcf614861becfbcb185be6eb4", + "https://gateway.tenderly.co/public/optimism", + "https://mainnet.optimism.io", + "https://1rpc.io/op", + "https://optimism.gateway.tenderly.co", + "https://api-optimism-mainnet-archive.n.dwellir.com/2ccf18bf-2916-4198-8856-42172854353c", + "https://optimism-rpc.publicnode.com", + "https://optimism-public.nodies.app", + "https://public-op-mainnet.fastnode.io", + "https://optimism-mainnet.gateway.tatum.io", + "https://optimism.api.onfinality.io/public", + "https://optimism.public.blockpi.network/v1/rpc/public", + "https://optimism.rpc.subquery.network/public" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [ + { + name: "Optimism Explorer", + url: "https://optimistic.etherscan.io", + apiUrl: "https://api-optimistic.etherscan.io/api" + } + ], + finalityConfirmations: 50, + minBlockConfirmations: 1, + deployments: {} + }, + "137": { + id: "137", + chainSelector: 137, + name: "polygon", + rpcUrls: [ + "https://polygon.drpc.org", + "https://gateway.tenderly.co/public/polygon", + "https://polygon.lava.build", + "https://go.getblock.io/02667b699f05444ab2c64f9bff28f027", + "https://polygon-mainnet.gateway.tatum.io", + "https://polygon-rpc.com", + "https://1rpc.io/matic", + "https://polygon.meowrpc.com", + "https://polygon-bor-rpc.publicnode.com", + "https://polygon-public.nodies.app", + "https://polygon.gateway.tenderly.co", + "https://rpc-mainnet.matic.quiknode.pro", + "https://polygon-mainnet.rpcfast.com?api_key=xbhWBI1Wkguk8SNMu1bvvLurPGLXmgwYeC4S6g2H7WdwFigZSmPWVZRxrskEQwIf", + "https://polygon.rpc.subquery.network/public", + "https://polygon.api.onfinality.io/public", + "https://poly.api.pocket.network" + ], + nativeCurrency: { + name: "POL", + decimals: 18, + symbol: "POL" + }, + blockExplorers: [ + { + name: "PolygonScan", + url: "https://polygonscan.com", + apiUrl: "https://api.polygonscan.com/api" + } + ], + finalityConfirmations: 128, + minBlockConfirmations: 1, + deployments: {} + }, + "8453": { + id: "8453", + chainSelector: 8453, + name: "base", + rpcUrls: [ + "https://base.drpc.org", + "https://base.lava.build", + "https://mainnet.base.org", + "https://gateway.tenderly.co/public/base", + "https://base.meowrpc.com", + "https://base.gateway.tenderly.co", + "https://developer-access-mainnet.base.org", + "https://1rpc.io/base", + "https://base-rpc.publicnode.com", + "https://base-public.nodies.app", + "https://base.public.blockpi.network/v1/rpc/public", + "https://base-mainnet.public.blastapi.io", + "https://base.api.onfinality.io/public", + "https://base.rpc.blxrbdn.com", + "https://base.api.pocket.network", + "https://base.llamarpc.com", + "https://api-base-mainnet-archive.n.dwellir.com/2ccf18bf-2916-4198-8856-42172854353c", + "https://base.rpc.subquery.network/public" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [ + { + name: "Basescan", + url: "https://basescan.org", + apiUrl: "https://api.basescan.org/api" + } + ], + finalityConfirmations: 50, + minBlockConfirmations: 1, + deployments: {} + }, + "42161": { + id: "42161", + chainSelector: 42161, + name: "arbitrum", + rpcUrls: [ + "https://arbitrum.drpc.org", + "https://api-arbitrum-mainnet-archive.n.dwellir.com/2ccf18bf-2916-4198-8856-42172854353c", + "https://arb1.lava.build", + "https://1rpc.io/arb", + "https://arbitrum-one-rpc.publicnode.com", + "https://arbitrum-one-public.nodies.app", + "https://arbitrum.gateway.tenderly.co", + "https://arbitrum-one.public.blastapi.io", + "https://arbitrum.api.onfinality.io/public", + "https://arbitrum.meowrpc.com", + "https://arbitrum.public.blockpi.network/v1/rpc/public", + "https://arb1.arbitrum.io/rpc", + "https://public-arb-mainnet.fastnode.io", + "https://arbitrum.rpc.subquery.network/public" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [ + { + name: "Arbiscan", + url: "https://arbiscan.io", + apiUrl: "https://api.arbiscan.io/api" + } + ], + finalityConfirmations: 4080, + minBlockConfirmations: 1, + deployments: {} + }, + "43114": { + id: "43114", + chainSelector: 43114, + name: "avalanche", + rpcUrls: [ + "https://api.avax.network/ext/bc/C/rpc", + "https://avalanche-mainnet.gateway.tenderly.co", + "https://avalanche.drpc.org", + "https://avax.api.pocket.network", + "https://avalanche-c-chain-rpc.publicnode.com", + "https://1rpc.io/avax/c", + "https://avalanche-public.nodies.app/ext/bc/C/rpc", + "https://avax.meowrpc.com", + "https://avalanche.api.onfinality.io/public/ext/bc/C/rpc", + "https://spectrum-01.simplystaking.xyz/avalanche-mn-rpc/ext/bc/C/rpc" + ], + nativeCurrency: { + name: "Avalanche", + decimals: 18, + symbol: "AVAX" + }, + blockExplorers: [ + { + name: "SnowTrace", + url: "https://snowtrace.io", + apiUrl: "https://api.snowtrace.io/api" + } + ], + finalityConfirmations: 1, + minBlockConfirmations: 1, + deployments: {} + } +}; + +// node_modules/@concero/concero-networks/output/chains.testnet.json +var chains_testnet_default = { + "81": { + id: "81", + isTestnet: true, + chainSelector: 81, + name: "astarShibuya", + rpcUrls: [ + "https://evm.shibuya.astar.network", + "https://evm.shibuya.astar.network", + "https://shibuya.public.blastapi.io", + "https://shibuya-rpc.dwellir.com" + ], + nativeCurrency: { + name: "Astar", + decimals: 18, + symbol: "ASTR" + }, + blockExplorers: [ + { + name: "Subscan", + url: "https://shibuya.subscan.io", + apiUrl: "https://shibuya.subscan.io/api" + } + ], + finalityConfirmations: 6, + minBlockConfirmations: 1, + deployments: {} + }, + "97": { + id: "97", + isTestnet: true, + chainSelector: 97, + name: "bnbTestnet", + rpcUrls: [ + "https://bsc-testnet.drpc.org", + "https://bsc-testnet-rpc.publicnode.com", + "https://data-seed-prebsc-2-s2.bnbchain.org:8545", + "https://data-seed-prebsc-1-s2.bnbchain.org:8545", + "https://data-seed-prebsc-2-s3.bnbchain.org:8545", + "https://data-seed-prebsc-1-s1.bnbchain.org:8545", + "https://data-seed-prebsc-2-s1.bnbchain.org:8545", + "https://data-seed-prebsc-1-s3.bnbchain.org:8545", + "https://bnb-testnet.api.onfinality.io/public" + ], + nativeCurrency: { + name: "BNB", + decimals: 18, + symbol: "tBNB" + }, + blockExplorers: [ + { + name: "BscScan", + url: "https://testnet.bscscan.com", + apiUrl: "https://api-testnet.bscscan.com/api" + } + ], + finalityConfirmations: 7, + minBlockConfirmations: 1, + deployments: { + router: "0xf6BBdC1fD89E554639D7A683909338802B05F160", + relayerLib: "0x3a4EA7fd0CeA70a4B2Cf72c5AC966225C98eE48d", + validatorLib: "0xAEBaacfa9CaC6B8486Ae77843728c863c909E7d0" + } + }, + "133": { + id: "133", + isTestnet: true, + chainSelector: 133, + name: "hashkeyTestnet", + rpcUrls: [], + nativeCurrency: { + name: "HashKey EcoPoints", + decimals: 18, + symbol: "HSK" + }, + blockExplorers: [ + { + name: "Hashkey Explorer", + url: "https://testnet.hashkeyscan.io", + apiUrl: "https://testnet.hashkeyscan.io/api" + } + ], + finalityConfirmations: 1800, + minBlockConfirmations: 1, + deployments: {} + }, + "157": { + id: "157", + isTestnet: true, + chainSelector: 157, + name: "shibariumPuppynet", + rpcUrls: [ + "https://puppynet.shibrpc.com" + ], + nativeCurrency: { + name: "Bone", + decimals: 18, + symbol: "BONE" + }, + blockExplorers: [ + { + name: "Puppyscan", + url: "https://puppyscan.shib.io", + apiUrl: "https://puppyscan.shib.io/api" + } + ], + finalityConfirmations: 60, + minBlockConfirmations: 1, + deployments: { + router: "0xea73Bc856EdD980912Fb8FE4CFC7bba52D980F6A", + relayerLib: "0x9900a9E38E8695eE9109962b9f4671cF977c265a", + validatorLib: "0x39f311124745064935cB196AeE2a950cbbC11336" + } + }, + "195": { + id: "195", + isTestnet: true, + chainSelector: 195, + name: "xlayerSepolia", + rpcUrls: [], + nativeCurrency: { + name: "OKB", + decimals: 18, + symbol: "OKB" + }, + blockExplorers: [ + { + name: "X Layer Explorer", + url: "https://testnet-explorer.xlayer.tech", + apiUrl: "https://testnet-explorer.xlayer.tech/api" + } + ], + finalityConfirmations: 3600, + minBlockConfirmations: 1, + deployments: {} + }, + "296": { + id: "296", + isTestnet: true, + chainSelector: 296, + name: "hederaTestnet", + rpcUrls: [ + "https://testnet.hashio.io/api", + "https://296.rpc.thirdweb.com" + ], + nativeCurrency: { + name: "HBAR", + decimals: 18, + symbol: "HBAR" + }, + blockExplorers: [], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: {} + }, + "300": { + id: "300", + isTestnet: true, + chainSelector: 300, + name: "zksyncSepolia", + rpcUrls: [ + "https://zksync-sepolia.drpc.org", + "https://rpc.ankr.com/zksync_era_sepolia", + "https://sepolia.era.zksync.dev" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [], + finalityConfirmations: 1200, + minBlockConfirmations: 1, + deployments: { + router: "0xBd5EC2962802123f6D8d0092dC485C98e23D1394", + relayerLib: "0x06942a1E6A73069a58306d9E154051b85b32D071", + validatorLib: "0xe277f7afA46291d4c729a184D51D78ae598d54b1" + } + }, + "338": { + id: "338", + isTestnet: true, + chainSelector: 338, + name: "cronosTestnet", + rpcUrls: [ + "https://cro-testnet.gateway.tatum.io", + "https://cronos-testnet.drpc.org", + "https://evm-t3.cronos.org" + ], + nativeCurrency: { + name: "CRO", + decimals: 18, + symbol: "tCRO" + }, + blockExplorers: [ + { + name: "Cronos Explorer", + url: "https://testnet.cronoscan.com", + apiUrl: "https://api-testnet.cronoscan.com/api" + } + ], + finalityConfirmations: 2, + minBlockConfirmations: 1, + deployments: {} + }, + "545": { + id: "545", + isTestnet: true, + chainSelector: 545, + name: "flowTestnet", + rpcUrls: [ + "https://testnet.evm.nodes.onflow.org" + ], + nativeCurrency: { + name: "Flow", + decimals: 18, + symbol: "FLOW" + }, + blockExplorers: [], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: { + router: "0xf6BBdC1fD89E554639D7A683909338802B05F160", + relayerLib: "0x3a4EA7fd0CeA70a4B2Cf72c5AC966225C98eE48d", + validatorLib: "0xAEBaacfa9CaC6B8486Ae77843728c863c909E7d0" + } + }, + "919": { + id: "919", + isTestnet: true, + chainSelector: 919, + name: "modeTestnet", + rpcUrls: [ + "https://mode-testnet.drpc.org", + "https://sepolia.mode.network" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [ + { + name: "Mode Explorer", + url: "https://sepolia.explorer.mode.network", + apiUrl: "https://sepolia.explorer.mode.network/api" + } + ], + finalityConfirmations: 1110, + minBlockConfirmations: 1, + deployments: {} + }, + "943": { + id: "943", + isTestnet: true, + chainSelector: 943, + name: "pulsechainTestnet", + rpcUrls: [ + "https://pulsechain-testnet-rpc.publicnode.com", + "https://rpc-testnet-pulsechain.g4mm4.io", + "https://rpc.v4.testnet.pulsechain.com" + ], + nativeCurrency: { + name: "V4 Pulse", + decimals: 18, + symbol: "v4PLS" + }, + blockExplorers: [], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: { + router: "0xea73Bc856EdD980912Fb8FE4CFC7bba52D980F6A", + relayerLib: "0x9900a9E38E8695eE9109962b9f4671cF977c265a", + validatorLib: "0x39f311124745064935cB196AeE2a950cbbC11336" + } + }, + "1001": { + id: "1001", + isTestnet: true, + chainSelector: 1001, + name: "kaiaKairos", + rpcUrls: [ + "https://klaytn-baobab.drpc.org", + "https://kaia-kairos.blockpi.network/v1/rpc/public", + "https://rpc.ankr.com/kaia_testnet", + "https://public-en-kairos.node.kaia.io" + ], + nativeCurrency: { + name: "KAIA", + decimals: 18, + symbol: "KAIA" + }, + blockExplorers: [], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: {} + }, + "1112": { + id: "1112", + isTestnet: true, + chainSelector: 1112, + name: "wemixTestnet", + rpcUrls: [ + "https://wemix-testnet.drpc.org", + "https://api.test.wemix.com" + ], + nativeCurrency: { + name: "WEMIX", + decimals: 18, + symbol: "tWEMIX" + }, + blockExplorers: [], + finalityConfirmations: 2, + minBlockConfirmations: 1, + deployments: {} + }, + "1114": { + id: "1114", + isTestnet: true, + chainSelector: 1114, + name: "coreTestnet", + rpcUrls: [ + "https://rpc.test2.btcs.network" + ], + nativeCurrency: { + name: "tCORE2", + decimals: 18, + symbol: "tCORE2" + }, + blockExplorers: [ + { + name: "CoreScan", + url: "https://scan.test.btcs.network", + apiUrl: "https://scan.test.btcs.network/api" + } + ], + finalityConfirmations: 7, + minBlockConfirmations: 1, + deployments: { + router: "0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5", + relayerLib: "0x54B8d67AA64CF8A59F604cA6e98c643C64920b03", + validatorLib: "0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a" + } + }, + "1123": { + id: "1123", + isTestnet: true, + finalityTagEnabled: true, + chainSelector: 1123, + name: "b2Testnet", + rpcUrls: [ + "https://rpc.ankr.com/b2_testnet" + ], + nativeCurrency: { + name: "Bitcoin", + decimals: 18, + symbol: "BTC" + }, + blockExplorers: [], + minBlockConfirmations: 1, + deployments: {} + }, + "1174": { + id: "1174", + isTestnet: true, + chainSelector: 1174, + name: "litheumTestnet", + rpcUrls: [ + "https://testnet.litheum.com" + ], + nativeCurrency: { + name: "LTH", + decimals: 18, + symbol: "LTH" + }, + blockExplorers: [], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: {} + }, + "1270": { + id: "1270", + isTestnet: true, + chainSelector: 1270, + name: "irysTestnet", + rpcUrls: [ + "https://testnet-rpc.irys.xyz/v1/execution-rpc", + "testnet-rpc.irys.xyz" + ], + nativeCurrency: { + name: "mIRYS", + decimals: 18, + symbol: "mIRYS" + }, + blockExplorers: [], + finalityConfirmations: 6, + minBlockConfirmations: 1, + deployments: {} + }, + "1301": { + id: "1301", + isTestnet: true, + chainSelector: 1301, + name: "unichainSepolia", + rpcUrls: [ + "https://unichain-sepolia.drpc.org", + "https://unichain-sepolia-rpc.publicnode.com", + "https://unichain-sepolia.api.onfinality.io/public", + "https://sepolia.unichain.org" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [ + { + name: "Unichain Explorer", + url: "https://sepolia-explorer.unichain.network", + apiUrl: "https://sepolia-explorer.unichain.network/api" + } + ], + finalityConfirmations: 1440, + minBlockConfirmations: 1, + deployments: { + router: "0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5", + relayerLib: "0x54B8d67AA64CF8A59F604cA6e98c643C64920b03", + validatorLib: "0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a" + } + }, + "1328": { + id: "1328", + isTestnet: true, + chainSelector: 1328, + name: "seiTestnet", + rpcUrls: [ + "https://sei-testnet.drpc.org", + "https://sei-testnet-public.nodies.app", + "https://evm-rpc-testnet.sei-apis.com" + ], + nativeCurrency: { + name: "Sei", + decimals: 18, + symbol: "SEI" + }, + blockExplorers: [ + { + name: "Sei Explorer", + url: "https://seitrace.com", + apiUrl: "https://seitrace.com/api" + } + ], + finalityConfirmations: 3, + minBlockConfirmations: 1, + deployments: { + router: "0x122947C8c3529DCa006aeE65832D3C3fED6bf3C0", + relayerLib: "0xe965dEBDfa6365CFb9e643ccdCBADE424a2eC381", + validatorLib: "0xB708D151D18e5aB3506934B39375D00EE1e0C882" + } + }, + "1946": { + id: "1946", + isTestnet: true, + chainSelector: 1946, + name: "soneiumMinato", + rpcUrls: [ + "https://soneium-minato.drpc.org", + "https://rpc.minato.soneium.org" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [ + { + name: "Soneium Explorer", + url: "https://minato-explorer.soneium.com", + apiUrl: "https://minato-explorer.soneium.com/api" + } + ], + finalityConfirmations: 810, + minBlockConfirmations: 1, + deployments: {} + }, + "2021": { + id: "2021", + isTestnet: true, + chainSelector: 2021, + name: "roninSaigon", + rpcUrls: [ + "https://saigon-testnet.roninchain.com/rpc", + "https://saigon-testnet.roninchain.com/rpc" + ], + nativeCurrency: { + name: "RON", + decimals: 18, + symbol: "RON" + }, + blockExplorers: [ + { + name: "Ronin Explorer", + url: "https://saigon-explorer.roninchain.com", + apiUrl: "https://saigon-explorer.roninchain.com/api" + } + ], + finalityConfirmations: 4, + minBlockConfirmations: 1, + deployments: { + router: "0xea73Bc856EdD980912Fb8FE4CFC7bba52D980F6A", + relayerLib: "0x9900a9E38E8695eE9109962b9f4671cF977c265a", + validatorLib: "0x39f311124745064935cB196AeE2a950cbbC11336" + } + }, + "2221": { + id: "2221", + isTestnet: true, + chainSelector: 2221, + name: "kavaTestnet", + rpcUrls: [ + "https://kava-testnet.drpc.org", + "https://evm.testnet.kava.io" + ], + nativeCurrency: { + name: "Kava", + decimals: 18, + symbol: "KAVA" + }, + blockExplorers: [], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: {} + }, + "2522": { + id: "2522", + isTestnet: true, + chainSelector: 2522, + name: "fraxtalHolesky", + rpcUrls: [], + nativeCurrency: { + name: "FRAX", + decimals: 18, + symbol: "FRAX" + }, + blockExplorers: [], + finalityConfirmations: 900, + minBlockConfirmations: 1, + deployments: {} + }, + "2810": { + id: "2810", + isTestnet: true, + chainSelector: 2810, + name: "morphHolesky", + rpcUrls: [], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: {} + }, + "3636": { + id: "3636", + isTestnet: true, + chainSelector: 3636, + name: "botanixTestnet", + rpcUrls: [ + "https://rpc.ankr.com/botanix_testnet", + "https://node.botanixlabs.dev" + ], + nativeCurrency: { + name: "Botanix", + decimals: 18, + symbol: "BTC" + }, + blockExplorers: [ + { + name: "Botanix Explorer", + url: "https://testnet-explorer.botanixlabs.xyz", + apiUrl: "https://testnet-explorer.botanixlabs.xyz/api" + } + ], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: {} + }, + "4801": { + id: "4801", + isTestnet: true, + chainSelector: 4801, + name: "worldchainTestnet", + rpcUrls: [ + "https://worldchain-sepolia.drpc.org", + "https://worldchain-sepolia.g.alchemy.com/public", + "https://worldchain-sepolia.gateway.tenderly.co", + "https://4801.rpc.thirdweb.com" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [], + finalityConfirmations: 1200, + minBlockConfirmations: 1, + deployments: { + router: "0xea73Bc856EdD980912Fb8FE4CFC7bba52D980F6A", + relayerLib: "0x9900a9E38E8695eE9109962b9f4671cF977c265a", + validatorLib: "0x39f311124745064935cB196AeE2a950cbbC11336" + } + }, + "5003": { + id: "5003", + isTestnet: true, + chainSelector: 5003, + name: "mantleSepolia", + rpcUrls: [ + "https://mantle-sepolia.drpc.org", + "https://rpc.sepolia.mantle.xyz" + ], + nativeCurrency: { + name: "MNT", + decimals: 18, + symbol: "MNT" + }, + blockExplorers: [ + { + name: "Mantle Explorer", + url: "https://explorer.sepolia.mantle.xyz", + apiUrl: "https://explorer.sepolia.mantle.xyz/api" + } + ], + finalityConfirmations: 840, + minBlockConfirmations: 1, + deployments: {} + }, + "5124": { + id: "5124", + isTestnet: true, + chainSelector: 5124, + name: "seismicDevnet", + rpcUrls: [ + "https://node-2.seismicdev.net/rpc" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: {} + }, + "5611": { + id: "5611", + isTestnet: true, + chainSelector: 5611, + name: "opbnbTestnet", + rpcUrls: [ + "https://opbnb-testnet.drpc.org", + "https://opbnb-testnet-rpc.publicnode.com", + "https://opbnb-testnet-rpc.bnbchain.org", + "https://opbnb-testnet.nodereal.io/v1/e9a36765eb8a40b9bd12e680a1fd2bc5", + "https://opbnb-testnet.nodereal.io/v1/64a9df0874fb4a93b9d0a3849de012d3" + ], + nativeCurrency: { + name: "tBNB", + decimals: 18, + symbol: "tBNB" + }, + blockExplorers: [], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: {} + }, + "6342": { + id: "6342", + isTestnet: true, + chainSelector: 6342, + name: "megaethTestnet", + rpcUrls: [], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [ + { + name: "MegaEth Explorer", + url: "https://explorer-testnet.megaeth.io", + apiUrl: "https://explorer-testnet.megaeth.io/api" + } + ], + finalityConfirmations: 900, + minBlockConfirmations: 1, + deployments: {} + }, + "8408": { + id: "8408", + isTestnet: true, + chainSelector: 8408, + name: "zenchainTestnet", + rpcUrls: [ + "https://zenchain-testnet.api.onfinality.io/public" + ], + nativeCurrency: { + name: "ZTC", + decimals: 18, + symbol: "ZTC" + }, + blockExplorers: [], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: {} + }, + "10143": { + id: "10143", + isTestnet: true, + chainSelector: 10143, + name: "monadTestnet", + rpcUrls: [ + "https://monad-testnet.drpc.org", + "https://rpc.ankr.com/monad_testnet", + "https://testnet-rpc.monad.xyz", + "https://rpc-testnet.monadinfra.com", + "https://monad-testnet.api.onfinality.io/public" + ], + nativeCurrency: { + name: "Testnet MON Token", + decimals: 18, + symbol: "MON" + }, + blockExplorers: [ + { + name: "Monad Explorer", + url: "https://explorer.testnet.monad.xyz", + apiUrl: "https://explorer.testnet.monad.xyz/api" + } + ], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: { + router: "0x3E2Ee768D9fADdd3673a69ED4d0D1d9147FA1054", + relayerLib: "0x9900a9E38E8695eE9109962b9f4671cF977c265a", + validatorLib: "0x39f311124745064935cB196AeE2a950cbbC11336" + } + }, + "10200": { + id: "10200", + isTestnet: true, + chainSelector: 10200, + name: "gnosisChiado", + rpcUrls: [ + "https://gnosis-chiado.drpc.org", + "https://rpc.chiadochain.net", + "https://gnosis-chiado-rpc.publicnode.com", + "https://rpc.chiado.gnosis.gateway.fm" + ], + nativeCurrency: { + name: "Gnosis", + decimals: 18, + symbol: "xDAI" + }, + blockExplorers: [ + { + name: "Blockscout", + url: "https://gnosis-chiado.blockscout.com", + apiUrl: "https://gnosis-chiado.blockscout.com/api" + } + ], + finalityConfirmations: 35, + minBlockConfirmations: 1, + deployments: { + router: "0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5", + relayerLib: "0x54B8d67AA64CF8A59F604cA6e98c643C64920b03", + validatorLib: "0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a" + } + }, + "11124": { + id: "11124", + isTestnet: true, + finalityTagEnabled: true, + chainSelector: 11124, + name: "abstractSepolia", + rpcUrls: [ + "https://abstract-sepolia.drpc.org", + "https://api.testnet.abs.xyz" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [], + minBlockConfirmations: 1, + deployments: {} + }, + "18880": { + id: "18880", + isTestnet: true, + chainSelector: 18880, + name: "expchainTestnet", + rpcUrls: [ + "https://rpc1-testnet.expchain.ai", + "https://expchain.polyhedra.network/rpc1-testnet", + "https://expchain.polyhedra.network/rpc0-testnet", + "https://expchain.polyhedra.network/rpc0-testnet", + "https://expchain.polyhedra.network/rpc1-testnet" + ], + nativeCurrency: { + name: "tZKJ", + decimals: 18, + symbol: "tZKJ" + }, + blockExplorers: [], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: {} + }, + "23295": { + id: "23295", + isTestnet: true, + chainSelector: 23295, + name: "oasissapphireTestnet", + rpcUrls: [ + "https://testnet.sapphire.oasis.io" + ], + nativeCurrency: { + name: "Sapphire Test Rose", + decimals: 18, + symbol: "TEST" + }, + blockExplorers: [], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: { + router: "0xcc9D0438ac3b90fB8291f4f3C1c420E215f36585", + relayerLib: "0x8510C780097cA53aeF8e3527a5107C4629b21f0C", + validatorLib: "0xb31EED4695De3eCE4381a40fA638d9a63904882b" + } + }, + "33111": { + id: "33111", + isTestnet: true, + finalityTagEnabled: true, + chainSelector: 33111, + name: "apechainCurtis", + rpcUrls: [ + "https://apechain-curtis.drpc.org", + "https://curtis.rpc.caldera.xyz/http", + "https://rpc.curtis.apechain.com" + ], + nativeCurrency: { + name: "APE", + decimals: 18, + symbol: "APE" + }, + blockExplorers: [ + { + name: "Apechain Explorer", + url: "https://curtis-explorer.apechain.io", + apiUrl: "https://curtis-explorer.apechain.io/api" + } + ], + minBlockConfirmations: 1, + deployments: {} + }, + "37111": { + id: "37111", + isTestnet: true, + chainSelector: 37111, + name: "lensSepolia", + rpcUrls: [ + "https://rpc.testnet.lens.dev", + "https://lens-testnet.drpc.org" + ], + nativeCurrency: { + name: "GRASS", + decimals: 18, + symbol: "GRASS" + }, + blockExplorers: [], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: {} + }, + "43113": { + id: "43113", + isTestnet: true, + finalityTagEnabled: true, + chainSelector: 43113, + name: "avalancheFuji", + rpcUrls: [ + "https://api.avax-test.network/ext/bc/C/rpc", + "https://avalanche-fuji.drpc.org", + "https://avalanche-fuji-c-chain-rpc.publicnode.com" + ], + nativeCurrency: { + name: "Avalanche Fuji", + decimals: 18, + symbol: "AVAX" + }, + blockExplorers: [ + { + name: "Snowtrace", + url: "https://testnet.snowtrace.io", + apiUrl: "https://api-testnet.snowtrace.io/api" + } + ], + minBlockConfirmations: 1, + deployments: { + router: "0xe965dEBDfa6365CFb9e643ccdCBADE424a2eC381", + relayerLib: "0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a", + validatorLib: "0x246892c38a2314c30E56490ADf1bcf3470DCAE6A" + } + }, + "44787": { + id: "44787", + isTestnet: true, + chainSelector: 44787, + name: "celoAlfajores", + rpcUrls: [], + nativeCurrency: { + name: "CELO", + decimals: 18, + symbol: "A-CELO" + }, + blockExplorers: [ + { + name: "Celoscan", + url: "https://alfajores.celoscan.io", + apiUrl: "https://api-alfajores.celoscan.io/api" + } + ], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: {} + }, + "48899": { + id: "48899", + isTestnet: true, + chainSelector: 48899, + name: "zircuitTestnet", + rpcUrls: [ + "https://testnet.zircuit.com", + "https://zircuit1-testnet.p2pify.com" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [ + { + name: "Zircuit Explorer", + url: "https://explorer.zircuit.com", + apiUrl: "https://explorer.zircuit.com/api" + } + ], + finalityConfirmations: 630, + minBlockConfirmations: 1, + deployments: {} + }, + "57054": { + id: "57054", + isTestnet: true, + chainSelector: 57054, + name: "sonicBlaze", + rpcUrls: [ + "https://sonic-testnet.drpc.org", + "https://sonic-blaze-rpc.publicnode.com", + "https://rpc.blaze.soniclabs.com" + ], + nativeCurrency: { + name: "S", + decimals: 18, + symbol: "S" + }, + blockExplorers: [ + { + name: "Sonic Explorer", + url: "https://explorer-testnet.sonic.guru", + apiUrl: "https://explorer-testnet.sonic.guru/api" + } + ], + finalityConfirmations: 10, + minBlockConfirmations: 1, + deployments: { + router: "0xAEBaacfa9CaC6B8486Ae77843728c863c909E7d0", + relayerLib: "0x13187bb1d2f100F84770a848A1374bf745Ea4cF6", + validatorLib: "0x90D7e742746Abf405036aA21981C835F3E842DA4" + } + }, + "59141": { + id: "59141", + isTestnet: true, + chainSelector: 59141, + name: "lineaSepolia", + rpcUrls: [ + "https://linea-sepolia.drpc.org", + "https://linea-sepolia-rpc.publicnode.com", + "https://rpc.sepolia.linea.build" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [ + { + name: "Linea Explorer", + url: "https://sepolia.lineascan.build", + apiUrl: "https://api-sepolia.lineascan.build/api" + } + ], + finalityConfirmations: 600, + minBlockConfirmations: 1, + deployments: {} + }, + "59902": { + id: "59902", + isTestnet: true, + chainSelector: 59902, + name: "metisSepolia", + rpcUrls: [ + "https://metis-sepolia.gateway.tenderly.co", + "https://metis-sepolia-rpc.publicnode.com", + "https://sepolia.metisdevops.link" + ], + nativeCurrency: { + name: "tMETIS", + decimals: 18, + symbol: "tMETIS" + }, + blockExplorers: [], + finalityConfirmations: 360, + minBlockConfirmations: 1, + deployments: {} + }, + "80002": { + id: "80002", + isTestnet: true, + chainSelector: 80002, + name: "polygonAmoy", + rpcUrls: [ + "https://rpc-amoy.polygon.technology", + "https://polygon-amoy.gateway.tenderly.co", + "https://polygon-amoy.drpc.org", + "https://polygon-amoy-public.nodies.app", + "https://polygon-amoy-bor-rpc.publicnode.com", + "https://polygon-amoy.api.onfinality.io/public" + ], + nativeCurrency: { + name: "POL", + decimals: 18, + symbol: "POL" + }, + blockExplorers: [ + { + name: "PolygonScan", + url: "https://amoy.polygonscan.com", + apiUrl: "https://api-amoy.polygonscan.com/api" + } + ], + finalityConfirmations: 500, + minBlockConfirmations: 1, + deployments: { + router: "0x6FF322BC8da39bC87A056d4052aa763f7BDeE836", + relayerLib: "0x81365cc081dF5fdF6cbD47a34fF4acBcA2B35F0d", + validatorLib: "0x99542DdB261186F818974e579e4aBF3BFb44819e" + } + }, + "80069": { + id: "80069", + isTestnet: true, + chainSelector: 80069, + name: "berachainBepolia", + rpcUrls: [ + "https://bepolia.rpc.berachain.com" + ], + nativeCurrency: { + name: "BERA Token", + decimals: 18, + symbol: "BERA" + }, + blockExplorers: [], + finalityConfirmations: 1, + minBlockConfirmations: 1, + deployments: { + router: "0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5", + relayerLib: "0x54B8d67AA64CF8A59F604cA6e98c643C64920b03", + validatorLib: "0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a" + } + }, + "84532": { + id: "84532", + isTestnet: true, + finalityTagEnabled: true, + chainSelector: 84532, + name: "baseSepolia", + rpcUrls: [ + "https://base-sepolia.gateway.tenderly.co", + "https://sepolia.base.org", + "https://base-sepolia.drpc.org", + "https://base-sepolia-rpc.publicnode.com", + "https://base-sepolia-public.nodies.app", + "https://base-sepolia.api.onfinality.io/public" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [ + { + name: "BaseScan", + url: "https://sepolia.basescan.org", + apiUrl: "https://api-sepolia.basescan.org/api" + }, + { + name: "Blockscout", + url: "https://base-sepolia.blockscout.com", + apiUrl: "https://base-sepolia.blockscout.com/api" + } + ], + minBlockConfirmations: 1, + deployments: { + router: "0xE3d861a49bc5903499fB5Bb411B83d980422c31B", + relayerLib: "0x429E6875Ba6A13cc015e9Eba594e8b42936244C4", + validatorLib: "0x67BE79Df5A37d2a89384D32C2A066d2a7354eD2B" + } + }, + "167009": { + id: "167009", + isTestnet: true, + chainSelector: 167009, + name: "taikoTestnet", + rpcUrls: [], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [], + finalityConfirmations: 20, + minBlockConfirmations: 1, + deployments: {} + }, + "200810": { + id: "200810", + isTestnet: true, + chainSelector: 200810, + name: "bitlayerTestnet", + rpcUrls: [ + "https://rpc.ankr.com/bitlayer_testnet", + "https://testnet-rpc.bitlayer.org", + "https://testnet-rpc.bitlayer-rpc.com" + ], + nativeCurrency: { + name: "Bitcoin", + decimals: 18, + symbol: "BTC" + }, + blockExplorers: [ + { + name: "Bitlayer Explorer", + url: "https://testnet-explorer.bitlayer.org", + apiUrl: "https://testnet-explorer.bitlayer.org/api" + } + ], + finalityConfirmations: 21, + minBlockConfirmations: 1, + deployments: {} + }, + "344100": { + id: "3441006", + isTestnet: true, + chainSelector: 344100, + name: "mantapacificSepolia", + rpcUrls: [ + "https://manta-pacific-sepolia.drpc.org", + "https://manta-sepolia.rpc.caldera.xyz/http", + "https://pacific-rpc.sepolia-testnet.manta.network/http" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: {} + }, + "421614": { + id: "421614", + isTestnet: true, + finalityTagEnabled: true, + chainSelector: 421614, + name: "arbitrumSepolia", + rpcUrls: [ + "https://arbitrum-sepolia.gateway.tenderly.co", + "https://arbitrum-sepolia.drpc.org", + "https://arbitrum-sepolia-testnet.api.pocket.network", + "https://arbitrum-sepolia-rpc.publicnode.com", + "https://sepolia-rollup.arbitrum.io/rpc", + "https://arbitrum-sepolia.api.onfinality.io/public" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [ + { + name: "Arbiscan", + url: "https://sepolia.arbiscan.io", + apiUrl: "https://api-sepolia.arbiscan.io/api" + } + ], + minBlockConfirmations: 1, + deployments: { + router: "0x6c99cC0FCC985fF175787BD2565AfD15781C99d0", + relayerLib: "0x622b5FeBf5Fd44Ab2E7636398F2621FC4E956304", + validatorLib: "0x7F445E3DE6B46cD36887B9f136DBe13298517C1F" + } + }, + "534351": { + id: "534351", + isTestnet: true, + chainSelector: 534351, + name: "scrollSepolia", + rpcUrls: [ + "https://scroll-sepolia.drpc.org", + "https://scroll-sepolia-rpc.publicnode.com", + "https://sepolia-rpc.scroll.io", + "https://scroll-sepolia-public.nodies.app" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [ + { + name: "Scrollscan", + url: "https://sepolia.scrollscan.com", + apiUrl: "https://api-sepolia.scrollscan.com/api" + } + ], + finalityConfirmations: 720, + minBlockConfirmations: 1, + deployments: { + router: "0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5", + relayerLib: "0x54B8d67AA64CF8A59F604cA6e98c643C64920b03", + validatorLib: "0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a" + } + }, + "688689": { + id: "688689", + isTestnet: true, + chainSelector: 688689, + name: "pharosTestnet", + rpcUrls: [ + "https://atlantic.dplabs-internal.com" + ], + nativeCurrency: { + name: "PHRS", + decimals: 18, + symbol: "PHRS" + }, + blockExplorers: [], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: {} + }, + "763373": { + id: "763373", + isTestnet: true, + chainSelector: 763373, + name: "inkSepolia", + rpcUrls: [ + "https://rpc-gel-sepolia.inkonchain.com", + "https://ink-sepolia.drpc.org" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [ + { + name: "Ink Explorer", + url: "https://sepolia.inkscan.io", + apiUrl: "https://sepolia.inkscan.io/api" + } + ], + finalityConfirmations: 3600, + minBlockConfirmations: 1, + deployments: {} + }, + "808813": { + id: "808813", + isTestnet: true, + chainSelector: 808813, + name: "bobSepolia", + rpcUrls: [ + "https://bob-testnet.drpc.org", + "https://bob-sepolia.rpc.gobob.xyz" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [], + finalityConfirmations: 3600, + minBlockConfirmations: 1, + deployments: {} + }, + "1000101": { + id: "1000101", + isTestnet: true, + chainSelector: 1000101, + name: "xomarketTestnet", + rpcUrls: [ + "https://dev-testnet-rpc.xo.market", + "https://testnet-rpc-1.xo.market" + ], + nativeCurrency: { + name: "XO", + decimals: 18, + symbol: "XO" + }, + blockExplorers: [], + finalityConfirmations: 2, + minBlockConfirmations: 1, + deployments: {} + }, + "1234200": { + id: "123420001114", + isTestnet: true, + chainSelector: 1234200, + name: "campv2Testnet", + rpcUrls: [ + "https://rpc.basecamp.t.raas.gelato.cloud" + ], + nativeCurrency: { + name: "Camp", + decimals: 18, + symbol: "CAMP" + }, + blockExplorers: [], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: {} + }, + "1313161": { + id: "1313161555", + isTestnet: true, + finalityTagEnabled: true, + chainSelector: 1313161, + name: "auroraTestnet", + rpcUrls: [ + "https://aurora-testnet.drpc.org", + "https://testnet.aurora.dev" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [], + minBlockConfirmations: 1, + deployments: {} + }, + "1685877": { + id: "168587773", + isTestnet: true, + chainSelector: 1685877, + name: "blastSepolia", + rpcUrls: [ + "https://blast-sepolia.drpc.org", + "https://blast-testnet-public.nodies.app", + "https://sepolia.blast.io" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [ + { + name: "Blastscan", + url: "https://sepolia.blastscan.io", + apiUrl: "https://api-sepolia.blastscan.io/api" + } + ], + finalityConfirmations: 600, + minBlockConfirmations: 1, + deployments: {} + }, + "11155111": { + id: "11155111", + isTestnet: true, + finalityTagEnabled: true, + chainSelector: 11155111, + name: "ethereumSepolia", + rpcUrls: [ + "https://gateway.tenderly.co/public/sepolia", + "https://sepolia.gateway.tenderly.co", + "https://sepolia.drpc.org", + "https://1rpc.io/sepolia", + "https://ethereum-sepolia-public.nodies.app", + "https://0xrpc.io/sep", + "https://ethereum-sepolia-rpc.publicnode.com", + "https://eth-sepolia.api.onfinality.io/public", + "https://eth-sepolia-testnet.api.pocket.network", + "https://ethereum-sepolia.rpc.subquery.network/public" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [ + { + name: "Etherscan", + url: "https://sepolia.etherscan.io", + apiUrl: "https://api-sepolia.etherscan.io/api" + } + ], + minBlockConfirmations: 1, + deployments: { + router: "0x3E0aAA63fFb51169B9aE9b7Dc3616b43362124D6", + relayerLib: "0x8338A0B9c83C0d7E67C267432DF4C8b7cA98e11C", + validatorLib: "0x1A808aa4F1E874763E114AB4fD170460D84A8D54" + } + }, + "11155420": { + id: "11155420", + isTestnet: true, + chainSelector: 11155420, + name: "optimismSepolia", + rpcUrls: [ + "https://sepolia.optimism.io", + "https://optimism-sepolia.gateway.tenderly.co", + "https://optimism-sepolia.drpc.org", + "https://optimism-sepolia-public.nodies.app", + "https://optimism-sepolia.api.onfinality.io/public" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [ + { + name: "Optimism Explorer", + url: "https://sepolia-optimism.etherscan.io", + apiUrl: "https://api-sepolia-optimism.etherscan.io/api" + } + ], + finalityConfirmations: 600, + minBlockConfirmations: 1, + deployments: { + router: "0x25c2037546Bf5B525DfAfe85A662DB519c07bDdB", + relayerLib: "0x6E0b96885Ab0A58e82f2D1ce4df29AF6F5a40089", + validatorLib: "0x0C12fAdDb045bB71C256E36662D56b4b22f1bD58" + } + }, + "11155931": { + id: "11155931", + isTestnet: true, + chainSelector: 11155931, + name: "riseTestnet", + rpcUrls: [ + "https://testnet.riselabs.xyz" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: {} + } +}; + +// node_modules/viem/_esm/utils/chain/defineChain.js +function defineChain(chain) { + return { + formatters: void 0, + fees: void 0, + serializers: void 0, + ...chain + }; +} + // node_modules/viem/_esm/errors/unit.js init_base(); var InvalidDecimalNumberError = class extends BaseError { @@ -538,6 +2300,267 @@ function parseUnits(value, decimals) { init_abis(); init_formatUnits(); +// src/utils/createViemChain.ts +function createViemChain(chainDefinition) { + return defineChain({ + id: chainDefinition.id, + name: chainDefinition.name, + nativeCurrency: { + decimals: 18, + name: "eth", + symbol: "eth" + }, + rpcUrls: { + default: { http: chainDefinition.rpcUrls } + }, + blockExplorers: chainDefinition.blockExplorer ? { + default: { + name: chainDefinition.blockExplorer.name, + url: chainDefinition.blockExplorer.url + } + } : void 0, + testnet: chainDefinition.isTestnet + }); +} + +// src/utils/getEnvVar.ts +var import_process = __toESM(require("process")); + +// src/utils/log.ts +var reset = "\x1B[0m"; +function log(message, functionName, networkName) { + const greenFill = "\x1B[32m"; + const network = networkName ? `\x1B[35m[${networkName}]${reset}` : ""; + console.log(`${network}${greenFill}[${functionName}]${reset}`, message); +} +function warn(message, functionName) { + const yellowFill = "\x1B[33m"; + console.log(`${yellowFill}[${functionName}]${reset}`, message); +} +var log_default = log; + +// src/utils/getEnvVar.ts +function getEnvVar(key) { + const value = import_process.default.env[key]; + if (value === void 0 || value === "") { + warn(`Missing env variable: ${key}`, "getEnvVar"); + return void 0; + } + return value; +} + +// src/utils/getTrezorDeployEnabled.ts +var getTrezorDeployEnabled = () => getEnvVar("TREZOR_DEPLOY_ENABLED") === "true"; + +// src/utils/getWallet.ts +function getWallet(chainType, accountType, walletType) { + let prefix; + let walletKey; + switch (accountType) { + case "proxyDeployer": + prefix = "PROXY_DEPLOYER"; + break; + case "deployer": + prefix = "DEPLOYER"; + break; + case "operator": + prefix = "OPERATOR"; + break; + case "priceFeedProxyDeployer": + prefix = "PRICE_FEED_PROXY_DEPLOYER"; + break; + default: + throw new Error(`Unknown account type: ${accountType}`); + } + switch (walletType) { + case "privateKey": + walletKey = "PRIVATE_KEY"; + break; + case "address": + walletKey = "ADDRESS"; + break; + default: + throw new Error(`Unknown wallet type: ${walletType}`); + } + const envKey = `${chainType.toUpperCase()}_${prefix}_${walletKey}`; + const walletValue = process.env[envKey]; + if (!walletValue) { + warn(`Missing env variable: ${envKey}`, "getEnvVar"); + } + return walletValue; +} + +// src/utils/updateEnvVariable.ts +var import_fs = require("fs"); +var import_path = __toESM(require("path")); + +// src/constants/deploymentVariables.ts +var envPrefixes = { + router: "CONCERO_ROUTER", + routerProxy: "CONCERO_ROUTER_PROXY", + routerProxyAdmin: "CONCERO_ROUTER_PROXY_ADMIN", + verifier: "CONCERO_VERIFIER", + verifierProxy: "CONCERO_VERIFIER_PROXY", + verifierProxyAdmin: "CONCERO_VERIFIER_PROXY_ADMIN", + priceFeed: "CONCERO_PRICE_FEED", + priceFeedProxy: "CONCERO_PRICE_FEED_PROXY", + priceFeedProxyAdmin: "CONCERO_PRICE_FEED_PROXY_ADMIN", + lpToken: "LPTOKEN", + pause: "CONCERO_PAUSE", + creValidatorLibProxy: "CONCERO_CRE_VALIDATOR_LIB_PROXY", + creValidatorLibProxyAdmin: "CONCERO_CRE_VALIDATOR_LIB_PROXY_ADMIN", + creValidatorLib: "CONCERO_CRE_VALIDATOR_LIB", + relayerLib: "CONCERO_RELAYER_LIB", + relayerLibProxy: "CONCERO_RELAYER_LIB_PROXY", + relayerLibProxyAdmin: "CONCERO_RELAYER_LIB_PROXY_ADMIN" +}; + +// src/utils/updateEnvVariable.ts +function updateEnvVariable(key, newValue, envFileName) { + const filePath = import_path.default.join(__dirname, `../.env.${envFileName}`); + if (!filePath) throw new Error(`File not found: ${filePath}`); + const envContents = (0, import_fs.readFileSync)(filePath, "utf8"); + let lines = envContents.split(/\r?\n/); + if (!lines.some((line) => line.startsWith(`${key}=`))) { + log_default(`Key ${key} not found in .env file. Adding to ${filePath}`, "updateEnvVariable"); + lines.push(`${key}=${newValue}`); + } + const newLines = lines.map((line) => { + let [currentKey, currentValue] = line.split("="); + if (currentKey === key) { + return `${key}=${newValue}`; + } + return line; + }); + (0, import_fs.writeFileSync)(filePath, newLines.join("\n")); + process.env[key] = newValue; +} +function updateEnvAddress(prefix, newValue, envFileName, networkPostfix) { + const searchKey = networkPostfix ? `${envPrefixes[prefix]}_${getNetworkEnvKey(networkPostfix)}` : envPrefixes[prefix]; + updateEnvVariable(searchKey, newValue, envFileName); +} + +// src/constants/conceroNetworks.ts +var mainnetProxyDeployerPK = getWallet( + "mainnet", + "proxyDeployer", + "privateKey" +); +var testnetProxyDeployerPK = getWallet( + "testnet", + "proxyDeployer", + "privateKey" +); +var mainnetDeployerPK = getWallet("mainnet", "deployer", "privateKey"); +var testnetDeployerPK = getWallet("testnet", "deployer", "privateKey"); +var trezorDeployEnabled = getTrezorDeployEnabled(); +var testnetAccounts = [testnetDeployerPK, testnetProxyDeployerPK]; +var networkTypes2 = { + mainnet: "mainnet", + testnet: "testnet", + localhost: "localhost" +}; +function createExtendedNetworks(chains, networkType, accounts) { + const validAccounts = accounts.filter((acc) => !!acc); + return Object.fromEntries( + Object.values(chains).map((chain) => { + const chainDefinition = { + id: parseInt(chain.id), + name: chain.name, + rpcUrls: chain.rpcUrls, + isTestnet: chain.isTestnet ?? false, + ...chain.blockExplorers?.[0] && { + blockExplorer: { + name: chain.blockExplorers[0].name, + url: chain.blockExplorers[0].url + } + } + }; + const viemChain = createViemChain(chainDefinition); + return [ + chain.name, + { + name: chain.name, + chainId: parseInt(chain.id), + type: networkType, + url: chain.rpcUrls[0] || "", + rpcUrls: chain.rpcUrls, + saveDeployments: false, + ...!trezorDeployEnabled && { accounts: validAccounts }, + chainSelector: BigInt(chain.chainSelector), + confirmations: 1, + viemChain, + ...trezorDeployEnabled && { + trezorDerivationPaths: [ + [44, 60, 0, 0, 0], + [44, 60, 0, 0, 1] + ], + trezorInsecureDerivation: true + } + } + ]; + }) + ); +} +var testnetNetworks = createExtendedNetworks( + chains_testnet_default, + networkTypes2.testnet, + testnetAccounts +); +var mainnetNetworks = createExtendedNetworks( + chains_mainnet_default, + networkTypes2.mainnet, + [mainnetDeployerPK, mainnetProxyDeployerPK] +); +var conceroNetworks = { + ...testnetNetworks, + ...mainnetNetworks +}; + +// src/deploy/GenericDeploy.ts +var genericDeploy = async ({ hre, contractName, contractPrefix, txParams }, ...contractConstructorArgs) => { + const [deployer] = await hre.ethers.getSigners(); + const chain = conceroNetworks[hre.network.name]; + log( + `Deploy ${contractName} from address: ${await deployer.getAddress()}`, + "contract deploy", + chain.name + ); + const contractFactory = await hre.ethers.getContractFactory(contractName); + const deployOverrides = txParams?.gasLimit ? { gasLimit: txParams.gasLimit } : {}; + const deployTx = contractFactory.getDeployTransaction( + ...contractConstructorArgs, + deployOverrides + ); + const isTrezorDeployEnabled = getTrezorDeployEnabled(); + if (deployTx.data && isTrezorDeployEnabled) { + log( + `${contractName} input data: ${deployTx.data} + size: ${(deployTx.data.length - 2) / 2}`, + "bytecode", + chain.name + ); + } + const contract = await contractFactory.deploy(...contractConstructorArgs, deployOverrides); + await contract.deploymentTransaction()?.wait(); + const deploymentAddress = await contract.getAddress(); + if (hre.tenderly) { + await hre.tenderly.verify({ name: contractName, address: deploymentAddress }); + } + log( + `Deployed at: ${deploymentAddress}`, + `deploy ${contractName}`, + chain.name + ); + updateEnvAddress( + contractPrefix, + deploymentAddress, + `deployments.${chain.type}`, + chain.name + ); + return contract.deploymentTransaction()?.hash; +}; + // src/tokens/TokenSender.ts var TokenSender = class { walletClient; @@ -634,7 +2657,7 @@ async function hardhatDeployWrapper(contractName, { publicClient, proxy = false, gasLimit, - log = false, + log: log2 = false, libraries, skipIfAlreadyDeployed = false }) { @@ -652,7 +2675,7 @@ async function hardhatDeployWrapper(contractName, { }); const gasData = await getActualGasData(publicClient); const waitConfirmations = hre.network.name.startsWith("ethereum") ? 1 : 3; - if (log) { + if (log2) { console.log( `\x1B[34m[hardhatDeployWrapper]\x1B[0m\x1B[35m[args]\x1B[0m`, { @@ -690,6 +2713,7 @@ async function hardhatDeployWrapper(contractName, { 0 && (module.exports = { TokenSender, config, + genericDeploy, getNetworkEnvKey, getNetworkKey, hardhatDeployWrapper, diff --git a/dist/index.cjs.js.map b/dist/index.cjs.js.map index ca92643..2df12ef 100644 --- a/dist/index.cjs.js.map +++ b/dist/index.cjs.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../node_modules/viem/errors/version.ts", "../node_modules/viem/errors/base.ts", "../node_modules/viem/utils/unit/formatUnits.ts", "../node_modules/viem/constants/abis.ts", "../src/index.ts", "../src/constants/config.ts", "../src/networks/getNetworkEnvKey.ts", "../src/networks/networkTypes.ts", "../node_modules/viem/errors/unit.ts", "../node_modules/viem/utils/unit/parseUnits.ts", "../node_modules/viem/index.ts", "../src/tokens/TokenSender.ts", "../src/deploy/getActualGasData.ts", "../src/deploy/hardhatDeployWrapper.ts"], - "sourcesContent": ["export const version = '2.24.2'\n", "import { version } from './version.js'\n\ntype ErrorConfig = {\n getDocsUrl?: ((args: BaseErrorParameters) => string | undefined) | undefined\n version?: string | undefined\n}\n\nlet errorConfig: ErrorConfig = {\n getDocsUrl: ({\n docsBaseUrl,\n docsPath = '',\n docsSlug,\n }: BaseErrorParameters) =>\n docsPath\n ? `${docsBaseUrl ?? 'https://viem.sh'}${docsPath}${\n docsSlug ? `#${docsSlug}` : ''\n }`\n : undefined,\n version: `viem@${version}`,\n}\n\nexport function setErrorConfig(config: ErrorConfig) {\n errorConfig = config\n}\n\ntype BaseErrorParameters = {\n cause?: BaseError | Error | undefined\n details?: string | undefined\n docsBaseUrl?: string | undefined\n docsPath?: string | undefined\n docsSlug?: string | undefined\n metaMessages?: string[] | undefined\n name?: string | undefined\n}\n\nexport type BaseErrorType = BaseError & { name: 'BaseError' }\nexport class BaseError extends Error {\n details: string\n docsPath?: string | undefined\n metaMessages?: string[] | undefined\n shortMessage: string\n version: string\n\n override name = 'BaseError'\n\n constructor(shortMessage: string, args: BaseErrorParameters = {}) {\n const details = (() => {\n if (args.cause instanceof BaseError) return args.cause.details\n if (args.cause?.message) return args.cause.message\n return args.details!\n })()\n const docsPath = (() => {\n if (args.cause instanceof BaseError)\n return args.cause.docsPath || args.docsPath\n return args.docsPath\n })()\n const docsUrl = errorConfig.getDocsUrl?.({ ...args, docsPath })\n\n const message = [\n shortMessage || 'An error occurred.',\n '',\n ...(args.metaMessages ? [...args.metaMessages, ''] : []),\n ...(docsUrl ? [`Docs: ${docsUrl}`] : []),\n ...(details ? [`Details: ${details}`] : []),\n ...(errorConfig.version ? [`Version: ${errorConfig.version}`] : []),\n ].join('\\n')\n\n super(message, args.cause ? { cause: args.cause } : undefined)\n\n this.details = details\n this.docsPath = docsPath\n this.metaMessages = args.metaMessages\n this.name = args.name ?? this.name\n this.shortMessage = shortMessage\n this.version = version\n }\n\n walk(): Error\n walk(fn: (err: unknown) => boolean): Error | null\n walk(fn?: any): any {\n return walk(this, fn)\n }\n}\n\nfunction walk(\n err: unknown,\n fn?: ((err: unknown) => boolean) | undefined,\n): unknown {\n if (fn?.(err)) return err\n if (\n err &&\n typeof err === 'object' &&\n 'cause' in err &&\n err.cause !== undefined\n )\n return walk(err.cause, fn)\n return fn ? null : err\n}\n", "import type { ErrorType } from '../../errors/utils.js'\n\nexport type FormatUnitsErrorType = ErrorType\n\n/**\n * Divides a number by a given exponent of base 10 (10exponent), and formats it into a string representation of the number..\n *\n * - Docs: https://viem.sh/docs/utilities/formatUnits\n *\n * @example\n * import { formatUnits } from 'viem'\n *\n * formatUnits(420000000000n, 9)\n * // '420'\n */\nexport function formatUnits(value: bigint, decimals: number) {\n let display = value.toString()\n\n const negative = display.startsWith('-')\n if (negative) display = display.slice(1)\n\n display = display.padStart(decimals, '0')\n\n let [integer, fraction] = [\n display.slice(0, display.length - decimals),\n display.slice(display.length - decimals),\n ]\n fraction = fraction.replace(/(0+)$/, '')\n return `${negative ? '-' : ''}${integer || '0'}${\n fraction ? `.${fraction}` : ''\n }`\n}\n", "/* [Multicall3](https://github.com/mds1/multicall) */\nexport const multicall3Abi = [\n {\n inputs: [\n {\n components: [\n {\n name: 'target',\n type: 'address',\n },\n {\n name: 'allowFailure',\n type: 'bool',\n },\n {\n name: 'callData',\n type: 'bytes',\n },\n ],\n name: 'calls',\n type: 'tuple[]',\n },\n ],\n name: 'aggregate3',\n outputs: [\n {\n components: [\n {\n name: 'success',\n type: 'bool',\n },\n {\n name: 'returnData',\n type: 'bytes',\n },\n ],\n name: 'returnData',\n type: 'tuple[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n] as const\n\nconst universalResolverErrors = [\n {\n inputs: [],\n name: 'ResolverNotFound',\n type: 'error',\n },\n {\n inputs: [],\n name: 'ResolverWildcardNotSupported',\n type: 'error',\n },\n {\n inputs: [],\n name: 'ResolverNotContract',\n type: 'error',\n },\n {\n inputs: [\n {\n name: 'returnData',\n type: 'bytes',\n },\n ],\n name: 'ResolverError',\n type: 'error',\n },\n {\n inputs: [\n {\n components: [\n {\n name: 'status',\n type: 'uint16',\n },\n {\n name: 'message',\n type: 'string',\n },\n ],\n name: 'errors',\n type: 'tuple[]',\n },\n ],\n name: 'HttpError',\n type: 'error',\n },\n] as const\n\nexport const universalResolverResolveAbi = [\n ...universalResolverErrors,\n {\n name: 'resolve',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'name', type: 'bytes' },\n { name: 'data', type: 'bytes' },\n ],\n outputs: [\n { name: '', type: 'bytes' },\n { name: 'address', type: 'address' },\n ],\n },\n {\n name: 'resolve',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'name', type: 'bytes' },\n { name: 'data', type: 'bytes' },\n { name: 'gateways', type: 'string[]' },\n ],\n outputs: [\n { name: '', type: 'bytes' },\n { name: 'address', type: 'address' },\n ],\n },\n] as const\n\nexport const universalResolverReverseAbi = [\n ...universalResolverErrors,\n {\n name: 'reverse',\n type: 'function',\n stateMutability: 'view',\n inputs: [{ type: 'bytes', name: 'reverseName' }],\n outputs: [\n { type: 'string', name: 'resolvedName' },\n { type: 'address', name: 'resolvedAddress' },\n { type: 'address', name: 'reverseResolver' },\n { type: 'address', name: 'resolver' },\n ],\n },\n {\n name: 'reverse',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { type: 'bytes', name: 'reverseName' },\n { type: 'string[]', name: 'gateways' },\n ],\n outputs: [\n { type: 'string', name: 'resolvedName' },\n { type: 'address', name: 'resolvedAddress' },\n { type: 'address', name: 'reverseResolver' },\n { type: 'address', name: 'resolver' },\n ],\n },\n] as const\n\nexport const textResolverAbi = [\n {\n name: 'text',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'name', type: 'bytes32' },\n { name: 'key', type: 'string' },\n ],\n outputs: [{ name: '', type: 'string' }],\n },\n] as const\n\nexport const addressResolverAbi = [\n {\n name: 'addr',\n type: 'function',\n stateMutability: 'view',\n inputs: [{ name: 'name', type: 'bytes32' }],\n outputs: [{ name: '', type: 'address' }],\n },\n {\n name: 'addr',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'name', type: 'bytes32' },\n { name: 'coinType', type: 'uint256' },\n ],\n outputs: [{ name: '', type: 'bytes' }],\n },\n] as const\n\n// ERC-1271\n// isValidSignature(bytes32 hash, bytes signature) \u2192 bytes4 magicValue\n/** @internal */\nexport const smartAccountAbi = [\n {\n name: 'isValidSignature',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'hash', type: 'bytes32' },\n { name: 'signature', type: 'bytes' },\n ],\n outputs: [{ name: '', type: 'bytes4' }],\n },\n] as const\n\n// ERC-6492 - universal deployless signature validator contract\n// constructor(address _signer, bytes32 _hash, bytes _signature) \u2192 bytes4 returnValue\n// returnValue is either 0x1 (valid) or 0x0 (invalid)\nexport const universalSignatureValidatorAbi = [\n {\n inputs: [\n {\n name: '_signer',\n type: 'address',\n },\n {\n name: '_hash',\n type: 'bytes32',\n },\n {\n name: '_signature',\n type: 'bytes',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'constructor',\n },\n {\n inputs: [\n {\n name: '_signer',\n type: 'address',\n },\n {\n name: '_hash',\n type: 'bytes32',\n },\n {\n name: '_signature',\n type: 'bytes',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n name: 'isValidSig',\n },\n] as const\n\n/** [ERC-20 Token Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-20) */\nexport const erc20Abi = [\n {\n type: 'event',\n name: 'Approval',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'event',\n name: 'Transfer',\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'allowance',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'spender',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'approve',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'balanceOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'decimals',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint8',\n },\n ],\n },\n {\n type: 'function',\n name: 'name',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'symbol',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'totalSupply',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'transfer',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'transferFrom',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'sender',\n type: 'address',\n },\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n] as const\n\n/**\n * [bytes32-flavored ERC-20](https://docs.makerdao.com/smart-contract-modules/mkr-module#4.-gotchas-potential-source-of-user-error)\n * for tokens (ie. Maker) that use bytes32 instead of string.\n */\nexport const erc20Abi_bytes32 = [\n {\n type: 'event',\n name: 'Approval',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'event',\n name: 'Transfer',\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'allowance',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'spender',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'approve',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'balanceOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'decimals',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint8',\n },\n ],\n },\n {\n type: 'function',\n name: 'name',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'bytes32',\n },\n ],\n },\n {\n type: 'function',\n name: 'symbol',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'bytes32',\n },\n ],\n },\n {\n type: 'function',\n name: 'totalSupply',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'transfer',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'transferFrom',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'sender',\n type: 'address',\n },\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n] as const\n\n/** [ERC-721 Non-Fungible Token Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-721) */\nexport const erc721Abi = [\n {\n type: 'event',\n name: 'Approval',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: true,\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'event',\n name: 'ApprovalForAll',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'operator',\n type: 'address',\n },\n {\n indexed: false,\n name: 'approved',\n type: 'bool',\n },\n ],\n },\n {\n type: 'event',\n name: 'Transfer',\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: true,\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'approve',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'balanceOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'getApproved',\n stateMutability: 'view',\n inputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'address',\n },\n ],\n },\n {\n type: 'function',\n name: 'isApprovedForAll',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'operator',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'name',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'ownerOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n name: 'owner',\n type: 'address',\n },\n ],\n },\n {\n type: 'function',\n name: 'safeTransferFrom',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'from',\n type: 'address',\n },\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'safeTransferFrom',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'from',\n type: 'address',\n },\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'id',\n type: 'uint256',\n },\n {\n name: 'data',\n type: 'bytes',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'setApprovalForAll',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'operator',\n type: 'address',\n },\n {\n name: 'approved',\n type: 'bool',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'symbol',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'tokenByIndex',\n stateMutability: 'view',\n inputs: [\n {\n name: 'index',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'tokenByIndex',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'index',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'tokenURI',\n stateMutability: 'view',\n inputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'totalSupply',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'transferFrom',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'sender',\n type: 'address',\n },\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'tokeId',\n type: 'uint256',\n },\n ],\n outputs: [],\n },\n] as const\n\n/** [ERC-4626 Tokenized Vaults Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-4626) */\nexport const erc4626Abi = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'Approval',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'sender',\n type: 'address',\n },\n {\n indexed: true,\n name: 'receiver',\n type: 'address',\n },\n {\n indexed: false,\n name: 'assets',\n type: 'uint256',\n },\n {\n indexed: false,\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'Deposit',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'Transfer',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'sender',\n type: 'address',\n },\n {\n indexed: true,\n name: 'receiver',\n type: 'address',\n },\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: false,\n name: 'assets',\n type: 'uint256',\n },\n {\n indexed: false,\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'Withdraw',\n type: 'event',\n },\n {\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'spender',\n type: 'address',\n },\n ],\n name: 'allowance',\n outputs: [\n {\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'approve',\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'asset',\n outputs: [\n {\n name: 'assetTokenAddress',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n name: 'balanceOf',\n outputs: [\n {\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'convertToAssets',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n name: 'convertToShares',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n ],\n name: 'deposit',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'caller',\n type: 'address',\n },\n ],\n name: 'maxDeposit',\n outputs: [\n {\n name: 'maxAssets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'caller',\n type: 'address',\n },\n ],\n name: 'maxMint',\n outputs: [\n {\n name: 'maxShares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'maxRedeem',\n outputs: [\n {\n name: 'maxShares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'maxWithdraw',\n outputs: [\n {\n name: 'maxAssets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n ],\n name: 'mint',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n name: 'previewDeposit',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'previewMint',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'previewRedeem',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n name: 'previewWithdraw',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'redeem',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'totalAssets',\n outputs: [\n {\n name: 'totalManagedAssets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'totalSupply',\n outputs: [\n {\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'transfer',\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'from',\n type: 'address',\n },\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'transferFrom',\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'withdraw',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const\n", "import { config } from './constants/config';\nimport {\n\tgetNetworkEnvKey,\n\tgetNetworkKey,\n\tnetworkTypes,\n\ttype ConceroNetwork,\n\ttype NetworkType,\n} from './networks';\n\nimport { TokenSender } from './tokens/TokenSender';\n\nimport { hardhatDeployWrapper } from './deploy/hardhatDeployWrapper';\n\nexport {\n\tConceroNetwork,\n\tconfig,\n\tgetNetworkEnvKey,\n\tgetNetworkKey,\n\tnetworkTypes,\n\tTokenSender,\n\thardhatDeployWrapper,\n};\nexport type { NetworkType };\n", "export const config = {\n DEFAULT_BLOCK_CONFIRMATIONS: 2,\n};\n", "/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkEnvKey(networkName: string): string {\n if (!networkName) {\n throw new Error('Network name must be provided');\n }\n return camelCaseToCapsSnakeCase(networkName);\n}\n\n/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkKey(NETWORK_NAME: string): string {\n if (!NETWORK_NAME) {\n throw new Error('Network name must be provided');\n }\n return capsSnakeCaseToCamelCase(NETWORK_NAME);\n}\n\n/**\n * Converts a string from CAPS_SNAKE_CASE to camelCase\n *\n * @param snakeCaseString The string in CAPS_SNAKE_CASE format\n * @returns The string converted to camelCase format\n */\nexport function capsSnakeCaseToCamelCase(snakeCaseString: string): string {\n if (!snakeCaseString) {\n throw new Error('String must be provided');\n }\n\n return snakeCaseString\n .toLowerCase()\n .replace(/_([a-z])/g, (_, char) => char.toUpperCase());\n}\n\n/**\n * Converts a string from camelCase to CAPS_SNAKE_CASE\n *\n * @param camelCaseString The string in camelCase format\n * @returns The string converted to CAPS_SNAKE_CASE format\n */\nexport function camelCaseToCapsSnakeCase(camelCaseString: string): string {\n if (!camelCaseString) {\n throw new Error('String must be provided');\n }\n\n return camelCaseString.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toUpperCase();\n}\n\nexport function getNetworkName(networkEnvKey: string): string {\n if (!networkEnvKey) {\n throw new Error('Network name must be provided');\n }\n\n return networkEnvKey\n .toLowerCase()\n .split('_')\n .map((word, index) =>\n index === 0 ? word : word[0].toUpperCase() + word.slice(1)\n )\n .join('');\n}\n", "import { type NetworkType } from './types';\n\nexport const networkTypes: Record = {\n mainnet: 'mainnet',\n testnet: 'testnet',\n localhost: 'localhost',\n};\n", "import { BaseError } from './base.js'\n\nexport type InvalidDecimalNumberErrorType = InvalidDecimalNumberError & {\n name: 'InvalidDecimalNumberError'\n}\nexport class InvalidDecimalNumberError extends BaseError {\n constructor({ value }: { value: string }) {\n super(`Number \\`${value}\\` is not a valid decimal number.`, {\n name: 'InvalidDecimalNumberError',\n })\n }\n}\n", "import { InvalidDecimalNumberError } from '../../errors/unit.js'\nimport type { ErrorType } from '../../errors/utils.js'\n\nexport type ParseUnitsErrorType = ErrorType\n\n/**\n * Multiplies a string representation of a number by a given exponent of base 10 (10exponent).\n *\n * - Docs: https://viem.sh/docs/utilities/parseUnits\n *\n * @example\n * import { parseUnits } from 'viem'\n *\n * parseUnits('420', 9)\n * // 420000000000n\n */\nexport function parseUnits(value: string, decimals: number) {\n if (!/^(-?)([0-9]*)\\.?([0-9]*)$/.test(value))\n throw new InvalidDecimalNumberError({ value })\n\n let [integer, fraction = '0'] = value.split('.')\n\n const negative = integer.startsWith('-')\n if (negative) integer = integer.slice(1)\n\n // trim trailing zeros.\n fraction = fraction.replace(/(0+)$/, '')\n\n // round off if the fraction is larger than the number of decimals.\n if (decimals === 0) {\n if (Math.round(Number(`.${fraction}`)) === 1)\n integer = `${BigInt(integer) + 1n}`\n fraction = ''\n } else if (fraction.length > decimals) {\n const [left, unit, right] = [\n fraction.slice(0, decimals - 1),\n fraction.slice(decimals - 1, decimals),\n fraction.slice(decimals),\n ]\n\n const rounded = Math.round(Number(`${unit}.${right}`))\n if (rounded > 9)\n fraction = `${BigInt(left) + BigInt(1)}0`.padStart(left.length + 1, '0')\n else fraction = `${left}${rounded}`\n\n if (fraction.length > decimals) {\n fraction = fraction.slice(1)\n integer = `${BigInt(integer) + 1n}`\n }\n\n fraction = fraction.slice(0, decimals)\n } else {\n fraction = fraction.padEnd(decimals, '0')\n }\n\n return BigInt(`${negative ? '-' : ''}${integer}${fraction}`)\n}\n", "// biome-ignore lint/performance/noBarrelFile: entrypoint module\nexport {\n type Abi,\n type AbiFunction,\n type AbiParameter,\n type AbiEvent,\n type AbiStateMutability,\n type AbiParameterKind,\n type AbiParameterToPrimitiveType,\n type Address,\n type Narrow,\n type ParseAbi,\n type ParseAbiItem,\n type ParseAbiParameter,\n type ParseAbiParameters,\n type ResolvedRegister,\n type TypedData,\n type TypedDataDomain,\n type TypedDataParameter,\n CircularReferenceError,\n InvalidAbiParameterError,\n InvalidAbiParametersError,\n InvalidAbiItemError,\n InvalidAbiTypeParameterError,\n InvalidFunctionModifierError,\n InvalidModifierError,\n InvalidParameterError,\n InvalidParenthesisError,\n InvalidSignatureError,\n InvalidStructSignatureError,\n SolidityProtectedKeywordError,\n UnknownTypeError,\n UnknownSignatureError,\n parseAbi,\n parseAbiItem,\n parseAbiParameter,\n parseAbiParameters,\n} from 'abitype'\nexport type {\n BlockOverrides,\n Rpc as RpcBlockOverrides,\n} from 'ox/BlockOverrides'\n\nexport {\n getContract,\n type GetContractErrorType,\n type GetContractParameters,\n type GetContractReturnType,\n} from './actions/getContract.js'\nexport {\n type GetContractEventsErrorType,\n type GetContractEventsParameters,\n type GetContractEventsReturnType,\n} from './actions/public/getContractEvents.js'\nexport {\n type GetEip712DomainErrorType,\n type GetEip712DomainParameters,\n type GetEip712DomainReturnType,\n} from './actions/public/getEip712Domain.js'\nexport {\n type AddChainErrorType,\n type AddChainParameters,\n} from './actions/wallet/addChain.js'\nexport {\n type CallErrorType,\n type CallParameters,\n type CallReturnType,\n} from './actions/public/call.js'\nexport type {\n CreateAccessListParameters,\n CreateAccessListReturnType,\n CreateAccessListErrorType,\n} from './actions/public/createAccessList.js'\nexport type {\n CreateBlockFilterErrorType,\n CreateBlockFilterReturnType,\n} from './actions/public/createBlockFilter.js'\nexport type {\n CreateContractEventFilterErrorType,\n CreateContractEventFilterParameters,\n CreateContractEventFilterReturnType,\n} from './actions/public/createContractEventFilter.js'\nexport type {\n CreateEventFilterErrorType,\n CreateEventFilterParameters,\n CreateEventFilterReturnType,\n} from './actions/public/createEventFilter.js'\nexport type {\n CreatePendingTransactionFilterErrorType,\n CreatePendingTransactionFilterReturnType,\n} from './actions/public/createPendingTransactionFilter.js'\nexport type {\n DeployContractErrorType,\n DeployContractParameters,\n DeployContractReturnType,\n} from './actions/wallet/deployContract.js'\nexport type {\n DropTransactionErrorType,\n DropTransactionParameters,\n} from './actions/test/dropTransaction.js'\nexport type {\n DumpStateErrorType,\n DumpStateReturnType,\n} from './actions/test/dumpState.js'\nexport type {\n GetAutomineErrorType,\n GetAutomineReturnType,\n} from './actions/test/getAutomine.js'\nexport type {\n EstimateContractGasErrorType,\n EstimateContractGasParameters,\n EstimateContractGasReturnType,\n} from './actions/public/estimateContractGas.js'\nexport type {\n EstimateGasErrorType,\n EstimateGasParameters,\n EstimateGasReturnType,\n} from './actions/public/estimateGas.js'\nexport type {\n EstimateFeesPerGasErrorType,\n EstimateFeesPerGasParameters,\n EstimateFeesPerGasReturnType,\n} from './actions/public/estimateFeesPerGas.js'\nexport type {\n EstimateMaxPriorityFeePerGasErrorType,\n EstimateMaxPriorityFeePerGasParameters,\n EstimateMaxPriorityFeePerGasReturnType,\n} from './actions/public/estimateMaxPriorityFeePerGas.js'\nexport type {\n GetAddressesErrorType,\n GetAddressesReturnType,\n} from './actions/wallet/getAddresses.js'\nexport type {\n GetBalanceErrorType,\n GetBalanceParameters,\n GetBalanceReturnType,\n} from './actions/public/getBalance.js'\nexport type {\n GetBlobBaseFeeErrorType,\n GetBlobBaseFeeReturnType,\n} from './actions/public/getBlobBaseFee.js'\nexport type {\n GetBlockNumberErrorType,\n GetBlockNumberParameters,\n GetBlockNumberReturnType,\n} from './actions/public/getBlockNumber.js'\nexport type {\n GetBlockErrorType,\n GetBlockParameters,\n GetBlockReturnType,\n} from './actions/public/getBlock.js'\nexport type {\n GetBlockTransactionCountErrorType,\n GetBlockTransactionCountParameters,\n GetBlockTransactionCountReturnType,\n} from './actions/public/getBlockTransactionCount.js'\nexport type {\n /** @deprecated Use `GetCodeErrorType` instead */\n GetCodeErrorType as GetBytecodeErrorType,\n /** @deprecated Use `GetCodeParameters` instead */\n GetCodeParameters as GetBytecodeParameters,\n /** @deprecated Use `GetCodeReturnType` instead */\n GetCodeReturnType as GetBytecodeReturnType,\n GetCodeErrorType,\n GetCodeParameters,\n GetCodeReturnType,\n} from './actions/public/getCode.js'\nexport type {\n GetChainIdErrorType,\n GetChainIdReturnType,\n} from './actions/public/getChainId.js'\nexport type {\n GetEnsAddressErrorType,\n GetEnsAddressParameters,\n GetEnsAddressReturnType,\n} from './actions/ens/getEnsAddress.js'\nexport type {\n GetEnsAvatarErrorType,\n GetEnsAvatarParameters,\n GetEnsAvatarReturnType,\n} from './actions/ens/getEnsAvatar.js'\nexport type {\n GetEnsNameErrorType,\n GetEnsNameParameters,\n GetEnsNameReturnType,\n} from './actions/ens/getEnsName.js'\nexport type {\n GetEnsResolverErrorType,\n GetEnsResolverParameters,\n GetEnsResolverReturnType,\n} from './actions/ens/getEnsResolver.js'\nexport type {\n GetEnsTextErrorType,\n GetEnsTextParameters,\n GetEnsTextReturnType,\n} from './actions/ens/getEnsText.js'\nexport type {\n GetFeeHistoryErrorType,\n GetFeeHistoryParameters,\n GetFeeHistoryReturnType,\n} from './actions/public/getFeeHistory.js'\nexport type {\n GetFilterChangesErrorType,\n GetFilterChangesParameters,\n GetFilterChangesReturnType,\n} from './actions/public/getFilterChanges.js'\nexport type {\n GetFilterLogsErrorType,\n GetFilterLogsParameters,\n GetFilterLogsReturnType,\n} from './actions/public/getFilterLogs.js'\nexport type {\n GetGasPriceErrorType,\n GetGasPriceReturnType,\n} from './actions/public/getGasPrice.js'\nexport type {\n GetLogsErrorType,\n GetLogsParameters,\n GetLogsReturnType,\n} from './actions/public/getLogs.js'\nexport type {\n GetPermissionsErrorType,\n GetPermissionsReturnType,\n} from './actions/wallet/getPermissions.js'\nexport type {\n GetProofErrorType,\n GetProofParameters,\n GetProofReturnType,\n} from './actions/public/getProof.js'\nexport type {\n GetStorageAtErrorType,\n GetStorageAtParameters,\n GetStorageAtReturnType,\n} from './actions/public/getStorageAt.js'\nexport type {\n GetTransactionConfirmationsErrorType,\n GetTransactionConfirmationsParameters,\n GetTransactionConfirmationsReturnType,\n} from './actions/public/getTransactionConfirmations.js'\nexport type {\n GetTransactionCountErrorType,\n GetTransactionCountParameters,\n GetTransactionCountReturnType,\n} from './actions/public/getTransactionCount.js'\nexport type {\n GetTransactionErrorType,\n GetTransactionParameters,\n GetTransactionReturnType,\n} from './actions/public/getTransaction.js'\nexport type {\n GetTransactionReceiptErrorType,\n GetTransactionReceiptParameters,\n GetTransactionReceiptReturnType,\n} from './actions/public/getTransactionReceipt.js'\nexport type {\n ImpersonateAccountErrorType,\n ImpersonateAccountParameters,\n} from './actions/test/impersonateAccount.js'\nexport type {\n IncreaseTimeErrorType,\n IncreaseTimeParameters,\n} from './actions/test/increaseTime.js'\nexport type {\n LoadStateErrorType,\n LoadStateParameters,\n LoadStateReturnType,\n} from './actions/test/loadState.js'\nexport type { MineErrorType, MineParameters } from './actions/test/mine.js'\nexport type {\n MulticallErrorType,\n MulticallParameters,\n MulticallReturnType,\n} from './actions/public/multicall.js'\nexport type { SnapshotErrorType } from './actions/test/snapshot.js'\nexport type {\n SimulateBlocksParameters,\n SimulateBlocksReturnType,\n SimulateBlocksErrorType,\n} from './actions/public/simulateBlocks.js'\nexport type {\n SimulateCallsParameters,\n SimulateCallsReturnType,\n SimulateCallsErrorType,\n} from './actions/public/simulateCalls.js'\nexport type {\n GetMutabilityAwareValue,\n SimulateContractParameters,\n SimulateContractReturnType,\n SimulateContractErrorType,\n} from './actions/public/simulateContract.js'\nexport type {\n OnBlock,\n OnBlockParameter,\n WatchBlocksErrorType,\n WatchBlocksParameters,\n WatchBlocksReturnType,\n} from './actions/public/watchBlocks.js'\nexport type {\n OnBlockNumberFn,\n OnBlockNumberParameter,\n WatchBlockNumberErrorType,\n WatchBlockNumberParameters,\n WatchBlockNumberReturnType,\n} from './actions/public/watchBlockNumber.js'\nexport type {\n WatchEventOnLogsFn,\n WatchEventOnLogsParameter,\n WatchEventErrorType,\n WatchEventParameters,\n WatchEventReturnType,\n} from './actions/public/watchEvent.js'\nexport type {\n OnTransactionsFn,\n OnTransactionsParameter,\n WatchPendingTransactionsErrorType,\n WatchPendingTransactionsParameters,\n WatchPendingTransactionsReturnType,\n} from './actions/public/watchPendingTransactions.js'\nexport type {\n ReadContractErrorType,\n ReadContractParameters,\n ReadContractReturnType,\n} from './actions/public/readContract.js'\nexport type {\n ReplacementReason,\n ReplacementReturnType,\n WaitForTransactionReceiptErrorType,\n WaitForTransactionReceiptParameters,\n WaitForTransactionReceiptReturnType,\n} from './actions/public/waitForTransactionReceipt.js'\nexport type {\n RequestAddressesErrorType,\n RequestAddressesReturnType,\n} from './actions/wallet/requestAddresses.js'\nexport type {\n RequestPermissionsErrorType,\n RequestPermissionsReturnType,\n RequestPermissionsParameters,\n} from './actions/wallet/requestPermissions.js'\nexport type {\n GetTxpoolContentErrorType,\n GetTxpoolContentReturnType,\n} from './actions/test/getTxpoolContent.js'\nexport type {\n GetTxpoolStatusErrorType,\n GetTxpoolStatusReturnType,\n} from './actions/test/getTxpoolStatus.js'\nexport type {\n InspectTxpoolErrorType,\n InspectTxpoolReturnType,\n} from './actions/test/inspectTxpool.js'\nexport type { RemoveBlockTimestampIntervalErrorType } from './actions/test/removeBlockTimestampInterval.js'\nexport type { ResetErrorType, ResetParameters } from './actions/test/reset.js'\nexport type {\n RevertErrorType,\n RevertParameters,\n} from './actions/test/revert.js'\nexport type {\n SendRawTransactionErrorType,\n SendRawTransactionParameters,\n SendRawTransactionReturnType,\n} from './actions/wallet/sendRawTransaction.js'\nexport type {\n SendTransactionErrorType,\n SendTransactionParameters,\n SendTransactionRequest,\n SendTransactionReturnType,\n} from './actions/wallet/sendTransaction.js'\nexport type {\n SignTransactionErrorType,\n SignTransactionParameters,\n SignTransactionReturnType,\n} from './actions/wallet/signTransaction.js'\nexport type {\n PrepareTransactionRequestErrorType,\n PrepareTransactionRequestParameters,\n PrepareTransactionRequestParameterType,\n PrepareTransactionRequestRequest,\n PrepareTransactionRequestReturnType,\n} from './actions/wallet/prepareTransactionRequest.js'\nexport type {\n SendUnsignedTransactionErrorType,\n SendUnsignedTransactionParameters,\n SendUnsignedTransactionReturnType,\n} from './actions/test/sendUnsignedTransaction.js'\nexport type { SetAutomineErrorType } from './actions/test/setAutomine.js'\nexport type {\n SetBalanceErrorType,\n SetBalanceParameters,\n} from './actions/test/setBalance.js'\nexport type {\n SetBlockGasLimitErrorType,\n SetBlockGasLimitParameters,\n} from './actions/test/setBlockGasLimit.js'\nexport type {\n SetBlockTimestampIntervalErrorType,\n SetBlockTimestampIntervalParameters,\n} from './actions/test/setBlockTimestampInterval.js'\nexport type {\n SetCodeErrorType,\n SetCodeParameters,\n} from './actions/test/setCode.js'\nexport type {\n SetCoinbaseErrorType,\n SetCoinbaseParameters,\n} from './actions/test/setCoinbase.js'\nexport type {\n SetIntervalMiningErrorType,\n SetIntervalMiningParameters,\n} from './actions/test/setIntervalMining.js'\nexport type { SetLoggingEnabledErrorType } from './actions/test/setLoggingEnabled.js'\nexport type {\n SetMinGasPriceErrorType,\n SetMinGasPriceParameters,\n} from './actions/test/setMinGasPrice.js'\nexport type {\n SetNextBlockBaseFeePerGasErrorType,\n SetNextBlockBaseFeePerGasParameters,\n} from './actions/test/setNextBlockBaseFeePerGas.js'\nexport type {\n SetNextBlockTimestampErrorType,\n SetNextBlockTimestampParameters,\n} from './actions/test/setNextBlockTimestamp.js'\nexport type {\n SetNonceErrorType,\n SetNonceParameters,\n} from './actions/test/setNonce.js'\nexport type { SetRpcUrlErrorType } from './actions/test/setRpcUrl.js'\nexport type {\n SetStorageAtErrorType,\n SetStorageAtParameters,\n} from './actions/test/setStorageAt.js'\nexport type {\n SignMessageErrorType,\n SignMessageParameters,\n SignMessageReturnType,\n} from './actions/wallet/signMessage.js'\nexport type {\n SignTypedDataErrorType,\n SignTypedDataParameters,\n SignTypedDataReturnType,\n} from './actions/wallet/signTypedData.js'\nexport type {\n StopImpersonatingAccountErrorType,\n StopImpersonatingAccountParameters,\n} from './actions/test/stopImpersonatingAccount.js'\nexport type {\n SwitchChainErrorType,\n SwitchChainParameters,\n} from './actions/wallet/switchChain.js'\nexport type {\n UninstallFilterErrorType,\n UninstallFilterParameters,\n UninstallFilterReturnType,\n} from './actions/public/uninstallFilter.js'\nexport type {\n WatchAssetErrorType,\n WatchAssetParameters,\n WatchAssetReturnType,\n} from './actions/wallet/watchAsset.js'\nexport type {\n VerifyHashErrorType as VerifyHashActionErrorType,\n VerifyHashParameters as VerifyHashActionParameters,\n VerifyHashReturnType as VerifyHashActionReturnType,\n} from './actions/public/verifyHash.js'\nexport type {\n VerifyTypedDataErrorType as VerifyTypedDataActionErrorType,\n VerifyTypedDataParameters as VerifyTypedDataActionParameters,\n VerifyTypedDataReturnType as VerifyTypedDataActionReturnType,\n} from './actions/public/verifyTypedData.js'\nexport type {\n VerifyMessageErrorType as VerifyMessageActionErrorType,\n VerifyMessageParameters as VerifyMessageActionParameters,\n VerifyMessageReturnType as VerifyMessageActionReturnType,\n} from './actions/public/verifyMessage.js'\nexport type {\n WatchContractEventOnLogsFn,\n WatchContractEventOnLogsParameter,\n WatchContractEventErrorType,\n WatchContractEventParameters,\n WatchContractEventReturnType,\n} from './actions/public/watchContractEvent.js'\nexport type {\n WriteContractErrorType,\n WriteContractParameters,\n WriteContractReturnType,\n} from './actions/wallet/writeContract.js'\nexport type { Call, Calls } from './types/calls.js'\nexport type {\n Chain,\n ChainConfig,\n ChainContract,\n ChainEstimateFeesPerGasFn,\n ChainFees,\n ChainFeesFnParameters,\n ChainFormatter,\n ChainEstimateFeesPerGasFnParameters,\n ChainMaxPriorityFeePerGasFn,\n DeriveChain,\n GetChainParameter,\n ChainFormatters,\n ChainSerializers,\n ExtractChainFormatterExclude,\n ExtractChainFormatterParameters,\n ExtractChainFormatterReturnType,\n} from './types/chain.js'\nexport type { GetTransactionRequestKzgParameter, Kzg } from './types/kzg.js'\nexport {\n type Client,\n type ClientConfig,\n type CreateClientErrorType,\n type MulticallBatchOptions,\n createClient,\n rpcSchema,\n} from './clients/createClient.js'\nexport {\n type CustomTransport,\n type CustomTransportConfig,\n type CustomTransportErrorType,\n custom,\n} from './clients/transports/custom.js'\nexport {\n type FallbackTransport,\n type FallbackTransportConfig,\n type FallbackTransportErrorType,\n fallback,\n shouldThrow,\n} from './clients/transports/fallback.js'\nexport {\n type HttpTransport,\n type HttpTransportConfig,\n type HttpTransportErrorType,\n http,\n} from './clients/transports/http.js'\nexport {\n type PublicClient,\n type PublicClientConfig,\n type CreatePublicClientErrorType,\n createPublicClient,\n} from './clients/createPublicClient.js'\nexport {\n type TestClient,\n type TestClientConfig,\n type CreateTestClientErrorType,\n createTestClient,\n} from './clients/createTestClient.js'\nexport {\n type PublicActions,\n publicActions,\n} from './clients/decorators/public.js'\nexport {\n type TestActions,\n testActions,\n} from './clients/decorators/test.js'\nexport {\n type WalletActions,\n walletActions,\n} from './clients/decorators/wallet.js'\nexport {\n type Transport,\n type TransportConfig,\n type CreateTransportErrorType,\n createTransport,\n} from './clients/transports/createTransport.js'\nexport {\n type WalletClient,\n type WalletClientConfig,\n type CreateWalletClientErrorType,\n createWalletClient,\n} from './clients/createWalletClient.js'\nexport {\n type WebSocketTransport,\n type WebSocketTransportConfig,\n type WebSocketTransportErrorType,\n webSocket,\n} from './clients/transports/webSocket.js'\nexport {\n multicall3Abi,\n erc20Abi,\n erc20Abi_bytes32,\n erc721Abi,\n erc4626Abi,\n universalSignatureValidatorAbi,\n} from './constants/abis.js'\nexport { ethAddress, zeroAddress } from './constants/address.js'\nexport {\n deploylessCallViaBytecodeBytecode,\n deploylessCallViaFactoryBytecode,\n universalSignatureValidatorByteCode,\n} from './constants/contracts.js'\nexport { etherUnits, gweiUnits, weiUnits } from './constants/unit.js'\nexport {\n maxInt8,\n maxInt16,\n maxInt24,\n maxInt32,\n maxInt40,\n maxInt48,\n maxInt56,\n maxInt64,\n maxInt72,\n maxInt80,\n maxInt88,\n maxInt96,\n maxInt104,\n maxInt112,\n maxInt120,\n maxInt128,\n maxInt136,\n maxInt144,\n maxInt152,\n maxInt160,\n maxInt168,\n maxInt176,\n maxInt184,\n maxInt192,\n maxInt200,\n maxInt208,\n maxInt216,\n maxInt224,\n maxInt232,\n maxInt240,\n maxInt248,\n maxInt256,\n maxUint8,\n maxUint16,\n maxUint24,\n maxUint32,\n maxUint40,\n maxUint48,\n maxUint56,\n maxUint64,\n maxUint72,\n maxUint80,\n maxUint88,\n maxUint96,\n maxUint104,\n maxUint112,\n maxUint120,\n maxUint128,\n maxUint136,\n maxUint144,\n maxUint152,\n maxUint160,\n maxUint168,\n maxUint176,\n maxUint184,\n maxUint192,\n maxUint200,\n maxUint208,\n maxUint216,\n maxUint224,\n maxUint232,\n maxUint240,\n maxUint248,\n maxUint256,\n minInt8,\n minInt16,\n minInt24,\n minInt32,\n minInt40,\n minInt48,\n minInt56,\n minInt64,\n minInt72,\n minInt80,\n minInt88,\n minInt96,\n minInt104,\n minInt112,\n minInt120,\n minInt128,\n minInt136,\n minInt144,\n minInt152,\n minInt160,\n minInt168,\n minInt176,\n minInt184,\n minInt192,\n minInt200,\n minInt208,\n minInt216,\n minInt224,\n minInt232,\n minInt240,\n minInt248,\n minInt256,\n} from './constants/number.js'\nexport { zeroHash } from './constants/bytes.js'\nexport { presignMessagePrefix } from './constants/strings.js'\nexport {\n AbiConstructorNotFoundError,\n type AbiConstructorNotFoundErrorType,\n AbiConstructorParamsNotFoundError,\n type AbiConstructorParamsNotFoundErrorType,\n AbiDecodingDataSizeInvalidError,\n type AbiDecodingDataSizeInvalidErrorType,\n AbiDecodingDataSizeTooSmallError,\n type AbiDecodingDataSizeTooSmallErrorType,\n AbiDecodingZeroDataError,\n type AbiDecodingZeroDataErrorType,\n AbiEncodingArrayLengthMismatchError,\n type AbiEncodingArrayLengthMismatchErrorType,\n AbiEncodingLengthMismatchError,\n type AbiEncodingLengthMismatchErrorType,\n AbiEncodingBytesSizeMismatchError,\n type AbiEncodingBytesSizeMismatchErrorType,\n AbiErrorInputsNotFoundError,\n type AbiErrorInputsNotFoundErrorType,\n AbiErrorNotFoundError,\n type AbiErrorNotFoundErrorType,\n AbiErrorSignatureNotFoundError,\n type AbiErrorSignatureNotFoundErrorType,\n AbiEventNotFoundError,\n type AbiEventNotFoundErrorType,\n AbiEventSignatureEmptyTopicsError,\n type AbiEventSignatureEmptyTopicsErrorType,\n AbiEventSignatureNotFoundError,\n type AbiEventSignatureNotFoundErrorType,\n AbiFunctionNotFoundError,\n type AbiFunctionNotFoundErrorType,\n AbiFunctionOutputsNotFoundError,\n type AbiFunctionOutputsNotFoundErrorType,\n AbiFunctionSignatureNotFoundError,\n type AbiFunctionSignatureNotFoundErrorType,\n BytesSizeMismatchError,\n type BytesSizeMismatchErrorType,\n DecodeLogDataMismatch,\n type DecodeLogDataMismatchErrorType,\n DecodeLogTopicsMismatch,\n type DecodeLogTopicsMismatchErrorType,\n InvalidAbiDecodingTypeError,\n type InvalidAbiDecodingTypeErrorType,\n InvalidAbiEncodingTypeError,\n type InvalidAbiEncodingTypeErrorType,\n InvalidArrayError,\n type InvalidArrayErrorType,\n InvalidDefinitionTypeError,\n type InvalidDefinitionTypeErrorType,\n UnsupportedPackedAbiType,\n type UnsupportedPackedAbiTypeErrorType,\n} from './errors/abi.js'\nexport { BaseError, type BaseErrorType, setErrorConfig } from './errors/base.js'\nexport {\n BlockNotFoundError,\n type BlockNotFoundErrorType,\n} from './errors/block.js'\nexport {\n CallExecutionError,\n type CallExecutionErrorType,\n ContractFunctionExecutionError,\n type ContractFunctionExecutionErrorType,\n ContractFunctionRevertedError,\n type ContractFunctionRevertedErrorType,\n ContractFunctionZeroDataError,\n type ContractFunctionZeroDataErrorType,\n RawContractError,\n type RawContractErrorType,\n CounterfactualDeploymentFailedError,\n type CounterfactualDeploymentFailedErrorType,\n} from './errors/contract.js'\nexport {\n BaseFeeScalarError,\n type BaseFeeScalarErrorType,\n Eip1559FeesNotSupportedError,\n type Eip1559FeesNotSupportedErrorType,\n MaxFeePerGasTooLowError,\n type MaxFeePerGasTooLowErrorType,\n} from './errors/fee.js'\nexport {\n ChainDisconnectedError,\n type ChainDisconnectedErrorType,\n InternalRpcError,\n type InternalRpcErrorType,\n InvalidInputRpcError,\n type InvalidInputRpcErrorType,\n InvalidParamsRpcError,\n type InvalidParamsRpcErrorType,\n InvalidRequestRpcError,\n type InvalidRequestRpcErrorType,\n JsonRpcVersionUnsupportedError,\n type JsonRpcVersionUnsupportedErrorType,\n LimitExceededRpcError,\n type LimitExceededRpcErrorType,\n MethodNotFoundRpcError,\n type MethodNotFoundRpcErrorType,\n MethodNotSupportedRpcError,\n type MethodNotSupportedRpcErrorType,\n ParseRpcError,\n type ParseRpcErrorType,\n ProviderDisconnectedError,\n type ProviderDisconnectedErrorType,\n ProviderRpcError,\n type ProviderRpcErrorCode,\n type ProviderRpcErrorType,\n ResourceNotFoundRpcError,\n type ResourceNotFoundRpcErrorType,\n ResourceUnavailableRpcError,\n type ResourceUnavailableRpcErrorType,\n RpcError,\n type RpcErrorType,\n type RpcErrorCode,\n SwitchChainError,\n TransactionRejectedRpcError,\n type TransactionRejectedRpcErrorType,\n UnauthorizedProviderError,\n type UnauthorizedProviderErrorType,\n UnknownRpcError,\n type UnknownRpcErrorType,\n UnsupportedProviderMethodError,\n type UnsupportedProviderMethodErrorType,\n UserRejectedRequestError,\n type UserRejectedRequestErrorType,\n} from './errors/rpc.js'\nexport {\n ChainDoesNotSupportContract,\n type ChainDoesNotSupportContractErrorType,\n ChainMismatchError,\n type ChainMismatchErrorType,\n ChainNotFoundError,\n type ChainNotFoundErrorType,\n ClientChainNotConfiguredError,\n type ClientChainNotConfiguredErrorType,\n InvalidChainIdError,\n type InvalidChainIdErrorType,\n} from './errors/chain.js'\nexport {\n InvalidBytesBooleanError,\n type InvalidBytesBooleanErrorType,\n IntegerOutOfRangeError,\n type IntegerOutOfRangeErrorType,\n InvalidHexBooleanError,\n type InvalidHexBooleanErrorType,\n InvalidHexValueError,\n type InvalidHexValueErrorType,\n SizeOverflowError,\n type SizeOverflowErrorType,\n} from './errors/encoding.js'\nexport {\n type EnsAvatarInvalidMetadataError,\n EnsAvatarUriResolutionError,\n type EnsAvatarInvalidMetadataErrorType,\n EnsAvatarInvalidNftUriError,\n type EnsAvatarInvalidNftUriErrorType,\n EnsAvatarUnsupportedNamespaceError,\n type EnsAvatarUnsupportedNamespaceErrorType,\n type EnsAvatarUriResolutionErrorType,\n} from './errors/ens.js'\nexport {\n type InvalidDecimalNumberErrorType,\n InvalidDecimalNumberError,\n} from './errors/unit.js'\nexport {\n EstimateGasExecutionError,\n type EstimateGasExecutionErrorType,\n} from './errors/estimateGas.js'\nexport {\n ExecutionRevertedError,\n type ExecutionRevertedErrorType,\n FeeCapTooHighError,\n type FeeCapTooHighErrorType,\n FeeCapTooLowError,\n type FeeCapTooLowErrorType,\n InsufficientFundsError,\n type InsufficientFundsErrorType,\n IntrinsicGasTooHighError,\n type IntrinsicGasTooHighErrorType,\n IntrinsicGasTooLowError,\n type IntrinsicGasTooLowErrorType,\n NonceMaxValueError,\n type NonceMaxValueErrorType,\n NonceTooHighError,\n type NonceTooHighErrorType,\n NonceTooLowError,\n type NonceTooLowErrorType,\n TipAboveFeeCapError,\n type TipAboveFeeCapErrorType,\n TransactionTypeNotSupportedError,\n type TransactionTypeNotSupportedErrorType,\n UnknownNodeError,\n type UnknownNodeErrorType,\n} from './errors/node.js'\nexport {\n FilterTypeNotSupportedError,\n type FilterTypeNotSupportedErrorType,\n} from './errors/log.js'\nexport {\n HttpRequestError,\n type HttpRequestErrorType,\n RpcRequestError,\n type RpcRequestErrorType,\n TimeoutError,\n type TimeoutErrorType,\n SocketClosedError,\n type SocketClosedErrorType,\n WebSocketRequestError,\n type WebSocketRequestErrorType,\n} from './errors/request.js'\nexport {\n InvalidAddressError,\n type InvalidAddressErrorType,\n} from './errors/address.js'\nexport {\n FeeConflictError,\n type FeeConflictErrorType,\n InvalidLegacyVError,\n type InvalidLegacyVErrorType,\n InvalidSerializableTransactionError,\n type InvalidSerializableTransactionErrorType,\n InvalidSerializedTransactionError,\n type InvalidSerializedTransactionErrorType,\n InvalidSerializedTransactionTypeError,\n type InvalidSerializedTransactionTypeErrorType,\n InvalidStorageKeySizeError,\n type InvalidStorageKeySizeErrorType,\n TransactionExecutionError,\n type TransactionExecutionErrorType,\n TransactionNotFoundError,\n type TransactionNotFoundErrorType,\n TransactionReceiptNotFoundError,\n type TransactionReceiptNotFoundErrorType,\n WaitForTransactionReceiptTimeoutError,\n type WaitForTransactionReceiptTimeoutErrorType,\n} from './errors/transaction.js'\nexport {\n SizeExceedsPaddingSizeError,\n type SizeExceedsPaddingSizeErrorType,\n SliceOffsetOutOfBoundsError,\n type SliceOffsetOutOfBoundsErrorType,\n} from './errors/data.js'\nexport {\n UrlRequiredError,\n type UrlRequiredErrorType,\n} from './errors/transport.js'\nexport {\n AccountStateConflictError,\n type AccountStateConflictErrorType,\n StateAssignmentConflictError,\n type StateAssignmentConflictErrorType,\n} from './errors/stateOverride.js'\nexport {\n InvalidDomainError,\n type InvalidDomainErrorType,\n InvalidPrimaryTypeError,\n type InvalidPrimaryTypeErrorType,\n InvalidStructTypeError,\n type InvalidStructTypeErrorType,\n} from './errors/typedData.js'\nexport type {\n AbiEventParameterToPrimitiveType,\n AbiEventParametersToPrimitiveTypes,\n AbiEventTopicToPrimitiveType,\n AbiItem,\n AbiItemArgs,\n AbiItemName,\n ContractConstructorArgs,\n ContractEventArgsFromTopics,\n EventDefinition,\n ExtractAbiFunctionForArgs,\n ExtractAbiItem,\n ExtractAbiItemForArgs,\n ExtractAbiItemNames,\n ContractErrorArgs,\n ContractErrorName,\n ContractEventArgs,\n ContractEventName,\n ContractFunctionParameters,\n ContractFunctionReturnType,\n ContractFunctionArgs,\n ContractFunctionName,\n GetEventArgs,\n GetValue,\n LogTopicType,\n MaybeAbiEventName,\n MaybeExtractEventArgsFromAbi,\n UnionWiden,\n Widen,\n} from './types/contract.js'\nexport type {\n AccessList,\n Transaction,\n TransactionBase,\n TransactionEIP1559,\n TransactionEIP2930,\n TransactionEIP4844,\n TransactionEIP7702,\n TransactionLegacy,\n TransactionReceipt,\n TransactionRequest,\n TransactionRequestBase,\n TransactionRequestEIP1559,\n TransactionRequestEIP2930,\n TransactionRequestEIP4844,\n TransactionRequestEIP7702,\n TransactionRequestGeneric,\n TransactionRequestLegacy,\n TransactionSerializable,\n TransactionSerializableBase,\n TransactionSerializableEIP1559,\n TransactionSerializableEIP2930,\n TransactionSerializableEIP4844,\n TransactionSerializableEIP7702,\n TransactionSerializableGeneric,\n TransactionSerializableLegacy,\n TransactionSerialized,\n TransactionSerializedEIP1559,\n TransactionSerializedEIP2930,\n TransactionSerializedEIP4844,\n TransactionSerializedEIP7702,\n TransactionSerializedGeneric,\n TransactionSerializedLegacy,\n TransactionType,\n} from './types/transaction.js'\nexport type {\n Assign,\n Branded,\n Evaluate,\n IsNarrowable,\n IsUndefined,\n IsUnion,\n LooseOmit,\n MaybePartial,\n MaybePromise,\n MaybeRequired,\n Mutable,\n NoInfer,\n NoUndefined,\n Omit,\n Or,\n PartialBy,\n RequiredBy,\n Some,\n UnionEvaluate,\n UnionLooseOmit,\n ValueOf,\n Prettify,\n ExactPartial,\n ExactRequired,\n IsNever,\n OneOf,\n UnionOmit,\n UnionPartialBy,\n UnionPick,\n UnionRequiredBy,\n UnionToTuple,\n} from './types/utils.js'\nexport type {\n Account,\n AccountSource,\n CustomSource,\n HDAccount,\n HDOptions,\n JsonRpcAccount,\n LocalAccount,\n PrivateKeyAccount,\n} from './accounts/types.js'\nexport type { AssetGateway, AssetGatewayUrls } from './types/ens.js'\nexport type {\n Block,\n BlockIdentifier,\n BlockNumber,\n BlockTag,\n Uncle,\n} from './types/block.js'\nexport type {\n ByteArray,\n Hash,\n Hex,\n LogTopic,\n Signature,\n CompactSignature,\n SignableMessage,\n} from './types/misc.js'\nexport type {\n AddEthereumChainParameter,\n BundlerRpcSchema,\n DebugBundlerRpcSchema,\n EIP1193EventMap,\n EIP1193Events,\n EIP1193Parameters,\n EIP1193Provider,\n EIP1193RequestFn,\n EIP1474Methods,\n ProviderRpcErrorType as EIP1193ProviderRpcErrorType,\n ProviderConnectInfo,\n ProviderMessage,\n PublicRpcSchema,\n PaymasterRpcSchema,\n NetworkSync,\n RpcSchema,\n RpcSchemaOverride,\n TestRpcSchema,\n WalletCapabilities,\n WalletCapabilitiesRecord,\n WalletCallReceipt,\n WalletGetCallsStatusReturnType,\n WalletGrantPermissionsParameters,\n WalletGrantPermissionsReturnType,\n WalletSendCallsParameters,\n WalletPermissionCaveat,\n WalletPermission,\n WalletRpcSchema,\n WatchAssetParams,\n} from './types/eip1193.js'\nexport { ProviderRpcError as EIP1193ProviderRpcError } from './types/eip1193.js'\nexport type { BlobSidecar, BlobSidecars } from './types/eip4844.js'\nexport type {\n FeeHistory,\n FeeValues,\n FeeValuesEIP1559,\n FeeValuesEIP4844,\n FeeValuesLegacy,\n FeeValuesType,\n} from './types/fee.js'\nexport type { Filter, FilterType } from './types/filter.js'\nexport type { TypedDataDefinition } from './types/typedData.js'\nexport type { GetTransportConfig, GetPollOptions } from './types/transport.js'\nexport type { Log } from './types/log.js'\nexport type {\n MulticallContracts,\n MulticallResponse,\n MulticallResults,\n} from './types/multicall.js'\nexport type {\n ParseAccount,\n DeriveAccount,\n HDKey,\n} from './types/account.js'\nexport type {\n Authorization,\n AuthorizationList,\n SerializedAuthorization,\n SerializedAuthorizationList,\n SignedAuthorization,\n SignedAuthorizationList,\n} from './types/authorization.js'\nexport type {\n Index,\n Quantity,\n RpcAuthorization,\n RpcAuthorizationList,\n RpcBlock,\n RpcBlockIdentifier,\n RpcBlockNumber,\n RpcFeeHistory,\n RpcFeeValues,\n RpcLog,\n RpcTransaction,\n RpcTransactionReceipt,\n RpcTransactionRequest,\n RpcUncle,\n Status,\n RpcProof,\n RpcAccountStateOverride,\n RpcStateOverride,\n RpcStateMapping,\n} from './types/rpc.js'\nexport type { Withdrawal } from './types/withdrawal.js'\nexport type {\n StateMapping,\n StateOverride,\n} from './types/stateOverride.js'\nexport { labelhash, type LabelhashErrorType } from './utils/ens/labelhash.js'\nexport { namehash, type NamehashErrorType } from './utils/ens/namehash.js'\nexport {\n type FormattedBlock,\n defineBlock,\n type DefineBlockErrorType,\n formatBlock,\n type FormatBlockErrorType,\n} from './utils/formatters/block.js'\nexport { formatLog, type FormatLogErrorType } from './utils/formatters/log.js'\nexport {\n type DecodeAbiParametersErrorType,\n type DecodeAbiParametersReturnType,\n decodeAbiParameters,\n} from './utils/abi/decodeAbiParameters.js'\nexport {\n type DecodeDeployDataErrorType,\n type DecodeDeployDataParameters,\n type DecodeDeployDataReturnType,\n decodeDeployData,\n} from './utils/abi/decodeDeployData.js'\nexport {\n type DecodeErrorResultErrorType,\n type DecodeErrorResultParameters,\n type DecodeErrorResultReturnType,\n decodeErrorResult,\n} from './utils/abi/decodeErrorResult.js'\nexport {\n type DecodeEventLogErrorType,\n type DecodeEventLogParameters,\n type DecodeEventLogReturnType,\n decodeEventLog,\n} from './utils/abi/decodeEventLog.js'\nexport {\n type DecodeFunctionDataErrorType,\n type DecodeFunctionDataParameters,\n type DecodeFunctionDataReturnType,\n decodeFunctionData,\n} from './utils/abi/decodeFunctionData.js'\nexport {\n type DecodeFunctionResultErrorType,\n type DecodeFunctionResultParameters,\n type DecodeFunctionResultReturnType,\n decodeFunctionResult,\n} from './utils/abi/decodeFunctionResult.js'\nexport {\n type EncodeAbiParametersErrorType,\n type EncodeAbiParametersReturnType,\n encodeAbiParameters,\n} from './utils/abi/encodeAbiParameters.js'\nexport {\n type EncodeDeployDataErrorType,\n type EncodeDeployDataParameters,\n type EncodeDeployDataReturnType,\n encodeDeployData,\n} from './utils/abi/encodeDeployData.js'\nexport {\n type EncodeErrorResultErrorType,\n type EncodeErrorResultParameters,\n type EncodeErrorResultReturnType,\n encodeErrorResult,\n} from './utils/abi/encodeErrorResult.js'\nexport {\n type EncodeEventTopicsErrorType,\n type EncodeEventTopicsParameters,\n type EncodeEventTopicsReturnType,\n encodeEventTopics,\n} from './utils/abi/encodeEventTopics.js'\nexport {\n type EncodeFunctionDataErrorType,\n type EncodeFunctionDataParameters,\n type EncodeFunctionDataReturnType,\n encodeFunctionData,\n} from './utils/abi/encodeFunctionData.js'\nexport {\n type PrepareEncodeFunctionDataErrorType,\n type PrepareEncodeFunctionDataParameters,\n type PrepareEncodeFunctionDataReturnType,\n prepareEncodeFunctionData,\n} from './utils/abi/prepareEncodeFunctionData.js'\nexport {\n type EncodeFunctionResultErrorType,\n type EncodeFunctionResultParameters,\n type EncodeFunctionResultReturnType,\n encodeFunctionResult,\n} from './utils/abi/encodeFunctionResult.js'\nexport {\n type ParseEventLogsErrorType,\n type ParseEventLogsParameters,\n type ParseEventLogsReturnType,\n parseEventLogs,\n} from './utils/abi/parseEventLogs.js'\nexport {\n type FormattedTransaction,\n defineTransaction,\n type DefineTransactionErrorType,\n formatTransaction,\n type FormatTransactionErrorType,\n transactionType,\n} from './utils/formatters/transaction.js'\nexport {\n type FormattedTransactionReceipt,\n defineTransactionReceipt,\n type DefineTransactionReceiptErrorType,\n formatTransactionReceipt,\n type FormatTransactionReceiptErrorType,\n} from './utils/formatters/transactionReceipt.js'\nexport {\n type FormattedTransactionRequest,\n defineTransactionRequest,\n type DefineTransactionRequestErrorType,\n formatTransactionRequest,\n type FormatTransactionRequestErrorType,\n rpcTransactionType,\n} from './utils/formatters/transactionRequest.js'\nexport {\n type GetAbiItemErrorType,\n type GetAbiItemParameters,\n type GetAbiItemReturnType,\n getAbiItem,\n} from './utils/abi/getAbiItem.js'\nexport {\n type GetContractAddressOptions,\n type GetCreate2AddressOptions,\n type GetCreate2AddressErrorType,\n type GetCreateAddressOptions,\n type GetCreateAddressErrorType,\n getContractAddress,\n getCreate2Address,\n getCreateAddress,\n} from './utils/address/getContractAddress.js'\nexport {\n type GetSerializedTransactionType,\n type GetSerializedTransactionTypeErrorType,\n getSerializedTransactionType,\n} from './utils/transaction/getSerializedTransactionType.js'\nexport {\n type GetTransactionType,\n type GetTransactionTypeErrorType,\n getTransactionType,\n} from './utils/transaction/getTransactionType.js'\nexport {\n type HashDomainErrorType,\n type HashStructErrorType,\n type HashTypedDataErrorType,\n type HashTypedDataParameters,\n type HashTypedDataReturnType,\n hashDomain,\n hashStruct,\n hashTypedData,\n} from './utils/signature/hashTypedData.js'\nexport {\n type CompactSignatureToSignatureErrorType,\n compactSignatureToSignature,\n} from './utils/signature/compactSignatureToSignature.js'\nexport {\n /** @deprecated Use `ParseCompactSignatureErrorType`. */\n type ParseCompactSignatureErrorType as HexToCompactSignatureErrorType,\n /** @deprecated Use `parseCompactSignature`. */\n parseCompactSignature as hexToCompactSignature,\n type ParseCompactSignatureErrorType,\n parseCompactSignature,\n} from './utils/signature/parseCompactSignature.js'\nexport {\n /** @deprecated Use `ParseSignatureErrorType`. */\n type ParseSignatureErrorType as HexToSignatureErrorType,\n /** @deprecated Use `parseSignature`. */\n parseSignature as hexToSignature,\n type ParseSignatureErrorType,\n parseSignature,\n} from './utils/signature/parseSignature.js'\nexport {\n type RecoverAddressErrorType,\n type RecoverAddressParameters,\n type RecoverAddressReturnType,\n recoverAddress,\n} from './utils/signature/recoverAddress.js'\nexport {\n type RecoverMessageAddressErrorType,\n type RecoverMessageAddressParameters,\n type RecoverMessageAddressReturnType,\n recoverMessageAddress,\n} from './utils/signature/recoverMessageAddress.js'\nexport {\n type RecoverPublicKeyErrorType,\n type RecoverPublicKeyParameters,\n type RecoverPublicKeyReturnType,\n recoverPublicKey,\n} from './utils/signature/recoverPublicKey.js'\nexport {\n type RecoverTransactionAddressErrorType,\n type RecoverTransactionAddressParameters,\n type RecoverTransactionAddressReturnType,\n recoverTransactionAddress,\n} from './utils/signature/recoverTransactionAddress.js'\nexport {\n type RecoverTypedDataAddressErrorType,\n type RecoverTypedDataAddressParameters,\n type RecoverTypedDataAddressReturnType,\n recoverTypedDataAddress,\n} from './utils/signature/recoverTypedDataAddress.js'\nexport {\n type SignatureToCompactSignatureErrorType,\n signatureToCompactSignature,\n} from './utils/signature/signatureToCompactSignature.js'\nexport {\n /** @deprecated Use `SignatureToHexErrorType` instead. */\n type SerializeCompactSignatureErrorType as CompactSignatureToHexErrorType,\n /** @deprecated Use `serializeCompactSignature` instead. */\n serializeCompactSignature as compactSignatureToHex,\n type SerializeCompactSignatureErrorType,\n serializeCompactSignature,\n} from './utils/signature/serializeCompactSignature.js'\nexport {\n /** @deprecated Use `SignatureToHexErrorType` instead. */\n type SerializeSignatureErrorType as SignatureToHexErrorType,\n /** @deprecated Use `serializeSignature` instead. */\n serializeSignature as signatureToHex,\n type SerializeSignatureParameters,\n type SerializeSignatureReturnType,\n type SerializeSignatureErrorType,\n serializeSignature,\n} from './utils/signature/serializeSignature.js'\nexport {\n bytesToRlp,\n type BytesToRlpErrorType,\n hexToRlp,\n type HexToRlpErrorType,\n toRlp,\n type ToRlpErrorType,\n type ToRlpReturnType,\n} from './utils/encoding/toRlp.js'\nexport {\n type VerifyHashErrorType,\n type VerifyHashParameters,\n type VerifyHashReturnType,\n verifyHash,\n} from './utils/signature/verifyHash.js'\nexport {\n type VerifyMessageErrorType,\n type VerifyMessageParameters,\n type VerifyMessageReturnType,\n verifyMessage,\n} from './utils/signature/verifyMessage.js'\nexport {\n type VerifyTypedDataErrorType,\n type VerifyTypedDataParameters,\n type VerifyTypedDataReturnType,\n verifyTypedData,\n} from './utils/signature/verifyTypedData.js'\nexport {\n type ParseErc6492SignatureErrorType,\n type ParseErc6492SignatureParameters,\n type ParseErc6492SignatureReturnType,\n parseErc6492Signature,\n} from './utils/signature/parseErc6492Signature.js'\nexport {\n type IsErc6492SignatureErrorType,\n type IsErc6492SignatureParameters,\n type IsErc6492SignatureReturnType,\n isErc6492Signature,\n} from './utils/signature/isErc6492Signature.js'\nexport {\n type SerializeErc6492SignatureErrorType,\n type SerializeErc6492SignatureParameters,\n type SerializeErc6492SignatureReturnType,\n serializeErc6492Signature,\n} from './utils/signature/serializeErc6492Signature.js'\nexport {\n type AssertRequestErrorType,\n assertRequest,\n} from './utils/transaction/assertRequest.js'\nexport {\n type AssertTransactionEIP1559ErrorType,\n assertTransactionEIP1559,\n type AssertTransactionEIP2930ErrorType,\n assertTransactionEIP2930,\n type AssertTransactionLegacyErrorType,\n assertTransactionLegacy,\n} from './utils/transaction/assertTransaction.js'\nexport {\n type BoolToBytesErrorType,\n type BoolToBytesOpts,\n boolToBytes,\n type HexToBytesErrorType,\n type HexToBytesOpts,\n hexToBytes,\n type NumberToBytesErrorType,\n numberToBytes,\n type StringToBytesErrorType,\n type StringToBytesOpts,\n stringToBytes,\n type ToBytesErrorType,\n type ToBytesParameters,\n toBytes,\n} from './utils/encoding/toBytes.js'\nexport {\n type BoolToHexErrorType,\n type BoolToHexOpts,\n boolToHex,\n type BytesToHexErrorType,\n type BytesToHexOpts,\n bytesToHex,\n type NumberToHexErrorType,\n type NumberToHexOpts,\n numberToHex,\n type StringToHexErrorType,\n type StringToHexOpts,\n stringToHex,\n type ToHexErrorType,\n type ToHexParameters,\n toHex,\n} from './utils/encoding/toHex.js'\nexport {\n type BytesToBigIntErrorType,\n type BytesToBigIntOpts,\n bytesToBigInt,\n type BytesToBoolErrorType,\n type BytesToBoolOpts,\n bytesToBool,\n type BytesToNumberErrorType,\n type BytesToNumberOpts,\n bytesToNumber,\n type BytesToStringErrorType,\n type BytesToStringOpts,\n bytesToString,\n type FromBytesErrorType,\n type FromBytesParameters,\n fromBytes,\n} from './utils/encoding/fromBytes.js'\nexport {\n type CcipRequestParameters,\n type CcipRequestErrorType,\n ccipRequest,\n /** @deprecated Use `ccipRequest`. */\n ccipRequest as ccipFetch,\n type OffchainLookupErrorType,\n offchainLookup,\n offchainLookupAbiItem,\n offchainLookupSignature,\n} from './utils/ccip.js'\nexport {\n type BlobsToCommitmentsErrorType,\n type BlobsToCommitmentsParameters,\n type BlobsToCommitmentsReturnType,\n blobsToCommitments,\n} from './utils/blob/blobsToCommitments.js'\nexport {\n type CommitmentToVersionedHashErrorType,\n type CommitmentToVersionedHashParameters,\n type CommitmentToVersionedHashReturnType,\n commitmentToVersionedHash,\n} from './utils/blob/commitmentToVersionedHash.js'\nexport {\n type CommitmentsToVersionedHashesErrorType,\n type CommitmentsToVersionedHashesParameters,\n type CommitmentsToVersionedHashesReturnType,\n commitmentsToVersionedHashes,\n} from './utils/blob/commitmentsToVersionedHashes.js'\nexport {\n type SidecarsToVersionedHashesErrorType,\n type SidecarsToVersionedHashesParameters,\n type SidecarsToVersionedHashesReturnType,\n sidecarsToVersionedHashes,\n} from './utils/blob/sidecarsToVersionedHashes.js'\nexport {\n type blobsToProofsErrorType,\n type blobsToProofsParameters,\n type blobsToProofsReturnType,\n blobsToProofs,\n} from './utils/blob/blobsToProofs.js'\nexport {\n type FromBlobsErrorType,\n type FromBlobsParameters,\n type FromBlobsReturnType,\n fromBlobs,\n} from './utils/blob/fromBlobs.js'\nexport {\n type ToBlobSidecarsErrorType,\n type ToBlobSidecarsParameters,\n type ToBlobSidecarsReturnType,\n toBlobSidecars,\n} from './utils/blob/toBlobSidecars.js'\nexport {\n type ToBlobsErrorType,\n type ToBlobsParameters,\n type ToBlobsReturnType,\n toBlobs,\n} from './utils/blob/toBlobs.js'\nexport {\n type DefineKzgErrorType,\n type DefineKzgParameters,\n type DefineKzgReturnType,\n defineKzg,\n} from './utils/kzg/defineKzg.js'\nexport {\n type SetupKzgErrorType,\n type SetupKzgParameters,\n type SetupKzgReturnType,\n setupKzg,\n} from './utils/kzg/setupKzg.js'\nexport {\n type ConcatBytesErrorType,\n type ConcatErrorType,\n type ConcatHexErrorType,\n type ConcatReturnType,\n concat,\n concatBytes,\n concatHex,\n} from './utils/data/concat.js'\nexport {\n type AssertCurrentChainErrorType,\n type AssertCurrentChainParameters,\n assertCurrentChain,\n} from './utils/chain/assertCurrentChain.js'\nexport { defineChain } from './utils/chain/defineChain.js'\nexport {\n type ExtractChainErrorType,\n type ExtractChainParameters,\n type ExtractChainReturnType,\n extractChain,\n} from './utils/chain/extractChain.js'\nexport {\n type GetChainContractAddressErrorType,\n getChainContractAddress,\n} from './utils/chain/getChainContractAddress.js'\nexport {\n type EncodePackedErrorType,\n encodePacked,\n} from './utils/abi/encodePacked.js'\nexport {\n type WithRetryErrorType,\n withRetry,\n} from './utils/promise/withRetry.js'\nexport {\n type WithTimeoutErrorType,\n withTimeout,\n} from './utils/promise/withTimeout.js'\nexport {\n type FormatEtherErrorType,\n formatEther,\n} from './utils/unit/formatEther.js'\nexport {\n type FormatGweiErrorType,\n formatGwei,\n} from './utils/unit/formatGwei.js'\nexport {\n type FormatUnitsErrorType,\n formatUnits,\n} from './utils/unit/formatUnits.js'\nexport {\n type FromHexErrorType,\n fromHex,\n type HexToBigIntErrorType,\n hexToBigInt,\n type HexToBoolErrorType,\n hexToBool,\n type HexToNumberErrorType,\n hexToNumber,\n type HexToStringErrorType,\n hexToString,\n} from './utils/encoding/fromHex.js'\nexport {\n type FromRlpErrorType,\n type FromRlpReturnType,\n fromRlp,\n} from './utils/encoding/fromRlp.js'\nexport {\n type ChecksumAddressErrorType,\n type GetAddressErrorType,\n checksumAddress,\n getAddress,\n} from './utils/address/getAddress.js'\nexport {\n type GetContractErrorReturnType,\n getContractError,\n} from './utils/errors/getContractError.js'\nexport {\n type ToEventSelectorErrorType,\n toEventSelector,\n /** @deprecated use `ToEventSelectorErrorType`. */\n type ToEventSelectorErrorType as GetEventSelectorErrorType,\n /** @deprecated use `toEventSelector`. */\n toEventSelector as getEventSelector,\n} from './utils/hash/toEventSelector.js'\nexport {\n type ToFunctionSelectorErrorType,\n toFunctionSelector,\n /** @deprecated use `ToFunctionSelectorErrorType`. */\n type ToFunctionSelectorErrorType as GetFunctionSelectorErrorType,\n /** @deprecated use `toFunctionSelector`. */\n toFunctionSelector as getFunctionSelector,\n} from './utils/hash/toFunctionSelector.js'\nexport {\n type ToEventSignatureErrorType,\n toEventSignature,\n /** @deprecated use `ToEventSignatureErrorType`. */\n type ToEventSignatureErrorType as GetEventSignatureErrorType,\n /** @deprecated use `toEventSignature`. */\n toEventSignature as getEventSignature,\n} from './utils/hash/toEventSignature.js'\nexport {\n type ToFunctionSignatureErrorType,\n toFunctionSignature,\n /** @deprecated use `ToFunctionSignatureErrorType`. */\n type ToFunctionSignatureErrorType as GetFunctionSignatureErrorType,\n /** @deprecated use `toFunctionSignature`. */\n toFunctionSignature as getFunctionSignature,\n} from './utils/hash/toFunctionSignature.js'\nexport {\n type ToEventHashErrorType,\n toEventHash,\n} from './utils/hash/toEventHash.js'\nexport {\n type ToFunctionHashErrorType,\n toFunctionHash,\n} from './utils/hash/toFunctionHash.js'\nexport {\n type HashMessageErrorType,\n hashMessage,\n} from './utils/signature/hashMessage.js'\nexport {\n type ToPrefixedMessageErrorType,\n toPrefixedMessage,\n} from './utils/signature/toPrefixedMessage.js'\nexport {\n type IsAddressOptions,\n type IsAddressErrorType,\n isAddress,\n} from './utils/address/isAddress.js'\nexport {\n type IsAddressEqualReturnType,\n type IsAddressEqualErrorType,\n isAddressEqual,\n} from './utils/address/isAddressEqual.js'\nexport { type IsBytesErrorType, isBytes } from './utils/data/isBytes.js'\nexport { type IsHashErrorType, isHash } from './utils/hash/isHash.js'\nexport { type IsHexErrorType, isHex } from './utils/data/isHex.js'\nexport {\n type Keccak256Hash,\n type Keccak256ErrorType,\n keccak256,\n} from './utils/hash/keccak256.js'\nexport {\n type Sha256Hash,\n type Sha256ErrorType,\n sha256,\n} from './utils/hash/sha256.js'\nexport {\n type Ripemd160Hash,\n type Ripemd160ErrorType,\n ripemd160,\n} from './utils/hash/ripemd160.js'\nexport {\n type PadBytesErrorType,\n type PadErrorType,\n type PadHexErrorType,\n type PadReturnType,\n pad,\n padBytes,\n padHex,\n} from './utils/data/pad.js'\nexport {\n type ParseEtherErrorType,\n parseEther,\n} from './utils/unit/parseEther.js'\nexport { type ParseGweiErrorType, parseGwei } from './utils/unit/parseGwei.js'\nexport {\n type ParseTransactionErrorType,\n type ParseTransactionReturnType,\n parseTransaction,\n} from './utils/transaction/parseTransaction.js'\nexport {\n type ParseUnitsErrorType,\n parseUnits,\n} from './utils/unit/parseUnits.js'\nexport {\n type SerializeAccessListErrorType,\n serializeAccessList,\n} from './utils/transaction/serializeAccessList.js'\nexport {\n serializeTransaction,\n type SerializeTransactionErrorType,\n type SerializedTransactionReturnType,\n type SerializeTransactionFn,\n} from './utils/transaction/serializeTransaction.js'\nexport { type SizeErrorType, size } from './utils/data/size.js'\nexport {\n type SliceBytesErrorType,\n type SliceErrorType,\n type SliceHexErrorType,\n slice,\n sliceBytes,\n sliceHex,\n} from './utils/data/slice.js'\nexport { type StringifyErrorType, stringify } from './utils/stringify.js'\nexport {\n type TrimErrorType,\n type TrimReturnType,\n trim,\n} from './utils/data/trim.js'\nexport {\n type DomainSeparatorErrorType,\n type GetTypesForEIP712DomainErrorType,\n type SerializeTypedDataErrorType,\n type ValidateTypedDataErrorType,\n serializeTypedData,\n validateTypedData,\n domainSeparator,\n getTypesForEIP712Domain,\n} from './utils/typedData.js'\nexport {\n type CreateNonceManagerParameters,\n type NonceManager,\n type NonceManagerSource,\n createNonceManager,\n nonceManager,\n} from './utils/nonceManager.js'\nexport type {\n RpcEstimateUserOperationGasReturnType,\n RpcGetUserOperationByHashReturnType,\n RpcUserOperation,\n RpcUserOperationReceipt,\n RpcUserOperationRequest,\n} from './account-abstraction/types/rpc.js'\n", "import {\n\tAddress,\n\terc20Abi,\n\tformatUnits,\n\tHash,\n\tparseUnits,\n\tPublicClient,\n\tWalletClient,\n} from 'viem';\n\nexport class TokenSender {\n\tprivate walletClient: WalletClient;\n\tprivate publicClient: PublicClient;\n\n\tconstructor(walletClient: WalletClient, publicClient: PublicClient) {\n\t\tthis.walletClient = walletClient;\n\t\tthis.publicClient = publicClient;\n\t}\n\n\tpublic async sendToken(\n\t\ttokenAddress: Address,\n\t\tamount: string,\n\t\trecipient: Address\n\t): Promise {\n\t\tconst [tokenDecimals, tokenSymbol, tokenBalance] = await Promise.all([\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'decimals',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'symbol',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'balanceOf',\n\t\t\t\targs: [this.walletClient.account?.address!],\n\t\t\t}),\n\t\t]);\n\n\t\tconsole.log(\n\t\t\t`Current ${tokenSymbol} balance ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t);\n\n\t\tif (parseUnits(amount, tokenDecimals) > tokenBalance) {\n\t\t\tthrow new Error(\n\t\t\t\t`Insufficient balance. Required: ${amount}, available: ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t\t);\n\t\t}\n\n\t\tconst txHash = await this.walletClient.writeContract({\n\t\t\taddress: tokenAddress,\n\t\t\tabi: erc20Abi,\n\t\t\tfunctionName: 'transfer',\n\t\t\targs: [recipient, parseUnits(amount, tokenDecimals)],\n\t\t\tchain: this.walletClient.chain,\n\t\t\taccount: this.walletClient.account!,\n\t\t});\n\n\t\tconst { status } = await this.publicClient.waitForTransactionReceipt({\n\t\t\thash: txHash,\n\t\t});\n\n\t\tif (status !== 'success') {\n\t\t\tthrow new Error(`Error sending token. Hash: ${txHash}`);\n\t\t}\n\n\t\tconsole.log(`Token successfully sent. Hash: ${txHash}`);\n\n\t\treturn txHash;\n\t}\n}\n", "import { PublicClient } from 'viem';\n\ntype GasData = {\n\tgasPrice?: string;\n\tmaxFeePerGas?: string;\n\tmaxPriorityFeePerGas?: string;\n};\n\nexport async function getActualGasData(\n\tpublicClient: PublicClient\n): Promise {\n\tconst block = await publicClient.getBlock();\n\n\tconst isEIP1559 = !!block.baseFeePerGas;\n\n\tlet gasPrice = 0n;\n\tlet maxPriorityFeePerGas = 0n;\n\ttry {\n\t\tif (isEIP1559) {\n\t\t\tconst { maxFeePerGas } = await publicClient.estimateFeesPerGas();\n\t\t\tgasPrice = maxFeePerGas;\n\t\t\tmaxPriorityFeePerGas =\n\t\t\t\tawait publicClient.estimateMaxPriorityFeePerGas();\n\t\t} else {\n\t\t\tgasPrice = await publicClient.getGasPrice();\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('Error getting actual gas data:', error);\n\t\treturn {\n\t\t\tgasPrice: '0',\n\t\t\tmaxFeePerGas: '0',\n\t\t\tmaxPriorityFeePerGas: '0',\n\t\t};\n\t}\n\n\tconst gasDataLegacy = {\n\t\tgasPrice: gasPrice.toString(),\n\t};\n\n\tconst gasDataEIP1559 = {\n\t\tmaxFeePerGas: gasPrice.toString(),\n\t\tmaxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n\t};\n\n\tconst gasData: GasData = isEIP1559 ? gasDataEIP1559 : gasDataLegacy;\n\n\treturn gasData;\n}\n", "import { Deployment } from 'hardhat-deploy/types';\nimport { HardhatRuntimeEnvironment } from 'hardhat/types';\nimport { PublicClient } from 'viem';\nimport { getActualGasData } from './getActualGasData';\n\ntype HardhatDeployWrapperArgs = {\n\thre: HardhatRuntimeEnvironment;\n\targs: any[];\n\tpublicClient: PublicClient;\n\tproxy?: boolean;\n\tgasLimit?: number;\n\tlog?: boolean;\n\tlibraries?: {\n\t\t[key: string]: `0x${string}`;\n\t};\n\tskipIfAlreadyDeployed: boolean;\n};\n\nexport async function hardhatDeployWrapper(\n\tcontractName: string,\n\t{\n\t\thre,\n\t\targs,\n\t\tpublicClient,\n\t\tproxy = false,\n\t\tgasLimit,\n\t\tlog = false,\n\t\tlibraries,\n\t\tskipIfAlreadyDeployed = false,\n\t}: HardhatDeployWrapperArgs\n): Promise {\n\tlet actualDeployer;\n\n\tif (proxy) {\n\t\tconst { proxyDeployer } = await hre.getNamedAccounts();\n\t\tactualDeployer = proxyDeployer;\n\t} else {\n\t\tconst { deployer } = await hre.getNamedAccounts();\n\t\tactualDeployer = deployer;\n\t}\n\n\tconst { deploy } = hre.deployments;\n\n\tconst nonce = await publicClient.getTransactionCount({\n\t\taddress: actualDeployer as `0x${string}`,\n\t});\n\n\tconst gasData = await getActualGasData(publicClient);\n\tconst waitConfirmations = hre.network.name.startsWith('ethereum') ? 1 : 3;\n\n\tif (log) {\n\t\tconsole.log(\n\t\t\t`\\x1b[34m[hardhatDeployWrapper]\\x1b[0m\\x1b[35m[args]\\x1b[0m`,\n\t\t\t{\n\t\t\t\tfrom: actualDeployer,\n\t\t\t\targs,\n\t\t\t\tnonce,\n\t\t\t\tgasLimit: gasLimit ? gasLimit : 'auto',\n\t\t\t\tgasData,\n\t\t\t\twaitConfirmations,\n\t\t\t}\n\t\t);\n\t}\n\n\tlet deployment: Deployment;\n\ttry {\n\t\tconsole.log('Starting deployment of:', contractName);\n\t\tdeployment = await deploy(contractName, {\n\t\t\tfrom: actualDeployer,\n\t\t\targs: args,\n\t\t\tlog: true,\n\t\t\tautoMine: true,\n\t\t\tnonce,\n\t\t\twaitConfirmations,\n\t\t\t...(gasLimit ? { gasLimit } : {}),\n\t\t\t...gasData,\n\t\t\t...(libraries ? { libraries } : {}),\n\t\t\tskipIfAlreadyDeployed,\n\t\t});\n\t} catch (error) {\n\t\tconsole.error('Error deploying contract:', error);\n\t\tthrow error;\n\t}\n\n\treturn deployment;\n}\n"], - "mappings": "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", - "names": [] + "sources": ["../node_modules/viem/errors/version.ts", "../node_modules/viem/errors/base.ts", "../node_modules/viem/utils/unit/formatUnits.ts", "../node_modules/viem/constants/abis.ts", "../src/index.ts", "../src/constants/config.ts", "../src/networks/getNetworkEnvKey.ts", "../src/networks/networkTypes.ts", "../node_modules/@concero/concero-networks/output/chains.mainnet.json", "../node_modules/@concero/concero-networks/output/chains.testnet.json", "../node_modules/viem/utils/chain/defineChain.ts", "../node_modules/viem/errors/unit.ts", "../node_modules/viem/utils/unit/parseUnits.ts", "../node_modules/viem/index.ts", "../src/utils/createViemChain.ts", "../src/utils/getEnvVar.ts", "../src/utils/log.ts", "../src/utils/getTrezorDeployEnabled.ts", "../src/utils/getWallet.ts", "../src/utils/updateEnvVariable.ts", "../src/constants/deploymentVariables.ts", "../src/constants/conceroNetworks.ts", "../src/deploy/GenericDeploy.ts", "../src/tokens/TokenSender.ts", "../src/deploy/getActualGasData.ts", "../src/deploy/hardhatDeployWrapper.ts"], + "sourcesContent": ["export const version = '2.24.2'\n", "import { version } from './version.js'\n\ntype ErrorConfig = {\n getDocsUrl?: ((args: BaseErrorParameters) => string | undefined) | undefined\n version?: string | undefined\n}\n\nlet errorConfig: ErrorConfig = {\n getDocsUrl: ({\n docsBaseUrl,\n docsPath = '',\n docsSlug,\n }: BaseErrorParameters) =>\n docsPath\n ? `${docsBaseUrl ?? 'https://viem.sh'}${docsPath}${\n docsSlug ? `#${docsSlug}` : ''\n }`\n : undefined,\n version: `viem@${version}`,\n}\n\nexport function setErrorConfig(config: ErrorConfig) {\n errorConfig = config\n}\n\ntype BaseErrorParameters = {\n cause?: BaseError | Error | undefined\n details?: string | undefined\n docsBaseUrl?: string | undefined\n docsPath?: string | undefined\n docsSlug?: string | undefined\n metaMessages?: string[] | undefined\n name?: string | undefined\n}\n\nexport type BaseErrorType = BaseError & { name: 'BaseError' }\nexport class BaseError extends Error {\n details: string\n docsPath?: string | undefined\n metaMessages?: string[] | undefined\n shortMessage: string\n version: string\n\n override name = 'BaseError'\n\n constructor(shortMessage: string, args: BaseErrorParameters = {}) {\n const details = (() => {\n if (args.cause instanceof BaseError) return args.cause.details\n if (args.cause?.message) return args.cause.message\n return args.details!\n })()\n const docsPath = (() => {\n if (args.cause instanceof BaseError)\n return args.cause.docsPath || args.docsPath\n return args.docsPath\n })()\n const docsUrl = errorConfig.getDocsUrl?.({ ...args, docsPath })\n\n const message = [\n shortMessage || 'An error occurred.',\n '',\n ...(args.metaMessages ? [...args.metaMessages, ''] : []),\n ...(docsUrl ? [`Docs: ${docsUrl}`] : []),\n ...(details ? [`Details: ${details}`] : []),\n ...(errorConfig.version ? [`Version: ${errorConfig.version}`] : []),\n ].join('\\n')\n\n super(message, args.cause ? { cause: args.cause } : undefined)\n\n this.details = details\n this.docsPath = docsPath\n this.metaMessages = args.metaMessages\n this.name = args.name ?? this.name\n this.shortMessage = shortMessage\n this.version = version\n }\n\n walk(): Error\n walk(fn: (err: unknown) => boolean): Error | null\n walk(fn?: any): any {\n return walk(this, fn)\n }\n}\n\nfunction walk(\n err: unknown,\n fn?: ((err: unknown) => boolean) | undefined,\n): unknown {\n if (fn?.(err)) return err\n if (\n err &&\n typeof err === 'object' &&\n 'cause' in err &&\n err.cause !== undefined\n )\n return walk(err.cause, fn)\n return fn ? null : err\n}\n", "import type { ErrorType } from '../../errors/utils.js'\n\nexport type FormatUnitsErrorType = ErrorType\n\n/**\n * Divides a number by a given exponent of base 10 (10exponent), and formats it into a string representation of the number..\n *\n * - Docs: https://viem.sh/docs/utilities/formatUnits\n *\n * @example\n * import { formatUnits } from 'viem'\n *\n * formatUnits(420000000000n, 9)\n * // '420'\n */\nexport function formatUnits(value: bigint, decimals: number) {\n let display = value.toString()\n\n const negative = display.startsWith('-')\n if (negative) display = display.slice(1)\n\n display = display.padStart(decimals, '0')\n\n let [integer, fraction] = [\n display.slice(0, display.length - decimals),\n display.slice(display.length - decimals),\n ]\n fraction = fraction.replace(/(0+)$/, '')\n return `${negative ? '-' : ''}${integer || '0'}${\n fraction ? `.${fraction}` : ''\n }`\n}\n", "/* [Multicall3](https://github.com/mds1/multicall) */\nexport const multicall3Abi = [\n {\n inputs: [\n {\n components: [\n {\n name: 'target',\n type: 'address',\n },\n {\n name: 'allowFailure',\n type: 'bool',\n },\n {\n name: 'callData',\n type: 'bytes',\n },\n ],\n name: 'calls',\n type: 'tuple[]',\n },\n ],\n name: 'aggregate3',\n outputs: [\n {\n components: [\n {\n name: 'success',\n type: 'bool',\n },\n {\n name: 'returnData',\n type: 'bytes',\n },\n ],\n name: 'returnData',\n type: 'tuple[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n] as const\n\nconst universalResolverErrors = [\n {\n inputs: [],\n name: 'ResolverNotFound',\n type: 'error',\n },\n {\n inputs: [],\n name: 'ResolverWildcardNotSupported',\n type: 'error',\n },\n {\n inputs: [],\n name: 'ResolverNotContract',\n type: 'error',\n },\n {\n inputs: [\n {\n name: 'returnData',\n type: 'bytes',\n },\n ],\n name: 'ResolverError',\n type: 'error',\n },\n {\n inputs: [\n {\n components: [\n {\n name: 'status',\n type: 'uint16',\n },\n {\n name: 'message',\n type: 'string',\n },\n ],\n name: 'errors',\n type: 'tuple[]',\n },\n ],\n name: 'HttpError',\n type: 'error',\n },\n] as const\n\nexport const universalResolverResolveAbi = [\n ...universalResolverErrors,\n {\n name: 'resolve',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'name', type: 'bytes' },\n { name: 'data', type: 'bytes' },\n ],\n outputs: [\n { name: '', type: 'bytes' },\n { name: 'address', type: 'address' },\n ],\n },\n {\n name: 'resolve',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'name', type: 'bytes' },\n { name: 'data', type: 'bytes' },\n { name: 'gateways', type: 'string[]' },\n ],\n outputs: [\n { name: '', type: 'bytes' },\n { name: 'address', type: 'address' },\n ],\n },\n] as const\n\nexport const universalResolverReverseAbi = [\n ...universalResolverErrors,\n {\n name: 'reverse',\n type: 'function',\n stateMutability: 'view',\n inputs: [{ type: 'bytes', name: 'reverseName' }],\n outputs: [\n { type: 'string', name: 'resolvedName' },\n { type: 'address', name: 'resolvedAddress' },\n { type: 'address', name: 'reverseResolver' },\n { type: 'address', name: 'resolver' },\n ],\n },\n {\n name: 'reverse',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { type: 'bytes', name: 'reverseName' },\n { type: 'string[]', name: 'gateways' },\n ],\n outputs: [\n { type: 'string', name: 'resolvedName' },\n { type: 'address', name: 'resolvedAddress' },\n { type: 'address', name: 'reverseResolver' },\n { type: 'address', name: 'resolver' },\n ],\n },\n] as const\n\nexport const textResolverAbi = [\n {\n name: 'text',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'name', type: 'bytes32' },\n { name: 'key', type: 'string' },\n ],\n outputs: [{ name: '', type: 'string' }],\n },\n] as const\n\nexport const addressResolverAbi = [\n {\n name: 'addr',\n type: 'function',\n stateMutability: 'view',\n inputs: [{ name: 'name', type: 'bytes32' }],\n outputs: [{ name: '', type: 'address' }],\n },\n {\n name: 'addr',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'name', type: 'bytes32' },\n { name: 'coinType', type: 'uint256' },\n ],\n outputs: [{ name: '', type: 'bytes' }],\n },\n] as const\n\n// ERC-1271\n// isValidSignature(bytes32 hash, bytes signature) \u2192 bytes4 magicValue\n/** @internal */\nexport const smartAccountAbi = [\n {\n name: 'isValidSignature',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'hash', type: 'bytes32' },\n { name: 'signature', type: 'bytes' },\n ],\n outputs: [{ name: '', type: 'bytes4' }],\n },\n] as const\n\n// ERC-6492 - universal deployless signature validator contract\n// constructor(address _signer, bytes32 _hash, bytes _signature) \u2192 bytes4 returnValue\n// returnValue is either 0x1 (valid) or 0x0 (invalid)\nexport const universalSignatureValidatorAbi = [\n {\n inputs: [\n {\n name: '_signer',\n type: 'address',\n },\n {\n name: '_hash',\n type: 'bytes32',\n },\n {\n name: '_signature',\n type: 'bytes',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'constructor',\n },\n {\n inputs: [\n {\n name: '_signer',\n type: 'address',\n },\n {\n name: '_hash',\n type: 'bytes32',\n },\n {\n name: '_signature',\n type: 'bytes',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n name: 'isValidSig',\n },\n] as const\n\n/** [ERC-20 Token Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-20) */\nexport const erc20Abi = [\n {\n type: 'event',\n name: 'Approval',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'event',\n name: 'Transfer',\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'allowance',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'spender',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'approve',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'balanceOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'decimals',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint8',\n },\n ],\n },\n {\n type: 'function',\n name: 'name',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'symbol',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'totalSupply',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'transfer',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'transferFrom',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'sender',\n type: 'address',\n },\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n] as const\n\n/**\n * [bytes32-flavored ERC-20](https://docs.makerdao.com/smart-contract-modules/mkr-module#4.-gotchas-potential-source-of-user-error)\n * for tokens (ie. Maker) that use bytes32 instead of string.\n */\nexport const erc20Abi_bytes32 = [\n {\n type: 'event',\n name: 'Approval',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'event',\n name: 'Transfer',\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'allowance',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'spender',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'approve',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'balanceOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'decimals',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint8',\n },\n ],\n },\n {\n type: 'function',\n name: 'name',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'bytes32',\n },\n ],\n },\n {\n type: 'function',\n name: 'symbol',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'bytes32',\n },\n ],\n },\n {\n type: 'function',\n name: 'totalSupply',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'transfer',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'transferFrom',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'sender',\n type: 'address',\n },\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n] as const\n\n/** [ERC-721 Non-Fungible Token Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-721) */\nexport const erc721Abi = [\n {\n type: 'event',\n name: 'Approval',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: true,\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'event',\n name: 'ApprovalForAll',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'operator',\n type: 'address',\n },\n {\n indexed: false,\n name: 'approved',\n type: 'bool',\n },\n ],\n },\n {\n type: 'event',\n name: 'Transfer',\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: true,\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'approve',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'balanceOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'getApproved',\n stateMutability: 'view',\n inputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'address',\n },\n ],\n },\n {\n type: 'function',\n name: 'isApprovedForAll',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'operator',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'name',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'ownerOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n name: 'owner',\n type: 'address',\n },\n ],\n },\n {\n type: 'function',\n name: 'safeTransferFrom',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'from',\n type: 'address',\n },\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'safeTransferFrom',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'from',\n type: 'address',\n },\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'id',\n type: 'uint256',\n },\n {\n name: 'data',\n type: 'bytes',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'setApprovalForAll',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'operator',\n type: 'address',\n },\n {\n name: 'approved',\n type: 'bool',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'symbol',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'tokenByIndex',\n stateMutability: 'view',\n inputs: [\n {\n name: 'index',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'tokenByIndex',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'index',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'tokenURI',\n stateMutability: 'view',\n inputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'totalSupply',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'transferFrom',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'sender',\n type: 'address',\n },\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'tokeId',\n type: 'uint256',\n },\n ],\n outputs: [],\n },\n] as const\n\n/** [ERC-4626 Tokenized Vaults Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-4626) */\nexport const erc4626Abi = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'Approval',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'sender',\n type: 'address',\n },\n {\n indexed: true,\n name: 'receiver',\n type: 'address',\n },\n {\n indexed: false,\n name: 'assets',\n type: 'uint256',\n },\n {\n indexed: false,\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'Deposit',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'Transfer',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'sender',\n type: 'address',\n },\n {\n indexed: true,\n name: 'receiver',\n type: 'address',\n },\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: false,\n name: 'assets',\n type: 'uint256',\n },\n {\n indexed: false,\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'Withdraw',\n type: 'event',\n },\n {\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'spender',\n type: 'address',\n },\n ],\n name: 'allowance',\n outputs: [\n {\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'approve',\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'asset',\n outputs: [\n {\n name: 'assetTokenAddress',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n name: 'balanceOf',\n outputs: [\n {\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'convertToAssets',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n name: 'convertToShares',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n ],\n name: 'deposit',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'caller',\n type: 'address',\n },\n ],\n name: 'maxDeposit',\n outputs: [\n {\n name: 'maxAssets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'caller',\n type: 'address',\n },\n ],\n name: 'maxMint',\n outputs: [\n {\n name: 'maxShares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'maxRedeem',\n outputs: [\n {\n name: 'maxShares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'maxWithdraw',\n outputs: [\n {\n name: 'maxAssets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n ],\n name: 'mint',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n name: 'previewDeposit',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'previewMint',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'previewRedeem',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n name: 'previewWithdraw',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'redeem',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'totalAssets',\n outputs: [\n {\n name: 'totalManagedAssets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'totalSupply',\n outputs: [\n {\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'transfer',\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'from',\n type: 'address',\n },\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'transferFrom',\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'withdraw',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const\n", "import { config } from './constants/config';\nimport {\n\tgetNetworkEnvKey,\n\tgetNetworkKey,\n\tnetworkTypes,\n\ttype ConceroNetwork,\n\ttype NetworkType,\n} from './networks';\nimport { genericDeploy } from './deploy/GenericDeploy';\n\nimport { TokenSender } from './tokens/TokenSender';\n\nimport { hardhatDeployWrapper } from './deploy/hardhatDeployWrapper';\n\nexport {\n\tConceroNetwork,\n\tconfig,\n\tgetNetworkEnvKey,\n\tgetNetworkKey,\n\tnetworkTypes,\n\tTokenSender,\n\thardhatDeployWrapper,\n\tgenericDeploy,\n};\nexport type { NetworkType };\n", "export const config = {\n DEFAULT_BLOCK_CONFIRMATIONS: 2,\n};\n", "/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkEnvKey(networkName: string): string {\n if (!networkName) {\n throw new Error('Network name must be provided');\n }\n return camelCaseToCapsSnakeCase(networkName);\n}\n\n/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkKey(NETWORK_NAME: string): string {\n if (!NETWORK_NAME) {\n throw new Error('Network name must be provided');\n }\n return capsSnakeCaseToCamelCase(NETWORK_NAME);\n}\n\n/**\n * Converts a string from CAPS_SNAKE_CASE to camelCase\n *\n * @param snakeCaseString The string in CAPS_SNAKE_CASE format\n * @returns The string converted to camelCase format\n */\nexport function capsSnakeCaseToCamelCase(snakeCaseString: string): string {\n if (!snakeCaseString) {\n throw new Error('String must be provided');\n }\n\n return snakeCaseString\n .toLowerCase()\n .replace(/_([a-z])/g, (_, char) => char.toUpperCase());\n}\n\n/**\n * Converts a string from camelCase to CAPS_SNAKE_CASE\n *\n * @param camelCaseString The string in camelCase format\n * @returns The string converted to CAPS_SNAKE_CASE format\n */\nexport function camelCaseToCapsSnakeCase(camelCaseString: string): string {\n if (!camelCaseString) {\n throw new Error('String must be provided');\n }\n\n return camelCaseString.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toUpperCase();\n}\n\nexport function getNetworkName(networkEnvKey: string): string {\n if (!networkEnvKey) {\n throw new Error('Network name must be provided');\n }\n\n return networkEnvKey\n .toLowerCase()\n .split('_')\n .map((word, index) =>\n index === 0 ? word : word[0].toUpperCase() + word.slice(1)\n )\n .join('');\n}\n", "import { type NetworkType } from './types';\n\nexport const networkTypes: Record = {\n mainnet: 'mainnet',\n testnet: 'testnet',\n localhost: 'localhost',\n};\n", "{\n \"1\": {\n \"id\": \"1\",\n \"chainSelector\": 1,\n \"name\": \"ethereum\",\n \"rpcUrls\": [\n \"https://cloudflare-eth.com\",\n \"https://eth1.lava.build\",\n \"https://mainnet.gateway.tenderly.co\",\n \"https://eth.drpc.org\",\n \"https://gateway.tenderly.co/public/mainnet\",\n \"https://go.getblock.io/aefd01aa907c4805ba3c00a9e5b48c6b\",\n \"https://0xrpc.io/eth\",\n \"https://eth-mainnet.rpcfast.com?api_key=xbhWBI1Wkguk8SNMu1bvvLurPGLXmgwYeC4S6g2H7WdwFigZSmPWVZRxrskEQwIf\",\n \"https://rpc.eth.gateway.fm\",\n \"https://1rpc.io/eth\",\n \"https://eth-mainnet.public.blastapi.io\",\n \"https://ethereum-rpc.publicnode.com\",\n \"https://rpc.mevblocker.io/fast\",\n \"https://eth.meowrpc.com\",\n \"https://eth.api.pocket.network\",\n \"https://ethereum-public.nodies.app\",\n \"https://rpc.flashbots.net/fast\",\n \"https://ethereum-json-rpc.stakely.io\",\n \"https://eth.llamarpc.com\",\n \"https://eth.rpc.blxrbdn.com\",\n \"https://ethereum.public.blockpi.network/v1/rpc/public\",\n \"https://ethereum-mainnet.gateway.tatum.io\",\n \"https://eth.blockrazor.xyz\",\n \"https://api-ethereum-mainnet-reth.n.dwellir.com/2ccf18bf-2916-4198-8856-42172854353c\",\n \"https://eth.merkle.io\",\n \"https://eth-mainnet.nodereal.io/v1/1659dfb40aa24bbb8153a677b98064d7\",\n \"https://rpc.flashbots.net\",\n \"https://rpc.mevblocker.io/fullprivacy\",\n \"https://rpc.mevblocker.io/noreverts\",\n \"https://rpc.fullsend.to\",\n \"https://eth.api.onfinality.io/public\",\n \"https://public-eth.nownodes.io\",\n \"https://openapi.bitstack.com/v1/wNFxbiJyQsSeLrX8RRCHi7NpRxrlErZk/DjShIqLishPCTB9HiMkPHXjUM9CNM9Na/ETH/mainnet\",\n \"https://core.gashawk.io/rpc\",\n \"https://rpc.mevblocker.io\",\n \"https://ethereum.rpc.subquery.network/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Ethereum\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Etherscan\",\n \"url\": \"https://etherscan.io\",\n \"apiUrl\": \"https://api.etherscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 75,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"10\": {\n \"id\": \"10\",\n \"chainSelector\": 10,\n \"name\": \"optimism\",\n \"rpcUrls\": [\n \"https://optimism.drpc.org\",\n \"https://go.getblock.io/e8a75f8dcf614861becfbcb185be6eb4\",\n \"https://gateway.tenderly.co/public/optimism\",\n \"https://mainnet.optimism.io\",\n \"https://1rpc.io/op\",\n \"https://optimism.gateway.tenderly.co\",\n \"https://api-optimism-mainnet-archive.n.dwellir.com/2ccf18bf-2916-4198-8856-42172854353c\",\n \"https://optimism-rpc.publicnode.com\",\n \"https://optimism-public.nodies.app\",\n \"https://public-op-mainnet.fastnode.io\",\n \"https://optimism-mainnet.gateway.tatum.io\",\n \"https://optimism.api.onfinality.io/public\",\n \"https://optimism.public.blockpi.network/v1/rpc/public\",\n \"https://optimism.rpc.subquery.network/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Optimism Explorer\",\n \"url\": \"https://optimistic.etherscan.io\",\n \"apiUrl\": \"https://api-optimistic.etherscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 50,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"137\": {\n \"id\": \"137\",\n \"chainSelector\": 137,\n \"name\": \"polygon\",\n \"rpcUrls\": [\n \"https://polygon.drpc.org\",\n \"https://gateway.tenderly.co/public/polygon\",\n \"https://polygon.lava.build\",\n \"https://go.getblock.io/02667b699f05444ab2c64f9bff28f027\",\n \"https://polygon-mainnet.gateway.tatum.io\",\n \"https://polygon-rpc.com\",\n \"https://1rpc.io/matic\",\n \"https://polygon.meowrpc.com\",\n \"https://polygon-bor-rpc.publicnode.com\",\n \"https://polygon-public.nodies.app\",\n \"https://polygon.gateway.tenderly.co\",\n \"https://rpc-mainnet.matic.quiknode.pro\",\n \"https://polygon-mainnet.rpcfast.com?api_key=xbhWBI1Wkguk8SNMu1bvvLurPGLXmgwYeC4S6g2H7WdwFigZSmPWVZRxrskEQwIf\",\n \"https://polygon.rpc.subquery.network/public\",\n \"https://polygon.api.onfinality.io/public\",\n \"https://poly.api.pocket.network\"\n ],\n \"nativeCurrency\": {\n \"name\": \"POL\",\n \"decimals\": 18,\n \"symbol\": \"POL\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"PolygonScan\",\n \"url\": \"https://polygonscan.com\",\n \"apiUrl\": \"https://api.polygonscan.com/api\"\n }\n ],\n \"finalityConfirmations\": 128,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"8453\": {\n \"id\": \"8453\",\n \"chainSelector\": 8453,\n \"name\": \"base\",\n \"rpcUrls\": [\n \"https://base.drpc.org\",\n \"https://base.lava.build\",\n \"https://mainnet.base.org\",\n \"https://gateway.tenderly.co/public/base\",\n \"https://base.meowrpc.com\",\n \"https://base.gateway.tenderly.co\",\n \"https://developer-access-mainnet.base.org\",\n \"https://1rpc.io/base\",\n \"https://base-rpc.publicnode.com\",\n \"https://base-public.nodies.app\",\n \"https://base.public.blockpi.network/v1/rpc/public\",\n \"https://base-mainnet.public.blastapi.io\",\n \"https://base.api.onfinality.io/public\",\n \"https://base.rpc.blxrbdn.com\",\n \"https://base.api.pocket.network\",\n \"https://base.llamarpc.com\",\n \"https://api-base-mainnet-archive.n.dwellir.com/2ccf18bf-2916-4198-8856-42172854353c\",\n \"https://base.rpc.subquery.network/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Basescan\",\n \"url\": \"https://basescan.org\",\n \"apiUrl\": \"https://api.basescan.org/api\"\n }\n ],\n \"finalityConfirmations\": 50,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"42161\": {\n \"id\": \"42161\",\n \"chainSelector\": 42161,\n \"name\": \"arbitrum\",\n \"rpcUrls\": [\n \"https://arbitrum.drpc.org\",\n \"https://api-arbitrum-mainnet-archive.n.dwellir.com/2ccf18bf-2916-4198-8856-42172854353c\",\n \"https://arb1.lava.build\",\n \"https://1rpc.io/arb\",\n \"https://arbitrum-one-rpc.publicnode.com\",\n \"https://arbitrum-one-public.nodies.app\",\n \"https://arbitrum.gateway.tenderly.co\",\n \"https://arbitrum-one.public.blastapi.io\",\n \"https://arbitrum.api.onfinality.io/public\",\n \"https://arbitrum.meowrpc.com\",\n \"https://arbitrum.public.blockpi.network/v1/rpc/public\",\n \"https://arb1.arbitrum.io/rpc\",\n \"https://public-arb-mainnet.fastnode.io\",\n \"https://arbitrum.rpc.subquery.network/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Arbiscan\",\n \"url\": \"https://arbiscan.io\",\n \"apiUrl\": \"https://api.arbiscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 4080,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"43114\": {\n \"id\": \"43114\",\n \"chainSelector\": 43114,\n \"name\": \"avalanche\",\n \"rpcUrls\": [\n \"https://api.avax.network/ext/bc/C/rpc\",\n \"https://avalanche-mainnet.gateway.tenderly.co\",\n \"https://avalanche.drpc.org\",\n \"https://avax.api.pocket.network\",\n \"https://avalanche-c-chain-rpc.publicnode.com\",\n \"https://1rpc.io/avax/c\",\n \"https://avalanche-public.nodies.app/ext/bc/C/rpc\",\n \"https://avax.meowrpc.com\",\n \"https://avalanche.api.onfinality.io/public/ext/bc/C/rpc\",\n \"https://spectrum-01.simplystaking.xyz/avalanche-mn-rpc/ext/bc/C/rpc\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Avalanche\",\n \"decimals\": 18,\n \"symbol\": \"AVAX\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"SnowTrace\",\n \"url\": \"https://snowtrace.io\",\n \"apiUrl\": \"https://api.snowtrace.io/api\"\n }\n ],\n \"finalityConfirmations\": 1,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n }\n}", "{\n \"81\": {\n \"id\": \"81\",\n \"isTestnet\": true,\n \"chainSelector\": 81,\n \"name\": \"astarShibuya\",\n \"rpcUrls\": [\n \"https://evm.shibuya.astar.network\",\n \"https://evm.shibuya.astar.network\",\n \"https://shibuya.public.blastapi.io\",\n \"https://shibuya-rpc.dwellir.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Astar\",\n \"decimals\": 18,\n \"symbol\": \"ASTR\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Subscan\",\n \"url\": \"https://shibuya.subscan.io\",\n \"apiUrl\": \"https://shibuya.subscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 6,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"97\": {\n \"id\": \"97\",\n \"isTestnet\": true,\n \"chainSelector\": 97,\n \"name\": \"bnbTestnet\",\n \"rpcUrls\": [\n \"https://bsc-testnet.drpc.org\",\n \"https://bsc-testnet-rpc.publicnode.com\",\n \"https://data-seed-prebsc-2-s2.bnbchain.org:8545\",\n \"https://data-seed-prebsc-1-s2.bnbchain.org:8545\",\n \"https://data-seed-prebsc-2-s3.bnbchain.org:8545\",\n \"https://data-seed-prebsc-1-s1.bnbchain.org:8545\",\n \"https://data-seed-prebsc-2-s1.bnbchain.org:8545\",\n \"https://data-seed-prebsc-1-s3.bnbchain.org:8545\",\n \"https://bnb-testnet.api.onfinality.io/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"BNB\",\n \"decimals\": 18,\n \"symbol\": \"tBNB\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"BscScan\",\n \"url\": \"https://testnet.bscscan.com\",\n \"apiUrl\": \"https://api-testnet.bscscan.com/api\"\n }\n ],\n \"finalityConfirmations\": 7,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xf6BBdC1fD89E554639D7A683909338802B05F160\",\n \"relayerLib\": \"0x3a4EA7fd0CeA70a4B2Cf72c5AC966225C98eE48d\",\n \"validatorLib\": \"0xAEBaacfa9CaC6B8486Ae77843728c863c909E7d0\"\n }\n },\n \"133\": {\n \"id\": \"133\",\n \"isTestnet\": true,\n \"chainSelector\": 133,\n \"name\": \"hashkeyTestnet\",\n \"rpcUrls\": [],\n \"nativeCurrency\": {\n \"name\": \"HashKey EcoPoints\",\n \"decimals\": 18,\n \"symbol\": \"HSK\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Hashkey Explorer\",\n \"url\": \"https://testnet.hashkeyscan.io\",\n \"apiUrl\": \"https://testnet.hashkeyscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 1800,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"157\": {\n \"id\": \"157\",\n \"isTestnet\": true,\n \"chainSelector\": 157,\n \"name\": \"shibariumPuppynet\",\n \"rpcUrls\": [\n \"https://puppynet.shibrpc.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Bone\",\n \"decimals\": 18,\n \"symbol\": \"BONE\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Puppyscan\",\n \"url\": \"https://puppyscan.shib.io\",\n \"apiUrl\": \"https://puppyscan.shib.io/api\"\n }\n ],\n \"finalityConfirmations\": 60,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xea73Bc856EdD980912Fb8FE4CFC7bba52D980F6A\",\n \"relayerLib\": \"0x9900a9E38E8695eE9109962b9f4671cF977c265a\",\n \"validatorLib\": \"0x39f311124745064935cB196AeE2a950cbbC11336\"\n }\n },\n \"195\": {\n \"id\": \"195\",\n \"isTestnet\": true,\n \"chainSelector\": 195,\n \"name\": \"xlayerSepolia\",\n \"rpcUrls\": [],\n \"nativeCurrency\": {\n \"name\": \"OKB\",\n \"decimals\": 18,\n \"symbol\": \"OKB\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"X Layer Explorer\",\n \"url\": \"https://testnet-explorer.xlayer.tech\",\n \"apiUrl\": \"https://testnet-explorer.xlayer.tech/api\"\n }\n ],\n \"finalityConfirmations\": 3600,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"296\": {\n \"id\": \"296\",\n \"isTestnet\": true,\n \"chainSelector\": 296,\n \"name\": \"hederaTestnet\",\n \"rpcUrls\": [\n \"https://testnet.hashio.io/api\",\n \"https://296.rpc.thirdweb.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"HBAR\",\n \"decimals\": 18,\n \"symbol\": \"HBAR\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"300\": {\n \"id\": \"300\",\n \"isTestnet\": true,\n \"chainSelector\": 300,\n \"name\": \"zksyncSepolia\",\n \"rpcUrls\": [\n \"https://zksync-sepolia.drpc.org\",\n \"https://rpc.ankr.com/zksync_era_sepolia\",\n \"https://sepolia.era.zksync.dev\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 1200,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xBd5EC2962802123f6D8d0092dC485C98e23D1394\",\n \"relayerLib\": \"0x06942a1E6A73069a58306d9E154051b85b32D071\",\n \"validatorLib\": \"0xe277f7afA46291d4c729a184D51D78ae598d54b1\"\n }\n },\n \"338\": {\n \"id\": \"338\",\n \"isTestnet\": true,\n \"chainSelector\": 338,\n \"name\": \"cronosTestnet\",\n \"rpcUrls\": [\n \"https://cro-testnet.gateway.tatum.io\",\n \"https://cronos-testnet.drpc.org\",\n \"https://evm-t3.cronos.org\"\n ],\n \"nativeCurrency\": {\n \"name\": \"CRO\",\n \"decimals\": 18,\n \"symbol\": \"tCRO\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Cronos Explorer\",\n \"url\": \"https://testnet.cronoscan.com\",\n \"apiUrl\": \"https://api-testnet.cronoscan.com/api\"\n }\n ],\n \"finalityConfirmations\": 2,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"545\": {\n \"id\": \"545\",\n \"isTestnet\": true,\n \"chainSelector\": 545,\n \"name\": \"flowTestnet\",\n \"rpcUrls\": [\n \"https://testnet.evm.nodes.onflow.org\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Flow\",\n \"decimals\": 18,\n \"symbol\": \"FLOW\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xf6BBdC1fD89E554639D7A683909338802B05F160\",\n \"relayerLib\": \"0x3a4EA7fd0CeA70a4B2Cf72c5AC966225C98eE48d\",\n \"validatorLib\": \"0xAEBaacfa9CaC6B8486Ae77843728c863c909E7d0\"\n }\n },\n \"919\": {\n \"id\": \"919\",\n \"isTestnet\": true,\n \"chainSelector\": 919,\n \"name\": \"modeTestnet\",\n \"rpcUrls\": [\n \"https://mode-testnet.drpc.org\",\n \"https://sepolia.mode.network\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Mode Explorer\",\n \"url\": \"https://sepolia.explorer.mode.network\",\n \"apiUrl\": \"https://sepolia.explorer.mode.network/api\"\n }\n ],\n \"finalityConfirmations\": 1110,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"943\": {\n \"id\": \"943\",\n \"isTestnet\": true,\n \"chainSelector\": 943,\n \"name\": \"pulsechainTestnet\",\n \"rpcUrls\": [\n \"https://pulsechain-testnet-rpc.publicnode.com\",\n \"https://rpc-testnet-pulsechain.g4mm4.io\",\n \"https://rpc.v4.testnet.pulsechain.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"V4 Pulse\",\n \"decimals\": 18,\n \"symbol\": \"v4PLS\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xea73Bc856EdD980912Fb8FE4CFC7bba52D980F6A\",\n \"relayerLib\": \"0x9900a9E38E8695eE9109962b9f4671cF977c265a\",\n \"validatorLib\": \"0x39f311124745064935cB196AeE2a950cbbC11336\"\n }\n },\n \"1001\": {\n \"id\": \"1001\",\n \"isTestnet\": true,\n \"chainSelector\": 1001,\n \"name\": \"kaiaKairos\",\n \"rpcUrls\": [\n \"https://klaytn-baobab.drpc.org\",\n \"https://kaia-kairos.blockpi.network/v1/rpc/public\",\n \"https://rpc.ankr.com/kaia_testnet\",\n \"https://public-en-kairos.node.kaia.io\"\n ],\n \"nativeCurrency\": {\n \"name\": \"KAIA\",\n \"decimals\": 18,\n \"symbol\": \"KAIA\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1112\": {\n \"id\": \"1112\",\n \"isTestnet\": true,\n \"chainSelector\": 1112,\n \"name\": \"wemixTestnet\",\n \"rpcUrls\": [\n \"https://wemix-testnet.drpc.org\",\n \"https://api.test.wemix.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"WEMIX\",\n \"decimals\": 18,\n \"symbol\": \"tWEMIX\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 2,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1114\": {\n \"id\": \"1114\",\n \"isTestnet\": true,\n \"chainSelector\": 1114,\n \"name\": \"coreTestnet\",\n \"rpcUrls\": [\n \"https://rpc.test2.btcs.network\"\n ],\n \"nativeCurrency\": {\n \"name\": \"tCORE2\",\n \"decimals\": 18,\n \"symbol\": \"tCORE2\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"CoreScan\",\n \"url\": \"https://scan.test.btcs.network\",\n \"apiUrl\": \"https://scan.test.btcs.network/api\"\n }\n ],\n \"finalityConfirmations\": 7,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5\",\n \"relayerLib\": \"0x54B8d67AA64CF8A59F604cA6e98c643C64920b03\",\n \"validatorLib\": \"0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a\"\n }\n },\n \"1123\": {\n \"id\": \"1123\",\n \"isTestnet\": true,\n \"finalityTagEnabled\": true,\n \"chainSelector\": 1123,\n \"name\": \"b2Testnet\",\n \"rpcUrls\": [\n \"https://rpc.ankr.com/b2_testnet\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Bitcoin\",\n \"decimals\": 18,\n \"symbol\": \"BTC\"\n },\n \"blockExplorers\": [],\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1174\": {\n \"id\": \"1174\",\n \"isTestnet\": true,\n \"chainSelector\": 1174,\n \"name\": \"litheumTestnet\",\n \"rpcUrls\": [\n \"https://testnet.litheum.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"LTH\",\n \"decimals\": 18,\n \"symbol\": \"LTH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1270\": {\n \"id\": \"1270\",\n \"isTestnet\": true,\n \"chainSelector\": 1270,\n \"name\": \"irysTestnet\",\n \"rpcUrls\": [\n \"https://testnet-rpc.irys.xyz/v1/execution-rpc\",\n \"testnet-rpc.irys.xyz\"\n ],\n \"nativeCurrency\": {\n \"name\": \"mIRYS\",\n \"decimals\": 18,\n \"symbol\": \"mIRYS\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 6,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1301\": {\n \"id\": \"1301\",\n \"isTestnet\": true,\n \"chainSelector\": 1301,\n \"name\": \"unichainSepolia\",\n \"rpcUrls\": [\n \"https://unichain-sepolia.drpc.org\",\n \"https://unichain-sepolia-rpc.publicnode.com\",\n \"https://unichain-sepolia.api.onfinality.io/public\",\n \"https://sepolia.unichain.org\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Unichain Explorer\",\n \"url\": \"https://sepolia-explorer.unichain.network\",\n \"apiUrl\": \"https://sepolia-explorer.unichain.network/api\"\n }\n ],\n \"finalityConfirmations\": 1440,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5\",\n \"relayerLib\": \"0x54B8d67AA64CF8A59F604cA6e98c643C64920b03\",\n \"validatorLib\": \"0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a\"\n }\n },\n \"1328\": {\n \"id\": \"1328\",\n \"isTestnet\": true,\n \"chainSelector\": 1328,\n \"name\": \"seiTestnet\",\n \"rpcUrls\": [\n \"https://sei-testnet.drpc.org\",\n \"https://sei-testnet-public.nodies.app\",\n \"https://evm-rpc-testnet.sei-apis.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Sei\",\n \"decimals\": 18,\n \"symbol\": \"SEI\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Sei Explorer\",\n \"url\": \"https://seitrace.com\",\n \"apiUrl\": \"https://seitrace.com/api\"\n }\n ],\n \"finalityConfirmations\": 3,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x122947C8c3529DCa006aeE65832D3C3fED6bf3C0\",\n \"relayerLib\": \"0xe965dEBDfa6365CFb9e643ccdCBADE424a2eC381\",\n \"validatorLib\": \"0xB708D151D18e5aB3506934B39375D00EE1e0C882\"\n }\n },\n \"1946\": {\n \"id\": \"1946\",\n \"isTestnet\": true,\n \"chainSelector\": 1946,\n \"name\": \"soneiumMinato\",\n \"rpcUrls\": [\n \"https://soneium-minato.drpc.org\",\n \"https://rpc.minato.soneium.org\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Soneium Explorer\",\n \"url\": \"https://minato-explorer.soneium.com\",\n \"apiUrl\": \"https://minato-explorer.soneium.com/api\"\n }\n ],\n \"finalityConfirmations\": 810,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"2021\": {\n \"id\": \"2021\",\n \"isTestnet\": true,\n \"chainSelector\": 2021,\n \"name\": \"roninSaigon\",\n \"rpcUrls\": [\n \"https://saigon-testnet.roninchain.com/rpc\",\n \"https://saigon-testnet.roninchain.com/rpc\"\n ],\n \"nativeCurrency\": {\n \"name\": \"RON\",\n \"decimals\": 18,\n \"symbol\": \"RON\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Ronin Explorer\",\n \"url\": \"https://saigon-explorer.roninchain.com\",\n \"apiUrl\": \"https://saigon-explorer.roninchain.com/api\"\n }\n ],\n \"finalityConfirmations\": 4,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xea73Bc856EdD980912Fb8FE4CFC7bba52D980F6A\",\n \"relayerLib\": \"0x9900a9E38E8695eE9109962b9f4671cF977c265a\",\n \"validatorLib\": \"0x39f311124745064935cB196AeE2a950cbbC11336\"\n }\n },\n \"2221\": {\n \"id\": \"2221\",\n \"isTestnet\": true,\n \"chainSelector\": 2221,\n \"name\": \"kavaTestnet\",\n \"rpcUrls\": [\n \"https://kava-testnet.drpc.org\",\n \"https://evm.testnet.kava.io\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Kava\",\n \"decimals\": 18,\n \"symbol\": \"KAVA\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"2522\": {\n \"id\": \"2522\",\n \"isTestnet\": true,\n \"chainSelector\": 2522,\n \"name\": \"fraxtalHolesky\",\n \"rpcUrls\": [],\n \"nativeCurrency\": {\n \"name\": \"FRAX\",\n \"decimals\": 18,\n \"symbol\": \"FRAX\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 900,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"2810\": {\n \"id\": \"2810\",\n \"isTestnet\": true,\n \"chainSelector\": 2810,\n \"name\": \"morphHolesky\",\n \"rpcUrls\": [],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"3636\": {\n \"id\": \"3636\",\n \"isTestnet\": true,\n \"chainSelector\": 3636,\n \"name\": \"botanixTestnet\",\n \"rpcUrls\": [\n \"https://rpc.ankr.com/botanix_testnet\",\n \"https://node.botanixlabs.dev\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Botanix\",\n \"decimals\": 18,\n \"symbol\": \"BTC\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Botanix Explorer\",\n \"url\": \"https://testnet-explorer.botanixlabs.xyz\",\n \"apiUrl\": \"https://testnet-explorer.botanixlabs.xyz/api\"\n }\n ],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"4801\": {\n \"id\": \"4801\",\n \"isTestnet\": true,\n \"chainSelector\": 4801,\n \"name\": \"worldchainTestnet\",\n \"rpcUrls\": [\n \"https://worldchain-sepolia.drpc.org\",\n \"https://worldchain-sepolia.g.alchemy.com/public\",\n \"https://worldchain-sepolia.gateway.tenderly.co\",\n \"https://4801.rpc.thirdweb.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 1200,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xea73Bc856EdD980912Fb8FE4CFC7bba52D980F6A\",\n \"relayerLib\": \"0x9900a9E38E8695eE9109962b9f4671cF977c265a\",\n \"validatorLib\": \"0x39f311124745064935cB196AeE2a950cbbC11336\"\n }\n },\n \"5003\": {\n \"id\": \"5003\",\n \"isTestnet\": true,\n \"chainSelector\": 5003,\n \"name\": \"mantleSepolia\",\n \"rpcUrls\": [\n \"https://mantle-sepolia.drpc.org\",\n \"https://rpc.sepolia.mantle.xyz\"\n ],\n \"nativeCurrency\": {\n \"name\": \"MNT\",\n \"decimals\": 18,\n \"symbol\": \"MNT\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Mantle Explorer\",\n \"url\": \"https://explorer.sepolia.mantle.xyz\",\n \"apiUrl\": \"https://explorer.sepolia.mantle.xyz/api\"\n }\n ],\n \"finalityConfirmations\": 840,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"5124\": {\n \"id\": \"5124\",\n \"isTestnet\": true,\n \"chainSelector\": 5124,\n \"name\": \"seismicDevnet\",\n \"rpcUrls\": [\n \"https://node-2.seismicdev.net/rpc\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"5611\": {\n \"id\": \"5611\",\n \"isTestnet\": true,\n \"chainSelector\": 5611,\n \"name\": \"opbnbTestnet\",\n \"rpcUrls\": [\n \"https://opbnb-testnet.drpc.org\",\n \"https://opbnb-testnet-rpc.publicnode.com\",\n \"https://opbnb-testnet-rpc.bnbchain.org\",\n \"https://opbnb-testnet.nodereal.io/v1/e9a36765eb8a40b9bd12e680a1fd2bc5\",\n \"https://opbnb-testnet.nodereal.io/v1/64a9df0874fb4a93b9d0a3849de012d3\"\n ],\n \"nativeCurrency\": {\n \"name\": \"tBNB\",\n \"decimals\": 18,\n \"symbol\": \"tBNB\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"6342\": {\n \"id\": \"6342\",\n \"isTestnet\": true,\n \"chainSelector\": 6342,\n \"name\": \"megaethTestnet\",\n \"rpcUrls\": [],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"MegaEth Explorer\",\n \"url\": \"https://explorer-testnet.megaeth.io\",\n \"apiUrl\": \"https://explorer-testnet.megaeth.io/api\"\n }\n ],\n \"finalityConfirmations\": 900,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"8408\": {\n \"id\": \"8408\",\n \"isTestnet\": true,\n \"chainSelector\": 8408,\n \"name\": \"zenchainTestnet\",\n \"rpcUrls\": [\n \"https://zenchain-testnet.api.onfinality.io/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ZTC\",\n \"decimals\": 18,\n \"symbol\": \"ZTC\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"10143\": {\n \"id\": \"10143\",\n \"isTestnet\": true,\n \"chainSelector\": 10143,\n \"name\": \"monadTestnet\",\n \"rpcUrls\": [\n \"https://monad-testnet.drpc.org\",\n \"https://rpc.ankr.com/monad_testnet\",\n \"https://testnet-rpc.monad.xyz\",\n \"https://rpc-testnet.monadinfra.com\",\n \"https://monad-testnet.api.onfinality.io/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Testnet MON Token\",\n \"decimals\": 18,\n \"symbol\": \"MON\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Monad Explorer\",\n \"url\": \"https://explorer.testnet.monad.xyz\",\n \"apiUrl\": \"https://explorer.testnet.monad.xyz/api\"\n }\n ],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x3E2Ee768D9fADdd3673a69ED4d0D1d9147FA1054\",\n \"relayerLib\": \"0x9900a9E38E8695eE9109962b9f4671cF977c265a\",\n \"validatorLib\": \"0x39f311124745064935cB196AeE2a950cbbC11336\"\n }\n },\n \"10200\": {\n \"id\": \"10200\",\n \"isTestnet\": true,\n \"chainSelector\": 10200,\n \"name\": \"gnosisChiado\",\n \"rpcUrls\": [\n \"https://gnosis-chiado.drpc.org\",\n \"https://rpc.chiadochain.net\",\n \"https://gnosis-chiado-rpc.publicnode.com\",\n \"https://rpc.chiado.gnosis.gateway.fm\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Gnosis\",\n \"decimals\": 18,\n \"symbol\": \"xDAI\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Blockscout\",\n \"url\": \"https://gnosis-chiado.blockscout.com\",\n \"apiUrl\": \"https://gnosis-chiado.blockscout.com/api\"\n }\n ],\n \"finalityConfirmations\": 35,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5\",\n \"relayerLib\": \"0x54B8d67AA64CF8A59F604cA6e98c643C64920b03\",\n \"validatorLib\": \"0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a\"\n }\n },\n \"11124\": {\n \"id\": \"11124\",\n \"isTestnet\": true,\n \"finalityTagEnabled\": true,\n \"chainSelector\": 11124,\n \"name\": \"abstractSepolia\",\n \"rpcUrls\": [\n \"https://abstract-sepolia.drpc.org\",\n \"https://api.testnet.abs.xyz\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"18880\": {\n \"id\": \"18880\",\n \"isTestnet\": true,\n \"chainSelector\": 18880,\n \"name\": \"expchainTestnet\",\n \"rpcUrls\": [\n \"https://rpc1-testnet.expchain.ai\",\n \"https://expchain.polyhedra.network/rpc1-testnet\",\n \"https://expchain.polyhedra.network/rpc0-testnet\",\n \"https://expchain.polyhedra.network/rpc0-testnet\",\n \"https://expchain.polyhedra.network/rpc1-testnet\"\n ],\n \"nativeCurrency\": {\n \"name\": \"tZKJ\",\n \"decimals\": 18,\n \"symbol\": \"tZKJ\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"23295\": {\n \"id\": \"23295\",\n \"isTestnet\": true,\n \"chainSelector\": 23295,\n \"name\": \"oasissapphireTestnet\",\n \"rpcUrls\": [\n \"https://testnet.sapphire.oasis.io\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Sapphire Test Rose\",\n \"decimals\": 18,\n \"symbol\": \"TEST\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xcc9D0438ac3b90fB8291f4f3C1c420E215f36585\",\n \"relayerLib\": \"0x8510C780097cA53aeF8e3527a5107C4629b21f0C\",\n \"validatorLib\": \"0xb31EED4695De3eCE4381a40fA638d9a63904882b\"\n }\n },\n \"33111\": {\n \"id\": \"33111\",\n \"isTestnet\": true,\n \"finalityTagEnabled\": true,\n \"chainSelector\": 33111,\n \"name\": \"apechainCurtis\",\n \"rpcUrls\": [\n \"https://apechain-curtis.drpc.org\",\n \"https://curtis.rpc.caldera.xyz/http\",\n \"https://rpc.curtis.apechain.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"APE\",\n \"decimals\": 18,\n \"symbol\": \"APE\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Apechain Explorer\",\n \"url\": \"https://curtis-explorer.apechain.io\",\n \"apiUrl\": \"https://curtis-explorer.apechain.io/api\"\n }\n ],\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"37111\": {\n \"id\": \"37111\",\n \"isTestnet\": true,\n \"chainSelector\": 37111,\n \"name\": \"lensSepolia\",\n \"rpcUrls\": [\n \"https://rpc.testnet.lens.dev\",\n \"https://lens-testnet.drpc.org\"\n ],\n \"nativeCurrency\": {\n \"name\": \"GRASS\",\n \"decimals\": 18,\n \"symbol\": \"GRASS\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"43113\": {\n \"id\": \"43113\",\n \"isTestnet\": true,\n \"finalityTagEnabled\": true,\n \"chainSelector\": 43113,\n \"name\": \"avalancheFuji\",\n \"rpcUrls\": [\n \"https://api.avax-test.network/ext/bc/C/rpc\",\n \"https://avalanche-fuji.drpc.org\",\n \"https://avalanche-fuji-c-chain-rpc.publicnode.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Avalanche Fuji\",\n \"decimals\": 18,\n \"symbol\": \"AVAX\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Snowtrace\",\n \"url\": \"https://testnet.snowtrace.io\",\n \"apiUrl\": \"https://api-testnet.snowtrace.io/api\"\n }\n ],\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xe965dEBDfa6365CFb9e643ccdCBADE424a2eC381\",\n \"relayerLib\": \"0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a\",\n \"validatorLib\": \"0x246892c38a2314c30E56490ADf1bcf3470DCAE6A\"\n }\n },\n \"44787\": {\n \"id\": \"44787\",\n \"isTestnet\": true,\n \"chainSelector\": 44787,\n \"name\": \"celoAlfajores\",\n \"rpcUrls\": [],\n \"nativeCurrency\": {\n \"name\": \"CELO\",\n \"decimals\": 18,\n \"symbol\": \"A-CELO\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Celoscan\",\n \"url\": \"https://alfajores.celoscan.io\",\n \"apiUrl\": \"https://api-alfajores.celoscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"48899\": {\n \"id\": \"48899\",\n \"isTestnet\": true,\n \"chainSelector\": 48899,\n \"name\": \"zircuitTestnet\",\n \"rpcUrls\": [\n \"https://testnet.zircuit.com\",\n \"https://zircuit1-testnet.p2pify.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Zircuit Explorer\",\n \"url\": \"https://explorer.zircuit.com\",\n \"apiUrl\": \"https://explorer.zircuit.com/api\"\n }\n ],\n \"finalityConfirmations\": 630,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"57054\": {\n \"id\": \"57054\",\n \"isTestnet\": true,\n \"chainSelector\": 57054,\n \"name\": \"sonicBlaze\",\n \"rpcUrls\": [\n \"https://sonic-testnet.drpc.org\",\n \"https://sonic-blaze-rpc.publicnode.com\",\n \"https://rpc.blaze.soniclabs.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"S\",\n \"decimals\": 18,\n \"symbol\": \"S\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Sonic Explorer\",\n \"url\": \"https://explorer-testnet.sonic.guru\",\n \"apiUrl\": \"https://explorer-testnet.sonic.guru/api\"\n }\n ],\n \"finalityConfirmations\": 10,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xAEBaacfa9CaC6B8486Ae77843728c863c909E7d0\",\n \"relayerLib\": \"0x13187bb1d2f100F84770a848A1374bf745Ea4cF6\",\n \"validatorLib\": \"0x90D7e742746Abf405036aA21981C835F3E842DA4\"\n }\n },\n \"59141\": {\n \"id\": \"59141\",\n \"isTestnet\": true,\n \"chainSelector\": 59141,\n \"name\": \"lineaSepolia\",\n \"rpcUrls\": [\n \"https://linea-sepolia.drpc.org\",\n \"https://linea-sepolia-rpc.publicnode.com\",\n \"https://rpc.sepolia.linea.build\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Linea Explorer\",\n \"url\": \"https://sepolia.lineascan.build\",\n \"apiUrl\": \"https://api-sepolia.lineascan.build/api\"\n }\n ],\n \"finalityConfirmations\": 600,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"59902\": {\n \"id\": \"59902\",\n \"isTestnet\": true,\n \"chainSelector\": 59902,\n \"name\": \"metisSepolia\",\n \"rpcUrls\": [\n \"https://metis-sepolia.gateway.tenderly.co\",\n \"https://metis-sepolia-rpc.publicnode.com\",\n \"https://sepolia.metisdevops.link\"\n ],\n \"nativeCurrency\": {\n \"name\": \"tMETIS\",\n \"decimals\": 18,\n \"symbol\": \"tMETIS\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 360,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"80002\": {\n \"id\": \"80002\",\n \"isTestnet\": true,\n \"chainSelector\": 80002,\n \"name\": \"polygonAmoy\",\n \"rpcUrls\": [\n \"https://rpc-amoy.polygon.technology\",\n \"https://polygon-amoy.gateway.tenderly.co\",\n \"https://polygon-amoy.drpc.org\",\n \"https://polygon-amoy-public.nodies.app\",\n \"https://polygon-amoy-bor-rpc.publicnode.com\",\n \"https://polygon-amoy.api.onfinality.io/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"POL\",\n \"decimals\": 18,\n \"symbol\": \"POL\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"PolygonScan\",\n \"url\": \"https://amoy.polygonscan.com\",\n \"apiUrl\": \"https://api-amoy.polygonscan.com/api\"\n }\n ],\n \"finalityConfirmations\": 500,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x6FF322BC8da39bC87A056d4052aa763f7BDeE836\",\n \"relayerLib\": \"0x81365cc081dF5fdF6cbD47a34fF4acBcA2B35F0d\",\n \"validatorLib\": \"0x99542DdB261186F818974e579e4aBF3BFb44819e\"\n }\n },\n \"80069\": {\n \"id\": \"80069\",\n \"isTestnet\": true,\n \"chainSelector\": 80069,\n \"name\": \"berachainBepolia\",\n \"rpcUrls\": [\n \"https://bepolia.rpc.berachain.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"BERA Token\",\n \"decimals\": 18,\n \"symbol\": \"BERA\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 1,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5\",\n \"relayerLib\": \"0x54B8d67AA64CF8A59F604cA6e98c643C64920b03\",\n \"validatorLib\": \"0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a\"\n }\n },\n \"84532\": {\n \"id\": \"84532\",\n \"isTestnet\": true,\n \"finalityTagEnabled\": true,\n \"chainSelector\": 84532,\n \"name\": \"baseSepolia\",\n \"rpcUrls\": [\n \"https://base-sepolia.gateway.tenderly.co\",\n \"https://sepolia.base.org\",\n \"https://base-sepolia.drpc.org\",\n \"https://base-sepolia-rpc.publicnode.com\",\n \"https://base-sepolia-public.nodies.app\",\n \"https://base-sepolia.api.onfinality.io/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"BaseScan\",\n \"url\": \"https://sepolia.basescan.org\",\n \"apiUrl\": \"https://api-sepolia.basescan.org/api\"\n },\n {\n \"name\": \"Blockscout\",\n \"url\": \"https://base-sepolia.blockscout.com\",\n \"apiUrl\": \"https://base-sepolia.blockscout.com/api\"\n }\n ],\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xE3d861a49bc5903499fB5Bb411B83d980422c31B\",\n \"relayerLib\": \"0x429E6875Ba6A13cc015e9Eba594e8b42936244C4\",\n \"validatorLib\": \"0x67BE79Df5A37d2a89384D32C2A066d2a7354eD2B\"\n }\n },\n \"167009\": {\n \"id\": \"167009\",\n \"isTestnet\": true,\n \"chainSelector\": 167009,\n \"name\": \"taikoTestnet\",\n \"rpcUrls\": [],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 20,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"200810\": {\n \"id\": \"200810\",\n \"isTestnet\": true,\n \"chainSelector\": 200810,\n \"name\": \"bitlayerTestnet\",\n \"rpcUrls\": [\n \"https://rpc.ankr.com/bitlayer_testnet\",\n \"https://testnet-rpc.bitlayer.org\",\n \"https://testnet-rpc.bitlayer-rpc.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Bitcoin\",\n \"decimals\": 18,\n \"symbol\": \"BTC\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Bitlayer Explorer\",\n \"url\": \"https://testnet-explorer.bitlayer.org\",\n \"apiUrl\": \"https://testnet-explorer.bitlayer.org/api\"\n }\n ],\n \"finalityConfirmations\": 21,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"344100\": {\n \"id\": \"3441006\",\n \"isTestnet\": true,\n \"chainSelector\": 344100,\n \"name\": \"mantapacificSepolia\",\n \"rpcUrls\": [\n \"https://manta-pacific-sepolia.drpc.org\",\n \"https://manta-sepolia.rpc.caldera.xyz/http\",\n \"https://pacific-rpc.sepolia-testnet.manta.network/http\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"421614\": {\n \"id\": \"421614\",\n \"isTestnet\": true,\n \"finalityTagEnabled\": true,\n \"chainSelector\": 421614,\n \"name\": \"arbitrumSepolia\",\n \"rpcUrls\": [\n \"https://arbitrum-sepolia.gateway.tenderly.co\",\n \"https://arbitrum-sepolia.drpc.org\",\n \"https://arbitrum-sepolia-testnet.api.pocket.network\",\n \"https://arbitrum-sepolia-rpc.publicnode.com\",\n \"https://sepolia-rollup.arbitrum.io/rpc\",\n \"https://arbitrum-sepolia.api.onfinality.io/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Arbiscan\",\n \"url\": \"https://sepolia.arbiscan.io\",\n \"apiUrl\": \"https://api-sepolia.arbiscan.io/api\"\n }\n ],\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x6c99cC0FCC985fF175787BD2565AfD15781C99d0\",\n \"relayerLib\": \"0x622b5FeBf5Fd44Ab2E7636398F2621FC4E956304\",\n \"validatorLib\": \"0x7F445E3DE6B46cD36887B9f136DBe13298517C1F\"\n }\n },\n \"534351\": {\n \"id\": \"534351\",\n \"isTestnet\": true,\n \"chainSelector\": 534351,\n \"name\": \"scrollSepolia\",\n \"rpcUrls\": [\n \"https://scroll-sepolia.drpc.org\",\n \"https://scroll-sepolia-rpc.publicnode.com\",\n \"https://sepolia-rpc.scroll.io\",\n \"https://scroll-sepolia-public.nodies.app\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Scrollscan\",\n \"url\": \"https://sepolia.scrollscan.com\",\n \"apiUrl\": \"https://api-sepolia.scrollscan.com/api\"\n }\n ],\n \"finalityConfirmations\": 720,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5\",\n \"relayerLib\": \"0x54B8d67AA64CF8A59F604cA6e98c643C64920b03\",\n \"validatorLib\": \"0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a\"\n }\n },\n \"688689\": {\n \"id\": \"688689\",\n \"isTestnet\": true,\n \"chainSelector\": 688689,\n \"name\": \"pharosTestnet\",\n \"rpcUrls\": [\n \"https://atlantic.dplabs-internal.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"PHRS\",\n \"decimals\": 18,\n \"symbol\": \"PHRS\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"763373\": {\n \"id\": \"763373\",\n \"isTestnet\": true,\n \"chainSelector\": 763373,\n \"name\": \"inkSepolia\",\n \"rpcUrls\": [\n \"https://rpc-gel-sepolia.inkonchain.com\",\n \"https://ink-sepolia.drpc.org\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Ink Explorer\",\n \"url\": \"https://sepolia.inkscan.io\",\n \"apiUrl\": \"https://sepolia.inkscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 3600,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"808813\": {\n \"id\": \"808813\",\n \"isTestnet\": true,\n \"chainSelector\": 808813,\n \"name\": \"bobSepolia\",\n \"rpcUrls\": [\n \"https://bob-testnet.drpc.org\",\n \"https://bob-sepolia.rpc.gobob.xyz\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 3600,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1000101\": {\n \"id\": \"1000101\",\n \"isTestnet\": true,\n \"chainSelector\": 1000101,\n \"name\": \"xomarketTestnet\",\n \"rpcUrls\": [\n \"https://dev-testnet-rpc.xo.market\",\n \"https://testnet-rpc-1.xo.market\"\n ],\n \"nativeCurrency\": {\n \"name\": \"XO\",\n \"decimals\": 18,\n \"symbol\": \"XO\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 2,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1234200\": {\n \"id\": \"123420001114\",\n \"isTestnet\": true,\n \"chainSelector\": 1234200,\n \"name\": \"campv2Testnet\",\n \"rpcUrls\": [\n \"https://rpc.basecamp.t.raas.gelato.cloud\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Camp\",\n \"decimals\": 18,\n \"symbol\": \"CAMP\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1313161\": {\n \"id\": \"1313161555\",\n \"isTestnet\": true,\n \"finalityTagEnabled\": true,\n \"chainSelector\": 1313161,\n \"name\": \"auroraTestnet\",\n \"rpcUrls\": [\n \"https://aurora-testnet.drpc.org\",\n \"https://testnet.aurora.dev\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1685877\": {\n \"id\": \"168587773\",\n \"isTestnet\": true,\n \"chainSelector\": 1685877,\n \"name\": \"blastSepolia\",\n \"rpcUrls\": [\n \"https://blast-sepolia.drpc.org\",\n \"https://blast-testnet-public.nodies.app\",\n \"https://sepolia.blast.io\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Blastscan\",\n \"url\": \"https://sepolia.blastscan.io\",\n \"apiUrl\": \"https://api-sepolia.blastscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 600,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"11155111\": {\n \"id\": \"11155111\",\n \"isTestnet\": true,\n \"finalityTagEnabled\": true,\n \"chainSelector\": 11155111,\n \"name\": \"ethereumSepolia\",\n \"rpcUrls\": [\n \"https://gateway.tenderly.co/public/sepolia\",\n \"https://sepolia.gateway.tenderly.co\",\n \"https://sepolia.drpc.org\",\n \"https://1rpc.io/sepolia\",\n \"https://ethereum-sepolia-public.nodies.app\",\n \"https://0xrpc.io/sep\",\n \"https://ethereum-sepolia-rpc.publicnode.com\",\n \"https://eth-sepolia.api.onfinality.io/public\",\n \"https://eth-sepolia-testnet.api.pocket.network\",\n \"https://ethereum-sepolia.rpc.subquery.network/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Etherscan\",\n \"url\": \"https://sepolia.etherscan.io\",\n \"apiUrl\": \"https://api-sepolia.etherscan.io/api\"\n }\n ],\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x3E0aAA63fFb51169B9aE9b7Dc3616b43362124D6\",\n \"relayerLib\": \"0x8338A0B9c83C0d7E67C267432DF4C8b7cA98e11C\",\n \"validatorLib\": \"0x1A808aa4F1E874763E114AB4fD170460D84A8D54\"\n }\n },\n \"11155420\": {\n \"id\": \"11155420\",\n \"isTestnet\": true,\n \"chainSelector\": 11155420,\n \"name\": \"optimismSepolia\",\n \"rpcUrls\": [\n \"https://sepolia.optimism.io\",\n \"https://optimism-sepolia.gateway.tenderly.co\",\n \"https://optimism-sepolia.drpc.org\",\n \"https://optimism-sepolia-public.nodies.app\",\n \"https://optimism-sepolia.api.onfinality.io/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Optimism Explorer\",\n \"url\": \"https://sepolia-optimism.etherscan.io\",\n \"apiUrl\": \"https://api-sepolia-optimism.etherscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 600,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x25c2037546Bf5B525DfAfe85A662DB519c07bDdB\",\n \"relayerLib\": \"0x6E0b96885Ab0A58e82f2D1ce4df29AF6F5a40089\",\n \"validatorLib\": \"0x0C12fAdDb045bB71C256E36662D56b4b22f1bD58\"\n }\n },\n \"11155931\": {\n \"id\": \"11155931\",\n \"isTestnet\": true,\n \"chainSelector\": 11155931,\n \"name\": \"riseTestnet\",\n \"rpcUrls\": [\n \"https://testnet.riselabs.xyz\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n }\n}", "import type { Chain, ChainFormatters } from '../../types/chain.js'\nimport type { Assign, Prettify } from '../../types/utils.js'\n\nexport function defineChain<\n formatters extends ChainFormatters,\n const chain extends Chain,\n>(chain: chain): Prettify, chain>> {\n return {\n formatters: undefined,\n fees: undefined,\n serializers: undefined,\n ...chain,\n } as Assign, chain>\n}\n", "import { BaseError } from './base.js'\n\nexport type InvalidDecimalNumberErrorType = InvalidDecimalNumberError & {\n name: 'InvalidDecimalNumberError'\n}\nexport class InvalidDecimalNumberError extends BaseError {\n constructor({ value }: { value: string }) {\n super(`Number \\`${value}\\` is not a valid decimal number.`, {\n name: 'InvalidDecimalNumberError',\n })\n }\n}\n", "import { InvalidDecimalNumberError } from '../../errors/unit.js'\nimport type { ErrorType } from '../../errors/utils.js'\n\nexport type ParseUnitsErrorType = ErrorType\n\n/**\n * Multiplies a string representation of a number by a given exponent of base 10 (10exponent).\n *\n * - Docs: https://viem.sh/docs/utilities/parseUnits\n *\n * @example\n * import { parseUnits } from 'viem'\n *\n * parseUnits('420', 9)\n * // 420000000000n\n */\nexport function parseUnits(value: string, decimals: number) {\n if (!/^(-?)([0-9]*)\\.?([0-9]*)$/.test(value))\n throw new InvalidDecimalNumberError({ value })\n\n let [integer, fraction = '0'] = value.split('.')\n\n const negative = integer.startsWith('-')\n if (negative) integer = integer.slice(1)\n\n // trim trailing zeros.\n fraction = fraction.replace(/(0+)$/, '')\n\n // round off if the fraction is larger than the number of decimals.\n if (decimals === 0) {\n if (Math.round(Number(`.${fraction}`)) === 1)\n integer = `${BigInt(integer) + 1n}`\n fraction = ''\n } else if (fraction.length > decimals) {\n const [left, unit, right] = [\n fraction.slice(0, decimals - 1),\n fraction.slice(decimals - 1, decimals),\n fraction.slice(decimals),\n ]\n\n const rounded = Math.round(Number(`${unit}.${right}`))\n if (rounded > 9)\n fraction = `${BigInt(left) + BigInt(1)}0`.padStart(left.length + 1, '0')\n else fraction = `${left}${rounded}`\n\n if (fraction.length > decimals) {\n fraction = fraction.slice(1)\n integer = `${BigInt(integer) + 1n}`\n }\n\n fraction = fraction.slice(0, decimals)\n } else {\n fraction = fraction.padEnd(decimals, '0')\n }\n\n return BigInt(`${negative ? '-' : ''}${integer}${fraction}`)\n}\n", "// biome-ignore lint/performance/noBarrelFile: entrypoint module\nexport {\n type Abi,\n type AbiFunction,\n type AbiParameter,\n type AbiEvent,\n type AbiStateMutability,\n type AbiParameterKind,\n type AbiParameterToPrimitiveType,\n type Address,\n type Narrow,\n type ParseAbi,\n type ParseAbiItem,\n type ParseAbiParameter,\n type ParseAbiParameters,\n type ResolvedRegister,\n type TypedData,\n type TypedDataDomain,\n type TypedDataParameter,\n CircularReferenceError,\n InvalidAbiParameterError,\n InvalidAbiParametersError,\n InvalidAbiItemError,\n InvalidAbiTypeParameterError,\n InvalidFunctionModifierError,\n InvalidModifierError,\n InvalidParameterError,\n InvalidParenthesisError,\n InvalidSignatureError,\n InvalidStructSignatureError,\n SolidityProtectedKeywordError,\n UnknownTypeError,\n UnknownSignatureError,\n parseAbi,\n parseAbiItem,\n parseAbiParameter,\n parseAbiParameters,\n} from 'abitype'\nexport type {\n BlockOverrides,\n Rpc as RpcBlockOverrides,\n} from 'ox/BlockOverrides'\n\nexport {\n getContract,\n type GetContractErrorType,\n type GetContractParameters,\n type GetContractReturnType,\n} from './actions/getContract.js'\nexport {\n type GetContractEventsErrorType,\n type GetContractEventsParameters,\n type GetContractEventsReturnType,\n} from './actions/public/getContractEvents.js'\nexport {\n type GetEip712DomainErrorType,\n type GetEip712DomainParameters,\n type GetEip712DomainReturnType,\n} from './actions/public/getEip712Domain.js'\nexport {\n type AddChainErrorType,\n type AddChainParameters,\n} from './actions/wallet/addChain.js'\nexport {\n type CallErrorType,\n type CallParameters,\n type CallReturnType,\n} from './actions/public/call.js'\nexport type {\n CreateAccessListParameters,\n CreateAccessListReturnType,\n CreateAccessListErrorType,\n} from './actions/public/createAccessList.js'\nexport type {\n CreateBlockFilterErrorType,\n CreateBlockFilterReturnType,\n} from './actions/public/createBlockFilter.js'\nexport type {\n CreateContractEventFilterErrorType,\n CreateContractEventFilterParameters,\n CreateContractEventFilterReturnType,\n} from './actions/public/createContractEventFilter.js'\nexport type {\n CreateEventFilterErrorType,\n CreateEventFilterParameters,\n CreateEventFilterReturnType,\n} from './actions/public/createEventFilter.js'\nexport type {\n CreatePendingTransactionFilterErrorType,\n CreatePendingTransactionFilterReturnType,\n} from './actions/public/createPendingTransactionFilter.js'\nexport type {\n DeployContractErrorType,\n DeployContractParameters,\n DeployContractReturnType,\n} from './actions/wallet/deployContract.js'\nexport type {\n DropTransactionErrorType,\n DropTransactionParameters,\n} from './actions/test/dropTransaction.js'\nexport type {\n DumpStateErrorType,\n DumpStateReturnType,\n} from './actions/test/dumpState.js'\nexport type {\n GetAutomineErrorType,\n GetAutomineReturnType,\n} from './actions/test/getAutomine.js'\nexport type {\n EstimateContractGasErrorType,\n EstimateContractGasParameters,\n EstimateContractGasReturnType,\n} from './actions/public/estimateContractGas.js'\nexport type {\n EstimateGasErrorType,\n EstimateGasParameters,\n EstimateGasReturnType,\n} from './actions/public/estimateGas.js'\nexport type {\n EstimateFeesPerGasErrorType,\n EstimateFeesPerGasParameters,\n EstimateFeesPerGasReturnType,\n} from './actions/public/estimateFeesPerGas.js'\nexport type {\n EstimateMaxPriorityFeePerGasErrorType,\n EstimateMaxPriorityFeePerGasParameters,\n EstimateMaxPriorityFeePerGasReturnType,\n} from './actions/public/estimateMaxPriorityFeePerGas.js'\nexport type {\n GetAddressesErrorType,\n GetAddressesReturnType,\n} from './actions/wallet/getAddresses.js'\nexport type {\n GetBalanceErrorType,\n GetBalanceParameters,\n GetBalanceReturnType,\n} from './actions/public/getBalance.js'\nexport type {\n GetBlobBaseFeeErrorType,\n GetBlobBaseFeeReturnType,\n} from './actions/public/getBlobBaseFee.js'\nexport type {\n GetBlockNumberErrorType,\n GetBlockNumberParameters,\n GetBlockNumberReturnType,\n} from './actions/public/getBlockNumber.js'\nexport type {\n GetBlockErrorType,\n GetBlockParameters,\n GetBlockReturnType,\n} from './actions/public/getBlock.js'\nexport type {\n GetBlockTransactionCountErrorType,\n GetBlockTransactionCountParameters,\n GetBlockTransactionCountReturnType,\n} from './actions/public/getBlockTransactionCount.js'\nexport type {\n /** @deprecated Use `GetCodeErrorType` instead */\n GetCodeErrorType as GetBytecodeErrorType,\n /** @deprecated Use `GetCodeParameters` instead */\n GetCodeParameters as GetBytecodeParameters,\n /** @deprecated Use `GetCodeReturnType` instead */\n GetCodeReturnType as GetBytecodeReturnType,\n GetCodeErrorType,\n GetCodeParameters,\n GetCodeReturnType,\n} from './actions/public/getCode.js'\nexport type {\n GetChainIdErrorType,\n GetChainIdReturnType,\n} from './actions/public/getChainId.js'\nexport type {\n GetEnsAddressErrorType,\n GetEnsAddressParameters,\n GetEnsAddressReturnType,\n} from './actions/ens/getEnsAddress.js'\nexport type {\n GetEnsAvatarErrorType,\n GetEnsAvatarParameters,\n GetEnsAvatarReturnType,\n} from './actions/ens/getEnsAvatar.js'\nexport type {\n GetEnsNameErrorType,\n GetEnsNameParameters,\n GetEnsNameReturnType,\n} from './actions/ens/getEnsName.js'\nexport type {\n GetEnsResolverErrorType,\n GetEnsResolverParameters,\n GetEnsResolverReturnType,\n} from './actions/ens/getEnsResolver.js'\nexport type {\n GetEnsTextErrorType,\n GetEnsTextParameters,\n GetEnsTextReturnType,\n} from './actions/ens/getEnsText.js'\nexport type {\n GetFeeHistoryErrorType,\n GetFeeHistoryParameters,\n GetFeeHistoryReturnType,\n} from './actions/public/getFeeHistory.js'\nexport type {\n GetFilterChangesErrorType,\n GetFilterChangesParameters,\n GetFilterChangesReturnType,\n} from './actions/public/getFilterChanges.js'\nexport type {\n GetFilterLogsErrorType,\n GetFilterLogsParameters,\n GetFilterLogsReturnType,\n} from './actions/public/getFilterLogs.js'\nexport type {\n GetGasPriceErrorType,\n GetGasPriceReturnType,\n} from './actions/public/getGasPrice.js'\nexport type {\n GetLogsErrorType,\n GetLogsParameters,\n GetLogsReturnType,\n} from './actions/public/getLogs.js'\nexport type {\n GetPermissionsErrorType,\n GetPermissionsReturnType,\n} from './actions/wallet/getPermissions.js'\nexport type {\n GetProofErrorType,\n GetProofParameters,\n GetProofReturnType,\n} from './actions/public/getProof.js'\nexport type {\n GetStorageAtErrorType,\n GetStorageAtParameters,\n GetStorageAtReturnType,\n} from './actions/public/getStorageAt.js'\nexport type {\n GetTransactionConfirmationsErrorType,\n GetTransactionConfirmationsParameters,\n GetTransactionConfirmationsReturnType,\n} from './actions/public/getTransactionConfirmations.js'\nexport type {\n GetTransactionCountErrorType,\n GetTransactionCountParameters,\n GetTransactionCountReturnType,\n} from './actions/public/getTransactionCount.js'\nexport type {\n GetTransactionErrorType,\n GetTransactionParameters,\n GetTransactionReturnType,\n} from './actions/public/getTransaction.js'\nexport type {\n GetTransactionReceiptErrorType,\n GetTransactionReceiptParameters,\n GetTransactionReceiptReturnType,\n} from './actions/public/getTransactionReceipt.js'\nexport type {\n ImpersonateAccountErrorType,\n ImpersonateAccountParameters,\n} from './actions/test/impersonateAccount.js'\nexport type {\n IncreaseTimeErrorType,\n IncreaseTimeParameters,\n} from './actions/test/increaseTime.js'\nexport type {\n LoadStateErrorType,\n LoadStateParameters,\n LoadStateReturnType,\n} from './actions/test/loadState.js'\nexport type { MineErrorType, MineParameters } from './actions/test/mine.js'\nexport type {\n MulticallErrorType,\n MulticallParameters,\n MulticallReturnType,\n} from './actions/public/multicall.js'\nexport type { SnapshotErrorType } from './actions/test/snapshot.js'\nexport type {\n SimulateBlocksParameters,\n SimulateBlocksReturnType,\n SimulateBlocksErrorType,\n} from './actions/public/simulateBlocks.js'\nexport type {\n SimulateCallsParameters,\n SimulateCallsReturnType,\n SimulateCallsErrorType,\n} from './actions/public/simulateCalls.js'\nexport type {\n GetMutabilityAwareValue,\n SimulateContractParameters,\n SimulateContractReturnType,\n SimulateContractErrorType,\n} from './actions/public/simulateContract.js'\nexport type {\n OnBlock,\n OnBlockParameter,\n WatchBlocksErrorType,\n WatchBlocksParameters,\n WatchBlocksReturnType,\n} from './actions/public/watchBlocks.js'\nexport type {\n OnBlockNumberFn,\n OnBlockNumberParameter,\n WatchBlockNumberErrorType,\n WatchBlockNumberParameters,\n WatchBlockNumberReturnType,\n} from './actions/public/watchBlockNumber.js'\nexport type {\n WatchEventOnLogsFn,\n WatchEventOnLogsParameter,\n WatchEventErrorType,\n WatchEventParameters,\n WatchEventReturnType,\n} from './actions/public/watchEvent.js'\nexport type {\n OnTransactionsFn,\n OnTransactionsParameter,\n WatchPendingTransactionsErrorType,\n WatchPendingTransactionsParameters,\n WatchPendingTransactionsReturnType,\n} from './actions/public/watchPendingTransactions.js'\nexport type {\n ReadContractErrorType,\n ReadContractParameters,\n ReadContractReturnType,\n} from './actions/public/readContract.js'\nexport type {\n ReplacementReason,\n ReplacementReturnType,\n WaitForTransactionReceiptErrorType,\n WaitForTransactionReceiptParameters,\n WaitForTransactionReceiptReturnType,\n} from './actions/public/waitForTransactionReceipt.js'\nexport type {\n RequestAddressesErrorType,\n RequestAddressesReturnType,\n} from './actions/wallet/requestAddresses.js'\nexport type {\n RequestPermissionsErrorType,\n RequestPermissionsReturnType,\n RequestPermissionsParameters,\n} from './actions/wallet/requestPermissions.js'\nexport type {\n GetTxpoolContentErrorType,\n GetTxpoolContentReturnType,\n} from './actions/test/getTxpoolContent.js'\nexport type {\n GetTxpoolStatusErrorType,\n GetTxpoolStatusReturnType,\n} from './actions/test/getTxpoolStatus.js'\nexport type {\n InspectTxpoolErrorType,\n InspectTxpoolReturnType,\n} from './actions/test/inspectTxpool.js'\nexport type { RemoveBlockTimestampIntervalErrorType } from './actions/test/removeBlockTimestampInterval.js'\nexport type { ResetErrorType, ResetParameters } from './actions/test/reset.js'\nexport type {\n RevertErrorType,\n RevertParameters,\n} from './actions/test/revert.js'\nexport type {\n SendRawTransactionErrorType,\n SendRawTransactionParameters,\n SendRawTransactionReturnType,\n} from './actions/wallet/sendRawTransaction.js'\nexport type {\n SendTransactionErrorType,\n SendTransactionParameters,\n SendTransactionRequest,\n SendTransactionReturnType,\n} from './actions/wallet/sendTransaction.js'\nexport type {\n SignTransactionErrorType,\n SignTransactionParameters,\n SignTransactionReturnType,\n} from './actions/wallet/signTransaction.js'\nexport type {\n PrepareTransactionRequestErrorType,\n PrepareTransactionRequestParameters,\n PrepareTransactionRequestParameterType,\n PrepareTransactionRequestRequest,\n PrepareTransactionRequestReturnType,\n} from './actions/wallet/prepareTransactionRequest.js'\nexport type {\n SendUnsignedTransactionErrorType,\n SendUnsignedTransactionParameters,\n SendUnsignedTransactionReturnType,\n} from './actions/test/sendUnsignedTransaction.js'\nexport type { SetAutomineErrorType } from './actions/test/setAutomine.js'\nexport type {\n SetBalanceErrorType,\n SetBalanceParameters,\n} from './actions/test/setBalance.js'\nexport type {\n SetBlockGasLimitErrorType,\n SetBlockGasLimitParameters,\n} from './actions/test/setBlockGasLimit.js'\nexport type {\n SetBlockTimestampIntervalErrorType,\n SetBlockTimestampIntervalParameters,\n} from './actions/test/setBlockTimestampInterval.js'\nexport type {\n SetCodeErrorType,\n SetCodeParameters,\n} from './actions/test/setCode.js'\nexport type {\n SetCoinbaseErrorType,\n SetCoinbaseParameters,\n} from './actions/test/setCoinbase.js'\nexport type {\n SetIntervalMiningErrorType,\n SetIntervalMiningParameters,\n} from './actions/test/setIntervalMining.js'\nexport type { SetLoggingEnabledErrorType } from './actions/test/setLoggingEnabled.js'\nexport type {\n SetMinGasPriceErrorType,\n SetMinGasPriceParameters,\n} from './actions/test/setMinGasPrice.js'\nexport type {\n SetNextBlockBaseFeePerGasErrorType,\n SetNextBlockBaseFeePerGasParameters,\n} from './actions/test/setNextBlockBaseFeePerGas.js'\nexport type {\n SetNextBlockTimestampErrorType,\n SetNextBlockTimestampParameters,\n} from './actions/test/setNextBlockTimestamp.js'\nexport type {\n SetNonceErrorType,\n SetNonceParameters,\n} from './actions/test/setNonce.js'\nexport type { SetRpcUrlErrorType } from './actions/test/setRpcUrl.js'\nexport type {\n SetStorageAtErrorType,\n SetStorageAtParameters,\n} from './actions/test/setStorageAt.js'\nexport type {\n SignMessageErrorType,\n SignMessageParameters,\n SignMessageReturnType,\n} from './actions/wallet/signMessage.js'\nexport type {\n SignTypedDataErrorType,\n SignTypedDataParameters,\n SignTypedDataReturnType,\n} from './actions/wallet/signTypedData.js'\nexport type {\n StopImpersonatingAccountErrorType,\n StopImpersonatingAccountParameters,\n} from './actions/test/stopImpersonatingAccount.js'\nexport type {\n SwitchChainErrorType,\n SwitchChainParameters,\n} from './actions/wallet/switchChain.js'\nexport type {\n UninstallFilterErrorType,\n UninstallFilterParameters,\n UninstallFilterReturnType,\n} from './actions/public/uninstallFilter.js'\nexport type {\n WatchAssetErrorType,\n WatchAssetParameters,\n WatchAssetReturnType,\n} from './actions/wallet/watchAsset.js'\nexport type {\n VerifyHashErrorType as VerifyHashActionErrorType,\n VerifyHashParameters as VerifyHashActionParameters,\n VerifyHashReturnType as VerifyHashActionReturnType,\n} from './actions/public/verifyHash.js'\nexport type {\n VerifyTypedDataErrorType as VerifyTypedDataActionErrorType,\n VerifyTypedDataParameters as VerifyTypedDataActionParameters,\n VerifyTypedDataReturnType as VerifyTypedDataActionReturnType,\n} from './actions/public/verifyTypedData.js'\nexport type {\n VerifyMessageErrorType as VerifyMessageActionErrorType,\n VerifyMessageParameters as VerifyMessageActionParameters,\n VerifyMessageReturnType as VerifyMessageActionReturnType,\n} from './actions/public/verifyMessage.js'\nexport type {\n WatchContractEventOnLogsFn,\n WatchContractEventOnLogsParameter,\n WatchContractEventErrorType,\n WatchContractEventParameters,\n WatchContractEventReturnType,\n} from './actions/public/watchContractEvent.js'\nexport type {\n WriteContractErrorType,\n WriteContractParameters,\n WriteContractReturnType,\n} from './actions/wallet/writeContract.js'\nexport type { Call, Calls } from './types/calls.js'\nexport type {\n Chain,\n ChainConfig,\n ChainContract,\n ChainEstimateFeesPerGasFn,\n ChainFees,\n ChainFeesFnParameters,\n ChainFormatter,\n ChainEstimateFeesPerGasFnParameters,\n ChainMaxPriorityFeePerGasFn,\n DeriveChain,\n GetChainParameter,\n ChainFormatters,\n ChainSerializers,\n ExtractChainFormatterExclude,\n ExtractChainFormatterParameters,\n ExtractChainFormatterReturnType,\n} from './types/chain.js'\nexport type { GetTransactionRequestKzgParameter, Kzg } from './types/kzg.js'\nexport {\n type Client,\n type ClientConfig,\n type CreateClientErrorType,\n type MulticallBatchOptions,\n createClient,\n rpcSchema,\n} from './clients/createClient.js'\nexport {\n type CustomTransport,\n type CustomTransportConfig,\n type CustomTransportErrorType,\n custom,\n} from './clients/transports/custom.js'\nexport {\n type FallbackTransport,\n type FallbackTransportConfig,\n type FallbackTransportErrorType,\n fallback,\n shouldThrow,\n} from './clients/transports/fallback.js'\nexport {\n type HttpTransport,\n type HttpTransportConfig,\n type HttpTransportErrorType,\n http,\n} from './clients/transports/http.js'\nexport {\n type PublicClient,\n type PublicClientConfig,\n type CreatePublicClientErrorType,\n createPublicClient,\n} from './clients/createPublicClient.js'\nexport {\n type TestClient,\n type TestClientConfig,\n type CreateTestClientErrorType,\n createTestClient,\n} from './clients/createTestClient.js'\nexport {\n type PublicActions,\n publicActions,\n} from './clients/decorators/public.js'\nexport {\n type TestActions,\n testActions,\n} from './clients/decorators/test.js'\nexport {\n type WalletActions,\n walletActions,\n} from './clients/decorators/wallet.js'\nexport {\n type Transport,\n type TransportConfig,\n type CreateTransportErrorType,\n createTransport,\n} from './clients/transports/createTransport.js'\nexport {\n type WalletClient,\n type WalletClientConfig,\n type CreateWalletClientErrorType,\n createWalletClient,\n} from './clients/createWalletClient.js'\nexport {\n type WebSocketTransport,\n type WebSocketTransportConfig,\n type WebSocketTransportErrorType,\n webSocket,\n} from './clients/transports/webSocket.js'\nexport {\n multicall3Abi,\n erc20Abi,\n erc20Abi_bytes32,\n erc721Abi,\n erc4626Abi,\n universalSignatureValidatorAbi,\n} from './constants/abis.js'\nexport { ethAddress, zeroAddress } from './constants/address.js'\nexport {\n deploylessCallViaBytecodeBytecode,\n deploylessCallViaFactoryBytecode,\n universalSignatureValidatorByteCode,\n} from './constants/contracts.js'\nexport { etherUnits, gweiUnits, weiUnits } from './constants/unit.js'\nexport {\n maxInt8,\n maxInt16,\n maxInt24,\n maxInt32,\n maxInt40,\n maxInt48,\n maxInt56,\n maxInt64,\n maxInt72,\n maxInt80,\n maxInt88,\n maxInt96,\n maxInt104,\n maxInt112,\n maxInt120,\n maxInt128,\n maxInt136,\n maxInt144,\n maxInt152,\n maxInt160,\n maxInt168,\n maxInt176,\n maxInt184,\n maxInt192,\n maxInt200,\n maxInt208,\n maxInt216,\n maxInt224,\n maxInt232,\n maxInt240,\n maxInt248,\n maxInt256,\n maxUint8,\n maxUint16,\n maxUint24,\n maxUint32,\n maxUint40,\n maxUint48,\n maxUint56,\n maxUint64,\n maxUint72,\n maxUint80,\n maxUint88,\n maxUint96,\n maxUint104,\n maxUint112,\n maxUint120,\n maxUint128,\n maxUint136,\n maxUint144,\n maxUint152,\n maxUint160,\n maxUint168,\n maxUint176,\n maxUint184,\n maxUint192,\n maxUint200,\n maxUint208,\n maxUint216,\n maxUint224,\n maxUint232,\n maxUint240,\n maxUint248,\n maxUint256,\n minInt8,\n minInt16,\n minInt24,\n minInt32,\n minInt40,\n minInt48,\n minInt56,\n minInt64,\n minInt72,\n minInt80,\n minInt88,\n minInt96,\n minInt104,\n minInt112,\n minInt120,\n minInt128,\n minInt136,\n minInt144,\n minInt152,\n minInt160,\n minInt168,\n minInt176,\n minInt184,\n minInt192,\n minInt200,\n minInt208,\n minInt216,\n minInt224,\n minInt232,\n minInt240,\n minInt248,\n minInt256,\n} from './constants/number.js'\nexport { zeroHash } from './constants/bytes.js'\nexport { presignMessagePrefix } from './constants/strings.js'\nexport {\n AbiConstructorNotFoundError,\n type AbiConstructorNotFoundErrorType,\n AbiConstructorParamsNotFoundError,\n type AbiConstructorParamsNotFoundErrorType,\n AbiDecodingDataSizeInvalidError,\n type AbiDecodingDataSizeInvalidErrorType,\n AbiDecodingDataSizeTooSmallError,\n type AbiDecodingDataSizeTooSmallErrorType,\n AbiDecodingZeroDataError,\n type AbiDecodingZeroDataErrorType,\n AbiEncodingArrayLengthMismatchError,\n type AbiEncodingArrayLengthMismatchErrorType,\n AbiEncodingLengthMismatchError,\n type AbiEncodingLengthMismatchErrorType,\n AbiEncodingBytesSizeMismatchError,\n type AbiEncodingBytesSizeMismatchErrorType,\n AbiErrorInputsNotFoundError,\n type AbiErrorInputsNotFoundErrorType,\n AbiErrorNotFoundError,\n type AbiErrorNotFoundErrorType,\n AbiErrorSignatureNotFoundError,\n type AbiErrorSignatureNotFoundErrorType,\n AbiEventNotFoundError,\n type AbiEventNotFoundErrorType,\n AbiEventSignatureEmptyTopicsError,\n type AbiEventSignatureEmptyTopicsErrorType,\n AbiEventSignatureNotFoundError,\n type AbiEventSignatureNotFoundErrorType,\n AbiFunctionNotFoundError,\n type AbiFunctionNotFoundErrorType,\n AbiFunctionOutputsNotFoundError,\n type AbiFunctionOutputsNotFoundErrorType,\n AbiFunctionSignatureNotFoundError,\n type AbiFunctionSignatureNotFoundErrorType,\n BytesSizeMismatchError,\n type BytesSizeMismatchErrorType,\n DecodeLogDataMismatch,\n type DecodeLogDataMismatchErrorType,\n DecodeLogTopicsMismatch,\n type DecodeLogTopicsMismatchErrorType,\n InvalidAbiDecodingTypeError,\n type InvalidAbiDecodingTypeErrorType,\n InvalidAbiEncodingTypeError,\n type InvalidAbiEncodingTypeErrorType,\n InvalidArrayError,\n type InvalidArrayErrorType,\n InvalidDefinitionTypeError,\n type InvalidDefinitionTypeErrorType,\n UnsupportedPackedAbiType,\n type UnsupportedPackedAbiTypeErrorType,\n} from './errors/abi.js'\nexport { BaseError, type BaseErrorType, setErrorConfig } from './errors/base.js'\nexport {\n BlockNotFoundError,\n type BlockNotFoundErrorType,\n} from './errors/block.js'\nexport {\n CallExecutionError,\n type CallExecutionErrorType,\n ContractFunctionExecutionError,\n type ContractFunctionExecutionErrorType,\n ContractFunctionRevertedError,\n type ContractFunctionRevertedErrorType,\n ContractFunctionZeroDataError,\n type ContractFunctionZeroDataErrorType,\n RawContractError,\n type RawContractErrorType,\n CounterfactualDeploymentFailedError,\n type CounterfactualDeploymentFailedErrorType,\n} from './errors/contract.js'\nexport {\n BaseFeeScalarError,\n type BaseFeeScalarErrorType,\n Eip1559FeesNotSupportedError,\n type Eip1559FeesNotSupportedErrorType,\n MaxFeePerGasTooLowError,\n type MaxFeePerGasTooLowErrorType,\n} from './errors/fee.js'\nexport {\n ChainDisconnectedError,\n type ChainDisconnectedErrorType,\n InternalRpcError,\n type InternalRpcErrorType,\n InvalidInputRpcError,\n type InvalidInputRpcErrorType,\n InvalidParamsRpcError,\n type InvalidParamsRpcErrorType,\n InvalidRequestRpcError,\n type InvalidRequestRpcErrorType,\n JsonRpcVersionUnsupportedError,\n type JsonRpcVersionUnsupportedErrorType,\n LimitExceededRpcError,\n type LimitExceededRpcErrorType,\n MethodNotFoundRpcError,\n type MethodNotFoundRpcErrorType,\n MethodNotSupportedRpcError,\n type MethodNotSupportedRpcErrorType,\n ParseRpcError,\n type ParseRpcErrorType,\n ProviderDisconnectedError,\n type ProviderDisconnectedErrorType,\n ProviderRpcError,\n type ProviderRpcErrorCode,\n type ProviderRpcErrorType,\n ResourceNotFoundRpcError,\n type ResourceNotFoundRpcErrorType,\n ResourceUnavailableRpcError,\n type ResourceUnavailableRpcErrorType,\n RpcError,\n type RpcErrorType,\n type RpcErrorCode,\n SwitchChainError,\n TransactionRejectedRpcError,\n type TransactionRejectedRpcErrorType,\n UnauthorizedProviderError,\n type UnauthorizedProviderErrorType,\n UnknownRpcError,\n type UnknownRpcErrorType,\n UnsupportedProviderMethodError,\n type UnsupportedProviderMethodErrorType,\n UserRejectedRequestError,\n type UserRejectedRequestErrorType,\n} from './errors/rpc.js'\nexport {\n ChainDoesNotSupportContract,\n type ChainDoesNotSupportContractErrorType,\n ChainMismatchError,\n type ChainMismatchErrorType,\n ChainNotFoundError,\n type ChainNotFoundErrorType,\n ClientChainNotConfiguredError,\n type ClientChainNotConfiguredErrorType,\n InvalidChainIdError,\n type InvalidChainIdErrorType,\n} from './errors/chain.js'\nexport {\n InvalidBytesBooleanError,\n type InvalidBytesBooleanErrorType,\n IntegerOutOfRangeError,\n type IntegerOutOfRangeErrorType,\n InvalidHexBooleanError,\n type InvalidHexBooleanErrorType,\n InvalidHexValueError,\n type InvalidHexValueErrorType,\n SizeOverflowError,\n type SizeOverflowErrorType,\n} from './errors/encoding.js'\nexport {\n type EnsAvatarInvalidMetadataError,\n EnsAvatarUriResolutionError,\n type EnsAvatarInvalidMetadataErrorType,\n EnsAvatarInvalidNftUriError,\n type EnsAvatarInvalidNftUriErrorType,\n EnsAvatarUnsupportedNamespaceError,\n type EnsAvatarUnsupportedNamespaceErrorType,\n type EnsAvatarUriResolutionErrorType,\n} from './errors/ens.js'\nexport {\n type InvalidDecimalNumberErrorType,\n InvalidDecimalNumberError,\n} from './errors/unit.js'\nexport {\n EstimateGasExecutionError,\n type EstimateGasExecutionErrorType,\n} from './errors/estimateGas.js'\nexport {\n ExecutionRevertedError,\n type ExecutionRevertedErrorType,\n FeeCapTooHighError,\n type FeeCapTooHighErrorType,\n FeeCapTooLowError,\n type FeeCapTooLowErrorType,\n InsufficientFundsError,\n type InsufficientFundsErrorType,\n IntrinsicGasTooHighError,\n type IntrinsicGasTooHighErrorType,\n IntrinsicGasTooLowError,\n type IntrinsicGasTooLowErrorType,\n NonceMaxValueError,\n type NonceMaxValueErrorType,\n NonceTooHighError,\n type NonceTooHighErrorType,\n NonceTooLowError,\n type NonceTooLowErrorType,\n TipAboveFeeCapError,\n type TipAboveFeeCapErrorType,\n TransactionTypeNotSupportedError,\n type TransactionTypeNotSupportedErrorType,\n UnknownNodeError,\n type UnknownNodeErrorType,\n} from './errors/node.js'\nexport {\n FilterTypeNotSupportedError,\n type FilterTypeNotSupportedErrorType,\n} from './errors/log.js'\nexport {\n HttpRequestError,\n type HttpRequestErrorType,\n RpcRequestError,\n type RpcRequestErrorType,\n TimeoutError,\n type TimeoutErrorType,\n SocketClosedError,\n type SocketClosedErrorType,\n WebSocketRequestError,\n type WebSocketRequestErrorType,\n} from './errors/request.js'\nexport {\n InvalidAddressError,\n type InvalidAddressErrorType,\n} from './errors/address.js'\nexport {\n FeeConflictError,\n type FeeConflictErrorType,\n InvalidLegacyVError,\n type InvalidLegacyVErrorType,\n InvalidSerializableTransactionError,\n type InvalidSerializableTransactionErrorType,\n InvalidSerializedTransactionError,\n type InvalidSerializedTransactionErrorType,\n InvalidSerializedTransactionTypeError,\n type InvalidSerializedTransactionTypeErrorType,\n InvalidStorageKeySizeError,\n type InvalidStorageKeySizeErrorType,\n TransactionExecutionError,\n type TransactionExecutionErrorType,\n TransactionNotFoundError,\n type TransactionNotFoundErrorType,\n TransactionReceiptNotFoundError,\n type TransactionReceiptNotFoundErrorType,\n WaitForTransactionReceiptTimeoutError,\n type WaitForTransactionReceiptTimeoutErrorType,\n} from './errors/transaction.js'\nexport {\n SizeExceedsPaddingSizeError,\n type SizeExceedsPaddingSizeErrorType,\n SliceOffsetOutOfBoundsError,\n type SliceOffsetOutOfBoundsErrorType,\n} from './errors/data.js'\nexport {\n UrlRequiredError,\n type UrlRequiredErrorType,\n} from './errors/transport.js'\nexport {\n AccountStateConflictError,\n type AccountStateConflictErrorType,\n StateAssignmentConflictError,\n type StateAssignmentConflictErrorType,\n} from './errors/stateOverride.js'\nexport {\n InvalidDomainError,\n type InvalidDomainErrorType,\n InvalidPrimaryTypeError,\n type InvalidPrimaryTypeErrorType,\n InvalidStructTypeError,\n type InvalidStructTypeErrorType,\n} from './errors/typedData.js'\nexport type {\n AbiEventParameterToPrimitiveType,\n AbiEventParametersToPrimitiveTypes,\n AbiEventTopicToPrimitiveType,\n AbiItem,\n AbiItemArgs,\n AbiItemName,\n ContractConstructorArgs,\n ContractEventArgsFromTopics,\n EventDefinition,\n ExtractAbiFunctionForArgs,\n ExtractAbiItem,\n ExtractAbiItemForArgs,\n ExtractAbiItemNames,\n ContractErrorArgs,\n ContractErrorName,\n ContractEventArgs,\n ContractEventName,\n ContractFunctionParameters,\n ContractFunctionReturnType,\n ContractFunctionArgs,\n ContractFunctionName,\n GetEventArgs,\n GetValue,\n LogTopicType,\n MaybeAbiEventName,\n MaybeExtractEventArgsFromAbi,\n UnionWiden,\n Widen,\n} from './types/contract.js'\nexport type {\n AccessList,\n Transaction,\n TransactionBase,\n TransactionEIP1559,\n TransactionEIP2930,\n TransactionEIP4844,\n TransactionEIP7702,\n TransactionLegacy,\n TransactionReceipt,\n TransactionRequest,\n TransactionRequestBase,\n TransactionRequestEIP1559,\n TransactionRequestEIP2930,\n TransactionRequestEIP4844,\n TransactionRequestEIP7702,\n TransactionRequestGeneric,\n TransactionRequestLegacy,\n TransactionSerializable,\n TransactionSerializableBase,\n TransactionSerializableEIP1559,\n TransactionSerializableEIP2930,\n TransactionSerializableEIP4844,\n TransactionSerializableEIP7702,\n TransactionSerializableGeneric,\n TransactionSerializableLegacy,\n TransactionSerialized,\n TransactionSerializedEIP1559,\n TransactionSerializedEIP2930,\n TransactionSerializedEIP4844,\n TransactionSerializedEIP7702,\n TransactionSerializedGeneric,\n TransactionSerializedLegacy,\n TransactionType,\n} from './types/transaction.js'\nexport type {\n Assign,\n Branded,\n Evaluate,\n IsNarrowable,\n IsUndefined,\n IsUnion,\n LooseOmit,\n MaybePartial,\n MaybePromise,\n MaybeRequired,\n Mutable,\n NoInfer,\n NoUndefined,\n Omit,\n Or,\n PartialBy,\n RequiredBy,\n Some,\n UnionEvaluate,\n UnionLooseOmit,\n ValueOf,\n Prettify,\n ExactPartial,\n ExactRequired,\n IsNever,\n OneOf,\n UnionOmit,\n UnionPartialBy,\n UnionPick,\n UnionRequiredBy,\n UnionToTuple,\n} from './types/utils.js'\nexport type {\n Account,\n AccountSource,\n CustomSource,\n HDAccount,\n HDOptions,\n JsonRpcAccount,\n LocalAccount,\n PrivateKeyAccount,\n} from './accounts/types.js'\nexport type { AssetGateway, AssetGatewayUrls } from './types/ens.js'\nexport type {\n Block,\n BlockIdentifier,\n BlockNumber,\n BlockTag,\n Uncle,\n} from './types/block.js'\nexport type {\n ByteArray,\n Hash,\n Hex,\n LogTopic,\n Signature,\n CompactSignature,\n SignableMessage,\n} from './types/misc.js'\nexport type {\n AddEthereumChainParameter,\n BundlerRpcSchema,\n DebugBundlerRpcSchema,\n EIP1193EventMap,\n EIP1193Events,\n EIP1193Parameters,\n EIP1193Provider,\n EIP1193RequestFn,\n EIP1474Methods,\n ProviderRpcErrorType as EIP1193ProviderRpcErrorType,\n ProviderConnectInfo,\n ProviderMessage,\n PublicRpcSchema,\n PaymasterRpcSchema,\n NetworkSync,\n RpcSchema,\n RpcSchemaOverride,\n TestRpcSchema,\n WalletCapabilities,\n WalletCapabilitiesRecord,\n WalletCallReceipt,\n WalletGetCallsStatusReturnType,\n WalletGrantPermissionsParameters,\n WalletGrantPermissionsReturnType,\n WalletSendCallsParameters,\n WalletPermissionCaveat,\n WalletPermission,\n WalletRpcSchema,\n WatchAssetParams,\n} from './types/eip1193.js'\nexport { ProviderRpcError as EIP1193ProviderRpcError } from './types/eip1193.js'\nexport type { BlobSidecar, BlobSidecars } from './types/eip4844.js'\nexport type {\n FeeHistory,\n FeeValues,\n FeeValuesEIP1559,\n FeeValuesEIP4844,\n FeeValuesLegacy,\n FeeValuesType,\n} from './types/fee.js'\nexport type { Filter, FilterType } from './types/filter.js'\nexport type { TypedDataDefinition } from './types/typedData.js'\nexport type { GetTransportConfig, GetPollOptions } from './types/transport.js'\nexport type { Log } from './types/log.js'\nexport type {\n MulticallContracts,\n MulticallResponse,\n MulticallResults,\n} from './types/multicall.js'\nexport type {\n ParseAccount,\n DeriveAccount,\n HDKey,\n} from './types/account.js'\nexport type {\n Authorization,\n AuthorizationList,\n SerializedAuthorization,\n SerializedAuthorizationList,\n SignedAuthorization,\n SignedAuthorizationList,\n} from './types/authorization.js'\nexport type {\n Index,\n Quantity,\n RpcAuthorization,\n RpcAuthorizationList,\n RpcBlock,\n RpcBlockIdentifier,\n RpcBlockNumber,\n RpcFeeHistory,\n RpcFeeValues,\n RpcLog,\n RpcTransaction,\n RpcTransactionReceipt,\n RpcTransactionRequest,\n RpcUncle,\n Status,\n RpcProof,\n RpcAccountStateOverride,\n RpcStateOverride,\n RpcStateMapping,\n} from './types/rpc.js'\nexport type { Withdrawal } from './types/withdrawal.js'\nexport type {\n StateMapping,\n StateOverride,\n} from './types/stateOverride.js'\nexport { labelhash, type LabelhashErrorType } from './utils/ens/labelhash.js'\nexport { namehash, type NamehashErrorType } from './utils/ens/namehash.js'\nexport {\n type FormattedBlock,\n defineBlock,\n type DefineBlockErrorType,\n formatBlock,\n type FormatBlockErrorType,\n} from './utils/formatters/block.js'\nexport { formatLog, type FormatLogErrorType } from './utils/formatters/log.js'\nexport {\n type DecodeAbiParametersErrorType,\n type DecodeAbiParametersReturnType,\n decodeAbiParameters,\n} from './utils/abi/decodeAbiParameters.js'\nexport {\n type DecodeDeployDataErrorType,\n type DecodeDeployDataParameters,\n type DecodeDeployDataReturnType,\n decodeDeployData,\n} from './utils/abi/decodeDeployData.js'\nexport {\n type DecodeErrorResultErrorType,\n type DecodeErrorResultParameters,\n type DecodeErrorResultReturnType,\n decodeErrorResult,\n} from './utils/abi/decodeErrorResult.js'\nexport {\n type DecodeEventLogErrorType,\n type DecodeEventLogParameters,\n type DecodeEventLogReturnType,\n decodeEventLog,\n} from './utils/abi/decodeEventLog.js'\nexport {\n type DecodeFunctionDataErrorType,\n type DecodeFunctionDataParameters,\n type DecodeFunctionDataReturnType,\n decodeFunctionData,\n} from './utils/abi/decodeFunctionData.js'\nexport {\n type DecodeFunctionResultErrorType,\n type DecodeFunctionResultParameters,\n type DecodeFunctionResultReturnType,\n decodeFunctionResult,\n} from './utils/abi/decodeFunctionResult.js'\nexport {\n type EncodeAbiParametersErrorType,\n type EncodeAbiParametersReturnType,\n encodeAbiParameters,\n} from './utils/abi/encodeAbiParameters.js'\nexport {\n type EncodeDeployDataErrorType,\n type EncodeDeployDataParameters,\n type EncodeDeployDataReturnType,\n encodeDeployData,\n} from './utils/abi/encodeDeployData.js'\nexport {\n type EncodeErrorResultErrorType,\n type EncodeErrorResultParameters,\n type EncodeErrorResultReturnType,\n encodeErrorResult,\n} from './utils/abi/encodeErrorResult.js'\nexport {\n type EncodeEventTopicsErrorType,\n type EncodeEventTopicsParameters,\n type EncodeEventTopicsReturnType,\n encodeEventTopics,\n} from './utils/abi/encodeEventTopics.js'\nexport {\n type EncodeFunctionDataErrorType,\n type EncodeFunctionDataParameters,\n type EncodeFunctionDataReturnType,\n encodeFunctionData,\n} from './utils/abi/encodeFunctionData.js'\nexport {\n type PrepareEncodeFunctionDataErrorType,\n type PrepareEncodeFunctionDataParameters,\n type PrepareEncodeFunctionDataReturnType,\n prepareEncodeFunctionData,\n} from './utils/abi/prepareEncodeFunctionData.js'\nexport {\n type EncodeFunctionResultErrorType,\n type EncodeFunctionResultParameters,\n type EncodeFunctionResultReturnType,\n encodeFunctionResult,\n} from './utils/abi/encodeFunctionResult.js'\nexport {\n type ParseEventLogsErrorType,\n type ParseEventLogsParameters,\n type ParseEventLogsReturnType,\n parseEventLogs,\n} from './utils/abi/parseEventLogs.js'\nexport {\n type FormattedTransaction,\n defineTransaction,\n type DefineTransactionErrorType,\n formatTransaction,\n type FormatTransactionErrorType,\n transactionType,\n} from './utils/formatters/transaction.js'\nexport {\n type FormattedTransactionReceipt,\n defineTransactionReceipt,\n type DefineTransactionReceiptErrorType,\n formatTransactionReceipt,\n type FormatTransactionReceiptErrorType,\n} from './utils/formatters/transactionReceipt.js'\nexport {\n type FormattedTransactionRequest,\n defineTransactionRequest,\n type DefineTransactionRequestErrorType,\n formatTransactionRequest,\n type FormatTransactionRequestErrorType,\n rpcTransactionType,\n} from './utils/formatters/transactionRequest.js'\nexport {\n type GetAbiItemErrorType,\n type GetAbiItemParameters,\n type GetAbiItemReturnType,\n getAbiItem,\n} from './utils/abi/getAbiItem.js'\nexport {\n type GetContractAddressOptions,\n type GetCreate2AddressOptions,\n type GetCreate2AddressErrorType,\n type GetCreateAddressOptions,\n type GetCreateAddressErrorType,\n getContractAddress,\n getCreate2Address,\n getCreateAddress,\n} from './utils/address/getContractAddress.js'\nexport {\n type GetSerializedTransactionType,\n type GetSerializedTransactionTypeErrorType,\n getSerializedTransactionType,\n} from './utils/transaction/getSerializedTransactionType.js'\nexport {\n type GetTransactionType,\n type GetTransactionTypeErrorType,\n getTransactionType,\n} from './utils/transaction/getTransactionType.js'\nexport {\n type HashDomainErrorType,\n type HashStructErrorType,\n type HashTypedDataErrorType,\n type HashTypedDataParameters,\n type HashTypedDataReturnType,\n hashDomain,\n hashStruct,\n hashTypedData,\n} from './utils/signature/hashTypedData.js'\nexport {\n type CompactSignatureToSignatureErrorType,\n compactSignatureToSignature,\n} from './utils/signature/compactSignatureToSignature.js'\nexport {\n /** @deprecated Use `ParseCompactSignatureErrorType`. */\n type ParseCompactSignatureErrorType as HexToCompactSignatureErrorType,\n /** @deprecated Use `parseCompactSignature`. */\n parseCompactSignature as hexToCompactSignature,\n type ParseCompactSignatureErrorType,\n parseCompactSignature,\n} from './utils/signature/parseCompactSignature.js'\nexport {\n /** @deprecated Use `ParseSignatureErrorType`. */\n type ParseSignatureErrorType as HexToSignatureErrorType,\n /** @deprecated Use `parseSignature`. */\n parseSignature as hexToSignature,\n type ParseSignatureErrorType,\n parseSignature,\n} from './utils/signature/parseSignature.js'\nexport {\n type RecoverAddressErrorType,\n type RecoverAddressParameters,\n type RecoverAddressReturnType,\n recoverAddress,\n} from './utils/signature/recoverAddress.js'\nexport {\n type RecoverMessageAddressErrorType,\n type RecoverMessageAddressParameters,\n type RecoverMessageAddressReturnType,\n recoverMessageAddress,\n} from './utils/signature/recoverMessageAddress.js'\nexport {\n type RecoverPublicKeyErrorType,\n type RecoverPublicKeyParameters,\n type RecoverPublicKeyReturnType,\n recoverPublicKey,\n} from './utils/signature/recoverPublicKey.js'\nexport {\n type RecoverTransactionAddressErrorType,\n type RecoverTransactionAddressParameters,\n type RecoverTransactionAddressReturnType,\n recoverTransactionAddress,\n} from './utils/signature/recoverTransactionAddress.js'\nexport {\n type RecoverTypedDataAddressErrorType,\n type RecoverTypedDataAddressParameters,\n type RecoverTypedDataAddressReturnType,\n recoverTypedDataAddress,\n} from './utils/signature/recoverTypedDataAddress.js'\nexport {\n type SignatureToCompactSignatureErrorType,\n signatureToCompactSignature,\n} from './utils/signature/signatureToCompactSignature.js'\nexport {\n /** @deprecated Use `SignatureToHexErrorType` instead. */\n type SerializeCompactSignatureErrorType as CompactSignatureToHexErrorType,\n /** @deprecated Use `serializeCompactSignature` instead. */\n serializeCompactSignature as compactSignatureToHex,\n type SerializeCompactSignatureErrorType,\n serializeCompactSignature,\n} from './utils/signature/serializeCompactSignature.js'\nexport {\n /** @deprecated Use `SignatureToHexErrorType` instead. */\n type SerializeSignatureErrorType as SignatureToHexErrorType,\n /** @deprecated Use `serializeSignature` instead. */\n serializeSignature as signatureToHex,\n type SerializeSignatureParameters,\n type SerializeSignatureReturnType,\n type SerializeSignatureErrorType,\n serializeSignature,\n} from './utils/signature/serializeSignature.js'\nexport {\n bytesToRlp,\n type BytesToRlpErrorType,\n hexToRlp,\n type HexToRlpErrorType,\n toRlp,\n type ToRlpErrorType,\n type ToRlpReturnType,\n} from './utils/encoding/toRlp.js'\nexport {\n type VerifyHashErrorType,\n type VerifyHashParameters,\n type VerifyHashReturnType,\n verifyHash,\n} from './utils/signature/verifyHash.js'\nexport {\n type VerifyMessageErrorType,\n type VerifyMessageParameters,\n type VerifyMessageReturnType,\n verifyMessage,\n} from './utils/signature/verifyMessage.js'\nexport {\n type VerifyTypedDataErrorType,\n type VerifyTypedDataParameters,\n type VerifyTypedDataReturnType,\n verifyTypedData,\n} from './utils/signature/verifyTypedData.js'\nexport {\n type ParseErc6492SignatureErrorType,\n type ParseErc6492SignatureParameters,\n type ParseErc6492SignatureReturnType,\n parseErc6492Signature,\n} from './utils/signature/parseErc6492Signature.js'\nexport {\n type IsErc6492SignatureErrorType,\n type IsErc6492SignatureParameters,\n type IsErc6492SignatureReturnType,\n isErc6492Signature,\n} from './utils/signature/isErc6492Signature.js'\nexport {\n type SerializeErc6492SignatureErrorType,\n type SerializeErc6492SignatureParameters,\n type SerializeErc6492SignatureReturnType,\n serializeErc6492Signature,\n} from './utils/signature/serializeErc6492Signature.js'\nexport {\n type AssertRequestErrorType,\n assertRequest,\n} from './utils/transaction/assertRequest.js'\nexport {\n type AssertTransactionEIP1559ErrorType,\n assertTransactionEIP1559,\n type AssertTransactionEIP2930ErrorType,\n assertTransactionEIP2930,\n type AssertTransactionLegacyErrorType,\n assertTransactionLegacy,\n} from './utils/transaction/assertTransaction.js'\nexport {\n type BoolToBytesErrorType,\n type BoolToBytesOpts,\n boolToBytes,\n type HexToBytesErrorType,\n type HexToBytesOpts,\n hexToBytes,\n type NumberToBytesErrorType,\n numberToBytes,\n type StringToBytesErrorType,\n type StringToBytesOpts,\n stringToBytes,\n type ToBytesErrorType,\n type ToBytesParameters,\n toBytes,\n} from './utils/encoding/toBytes.js'\nexport {\n type BoolToHexErrorType,\n type BoolToHexOpts,\n boolToHex,\n type BytesToHexErrorType,\n type BytesToHexOpts,\n bytesToHex,\n type NumberToHexErrorType,\n type NumberToHexOpts,\n numberToHex,\n type StringToHexErrorType,\n type StringToHexOpts,\n stringToHex,\n type ToHexErrorType,\n type ToHexParameters,\n toHex,\n} from './utils/encoding/toHex.js'\nexport {\n type BytesToBigIntErrorType,\n type BytesToBigIntOpts,\n bytesToBigInt,\n type BytesToBoolErrorType,\n type BytesToBoolOpts,\n bytesToBool,\n type BytesToNumberErrorType,\n type BytesToNumberOpts,\n bytesToNumber,\n type BytesToStringErrorType,\n type BytesToStringOpts,\n bytesToString,\n type FromBytesErrorType,\n type FromBytesParameters,\n fromBytes,\n} from './utils/encoding/fromBytes.js'\nexport {\n type CcipRequestParameters,\n type CcipRequestErrorType,\n ccipRequest,\n /** @deprecated Use `ccipRequest`. */\n ccipRequest as ccipFetch,\n type OffchainLookupErrorType,\n offchainLookup,\n offchainLookupAbiItem,\n offchainLookupSignature,\n} from './utils/ccip.js'\nexport {\n type BlobsToCommitmentsErrorType,\n type BlobsToCommitmentsParameters,\n type BlobsToCommitmentsReturnType,\n blobsToCommitments,\n} from './utils/blob/blobsToCommitments.js'\nexport {\n type CommitmentToVersionedHashErrorType,\n type CommitmentToVersionedHashParameters,\n type CommitmentToVersionedHashReturnType,\n commitmentToVersionedHash,\n} from './utils/blob/commitmentToVersionedHash.js'\nexport {\n type CommitmentsToVersionedHashesErrorType,\n type CommitmentsToVersionedHashesParameters,\n type CommitmentsToVersionedHashesReturnType,\n commitmentsToVersionedHashes,\n} from './utils/blob/commitmentsToVersionedHashes.js'\nexport {\n type SidecarsToVersionedHashesErrorType,\n type SidecarsToVersionedHashesParameters,\n type SidecarsToVersionedHashesReturnType,\n sidecarsToVersionedHashes,\n} from './utils/blob/sidecarsToVersionedHashes.js'\nexport {\n type blobsToProofsErrorType,\n type blobsToProofsParameters,\n type blobsToProofsReturnType,\n blobsToProofs,\n} from './utils/blob/blobsToProofs.js'\nexport {\n type FromBlobsErrorType,\n type FromBlobsParameters,\n type FromBlobsReturnType,\n fromBlobs,\n} from './utils/blob/fromBlobs.js'\nexport {\n type ToBlobSidecarsErrorType,\n type ToBlobSidecarsParameters,\n type ToBlobSidecarsReturnType,\n toBlobSidecars,\n} from './utils/blob/toBlobSidecars.js'\nexport {\n type ToBlobsErrorType,\n type ToBlobsParameters,\n type ToBlobsReturnType,\n toBlobs,\n} from './utils/blob/toBlobs.js'\nexport {\n type DefineKzgErrorType,\n type DefineKzgParameters,\n type DefineKzgReturnType,\n defineKzg,\n} from './utils/kzg/defineKzg.js'\nexport {\n type SetupKzgErrorType,\n type SetupKzgParameters,\n type SetupKzgReturnType,\n setupKzg,\n} from './utils/kzg/setupKzg.js'\nexport {\n type ConcatBytesErrorType,\n type ConcatErrorType,\n type ConcatHexErrorType,\n type ConcatReturnType,\n concat,\n concatBytes,\n concatHex,\n} from './utils/data/concat.js'\nexport {\n type AssertCurrentChainErrorType,\n type AssertCurrentChainParameters,\n assertCurrentChain,\n} from './utils/chain/assertCurrentChain.js'\nexport { defineChain } from './utils/chain/defineChain.js'\nexport {\n type ExtractChainErrorType,\n type ExtractChainParameters,\n type ExtractChainReturnType,\n extractChain,\n} from './utils/chain/extractChain.js'\nexport {\n type GetChainContractAddressErrorType,\n getChainContractAddress,\n} from './utils/chain/getChainContractAddress.js'\nexport {\n type EncodePackedErrorType,\n encodePacked,\n} from './utils/abi/encodePacked.js'\nexport {\n type WithRetryErrorType,\n withRetry,\n} from './utils/promise/withRetry.js'\nexport {\n type WithTimeoutErrorType,\n withTimeout,\n} from './utils/promise/withTimeout.js'\nexport {\n type FormatEtherErrorType,\n formatEther,\n} from './utils/unit/formatEther.js'\nexport {\n type FormatGweiErrorType,\n formatGwei,\n} from './utils/unit/formatGwei.js'\nexport {\n type FormatUnitsErrorType,\n formatUnits,\n} from './utils/unit/formatUnits.js'\nexport {\n type FromHexErrorType,\n fromHex,\n type HexToBigIntErrorType,\n hexToBigInt,\n type HexToBoolErrorType,\n hexToBool,\n type HexToNumberErrorType,\n hexToNumber,\n type HexToStringErrorType,\n hexToString,\n} from './utils/encoding/fromHex.js'\nexport {\n type FromRlpErrorType,\n type FromRlpReturnType,\n fromRlp,\n} from './utils/encoding/fromRlp.js'\nexport {\n type ChecksumAddressErrorType,\n type GetAddressErrorType,\n checksumAddress,\n getAddress,\n} from './utils/address/getAddress.js'\nexport {\n type GetContractErrorReturnType,\n getContractError,\n} from './utils/errors/getContractError.js'\nexport {\n type ToEventSelectorErrorType,\n toEventSelector,\n /** @deprecated use `ToEventSelectorErrorType`. */\n type ToEventSelectorErrorType as GetEventSelectorErrorType,\n /** @deprecated use `toEventSelector`. */\n toEventSelector as getEventSelector,\n} from './utils/hash/toEventSelector.js'\nexport {\n type ToFunctionSelectorErrorType,\n toFunctionSelector,\n /** @deprecated use `ToFunctionSelectorErrorType`. */\n type ToFunctionSelectorErrorType as GetFunctionSelectorErrorType,\n /** @deprecated use `toFunctionSelector`. */\n toFunctionSelector as getFunctionSelector,\n} from './utils/hash/toFunctionSelector.js'\nexport {\n type ToEventSignatureErrorType,\n toEventSignature,\n /** @deprecated use `ToEventSignatureErrorType`. */\n type ToEventSignatureErrorType as GetEventSignatureErrorType,\n /** @deprecated use `toEventSignature`. */\n toEventSignature as getEventSignature,\n} from './utils/hash/toEventSignature.js'\nexport {\n type ToFunctionSignatureErrorType,\n toFunctionSignature,\n /** @deprecated use `ToFunctionSignatureErrorType`. */\n type ToFunctionSignatureErrorType as GetFunctionSignatureErrorType,\n /** @deprecated use `toFunctionSignature`. */\n toFunctionSignature as getFunctionSignature,\n} from './utils/hash/toFunctionSignature.js'\nexport {\n type ToEventHashErrorType,\n toEventHash,\n} from './utils/hash/toEventHash.js'\nexport {\n type ToFunctionHashErrorType,\n toFunctionHash,\n} from './utils/hash/toFunctionHash.js'\nexport {\n type HashMessageErrorType,\n hashMessage,\n} from './utils/signature/hashMessage.js'\nexport {\n type ToPrefixedMessageErrorType,\n toPrefixedMessage,\n} from './utils/signature/toPrefixedMessage.js'\nexport {\n type IsAddressOptions,\n type IsAddressErrorType,\n isAddress,\n} from './utils/address/isAddress.js'\nexport {\n type IsAddressEqualReturnType,\n type IsAddressEqualErrorType,\n isAddressEqual,\n} from './utils/address/isAddressEqual.js'\nexport { type IsBytesErrorType, isBytes } from './utils/data/isBytes.js'\nexport { type IsHashErrorType, isHash } from './utils/hash/isHash.js'\nexport { type IsHexErrorType, isHex } from './utils/data/isHex.js'\nexport {\n type Keccak256Hash,\n type Keccak256ErrorType,\n keccak256,\n} from './utils/hash/keccak256.js'\nexport {\n type Sha256Hash,\n type Sha256ErrorType,\n sha256,\n} from './utils/hash/sha256.js'\nexport {\n type Ripemd160Hash,\n type Ripemd160ErrorType,\n ripemd160,\n} from './utils/hash/ripemd160.js'\nexport {\n type PadBytesErrorType,\n type PadErrorType,\n type PadHexErrorType,\n type PadReturnType,\n pad,\n padBytes,\n padHex,\n} from './utils/data/pad.js'\nexport {\n type ParseEtherErrorType,\n parseEther,\n} from './utils/unit/parseEther.js'\nexport { type ParseGweiErrorType, parseGwei } from './utils/unit/parseGwei.js'\nexport {\n type ParseTransactionErrorType,\n type ParseTransactionReturnType,\n parseTransaction,\n} from './utils/transaction/parseTransaction.js'\nexport {\n type ParseUnitsErrorType,\n parseUnits,\n} from './utils/unit/parseUnits.js'\nexport {\n type SerializeAccessListErrorType,\n serializeAccessList,\n} from './utils/transaction/serializeAccessList.js'\nexport {\n serializeTransaction,\n type SerializeTransactionErrorType,\n type SerializedTransactionReturnType,\n type SerializeTransactionFn,\n} from './utils/transaction/serializeTransaction.js'\nexport { type SizeErrorType, size } from './utils/data/size.js'\nexport {\n type SliceBytesErrorType,\n type SliceErrorType,\n type SliceHexErrorType,\n slice,\n sliceBytes,\n sliceHex,\n} from './utils/data/slice.js'\nexport { type StringifyErrorType, stringify } from './utils/stringify.js'\nexport {\n type TrimErrorType,\n type TrimReturnType,\n trim,\n} from './utils/data/trim.js'\nexport {\n type DomainSeparatorErrorType,\n type GetTypesForEIP712DomainErrorType,\n type SerializeTypedDataErrorType,\n type ValidateTypedDataErrorType,\n serializeTypedData,\n validateTypedData,\n domainSeparator,\n getTypesForEIP712Domain,\n} from './utils/typedData.js'\nexport {\n type CreateNonceManagerParameters,\n type NonceManager,\n type NonceManagerSource,\n createNonceManager,\n nonceManager,\n} from './utils/nonceManager.js'\nexport type {\n RpcEstimateUserOperationGasReturnType,\n RpcGetUserOperationByHashReturnType,\n RpcUserOperation,\n RpcUserOperationReceipt,\n RpcUserOperationRequest,\n} from './account-abstraction/types/rpc.js'\n", "import { defineChain } from 'viem';\n\nimport { ChainDefinition } from '../../types/ConceroNetwork';\n\nexport function createViemChain(\n\tchainDefinition: ChainDefinition\n): ReturnType {\n\treturn defineChain({\n\t\tid: chainDefinition.id,\n\t\tname: chainDefinition.name,\n\t\tnativeCurrency: {\n\t\t\tdecimals: 18,\n\t\t\tname: 'eth',\n\t\t\tsymbol: 'eth',\n\t\t},\n\t\trpcUrls: {\n\t\t\tdefault: { http: chainDefinition.rpcUrls },\n\t\t},\n\t\tblockExplorers: chainDefinition.blockExplorer\n\t\t\t? {\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\tname: chainDefinition.blockExplorer.name,\n\t\t\t\t\t\turl: chainDefinition.blockExplorer.url,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: undefined,\n\t\ttestnet: chainDefinition.isTestnet,\n\t});\n}\n", "import process from 'process';\n\nimport { warn } from './log';\n\nfunction getEnvVar(key: string): string | undefined {\n\tconst value = process.env[key];\n\tif (value === undefined || value === '') {\n\t\twarn(`Missing env variable: ${key}`, 'getEnvVar');\n\t\treturn undefined;\n\t}\n\n\treturn value;\n}\n\nexport { getEnvVar };\n", "const networkColors: Record = {\n\tethereum: '\\x1b[30m', // grey\n\tarbitrum: '\\x1b[34m', // blue\n\tpolygon: '\\x1b[35m', // magenta\n\tavalanche: '\\x1b[31m', // red\n\tbase: '\\x1b[36m', // cyan\n\tethereumSepolia: '\\x1b[30m', // grey\n\tarbitrumSepolia: '\\x1b[34m', // blue\n\toptimismSepolia: '\\x1b[31m', // red\n\tpolygonAmoy: '\\x1b[35m', // magenta\n\tavalancheFuji: '\\x1b[31m', // red\n\tbaseSepolia: '\\x1b[36m', // cyan\n\thardhat: '\\x1b[32m', // green\n\tlocalhost: '\\x1b[32m', // green\n};\nconst reset = '\\x1b[0m';\n\nexport function log(message: any, functionName: string, networkName?: string) {\n\tconst greenFill = '\\x1b[32m';\n\tconst network = networkName ? `\\x1b[35m[${networkName}]${reset}` : '';\n\n\tconsole.log(`${network}${greenFill}[${functionName}]${reset}`, message);\n}\n\nexport function warn(message: any, functionName: string) {\n\tconst yellowFill = '\\x1b[33m';\n\n\tconsole.log(`${yellowFill}[${functionName}]${reset}`, message);\n}\n\nexport function err(message: any, functionName: string, networkName?: string) {\n\tconst redFill = '\\x1b[31m';\n\tconst network = networkName\n\t\t? `${networkColors[networkName]}[${networkName}]${reset}`\n\t\t: '';\n\n\tconsole.log(\n\t\t`${network}${redFill}[${functionName}] ERROR:${reset}`,\n\t\tmessage\n\t);\n}\n\nexport default log;\n", "import { getEnvVar } from './getEnvVar';\n\nexport const getTrezorDeployEnabled = () =>\n\tgetEnvVar('TREZOR_DEPLOY_ENABLED') === 'true';\n", "import { NetworkType } from '../networks/types';\nimport { warn } from './log';\n\nexport function getWallet(\n\tchainType: NetworkType,\n\taccountType:\n\t\t| 'proxyDeployer'\n\t\t| 'deployer'\n\t\t| 'operator'\n\t\t| 'priceFeedProxyDeployer',\n\twalletType: 'privateKey' | 'address'\n) {\n\tlet prefix;\n\tlet walletKey;\n\tswitch (accountType) {\n\t\tcase 'proxyDeployer':\n\t\t\tprefix = 'PROXY_DEPLOYER';\n\t\t\tbreak;\n\t\tcase 'deployer':\n\t\t\tprefix = 'DEPLOYER';\n\t\t\tbreak;\n\t\tcase 'operator':\n\t\t\tprefix = 'OPERATOR';\n\t\t\tbreak;\n\t\tcase 'priceFeedProxyDeployer':\n\t\t\tprefix = 'PRICE_FEED_PROXY_DEPLOYER';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown account type: ${accountType}`);\n\t}\n\n\tswitch (walletType) {\n\t\tcase 'privateKey':\n\t\t\twalletKey = 'PRIVATE_KEY';\n\t\t\tbreak;\n\t\tcase 'address':\n\t\t\twalletKey = 'ADDRESS';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown wallet type: ${walletType}`);\n\t}\n\n\t// Determine the environment variable key based on the wallet type\n\tconst envKey = `${chainType.toUpperCase()}_${prefix}_${walletKey}`;\n\tconst walletValue = process.env[envKey];\n\n\tif (!walletValue) {\n\t\twarn(`Missing env variable: ${envKey}`, 'getEnvVar');\n\t}\n\n\treturn walletValue;\n}\n", "import { readFileSync, writeFileSync } from \"fs\";\nimport path from \"path\";\n\nimport { getNetworkEnvKey } from \"../networks/getNetworkEnvKey\";\n\nimport { envPrefixes } from \"../constants/deploymentVariables\";\nimport { ConceroNetworkNames } from \"../../types/ConceroNetwork\";\nimport { EnvFileName, EnvPrefixes } from \"../../types/deploymentVariables\";\nimport log from \"./log\";\n\nexport type ContractPrefix = keyof EnvPrefixes;\n\nexport function updateEnvVariable(key: string, newValue: string, envFileName: EnvFileName) {\n\tconst filePath = path.join(__dirname, `../.env.${envFileName}`);\n\tif (!filePath) throw new Error(`File not found: ${filePath}`);\n\n\tconst envContents = readFileSync(filePath, \"utf8\");\n\tlet lines = envContents.split(/\\r?\\n/);\n\n\tif (!lines.some(line => line.startsWith(`${key}=`))) {\n\t\tlog(`Key ${key} not found in .env file. Adding to ${filePath}`, \"updateEnvVariable\");\n\t\tlines.push(`${key}=${newValue}`);\n\t}\n\n\tconst newLines = lines.map(line => {\n\t\tlet [currentKey, currentValue] = line.split(\"=\");\n\t\tif (currentKey === key) {\n\t\t\treturn `${key}=${newValue}`;\n\t\t}\n\t\treturn line;\n\t});\n\n\twriteFileSync(filePath, newLines.join(\"\\n\"));\n\tprocess.env[key] = newValue;\n}\n\nexport function updateEnvAddress(\n\tprefix: ContractPrefix,\n\tnewValue: string,\n\tenvFileName: EnvFileName,\n\tnetworkPostfix?: ConceroNetworkNames | string,\n): void {\n\tconst searchKey = networkPostfix\n\t\t? `${envPrefixes[prefix]}_${getNetworkEnvKey(networkPostfix)}`\n\t\t: envPrefixes[prefix];\n\n\tupdateEnvVariable(searchKey, newValue, envFileName);\n}\n\nexport default updateEnvVariable;\n", "import type { WaitForTransactionReceiptParameters } from \"viem/actions/public/waitForTransactionReceipt\";\n\nimport { EnvPrefixes } from \"../../types/deploymentVariables\";\nimport { ConceroNetwork } from \"../../types/ConceroNetwork\";\n\nenum ProxyEnum {\n\trouterProxy = \"routerProxy\",\n\tverifierProxy = \"verifierProxy\",\n\tpriceFeedProxy = \"priceFeedProxy\",\n\tcreValidatorLibProxy = \"creValidatorLibProxy\",\n\trelayerLibProxy = \"relayerLibProxy\",\n}\n\nfunction getViemReceiptConfig(chain: ConceroNetwork): Partial {\n\treturn {\n\t\ttimeout: 0,\n\t\tconfirmations: chain.confirmations,\n\t};\n}\n\nconst envPrefixes: EnvPrefixes = {\n\trouter: \"CONCERO_ROUTER\",\n\trouterProxy: \"CONCERO_ROUTER_PROXY\",\n\trouterProxyAdmin: \"CONCERO_ROUTER_PROXY_ADMIN\",\n\tverifier: \"CONCERO_VERIFIER\",\n\tverifierProxy: \"CONCERO_VERIFIER_PROXY\",\n\tverifierProxyAdmin: \"CONCERO_VERIFIER_PROXY_ADMIN\",\n\tpriceFeed: \"CONCERO_PRICE_FEED\",\n\tpriceFeedProxy: \"CONCERO_PRICE_FEED_PROXY\",\n\tpriceFeedProxyAdmin: \"CONCERO_PRICE_FEED_PROXY_ADMIN\",\n\tlpToken: \"LPTOKEN\",\n\tpause: \"CONCERO_PAUSE\",\n\tcreValidatorLibProxy: \"CONCERO_CRE_VALIDATOR_LIB_PROXY\",\n\tcreValidatorLibProxyAdmin: \"CONCERO_CRE_VALIDATOR_LIB_PROXY_ADMIN\",\n\tcreValidatorLib: \"CONCERO_CRE_VALIDATOR_LIB\",\n\trelayerLib: \"CONCERO_RELAYER_LIB\",\n\trelayerLibProxy: \"CONCERO_RELAYER_LIB_PROXY\",\n\trelayerLibProxyAdmin: \"CONCERO_RELAYER_LIB_PROXY_ADMIN\",\n};\n\nconst ADMIN_SLOT = \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\";\nconst ADMIN_ROLE = \"0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42\";\n\nexport {\n\tProxyEnum,\n\tenvPrefixes,\n\tgetViemReceiptConfig,\n\tADMIN_SLOT,\n\tADMIN_ROLE,\n};\n", "import mainnetChains from '@concero/concero-networks/output/chains.mainnet.json';\nimport testnetChains from '@concero/concero-networks/output/chains.testnet.json';\nimport type { Chain } from '@concero/concero-networks/src/types';\nimport { type NetworkType } from '../../types/ConceroNetwork';\n\nimport {\n\tChainDefinition,\n\tConceroNetwork,\n} from '../../types/ConceroNetwork';\nimport { getWallet } from '../utils';\nimport { createViemChain } from '../utils/createViemChain';\nimport { getTrezorDeployEnabled } from '../utils/getTrezorDeployEnabled';\n\nconst mainnetProxyDeployerPK = getWallet(\n\t'mainnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\nconst testnetProxyDeployerPK = getWallet(\n\t'testnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\n\nconst mainnetDeployerPK = getWallet('mainnet', 'deployer', 'privateKey');\nconst testnetDeployerPK = getWallet('testnet', 'deployer', 'privateKey');\n\nconst trezorDeployEnabled = getTrezorDeployEnabled();\n\nconst testnetAccounts = [testnetDeployerPK, testnetProxyDeployerPK];\n\nconst networkTypes: Record = {\n\tmainnet: 'mainnet',\n\ttestnet: 'testnet',\n\tlocalhost: 'localhost',\n};\n\nexport type ConceroMainnetNetworkNames =\n\t(typeof mainnetChains)[keyof typeof mainnetChains]['name'];\nexport type ConceroTestnetNetworkNames =\n\t(typeof testnetChains)[keyof typeof testnetChains]['name'];\n\nfunction createExtendedNetworks>(\n\tchains: T,\n\tnetworkType: NetworkType,\n\taccounts: (string | undefined)[]\n): Record {\n\tconst validAccounts = accounts.filter((acc): acc is string => !!acc);\n\t\n\treturn Object.fromEntries(\n\t\tObject.values(chains).map(chain => {\n\t\t\tconst chainDefinition: ChainDefinition = {\n\t\t\t\tid: parseInt(chain.id),\n\t\t\t\tname: chain.name,\n\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\tisTestnet: chain.isTestnet ?? false,\n\t\t\t\t...(chain.blockExplorers?.[0] && {\n\t\t\t\t\tblockExplorer: {\n\t\t\t\t\t\tname: chain.blockExplorers[0].name,\n\t\t\t\t\t\turl: chain.blockExplorers[0].url,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t};\n\n\t\t\tconst viemChain = createViemChain(chainDefinition);\n\n\t\t\treturn [\n\t\t\t\tchain.name,\n\t\t\t\t{\n\t\t\t\t\tname: chain.name,\n\t\t\t\t\tchainId: parseInt(chain.id),\n\t\t\t\t\ttype: networkType,\n\t\t\t\t\turl: chain.rpcUrls[0] || '',\n\t\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\t\tsaveDeployments: false,\n\t\t\t\t\t...(!trezorDeployEnabled && { accounts: validAccounts }),\n\t\t\t\t\tchainSelector: BigInt(chain.chainSelector),\n\t\t\t\t\tconfirmations: 1,\n\t\t\t\t\tviemChain,\n\t\t\t\t\t...(trezorDeployEnabled && {\n\t\t\t\t\t\ttrezorDerivationPaths: [\n\t\t\t\t\t\t\t[44, 60, 0, 0, 0],\n\t\t\t\t\t\t\t[44, 60, 0, 0, 1],\n\t\t\t\t\t\t],\n\t\t\t\t\t\ttrezorInsecureDerivation: true,\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t];\n\t\t})\n\t) as Record;\n}\n\nexport const testnetNetworks = createExtendedNetworks(\n\ttestnetChains as unknown as Record,\n\tnetworkTypes.testnet,\n\ttestnetAccounts\n);\n\nexport const mainnetNetworks = createExtendedNetworks(\n\tmainnetChains as unknown as Record,\n\tnetworkTypes.mainnet,\n\t[mainnetDeployerPK, mainnetProxyDeployerPK]\n);\n\nexport const conceroNetworks: Record = {\n\t...testnetNetworks,\n\t...mainnetNetworks,\n};\n", "import { HardhatRuntimeEnvironment } from 'hardhat/types';\n\nimport { conceroNetworks } from '../constants/conceroNetworks';\nimport { ContractPrefix, EnvFileName } from '../../types/deploymentVariables';\nimport { getTrezorDeployEnabled, log, updateEnvAddress } from '../utils';\n\nexport interface ITxParams {\n\tgasLimit: bigint;\n}\n\nexport interface IGenericDeployParams {\n\thre: HardhatRuntimeEnvironment;\n\tcontractName: string;\n\tcontractPrefix: ContractPrefix;\n\ttxParams?: Partial;\n}\n\nexport const genericDeploy = async (\n\t{ hre, contractName, contractPrefix, txParams }: IGenericDeployParams,\n\t...contractConstructorArgs: any[]\n) => {\n\tconst [deployer] = await hre.ethers.getSigners();\n\tconst chain = conceroNetworks[hre.network.name];\n\n\tlog(\n\t\t`Deploy ${contractName} from address: ${await deployer.getAddress()}`,\n\t\t'contract deploy',\n\t\tchain.name\n\t);\n\n\tconst contractFactory = await hre.ethers.getContractFactory(contractName);\n\n\tconst deployOverrides = txParams?.gasLimit ? { gasLimit: txParams.gasLimit } : {};\n\n\tconst deployTx = contractFactory.getDeployTransaction(\n\t\t...contractConstructorArgs,\n\t\tdeployOverrides\n\t);\n\n\tconst isTrezorDeployEnabled = getTrezorDeployEnabled();\n\tif (deployTx.data && isTrezorDeployEnabled) {\n\t\tlog(\n\t\t\t`${contractName} input data: ${deployTx.data} \\n size: ${(deployTx.data.length - 2) / 2}`,\n\t\t\t'bytecode',\n\t\t\tchain.name\n\t\t);\n\t}\n\n\tconst contract = await contractFactory.deploy(...contractConstructorArgs, deployOverrides);\n\tawait contract.deploymentTransaction()?.wait();\n\tconst deploymentAddress = await contract.getAddress();\n\n\tif (hre.tenderly) {\n\t\tawait hre.tenderly.verify({ name: contractName, address: deploymentAddress });\n\t}\n\n\tlog(\n\t\t`Deployed at: ${deploymentAddress}`,\n\t\t`deploy ${contractName}`,\n\t\tchain.name\n\t);\n\n\tupdateEnvAddress(\n\t\tcontractPrefix,\n\t\tdeploymentAddress,\n\t\t`deployments.${chain.type}` as EnvFileName,\n\t\tchain.name,\n\t);\n\n\treturn contract.deploymentTransaction()?.hash;\n};\n", "import {\n\tAddress,\n\terc20Abi,\n\tformatUnits,\n\tHash,\n\tparseUnits,\n\tPublicClient,\n\tWalletClient,\n} from 'viem';\n\nexport class TokenSender {\n\tprivate walletClient: WalletClient;\n\tprivate publicClient: PublicClient;\n\n\tconstructor(walletClient: WalletClient, publicClient: PublicClient) {\n\t\tthis.walletClient = walletClient;\n\t\tthis.publicClient = publicClient;\n\t}\n\n\tpublic async sendToken(\n\t\ttokenAddress: Address,\n\t\tamount: string,\n\t\trecipient: Address\n\t): Promise {\n\t\tconst [tokenDecimals, tokenSymbol, tokenBalance] = await Promise.all([\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'decimals',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'symbol',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'balanceOf',\n\t\t\t\targs: [this.walletClient.account?.address!],\n\t\t\t}),\n\t\t]);\n\n\t\tconsole.log(\n\t\t\t`Current ${tokenSymbol} balance ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t);\n\n\t\tif (parseUnits(amount, tokenDecimals) > tokenBalance) {\n\t\t\tthrow new Error(\n\t\t\t\t`Insufficient balance. Required: ${amount}, available: ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t\t);\n\t\t}\n\n\t\tconst txHash = await this.walletClient.writeContract({\n\t\t\taddress: tokenAddress,\n\t\t\tabi: erc20Abi,\n\t\t\tfunctionName: 'transfer',\n\t\t\targs: [recipient, parseUnits(amount, tokenDecimals)],\n\t\t\tchain: this.walletClient.chain,\n\t\t\taccount: this.walletClient.account!,\n\t\t});\n\n\t\tconst { status } = await this.publicClient.waitForTransactionReceipt({\n\t\t\thash: txHash,\n\t\t});\n\n\t\tif (status !== 'success') {\n\t\t\tthrow new Error(`Error sending token. Hash: ${txHash}`);\n\t\t}\n\n\t\tconsole.log(`Token successfully sent. Hash: ${txHash}`);\n\n\t\treturn txHash;\n\t}\n}\n", "import { PublicClient } from 'viem';\n\ntype GasData = {\n\tgasPrice?: string;\n\tmaxFeePerGas?: string;\n\tmaxPriorityFeePerGas?: string;\n};\n\nexport async function getActualGasData(\n\tpublicClient: PublicClient\n): Promise {\n\tconst block = await publicClient.getBlock();\n\n\tconst isEIP1559 = !!block.baseFeePerGas;\n\n\tlet gasPrice = 0n;\n\tlet maxPriorityFeePerGas = 0n;\n\ttry {\n\t\tif (isEIP1559) {\n\t\t\tconst { maxFeePerGas } = await publicClient.estimateFeesPerGas();\n\t\t\tgasPrice = maxFeePerGas;\n\t\t\tmaxPriorityFeePerGas =\n\t\t\t\tawait publicClient.estimateMaxPriorityFeePerGas();\n\t\t} else {\n\t\t\tgasPrice = await publicClient.getGasPrice();\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('Error getting actual gas data:', error);\n\t\treturn {\n\t\t\tgasPrice: '0',\n\t\t\tmaxFeePerGas: '0',\n\t\t\tmaxPriorityFeePerGas: '0',\n\t\t};\n\t}\n\n\tconst gasDataLegacy = {\n\t\tgasPrice: gasPrice.toString(),\n\t};\n\n\tconst gasDataEIP1559 = {\n\t\tmaxFeePerGas: gasPrice.toString(),\n\t\tmaxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n\t};\n\n\tconst gasData: GasData = isEIP1559 ? gasDataEIP1559 : gasDataLegacy;\n\n\treturn gasData;\n}\n", "import { Deployment } from 'hardhat-deploy/types';\nimport { HardhatRuntimeEnvironment } from 'hardhat/types';\nimport { PublicClient } from 'viem';\nimport { getActualGasData } from './getActualGasData';\n\ntype HardhatDeployWrapperArgs = {\n\thre: HardhatRuntimeEnvironment;\n\targs: any[];\n\tpublicClient: PublicClient;\n\tproxy?: boolean;\n\tgasLimit?: number;\n\tlog?: boolean;\n\tlibraries?: {\n\t\t[key: string]: `0x${string}`;\n\t};\n\tskipIfAlreadyDeployed: boolean;\n};\n\nexport async function hardhatDeployWrapper(\n\tcontractName: string,\n\t{\n\t\thre,\n\t\targs,\n\t\tpublicClient,\n\t\tproxy = false,\n\t\tgasLimit,\n\t\tlog = false,\n\t\tlibraries,\n\t\tskipIfAlreadyDeployed = false,\n\t}: HardhatDeployWrapperArgs\n): Promise {\n\tlet actualDeployer;\n\n\tif (proxy) {\n\t\tconst { proxyDeployer } = await hre.getNamedAccounts();\n\t\tactualDeployer = proxyDeployer;\n\t} else {\n\t\tconst { deployer } = await hre.getNamedAccounts();\n\t\tactualDeployer = deployer;\n\t}\n\n\tconst { deploy } = hre.deployments;\n\n\tconst nonce = await publicClient.getTransactionCount({\n\t\taddress: actualDeployer as `0x${string}`,\n\t});\n\n\tconst gasData = await getActualGasData(publicClient);\n\tconst waitConfirmations = hre.network.name.startsWith('ethereum') ? 1 : 3;\n\n\tif (log) {\n\t\tconsole.log(\n\t\t\t`\\x1b[34m[hardhatDeployWrapper]\\x1b[0m\\x1b[35m[args]\\x1b[0m`,\n\t\t\t{\n\t\t\t\tfrom: actualDeployer,\n\t\t\t\targs,\n\t\t\t\tnonce,\n\t\t\t\tgasLimit: gasLimit ? gasLimit : 'auto',\n\t\t\t\tgasData,\n\t\t\t\twaitConfirmations,\n\t\t\t}\n\t\t);\n\t}\n\n\tlet deployment: Deployment;\n\ttry {\n\t\tconsole.log('Starting deployment of:', contractName);\n\t\tdeployment = await deploy(contractName, {\n\t\t\tfrom: actualDeployer,\n\t\t\targs: args,\n\t\t\tlog: true,\n\t\t\tautoMine: true,\n\t\t\tnonce,\n\t\t\twaitConfirmations,\n\t\t\t...(gasLimit ? { gasLimit } : {}),\n\t\t\t...gasData,\n\t\t\t...(libraries ? { libraries } : {}),\n\t\t\tskipIfAlreadyDeployed,\n\t\t});\n\t} catch (error) {\n\t\tconsole.error('Error deploying contract:', error);\n\t\tthrow error;\n\t}\n\n\treturn deployment;\n}\n"], + "mappings": "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", + "names": ["err", "process", "path", "networkTypes", "log"] } diff --git a/dist/index.esm.js b/dist/index.esm.js index b5b1f0a..16c551c 100644 --- a/dist/index.esm.js +++ b/dist/index.esm.js @@ -12,12 +12,12 @@ var init_version = __esm({ }); // node_modules/viem/_esm/errors/base.js -function walk(err, fn) { - if (fn?.(err)) - return err; - if (err && typeof err === "object" && "cause" in err && err.cause !== void 0) - return walk(err.cause, fn); - return fn ? null : err; +function walk(err2, fn) { + if (fn?.(err2)) + return err2; + if (err2 && typeof err2 === "object" && "cause" in err2 && err2.cause !== void 0) + return walk(err2.cause, fn); + return fn ? null : err2; } var errorConfig, BaseError; var init_base = __esm({ @@ -460,6 +460,1757 @@ var networkTypes = { localhost: "localhost" }; +// node_modules/@concero/concero-networks/output/chains.mainnet.json +var chains_mainnet_default = { + "1": { + id: "1", + chainSelector: 1, + name: "ethereum", + rpcUrls: [ + "https://cloudflare-eth.com", + "https://eth1.lava.build", + "https://mainnet.gateway.tenderly.co", + "https://eth.drpc.org", + "https://gateway.tenderly.co/public/mainnet", + "https://go.getblock.io/aefd01aa907c4805ba3c00a9e5b48c6b", + "https://0xrpc.io/eth", + "https://eth-mainnet.rpcfast.com?api_key=xbhWBI1Wkguk8SNMu1bvvLurPGLXmgwYeC4S6g2H7WdwFigZSmPWVZRxrskEQwIf", + "https://rpc.eth.gateway.fm", + "https://1rpc.io/eth", + "https://eth-mainnet.public.blastapi.io", + "https://ethereum-rpc.publicnode.com", + "https://rpc.mevblocker.io/fast", + "https://eth.meowrpc.com", + "https://eth.api.pocket.network", + "https://ethereum-public.nodies.app", + "https://rpc.flashbots.net/fast", + "https://ethereum-json-rpc.stakely.io", + "https://eth.llamarpc.com", + "https://eth.rpc.blxrbdn.com", + "https://ethereum.public.blockpi.network/v1/rpc/public", + "https://ethereum-mainnet.gateway.tatum.io", + "https://eth.blockrazor.xyz", + "https://api-ethereum-mainnet-reth.n.dwellir.com/2ccf18bf-2916-4198-8856-42172854353c", + "https://eth.merkle.io", + "https://eth-mainnet.nodereal.io/v1/1659dfb40aa24bbb8153a677b98064d7", + "https://rpc.flashbots.net", + "https://rpc.mevblocker.io/fullprivacy", + "https://rpc.mevblocker.io/noreverts", + "https://rpc.fullsend.to", + "https://eth.api.onfinality.io/public", + "https://public-eth.nownodes.io", + "https://openapi.bitstack.com/v1/wNFxbiJyQsSeLrX8RRCHi7NpRxrlErZk/DjShIqLishPCTB9HiMkPHXjUM9CNM9Na/ETH/mainnet", + "https://core.gashawk.io/rpc", + "https://rpc.mevblocker.io", + "https://ethereum.rpc.subquery.network/public" + ], + nativeCurrency: { + name: "Ethereum", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [ + { + name: "Etherscan", + url: "https://etherscan.io", + apiUrl: "https://api.etherscan.io/api" + } + ], + finalityConfirmations: 75, + minBlockConfirmations: 1, + deployments: {} + }, + "10": { + id: "10", + chainSelector: 10, + name: "optimism", + rpcUrls: [ + "https://optimism.drpc.org", + "https://go.getblock.io/e8a75f8dcf614861becfbcb185be6eb4", + "https://gateway.tenderly.co/public/optimism", + "https://mainnet.optimism.io", + "https://1rpc.io/op", + "https://optimism.gateway.tenderly.co", + "https://api-optimism-mainnet-archive.n.dwellir.com/2ccf18bf-2916-4198-8856-42172854353c", + "https://optimism-rpc.publicnode.com", + "https://optimism-public.nodies.app", + "https://public-op-mainnet.fastnode.io", + "https://optimism-mainnet.gateway.tatum.io", + "https://optimism.api.onfinality.io/public", + "https://optimism.public.blockpi.network/v1/rpc/public", + "https://optimism.rpc.subquery.network/public" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [ + { + name: "Optimism Explorer", + url: "https://optimistic.etherscan.io", + apiUrl: "https://api-optimistic.etherscan.io/api" + } + ], + finalityConfirmations: 50, + minBlockConfirmations: 1, + deployments: {} + }, + "137": { + id: "137", + chainSelector: 137, + name: "polygon", + rpcUrls: [ + "https://polygon.drpc.org", + "https://gateway.tenderly.co/public/polygon", + "https://polygon.lava.build", + "https://go.getblock.io/02667b699f05444ab2c64f9bff28f027", + "https://polygon-mainnet.gateway.tatum.io", + "https://polygon-rpc.com", + "https://1rpc.io/matic", + "https://polygon.meowrpc.com", + "https://polygon-bor-rpc.publicnode.com", + "https://polygon-public.nodies.app", + "https://polygon.gateway.tenderly.co", + "https://rpc-mainnet.matic.quiknode.pro", + "https://polygon-mainnet.rpcfast.com?api_key=xbhWBI1Wkguk8SNMu1bvvLurPGLXmgwYeC4S6g2H7WdwFigZSmPWVZRxrskEQwIf", + "https://polygon.rpc.subquery.network/public", + "https://polygon.api.onfinality.io/public", + "https://poly.api.pocket.network" + ], + nativeCurrency: { + name: "POL", + decimals: 18, + symbol: "POL" + }, + blockExplorers: [ + { + name: "PolygonScan", + url: "https://polygonscan.com", + apiUrl: "https://api.polygonscan.com/api" + } + ], + finalityConfirmations: 128, + minBlockConfirmations: 1, + deployments: {} + }, + "8453": { + id: "8453", + chainSelector: 8453, + name: "base", + rpcUrls: [ + "https://base.drpc.org", + "https://base.lava.build", + "https://mainnet.base.org", + "https://gateway.tenderly.co/public/base", + "https://base.meowrpc.com", + "https://base.gateway.tenderly.co", + "https://developer-access-mainnet.base.org", + "https://1rpc.io/base", + "https://base-rpc.publicnode.com", + "https://base-public.nodies.app", + "https://base.public.blockpi.network/v1/rpc/public", + "https://base-mainnet.public.blastapi.io", + "https://base.api.onfinality.io/public", + "https://base.rpc.blxrbdn.com", + "https://base.api.pocket.network", + "https://base.llamarpc.com", + "https://api-base-mainnet-archive.n.dwellir.com/2ccf18bf-2916-4198-8856-42172854353c", + "https://base.rpc.subquery.network/public" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [ + { + name: "Basescan", + url: "https://basescan.org", + apiUrl: "https://api.basescan.org/api" + } + ], + finalityConfirmations: 50, + minBlockConfirmations: 1, + deployments: {} + }, + "42161": { + id: "42161", + chainSelector: 42161, + name: "arbitrum", + rpcUrls: [ + "https://arbitrum.drpc.org", + "https://api-arbitrum-mainnet-archive.n.dwellir.com/2ccf18bf-2916-4198-8856-42172854353c", + "https://arb1.lava.build", + "https://1rpc.io/arb", + "https://arbitrum-one-rpc.publicnode.com", + "https://arbitrum-one-public.nodies.app", + "https://arbitrum.gateway.tenderly.co", + "https://arbitrum-one.public.blastapi.io", + "https://arbitrum.api.onfinality.io/public", + "https://arbitrum.meowrpc.com", + "https://arbitrum.public.blockpi.network/v1/rpc/public", + "https://arb1.arbitrum.io/rpc", + "https://public-arb-mainnet.fastnode.io", + "https://arbitrum.rpc.subquery.network/public" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [ + { + name: "Arbiscan", + url: "https://arbiscan.io", + apiUrl: "https://api.arbiscan.io/api" + } + ], + finalityConfirmations: 4080, + minBlockConfirmations: 1, + deployments: {} + }, + "43114": { + id: "43114", + chainSelector: 43114, + name: "avalanche", + rpcUrls: [ + "https://api.avax.network/ext/bc/C/rpc", + "https://avalanche-mainnet.gateway.tenderly.co", + "https://avalanche.drpc.org", + "https://avax.api.pocket.network", + "https://avalanche-c-chain-rpc.publicnode.com", + "https://1rpc.io/avax/c", + "https://avalanche-public.nodies.app/ext/bc/C/rpc", + "https://avax.meowrpc.com", + "https://avalanche.api.onfinality.io/public/ext/bc/C/rpc", + "https://spectrum-01.simplystaking.xyz/avalanche-mn-rpc/ext/bc/C/rpc" + ], + nativeCurrency: { + name: "Avalanche", + decimals: 18, + symbol: "AVAX" + }, + blockExplorers: [ + { + name: "SnowTrace", + url: "https://snowtrace.io", + apiUrl: "https://api.snowtrace.io/api" + } + ], + finalityConfirmations: 1, + minBlockConfirmations: 1, + deployments: {} + } +}; + +// node_modules/@concero/concero-networks/output/chains.testnet.json +var chains_testnet_default = { + "81": { + id: "81", + isTestnet: true, + chainSelector: 81, + name: "astarShibuya", + rpcUrls: [ + "https://evm.shibuya.astar.network", + "https://evm.shibuya.astar.network", + "https://shibuya.public.blastapi.io", + "https://shibuya-rpc.dwellir.com" + ], + nativeCurrency: { + name: "Astar", + decimals: 18, + symbol: "ASTR" + }, + blockExplorers: [ + { + name: "Subscan", + url: "https://shibuya.subscan.io", + apiUrl: "https://shibuya.subscan.io/api" + } + ], + finalityConfirmations: 6, + minBlockConfirmations: 1, + deployments: {} + }, + "97": { + id: "97", + isTestnet: true, + chainSelector: 97, + name: "bnbTestnet", + rpcUrls: [ + "https://bsc-testnet.drpc.org", + "https://bsc-testnet-rpc.publicnode.com", + "https://data-seed-prebsc-2-s2.bnbchain.org:8545", + "https://data-seed-prebsc-1-s2.bnbchain.org:8545", + "https://data-seed-prebsc-2-s3.bnbchain.org:8545", + "https://data-seed-prebsc-1-s1.bnbchain.org:8545", + "https://data-seed-prebsc-2-s1.bnbchain.org:8545", + "https://data-seed-prebsc-1-s3.bnbchain.org:8545", + "https://bnb-testnet.api.onfinality.io/public" + ], + nativeCurrency: { + name: "BNB", + decimals: 18, + symbol: "tBNB" + }, + blockExplorers: [ + { + name: "BscScan", + url: "https://testnet.bscscan.com", + apiUrl: "https://api-testnet.bscscan.com/api" + } + ], + finalityConfirmations: 7, + minBlockConfirmations: 1, + deployments: { + router: "0xf6BBdC1fD89E554639D7A683909338802B05F160", + relayerLib: "0x3a4EA7fd0CeA70a4B2Cf72c5AC966225C98eE48d", + validatorLib: "0xAEBaacfa9CaC6B8486Ae77843728c863c909E7d0" + } + }, + "133": { + id: "133", + isTestnet: true, + chainSelector: 133, + name: "hashkeyTestnet", + rpcUrls: [], + nativeCurrency: { + name: "HashKey EcoPoints", + decimals: 18, + symbol: "HSK" + }, + blockExplorers: [ + { + name: "Hashkey Explorer", + url: "https://testnet.hashkeyscan.io", + apiUrl: "https://testnet.hashkeyscan.io/api" + } + ], + finalityConfirmations: 1800, + minBlockConfirmations: 1, + deployments: {} + }, + "157": { + id: "157", + isTestnet: true, + chainSelector: 157, + name: "shibariumPuppynet", + rpcUrls: [ + "https://puppynet.shibrpc.com" + ], + nativeCurrency: { + name: "Bone", + decimals: 18, + symbol: "BONE" + }, + blockExplorers: [ + { + name: "Puppyscan", + url: "https://puppyscan.shib.io", + apiUrl: "https://puppyscan.shib.io/api" + } + ], + finalityConfirmations: 60, + minBlockConfirmations: 1, + deployments: { + router: "0xea73Bc856EdD980912Fb8FE4CFC7bba52D980F6A", + relayerLib: "0x9900a9E38E8695eE9109962b9f4671cF977c265a", + validatorLib: "0x39f311124745064935cB196AeE2a950cbbC11336" + } + }, + "195": { + id: "195", + isTestnet: true, + chainSelector: 195, + name: "xlayerSepolia", + rpcUrls: [], + nativeCurrency: { + name: "OKB", + decimals: 18, + symbol: "OKB" + }, + blockExplorers: [ + { + name: "X Layer Explorer", + url: "https://testnet-explorer.xlayer.tech", + apiUrl: "https://testnet-explorer.xlayer.tech/api" + } + ], + finalityConfirmations: 3600, + minBlockConfirmations: 1, + deployments: {} + }, + "296": { + id: "296", + isTestnet: true, + chainSelector: 296, + name: "hederaTestnet", + rpcUrls: [ + "https://testnet.hashio.io/api", + "https://296.rpc.thirdweb.com" + ], + nativeCurrency: { + name: "HBAR", + decimals: 18, + symbol: "HBAR" + }, + blockExplorers: [], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: {} + }, + "300": { + id: "300", + isTestnet: true, + chainSelector: 300, + name: "zksyncSepolia", + rpcUrls: [ + "https://zksync-sepolia.drpc.org", + "https://rpc.ankr.com/zksync_era_sepolia", + "https://sepolia.era.zksync.dev" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [], + finalityConfirmations: 1200, + minBlockConfirmations: 1, + deployments: { + router: "0xBd5EC2962802123f6D8d0092dC485C98e23D1394", + relayerLib: "0x06942a1E6A73069a58306d9E154051b85b32D071", + validatorLib: "0xe277f7afA46291d4c729a184D51D78ae598d54b1" + } + }, + "338": { + id: "338", + isTestnet: true, + chainSelector: 338, + name: "cronosTestnet", + rpcUrls: [ + "https://cro-testnet.gateway.tatum.io", + "https://cronos-testnet.drpc.org", + "https://evm-t3.cronos.org" + ], + nativeCurrency: { + name: "CRO", + decimals: 18, + symbol: "tCRO" + }, + blockExplorers: [ + { + name: "Cronos Explorer", + url: "https://testnet.cronoscan.com", + apiUrl: "https://api-testnet.cronoscan.com/api" + } + ], + finalityConfirmations: 2, + minBlockConfirmations: 1, + deployments: {} + }, + "545": { + id: "545", + isTestnet: true, + chainSelector: 545, + name: "flowTestnet", + rpcUrls: [ + "https://testnet.evm.nodes.onflow.org" + ], + nativeCurrency: { + name: "Flow", + decimals: 18, + symbol: "FLOW" + }, + blockExplorers: [], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: { + router: "0xf6BBdC1fD89E554639D7A683909338802B05F160", + relayerLib: "0x3a4EA7fd0CeA70a4B2Cf72c5AC966225C98eE48d", + validatorLib: "0xAEBaacfa9CaC6B8486Ae77843728c863c909E7d0" + } + }, + "919": { + id: "919", + isTestnet: true, + chainSelector: 919, + name: "modeTestnet", + rpcUrls: [ + "https://mode-testnet.drpc.org", + "https://sepolia.mode.network" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [ + { + name: "Mode Explorer", + url: "https://sepolia.explorer.mode.network", + apiUrl: "https://sepolia.explorer.mode.network/api" + } + ], + finalityConfirmations: 1110, + minBlockConfirmations: 1, + deployments: {} + }, + "943": { + id: "943", + isTestnet: true, + chainSelector: 943, + name: "pulsechainTestnet", + rpcUrls: [ + "https://pulsechain-testnet-rpc.publicnode.com", + "https://rpc-testnet-pulsechain.g4mm4.io", + "https://rpc.v4.testnet.pulsechain.com" + ], + nativeCurrency: { + name: "V4 Pulse", + decimals: 18, + symbol: "v4PLS" + }, + blockExplorers: [], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: { + router: "0xea73Bc856EdD980912Fb8FE4CFC7bba52D980F6A", + relayerLib: "0x9900a9E38E8695eE9109962b9f4671cF977c265a", + validatorLib: "0x39f311124745064935cB196AeE2a950cbbC11336" + } + }, + "1001": { + id: "1001", + isTestnet: true, + chainSelector: 1001, + name: "kaiaKairos", + rpcUrls: [ + "https://klaytn-baobab.drpc.org", + "https://kaia-kairos.blockpi.network/v1/rpc/public", + "https://rpc.ankr.com/kaia_testnet", + "https://public-en-kairos.node.kaia.io" + ], + nativeCurrency: { + name: "KAIA", + decimals: 18, + symbol: "KAIA" + }, + blockExplorers: [], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: {} + }, + "1112": { + id: "1112", + isTestnet: true, + chainSelector: 1112, + name: "wemixTestnet", + rpcUrls: [ + "https://wemix-testnet.drpc.org", + "https://api.test.wemix.com" + ], + nativeCurrency: { + name: "WEMIX", + decimals: 18, + symbol: "tWEMIX" + }, + blockExplorers: [], + finalityConfirmations: 2, + minBlockConfirmations: 1, + deployments: {} + }, + "1114": { + id: "1114", + isTestnet: true, + chainSelector: 1114, + name: "coreTestnet", + rpcUrls: [ + "https://rpc.test2.btcs.network" + ], + nativeCurrency: { + name: "tCORE2", + decimals: 18, + symbol: "tCORE2" + }, + blockExplorers: [ + { + name: "CoreScan", + url: "https://scan.test.btcs.network", + apiUrl: "https://scan.test.btcs.network/api" + } + ], + finalityConfirmations: 7, + minBlockConfirmations: 1, + deployments: { + router: "0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5", + relayerLib: "0x54B8d67AA64CF8A59F604cA6e98c643C64920b03", + validatorLib: "0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a" + } + }, + "1123": { + id: "1123", + isTestnet: true, + finalityTagEnabled: true, + chainSelector: 1123, + name: "b2Testnet", + rpcUrls: [ + "https://rpc.ankr.com/b2_testnet" + ], + nativeCurrency: { + name: "Bitcoin", + decimals: 18, + symbol: "BTC" + }, + blockExplorers: [], + minBlockConfirmations: 1, + deployments: {} + }, + "1174": { + id: "1174", + isTestnet: true, + chainSelector: 1174, + name: "litheumTestnet", + rpcUrls: [ + "https://testnet.litheum.com" + ], + nativeCurrency: { + name: "LTH", + decimals: 18, + symbol: "LTH" + }, + blockExplorers: [], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: {} + }, + "1270": { + id: "1270", + isTestnet: true, + chainSelector: 1270, + name: "irysTestnet", + rpcUrls: [ + "https://testnet-rpc.irys.xyz/v1/execution-rpc", + "testnet-rpc.irys.xyz" + ], + nativeCurrency: { + name: "mIRYS", + decimals: 18, + symbol: "mIRYS" + }, + blockExplorers: [], + finalityConfirmations: 6, + minBlockConfirmations: 1, + deployments: {} + }, + "1301": { + id: "1301", + isTestnet: true, + chainSelector: 1301, + name: "unichainSepolia", + rpcUrls: [ + "https://unichain-sepolia.drpc.org", + "https://unichain-sepolia-rpc.publicnode.com", + "https://unichain-sepolia.api.onfinality.io/public", + "https://sepolia.unichain.org" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [ + { + name: "Unichain Explorer", + url: "https://sepolia-explorer.unichain.network", + apiUrl: "https://sepolia-explorer.unichain.network/api" + } + ], + finalityConfirmations: 1440, + minBlockConfirmations: 1, + deployments: { + router: "0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5", + relayerLib: "0x54B8d67AA64CF8A59F604cA6e98c643C64920b03", + validatorLib: "0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a" + } + }, + "1328": { + id: "1328", + isTestnet: true, + chainSelector: 1328, + name: "seiTestnet", + rpcUrls: [ + "https://sei-testnet.drpc.org", + "https://sei-testnet-public.nodies.app", + "https://evm-rpc-testnet.sei-apis.com" + ], + nativeCurrency: { + name: "Sei", + decimals: 18, + symbol: "SEI" + }, + blockExplorers: [ + { + name: "Sei Explorer", + url: "https://seitrace.com", + apiUrl: "https://seitrace.com/api" + } + ], + finalityConfirmations: 3, + minBlockConfirmations: 1, + deployments: { + router: "0x122947C8c3529DCa006aeE65832D3C3fED6bf3C0", + relayerLib: "0xe965dEBDfa6365CFb9e643ccdCBADE424a2eC381", + validatorLib: "0xB708D151D18e5aB3506934B39375D00EE1e0C882" + } + }, + "1946": { + id: "1946", + isTestnet: true, + chainSelector: 1946, + name: "soneiumMinato", + rpcUrls: [ + "https://soneium-minato.drpc.org", + "https://rpc.minato.soneium.org" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [ + { + name: "Soneium Explorer", + url: "https://minato-explorer.soneium.com", + apiUrl: "https://minato-explorer.soneium.com/api" + } + ], + finalityConfirmations: 810, + minBlockConfirmations: 1, + deployments: {} + }, + "2021": { + id: "2021", + isTestnet: true, + chainSelector: 2021, + name: "roninSaigon", + rpcUrls: [ + "https://saigon-testnet.roninchain.com/rpc", + "https://saigon-testnet.roninchain.com/rpc" + ], + nativeCurrency: { + name: "RON", + decimals: 18, + symbol: "RON" + }, + blockExplorers: [ + { + name: "Ronin Explorer", + url: "https://saigon-explorer.roninchain.com", + apiUrl: "https://saigon-explorer.roninchain.com/api" + } + ], + finalityConfirmations: 4, + minBlockConfirmations: 1, + deployments: { + router: "0xea73Bc856EdD980912Fb8FE4CFC7bba52D980F6A", + relayerLib: "0x9900a9E38E8695eE9109962b9f4671cF977c265a", + validatorLib: "0x39f311124745064935cB196AeE2a950cbbC11336" + } + }, + "2221": { + id: "2221", + isTestnet: true, + chainSelector: 2221, + name: "kavaTestnet", + rpcUrls: [ + "https://kava-testnet.drpc.org", + "https://evm.testnet.kava.io" + ], + nativeCurrency: { + name: "Kava", + decimals: 18, + symbol: "KAVA" + }, + blockExplorers: [], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: {} + }, + "2522": { + id: "2522", + isTestnet: true, + chainSelector: 2522, + name: "fraxtalHolesky", + rpcUrls: [], + nativeCurrency: { + name: "FRAX", + decimals: 18, + symbol: "FRAX" + }, + blockExplorers: [], + finalityConfirmations: 900, + minBlockConfirmations: 1, + deployments: {} + }, + "2810": { + id: "2810", + isTestnet: true, + chainSelector: 2810, + name: "morphHolesky", + rpcUrls: [], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: {} + }, + "3636": { + id: "3636", + isTestnet: true, + chainSelector: 3636, + name: "botanixTestnet", + rpcUrls: [ + "https://rpc.ankr.com/botanix_testnet", + "https://node.botanixlabs.dev" + ], + nativeCurrency: { + name: "Botanix", + decimals: 18, + symbol: "BTC" + }, + blockExplorers: [ + { + name: "Botanix Explorer", + url: "https://testnet-explorer.botanixlabs.xyz", + apiUrl: "https://testnet-explorer.botanixlabs.xyz/api" + } + ], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: {} + }, + "4801": { + id: "4801", + isTestnet: true, + chainSelector: 4801, + name: "worldchainTestnet", + rpcUrls: [ + "https://worldchain-sepolia.drpc.org", + "https://worldchain-sepolia.g.alchemy.com/public", + "https://worldchain-sepolia.gateway.tenderly.co", + "https://4801.rpc.thirdweb.com" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [], + finalityConfirmations: 1200, + minBlockConfirmations: 1, + deployments: { + router: "0xea73Bc856EdD980912Fb8FE4CFC7bba52D980F6A", + relayerLib: "0x9900a9E38E8695eE9109962b9f4671cF977c265a", + validatorLib: "0x39f311124745064935cB196AeE2a950cbbC11336" + } + }, + "5003": { + id: "5003", + isTestnet: true, + chainSelector: 5003, + name: "mantleSepolia", + rpcUrls: [ + "https://mantle-sepolia.drpc.org", + "https://rpc.sepolia.mantle.xyz" + ], + nativeCurrency: { + name: "MNT", + decimals: 18, + symbol: "MNT" + }, + blockExplorers: [ + { + name: "Mantle Explorer", + url: "https://explorer.sepolia.mantle.xyz", + apiUrl: "https://explorer.sepolia.mantle.xyz/api" + } + ], + finalityConfirmations: 840, + minBlockConfirmations: 1, + deployments: {} + }, + "5124": { + id: "5124", + isTestnet: true, + chainSelector: 5124, + name: "seismicDevnet", + rpcUrls: [ + "https://node-2.seismicdev.net/rpc" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: {} + }, + "5611": { + id: "5611", + isTestnet: true, + chainSelector: 5611, + name: "opbnbTestnet", + rpcUrls: [ + "https://opbnb-testnet.drpc.org", + "https://opbnb-testnet-rpc.publicnode.com", + "https://opbnb-testnet-rpc.bnbchain.org", + "https://opbnb-testnet.nodereal.io/v1/e9a36765eb8a40b9bd12e680a1fd2bc5", + "https://opbnb-testnet.nodereal.io/v1/64a9df0874fb4a93b9d0a3849de012d3" + ], + nativeCurrency: { + name: "tBNB", + decimals: 18, + symbol: "tBNB" + }, + blockExplorers: [], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: {} + }, + "6342": { + id: "6342", + isTestnet: true, + chainSelector: 6342, + name: "megaethTestnet", + rpcUrls: [], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [ + { + name: "MegaEth Explorer", + url: "https://explorer-testnet.megaeth.io", + apiUrl: "https://explorer-testnet.megaeth.io/api" + } + ], + finalityConfirmations: 900, + minBlockConfirmations: 1, + deployments: {} + }, + "8408": { + id: "8408", + isTestnet: true, + chainSelector: 8408, + name: "zenchainTestnet", + rpcUrls: [ + "https://zenchain-testnet.api.onfinality.io/public" + ], + nativeCurrency: { + name: "ZTC", + decimals: 18, + symbol: "ZTC" + }, + blockExplorers: [], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: {} + }, + "10143": { + id: "10143", + isTestnet: true, + chainSelector: 10143, + name: "monadTestnet", + rpcUrls: [ + "https://monad-testnet.drpc.org", + "https://rpc.ankr.com/monad_testnet", + "https://testnet-rpc.monad.xyz", + "https://rpc-testnet.monadinfra.com", + "https://monad-testnet.api.onfinality.io/public" + ], + nativeCurrency: { + name: "Testnet MON Token", + decimals: 18, + symbol: "MON" + }, + blockExplorers: [ + { + name: "Monad Explorer", + url: "https://explorer.testnet.monad.xyz", + apiUrl: "https://explorer.testnet.monad.xyz/api" + } + ], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: { + router: "0x3E2Ee768D9fADdd3673a69ED4d0D1d9147FA1054", + relayerLib: "0x9900a9E38E8695eE9109962b9f4671cF977c265a", + validatorLib: "0x39f311124745064935cB196AeE2a950cbbC11336" + } + }, + "10200": { + id: "10200", + isTestnet: true, + chainSelector: 10200, + name: "gnosisChiado", + rpcUrls: [ + "https://gnosis-chiado.drpc.org", + "https://rpc.chiadochain.net", + "https://gnosis-chiado-rpc.publicnode.com", + "https://rpc.chiado.gnosis.gateway.fm" + ], + nativeCurrency: { + name: "Gnosis", + decimals: 18, + symbol: "xDAI" + }, + blockExplorers: [ + { + name: "Blockscout", + url: "https://gnosis-chiado.blockscout.com", + apiUrl: "https://gnosis-chiado.blockscout.com/api" + } + ], + finalityConfirmations: 35, + minBlockConfirmations: 1, + deployments: { + router: "0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5", + relayerLib: "0x54B8d67AA64CF8A59F604cA6e98c643C64920b03", + validatorLib: "0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a" + } + }, + "11124": { + id: "11124", + isTestnet: true, + finalityTagEnabled: true, + chainSelector: 11124, + name: "abstractSepolia", + rpcUrls: [ + "https://abstract-sepolia.drpc.org", + "https://api.testnet.abs.xyz" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [], + minBlockConfirmations: 1, + deployments: {} + }, + "18880": { + id: "18880", + isTestnet: true, + chainSelector: 18880, + name: "expchainTestnet", + rpcUrls: [ + "https://rpc1-testnet.expchain.ai", + "https://expchain.polyhedra.network/rpc1-testnet", + "https://expchain.polyhedra.network/rpc0-testnet", + "https://expchain.polyhedra.network/rpc0-testnet", + "https://expchain.polyhedra.network/rpc1-testnet" + ], + nativeCurrency: { + name: "tZKJ", + decimals: 18, + symbol: "tZKJ" + }, + blockExplorers: [], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: {} + }, + "23295": { + id: "23295", + isTestnet: true, + chainSelector: 23295, + name: "oasissapphireTestnet", + rpcUrls: [ + "https://testnet.sapphire.oasis.io" + ], + nativeCurrency: { + name: "Sapphire Test Rose", + decimals: 18, + symbol: "TEST" + }, + blockExplorers: [], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: { + router: "0xcc9D0438ac3b90fB8291f4f3C1c420E215f36585", + relayerLib: "0x8510C780097cA53aeF8e3527a5107C4629b21f0C", + validatorLib: "0xb31EED4695De3eCE4381a40fA638d9a63904882b" + } + }, + "33111": { + id: "33111", + isTestnet: true, + finalityTagEnabled: true, + chainSelector: 33111, + name: "apechainCurtis", + rpcUrls: [ + "https://apechain-curtis.drpc.org", + "https://curtis.rpc.caldera.xyz/http", + "https://rpc.curtis.apechain.com" + ], + nativeCurrency: { + name: "APE", + decimals: 18, + symbol: "APE" + }, + blockExplorers: [ + { + name: "Apechain Explorer", + url: "https://curtis-explorer.apechain.io", + apiUrl: "https://curtis-explorer.apechain.io/api" + } + ], + minBlockConfirmations: 1, + deployments: {} + }, + "37111": { + id: "37111", + isTestnet: true, + chainSelector: 37111, + name: "lensSepolia", + rpcUrls: [ + "https://rpc.testnet.lens.dev", + "https://lens-testnet.drpc.org" + ], + nativeCurrency: { + name: "GRASS", + decimals: 18, + symbol: "GRASS" + }, + blockExplorers: [], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: {} + }, + "43113": { + id: "43113", + isTestnet: true, + finalityTagEnabled: true, + chainSelector: 43113, + name: "avalancheFuji", + rpcUrls: [ + "https://api.avax-test.network/ext/bc/C/rpc", + "https://avalanche-fuji.drpc.org", + "https://avalanche-fuji-c-chain-rpc.publicnode.com" + ], + nativeCurrency: { + name: "Avalanche Fuji", + decimals: 18, + symbol: "AVAX" + }, + blockExplorers: [ + { + name: "Snowtrace", + url: "https://testnet.snowtrace.io", + apiUrl: "https://api-testnet.snowtrace.io/api" + } + ], + minBlockConfirmations: 1, + deployments: { + router: "0xe965dEBDfa6365CFb9e643ccdCBADE424a2eC381", + relayerLib: "0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a", + validatorLib: "0x246892c38a2314c30E56490ADf1bcf3470DCAE6A" + } + }, + "44787": { + id: "44787", + isTestnet: true, + chainSelector: 44787, + name: "celoAlfajores", + rpcUrls: [], + nativeCurrency: { + name: "CELO", + decimals: 18, + symbol: "A-CELO" + }, + blockExplorers: [ + { + name: "Celoscan", + url: "https://alfajores.celoscan.io", + apiUrl: "https://api-alfajores.celoscan.io/api" + } + ], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: {} + }, + "48899": { + id: "48899", + isTestnet: true, + chainSelector: 48899, + name: "zircuitTestnet", + rpcUrls: [ + "https://testnet.zircuit.com", + "https://zircuit1-testnet.p2pify.com" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [ + { + name: "Zircuit Explorer", + url: "https://explorer.zircuit.com", + apiUrl: "https://explorer.zircuit.com/api" + } + ], + finalityConfirmations: 630, + minBlockConfirmations: 1, + deployments: {} + }, + "57054": { + id: "57054", + isTestnet: true, + chainSelector: 57054, + name: "sonicBlaze", + rpcUrls: [ + "https://sonic-testnet.drpc.org", + "https://sonic-blaze-rpc.publicnode.com", + "https://rpc.blaze.soniclabs.com" + ], + nativeCurrency: { + name: "S", + decimals: 18, + symbol: "S" + }, + blockExplorers: [ + { + name: "Sonic Explorer", + url: "https://explorer-testnet.sonic.guru", + apiUrl: "https://explorer-testnet.sonic.guru/api" + } + ], + finalityConfirmations: 10, + minBlockConfirmations: 1, + deployments: { + router: "0xAEBaacfa9CaC6B8486Ae77843728c863c909E7d0", + relayerLib: "0x13187bb1d2f100F84770a848A1374bf745Ea4cF6", + validatorLib: "0x90D7e742746Abf405036aA21981C835F3E842DA4" + } + }, + "59141": { + id: "59141", + isTestnet: true, + chainSelector: 59141, + name: "lineaSepolia", + rpcUrls: [ + "https://linea-sepolia.drpc.org", + "https://linea-sepolia-rpc.publicnode.com", + "https://rpc.sepolia.linea.build" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [ + { + name: "Linea Explorer", + url: "https://sepolia.lineascan.build", + apiUrl: "https://api-sepolia.lineascan.build/api" + } + ], + finalityConfirmations: 600, + minBlockConfirmations: 1, + deployments: {} + }, + "59902": { + id: "59902", + isTestnet: true, + chainSelector: 59902, + name: "metisSepolia", + rpcUrls: [ + "https://metis-sepolia.gateway.tenderly.co", + "https://metis-sepolia-rpc.publicnode.com", + "https://sepolia.metisdevops.link" + ], + nativeCurrency: { + name: "tMETIS", + decimals: 18, + symbol: "tMETIS" + }, + blockExplorers: [], + finalityConfirmations: 360, + minBlockConfirmations: 1, + deployments: {} + }, + "80002": { + id: "80002", + isTestnet: true, + chainSelector: 80002, + name: "polygonAmoy", + rpcUrls: [ + "https://rpc-amoy.polygon.technology", + "https://polygon-amoy.gateway.tenderly.co", + "https://polygon-amoy.drpc.org", + "https://polygon-amoy-public.nodies.app", + "https://polygon-amoy-bor-rpc.publicnode.com", + "https://polygon-amoy.api.onfinality.io/public" + ], + nativeCurrency: { + name: "POL", + decimals: 18, + symbol: "POL" + }, + blockExplorers: [ + { + name: "PolygonScan", + url: "https://amoy.polygonscan.com", + apiUrl: "https://api-amoy.polygonscan.com/api" + } + ], + finalityConfirmations: 500, + minBlockConfirmations: 1, + deployments: { + router: "0x6FF322BC8da39bC87A056d4052aa763f7BDeE836", + relayerLib: "0x81365cc081dF5fdF6cbD47a34fF4acBcA2B35F0d", + validatorLib: "0x99542DdB261186F818974e579e4aBF3BFb44819e" + } + }, + "80069": { + id: "80069", + isTestnet: true, + chainSelector: 80069, + name: "berachainBepolia", + rpcUrls: [ + "https://bepolia.rpc.berachain.com" + ], + nativeCurrency: { + name: "BERA Token", + decimals: 18, + symbol: "BERA" + }, + blockExplorers: [], + finalityConfirmations: 1, + minBlockConfirmations: 1, + deployments: { + router: "0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5", + relayerLib: "0x54B8d67AA64CF8A59F604cA6e98c643C64920b03", + validatorLib: "0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a" + } + }, + "84532": { + id: "84532", + isTestnet: true, + finalityTagEnabled: true, + chainSelector: 84532, + name: "baseSepolia", + rpcUrls: [ + "https://base-sepolia.gateway.tenderly.co", + "https://sepolia.base.org", + "https://base-sepolia.drpc.org", + "https://base-sepolia-rpc.publicnode.com", + "https://base-sepolia-public.nodies.app", + "https://base-sepolia.api.onfinality.io/public" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [ + { + name: "BaseScan", + url: "https://sepolia.basescan.org", + apiUrl: "https://api-sepolia.basescan.org/api" + }, + { + name: "Blockscout", + url: "https://base-sepolia.blockscout.com", + apiUrl: "https://base-sepolia.blockscout.com/api" + } + ], + minBlockConfirmations: 1, + deployments: { + router: "0xE3d861a49bc5903499fB5Bb411B83d980422c31B", + relayerLib: "0x429E6875Ba6A13cc015e9Eba594e8b42936244C4", + validatorLib: "0x67BE79Df5A37d2a89384D32C2A066d2a7354eD2B" + } + }, + "167009": { + id: "167009", + isTestnet: true, + chainSelector: 167009, + name: "taikoTestnet", + rpcUrls: [], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [], + finalityConfirmations: 20, + minBlockConfirmations: 1, + deployments: {} + }, + "200810": { + id: "200810", + isTestnet: true, + chainSelector: 200810, + name: "bitlayerTestnet", + rpcUrls: [ + "https://rpc.ankr.com/bitlayer_testnet", + "https://testnet-rpc.bitlayer.org", + "https://testnet-rpc.bitlayer-rpc.com" + ], + nativeCurrency: { + name: "Bitcoin", + decimals: 18, + symbol: "BTC" + }, + blockExplorers: [ + { + name: "Bitlayer Explorer", + url: "https://testnet-explorer.bitlayer.org", + apiUrl: "https://testnet-explorer.bitlayer.org/api" + } + ], + finalityConfirmations: 21, + minBlockConfirmations: 1, + deployments: {} + }, + "344100": { + id: "3441006", + isTestnet: true, + chainSelector: 344100, + name: "mantapacificSepolia", + rpcUrls: [ + "https://manta-pacific-sepolia.drpc.org", + "https://manta-sepolia.rpc.caldera.xyz/http", + "https://pacific-rpc.sepolia-testnet.manta.network/http" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: {} + }, + "421614": { + id: "421614", + isTestnet: true, + finalityTagEnabled: true, + chainSelector: 421614, + name: "arbitrumSepolia", + rpcUrls: [ + "https://arbitrum-sepolia.gateway.tenderly.co", + "https://arbitrum-sepolia.drpc.org", + "https://arbitrum-sepolia-testnet.api.pocket.network", + "https://arbitrum-sepolia-rpc.publicnode.com", + "https://sepolia-rollup.arbitrum.io/rpc", + "https://arbitrum-sepolia.api.onfinality.io/public" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [ + { + name: "Arbiscan", + url: "https://sepolia.arbiscan.io", + apiUrl: "https://api-sepolia.arbiscan.io/api" + } + ], + minBlockConfirmations: 1, + deployments: { + router: "0x6c99cC0FCC985fF175787BD2565AfD15781C99d0", + relayerLib: "0x622b5FeBf5Fd44Ab2E7636398F2621FC4E956304", + validatorLib: "0x7F445E3DE6B46cD36887B9f136DBe13298517C1F" + } + }, + "534351": { + id: "534351", + isTestnet: true, + chainSelector: 534351, + name: "scrollSepolia", + rpcUrls: [ + "https://scroll-sepolia.drpc.org", + "https://scroll-sepolia-rpc.publicnode.com", + "https://sepolia-rpc.scroll.io", + "https://scroll-sepolia-public.nodies.app" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [ + { + name: "Scrollscan", + url: "https://sepolia.scrollscan.com", + apiUrl: "https://api-sepolia.scrollscan.com/api" + } + ], + finalityConfirmations: 720, + minBlockConfirmations: 1, + deployments: { + router: "0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5", + relayerLib: "0x54B8d67AA64CF8A59F604cA6e98c643C64920b03", + validatorLib: "0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a" + } + }, + "688689": { + id: "688689", + isTestnet: true, + chainSelector: 688689, + name: "pharosTestnet", + rpcUrls: [ + "https://atlantic.dplabs-internal.com" + ], + nativeCurrency: { + name: "PHRS", + decimals: 18, + symbol: "PHRS" + }, + blockExplorers: [], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: {} + }, + "763373": { + id: "763373", + isTestnet: true, + chainSelector: 763373, + name: "inkSepolia", + rpcUrls: [ + "https://rpc-gel-sepolia.inkonchain.com", + "https://ink-sepolia.drpc.org" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [ + { + name: "Ink Explorer", + url: "https://sepolia.inkscan.io", + apiUrl: "https://sepolia.inkscan.io/api" + } + ], + finalityConfirmations: 3600, + minBlockConfirmations: 1, + deployments: {} + }, + "808813": { + id: "808813", + isTestnet: true, + chainSelector: 808813, + name: "bobSepolia", + rpcUrls: [ + "https://bob-testnet.drpc.org", + "https://bob-sepolia.rpc.gobob.xyz" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [], + finalityConfirmations: 3600, + minBlockConfirmations: 1, + deployments: {} + }, + "1000101": { + id: "1000101", + isTestnet: true, + chainSelector: 1000101, + name: "xomarketTestnet", + rpcUrls: [ + "https://dev-testnet-rpc.xo.market", + "https://testnet-rpc-1.xo.market" + ], + nativeCurrency: { + name: "XO", + decimals: 18, + symbol: "XO" + }, + blockExplorers: [], + finalityConfirmations: 2, + minBlockConfirmations: 1, + deployments: {} + }, + "1234200": { + id: "123420001114", + isTestnet: true, + chainSelector: 1234200, + name: "campv2Testnet", + rpcUrls: [ + "https://rpc.basecamp.t.raas.gelato.cloud" + ], + nativeCurrency: { + name: "Camp", + decimals: 18, + symbol: "CAMP" + }, + blockExplorers: [], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: {} + }, + "1313161": { + id: "1313161555", + isTestnet: true, + finalityTagEnabled: true, + chainSelector: 1313161, + name: "auroraTestnet", + rpcUrls: [ + "https://aurora-testnet.drpc.org", + "https://testnet.aurora.dev" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [], + minBlockConfirmations: 1, + deployments: {} + }, + "1685877": { + id: "168587773", + isTestnet: true, + chainSelector: 1685877, + name: "blastSepolia", + rpcUrls: [ + "https://blast-sepolia.drpc.org", + "https://blast-testnet-public.nodies.app", + "https://sepolia.blast.io" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [ + { + name: "Blastscan", + url: "https://sepolia.blastscan.io", + apiUrl: "https://api-sepolia.blastscan.io/api" + } + ], + finalityConfirmations: 600, + minBlockConfirmations: 1, + deployments: {} + }, + "11155111": { + id: "11155111", + isTestnet: true, + finalityTagEnabled: true, + chainSelector: 11155111, + name: "ethereumSepolia", + rpcUrls: [ + "https://gateway.tenderly.co/public/sepolia", + "https://sepolia.gateway.tenderly.co", + "https://sepolia.drpc.org", + "https://1rpc.io/sepolia", + "https://ethereum-sepolia-public.nodies.app", + "https://0xrpc.io/sep", + "https://ethereum-sepolia-rpc.publicnode.com", + "https://eth-sepolia.api.onfinality.io/public", + "https://eth-sepolia-testnet.api.pocket.network", + "https://ethereum-sepolia.rpc.subquery.network/public" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [ + { + name: "Etherscan", + url: "https://sepolia.etherscan.io", + apiUrl: "https://api-sepolia.etherscan.io/api" + } + ], + minBlockConfirmations: 1, + deployments: { + router: "0x3E0aAA63fFb51169B9aE9b7Dc3616b43362124D6", + relayerLib: "0x8338A0B9c83C0d7E67C267432DF4C8b7cA98e11C", + validatorLib: "0x1A808aa4F1E874763E114AB4fD170460D84A8D54" + } + }, + "11155420": { + id: "11155420", + isTestnet: true, + chainSelector: 11155420, + name: "optimismSepolia", + rpcUrls: [ + "https://sepolia.optimism.io", + "https://optimism-sepolia.gateway.tenderly.co", + "https://optimism-sepolia.drpc.org", + "https://optimism-sepolia-public.nodies.app", + "https://optimism-sepolia.api.onfinality.io/public" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [ + { + name: "Optimism Explorer", + url: "https://sepolia-optimism.etherscan.io", + apiUrl: "https://api-sepolia-optimism.etherscan.io/api" + } + ], + finalityConfirmations: 600, + minBlockConfirmations: 1, + deployments: { + router: "0x25c2037546Bf5B525DfAfe85A662DB519c07bDdB", + relayerLib: "0x6E0b96885Ab0A58e82f2D1ce4df29AF6F5a40089", + validatorLib: "0x0C12fAdDb045bB71C256E36662D56b4b22f1bD58" + } + }, + "11155931": { + id: "11155931", + isTestnet: true, + chainSelector: 11155931, + name: "riseTestnet", + rpcUrls: [ + "https://testnet.riselabs.xyz" + ], + nativeCurrency: { + name: "ETH", + decimals: 18, + symbol: "ETH" + }, + blockExplorers: [], + finalityConfirmations: 0, + minBlockConfirmations: 1, + deployments: {} + } +}; + +// node_modules/viem/_esm/utils/chain/defineChain.js +function defineChain(chain) { + return { + formatters: void 0, + fees: void 0, + serializers: void 0, + ...chain + }; +} + // node_modules/viem/_esm/errors/unit.js init_base(); var InvalidDecimalNumberError = class extends BaseError { @@ -509,6 +2260,267 @@ function parseUnits(value, decimals) { init_abis(); init_formatUnits(); +// src/utils/createViemChain.ts +function createViemChain(chainDefinition) { + return defineChain({ + id: chainDefinition.id, + name: chainDefinition.name, + nativeCurrency: { + decimals: 18, + name: "eth", + symbol: "eth" + }, + rpcUrls: { + default: { http: chainDefinition.rpcUrls } + }, + blockExplorers: chainDefinition.blockExplorer ? { + default: { + name: chainDefinition.blockExplorer.name, + url: chainDefinition.blockExplorer.url + } + } : void 0, + testnet: chainDefinition.isTestnet + }); +} + +// src/utils/getEnvVar.ts +import process2 from "process"; + +// src/utils/log.ts +var reset = "\x1B[0m"; +function log(message, functionName, networkName) { + const greenFill = "\x1B[32m"; + const network = networkName ? `\x1B[35m[${networkName}]${reset}` : ""; + console.log(`${network}${greenFill}[${functionName}]${reset}`, message); +} +function warn(message, functionName) { + const yellowFill = "\x1B[33m"; + console.log(`${yellowFill}[${functionName}]${reset}`, message); +} +var log_default = log; + +// src/utils/getEnvVar.ts +function getEnvVar(key) { + const value = process2.env[key]; + if (value === void 0 || value === "") { + warn(`Missing env variable: ${key}`, "getEnvVar"); + return void 0; + } + return value; +} + +// src/utils/getTrezorDeployEnabled.ts +var getTrezorDeployEnabled = () => getEnvVar("TREZOR_DEPLOY_ENABLED") === "true"; + +// src/utils/getWallet.ts +function getWallet(chainType, accountType, walletType) { + let prefix; + let walletKey; + switch (accountType) { + case "proxyDeployer": + prefix = "PROXY_DEPLOYER"; + break; + case "deployer": + prefix = "DEPLOYER"; + break; + case "operator": + prefix = "OPERATOR"; + break; + case "priceFeedProxyDeployer": + prefix = "PRICE_FEED_PROXY_DEPLOYER"; + break; + default: + throw new Error(`Unknown account type: ${accountType}`); + } + switch (walletType) { + case "privateKey": + walletKey = "PRIVATE_KEY"; + break; + case "address": + walletKey = "ADDRESS"; + break; + default: + throw new Error(`Unknown wallet type: ${walletType}`); + } + const envKey = `${chainType.toUpperCase()}_${prefix}_${walletKey}`; + const walletValue = process.env[envKey]; + if (!walletValue) { + warn(`Missing env variable: ${envKey}`, "getEnvVar"); + } + return walletValue; +} + +// src/utils/updateEnvVariable.ts +import { readFileSync, writeFileSync } from "fs"; +import path from "path"; + +// src/constants/deploymentVariables.ts +var envPrefixes = { + router: "CONCERO_ROUTER", + routerProxy: "CONCERO_ROUTER_PROXY", + routerProxyAdmin: "CONCERO_ROUTER_PROXY_ADMIN", + verifier: "CONCERO_VERIFIER", + verifierProxy: "CONCERO_VERIFIER_PROXY", + verifierProxyAdmin: "CONCERO_VERIFIER_PROXY_ADMIN", + priceFeed: "CONCERO_PRICE_FEED", + priceFeedProxy: "CONCERO_PRICE_FEED_PROXY", + priceFeedProxyAdmin: "CONCERO_PRICE_FEED_PROXY_ADMIN", + lpToken: "LPTOKEN", + pause: "CONCERO_PAUSE", + creValidatorLibProxy: "CONCERO_CRE_VALIDATOR_LIB_PROXY", + creValidatorLibProxyAdmin: "CONCERO_CRE_VALIDATOR_LIB_PROXY_ADMIN", + creValidatorLib: "CONCERO_CRE_VALIDATOR_LIB", + relayerLib: "CONCERO_RELAYER_LIB", + relayerLibProxy: "CONCERO_RELAYER_LIB_PROXY", + relayerLibProxyAdmin: "CONCERO_RELAYER_LIB_PROXY_ADMIN" +}; + +// src/utils/updateEnvVariable.ts +function updateEnvVariable(key, newValue, envFileName) { + const filePath = path.join(__dirname, `../.env.${envFileName}`); + if (!filePath) throw new Error(`File not found: ${filePath}`); + const envContents = readFileSync(filePath, "utf8"); + let lines = envContents.split(/\r?\n/); + if (!lines.some((line) => line.startsWith(`${key}=`))) { + log_default(`Key ${key} not found in .env file. Adding to ${filePath}`, "updateEnvVariable"); + lines.push(`${key}=${newValue}`); + } + const newLines = lines.map((line) => { + let [currentKey, currentValue] = line.split("="); + if (currentKey === key) { + return `${key}=${newValue}`; + } + return line; + }); + writeFileSync(filePath, newLines.join("\n")); + process.env[key] = newValue; +} +function updateEnvAddress(prefix, newValue, envFileName, networkPostfix) { + const searchKey = networkPostfix ? `${envPrefixes[prefix]}_${getNetworkEnvKey(networkPostfix)}` : envPrefixes[prefix]; + updateEnvVariable(searchKey, newValue, envFileName); +} + +// src/constants/conceroNetworks.ts +var mainnetProxyDeployerPK = getWallet( + "mainnet", + "proxyDeployer", + "privateKey" +); +var testnetProxyDeployerPK = getWallet( + "testnet", + "proxyDeployer", + "privateKey" +); +var mainnetDeployerPK = getWallet("mainnet", "deployer", "privateKey"); +var testnetDeployerPK = getWallet("testnet", "deployer", "privateKey"); +var trezorDeployEnabled = getTrezorDeployEnabled(); +var testnetAccounts = [testnetDeployerPK, testnetProxyDeployerPK]; +var networkTypes2 = { + mainnet: "mainnet", + testnet: "testnet", + localhost: "localhost" +}; +function createExtendedNetworks(chains, networkType, accounts) { + const validAccounts = accounts.filter((acc) => !!acc); + return Object.fromEntries( + Object.values(chains).map((chain) => { + const chainDefinition = { + id: parseInt(chain.id), + name: chain.name, + rpcUrls: chain.rpcUrls, + isTestnet: chain.isTestnet ?? false, + ...chain.blockExplorers?.[0] && { + blockExplorer: { + name: chain.blockExplorers[0].name, + url: chain.blockExplorers[0].url + } + } + }; + const viemChain = createViemChain(chainDefinition); + return [ + chain.name, + { + name: chain.name, + chainId: parseInt(chain.id), + type: networkType, + url: chain.rpcUrls[0] || "", + rpcUrls: chain.rpcUrls, + saveDeployments: false, + ...!trezorDeployEnabled && { accounts: validAccounts }, + chainSelector: BigInt(chain.chainSelector), + confirmations: 1, + viemChain, + ...trezorDeployEnabled && { + trezorDerivationPaths: [ + [44, 60, 0, 0, 0], + [44, 60, 0, 0, 1] + ], + trezorInsecureDerivation: true + } + } + ]; + }) + ); +} +var testnetNetworks = createExtendedNetworks( + chains_testnet_default, + networkTypes2.testnet, + testnetAccounts +); +var mainnetNetworks = createExtendedNetworks( + chains_mainnet_default, + networkTypes2.mainnet, + [mainnetDeployerPK, mainnetProxyDeployerPK] +); +var conceroNetworks = { + ...testnetNetworks, + ...mainnetNetworks +}; + +// src/deploy/GenericDeploy.ts +var genericDeploy = async ({ hre, contractName, contractPrefix, txParams }, ...contractConstructorArgs) => { + const [deployer] = await hre.ethers.getSigners(); + const chain = conceroNetworks[hre.network.name]; + log( + `Deploy ${contractName} from address: ${await deployer.getAddress()}`, + "contract deploy", + chain.name + ); + const contractFactory = await hre.ethers.getContractFactory(contractName); + const deployOverrides = txParams?.gasLimit ? { gasLimit: txParams.gasLimit } : {}; + const deployTx = contractFactory.getDeployTransaction( + ...contractConstructorArgs, + deployOverrides + ); + const isTrezorDeployEnabled = getTrezorDeployEnabled(); + if (deployTx.data && isTrezorDeployEnabled) { + log( + `${contractName} input data: ${deployTx.data} + size: ${(deployTx.data.length - 2) / 2}`, + "bytecode", + chain.name + ); + } + const contract = await contractFactory.deploy(...contractConstructorArgs, deployOverrides); + await contract.deploymentTransaction()?.wait(); + const deploymentAddress = await contract.getAddress(); + if (hre.tenderly) { + await hre.tenderly.verify({ name: contractName, address: deploymentAddress }); + } + log( + `Deployed at: ${deploymentAddress}`, + `deploy ${contractName}`, + chain.name + ); + updateEnvAddress( + contractPrefix, + deploymentAddress, + `deployments.${chain.type}`, + chain.name + ); + return contract.deploymentTransaction()?.hash; +}; + // src/tokens/TokenSender.ts var TokenSender = class { walletClient; @@ -605,7 +2617,7 @@ async function hardhatDeployWrapper(contractName, { publicClient, proxy = false, gasLimit, - log = false, + log: log2 = false, libraries, skipIfAlreadyDeployed = false }) { @@ -623,7 +2635,7 @@ async function hardhatDeployWrapper(contractName, { }); const gasData = await getActualGasData(publicClient); const waitConfirmations = hre.network.name.startsWith("ethereum") ? 1 : 3; - if (log) { + if (log2) { console.log( `\x1B[34m[hardhatDeployWrapper]\x1B[0m\x1B[35m[args]\x1B[0m`, { @@ -660,6 +2672,7 @@ async function hardhatDeployWrapper(contractName, { export { TokenSender, config, + genericDeploy, getNetworkEnvKey, getNetworkKey, hardhatDeployWrapper, diff --git a/dist/index.esm.js.map b/dist/index.esm.js.map index bbe00e2..e7ee8a1 100644 --- a/dist/index.esm.js.map +++ b/dist/index.esm.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../node_modules/viem/errors/version.ts", "../node_modules/viem/errors/base.ts", "../node_modules/viem/utils/unit/formatUnits.ts", "../node_modules/viem/constants/abis.ts", "../src/constants/config.ts", "../src/networks/getNetworkEnvKey.ts", "../src/networks/networkTypes.ts", "../node_modules/viem/errors/unit.ts", "../node_modules/viem/utils/unit/parseUnits.ts", "../node_modules/viem/index.ts", "../src/tokens/TokenSender.ts", "../src/deploy/getActualGasData.ts", "../src/deploy/hardhatDeployWrapper.ts"], - "sourcesContent": ["export const version = '2.24.2'\n", "import { version } from './version.js'\n\ntype ErrorConfig = {\n getDocsUrl?: ((args: BaseErrorParameters) => string | undefined) | undefined\n version?: string | undefined\n}\n\nlet errorConfig: ErrorConfig = {\n getDocsUrl: ({\n docsBaseUrl,\n docsPath = '',\n docsSlug,\n }: BaseErrorParameters) =>\n docsPath\n ? `${docsBaseUrl ?? 'https://viem.sh'}${docsPath}${\n docsSlug ? `#${docsSlug}` : ''\n }`\n : undefined,\n version: `viem@${version}`,\n}\n\nexport function setErrorConfig(config: ErrorConfig) {\n errorConfig = config\n}\n\ntype BaseErrorParameters = {\n cause?: BaseError | Error | undefined\n details?: string | undefined\n docsBaseUrl?: string | undefined\n docsPath?: string | undefined\n docsSlug?: string | undefined\n metaMessages?: string[] | undefined\n name?: string | undefined\n}\n\nexport type BaseErrorType = BaseError & { name: 'BaseError' }\nexport class BaseError extends Error {\n details: string\n docsPath?: string | undefined\n metaMessages?: string[] | undefined\n shortMessage: string\n version: string\n\n override name = 'BaseError'\n\n constructor(shortMessage: string, args: BaseErrorParameters = {}) {\n const details = (() => {\n if (args.cause instanceof BaseError) return args.cause.details\n if (args.cause?.message) return args.cause.message\n return args.details!\n })()\n const docsPath = (() => {\n if (args.cause instanceof BaseError)\n return args.cause.docsPath || args.docsPath\n return args.docsPath\n })()\n const docsUrl = errorConfig.getDocsUrl?.({ ...args, docsPath })\n\n const message = [\n shortMessage || 'An error occurred.',\n '',\n ...(args.metaMessages ? [...args.metaMessages, ''] : []),\n ...(docsUrl ? [`Docs: ${docsUrl}`] : []),\n ...(details ? [`Details: ${details}`] : []),\n ...(errorConfig.version ? [`Version: ${errorConfig.version}`] : []),\n ].join('\\n')\n\n super(message, args.cause ? { cause: args.cause } : undefined)\n\n this.details = details\n this.docsPath = docsPath\n this.metaMessages = args.metaMessages\n this.name = args.name ?? this.name\n this.shortMessage = shortMessage\n this.version = version\n }\n\n walk(): Error\n walk(fn: (err: unknown) => boolean): Error | null\n walk(fn?: any): any {\n return walk(this, fn)\n }\n}\n\nfunction walk(\n err: unknown,\n fn?: ((err: unknown) => boolean) | undefined,\n): unknown {\n if (fn?.(err)) return err\n if (\n err &&\n typeof err === 'object' &&\n 'cause' in err &&\n err.cause !== undefined\n )\n return walk(err.cause, fn)\n return fn ? null : err\n}\n", "import type { ErrorType } from '../../errors/utils.js'\n\nexport type FormatUnitsErrorType = ErrorType\n\n/**\n * Divides a number by a given exponent of base 10 (10exponent), and formats it into a string representation of the number..\n *\n * - Docs: https://viem.sh/docs/utilities/formatUnits\n *\n * @example\n * import { formatUnits } from 'viem'\n *\n * formatUnits(420000000000n, 9)\n * // '420'\n */\nexport function formatUnits(value: bigint, decimals: number) {\n let display = value.toString()\n\n const negative = display.startsWith('-')\n if (negative) display = display.slice(1)\n\n display = display.padStart(decimals, '0')\n\n let [integer, fraction] = [\n display.slice(0, display.length - decimals),\n display.slice(display.length - decimals),\n ]\n fraction = fraction.replace(/(0+)$/, '')\n return `${negative ? '-' : ''}${integer || '0'}${\n fraction ? `.${fraction}` : ''\n }`\n}\n", "/* [Multicall3](https://github.com/mds1/multicall) */\nexport const multicall3Abi = [\n {\n inputs: [\n {\n components: [\n {\n name: 'target',\n type: 'address',\n },\n {\n name: 'allowFailure',\n type: 'bool',\n },\n {\n name: 'callData',\n type: 'bytes',\n },\n ],\n name: 'calls',\n type: 'tuple[]',\n },\n ],\n name: 'aggregate3',\n outputs: [\n {\n components: [\n {\n name: 'success',\n type: 'bool',\n },\n {\n name: 'returnData',\n type: 'bytes',\n },\n ],\n name: 'returnData',\n type: 'tuple[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n] as const\n\nconst universalResolverErrors = [\n {\n inputs: [],\n name: 'ResolverNotFound',\n type: 'error',\n },\n {\n inputs: [],\n name: 'ResolverWildcardNotSupported',\n type: 'error',\n },\n {\n inputs: [],\n name: 'ResolverNotContract',\n type: 'error',\n },\n {\n inputs: [\n {\n name: 'returnData',\n type: 'bytes',\n },\n ],\n name: 'ResolverError',\n type: 'error',\n },\n {\n inputs: [\n {\n components: [\n {\n name: 'status',\n type: 'uint16',\n },\n {\n name: 'message',\n type: 'string',\n },\n ],\n name: 'errors',\n type: 'tuple[]',\n },\n ],\n name: 'HttpError',\n type: 'error',\n },\n] as const\n\nexport const universalResolverResolveAbi = [\n ...universalResolverErrors,\n {\n name: 'resolve',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'name', type: 'bytes' },\n { name: 'data', type: 'bytes' },\n ],\n outputs: [\n { name: '', type: 'bytes' },\n { name: 'address', type: 'address' },\n ],\n },\n {\n name: 'resolve',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'name', type: 'bytes' },\n { name: 'data', type: 'bytes' },\n { name: 'gateways', type: 'string[]' },\n ],\n outputs: [\n { name: '', type: 'bytes' },\n { name: 'address', type: 'address' },\n ],\n },\n] as const\n\nexport const universalResolverReverseAbi = [\n ...universalResolverErrors,\n {\n name: 'reverse',\n type: 'function',\n stateMutability: 'view',\n inputs: [{ type: 'bytes', name: 'reverseName' }],\n outputs: [\n { type: 'string', name: 'resolvedName' },\n { type: 'address', name: 'resolvedAddress' },\n { type: 'address', name: 'reverseResolver' },\n { type: 'address', name: 'resolver' },\n ],\n },\n {\n name: 'reverse',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { type: 'bytes', name: 'reverseName' },\n { type: 'string[]', name: 'gateways' },\n ],\n outputs: [\n { type: 'string', name: 'resolvedName' },\n { type: 'address', name: 'resolvedAddress' },\n { type: 'address', name: 'reverseResolver' },\n { type: 'address', name: 'resolver' },\n ],\n },\n] as const\n\nexport const textResolverAbi = [\n {\n name: 'text',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'name', type: 'bytes32' },\n { name: 'key', type: 'string' },\n ],\n outputs: [{ name: '', type: 'string' }],\n },\n] as const\n\nexport const addressResolverAbi = [\n {\n name: 'addr',\n type: 'function',\n stateMutability: 'view',\n inputs: [{ name: 'name', type: 'bytes32' }],\n outputs: [{ name: '', type: 'address' }],\n },\n {\n name: 'addr',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'name', type: 'bytes32' },\n { name: 'coinType', type: 'uint256' },\n ],\n outputs: [{ name: '', type: 'bytes' }],\n },\n] as const\n\n// ERC-1271\n// isValidSignature(bytes32 hash, bytes signature) \u2192 bytes4 magicValue\n/** @internal */\nexport const smartAccountAbi = [\n {\n name: 'isValidSignature',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'hash', type: 'bytes32' },\n { name: 'signature', type: 'bytes' },\n ],\n outputs: [{ name: '', type: 'bytes4' }],\n },\n] as const\n\n// ERC-6492 - universal deployless signature validator contract\n// constructor(address _signer, bytes32 _hash, bytes _signature) \u2192 bytes4 returnValue\n// returnValue is either 0x1 (valid) or 0x0 (invalid)\nexport const universalSignatureValidatorAbi = [\n {\n inputs: [\n {\n name: '_signer',\n type: 'address',\n },\n {\n name: '_hash',\n type: 'bytes32',\n },\n {\n name: '_signature',\n type: 'bytes',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'constructor',\n },\n {\n inputs: [\n {\n name: '_signer',\n type: 'address',\n },\n {\n name: '_hash',\n type: 'bytes32',\n },\n {\n name: '_signature',\n type: 'bytes',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n name: 'isValidSig',\n },\n] as const\n\n/** [ERC-20 Token Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-20) */\nexport const erc20Abi = [\n {\n type: 'event',\n name: 'Approval',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'event',\n name: 'Transfer',\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'allowance',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'spender',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'approve',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'balanceOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'decimals',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint8',\n },\n ],\n },\n {\n type: 'function',\n name: 'name',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'symbol',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'totalSupply',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'transfer',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'transferFrom',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'sender',\n type: 'address',\n },\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n] as const\n\n/**\n * [bytes32-flavored ERC-20](https://docs.makerdao.com/smart-contract-modules/mkr-module#4.-gotchas-potential-source-of-user-error)\n * for tokens (ie. Maker) that use bytes32 instead of string.\n */\nexport const erc20Abi_bytes32 = [\n {\n type: 'event',\n name: 'Approval',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'event',\n name: 'Transfer',\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'allowance',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'spender',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'approve',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'balanceOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'decimals',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint8',\n },\n ],\n },\n {\n type: 'function',\n name: 'name',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'bytes32',\n },\n ],\n },\n {\n type: 'function',\n name: 'symbol',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'bytes32',\n },\n ],\n },\n {\n type: 'function',\n name: 'totalSupply',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'transfer',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'transferFrom',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'sender',\n type: 'address',\n },\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n] as const\n\n/** [ERC-721 Non-Fungible Token Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-721) */\nexport const erc721Abi = [\n {\n type: 'event',\n name: 'Approval',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: true,\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'event',\n name: 'ApprovalForAll',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'operator',\n type: 'address',\n },\n {\n indexed: false,\n name: 'approved',\n type: 'bool',\n },\n ],\n },\n {\n type: 'event',\n name: 'Transfer',\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: true,\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'approve',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'balanceOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'getApproved',\n stateMutability: 'view',\n inputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'address',\n },\n ],\n },\n {\n type: 'function',\n name: 'isApprovedForAll',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'operator',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'name',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'ownerOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n name: 'owner',\n type: 'address',\n },\n ],\n },\n {\n type: 'function',\n name: 'safeTransferFrom',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'from',\n type: 'address',\n },\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'safeTransferFrom',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'from',\n type: 'address',\n },\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'id',\n type: 'uint256',\n },\n {\n name: 'data',\n type: 'bytes',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'setApprovalForAll',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'operator',\n type: 'address',\n },\n {\n name: 'approved',\n type: 'bool',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'symbol',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'tokenByIndex',\n stateMutability: 'view',\n inputs: [\n {\n name: 'index',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'tokenByIndex',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'index',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'tokenURI',\n stateMutability: 'view',\n inputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'totalSupply',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'transferFrom',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'sender',\n type: 'address',\n },\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'tokeId',\n type: 'uint256',\n },\n ],\n outputs: [],\n },\n] as const\n\n/** [ERC-4626 Tokenized Vaults Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-4626) */\nexport const erc4626Abi = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'Approval',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'sender',\n type: 'address',\n },\n {\n indexed: true,\n name: 'receiver',\n type: 'address',\n },\n {\n indexed: false,\n name: 'assets',\n type: 'uint256',\n },\n {\n indexed: false,\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'Deposit',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'Transfer',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'sender',\n type: 'address',\n },\n {\n indexed: true,\n name: 'receiver',\n type: 'address',\n },\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: false,\n name: 'assets',\n type: 'uint256',\n },\n {\n indexed: false,\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'Withdraw',\n type: 'event',\n },\n {\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'spender',\n type: 'address',\n },\n ],\n name: 'allowance',\n outputs: [\n {\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'approve',\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'asset',\n outputs: [\n {\n name: 'assetTokenAddress',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n name: 'balanceOf',\n outputs: [\n {\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'convertToAssets',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n name: 'convertToShares',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n ],\n name: 'deposit',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'caller',\n type: 'address',\n },\n ],\n name: 'maxDeposit',\n outputs: [\n {\n name: 'maxAssets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'caller',\n type: 'address',\n },\n ],\n name: 'maxMint',\n outputs: [\n {\n name: 'maxShares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'maxRedeem',\n outputs: [\n {\n name: 'maxShares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'maxWithdraw',\n outputs: [\n {\n name: 'maxAssets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n ],\n name: 'mint',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n name: 'previewDeposit',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'previewMint',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'previewRedeem',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n name: 'previewWithdraw',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'redeem',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'totalAssets',\n outputs: [\n {\n name: 'totalManagedAssets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'totalSupply',\n outputs: [\n {\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'transfer',\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'from',\n type: 'address',\n },\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'transferFrom',\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'withdraw',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const\n", "export const config = {\n DEFAULT_BLOCK_CONFIRMATIONS: 2,\n};\n", "/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkEnvKey(networkName: string): string {\n if (!networkName) {\n throw new Error('Network name must be provided');\n }\n return camelCaseToCapsSnakeCase(networkName);\n}\n\n/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkKey(NETWORK_NAME: string): string {\n if (!NETWORK_NAME) {\n throw new Error('Network name must be provided');\n }\n return capsSnakeCaseToCamelCase(NETWORK_NAME);\n}\n\n/**\n * Converts a string from CAPS_SNAKE_CASE to camelCase\n *\n * @param snakeCaseString The string in CAPS_SNAKE_CASE format\n * @returns The string converted to camelCase format\n */\nexport function capsSnakeCaseToCamelCase(snakeCaseString: string): string {\n if (!snakeCaseString) {\n throw new Error('String must be provided');\n }\n\n return snakeCaseString\n .toLowerCase()\n .replace(/_([a-z])/g, (_, char) => char.toUpperCase());\n}\n\n/**\n * Converts a string from camelCase to CAPS_SNAKE_CASE\n *\n * @param camelCaseString The string in camelCase format\n * @returns The string converted to CAPS_SNAKE_CASE format\n */\nexport function camelCaseToCapsSnakeCase(camelCaseString: string): string {\n if (!camelCaseString) {\n throw new Error('String must be provided');\n }\n\n return camelCaseString.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toUpperCase();\n}\n\nexport function getNetworkName(networkEnvKey: string): string {\n if (!networkEnvKey) {\n throw new Error('Network name must be provided');\n }\n\n return networkEnvKey\n .toLowerCase()\n .split('_')\n .map((word, index) =>\n index === 0 ? word : word[0].toUpperCase() + word.slice(1)\n )\n .join('');\n}\n", "import { type NetworkType } from './types';\n\nexport const networkTypes: Record = {\n mainnet: 'mainnet',\n testnet: 'testnet',\n localhost: 'localhost',\n};\n", "import { BaseError } from './base.js'\n\nexport type InvalidDecimalNumberErrorType = InvalidDecimalNumberError & {\n name: 'InvalidDecimalNumberError'\n}\nexport class InvalidDecimalNumberError extends BaseError {\n constructor({ value }: { value: string }) {\n super(`Number \\`${value}\\` is not a valid decimal number.`, {\n name: 'InvalidDecimalNumberError',\n })\n }\n}\n", "import { InvalidDecimalNumberError } from '../../errors/unit.js'\nimport type { ErrorType } from '../../errors/utils.js'\n\nexport type ParseUnitsErrorType = ErrorType\n\n/**\n * Multiplies a string representation of a number by a given exponent of base 10 (10exponent).\n *\n * - Docs: https://viem.sh/docs/utilities/parseUnits\n *\n * @example\n * import { parseUnits } from 'viem'\n *\n * parseUnits('420', 9)\n * // 420000000000n\n */\nexport function parseUnits(value: string, decimals: number) {\n if (!/^(-?)([0-9]*)\\.?([0-9]*)$/.test(value))\n throw new InvalidDecimalNumberError({ value })\n\n let [integer, fraction = '0'] = value.split('.')\n\n const negative = integer.startsWith('-')\n if (negative) integer = integer.slice(1)\n\n // trim trailing zeros.\n fraction = fraction.replace(/(0+)$/, '')\n\n // round off if the fraction is larger than the number of decimals.\n if (decimals === 0) {\n if (Math.round(Number(`.${fraction}`)) === 1)\n integer = `${BigInt(integer) + 1n}`\n fraction = ''\n } else if (fraction.length > decimals) {\n const [left, unit, right] = [\n fraction.slice(0, decimals - 1),\n fraction.slice(decimals - 1, decimals),\n fraction.slice(decimals),\n ]\n\n const rounded = Math.round(Number(`${unit}.${right}`))\n if (rounded > 9)\n fraction = `${BigInt(left) + BigInt(1)}0`.padStart(left.length + 1, '0')\n else fraction = `${left}${rounded}`\n\n if (fraction.length > decimals) {\n fraction = fraction.slice(1)\n integer = `${BigInt(integer) + 1n}`\n }\n\n fraction = fraction.slice(0, decimals)\n } else {\n fraction = fraction.padEnd(decimals, '0')\n }\n\n return BigInt(`${negative ? '-' : ''}${integer}${fraction}`)\n}\n", "// biome-ignore lint/performance/noBarrelFile: entrypoint module\nexport {\n type Abi,\n type AbiFunction,\n type AbiParameter,\n type AbiEvent,\n type AbiStateMutability,\n type AbiParameterKind,\n type AbiParameterToPrimitiveType,\n type Address,\n type Narrow,\n type ParseAbi,\n type ParseAbiItem,\n type ParseAbiParameter,\n type ParseAbiParameters,\n type ResolvedRegister,\n type TypedData,\n type TypedDataDomain,\n type TypedDataParameter,\n CircularReferenceError,\n InvalidAbiParameterError,\n InvalidAbiParametersError,\n InvalidAbiItemError,\n InvalidAbiTypeParameterError,\n InvalidFunctionModifierError,\n InvalidModifierError,\n InvalidParameterError,\n InvalidParenthesisError,\n InvalidSignatureError,\n InvalidStructSignatureError,\n SolidityProtectedKeywordError,\n UnknownTypeError,\n UnknownSignatureError,\n parseAbi,\n parseAbiItem,\n parseAbiParameter,\n parseAbiParameters,\n} from 'abitype'\nexport type {\n BlockOverrides,\n Rpc as RpcBlockOverrides,\n} from 'ox/BlockOverrides'\n\nexport {\n getContract,\n type GetContractErrorType,\n type GetContractParameters,\n type GetContractReturnType,\n} from './actions/getContract.js'\nexport {\n type GetContractEventsErrorType,\n type GetContractEventsParameters,\n type GetContractEventsReturnType,\n} from './actions/public/getContractEvents.js'\nexport {\n type GetEip712DomainErrorType,\n type GetEip712DomainParameters,\n type GetEip712DomainReturnType,\n} from './actions/public/getEip712Domain.js'\nexport {\n type AddChainErrorType,\n type AddChainParameters,\n} from './actions/wallet/addChain.js'\nexport {\n type CallErrorType,\n type CallParameters,\n type CallReturnType,\n} from './actions/public/call.js'\nexport type {\n CreateAccessListParameters,\n CreateAccessListReturnType,\n CreateAccessListErrorType,\n} from './actions/public/createAccessList.js'\nexport type {\n CreateBlockFilterErrorType,\n CreateBlockFilterReturnType,\n} from './actions/public/createBlockFilter.js'\nexport type {\n CreateContractEventFilterErrorType,\n CreateContractEventFilterParameters,\n CreateContractEventFilterReturnType,\n} from './actions/public/createContractEventFilter.js'\nexport type {\n CreateEventFilterErrorType,\n CreateEventFilterParameters,\n CreateEventFilterReturnType,\n} from './actions/public/createEventFilter.js'\nexport type {\n CreatePendingTransactionFilterErrorType,\n CreatePendingTransactionFilterReturnType,\n} from './actions/public/createPendingTransactionFilter.js'\nexport type {\n DeployContractErrorType,\n DeployContractParameters,\n DeployContractReturnType,\n} from './actions/wallet/deployContract.js'\nexport type {\n DropTransactionErrorType,\n DropTransactionParameters,\n} from './actions/test/dropTransaction.js'\nexport type {\n DumpStateErrorType,\n DumpStateReturnType,\n} from './actions/test/dumpState.js'\nexport type {\n GetAutomineErrorType,\n GetAutomineReturnType,\n} from './actions/test/getAutomine.js'\nexport type {\n EstimateContractGasErrorType,\n EstimateContractGasParameters,\n EstimateContractGasReturnType,\n} from './actions/public/estimateContractGas.js'\nexport type {\n EstimateGasErrorType,\n EstimateGasParameters,\n EstimateGasReturnType,\n} from './actions/public/estimateGas.js'\nexport type {\n EstimateFeesPerGasErrorType,\n EstimateFeesPerGasParameters,\n EstimateFeesPerGasReturnType,\n} from './actions/public/estimateFeesPerGas.js'\nexport type {\n EstimateMaxPriorityFeePerGasErrorType,\n EstimateMaxPriorityFeePerGasParameters,\n EstimateMaxPriorityFeePerGasReturnType,\n} from './actions/public/estimateMaxPriorityFeePerGas.js'\nexport type {\n GetAddressesErrorType,\n GetAddressesReturnType,\n} from './actions/wallet/getAddresses.js'\nexport type {\n GetBalanceErrorType,\n GetBalanceParameters,\n GetBalanceReturnType,\n} from './actions/public/getBalance.js'\nexport type {\n GetBlobBaseFeeErrorType,\n GetBlobBaseFeeReturnType,\n} from './actions/public/getBlobBaseFee.js'\nexport type {\n GetBlockNumberErrorType,\n GetBlockNumberParameters,\n GetBlockNumberReturnType,\n} from './actions/public/getBlockNumber.js'\nexport type {\n GetBlockErrorType,\n GetBlockParameters,\n GetBlockReturnType,\n} from './actions/public/getBlock.js'\nexport type {\n GetBlockTransactionCountErrorType,\n GetBlockTransactionCountParameters,\n GetBlockTransactionCountReturnType,\n} from './actions/public/getBlockTransactionCount.js'\nexport type {\n /** @deprecated Use `GetCodeErrorType` instead */\n GetCodeErrorType as GetBytecodeErrorType,\n /** @deprecated Use `GetCodeParameters` instead */\n GetCodeParameters as GetBytecodeParameters,\n /** @deprecated Use `GetCodeReturnType` instead */\n GetCodeReturnType as GetBytecodeReturnType,\n GetCodeErrorType,\n GetCodeParameters,\n GetCodeReturnType,\n} from './actions/public/getCode.js'\nexport type {\n GetChainIdErrorType,\n GetChainIdReturnType,\n} from './actions/public/getChainId.js'\nexport type {\n GetEnsAddressErrorType,\n GetEnsAddressParameters,\n GetEnsAddressReturnType,\n} from './actions/ens/getEnsAddress.js'\nexport type {\n GetEnsAvatarErrorType,\n GetEnsAvatarParameters,\n GetEnsAvatarReturnType,\n} from './actions/ens/getEnsAvatar.js'\nexport type {\n GetEnsNameErrorType,\n GetEnsNameParameters,\n GetEnsNameReturnType,\n} from './actions/ens/getEnsName.js'\nexport type {\n GetEnsResolverErrorType,\n GetEnsResolverParameters,\n GetEnsResolverReturnType,\n} from './actions/ens/getEnsResolver.js'\nexport type {\n GetEnsTextErrorType,\n GetEnsTextParameters,\n GetEnsTextReturnType,\n} from './actions/ens/getEnsText.js'\nexport type {\n GetFeeHistoryErrorType,\n GetFeeHistoryParameters,\n GetFeeHistoryReturnType,\n} from './actions/public/getFeeHistory.js'\nexport type {\n GetFilterChangesErrorType,\n GetFilterChangesParameters,\n GetFilterChangesReturnType,\n} from './actions/public/getFilterChanges.js'\nexport type {\n GetFilterLogsErrorType,\n GetFilterLogsParameters,\n GetFilterLogsReturnType,\n} from './actions/public/getFilterLogs.js'\nexport type {\n GetGasPriceErrorType,\n GetGasPriceReturnType,\n} from './actions/public/getGasPrice.js'\nexport type {\n GetLogsErrorType,\n GetLogsParameters,\n GetLogsReturnType,\n} from './actions/public/getLogs.js'\nexport type {\n GetPermissionsErrorType,\n GetPermissionsReturnType,\n} from './actions/wallet/getPermissions.js'\nexport type {\n GetProofErrorType,\n GetProofParameters,\n GetProofReturnType,\n} from './actions/public/getProof.js'\nexport type {\n GetStorageAtErrorType,\n GetStorageAtParameters,\n GetStorageAtReturnType,\n} from './actions/public/getStorageAt.js'\nexport type {\n GetTransactionConfirmationsErrorType,\n GetTransactionConfirmationsParameters,\n GetTransactionConfirmationsReturnType,\n} from './actions/public/getTransactionConfirmations.js'\nexport type {\n GetTransactionCountErrorType,\n GetTransactionCountParameters,\n GetTransactionCountReturnType,\n} from './actions/public/getTransactionCount.js'\nexport type {\n GetTransactionErrorType,\n GetTransactionParameters,\n GetTransactionReturnType,\n} from './actions/public/getTransaction.js'\nexport type {\n GetTransactionReceiptErrorType,\n GetTransactionReceiptParameters,\n GetTransactionReceiptReturnType,\n} from './actions/public/getTransactionReceipt.js'\nexport type {\n ImpersonateAccountErrorType,\n ImpersonateAccountParameters,\n} from './actions/test/impersonateAccount.js'\nexport type {\n IncreaseTimeErrorType,\n IncreaseTimeParameters,\n} from './actions/test/increaseTime.js'\nexport type {\n LoadStateErrorType,\n LoadStateParameters,\n LoadStateReturnType,\n} from './actions/test/loadState.js'\nexport type { MineErrorType, MineParameters } from './actions/test/mine.js'\nexport type {\n MulticallErrorType,\n MulticallParameters,\n MulticallReturnType,\n} from './actions/public/multicall.js'\nexport type { SnapshotErrorType } from './actions/test/snapshot.js'\nexport type {\n SimulateBlocksParameters,\n SimulateBlocksReturnType,\n SimulateBlocksErrorType,\n} from './actions/public/simulateBlocks.js'\nexport type {\n SimulateCallsParameters,\n SimulateCallsReturnType,\n SimulateCallsErrorType,\n} from './actions/public/simulateCalls.js'\nexport type {\n GetMutabilityAwareValue,\n SimulateContractParameters,\n SimulateContractReturnType,\n SimulateContractErrorType,\n} from './actions/public/simulateContract.js'\nexport type {\n OnBlock,\n OnBlockParameter,\n WatchBlocksErrorType,\n WatchBlocksParameters,\n WatchBlocksReturnType,\n} from './actions/public/watchBlocks.js'\nexport type {\n OnBlockNumberFn,\n OnBlockNumberParameter,\n WatchBlockNumberErrorType,\n WatchBlockNumberParameters,\n WatchBlockNumberReturnType,\n} from './actions/public/watchBlockNumber.js'\nexport type {\n WatchEventOnLogsFn,\n WatchEventOnLogsParameter,\n WatchEventErrorType,\n WatchEventParameters,\n WatchEventReturnType,\n} from './actions/public/watchEvent.js'\nexport type {\n OnTransactionsFn,\n OnTransactionsParameter,\n WatchPendingTransactionsErrorType,\n WatchPendingTransactionsParameters,\n WatchPendingTransactionsReturnType,\n} from './actions/public/watchPendingTransactions.js'\nexport type {\n ReadContractErrorType,\n ReadContractParameters,\n ReadContractReturnType,\n} from './actions/public/readContract.js'\nexport type {\n ReplacementReason,\n ReplacementReturnType,\n WaitForTransactionReceiptErrorType,\n WaitForTransactionReceiptParameters,\n WaitForTransactionReceiptReturnType,\n} from './actions/public/waitForTransactionReceipt.js'\nexport type {\n RequestAddressesErrorType,\n RequestAddressesReturnType,\n} from './actions/wallet/requestAddresses.js'\nexport type {\n RequestPermissionsErrorType,\n RequestPermissionsReturnType,\n RequestPermissionsParameters,\n} from './actions/wallet/requestPermissions.js'\nexport type {\n GetTxpoolContentErrorType,\n GetTxpoolContentReturnType,\n} from './actions/test/getTxpoolContent.js'\nexport type {\n GetTxpoolStatusErrorType,\n GetTxpoolStatusReturnType,\n} from './actions/test/getTxpoolStatus.js'\nexport type {\n InspectTxpoolErrorType,\n InspectTxpoolReturnType,\n} from './actions/test/inspectTxpool.js'\nexport type { RemoveBlockTimestampIntervalErrorType } from './actions/test/removeBlockTimestampInterval.js'\nexport type { ResetErrorType, ResetParameters } from './actions/test/reset.js'\nexport type {\n RevertErrorType,\n RevertParameters,\n} from './actions/test/revert.js'\nexport type {\n SendRawTransactionErrorType,\n SendRawTransactionParameters,\n SendRawTransactionReturnType,\n} from './actions/wallet/sendRawTransaction.js'\nexport type {\n SendTransactionErrorType,\n SendTransactionParameters,\n SendTransactionRequest,\n SendTransactionReturnType,\n} from './actions/wallet/sendTransaction.js'\nexport type {\n SignTransactionErrorType,\n SignTransactionParameters,\n SignTransactionReturnType,\n} from './actions/wallet/signTransaction.js'\nexport type {\n PrepareTransactionRequestErrorType,\n PrepareTransactionRequestParameters,\n PrepareTransactionRequestParameterType,\n PrepareTransactionRequestRequest,\n PrepareTransactionRequestReturnType,\n} from './actions/wallet/prepareTransactionRequest.js'\nexport type {\n SendUnsignedTransactionErrorType,\n SendUnsignedTransactionParameters,\n SendUnsignedTransactionReturnType,\n} from './actions/test/sendUnsignedTransaction.js'\nexport type { SetAutomineErrorType } from './actions/test/setAutomine.js'\nexport type {\n SetBalanceErrorType,\n SetBalanceParameters,\n} from './actions/test/setBalance.js'\nexport type {\n SetBlockGasLimitErrorType,\n SetBlockGasLimitParameters,\n} from './actions/test/setBlockGasLimit.js'\nexport type {\n SetBlockTimestampIntervalErrorType,\n SetBlockTimestampIntervalParameters,\n} from './actions/test/setBlockTimestampInterval.js'\nexport type {\n SetCodeErrorType,\n SetCodeParameters,\n} from './actions/test/setCode.js'\nexport type {\n SetCoinbaseErrorType,\n SetCoinbaseParameters,\n} from './actions/test/setCoinbase.js'\nexport type {\n SetIntervalMiningErrorType,\n SetIntervalMiningParameters,\n} from './actions/test/setIntervalMining.js'\nexport type { SetLoggingEnabledErrorType } from './actions/test/setLoggingEnabled.js'\nexport type {\n SetMinGasPriceErrorType,\n SetMinGasPriceParameters,\n} from './actions/test/setMinGasPrice.js'\nexport type {\n SetNextBlockBaseFeePerGasErrorType,\n SetNextBlockBaseFeePerGasParameters,\n} from './actions/test/setNextBlockBaseFeePerGas.js'\nexport type {\n SetNextBlockTimestampErrorType,\n SetNextBlockTimestampParameters,\n} from './actions/test/setNextBlockTimestamp.js'\nexport type {\n SetNonceErrorType,\n SetNonceParameters,\n} from './actions/test/setNonce.js'\nexport type { SetRpcUrlErrorType } from './actions/test/setRpcUrl.js'\nexport type {\n SetStorageAtErrorType,\n SetStorageAtParameters,\n} from './actions/test/setStorageAt.js'\nexport type {\n SignMessageErrorType,\n SignMessageParameters,\n SignMessageReturnType,\n} from './actions/wallet/signMessage.js'\nexport type {\n SignTypedDataErrorType,\n SignTypedDataParameters,\n SignTypedDataReturnType,\n} from './actions/wallet/signTypedData.js'\nexport type {\n StopImpersonatingAccountErrorType,\n StopImpersonatingAccountParameters,\n} from './actions/test/stopImpersonatingAccount.js'\nexport type {\n SwitchChainErrorType,\n SwitchChainParameters,\n} from './actions/wallet/switchChain.js'\nexport type {\n UninstallFilterErrorType,\n UninstallFilterParameters,\n UninstallFilterReturnType,\n} from './actions/public/uninstallFilter.js'\nexport type {\n WatchAssetErrorType,\n WatchAssetParameters,\n WatchAssetReturnType,\n} from './actions/wallet/watchAsset.js'\nexport type {\n VerifyHashErrorType as VerifyHashActionErrorType,\n VerifyHashParameters as VerifyHashActionParameters,\n VerifyHashReturnType as VerifyHashActionReturnType,\n} from './actions/public/verifyHash.js'\nexport type {\n VerifyTypedDataErrorType as VerifyTypedDataActionErrorType,\n VerifyTypedDataParameters as VerifyTypedDataActionParameters,\n VerifyTypedDataReturnType as VerifyTypedDataActionReturnType,\n} from './actions/public/verifyTypedData.js'\nexport type {\n VerifyMessageErrorType as VerifyMessageActionErrorType,\n VerifyMessageParameters as VerifyMessageActionParameters,\n VerifyMessageReturnType as VerifyMessageActionReturnType,\n} from './actions/public/verifyMessage.js'\nexport type {\n WatchContractEventOnLogsFn,\n WatchContractEventOnLogsParameter,\n WatchContractEventErrorType,\n WatchContractEventParameters,\n WatchContractEventReturnType,\n} from './actions/public/watchContractEvent.js'\nexport type {\n WriteContractErrorType,\n WriteContractParameters,\n WriteContractReturnType,\n} from './actions/wallet/writeContract.js'\nexport type { Call, Calls } from './types/calls.js'\nexport type {\n Chain,\n ChainConfig,\n ChainContract,\n ChainEstimateFeesPerGasFn,\n ChainFees,\n ChainFeesFnParameters,\n ChainFormatter,\n ChainEstimateFeesPerGasFnParameters,\n ChainMaxPriorityFeePerGasFn,\n DeriveChain,\n GetChainParameter,\n ChainFormatters,\n ChainSerializers,\n ExtractChainFormatterExclude,\n ExtractChainFormatterParameters,\n ExtractChainFormatterReturnType,\n} from './types/chain.js'\nexport type { GetTransactionRequestKzgParameter, Kzg } from './types/kzg.js'\nexport {\n type Client,\n type ClientConfig,\n type CreateClientErrorType,\n type MulticallBatchOptions,\n createClient,\n rpcSchema,\n} from './clients/createClient.js'\nexport {\n type CustomTransport,\n type CustomTransportConfig,\n type CustomTransportErrorType,\n custom,\n} from './clients/transports/custom.js'\nexport {\n type FallbackTransport,\n type FallbackTransportConfig,\n type FallbackTransportErrorType,\n fallback,\n shouldThrow,\n} from './clients/transports/fallback.js'\nexport {\n type HttpTransport,\n type HttpTransportConfig,\n type HttpTransportErrorType,\n http,\n} from './clients/transports/http.js'\nexport {\n type PublicClient,\n type PublicClientConfig,\n type CreatePublicClientErrorType,\n createPublicClient,\n} from './clients/createPublicClient.js'\nexport {\n type TestClient,\n type TestClientConfig,\n type CreateTestClientErrorType,\n createTestClient,\n} from './clients/createTestClient.js'\nexport {\n type PublicActions,\n publicActions,\n} from './clients/decorators/public.js'\nexport {\n type TestActions,\n testActions,\n} from './clients/decorators/test.js'\nexport {\n type WalletActions,\n walletActions,\n} from './clients/decorators/wallet.js'\nexport {\n type Transport,\n type TransportConfig,\n type CreateTransportErrorType,\n createTransport,\n} from './clients/transports/createTransport.js'\nexport {\n type WalletClient,\n type WalletClientConfig,\n type CreateWalletClientErrorType,\n createWalletClient,\n} from './clients/createWalletClient.js'\nexport {\n type WebSocketTransport,\n type WebSocketTransportConfig,\n type WebSocketTransportErrorType,\n webSocket,\n} from './clients/transports/webSocket.js'\nexport {\n multicall3Abi,\n erc20Abi,\n erc20Abi_bytes32,\n erc721Abi,\n erc4626Abi,\n universalSignatureValidatorAbi,\n} from './constants/abis.js'\nexport { ethAddress, zeroAddress } from './constants/address.js'\nexport {\n deploylessCallViaBytecodeBytecode,\n deploylessCallViaFactoryBytecode,\n universalSignatureValidatorByteCode,\n} from './constants/contracts.js'\nexport { etherUnits, gweiUnits, weiUnits } from './constants/unit.js'\nexport {\n maxInt8,\n maxInt16,\n maxInt24,\n maxInt32,\n maxInt40,\n maxInt48,\n maxInt56,\n maxInt64,\n maxInt72,\n maxInt80,\n maxInt88,\n maxInt96,\n maxInt104,\n maxInt112,\n maxInt120,\n maxInt128,\n maxInt136,\n maxInt144,\n maxInt152,\n maxInt160,\n maxInt168,\n maxInt176,\n maxInt184,\n maxInt192,\n maxInt200,\n maxInt208,\n maxInt216,\n maxInt224,\n maxInt232,\n maxInt240,\n maxInt248,\n maxInt256,\n maxUint8,\n maxUint16,\n maxUint24,\n maxUint32,\n maxUint40,\n maxUint48,\n maxUint56,\n maxUint64,\n maxUint72,\n maxUint80,\n maxUint88,\n maxUint96,\n maxUint104,\n maxUint112,\n maxUint120,\n maxUint128,\n maxUint136,\n maxUint144,\n maxUint152,\n maxUint160,\n maxUint168,\n maxUint176,\n maxUint184,\n maxUint192,\n maxUint200,\n maxUint208,\n maxUint216,\n maxUint224,\n maxUint232,\n maxUint240,\n maxUint248,\n maxUint256,\n minInt8,\n minInt16,\n minInt24,\n minInt32,\n minInt40,\n minInt48,\n minInt56,\n minInt64,\n minInt72,\n minInt80,\n minInt88,\n minInt96,\n minInt104,\n minInt112,\n minInt120,\n minInt128,\n minInt136,\n minInt144,\n minInt152,\n minInt160,\n minInt168,\n minInt176,\n minInt184,\n minInt192,\n minInt200,\n minInt208,\n minInt216,\n minInt224,\n minInt232,\n minInt240,\n minInt248,\n minInt256,\n} from './constants/number.js'\nexport { zeroHash } from './constants/bytes.js'\nexport { presignMessagePrefix } from './constants/strings.js'\nexport {\n AbiConstructorNotFoundError,\n type AbiConstructorNotFoundErrorType,\n AbiConstructorParamsNotFoundError,\n type AbiConstructorParamsNotFoundErrorType,\n AbiDecodingDataSizeInvalidError,\n type AbiDecodingDataSizeInvalidErrorType,\n AbiDecodingDataSizeTooSmallError,\n type AbiDecodingDataSizeTooSmallErrorType,\n AbiDecodingZeroDataError,\n type AbiDecodingZeroDataErrorType,\n AbiEncodingArrayLengthMismatchError,\n type AbiEncodingArrayLengthMismatchErrorType,\n AbiEncodingLengthMismatchError,\n type AbiEncodingLengthMismatchErrorType,\n AbiEncodingBytesSizeMismatchError,\n type AbiEncodingBytesSizeMismatchErrorType,\n AbiErrorInputsNotFoundError,\n type AbiErrorInputsNotFoundErrorType,\n AbiErrorNotFoundError,\n type AbiErrorNotFoundErrorType,\n AbiErrorSignatureNotFoundError,\n type AbiErrorSignatureNotFoundErrorType,\n AbiEventNotFoundError,\n type AbiEventNotFoundErrorType,\n AbiEventSignatureEmptyTopicsError,\n type AbiEventSignatureEmptyTopicsErrorType,\n AbiEventSignatureNotFoundError,\n type AbiEventSignatureNotFoundErrorType,\n AbiFunctionNotFoundError,\n type AbiFunctionNotFoundErrorType,\n AbiFunctionOutputsNotFoundError,\n type AbiFunctionOutputsNotFoundErrorType,\n AbiFunctionSignatureNotFoundError,\n type AbiFunctionSignatureNotFoundErrorType,\n BytesSizeMismatchError,\n type BytesSizeMismatchErrorType,\n DecodeLogDataMismatch,\n type DecodeLogDataMismatchErrorType,\n DecodeLogTopicsMismatch,\n type DecodeLogTopicsMismatchErrorType,\n InvalidAbiDecodingTypeError,\n type InvalidAbiDecodingTypeErrorType,\n InvalidAbiEncodingTypeError,\n type InvalidAbiEncodingTypeErrorType,\n InvalidArrayError,\n type InvalidArrayErrorType,\n InvalidDefinitionTypeError,\n type InvalidDefinitionTypeErrorType,\n UnsupportedPackedAbiType,\n type UnsupportedPackedAbiTypeErrorType,\n} from './errors/abi.js'\nexport { BaseError, type BaseErrorType, setErrorConfig } from './errors/base.js'\nexport {\n BlockNotFoundError,\n type BlockNotFoundErrorType,\n} from './errors/block.js'\nexport {\n CallExecutionError,\n type CallExecutionErrorType,\n ContractFunctionExecutionError,\n type ContractFunctionExecutionErrorType,\n ContractFunctionRevertedError,\n type ContractFunctionRevertedErrorType,\n ContractFunctionZeroDataError,\n type ContractFunctionZeroDataErrorType,\n RawContractError,\n type RawContractErrorType,\n CounterfactualDeploymentFailedError,\n type CounterfactualDeploymentFailedErrorType,\n} from './errors/contract.js'\nexport {\n BaseFeeScalarError,\n type BaseFeeScalarErrorType,\n Eip1559FeesNotSupportedError,\n type Eip1559FeesNotSupportedErrorType,\n MaxFeePerGasTooLowError,\n type MaxFeePerGasTooLowErrorType,\n} from './errors/fee.js'\nexport {\n ChainDisconnectedError,\n type ChainDisconnectedErrorType,\n InternalRpcError,\n type InternalRpcErrorType,\n InvalidInputRpcError,\n type InvalidInputRpcErrorType,\n InvalidParamsRpcError,\n type InvalidParamsRpcErrorType,\n InvalidRequestRpcError,\n type InvalidRequestRpcErrorType,\n JsonRpcVersionUnsupportedError,\n type JsonRpcVersionUnsupportedErrorType,\n LimitExceededRpcError,\n type LimitExceededRpcErrorType,\n MethodNotFoundRpcError,\n type MethodNotFoundRpcErrorType,\n MethodNotSupportedRpcError,\n type MethodNotSupportedRpcErrorType,\n ParseRpcError,\n type ParseRpcErrorType,\n ProviderDisconnectedError,\n type ProviderDisconnectedErrorType,\n ProviderRpcError,\n type ProviderRpcErrorCode,\n type ProviderRpcErrorType,\n ResourceNotFoundRpcError,\n type ResourceNotFoundRpcErrorType,\n ResourceUnavailableRpcError,\n type ResourceUnavailableRpcErrorType,\n RpcError,\n type RpcErrorType,\n type RpcErrorCode,\n SwitchChainError,\n TransactionRejectedRpcError,\n type TransactionRejectedRpcErrorType,\n UnauthorizedProviderError,\n type UnauthorizedProviderErrorType,\n UnknownRpcError,\n type UnknownRpcErrorType,\n UnsupportedProviderMethodError,\n type UnsupportedProviderMethodErrorType,\n UserRejectedRequestError,\n type UserRejectedRequestErrorType,\n} from './errors/rpc.js'\nexport {\n ChainDoesNotSupportContract,\n type ChainDoesNotSupportContractErrorType,\n ChainMismatchError,\n type ChainMismatchErrorType,\n ChainNotFoundError,\n type ChainNotFoundErrorType,\n ClientChainNotConfiguredError,\n type ClientChainNotConfiguredErrorType,\n InvalidChainIdError,\n type InvalidChainIdErrorType,\n} from './errors/chain.js'\nexport {\n InvalidBytesBooleanError,\n type InvalidBytesBooleanErrorType,\n IntegerOutOfRangeError,\n type IntegerOutOfRangeErrorType,\n InvalidHexBooleanError,\n type InvalidHexBooleanErrorType,\n InvalidHexValueError,\n type InvalidHexValueErrorType,\n SizeOverflowError,\n type SizeOverflowErrorType,\n} from './errors/encoding.js'\nexport {\n type EnsAvatarInvalidMetadataError,\n EnsAvatarUriResolutionError,\n type EnsAvatarInvalidMetadataErrorType,\n EnsAvatarInvalidNftUriError,\n type EnsAvatarInvalidNftUriErrorType,\n EnsAvatarUnsupportedNamespaceError,\n type EnsAvatarUnsupportedNamespaceErrorType,\n type EnsAvatarUriResolutionErrorType,\n} from './errors/ens.js'\nexport {\n type InvalidDecimalNumberErrorType,\n InvalidDecimalNumberError,\n} from './errors/unit.js'\nexport {\n EstimateGasExecutionError,\n type EstimateGasExecutionErrorType,\n} from './errors/estimateGas.js'\nexport {\n ExecutionRevertedError,\n type ExecutionRevertedErrorType,\n FeeCapTooHighError,\n type FeeCapTooHighErrorType,\n FeeCapTooLowError,\n type FeeCapTooLowErrorType,\n InsufficientFundsError,\n type InsufficientFundsErrorType,\n IntrinsicGasTooHighError,\n type IntrinsicGasTooHighErrorType,\n IntrinsicGasTooLowError,\n type IntrinsicGasTooLowErrorType,\n NonceMaxValueError,\n type NonceMaxValueErrorType,\n NonceTooHighError,\n type NonceTooHighErrorType,\n NonceTooLowError,\n type NonceTooLowErrorType,\n TipAboveFeeCapError,\n type TipAboveFeeCapErrorType,\n TransactionTypeNotSupportedError,\n type TransactionTypeNotSupportedErrorType,\n UnknownNodeError,\n type UnknownNodeErrorType,\n} from './errors/node.js'\nexport {\n FilterTypeNotSupportedError,\n type FilterTypeNotSupportedErrorType,\n} from './errors/log.js'\nexport {\n HttpRequestError,\n type HttpRequestErrorType,\n RpcRequestError,\n type RpcRequestErrorType,\n TimeoutError,\n type TimeoutErrorType,\n SocketClosedError,\n type SocketClosedErrorType,\n WebSocketRequestError,\n type WebSocketRequestErrorType,\n} from './errors/request.js'\nexport {\n InvalidAddressError,\n type InvalidAddressErrorType,\n} from './errors/address.js'\nexport {\n FeeConflictError,\n type FeeConflictErrorType,\n InvalidLegacyVError,\n type InvalidLegacyVErrorType,\n InvalidSerializableTransactionError,\n type InvalidSerializableTransactionErrorType,\n InvalidSerializedTransactionError,\n type InvalidSerializedTransactionErrorType,\n InvalidSerializedTransactionTypeError,\n type InvalidSerializedTransactionTypeErrorType,\n InvalidStorageKeySizeError,\n type InvalidStorageKeySizeErrorType,\n TransactionExecutionError,\n type TransactionExecutionErrorType,\n TransactionNotFoundError,\n type TransactionNotFoundErrorType,\n TransactionReceiptNotFoundError,\n type TransactionReceiptNotFoundErrorType,\n WaitForTransactionReceiptTimeoutError,\n type WaitForTransactionReceiptTimeoutErrorType,\n} from './errors/transaction.js'\nexport {\n SizeExceedsPaddingSizeError,\n type SizeExceedsPaddingSizeErrorType,\n SliceOffsetOutOfBoundsError,\n type SliceOffsetOutOfBoundsErrorType,\n} from './errors/data.js'\nexport {\n UrlRequiredError,\n type UrlRequiredErrorType,\n} from './errors/transport.js'\nexport {\n AccountStateConflictError,\n type AccountStateConflictErrorType,\n StateAssignmentConflictError,\n type StateAssignmentConflictErrorType,\n} from './errors/stateOverride.js'\nexport {\n InvalidDomainError,\n type InvalidDomainErrorType,\n InvalidPrimaryTypeError,\n type InvalidPrimaryTypeErrorType,\n InvalidStructTypeError,\n type InvalidStructTypeErrorType,\n} from './errors/typedData.js'\nexport type {\n AbiEventParameterToPrimitiveType,\n AbiEventParametersToPrimitiveTypes,\n AbiEventTopicToPrimitiveType,\n AbiItem,\n AbiItemArgs,\n AbiItemName,\n ContractConstructorArgs,\n ContractEventArgsFromTopics,\n EventDefinition,\n ExtractAbiFunctionForArgs,\n ExtractAbiItem,\n ExtractAbiItemForArgs,\n ExtractAbiItemNames,\n ContractErrorArgs,\n ContractErrorName,\n ContractEventArgs,\n ContractEventName,\n ContractFunctionParameters,\n ContractFunctionReturnType,\n ContractFunctionArgs,\n ContractFunctionName,\n GetEventArgs,\n GetValue,\n LogTopicType,\n MaybeAbiEventName,\n MaybeExtractEventArgsFromAbi,\n UnionWiden,\n Widen,\n} from './types/contract.js'\nexport type {\n AccessList,\n Transaction,\n TransactionBase,\n TransactionEIP1559,\n TransactionEIP2930,\n TransactionEIP4844,\n TransactionEIP7702,\n TransactionLegacy,\n TransactionReceipt,\n TransactionRequest,\n TransactionRequestBase,\n TransactionRequestEIP1559,\n TransactionRequestEIP2930,\n TransactionRequestEIP4844,\n TransactionRequestEIP7702,\n TransactionRequestGeneric,\n TransactionRequestLegacy,\n TransactionSerializable,\n TransactionSerializableBase,\n TransactionSerializableEIP1559,\n TransactionSerializableEIP2930,\n TransactionSerializableEIP4844,\n TransactionSerializableEIP7702,\n TransactionSerializableGeneric,\n TransactionSerializableLegacy,\n TransactionSerialized,\n TransactionSerializedEIP1559,\n TransactionSerializedEIP2930,\n TransactionSerializedEIP4844,\n TransactionSerializedEIP7702,\n TransactionSerializedGeneric,\n TransactionSerializedLegacy,\n TransactionType,\n} from './types/transaction.js'\nexport type {\n Assign,\n Branded,\n Evaluate,\n IsNarrowable,\n IsUndefined,\n IsUnion,\n LooseOmit,\n MaybePartial,\n MaybePromise,\n MaybeRequired,\n Mutable,\n NoInfer,\n NoUndefined,\n Omit,\n Or,\n PartialBy,\n RequiredBy,\n Some,\n UnionEvaluate,\n UnionLooseOmit,\n ValueOf,\n Prettify,\n ExactPartial,\n ExactRequired,\n IsNever,\n OneOf,\n UnionOmit,\n UnionPartialBy,\n UnionPick,\n UnionRequiredBy,\n UnionToTuple,\n} from './types/utils.js'\nexport type {\n Account,\n AccountSource,\n CustomSource,\n HDAccount,\n HDOptions,\n JsonRpcAccount,\n LocalAccount,\n PrivateKeyAccount,\n} from './accounts/types.js'\nexport type { AssetGateway, AssetGatewayUrls } from './types/ens.js'\nexport type {\n Block,\n BlockIdentifier,\n BlockNumber,\n BlockTag,\n Uncle,\n} from './types/block.js'\nexport type {\n ByteArray,\n Hash,\n Hex,\n LogTopic,\n Signature,\n CompactSignature,\n SignableMessage,\n} from './types/misc.js'\nexport type {\n AddEthereumChainParameter,\n BundlerRpcSchema,\n DebugBundlerRpcSchema,\n EIP1193EventMap,\n EIP1193Events,\n EIP1193Parameters,\n EIP1193Provider,\n EIP1193RequestFn,\n EIP1474Methods,\n ProviderRpcErrorType as EIP1193ProviderRpcErrorType,\n ProviderConnectInfo,\n ProviderMessage,\n PublicRpcSchema,\n PaymasterRpcSchema,\n NetworkSync,\n RpcSchema,\n RpcSchemaOverride,\n TestRpcSchema,\n WalletCapabilities,\n WalletCapabilitiesRecord,\n WalletCallReceipt,\n WalletGetCallsStatusReturnType,\n WalletGrantPermissionsParameters,\n WalletGrantPermissionsReturnType,\n WalletSendCallsParameters,\n WalletPermissionCaveat,\n WalletPermission,\n WalletRpcSchema,\n WatchAssetParams,\n} from './types/eip1193.js'\nexport { ProviderRpcError as EIP1193ProviderRpcError } from './types/eip1193.js'\nexport type { BlobSidecar, BlobSidecars } from './types/eip4844.js'\nexport type {\n FeeHistory,\n FeeValues,\n FeeValuesEIP1559,\n FeeValuesEIP4844,\n FeeValuesLegacy,\n FeeValuesType,\n} from './types/fee.js'\nexport type { Filter, FilterType } from './types/filter.js'\nexport type { TypedDataDefinition } from './types/typedData.js'\nexport type { GetTransportConfig, GetPollOptions } from './types/transport.js'\nexport type { Log } from './types/log.js'\nexport type {\n MulticallContracts,\n MulticallResponse,\n MulticallResults,\n} from './types/multicall.js'\nexport type {\n ParseAccount,\n DeriveAccount,\n HDKey,\n} from './types/account.js'\nexport type {\n Authorization,\n AuthorizationList,\n SerializedAuthorization,\n SerializedAuthorizationList,\n SignedAuthorization,\n SignedAuthorizationList,\n} from './types/authorization.js'\nexport type {\n Index,\n Quantity,\n RpcAuthorization,\n RpcAuthorizationList,\n RpcBlock,\n RpcBlockIdentifier,\n RpcBlockNumber,\n RpcFeeHistory,\n RpcFeeValues,\n RpcLog,\n RpcTransaction,\n RpcTransactionReceipt,\n RpcTransactionRequest,\n RpcUncle,\n Status,\n RpcProof,\n RpcAccountStateOverride,\n RpcStateOverride,\n RpcStateMapping,\n} from './types/rpc.js'\nexport type { Withdrawal } from './types/withdrawal.js'\nexport type {\n StateMapping,\n StateOverride,\n} from './types/stateOverride.js'\nexport { labelhash, type LabelhashErrorType } from './utils/ens/labelhash.js'\nexport { namehash, type NamehashErrorType } from './utils/ens/namehash.js'\nexport {\n type FormattedBlock,\n defineBlock,\n type DefineBlockErrorType,\n formatBlock,\n type FormatBlockErrorType,\n} from './utils/formatters/block.js'\nexport { formatLog, type FormatLogErrorType } from './utils/formatters/log.js'\nexport {\n type DecodeAbiParametersErrorType,\n type DecodeAbiParametersReturnType,\n decodeAbiParameters,\n} from './utils/abi/decodeAbiParameters.js'\nexport {\n type DecodeDeployDataErrorType,\n type DecodeDeployDataParameters,\n type DecodeDeployDataReturnType,\n decodeDeployData,\n} from './utils/abi/decodeDeployData.js'\nexport {\n type DecodeErrorResultErrorType,\n type DecodeErrorResultParameters,\n type DecodeErrorResultReturnType,\n decodeErrorResult,\n} from './utils/abi/decodeErrorResult.js'\nexport {\n type DecodeEventLogErrorType,\n type DecodeEventLogParameters,\n type DecodeEventLogReturnType,\n decodeEventLog,\n} from './utils/abi/decodeEventLog.js'\nexport {\n type DecodeFunctionDataErrorType,\n type DecodeFunctionDataParameters,\n type DecodeFunctionDataReturnType,\n decodeFunctionData,\n} from './utils/abi/decodeFunctionData.js'\nexport {\n type DecodeFunctionResultErrorType,\n type DecodeFunctionResultParameters,\n type DecodeFunctionResultReturnType,\n decodeFunctionResult,\n} from './utils/abi/decodeFunctionResult.js'\nexport {\n type EncodeAbiParametersErrorType,\n type EncodeAbiParametersReturnType,\n encodeAbiParameters,\n} from './utils/abi/encodeAbiParameters.js'\nexport {\n type EncodeDeployDataErrorType,\n type EncodeDeployDataParameters,\n type EncodeDeployDataReturnType,\n encodeDeployData,\n} from './utils/abi/encodeDeployData.js'\nexport {\n type EncodeErrorResultErrorType,\n type EncodeErrorResultParameters,\n type EncodeErrorResultReturnType,\n encodeErrorResult,\n} from './utils/abi/encodeErrorResult.js'\nexport {\n type EncodeEventTopicsErrorType,\n type EncodeEventTopicsParameters,\n type EncodeEventTopicsReturnType,\n encodeEventTopics,\n} from './utils/abi/encodeEventTopics.js'\nexport {\n type EncodeFunctionDataErrorType,\n type EncodeFunctionDataParameters,\n type EncodeFunctionDataReturnType,\n encodeFunctionData,\n} from './utils/abi/encodeFunctionData.js'\nexport {\n type PrepareEncodeFunctionDataErrorType,\n type PrepareEncodeFunctionDataParameters,\n type PrepareEncodeFunctionDataReturnType,\n prepareEncodeFunctionData,\n} from './utils/abi/prepareEncodeFunctionData.js'\nexport {\n type EncodeFunctionResultErrorType,\n type EncodeFunctionResultParameters,\n type EncodeFunctionResultReturnType,\n encodeFunctionResult,\n} from './utils/abi/encodeFunctionResult.js'\nexport {\n type ParseEventLogsErrorType,\n type ParseEventLogsParameters,\n type ParseEventLogsReturnType,\n parseEventLogs,\n} from './utils/abi/parseEventLogs.js'\nexport {\n type FormattedTransaction,\n defineTransaction,\n type DefineTransactionErrorType,\n formatTransaction,\n type FormatTransactionErrorType,\n transactionType,\n} from './utils/formatters/transaction.js'\nexport {\n type FormattedTransactionReceipt,\n defineTransactionReceipt,\n type DefineTransactionReceiptErrorType,\n formatTransactionReceipt,\n type FormatTransactionReceiptErrorType,\n} from './utils/formatters/transactionReceipt.js'\nexport {\n type FormattedTransactionRequest,\n defineTransactionRequest,\n type DefineTransactionRequestErrorType,\n formatTransactionRequest,\n type FormatTransactionRequestErrorType,\n rpcTransactionType,\n} from './utils/formatters/transactionRequest.js'\nexport {\n type GetAbiItemErrorType,\n type GetAbiItemParameters,\n type GetAbiItemReturnType,\n getAbiItem,\n} from './utils/abi/getAbiItem.js'\nexport {\n type GetContractAddressOptions,\n type GetCreate2AddressOptions,\n type GetCreate2AddressErrorType,\n type GetCreateAddressOptions,\n type GetCreateAddressErrorType,\n getContractAddress,\n getCreate2Address,\n getCreateAddress,\n} from './utils/address/getContractAddress.js'\nexport {\n type GetSerializedTransactionType,\n type GetSerializedTransactionTypeErrorType,\n getSerializedTransactionType,\n} from './utils/transaction/getSerializedTransactionType.js'\nexport {\n type GetTransactionType,\n type GetTransactionTypeErrorType,\n getTransactionType,\n} from './utils/transaction/getTransactionType.js'\nexport {\n type HashDomainErrorType,\n type HashStructErrorType,\n type HashTypedDataErrorType,\n type HashTypedDataParameters,\n type HashTypedDataReturnType,\n hashDomain,\n hashStruct,\n hashTypedData,\n} from './utils/signature/hashTypedData.js'\nexport {\n type CompactSignatureToSignatureErrorType,\n compactSignatureToSignature,\n} from './utils/signature/compactSignatureToSignature.js'\nexport {\n /** @deprecated Use `ParseCompactSignatureErrorType`. */\n type ParseCompactSignatureErrorType as HexToCompactSignatureErrorType,\n /** @deprecated Use `parseCompactSignature`. */\n parseCompactSignature as hexToCompactSignature,\n type ParseCompactSignatureErrorType,\n parseCompactSignature,\n} from './utils/signature/parseCompactSignature.js'\nexport {\n /** @deprecated Use `ParseSignatureErrorType`. */\n type ParseSignatureErrorType as HexToSignatureErrorType,\n /** @deprecated Use `parseSignature`. */\n parseSignature as hexToSignature,\n type ParseSignatureErrorType,\n parseSignature,\n} from './utils/signature/parseSignature.js'\nexport {\n type RecoverAddressErrorType,\n type RecoverAddressParameters,\n type RecoverAddressReturnType,\n recoverAddress,\n} from './utils/signature/recoverAddress.js'\nexport {\n type RecoverMessageAddressErrorType,\n type RecoverMessageAddressParameters,\n type RecoverMessageAddressReturnType,\n recoverMessageAddress,\n} from './utils/signature/recoverMessageAddress.js'\nexport {\n type RecoverPublicKeyErrorType,\n type RecoverPublicKeyParameters,\n type RecoverPublicKeyReturnType,\n recoverPublicKey,\n} from './utils/signature/recoverPublicKey.js'\nexport {\n type RecoverTransactionAddressErrorType,\n type RecoverTransactionAddressParameters,\n type RecoverTransactionAddressReturnType,\n recoverTransactionAddress,\n} from './utils/signature/recoverTransactionAddress.js'\nexport {\n type RecoverTypedDataAddressErrorType,\n type RecoverTypedDataAddressParameters,\n type RecoverTypedDataAddressReturnType,\n recoverTypedDataAddress,\n} from './utils/signature/recoverTypedDataAddress.js'\nexport {\n type SignatureToCompactSignatureErrorType,\n signatureToCompactSignature,\n} from './utils/signature/signatureToCompactSignature.js'\nexport {\n /** @deprecated Use `SignatureToHexErrorType` instead. */\n type SerializeCompactSignatureErrorType as CompactSignatureToHexErrorType,\n /** @deprecated Use `serializeCompactSignature` instead. */\n serializeCompactSignature as compactSignatureToHex,\n type SerializeCompactSignatureErrorType,\n serializeCompactSignature,\n} from './utils/signature/serializeCompactSignature.js'\nexport {\n /** @deprecated Use `SignatureToHexErrorType` instead. */\n type SerializeSignatureErrorType as SignatureToHexErrorType,\n /** @deprecated Use `serializeSignature` instead. */\n serializeSignature as signatureToHex,\n type SerializeSignatureParameters,\n type SerializeSignatureReturnType,\n type SerializeSignatureErrorType,\n serializeSignature,\n} from './utils/signature/serializeSignature.js'\nexport {\n bytesToRlp,\n type BytesToRlpErrorType,\n hexToRlp,\n type HexToRlpErrorType,\n toRlp,\n type ToRlpErrorType,\n type ToRlpReturnType,\n} from './utils/encoding/toRlp.js'\nexport {\n type VerifyHashErrorType,\n type VerifyHashParameters,\n type VerifyHashReturnType,\n verifyHash,\n} from './utils/signature/verifyHash.js'\nexport {\n type VerifyMessageErrorType,\n type VerifyMessageParameters,\n type VerifyMessageReturnType,\n verifyMessage,\n} from './utils/signature/verifyMessage.js'\nexport {\n type VerifyTypedDataErrorType,\n type VerifyTypedDataParameters,\n type VerifyTypedDataReturnType,\n verifyTypedData,\n} from './utils/signature/verifyTypedData.js'\nexport {\n type ParseErc6492SignatureErrorType,\n type ParseErc6492SignatureParameters,\n type ParseErc6492SignatureReturnType,\n parseErc6492Signature,\n} from './utils/signature/parseErc6492Signature.js'\nexport {\n type IsErc6492SignatureErrorType,\n type IsErc6492SignatureParameters,\n type IsErc6492SignatureReturnType,\n isErc6492Signature,\n} from './utils/signature/isErc6492Signature.js'\nexport {\n type SerializeErc6492SignatureErrorType,\n type SerializeErc6492SignatureParameters,\n type SerializeErc6492SignatureReturnType,\n serializeErc6492Signature,\n} from './utils/signature/serializeErc6492Signature.js'\nexport {\n type AssertRequestErrorType,\n assertRequest,\n} from './utils/transaction/assertRequest.js'\nexport {\n type AssertTransactionEIP1559ErrorType,\n assertTransactionEIP1559,\n type AssertTransactionEIP2930ErrorType,\n assertTransactionEIP2930,\n type AssertTransactionLegacyErrorType,\n assertTransactionLegacy,\n} from './utils/transaction/assertTransaction.js'\nexport {\n type BoolToBytesErrorType,\n type BoolToBytesOpts,\n boolToBytes,\n type HexToBytesErrorType,\n type HexToBytesOpts,\n hexToBytes,\n type NumberToBytesErrorType,\n numberToBytes,\n type StringToBytesErrorType,\n type StringToBytesOpts,\n stringToBytes,\n type ToBytesErrorType,\n type ToBytesParameters,\n toBytes,\n} from './utils/encoding/toBytes.js'\nexport {\n type BoolToHexErrorType,\n type BoolToHexOpts,\n boolToHex,\n type BytesToHexErrorType,\n type BytesToHexOpts,\n bytesToHex,\n type NumberToHexErrorType,\n type NumberToHexOpts,\n numberToHex,\n type StringToHexErrorType,\n type StringToHexOpts,\n stringToHex,\n type ToHexErrorType,\n type ToHexParameters,\n toHex,\n} from './utils/encoding/toHex.js'\nexport {\n type BytesToBigIntErrorType,\n type BytesToBigIntOpts,\n bytesToBigInt,\n type BytesToBoolErrorType,\n type BytesToBoolOpts,\n bytesToBool,\n type BytesToNumberErrorType,\n type BytesToNumberOpts,\n bytesToNumber,\n type BytesToStringErrorType,\n type BytesToStringOpts,\n bytesToString,\n type FromBytesErrorType,\n type FromBytesParameters,\n fromBytes,\n} from './utils/encoding/fromBytes.js'\nexport {\n type CcipRequestParameters,\n type CcipRequestErrorType,\n ccipRequest,\n /** @deprecated Use `ccipRequest`. */\n ccipRequest as ccipFetch,\n type OffchainLookupErrorType,\n offchainLookup,\n offchainLookupAbiItem,\n offchainLookupSignature,\n} from './utils/ccip.js'\nexport {\n type BlobsToCommitmentsErrorType,\n type BlobsToCommitmentsParameters,\n type BlobsToCommitmentsReturnType,\n blobsToCommitments,\n} from './utils/blob/blobsToCommitments.js'\nexport {\n type CommitmentToVersionedHashErrorType,\n type CommitmentToVersionedHashParameters,\n type CommitmentToVersionedHashReturnType,\n commitmentToVersionedHash,\n} from './utils/blob/commitmentToVersionedHash.js'\nexport {\n type CommitmentsToVersionedHashesErrorType,\n type CommitmentsToVersionedHashesParameters,\n type CommitmentsToVersionedHashesReturnType,\n commitmentsToVersionedHashes,\n} from './utils/blob/commitmentsToVersionedHashes.js'\nexport {\n type SidecarsToVersionedHashesErrorType,\n type SidecarsToVersionedHashesParameters,\n type SidecarsToVersionedHashesReturnType,\n sidecarsToVersionedHashes,\n} from './utils/blob/sidecarsToVersionedHashes.js'\nexport {\n type blobsToProofsErrorType,\n type blobsToProofsParameters,\n type blobsToProofsReturnType,\n blobsToProofs,\n} from './utils/blob/blobsToProofs.js'\nexport {\n type FromBlobsErrorType,\n type FromBlobsParameters,\n type FromBlobsReturnType,\n fromBlobs,\n} from './utils/blob/fromBlobs.js'\nexport {\n type ToBlobSidecarsErrorType,\n type ToBlobSidecarsParameters,\n type ToBlobSidecarsReturnType,\n toBlobSidecars,\n} from './utils/blob/toBlobSidecars.js'\nexport {\n type ToBlobsErrorType,\n type ToBlobsParameters,\n type ToBlobsReturnType,\n toBlobs,\n} from './utils/blob/toBlobs.js'\nexport {\n type DefineKzgErrorType,\n type DefineKzgParameters,\n type DefineKzgReturnType,\n defineKzg,\n} from './utils/kzg/defineKzg.js'\nexport {\n type SetupKzgErrorType,\n type SetupKzgParameters,\n type SetupKzgReturnType,\n setupKzg,\n} from './utils/kzg/setupKzg.js'\nexport {\n type ConcatBytesErrorType,\n type ConcatErrorType,\n type ConcatHexErrorType,\n type ConcatReturnType,\n concat,\n concatBytes,\n concatHex,\n} from './utils/data/concat.js'\nexport {\n type AssertCurrentChainErrorType,\n type AssertCurrentChainParameters,\n assertCurrentChain,\n} from './utils/chain/assertCurrentChain.js'\nexport { defineChain } from './utils/chain/defineChain.js'\nexport {\n type ExtractChainErrorType,\n type ExtractChainParameters,\n type ExtractChainReturnType,\n extractChain,\n} from './utils/chain/extractChain.js'\nexport {\n type GetChainContractAddressErrorType,\n getChainContractAddress,\n} from './utils/chain/getChainContractAddress.js'\nexport {\n type EncodePackedErrorType,\n encodePacked,\n} from './utils/abi/encodePacked.js'\nexport {\n type WithRetryErrorType,\n withRetry,\n} from './utils/promise/withRetry.js'\nexport {\n type WithTimeoutErrorType,\n withTimeout,\n} from './utils/promise/withTimeout.js'\nexport {\n type FormatEtherErrorType,\n formatEther,\n} from './utils/unit/formatEther.js'\nexport {\n type FormatGweiErrorType,\n formatGwei,\n} from './utils/unit/formatGwei.js'\nexport {\n type FormatUnitsErrorType,\n formatUnits,\n} from './utils/unit/formatUnits.js'\nexport {\n type FromHexErrorType,\n fromHex,\n type HexToBigIntErrorType,\n hexToBigInt,\n type HexToBoolErrorType,\n hexToBool,\n type HexToNumberErrorType,\n hexToNumber,\n type HexToStringErrorType,\n hexToString,\n} from './utils/encoding/fromHex.js'\nexport {\n type FromRlpErrorType,\n type FromRlpReturnType,\n fromRlp,\n} from './utils/encoding/fromRlp.js'\nexport {\n type ChecksumAddressErrorType,\n type GetAddressErrorType,\n checksumAddress,\n getAddress,\n} from './utils/address/getAddress.js'\nexport {\n type GetContractErrorReturnType,\n getContractError,\n} from './utils/errors/getContractError.js'\nexport {\n type ToEventSelectorErrorType,\n toEventSelector,\n /** @deprecated use `ToEventSelectorErrorType`. */\n type ToEventSelectorErrorType as GetEventSelectorErrorType,\n /** @deprecated use `toEventSelector`. */\n toEventSelector as getEventSelector,\n} from './utils/hash/toEventSelector.js'\nexport {\n type ToFunctionSelectorErrorType,\n toFunctionSelector,\n /** @deprecated use `ToFunctionSelectorErrorType`. */\n type ToFunctionSelectorErrorType as GetFunctionSelectorErrorType,\n /** @deprecated use `toFunctionSelector`. */\n toFunctionSelector as getFunctionSelector,\n} from './utils/hash/toFunctionSelector.js'\nexport {\n type ToEventSignatureErrorType,\n toEventSignature,\n /** @deprecated use `ToEventSignatureErrorType`. */\n type ToEventSignatureErrorType as GetEventSignatureErrorType,\n /** @deprecated use `toEventSignature`. */\n toEventSignature as getEventSignature,\n} from './utils/hash/toEventSignature.js'\nexport {\n type ToFunctionSignatureErrorType,\n toFunctionSignature,\n /** @deprecated use `ToFunctionSignatureErrorType`. */\n type ToFunctionSignatureErrorType as GetFunctionSignatureErrorType,\n /** @deprecated use `toFunctionSignature`. */\n toFunctionSignature as getFunctionSignature,\n} from './utils/hash/toFunctionSignature.js'\nexport {\n type ToEventHashErrorType,\n toEventHash,\n} from './utils/hash/toEventHash.js'\nexport {\n type ToFunctionHashErrorType,\n toFunctionHash,\n} from './utils/hash/toFunctionHash.js'\nexport {\n type HashMessageErrorType,\n hashMessage,\n} from './utils/signature/hashMessage.js'\nexport {\n type ToPrefixedMessageErrorType,\n toPrefixedMessage,\n} from './utils/signature/toPrefixedMessage.js'\nexport {\n type IsAddressOptions,\n type IsAddressErrorType,\n isAddress,\n} from './utils/address/isAddress.js'\nexport {\n type IsAddressEqualReturnType,\n type IsAddressEqualErrorType,\n isAddressEqual,\n} from './utils/address/isAddressEqual.js'\nexport { type IsBytesErrorType, isBytes } from './utils/data/isBytes.js'\nexport { type IsHashErrorType, isHash } from './utils/hash/isHash.js'\nexport { type IsHexErrorType, isHex } from './utils/data/isHex.js'\nexport {\n type Keccak256Hash,\n type Keccak256ErrorType,\n keccak256,\n} from './utils/hash/keccak256.js'\nexport {\n type Sha256Hash,\n type Sha256ErrorType,\n sha256,\n} from './utils/hash/sha256.js'\nexport {\n type Ripemd160Hash,\n type Ripemd160ErrorType,\n ripemd160,\n} from './utils/hash/ripemd160.js'\nexport {\n type PadBytesErrorType,\n type PadErrorType,\n type PadHexErrorType,\n type PadReturnType,\n pad,\n padBytes,\n padHex,\n} from './utils/data/pad.js'\nexport {\n type ParseEtherErrorType,\n parseEther,\n} from './utils/unit/parseEther.js'\nexport { type ParseGweiErrorType, parseGwei } from './utils/unit/parseGwei.js'\nexport {\n type ParseTransactionErrorType,\n type ParseTransactionReturnType,\n parseTransaction,\n} from './utils/transaction/parseTransaction.js'\nexport {\n type ParseUnitsErrorType,\n parseUnits,\n} from './utils/unit/parseUnits.js'\nexport {\n type SerializeAccessListErrorType,\n serializeAccessList,\n} from './utils/transaction/serializeAccessList.js'\nexport {\n serializeTransaction,\n type SerializeTransactionErrorType,\n type SerializedTransactionReturnType,\n type SerializeTransactionFn,\n} from './utils/transaction/serializeTransaction.js'\nexport { type SizeErrorType, size } from './utils/data/size.js'\nexport {\n type SliceBytesErrorType,\n type SliceErrorType,\n type SliceHexErrorType,\n slice,\n sliceBytes,\n sliceHex,\n} from './utils/data/slice.js'\nexport { type StringifyErrorType, stringify } from './utils/stringify.js'\nexport {\n type TrimErrorType,\n type TrimReturnType,\n trim,\n} from './utils/data/trim.js'\nexport {\n type DomainSeparatorErrorType,\n type GetTypesForEIP712DomainErrorType,\n type SerializeTypedDataErrorType,\n type ValidateTypedDataErrorType,\n serializeTypedData,\n validateTypedData,\n domainSeparator,\n getTypesForEIP712Domain,\n} from './utils/typedData.js'\nexport {\n type CreateNonceManagerParameters,\n type NonceManager,\n type NonceManagerSource,\n createNonceManager,\n nonceManager,\n} from './utils/nonceManager.js'\nexport type {\n RpcEstimateUserOperationGasReturnType,\n RpcGetUserOperationByHashReturnType,\n RpcUserOperation,\n RpcUserOperationReceipt,\n RpcUserOperationRequest,\n} from './account-abstraction/types/rpc.js'\n", "import {\n\tAddress,\n\terc20Abi,\n\tformatUnits,\n\tHash,\n\tparseUnits,\n\tPublicClient,\n\tWalletClient,\n} from 'viem';\n\nexport class TokenSender {\n\tprivate walletClient: WalletClient;\n\tprivate publicClient: PublicClient;\n\n\tconstructor(walletClient: WalletClient, publicClient: PublicClient) {\n\t\tthis.walletClient = walletClient;\n\t\tthis.publicClient = publicClient;\n\t}\n\n\tpublic async sendToken(\n\t\ttokenAddress: Address,\n\t\tamount: string,\n\t\trecipient: Address\n\t): Promise {\n\t\tconst [tokenDecimals, tokenSymbol, tokenBalance] = await Promise.all([\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'decimals',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'symbol',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'balanceOf',\n\t\t\t\targs: [this.walletClient.account?.address!],\n\t\t\t}),\n\t\t]);\n\n\t\tconsole.log(\n\t\t\t`Current ${tokenSymbol} balance ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t);\n\n\t\tif (parseUnits(amount, tokenDecimals) > tokenBalance) {\n\t\t\tthrow new Error(\n\t\t\t\t`Insufficient balance. Required: ${amount}, available: ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t\t);\n\t\t}\n\n\t\tconst txHash = await this.walletClient.writeContract({\n\t\t\taddress: tokenAddress,\n\t\t\tabi: erc20Abi,\n\t\t\tfunctionName: 'transfer',\n\t\t\targs: [recipient, parseUnits(amount, tokenDecimals)],\n\t\t\tchain: this.walletClient.chain,\n\t\t\taccount: this.walletClient.account!,\n\t\t});\n\n\t\tconst { status } = await this.publicClient.waitForTransactionReceipt({\n\t\t\thash: txHash,\n\t\t});\n\n\t\tif (status !== 'success') {\n\t\t\tthrow new Error(`Error sending token. Hash: ${txHash}`);\n\t\t}\n\n\t\tconsole.log(`Token successfully sent. Hash: ${txHash}`);\n\n\t\treturn txHash;\n\t}\n}\n", "import { PublicClient } from 'viem';\n\ntype GasData = {\n\tgasPrice?: string;\n\tmaxFeePerGas?: string;\n\tmaxPriorityFeePerGas?: string;\n};\n\nexport async function getActualGasData(\n\tpublicClient: PublicClient\n): Promise {\n\tconst block = await publicClient.getBlock();\n\n\tconst isEIP1559 = !!block.baseFeePerGas;\n\n\tlet gasPrice = 0n;\n\tlet maxPriorityFeePerGas = 0n;\n\ttry {\n\t\tif (isEIP1559) {\n\t\t\tconst { maxFeePerGas } = await publicClient.estimateFeesPerGas();\n\t\t\tgasPrice = maxFeePerGas;\n\t\t\tmaxPriorityFeePerGas =\n\t\t\t\tawait publicClient.estimateMaxPriorityFeePerGas();\n\t\t} else {\n\t\t\tgasPrice = await publicClient.getGasPrice();\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('Error getting actual gas data:', error);\n\t\treturn {\n\t\t\tgasPrice: '0',\n\t\t\tmaxFeePerGas: '0',\n\t\t\tmaxPriorityFeePerGas: '0',\n\t\t};\n\t}\n\n\tconst gasDataLegacy = {\n\t\tgasPrice: gasPrice.toString(),\n\t};\n\n\tconst gasDataEIP1559 = {\n\t\tmaxFeePerGas: gasPrice.toString(),\n\t\tmaxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n\t};\n\n\tconst gasData: GasData = isEIP1559 ? gasDataEIP1559 : gasDataLegacy;\n\n\treturn gasData;\n}\n", "import { Deployment } from 'hardhat-deploy/types';\nimport { HardhatRuntimeEnvironment } from 'hardhat/types';\nimport { PublicClient } from 'viem';\nimport { getActualGasData } from './getActualGasData';\n\ntype HardhatDeployWrapperArgs = {\n\thre: HardhatRuntimeEnvironment;\n\targs: any[];\n\tpublicClient: PublicClient;\n\tproxy?: boolean;\n\tgasLimit?: number;\n\tlog?: boolean;\n\tlibraries?: {\n\t\t[key: string]: `0x${string}`;\n\t};\n\tskipIfAlreadyDeployed: boolean;\n};\n\nexport async function hardhatDeployWrapper(\n\tcontractName: string,\n\t{\n\t\thre,\n\t\targs,\n\t\tpublicClient,\n\t\tproxy = false,\n\t\tgasLimit,\n\t\tlog = false,\n\t\tlibraries,\n\t\tskipIfAlreadyDeployed = false,\n\t}: HardhatDeployWrapperArgs\n): Promise {\n\tlet actualDeployer;\n\n\tif (proxy) {\n\t\tconst { proxyDeployer } = await hre.getNamedAccounts();\n\t\tactualDeployer = proxyDeployer;\n\t} else {\n\t\tconst { deployer } = await hre.getNamedAccounts();\n\t\tactualDeployer = deployer;\n\t}\n\n\tconst { deploy } = hre.deployments;\n\n\tconst nonce = await publicClient.getTransactionCount({\n\t\taddress: actualDeployer as `0x${string}`,\n\t});\n\n\tconst gasData = await getActualGasData(publicClient);\n\tconst waitConfirmations = hre.network.name.startsWith('ethereum') ? 1 : 3;\n\n\tif (log) {\n\t\tconsole.log(\n\t\t\t`\\x1b[34m[hardhatDeployWrapper]\\x1b[0m\\x1b[35m[args]\\x1b[0m`,\n\t\t\t{\n\t\t\t\tfrom: actualDeployer,\n\t\t\t\targs,\n\t\t\t\tnonce,\n\t\t\t\tgasLimit: gasLimit ? gasLimit : 'auto',\n\t\t\t\tgasData,\n\t\t\t\twaitConfirmations,\n\t\t\t}\n\t\t);\n\t}\n\n\tlet deployment: Deployment;\n\ttry {\n\t\tconsole.log('Starting deployment of:', contractName);\n\t\tdeployment = await deploy(contractName, {\n\t\t\tfrom: actualDeployer,\n\t\t\targs: args,\n\t\t\tlog: true,\n\t\t\tautoMine: true,\n\t\t\tnonce,\n\t\t\twaitConfirmations,\n\t\t\t...(gasLimit ? { gasLimit } : {}),\n\t\t\t...gasData,\n\t\t\t...(libraries ? { libraries } : {}),\n\t\t\tskipIfAlreadyDeployed,\n\t\t});\n\t} catch (error) {\n\t\tconsole.error('Error deploying contract:', error);\n\t\tthrow error;\n\t}\n\n\treturn deployment;\n}\n"], - "mappings": "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", - "names": [] + "sources": ["../node_modules/viem/errors/version.ts", "../node_modules/viem/errors/base.ts", "../node_modules/viem/utils/unit/formatUnits.ts", "../node_modules/viem/constants/abis.ts", "../src/constants/config.ts", "../src/networks/getNetworkEnvKey.ts", "../src/networks/networkTypes.ts", "../node_modules/@concero/concero-networks/output/chains.mainnet.json", "../node_modules/@concero/concero-networks/output/chains.testnet.json", "../node_modules/viem/utils/chain/defineChain.ts", "../node_modules/viem/errors/unit.ts", "../node_modules/viem/utils/unit/parseUnits.ts", "../node_modules/viem/index.ts", "../src/utils/createViemChain.ts", "../src/utils/getEnvVar.ts", "../src/utils/log.ts", "../src/utils/getTrezorDeployEnabled.ts", "../src/utils/getWallet.ts", "../src/utils/updateEnvVariable.ts", "../src/constants/deploymentVariables.ts", "../src/constants/conceroNetworks.ts", "../src/deploy/GenericDeploy.ts", "../src/tokens/TokenSender.ts", "../src/deploy/getActualGasData.ts", "../src/deploy/hardhatDeployWrapper.ts"], + "sourcesContent": ["export const version = '2.24.2'\n", "import { version } from './version.js'\n\ntype ErrorConfig = {\n getDocsUrl?: ((args: BaseErrorParameters) => string | undefined) | undefined\n version?: string | undefined\n}\n\nlet errorConfig: ErrorConfig = {\n getDocsUrl: ({\n docsBaseUrl,\n docsPath = '',\n docsSlug,\n }: BaseErrorParameters) =>\n docsPath\n ? `${docsBaseUrl ?? 'https://viem.sh'}${docsPath}${\n docsSlug ? `#${docsSlug}` : ''\n }`\n : undefined,\n version: `viem@${version}`,\n}\n\nexport function setErrorConfig(config: ErrorConfig) {\n errorConfig = config\n}\n\ntype BaseErrorParameters = {\n cause?: BaseError | Error | undefined\n details?: string | undefined\n docsBaseUrl?: string | undefined\n docsPath?: string | undefined\n docsSlug?: string | undefined\n metaMessages?: string[] | undefined\n name?: string | undefined\n}\n\nexport type BaseErrorType = BaseError & { name: 'BaseError' }\nexport class BaseError extends Error {\n details: string\n docsPath?: string | undefined\n metaMessages?: string[] | undefined\n shortMessage: string\n version: string\n\n override name = 'BaseError'\n\n constructor(shortMessage: string, args: BaseErrorParameters = {}) {\n const details = (() => {\n if (args.cause instanceof BaseError) return args.cause.details\n if (args.cause?.message) return args.cause.message\n return args.details!\n })()\n const docsPath = (() => {\n if (args.cause instanceof BaseError)\n return args.cause.docsPath || args.docsPath\n return args.docsPath\n })()\n const docsUrl = errorConfig.getDocsUrl?.({ ...args, docsPath })\n\n const message = [\n shortMessage || 'An error occurred.',\n '',\n ...(args.metaMessages ? [...args.metaMessages, ''] : []),\n ...(docsUrl ? [`Docs: ${docsUrl}`] : []),\n ...(details ? [`Details: ${details}`] : []),\n ...(errorConfig.version ? [`Version: ${errorConfig.version}`] : []),\n ].join('\\n')\n\n super(message, args.cause ? { cause: args.cause } : undefined)\n\n this.details = details\n this.docsPath = docsPath\n this.metaMessages = args.metaMessages\n this.name = args.name ?? this.name\n this.shortMessage = shortMessage\n this.version = version\n }\n\n walk(): Error\n walk(fn: (err: unknown) => boolean): Error | null\n walk(fn?: any): any {\n return walk(this, fn)\n }\n}\n\nfunction walk(\n err: unknown,\n fn?: ((err: unknown) => boolean) | undefined,\n): unknown {\n if (fn?.(err)) return err\n if (\n err &&\n typeof err === 'object' &&\n 'cause' in err &&\n err.cause !== undefined\n )\n return walk(err.cause, fn)\n return fn ? null : err\n}\n", "import type { ErrorType } from '../../errors/utils.js'\n\nexport type FormatUnitsErrorType = ErrorType\n\n/**\n * Divides a number by a given exponent of base 10 (10exponent), and formats it into a string representation of the number..\n *\n * - Docs: https://viem.sh/docs/utilities/formatUnits\n *\n * @example\n * import { formatUnits } from 'viem'\n *\n * formatUnits(420000000000n, 9)\n * // '420'\n */\nexport function formatUnits(value: bigint, decimals: number) {\n let display = value.toString()\n\n const negative = display.startsWith('-')\n if (negative) display = display.slice(1)\n\n display = display.padStart(decimals, '0')\n\n let [integer, fraction] = [\n display.slice(0, display.length - decimals),\n display.slice(display.length - decimals),\n ]\n fraction = fraction.replace(/(0+)$/, '')\n return `${negative ? '-' : ''}${integer || '0'}${\n fraction ? `.${fraction}` : ''\n }`\n}\n", "/* [Multicall3](https://github.com/mds1/multicall) */\nexport const multicall3Abi = [\n {\n inputs: [\n {\n components: [\n {\n name: 'target',\n type: 'address',\n },\n {\n name: 'allowFailure',\n type: 'bool',\n },\n {\n name: 'callData',\n type: 'bytes',\n },\n ],\n name: 'calls',\n type: 'tuple[]',\n },\n ],\n name: 'aggregate3',\n outputs: [\n {\n components: [\n {\n name: 'success',\n type: 'bool',\n },\n {\n name: 'returnData',\n type: 'bytes',\n },\n ],\n name: 'returnData',\n type: 'tuple[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n] as const\n\nconst universalResolverErrors = [\n {\n inputs: [],\n name: 'ResolverNotFound',\n type: 'error',\n },\n {\n inputs: [],\n name: 'ResolverWildcardNotSupported',\n type: 'error',\n },\n {\n inputs: [],\n name: 'ResolverNotContract',\n type: 'error',\n },\n {\n inputs: [\n {\n name: 'returnData',\n type: 'bytes',\n },\n ],\n name: 'ResolverError',\n type: 'error',\n },\n {\n inputs: [\n {\n components: [\n {\n name: 'status',\n type: 'uint16',\n },\n {\n name: 'message',\n type: 'string',\n },\n ],\n name: 'errors',\n type: 'tuple[]',\n },\n ],\n name: 'HttpError',\n type: 'error',\n },\n] as const\n\nexport const universalResolverResolveAbi = [\n ...universalResolverErrors,\n {\n name: 'resolve',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'name', type: 'bytes' },\n { name: 'data', type: 'bytes' },\n ],\n outputs: [\n { name: '', type: 'bytes' },\n { name: 'address', type: 'address' },\n ],\n },\n {\n name: 'resolve',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'name', type: 'bytes' },\n { name: 'data', type: 'bytes' },\n { name: 'gateways', type: 'string[]' },\n ],\n outputs: [\n { name: '', type: 'bytes' },\n { name: 'address', type: 'address' },\n ],\n },\n] as const\n\nexport const universalResolverReverseAbi = [\n ...universalResolverErrors,\n {\n name: 'reverse',\n type: 'function',\n stateMutability: 'view',\n inputs: [{ type: 'bytes', name: 'reverseName' }],\n outputs: [\n { type: 'string', name: 'resolvedName' },\n { type: 'address', name: 'resolvedAddress' },\n { type: 'address', name: 'reverseResolver' },\n { type: 'address', name: 'resolver' },\n ],\n },\n {\n name: 'reverse',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { type: 'bytes', name: 'reverseName' },\n { type: 'string[]', name: 'gateways' },\n ],\n outputs: [\n { type: 'string', name: 'resolvedName' },\n { type: 'address', name: 'resolvedAddress' },\n { type: 'address', name: 'reverseResolver' },\n { type: 'address', name: 'resolver' },\n ],\n },\n] as const\n\nexport const textResolverAbi = [\n {\n name: 'text',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'name', type: 'bytes32' },\n { name: 'key', type: 'string' },\n ],\n outputs: [{ name: '', type: 'string' }],\n },\n] as const\n\nexport const addressResolverAbi = [\n {\n name: 'addr',\n type: 'function',\n stateMutability: 'view',\n inputs: [{ name: 'name', type: 'bytes32' }],\n outputs: [{ name: '', type: 'address' }],\n },\n {\n name: 'addr',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'name', type: 'bytes32' },\n { name: 'coinType', type: 'uint256' },\n ],\n outputs: [{ name: '', type: 'bytes' }],\n },\n] as const\n\n// ERC-1271\n// isValidSignature(bytes32 hash, bytes signature) \u2192 bytes4 magicValue\n/** @internal */\nexport const smartAccountAbi = [\n {\n name: 'isValidSignature',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'hash', type: 'bytes32' },\n { name: 'signature', type: 'bytes' },\n ],\n outputs: [{ name: '', type: 'bytes4' }],\n },\n] as const\n\n// ERC-6492 - universal deployless signature validator contract\n// constructor(address _signer, bytes32 _hash, bytes _signature) \u2192 bytes4 returnValue\n// returnValue is either 0x1 (valid) or 0x0 (invalid)\nexport const universalSignatureValidatorAbi = [\n {\n inputs: [\n {\n name: '_signer',\n type: 'address',\n },\n {\n name: '_hash',\n type: 'bytes32',\n },\n {\n name: '_signature',\n type: 'bytes',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'constructor',\n },\n {\n inputs: [\n {\n name: '_signer',\n type: 'address',\n },\n {\n name: '_hash',\n type: 'bytes32',\n },\n {\n name: '_signature',\n type: 'bytes',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n name: 'isValidSig',\n },\n] as const\n\n/** [ERC-20 Token Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-20) */\nexport const erc20Abi = [\n {\n type: 'event',\n name: 'Approval',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'event',\n name: 'Transfer',\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'allowance',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'spender',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'approve',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'balanceOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'decimals',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint8',\n },\n ],\n },\n {\n type: 'function',\n name: 'name',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'symbol',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'totalSupply',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'transfer',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'transferFrom',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'sender',\n type: 'address',\n },\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n] as const\n\n/**\n * [bytes32-flavored ERC-20](https://docs.makerdao.com/smart-contract-modules/mkr-module#4.-gotchas-potential-source-of-user-error)\n * for tokens (ie. Maker) that use bytes32 instead of string.\n */\nexport const erc20Abi_bytes32 = [\n {\n type: 'event',\n name: 'Approval',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'event',\n name: 'Transfer',\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'allowance',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'spender',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'approve',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'balanceOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'decimals',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint8',\n },\n ],\n },\n {\n type: 'function',\n name: 'name',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'bytes32',\n },\n ],\n },\n {\n type: 'function',\n name: 'symbol',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'bytes32',\n },\n ],\n },\n {\n type: 'function',\n name: 'totalSupply',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'transfer',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'transferFrom',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'sender',\n type: 'address',\n },\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n] as const\n\n/** [ERC-721 Non-Fungible Token Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-721) */\nexport const erc721Abi = [\n {\n type: 'event',\n name: 'Approval',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: true,\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'event',\n name: 'ApprovalForAll',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'operator',\n type: 'address',\n },\n {\n indexed: false,\n name: 'approved',\n type: 'bool',\n },\n ],\n },\n {\n type: 'event',\n name: 'Transfer',\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: true,\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'approve',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'balanceOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'getApproved',\n stateMutability: 'view',\n inputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'address',\n },\n ],\n },\n {\n type: 'function',\n name: 'isApprovedForAll',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'operator',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'name',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'ownerOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n name: 'owner',\n type: 'address',\n },\n ],\n },\n {\n type: 'function',\n name: 'safeTransferFrom',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'from',\n type: 'address',\n },\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'safeTransferFrom',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'from',\n type: 'address',\n },\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'id',\n type: 'uint256',\n },\n {\n name: 'data',\n type: 'bytes',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'setApprovalForAll',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'operator',\n type: 'address',\n },\n {\n name: 'approved',\n type: 'bool',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'symbol',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'tokenByIndex',\n stateMutability: 'view',\n inputs: [\n {\n name: 'index',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'tokenByIndex',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'index',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'tokenURI',\n stateMutability: 'view',\n inputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'totalSupply',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'transferFrom',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'sender',\n type: 'address',\n },\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'tokeId',\n type: 'uint256',\n },\n ],\n outputs: [],\n },\n] as const\n\n/** [ERC-4626 Tokenized Vaults Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-4626) */\nexport const erc4626Abi = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'Approval',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'sender',\n type: 'address',\n },\n {\n indexed: true,\n name: 'receiver',\n type: 'address',\n },\n {\n indexed: false,\n name: 'assets',\n type: 'uint256',\n },\n {\n indexed: false,\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'Deposit',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'Transfer',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'sender',\n type: 'address',\n },\n {\n indexed: true,\n name: 'receiver',\n type: 'address',\n },\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: false,\n name: 'assets',\n type: 'uint256',\n },\n {\n indexed: false,\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'Withdraw',\n type: 'event',\n },\n {\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'spender',\n type: 'address',\n },\n ],\n name: 'allowance',\n outputs: [\n {\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'approve',\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'asset',\n outputs: [\n {\n name: 'assetTokenAddress',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n name: 'balanceOf',\n outputs: [\n {\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'convertToAssets',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n name: 'convertToShares',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n ],\n name: 'deposit',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'caller',\n type: 'address',\n },\n ],\n name: 'maxDeposit',\n outputs: [\n {\n name: 'maxAssets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'caller',\n type: 'address',\n },\n ],\n name: 'maxMint',\n outputs: [\n {\n name: 'maxShares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'maxRedeem',\n outputs: [\n {\n name: 'maxShares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'maxWithdraw',\n outputs: [\n {\n name: 'maxAssets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n ],\n name: 'mint',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n name: 'previewDeposit',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'previewMint',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'previewRedeem',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n name: 'previewWithdraw',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'redeem',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'totalAssets',\n outputs: [\n {\n name: 'totalManagedAssets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'totalSupply',\n outputs: [\n {\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'transfer',\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'from',\n type: 'address',\n },\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'transferFrom',\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'withdraw',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const\n", "export const config = {\n DEFAULT_BLOCK_CONFIRMATIONS: 2,\n};\n", "/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkEnvKey(networkName: string): string {\n if (!networkName) {\n throw new Error('Network name must be provided');\n }\n return camelCaseToCapsSnakeCase(networkName);\n}\n\n/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkKey(NETWORK_NAME: string): string {\n if (!NETWORK_NAME) {\n throw new Error('Network name must be provided');\n }\n return capsSnakeCaseToCamelCase(NETWORK_NAME);\n}\n\n/**\n * Converts a string from CAPS_SNAKE_CASE to camelCase\n *\n * @param snakeCaseString The string in CAPS_SNAKE_CASE format\n * @returns The string converted to camelCase format\n */\nexport function capsSnakeCaseToCamelCase(snakeCaseString: string): string {\n if (!snakeCaseString) {\n throw new Error('String must be provided');\n }\n\n return snakeCaseString\n .toLowerCase()\n .replace(/_([a-z])/g, (_, char) => char.toUpperCase());\n}\n\n/**\n * Converts a string from camelCase to CAPS_SNAKE_CASE\n *\n * @param camelCaseString The string in camelCase format\n * @returns The string converted to CAPS_SNAKE_CASE format\n */\nexport function camelCaseToCapsSnakeCase(camelCaseString: string): string {\n if (!camelCaseString) {\n throw new Error('String must be provided');\n }\n\n return camelCaseString.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toUpperCase();\n}\n\nexport function getNetworkName(networkEnvKey: string): string {\n if (!networkEnvKey) {\n throw new Error('Network name must be provided');\n }\n\n return networkEnvKey\n .toLowerCase()\n .split('_')\n .map((word, index) =>\n index === 0 ? word : word[0].toUpperCase() + word.slice(1)\n )\n .join('');\n}\n", "import { type NetworkType } from './types';\n\nexport const networkTypes: Record = {\n mainnet: 'mainnet',\n testnet: 'testnet',\n localhost: 'localhost',\n};\n", "{\n \"1\": {\n \"id\": \"1\",\n \"chainSelector\": 1,\n \"name\": \"ethereum\",\n \"rpcUrls\": [\n \"https://cloudflare-eth.com\",\n \"https://eth1.lava.build\",\n \"https://mainnet.gateway.tenderly.co\",\n \"https://eth.drpc.org\",\n \"https://gateway.tenderly.co/public/mainnet\",\n \"https://go.getblock.io/aefd01aa907c4805ba3c00a9e5b48c6b\",\n \"https://0xrpc.io/eth\",\n \"https://eth-mainnet.rpcfast.com?api_key=xbhWBI1Wkguk8SNMu1bvvLurPGLXmgwYeC4S6g2H7WdwFigZSmPWVZRxrskEQwIf\",\n \"https://rpc.eth.gateway.fm\",\n \"https://1rpc.io/eth\",\n \"https://eth-mainnet.public.blastapi.io\",\n \"https://ethereum-rpc.publicnode.com\",\n \"https://rpc.mevblocker.io/fast\",\n \"https://eth.meowrpc.com\",\n \"https://eth.api.pocket.network\",\n \"https://ethereum-public.nodies.app\",\n \"https://rpc.flashbots.net/fast\",\n \"https://ethereum-json-rpc.stakely.io\",\n \"https://eth.llamarpc.com\",\n \"https://eth.rpc.blxrbdn.com\",\n \"https://ethereum.public.blockpi.network/v1/rpc/public\",\n \"https://ethereum-mainnet.gateway.tatum.io\",\n \"https://eth.blockrazor.xyz\",\n \"https://api-ethereum-mainnet-reth.n.dwellir.com/2ccf18bf-2916-4198-8856-42172854353c\",\n \"https://eth.merkle.io\",\n \"https://eth-mainnet.nodereal.io/v1/1659dfb40aa24bbb8153a677b98064d7\",\n \"https://rpc.flashbots.net\",\n \"https://rpc.mevblocker.io/fullprivacy\",\n \"https://rpc.mevblocker.io/noreverts\",\n \"https://rpc.fullsend.to\",\n \"https://eth.api.onfinality.io/public\",\n \"https://public-eth.nownodes.io\",\n \"https://openapi.bitstack.com/v1/wNFxbiJyQsSeLrX8RRCHi7NpRxrlErZk/DjShIqLishPCTB9HiMkPHXjUM9CNM9Na/ETH/mainnet\",\n \"https://core.gashawk.io/rpc\",\n \"https://rpc.mevblocker.io\",\n \"https://ethereum.rpc.subquery.network/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Ethereum\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Etherscan\",\n \"url\": \"https://etherscan.io\",\n \"apiUrl\": \"https://api.etherscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 75,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"10\": {\n \"id\": \"10\",\n \"chainSelector\": 10,\n \"name\": \"optimism\",\n \"rpcUrls\": [\n \"https://optimism.drpc.org\",\n \"https://go.getblock.io/e8a75f8dcf614861becfbcb185be6eb4\",\n \"https://gateway.tenderly.co/public/optimism\",\n \"https://mainnet.optimism.io\",\n \"https://1rpc.io/op\",\n \"https://optimism.gateway.tenderly.co\",\n \"https://api-optimism-mainnet-archive.n.dwellir.com/2ccf18bf-2916-4198-8856-42172854353c\",\n \"https://optimism-rpc.publicnode.com\",\n \"https://optimism-public.nodies.app\",\n \"https://public-op-mainnet.fastnode.io\",\n \"https://optimism-mainnet.gateway.tatum.io\",\n \"https://optimism.api.onfinality.io/public\",\n \"https://optimism.public.blockpi.network/v1/rpc/public\",\n \"https://optimism.rpc.subquery.network/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Optimism Explorer\",\n \"url\": \"https://optimistic.etherscan.io\",\n \"apiUrl\": \"https://api-optimistic.etherscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 50,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"137\": {\n \"id\": \"137\",\n \"chainSelector\": 137,\n \"name\": \"polygon\",\n \"rpcUrls\": [\n \"https://polygon.drpc.org\",\n \"https://gateway.tenderly.co/public/polygon\",\n \"https://polygon.lava.build\",\n \"https://go.getblock.io/02667b699f05444ab2c64f9bff28f027\",\n \"https://polygon-mainnet.gateway.tatum.io\",\n \"https://polygon-rpc.com\",\n \"https://1rpc.io/matic\",\n \"https://polygon.meowrpc.com\",\n \"https://polygon-bor-rpc.publicnode.com\",\n \"https://polygon-public.nodies.app\",\n \"https://polygon.gateway.tenderly.co\",\n \"https://rpc-mainnet.matic.quiknode.pro\",\n \"https://polygon-mainnet.rpcfast.com?api_key=xbhWBI1Wkguk8SNMu1bvvLurPGLXmgwYeC4S6g2H7WdwFigZSmPWVZRxrskEQwIf\",\n \"https://polygon.rpc.subquery.network/public\",\n \"https://polygon.api.onfinality.io/public\",\n \"https://poly.api.pocket.network\"\n ],\n \"nativeCurrency\": {\n \"name\": \"POL\",\n \"decimals\": 18,\n \"symbol\": \"POL\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"PolygonScan\",\n \"url\": \"https://polygonscan.com\",\n \"apiUrl\": \"https://api.polygonscan.com/api\"\n }\n ],\n \"finalityConfirmations\": 128,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"8453\": {\n \"id\": \"8453\",\n \"chainSelector\": 8453,\n \"name\": \"base\",\n \"rpcUrls\": [\n \"https://base.drpc.org\",\n \"https://base.lava.build\",\n \"https://mainnet.base.org\",\n \"https://gateway.tenderly.co/public/base\",\n \"https://base.meowrpc.com\",\n \"https://base.gateway.tenderly.co\",\n \"https://developer-access-mainnet.base.org\",\n \"https://1rpc.io/base\",\n \"https://base-rpc.publicnode.com\",\n \"https://base-public.nodies.app\",\n \"https://base.public.blockpi.network/v1/rpc/public\",\n \"https://base-mainnet.public.blastapi.io\",\n \"https://base.api.onfinality.io/public\",\n \"https://base.rpc.blxrbdn.com\",\n \"https://base.api.pocket.network\",\n \"https://base.llamarpc.com\",\n \"https://api-base-mainnet-archive.n.dwellir.com/2ccf18bf-2916-4198-8856-42172854353c\",\n \"https://base.rpc.subquery.network/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Basescan\",\n \"url\": \"https://basescan.org\",\n \"apiUrl\": \"https://api.basescan.org/api\"\n }\n ],\n \"finalityConfirmations\": 50,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"42161\": {\n \"id\": \"42161\",\n \"chainSelector\": 42161,\n \"name\": \"arbitrum\",\n \"rpcUrls\": [\n \"https://arbitrum.drpc.org\",\n \"https://api-arbitrum-mainnet-archive.n.dwellir.com/2ccf18bf-2916-4198-8856-42172854353c\",\n \"https://arb1.lava.build\",\n \"https://1rpc.io/arb\",\n \"https://arbitrum-one-rpc.publicnode.com\",\n \"https://arbitrum-one-public.nodies.app\",\n \"https://arbitrum.gateway.tenderly.co\",\n \"https://arbitrum-one.public.blastapi.io\",\n \"https://arbitrum.api.onfinality.io/public\",\n \"https://arbitrum.meowrpc.com\",\n \"https://arbitrum.public.blockpi.network/v1/rpc/public\",\n \"https://arb1.arbitrum.io/rpc\",\n \"https://public-arb-mainnet.fastnode.io\",\n \"https://arbitrum.rpc.subquery.network/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Arbiscan\",\n \"url\": \"https://arbiscan.io\",\n \"apiUrl\": \"https://api.arbiscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 4080,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"43114\": {\n \"id\": \"43114\",\n \"chainSelector\": 43114,\n \"name\": \"avalanche\",\n \"rpcUrls\": [\n \"https://api.avax.network/ext/bc/C/rpc\",\n \"https://avalanche-mainnet.gateway.tenderly.co\",\n \"https://avalanche.drpc.org\",\n \"https://avax.api.pocket.network\",\n \"https://avalanche-c-chain-rpc.publicnode.com\",\n \"https://1rpc.io/avax/c\",\n \"https://avalanche-public.nodies.app/ext/bc/C/rpc\",\n \"https://avax.meowrpc.com\",\n \"https://avalanche.api.onfinality.io/public/ext/bc/C/rpc\",\n \"https://spectrum-01.simplystaking.xyz/avalanche-mn-rpc/ext/bc/C/rpc\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Avalanche\",\n \"decimals\": 18,\n \"symbol\": \"AVAX\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"SnowTrace\",\n \"url\": \"https://snowtrace.io\",\n \"apiUrl\": \"https://api.snowtrace.io/api\"\n }\n ],\n \"finalityConfirmations\": 1,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n }\n}", "{\n \"81\": {\n \"id\": \"81\",\n \"isTestnet\": true,\n \"chainSelector\": 81,\n \"name\": \"astarShibuya\",\n \"rpcUrls\": [\n \"https://evm.shibuya.astar.network\",\n \"https://evm.shibuya.astar.network\",\n \"https://shibuya.public.blastapi.io\",\n \"https://shibuya-rpc.dwellir.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Astar\",\n \"decimals\": 18,\n \"symbol\": \"ASTR\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Subscan\",\n \"url\": \"https://shibuya.subscan.io\",\n \"apiUrl\": \"https://shibuya.subscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 6,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"97\": {\n \"id\": \"97\",\n \"isTestnet\": true,\n \"chainSelector\": 97,\n \"name\": \"bnbTestnet\",\n \"rpcUrls\": [\n \"https://bsc-testnet.drpc.org\",\n \"https://bsc-testnet-rpc.publicnode.com\",\n \"https://data-seed-prebsc-2-s2.bnbchain.org:8545\",\n \"https://data-seed-prebsc-1-s2.bnbchain.org:8545\",\n \"https://data-seed-prebsc-2-s3.bnbchain.org:8545\",\n \"https://data-seed-prebsc-1-s1.bnbchain.org:8545\",\n \"https://data-seed-prebsc-2-s1.bnbchain.org:8545\",\n \"https://data-seed-prebsc-1-s3.bnbchain.org:8545\",\n \"https://bnb-testnet.api.onfinality.io/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"BNB\",\n \"decimals\": 18,\n \"symbol\": \"tBNB\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"BscScan\",\n \"url\": \"https://testnet.bscscan.com\",\n \"apiUrl\": \"https://api-testnet.bscscan.com/api\"\n }\n ],\n \"finalityConfirmations\": 7,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xf6BBdC1fD89E554639D7A683909338802B05F160\",\n \"relayerLib\": \"0x3a4EA7fd0CeA70a4B2Cf72c5AC966225C98eE48d\",\n \"validatorLib\": \"0xAEBaacfa9CaC6B8486Ae77843728c863c909E7d0\"\n }\n },\n \"133\": {\n \"id\": \"133\",\n \"isTestnet\": true,\n \"chainSelector\": 133,\n \"name\": \"hashkeyTestnet\",\n \"rpcUrls\": [],\n \"nativeCurrency\": {\n \"name\": \"HashKey EcoPoints\",\n \"decimals\": 18,\n \"symbol\": \"HSK\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Hashkey Explorer\",\n \"url\": \"https://testnet.hashkeyscan.io\",\n \"apiUrl\": \"https://testnet.hashkeyscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 1800,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"157\": {\n \"id\": \"157\",\n \"isTestnet\": true,\n \"chainSelector\": 157,\n \"name\": \"shibariumPuppynet\",\n \"rpcUrls\": [\n \"https://puppynet.shibrpc.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Bone\",\n \"decimals\": 18,\n \"symbol\": \"BONE\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Puppyscan\",\n \"url\": \"https://puppyscan.shib.io\",\n \"apiUrl\": \"https://puppyscan.shib.io/api\"\n }\n ],\n \"finalityConfirmations\": 60,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xea73Bc856EdD980912Fb8FE4CFC7bba52D980F6A\",\n \"relayerLib\": \"0x9900a9E38E8695eE9109962b9f4671cF977c265a\",\n \"validatorLib\": \"0x39f311124745064935cB196AeE2a950cbbC11336\"\n }\n },\n \"195\": {\n \"id\": \"195\",\n \"isTestnet\": true,\n \"chainSelector\": 195,\n \"name\": \"xlayerSepolia\",\n \"rpcUrls\": [],\n \"nativeCurrency\": {\n \"name\": \"OKB\",\n \"decimals\": 18,\n \"symbol\": \"OKB\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"X Layer Explorer\",\n \"url\": \"https://testnet-explorer.xlayer.tech\",\n \"apiUrl\": \"https://testnet-explorer.xlayer.tech/api\"\n }\n ],\n \"finalityConfirmations\": 3600,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"296\": {\n \"id\": \"296\",\n \"isTestnet\": true,\n \"chainSelector\": 296,\n \"name\": \"hederaTestnet\",\n \"rpcUrls\": [\n \"https://testnet.hashio.io/api\",\n \"https://296.rpc.thirdweb.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"HBAR\",\n \"decimals\": 18,\n \"symbol\": \"HBAR\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"300\": {\n \"id\": \"300\",\n \"isTestnet\": true,\n \"chainSelector\": 300,\n \"name\": \"zksyncSepolia\",\n \"rpcUrls\": [\n \"https://zksync-sepolia.drpc.org\",\n \"https://rpc.ankr.com/zksync_era_sepolia\",\n \"https://sepolia.era.zksync.dev\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 1200,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xBd5EC2962802123f6D8d0092dC485C98e23D1394\",\n \"relayerLib\": \"0x06942a1E6A73069a58306d9E154051b85b32D071\",\n \"validatorLib\": \"0xe277f7afA46291d4c729a184D51D78ae598d54b1\"\n }\n },\n \"338\": {\n \"id\": \"338\",\n \"isTestnet\": true,\n \"chainSelector\": 338,\n \"name\": \"cronosTestnet\",\n \"rpcUrls\": [\n \"https://cro-testnet.gateway.tatum.io\",\n \"https://cronos-testnet.drpc.org\",\n \"https://evm-t3.cronos.org\"\n ],\n \"nativeCurrency\": {\n \"name\": \"CRO\",\n \"decimals\": 18,\n \"symbol\": \"tCRO\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Cronos Explorer\",\n \"url\": \"https://testnet.cronoscan.com\",\n \"apiUrl\": \"https://api-testnet.cronoscan.com/api\"\n }\n ],\n \"finalityConfirmations\": 2,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"545\": {\n \"id\": \"545\",\n \"isTestnet\": true,\n \"chainSelector\": 545,\n \"name\": \"flowTestnet\",\n \"rpcUrls\": [\n \"https://testnet.evm.nodes.onflow.org\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Flow\",\n \"decimals\": 18,\n \"symbol\": \"FLOW\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xf6BBdC1fD89E554639D7A683909338802B05F160\",\n \"relayerLib\": \"0x3a4EA7fd0CeA70a4B2Cf72c5AC966225C98eE48d\",\n \"validatorLib\": \"0xAEBaacfa9CaC6B8486Ae77843728c863c909E7d0\"\n }\n },\n \"919\": {\n \"id\": \"919\",\n \"isTestnet\": true,\n \"chainSelector\": 919,\n \"name\": \"modeTestnet\",\n \"rpcUrls\": [\n \"https://mode-testnet.drpc.org\",\n \"https://sepolia.mode.network\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Mode Explorer\",\n \"url\": \"https://sepolia.explorer.mode.network\",\n \"apiUrl\": \"https://sepolia.explorer.mode.network/api\"\n }\n ],\n \"finalityConfirmations\": 1110,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"943\": {\n \"id\": \"943\",\n \"isTestnet\": true,\n \"chainSelector\": 943,\n \"name\": \"pulsechainTestnet\",\n \"rpcUrls\": [\n \"https://pulsechain-testnet-rpc.publicnode.com\",\n \"https://rpc-testnet-pulsechain.g4mm4.io\",\n \"https://rpc.v4.testnet.pulsechain.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"V4 Pulse\",\n \"decimals\": 18,\n \"symbol\": \"v4PLS\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xea73Bc856EdD980912Fb8FE4CFC7bba52D980F6A\",\n \"relayerLib\": \"0x9900a9E38E8695eE9109962b9f4671cF977c265a\",\n \"validatorLib\": \"0x39f311124745064935cB196AeE2a950cbbC11336\"\n }\n },\n \"1001\": {\n \"id\": \"1001\",\n \"isTestnet\": true,\n \"chainSelector\": 1001,\n \"name\": \"kaiaKairos\",\n \"rpcUrls\": [\n \"https://klaytn-baobab.drpc.org\",\n \"https://kaia-kairos.blockpi.network/v1/rpc/public\",\n \"https://rpc.ankr.com/kaia_testnet\",\n \"https://public-en-kairos.node.kaia.io\"\n ],\n \"nativeCurrency\": {\n \"name\": \"KAIA\",\n \"decimals\": 18,\n \"symbol\": \"KAIA\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1112\": {\n \"id\": \"1112\",\n \"isTestnet\": true,\n \"chainSelector\": 1112,\n \"name\": \"wemixTestnet\",\n \"rpcUrls\": [\n \"https://wemix-testnet.drpc.org\",\n \"https://api.test.wemix.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"WEMIX\",\n \"decimals\": 18,\n \"symbol\": \"tWEMIX\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 2,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1114\": {\n \"id\": \"1114\",\n \"isTestnet\": true,\n \"chainSelector\": 1114,\n \"name\": \"coreTestnet\",\n \"rpcUrls\": [\n \"https://rpc.test2.btcs.network\"\n ],\n \"nativeCurrency\": {\n \"name\": \"tCORE2\",\n \"decimals\": 18,\n \"symbol\": \"tCORE2\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"CoreScan\",\n \"url\": \"https://scan.test.btcs.network\",\n \"apiUrl\": \"https://scan.test.btcs.network/api\"\n }\n ],\n \"finalityConfirmations\": 7,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5\",\n \"relayerLib\": \"0x54B8d67AA64CF8A59F604cA6e98c643C64920b03\",\n \"validatorLib\": \"0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a\"\n }\n },\n \"1123\": {\n \"id\": \"1123\",\n \"isTestnet\": true,\n \"finalityTagEnabled\": true,\n \"chainSelector\": 1123,\n \"name\": \"b2Testnet\",\n \"rpcUrls\": [\n \"https://rpc.ankr.com/b2_testnet\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Bitcoin\",\n \"decimals\": 18,\n \"symbol\": \"BTC\"\n },\n \"blockExplorers\": [],\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1174\": {\n \"id\": \"1174\",\n \"isTestnet\": true,\n \"chainSelector\": 1174,\n \"name\": \"litheumTestnet\",\n \"rpcUrls\": [\n \"https://testnet.litheum.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"LTH\",\n \"decimals\": 18,\n \"symbol\": \"LTH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1270\": {\n \"id\": \"1270\",\n \"isTestnet\": true,\n \"chainSelector\": 1270,\n \"name\": \"irysTestnet\",\n \"rpcUrls\": [\n \"https://testnet-rpc.irys.xyz/v1/execution-rpc\",\n \"testnet-rpc.irys.xyz\"\n ],\n \"nativeCurrency\": {\n \"name\": \"mIRYS\",\n \"decimals\": 18,\n \"symbol\": \"mIRYS\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 6,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1301\": {\n \"id\": \"1301\",\n \"isTestnet\": true,\n \"chainSelector\": 1301,\n \"name\": \"unichainSepolia\",\n \"rpcUrls\": [\n \"https://unichain-sepolia.drpc.org\",\n \"https://unichain-sepolia-rpc.publicnode.com\",\n \"https://unichain-sepolia.api.onfinality.io/public\",\n \"https://sepolia.unichain.org\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Unichain Explorer\",\n \"url\": \"https://sepolia-explorer.unichain.network\",\n \"apiUrl\": \"https://sepolia-explorer.unichain.network/api\"\n }\n ],\n \"finalityConfirmations\": 1440,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5\",\n \"relayerLib\": \"0x54B8d67AA64CF8A59F604cA6e98c643C64920b03\",\n \"validatorLib\": \"0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a\"\n }\n },\n \"1328\": {\n \"id\": \"1328\",\n \"isTestnet\": true,\n \"chainSelector\": 1328,\n \"name\": \"seiTestnet\",\n \"rpcUrls\": [\n \"https://sei-testnet.drpc.org\",\n \"https://sei-testnet-public.nodies.app\",\n \"https://evm-rpc-testnet.sei-apis.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Sei\",\n \"decimals\": 18,\n \"symbol\": \"SEI\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Sei Explorer\",\n \"url\": \"https://seitrace.com\",\n \"apiUrl\": \"https://seitrace.com/api\"\n }\n ],\n \"finalityConfirmations\": 3,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x122947C8c3529DCa006aeE65832D3C3fED6bf3C0\",\n \"relayerLib\": \"0xe965dEBDfa6365CFb9e643ccdCBADE424a2eC381\",\n \"validatorLib\": \"0xB708D151D18e5aB3506934B39375D00EE1e0C882\"\n }\n },\n \"1946\": {\n \"id\": \"1946\",\n \"isTestnet\": true,\n \"chainSelector\": 1946,\n \"name\": \"soneiumMinato\",\n \"rpcUrls\": [\n \"https://soneium-minato.drpc.org\",\n \"https://rpc.minato.soneium.org\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Soneium Explorer\",\n \"url\": \"https://minato-explorer.soneium.com\",\n \"apiUrl\": \"https://minato-explorer.soneium.com/api\"\n }\n ],\n \"finalityConfirmations\": 810,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"2021\": {\n \"id\": \"2021\",\n \"isTestnet\": true,\n \"chainSelector\": 2021,\n \"name\": \"roninSaigon\",\n \"rpcUrls\": [\n \"https://saigon-testnet.roninchain.com/rpc\",\n \"https://saigon-testnet.roninchain.com/rpc\"\n ],\n \"nativeCurrency\": {\n \"name\": \"RON\",\n \"decimals\": 18,\n \"symbol\": \"RON\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Ronin Explorer\",\n \"url\": \"https://saigon-explorer.roninchain.com\",\n \"apiUrl\": \"https://saigon-explorer.roninchain.com/api\"\n }\n ],\n \"finalityConfirmations\": 4,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xea73Bc856EdD980912Fb8FE4CFC7bba52D980F6A\",\n \"relayerLib\": \"0x9900a9E38E8695eE9109962b9f4671cF977c265a\",\n \"validatorLib\": \"0x39f311124745064935cB196AeE2a950cbbC11336\"\n }\n },\n \"2221\": {\n \"id\": \"2221\",\n \"isTestnet\": true,\n \"chainSelector\": 2221,\n \"name\": \"kavaTestnet\",\n \"rpcUrls\": [\n \"https://kava-testnet.drpc.org\",\n \"https://evm.testnet.kava.io\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Kava\",\n \"decimals\": 18,\n \"symbol\": \"KAVA\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"2522\": {\n \"id\": \"2522\",\n \"isTestnet\": true,\n \"chainSelector\": 2522,\n \"name\": \"fraxtalHolesky\",\n \"rpcUrls\": [],\n \"nativeCurrency\": {\n \"name\": \"FRAX\",\n \"decimals\": 18,\n \"symbol\": \"FRAX\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 900,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"2810\": {\n \"id\": \"2810\",\n \"isTestnet\": true,\n \"chainSelector\": 2810,\n \"name\": \"morphHolesky\",\n \"rpcUrls\": [],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"3636\": {\n \"id\": \"3636\",\n \"isTestnet\": true,\n \"chainSelector\": 3636,\n \"name\": \"botanixTestnet\",\n \"rpcUrls\": [\n \"https://rpc.ankr.com/botanix_testnet\",\n \"https://node.botanixlabs.dev\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Botanix\",\n \"decimals\": 18,\n \"symbol\": \"BTC\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Botanix Explorer\",\n \"url\": \"https://testnet-explorer.botanixlabs.xyz\",\n \"apiUrl\": \"https://testnet-explorer.botanixlabs.xyz/api\"\n }\n ],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"4801\": {\n \"id\": \"4801\",\n \"isTestnet\": true,\n \"chainSelector\": 4801,\n \"name\": \"worldchainTestnet\",\n \"rpcUrls\": [\n \"https://worldchain-sepolia.drpc.org\",\n \"https://worldchain-sepolia.g.alchemy.com/public\",\n \"https://worldchain-sepolia.gateway.tenderly.co\",\n \"https://4801.rpc.thirdweb.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 1200,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xea73Bc856EdD980912Fb8FE4CFC7bba52D980F6A\",\n \"relayerLib\": \"0x9900a9E38E8695eE9109962b9f4671cF977c265a\",\n \"validatorLib\": \"0x39f311124745064935cB196AeE2a950cbbC11336\"\n }\n },\n \"5003\": {\n \"id\": \"5003\",\n \"isTestnet\": true,\n \"chainSelector\": 5003,\n \"name\": \"mantleSepolia\",\n \"rpcUrls\": [\n \"https://mantle-sepolia.drpc.org\",\n \"https://rpc.sepolia.mantle.xyz\"\n ],\n \"nativeCurrency\": {\n \"name\": \"MNT\",\n \"decimals\": 18,\n \"symbol\": \"MNT\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Mantle Explorer\",\n \"url\": \"https://explorer.sepolia.mantle.xyz\",\n \"apiUrl\": \"https://explorer.sepolia.mantle.xyz/api\"\n }\n ],\n \"finalityConfirmations\": 840,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"5124\": {\n \"id\": \"5124\",\n \"isTestnet\": true,\n \"chainSelector\": 5124,\n \"name\": \"seismicDevnet\",\n \"rpcUrls\": [\n \"https://node-2.seismicdev.net/rpc\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"5611\": {\n \"id\": \"5611\",\n \"isTestnet\": true,\n \"chainSelector\": 5611,\n \"name\": \"opbnbTestnet\",\n \"rpcUrls\": [\n \"https://opbnb-testnet.drpc.org\",\n \"https://opbnb-testnet-rpc.publicnode.com\",\n \"https://opbnb-testnet-rpc.bnbchain.org\",\n \"https://opbnb-testnet.nodereal.io/v1/e9a36765eb8a40b9bd12e680a1fd2bc5\",\n \"https://opbnb-testnet.nodereal.io/v1/64a9df0874fb4a93b9d0a3849de012d3\"\n ],\n \"nativeCurrency\": {\n \"name\": \"tBNB\",\n \"decimals\": 18,\n \"symbol\": \"tBNB\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"6342\": {\n \"id\": \"6342\",\n \"isTestnet\": true,\n \"chainSelector\": 6342,\n \"name\": \"megaethTestnet\",\n \"rpcUrls\": [],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"MegaEth Explorer\",\n \"url\": \"https://explorer-testnet.megaeth.io\",\n \"apiUrl\": \"https://explorer-testnet.megaeth.io/api\"\n }\n ],\n \"finalityConfirmations\": 900,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"8408\": {\n \"id\": \"8408\",\n \"isTestnet\": true,\n \"chainSelector\": 8408,\n \"name\": \"zenchainTestnet\",\n \"rpcUrls\": [\n \"https://zenchain-testnet.api.onfinality.io/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ZTC\",\n \"decimals\": 18,\n \"symbol\": \"ZTC\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"10143\": {\n \"id\": \"10143\",\n \"isTestnet\": true,\n \"chainSelector\": 10143,\n \"name\": \"monadTestnet\",\n \"rpcUrls\": [\n \"https://monad-testnet.drpc.org\",\n \"https://rpc.ankr.com/monad_testnet\",\n \"https://testnet-rpc.monad.xyz\",\n \"https://rpc-testnet.monadinfra.com\",\n \"https://monad-testnet.api.onfinality.io/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Testnet MON Token\",\n \"decimals\": 18,\n \"symbol\": \"MON\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Monad Explorer\",\n \"url\": \"https://explorer.testnet.monad.xyz\",\n \"apiUrl\": \"https://explorer.testnet.monad.xyz/api\"\n }\n ],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x3E2Ee768D9fADdd3673a69ED4d0D1d9147FA1054\",\n \"relayerLib\": \"0x9900a9E38E8695eE9109962b9f4671cF977c265a\",\n \"validatorLib\": \"0x39f311124745064935cB196AeE2a950cbbC11336\"\n }\n },\n \"10200\": {\n \"id\": \"10200\",\n \"isTestnet\": true,\n \"chainSelector\": 10200,\n \"name\": \"gnosisChiado\",\n \"rpcUrls\": [\n \"https://gnosis-chiado.drpc.org\",\n \"https://rpc.chiadochain.net\",\n \"https://gnosis-chiado-rpc.publicnode.com\",\n \"https://rpc.chiado.gnosis.gateway.fm\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Gnosis\",\n \"decimals\": 18,\n \"symbol\": \"xDAI\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Blockscout\",\n \"url\": \"https://gnosis-chiado.blockscout.com\",\n \"apiUrl\": \"https://gnosis-chiado.blockscout.com/api\"\n }\n ],\n \"finalityConfirmations\": 35,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5\",\n \"relayerLib\": \"0x54B8d67AA64CF8A59F604cA6e98c643C64920b03\",\n \"validatorLib\": \"0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a\"\n }\n },\n \"11124\": {\n \"id\": \"11124\",\n \"isTestnet\": true,\n \"finalityTagEnabled\": true,\n \"chainSelector\": 11124,\n \"name\": \"abstractSepolia\",\n \"rpcUrls\": [\n \"https://abstract-sepolia.drpc.org\",\n \"https://api.testnet.abs.xyz\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"18880\": {\n \"id\": \"18880\",\n \"isTestnet\": true,\n \"chainSelector\": 18880,\n \"name\": \"expchainTestnet\",\n \"rpcUrls\": [\n \"https://rpc1-testnet.expchain.ai\",\n \"https://expchain.polyhedra.network/rpc1-testnet\",\n \"https://expchain.polyhedra.network/rpc0-testnet\",\n \"https://expchain.polyhedra.network/rpc0-testnet\",\n \"https://expchain.polyhedra.network/rpc1-testnet\"\n ],\n \"nativeCurrency\": {\n \"name\": \"tZKJ\",\n \"decimals\": 18,\n \"symbol\": \"tZKJ\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"23295\": {\n \"id\": \"23295\",\n \"isTestnet\": true,\n \"chainSelector\": 23295,\n \"name\": \"oasissapphireTestnet\",\n \"rpcUrls\": [\n \"https://testnet.sapphire.oasis.io\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Sapphire Test Rose\",\n \"decimals\": 18,\n \"symbol\": \"TEST\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xcc9D0438ac3b90fB8291f4f3C1c420E215f36585\",\n \"relayerLib\": \"0x8510C780097cA53aeF8e3527a5107C4629b21f0C\",\n \"validatorLib\": \"0xb31EED4695De3eCE4381a40fA638d9a63904882b\"\n }\n },\n \"33111\": {\n \"id\": \"33111\",\n \"isTestnet\": true,\n \"finalityTagEnabled\": true,\n \"chainSelector\": 33111,\n \"name\": \"apechainCurtis\",\n \"rpcUrls\": [\n \"https://apechain-curtis.drpc.org\",\n \"https://curtis.rpc.caldera.xyz/http\",\n \"https://rpc.curtis.apechain.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"APE\",\n \"decimals\": 18,\n \"symbol\": \"APE\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Apechain Explorer\",\n \"url\": \"https://curtis-explorer.apechain.io\",\n \"apiUrl\": \"https://curtis-explorer.apechain.io/api\"\n }\n ],\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"37111\": {\n \"id\": \"37111\",\n \"isTestnet\": true,\n \"chainSelector\": 37111,\n \"name\": \"lensSepolia\",\n \"rpcUrls\": [\n \"https://rpc.testnet.lens.dev\",\n \"https://lens-testnet.drpc.org\"\n ],\n \"nativeCurrency\": {\n \"name\": \"GRASS\",\n \"decimals\": 18,\n \"symbol\": \"GRASS\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"43113\": {\n \"id\": \"43113\",\n \"isTestnet\": true,\n \"finalityTagEnabled\": true,\n \"chainSelector\": 43113,\n \"name\": \"avalancheFuji\",\n \"rpcUrls\": [\n \"https://api.avax-test.network/ext/bc/C/rpc\",\n \"https://avalanche-fuji.drpc.org\",\n \"https://avalanche-fuji-c-chain-rpc.publicnode.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Avalanche Fuji\",\n \"decimals\": 18,\n \"symbol\": \"AVAX\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Snowtrace\",\n \"url\": \"https://testnet.snowtrace.io\",\n \"apiUrl\": \"https://api-testnet.snowtrace.io/api\"\n }\n ],\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xe965dEBDfa6365CFb9e643ccdCBADE424a2eC381\",\n \"relayerLib\": \"0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a\",\n \"validatorLib\": \"0x246892c38a2314c30E56490ADf1bcf3470DCAE6A\"\n }\n },\n \"44787\": {\n \"id\": \"44787\",\n \"isTestnet\": true,\n \"chainSelector\": 44787,\n \"name\": \"celoAlfajores\",\n \"rpcUrls\": [],\n \"nativeCurrency\": {\n \"name\": \"CELO\",\n \"decimals\": 18,\n \"symbol\": \"A-CELO\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Celoscan\",\n \"url\": \"https://alfajores.celoscan.io\",\n \"apiUrl\": \"https://api-alfajores.celoscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"48899\": {\n \"id\": \"48899\",\n \"isTestnet\": true,\n \"chainSelector\": 48899,\n \"name\": \"zircuitTestnet\",\n \"rpcUrls\": [\n \"https://testnet.zircuit.com\",\n \"https://zircuit1-testnet.p2pify.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Zircuit Explorer\",\n \"url\": \"https://explorer.zircuit.com\",\n \"apiUrl\": \"https://explorer.zircuit.com/api\"\n }\n ],\n \"finalityConfirmations\": 630,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"57054\": {\n \"id\": \"57054\",\n \"isTestnet\": true,\n \"chainSelector\": 57054,\n \"name\": \"sonicBlaze\",\n \"rpcUrls\": [\n \"https://sonic-testnet.drpc.org\",\n \"https://sonic-blaze-rpc.publicnode.com\",\n \"https://rpc.blaze.soniclabs.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"S\",\n \"decimals\": 18,\n \"symbol\": \"S\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Sonic Explorer\",\n \"url\": \"https://explorer-testnet.sonic.guru\",\n \"apiUrl\": \"https://explorer-testnet.sonic.guru/api\"\n }\n ],\n \"finalityConfirmations\": 10,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xAEBaacfa9CaC6B8486Ae77843728c863c909E7d0\",\n \"relayerLib\": \"0x13187bb1d2f100F84770a848A1374bf745Ea4cF6\",\n \"validatorLib\": \"0x90D7e742746Abf405036aA21981C835F3E842DA4\"\n }\n },\n \"59141\": {\n \"id\": \"59141\",\n \"isTestnet\": true,\n \"chainSelector\": 59141,\n \"name\": \"lineaSepolia\",\n \"rpcUrls\": [\n \"https://linea-sepolia.drpc.org\",\n \"https://linea-sepolia-rpc.publicnode.com\",\n \"https://rpc.sepolia.linea.build\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Linea Explorer\",\n \"url\": \"https://sepolia.lineascan.build\",\n \"apiUrl\": \"https://api-sepolia.lineascan.build/api\"\n }\n ],\n \"finalityConfirmations\": 600,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"59902\": {\n \"id\": \"59902\",\n \"isTestnet\": true,\n \"chainSelector\": 59902,\n \"name\": \"metisSepolia\",\n \"rpcUrls\": [\n \"https://metis-sepolia.gateway.tenderly.co\",\n \"https://metis-sepolia-rpc.publicnode.com\",\n \"https://sepolia.metisdevops.link\"\n ],\n \"nativeCurrency\": {\n \"name\": \"tMETIS\",\n \"decimals\": 18,\n \"symbol\": \"tMETIS\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 360,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"80002\": {\n \"id\": \"80002\",\n \"isTestnet\": true,\n \"chainSelector\": 80002,\n \"name\": \"polygonAmoy\",\n \"rpcUrls\": [\n \"https://rpc-amoy.polygon.technology\",\n \"https://polygon-amoy.gateway.tenderly.co\",\n \"https://polygon-amoy.drpc.org\",\n \"https://polygon-amoy-public.nodies.app\",\n \"https://polygon-amoy-bor-rpc.publicnode.com\",\n \"https://polygon-amoy.api.onfinality.io/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"POL\",\n \"decimals\": 18,\n \"symbol\": \"POL\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"PolygonScan\",\n \"url\": \"https://amoy.polygonscan.com\",\n \"apiUrl\": \"https://api-amoy.polygonscan.com/api\"\n }\n ],\n \"finalityConfirmations\": 500,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x6FF322BC8da39bC87A056d4052aa763f7BDeE836\",\n \"relayerLib\": \"0x81365cc081dF5fdF6cbD47a34fF4acBcA2B35F0d\",\n \"validatorLib\": \"0x99542DdB261186F818974e579e4aBF3BFb44819e\"\n }\n },\n \"80069\": {\n \"id\": \"80069\",\n \"isTestnet\": true,\n \"chainSelector\": 80069,\n \"name\": \"berachainBepolia\",\n \"rpcUrls\": [\n \"https://bepolia.rpc.berachain.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"BERA Token\",\n \"decimals\": 18,\n \"symbol\": \"BERA\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 1,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5\",\n \"relayerLib\": \"0x54B8d67AA64CF8A59F604cA6e98c643C64920b03\",\n \"validatorLib\": \"0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a\"\n }\n },\n \"84532\": {\n \"id\": \"84532\",\n \"isTestnet\": true,\n \"finalityTagEnabled\": true,\n \"chainSelector\": 84532,\n \"name\": \"baseSepolia\",\n \"rpcUrls\": [\n \"https://base-sepolia.gateway.tenderly.co\",\n \"https://sepolia.base.org\",\n \"https://base-sepolia.drpc.org\",\n \"https://base-sepolia-rpc.publicnode.com\",\n \"https://base-sepolia-public.nodies.app\",\n \"https://base-sepolia.api.onfinality.io/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"BaseScan\",\n \"url\": \"https://sepolia.basescan.org\",\n \"apiUrl\": \"https://api-sepolia.basescan.org/api\"\n },\n {\n \"name\": \"Blockscout\",\n \"url\": \"https://base-sepolia.blockscout.com\",\n \"apiUrl\": \"https://base-sepolia.blockscout.com/api\"\n }\n ],\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xE3d861a49bc5903499fB5Bb411B83d980422c31B\",\n \"relayerLib\": \"0x429E6875Ba6A13cc015e9Eba594e8b42936244C4\",\n \"validatorLib\": \"0x67BE79Df5A37d2a89384D32C2A066d2a7354eD2B\"\n }\n },\n \"167009\": {\n \"id\": \"167009\",\n \"isTestnet\": true,\n \"chainSelector\": 167009,\n \"name\": \"taikoTestnet\",\n \"rpcUrls\": [],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 20,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"200810\": {\n \"id\": \"200810\",\n \"isTestnet\": true,\n \"chainSelector\": 200810,\n \"name\": \"bitlayerTestnet\",\n \"rpcUrls\": [\n \"https://rpc.ankr.com/bitlayer_testnet\",\n \"https://testnet-rpc.bitlayer.org\",\n \"https://testnet-rpc.bitlayer-rpc.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Bitcoin\",\n \"decimals\": 18,\n \"symbol\": \"BTC\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Bitlayer Explorer\",\n \"url\": \"https://testnet-explorer.bitlayer.org\",\n \"apiUrl\": \"https://testnet-explorer.bitlayer.org/api\"\n }\n ],\n \"finalityConfirmations\": 21,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"344100\": {\n \"id\": \"3441006\",\n \"isTestnet\": true,\n \"chainSelector\": 344100,\n \"name\": \"mantapacificSepolia\",\n \"rpcUrls\": [\n \"https://manta-pacific-sepolia.drpc.org\",\n \"https://manta-sepolia.rpc.caldera.xyz/http\",\n \"https://pacific-rpc.sepolia-testnet.manta.network/http\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"421614\": {\n \"id\": \"421614\",\n \"isTestnet\": true,\n \"finalityTagEnabled\": true,\n \"chainSelector\": 421614,\n \"name\": \"arbitrumSepolia\",\n \"rpcUrls\": [\n \"https://arbitrum-sepolia.gateway.tenderly.co\",\n \"https://arbitrum-sepolia.drpc.org\",\n \"https://arbitrum-sepolia-testnet.api.pocket.network\",\n \"https://arbitrum-sepolia-rpc.publicnode.com\",\n \"https://sepolia-rollup.arbitrum.io/rpc\",\n \"https://arbitrum-sepolia.api.onfinality.io/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Arbiscan\",\n \"url\": \"https://sepolia.arbiscan.io\",\n \"apiUrl\": \"https://api-sepolia.arbiscan.io/api\"\n }\n ],\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x6c99cC0FCC985fF175787BD2565AfD15781C99d0\",\n \"relayerLib\": \"0x622b5FeBf5Fd44Ab2E7636398F2621FC4E956304\",\n \"validatorLib\": \"0x7F445E3DE6B46cD36887B9f136DBe13298517C1F\"\n }\n },\n \"534351\": {\n \"id\": \"534351\",\n \"isTestnet\": true,\n \"chainSelector\": 534351,\n \"name\": \"scrollSepolia\",\n \"rpcUrls\": [\n \"https://scroll-sepolia.drpc.org\",\n \"https://scroll-sepolia-rpc.publicnode.com\",\n \"https://sepolia-rpc.scroll.io\",\n \"https://scroll-sepolia-public.nodies.app\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Scrollscan\",\n \"url\": \"https://sepolia.scrollscan.com\",\n \"apiUrl\": \"https://api-sepolia.scrollscan.com/api\"\n }\n ],\n \"finalityConfirmations\": 720,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5\",\n \"relayerLib\": \"0x54B8d67AA64CF8A59F604cA6e98c643C64920b03\",\n \"validatorLib\": \"0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a\"\n }\n },\n \"688689\": {\n \"id\": \"688689\",\n \"isTestnet\": true,\n \"chainSelector\": 688689,\n \"name\": \"pharosTestnet\",\n \"rpcUrls\": [\n \"https://atlantic.dplabs-internal.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"PHRS\",\n \"decimals\": 18,\n \"symbol\": \"PHRS\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"763373\": {\n \"id\": \"763373\",\n \"isTestnet\": true,\n \"chainSelector\": 763373,\n \"name\": \"inkSepolia\",\n \"rpcUrls\": [\n \"https://rpc-gel-sepolia.inkonchain.com\",\n \"https://ink-sepolia.drpc.org\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Ink Explorer\",\n \"url\": \"https://sepolia.inkscan.io\",\n \"apiUrl\": \"https://sepolia.inkscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 3600,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"808813\": {\n \"id\": \"808813\",\n \"isTestnet\": true,\n \"chainSelector\": 808813,\n \"name\": \"bobSepolia\",\n \"rpcUrls\": [\n \"https://bob-testnet.drpc.org\",\n \"https://bob-sepolia.rpc.gobob.xyz\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 3600,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1000101\": {\n \"id\": \"1000101\",\n \"isTestnet\": true,\n \"chainSelector\": 1000101,\n \"name\": \"xomarketTestnet\",\n \"rpcUrls\": [\n \"https://dev-testnet-rpc.xo.market\",\n \"https://testnet-rpc-1.xo.market\"\n ],\n \"nativeCurrency\": {\n \"name\": \"XO\",\n \"decimals\": 18,\n \"symbol\": \"XO\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 2,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1234200\": {\n \"id\": \"123420001114\",\n \"isTestnet\": true,\n \"chainSelector\": 1234200,\n \"name\": \"campv2Testnet\",\n \"rpcUrls\": [\n \"https://rpc.basecamp.t.raas.gelato.cloud\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Camp\",\n \"decimals\": 18,\n \"symbol\": \"CAMP\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1313161\": {\n \"id\": \"1313161555\",\n \"isTestnet\": true,\n \"finalityTagEnabled\": true,\n \"chainSelector\": 1313161,\n \"name\": \"auroraTestnet\",\n \"rpcUrls\": [\n \"https://aurora-testnet.drpc.org\",\n \"https://testnet.aurora.dev\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1685877\": {\n \"id\": \"168587773\",\n \"isTestnet\": true,\n \"chainSelector\": 1685877,\n \"name\": \"blastSepolia\",\n \"rpcUrls\": [\n \"https://blast-sepolia.drpc.org\",\n \"https://blast-testnet-public.nodies.app\",\n \"https://sepolia.blast.io\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Blastscan\",\n \"url\": \"https://sepolia.blastscan.io\",\n \"apiUrl\": \"https://api-sepolia.blastscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 600,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"11155111\": {\n \"id\": \"11155111\",\n \"isTestnet\": true,\n \"finalityTagEnabled\": true,\n \"chainSelector\": 11155111,\n \"name\": \"ethereumSepolia\",\n \"rpcUrls\": [\n \"https://gateway.tenderly.co/public/sepolia\",\n \"https://sepolia.gateway.tenderly.co\",\n \"https://sepolia.drpc.org\",\n \"https://1rpc.io/sepolia\",\n \"https://ethereum-sepolia-public.nodies.app\",\n \"https://0xrpc.io/sep\",\n \"https://ethereum-sepolia-rpc.publicnode.com\",\n \"https://eth-sepolia.api.onfinality.io/public\",\n \"https://eth-sepolia-testnet.api.pocket.network\",\n \"https://ethereum-sepolia.rpc.subquery.network/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Etherscan\",\n \"url\": \"https://sepolia.etherscan.io\",\n \"apiUrl\": \"https://api-sepolia.etherscan.io/api\"\n }\n ],\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x3E0aAA63fFb51169B9aE9b7Dc3616b43362124D6\",\n \"relayerLib\": \"0x8338A0B9c83C0d7E67C267432DF4C8b7cA98e11C\",\n \"validatorLib\": \"0x1A808aa4F1E874763E114AB4fD170460D84A8D54\"\n }\n },\n \"11155420\": {\n \"id\": \"11155420\",\n \"isTestnet\": true,\n \"chainSelector\": 11155420,\n \"name\": \"optimismSepolia\",\n \"rpcUrls\": [\n \"https://sepolia.optimism.io\",\n \"https://optimism-sepolia.gateway.tenderly.co\",\n \"https://optimism-sepolia.drpc.org\",\n \"https://optimism-sepolia-public.nodies.app\",\n \"https://optimism-sepolia.api.onfinality.io/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Optimism Explorer\",\n \"url\": \"https://sepolia-optimism.etherscan.io\",\n \"apiUrl\": \"https://api-sepolia-optimism.etherscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 600,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x25c2037546Bf5B525DfAfe85A662DB519c07bDdB\",\n \"relayerLib\": \"0x6E0b96885Ab0A58e82f2D1ce4df29AF6F5a40089\",\n \"validatorLib\": \"0x0C12fAdDb045bB71C256E36662D56b4b22f1bD58\"\n }\n },\n \"11155931\": {\n \"id\": \"11155931\",\n \"isTestnet\": true,\n \"chainSelector\": 11155931,\n \"name\": \"riseTestnet\",\n \"rpcUrls\": [\n \"https://testnet.riselabs.xyz\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n }\n}", "import type { Chain, ChainFormatters } from '../../types/chain.js'\nimport type { Assign, Prettify } from '../../types/utils.js'\n\nexport function defineChain<\n formatters extends ChainFormatters,\n const chain extends Chain,\n>(chain: chain): Prettify, chain>> {\n return {\n formatters: undefined,\n fees: undefined,\n serializers: undefined,\n ...chain,\n } as Assign, chain>\n}\n", "import { BaseError } from './base.js'\n\nexport type InvalidDecimalNumberErrorType = InvalidDecimalNumberError & {\n name: 'InvalidDecimalNumberError'\n}\nexport class InvalidDecimalNumberError extends BaseError {\n constructor({ value }: { value: string }) {\n super(`Number \\`${value}\\` is not a valid decimal number.`, {\n name: 'InvalidDecimalNumberError',\n })\n }\n}\n", "import { InvalidDecimalNumberError } from '../../errors/unit.js'\nimport type { ErrorType } from '../../errors/utils.js'\n\nexport type ParseUnitsErrorType = ErrorType\n\n/**\n * Multiplies a string representation of a number by a given exponent of base 10 (10exponent).\n *\n * - Docs: https://viem.sh/docs/utilities/parseUnits\n *\n * @example\n * import { parseUnits } from 'viem'\n *\n * parseUnits('420', 9)\n * // 420000000000n\n */\nexport function parseUnits(value: string, decimals: number) {\n if (!/^(-?)([0-9]*)\\.?([0-9]*)$/.test(value))\n throw new InvalidDecimalNumberError({ value })\n\n let [integer, fraction = '0'] = value.split('.')\n\n const negative = integer.startsWith('-')\n if (negative) integer = integer.slice(1)\n\n // trim trailing zeros.\n fraction = fraction.replace(/(0+)$/, '')\n\n // round off if the fraction is larger than the number of decimals.\n if (decimals === 0) {\n if (Math.round(Number(`.${fraction}`)) === 1)\n integer = `${BigInt(integer) + 1n}`\n fraction = ''\n } else if (fraction.length > decimals) {\n const [left, unit, right] = [\n fraction.slice(0, decimals - 1),\n fraction.slice(decimals - 1, decimals),\n fraction.slice(decimals),\n ]\n\n const rounded = Math.round(Number(`${unit}.${right}`))\n if (rounded > 9)\n fraction = `${BigInt(left) + BigInt(1)}0`.padStart(left.length + 1, '0')\n else fraction = `${left}${rounded}`\n\n if (fraction.length > decimals) {\n fraction = fraction.slice(1)\n integer = `${BigInt(integer) + 1n}`\n }\n\n fraction = fraction.slice(0, decimals)\n } else {\n fraction = fraction.padEnd(decimals, '0')\n }\n\n return BigInt(`${negative ? '-' : ''}${integer}${fraction}`)\n}\n", "// biome-ignore lint/performance/noBarrelFile: entrypoint module\nexport {\n type Abi,\n type AbiFunction,\n type AbiParameter,\n type AbiEvent,\n type AbiStateMutability,\n type AbiParameterKind,\n type AbiParameterToPrimitiveType,\n type Address,\n type Narrow,\n type ParseAbi,\n type ParseAbiItem,\n type ParseAbiParameter,\n type ParseAbiParameters,\n type ResolvedRegister,\n type TypedData,\n type TypedDataDomain,\n type TypedDataParameter,\n CircularReferenceError,\n InvalidAbiParameterError,\n InvalidAbiParametersError,\n InvalidAbiItemError,\n InvalidAbiTypeParameterError,\n InvalidFunctionModifierError,\n InvalidModifierError,\n InvalidParameterError,\n InvalidParenthesisError,\n InvalidSignatureError,\n InvalidStructSignatureError,\n SolidityProtectedKeywordError,\n UnknownTypeError,\n UnknownSignatureError,\n parseAbi,\n parseAbiItem,\n parseAbiParameter,\n parseAbiParameters,\n} from 'abitype'\nexport type {\n BlockOverrides,\n Rpc as RpcBlockOverrides,\n} from 'ox/BlockOverrides'\n\nexport {\n getContract,\n type GetContractErrorType,\n type GetContractParameters,\n type GetContractReturnType,\n} from './actions/getContract.js'\nexport {\n type GetContractEventsErrorType,\n type GetContractEventsParameters,\n type GetContractEventsReturnType,\n} from './actions/public/getContractEvents.js'\nexport {\n type GetEip712DomainErrorType,\n type GetEip712DomainParameters,\n type GetEip712DomainReturnType,\n} from './actions/public/getEip712Domain.js'\nexport {\n type AddChainErrorType,\n type AddChainParameters,\n} from './actions/wallet/addChain.js'\nexport {\n type CallErrorType,\n type CallParameters,\n type CallReturnType,\n} from './actions/public/call.js'\nexport type {\n CreateAccessListParameters,\n CreateAccessListReturnType,\n CreateAccessListErrorType,\n} from './actions/public/createAccessList.js'\nexport type {\n CreateBlockFilterErrorType,\n CreateBlockFilterReturnType,\n} from './actions/public/createBlockFilter.js'\nexport type {\n CreateContractEventFilterErrorType,\n CreateContractEventFilterParameters,\n CreateContractEventFilterReturnType,\n} from './actions/public/createContractEventFilter.js'\nexport type {\n CreateEventFilterErrorType,\n CreateEventFilterParameters,\n CreateEventFilterReturnType,\n} from './actions/public/createEventFilter.js'\nexport type {\n CreatePendingTransactionFilterErrorType,\n CreatePendingTransactionFilterReturnType,\n} from './actions/public/createPendingTransactionFilter.js'\nexport type {\n DeployContractErrorType,\n DeployContractParameters,\n DeployContractReturnType,\n} from './actions/wallet/deployContract.js'\nexport type {\n DropTransactionErrorType,\n DropTransactionParameters,\n} from './actions/test/dropTransaction.js'\nexport type {\n DumpStateErrorType,\n DumpStateReturnType,\n} from './actions/test/dumpState.js'\nexport type {\n GetAutomineErrorType,\n GetAutomineReturnType,\n} from './actions/test/getAutomine.js'\nexport type {\n EstimateContractGasErrorType,\n EstimateContractGasParameters,\n EstimateContractGasReturnType,\n} from './actions/public/estimateContractGas.js'\nexport type {\n EstimateGasErrorType,\n EstimateGasParameters,\n EstimateGasReturnType,\n} from './actions/public/estimateGas.js'\nexport type {\n EstimateFeesPerGasErrorType,\n EstimateFeesPerGasParameters,\n EstimateFeesPerGasReturnType,\n} from './actions/public/estimateFeesPerGas.js'\nexport type {\n EstimateMaxPriorityFeePerGasErrorType,\n EstimateMaxPriorityFeePerGasParameters,\n EstimateMaxPriorityFeePerGasReturnType,\n} from './actions/public/estimateMaxPriorityFeePerGas.js'\nexport type {\n GetAddressesErrorType,\n GetAddressesReturnType,\n} from './actions/wallet/getAddresses.js'\nexport type {\n GetBalanceErrorType,\n GetBalanceParameters,\n GetBalanceReturnType,\n} from './actions/public/getBalance.js'\nexport type {\n GetBlobBaseFeeErrorType,\n GetBlobBaseFeeReturnType,\n} from './actions/public/getBlobBaseFee.js'\nexport type {\n GetBlockNumberErrorType,\n GetBlockNumberParameters,\n GetBlockNumberReturnType,\n} from './actions/public/getBlockNumber.js'\nexport type {\n GetBlockErrorType,\n GetBlockParameters,\n GetBlockReturnType,\n} from './actions/public/getBlock.js'\nexport type {\n GetBlockTransactionCountErrorType,\n GetBlockTransactionCountParameters,\n GetBlockTransactionCountReturnType,\n} from './actions/public/getBlockTransactionCount.js'\nexport type {\n /** @deprecated Use `GetCodeErrorType` instead */\n GetCodeErrorType as GetBytecodeErrorType,\n /** @deprecated Use `GetCodeParameters` instead */\n GetCodeParameters as GetBytecodeParameters,\n /** @deprecated Use `GetCodeReturnType` instead */\n GetCodeReturnType as GetBytecodeReturnType,\n GetCodeErrorType,\n GetCodeParameters,\n GetCodeReturnType,\n} from './actions/public/getCode.js'\nexport type {\n GetChainIdErrorType,\n GetChainIdReturnType,\n} from './actions/public/getChainId.js'\nexport type {\n GetEnsAddressErrorType,\n GetEnsAddressParameters,\n GetEnsAddressReturnType,\n} from './actions/ens/getEnsAddress.js'\nexport type {\n GetEnsAvatarErrorType,\n GetEnsAvatarParameters,\n GetEnsAvatarReturnType,\n} from './actions/ens/getEnsAvatar.js'\nexport type {\n GetEnsNameErrorType,\n GetEnsNameParameters,\n GetEnsNameReturnType,\n} from './actions/ens/getEnsName.js'\nexport type {\n GetEnsResolverErrorType,\n GetEnsResolverParameters,\n GetEnsResolverReturnType,\n} from './actions/ens/getEnsResolver.js'\nexport type {\n GetEnsTextErrorType,\n GetEnsTextParameters,\n GetEnsTextReturnType,\n} from './actions/ens/getEnsText.js'\nexport type {\n GetFeeHistoryErrorType,\n GetFeeHistoryParameters,\n GetFeeHistoryReturnType,\n} from './actions/public/getFeeHistory.js'\nexport type {\n GetFilterChangesErrorType,\n GetFilterChangesParameters,\n GetFilterChangesReturnType,\n} from './actions/public/getFilterChanges.js'\nexport type {\n GetFilterLogsErrorType,\n GetFilterLogsParameters,\n GetFilterLogsReturnType,\n} from './actions/public/getFilterLogs.js'\nexport type {\n GetGasPriceErrorType,\n GetGasPriceReturnType,\n} from './actions/public/getGasPrice.js'\nexport type {\n GetLogsErrorType,\n GetLogsParameters,\n GetLogsReturnType,\n} from './actions/public/getLogs.js'\nexport type {\n GetPermissionsErrorType,\n GetPermissionsReturnType,\n} from './actions/wallet/getPermissions.js'\nexport type {\n GetProofErrorType,\n GetProofParameters,\n GetProofReturnType,\n} from './actions/public/getProof.js'\nexport type {\n GetStorageAtErrorType,\n GetStorageAtParameters,\n GetStorageAtReturnType,\n} from './actions/public/getStorageAt.js'\nexport type {\n GetTransactionConfirmationsErrorType,\n GetTransactionConfirmationsParameters,\n GetTransactionConfirmationsReturnType,\n} from './actions/public/getTransactionConfirmations.js'\nexport type {\n GetTransactionCountErrorType,\n GetTransactionCountParameters,\n GetTransactionCountReturnType,\n} from './actions/public/getTransactionCount.js'\nexport type {\n GetTransactionErrorType,\n GetTransactionParameters,\n GetTransactionReturnType,\n} from './actions/public/getTransaction.js'\nexport type {\n GetTransactionReceiptErrorType,\n GetTransactionReceiptParameters,\n GetTransactionReceiptReturnType,\n} from './actions/public/getTransactionReceipt.js'\nexport type {\n ImpersonateAccountErrorType,\n ImpersonateAccountParameters,\n} from './actions/test/impersonateAccount.js'\nexport type {\n IncreaseTimeErrorType,\n IncreaseTimeParameters,\n} from './actions/test/increaseTime.js'\nexport type {\n LoadStateErrorType,\n LoadStateParameters,\n LoadStateReturnType,\n} from './actions/test/loadState.js'\nexport type { MineErrorType, MineParameters } from './actions/test/mine.js'\nexport type {\n MulticallErrorType,\n MulticallParameters,\n MulticallReturnType,\n} from './actions/public/multicall.js'\nexport type { SnapshotErrorType } from './actions/test/snapshot.js'\nexport type {\n SimulateBlocksParameters,\n SimulateBlocksReturnType,\n SimulateBlocksErrorType,\n} from './actions/public/simulateBlocks.js'\nexport type {\n SimulateCallsParameters,\n SimulateCallsReturnType,\n SimulateCallsErrorType,\n} from './actions/public/simulateCalls.js'\nexport type {\n GetMutabilityAwareValue,\n SimulateContractParameters,\n SimulateContractReturnType,\n SimulateContractErrorType,\n} from './actions/public/simulateContract.js'\nexport type {\n OnBlock,\n OnBlockParameter,\n WatchBlocksErrorType,\n WatchBlocksParameters,\n WatchBlocksReturnType,\n} from './actions/public/watchBlocks.js'\nexport type {\n OnBlockNumberFn,\n OnBlockNumberParameter,\n WatchBlockNumberErrorType,\n WatchBlockNumberParameters,\n WatchBlockNumberReturnType,\n} from './actions/public/watchBlockNumber.js'\nexport type {\n WatchEventOnLogsFn,\n WatchEventOnLogsParameter,\n WatchEventErrorType,\n WatchEventParameters,\n WatchEventReturnType,\n} from './actions/public/watchEvent.js'\nexport type {\n OnTransactionsFn,\n OnTransactionsParameter,\n WatchPendingTransactionsErrorType,\n WatchPendingTransactionsParameters,\n WatchPendingTransactionsReturnType,\n} from './actions/public/watchPendingTransactions.js'\nexport type {\n ReadContractErrorType,\n ReadContractParameters,\n ReadContractReturnType,\n} from './actions/public/readContract.js'\nexport type {\n ReplacementReason,\n ReplacementReturnType,\n WaitForTransactionReceiptErrorType,\n WaitForTransactionReceiptParameters,\n WaitForTransactionReceiptReturnType,\n} from './actions/public/waitForTransactionReceipt.js'\nexport type {\n RequestAddressesErrorType,\n RequestAddressesReturnType,\n} from './actions/wallet/requestAddresses.js'\nexport type {\n RequestPermissionsErrorType,\n RequestPermissionsReturnType,\n RequestPermissionsParameters,\n} from './actions/wallet/requestPermissions.js'\nexport type {\n GetTxpoolContentErrorType,\n GetTxpoolContentReturnType,\n} from './actions/test/getTxpoolContent.js'\nexport type {\n GetTxpoolStatusErrorType,\n GetTxpoolStatusReturnType,\n} from './actions/test/getTxpoolStatus.js'\nexport type {\n InspectTxpoolErrorType,\n InspectTxpoolReturnType,\n} from './actions/test/inspectTxpool.js'\nexport type { RemoveBlockTimestampIntervalErrorType } from './actions/test/removeBlockTimestampInterval.js'\nexport type { ResetErrorType, ResetParameters } from './actions/test/reset.js'\nexport type {\n RevertErrorType,\n RevertParameters,\n} from './actions/test/revert.js'\nexport type {\n SendRawTransactionErrorType,\n SendRawTransactionParameters,\n SendRawTransactionReturnType,\n} from './actions/wallet/sendRawTransaction.js'\nexport type {\n SendTransactionErrorType,\n SendTransactionParameters,\n SendTransactionRequest,\n SendTransactionReturnType,\n} from './actions/wallet/sendTransaction.js'\nexport type {\n SignTransactionErrorType,\n SignTransactionParameters,\n SignTransactionReturnType,\n} from './actions/wallet/signTransaction.js'\nexport type {\n PrepareTransactionRequestErrorType,\n PrepareTransactionRequestParameters,\n PrepareTransactionRequestParameterType,\n PrepareTransactionRequestRequest,\n PrepareTransactionRequestReturnType,\n} from './actions/wallet/prepareTransactionRequest.js'\nexport type {\n SendUnsignedTransactionErrorType,\n SendUnsignedTransactionParameters,\n SendUnsignedTransactionReturnType,\n} from './actions/test/sendUnsignedTransaction.js'\nexport type { SetAutomineErrorType } from './actions/test/setAutomine.js'\nexport type {\n SetBalanceErrorType,\n SetBalanceParameters,\n} from './actions/test/setBalance.js'\nexport type {\n SetBlockGasLimitErrorType,\n SetBlockGasLimitParameters,\n} from './actions/test/setBlockGasLimit.js'\nexport type {\n SetBlockTimestampIntervalErrorType,\n SetBlockTimestampIntervalParameters,\n} from './actions/test/setBlockTimestampInterval.js'\nexport type {\n SetCodeErrorType,\n SetCodeParameters,\n} from './actions/test/setCode.js'\nexport type {\n SetCoinbaseErrorType,\n SetCoinbaseParameters,\n} from './actions/test/setCoinbase.js'\nexport type {\n SetIntervalMiningErrorType,\n SetIntervalMiningParameters,\n} from './actions/test/setIntervalMining.js'\nexport type { SetLoggingEnabledErrorType } from './actions/test/setLoggingEnabled.js'\nexport type {\n SetMinGasPriceErrorType,\n SetMinGasPriceParameters,\n} from './actions/test/setMinGasPrice.js'\nexport type {\n SetNextBlockBaseFeePerGasErrorType,\n SetNextBlockBaseFeePerGasParameters,\n} from './actions/test/setNextBlockBaseFeePerGas.js'\nexport type {\n SetNextBlockTimestampErrorType,\n SetNextBlockTimestampParameters,\n} from './actions/test/setNextBlockTimestamp.js'\nexport type {\n SetNonceErrorType,\n SetNonceParameters,\n} from './actions/test/setNonce.js'\nexport type { SetRpcUrlErrorType } from './actions/test/setRpcUrl.js'\nexport type {\n SetStorageAtErrorType,\n SetStorageAtParameters,\n} from './actions/test/setStorageAt.js'\nexport type {\n SignMessageErrorType,\n SignMessageParameters,\n SignMessageReturnType,\n} from './actions/wallet/signMessage.js'\nexport type {\n SignTypedDataErrorType,\n SignTypedDataParameters,\n SignTypedDataReturnType,\n} from './actions/wallet/signTypedData.js'\nexport type {\n StopImpersonatingAccountErrorType,\n StopImpersonatingAccountParameters,\n} from './actions/test/stopImpersonatingAccount.js'\nexport type {\n SwitchChainErrorType,\n SwitchChainParameters,\n} from './actions/wallet/switchChain.js'\nexport type {\n UninstallFilterErrorType,\n UninstallFilterParameters,\n UninstallFilterReturnType,\n} from './actions/public/uninstallFilter.js'\nexport type {\n WatchAssetErrorType,\n WatchAssetParameters,\n WatchAssetReturnType,\n} from './actions/wallet/watchAsset.js'\nexport type {\n VerifyHashErrorType as VerifyHashActionErrorType,\n VerifyHashParameters as VerifyHashActionParameters,\n VerifyHashReturnType as VerifyHashActionReturnType,\n} from './actions/public/verifyHash.js'\nexport type {\n VerifyTypedDataErrorType as VerifyTypedDataActionErrorType,\n VerifyTypedDataParameters as VerifyTypedDataActionParameters,\n VerifyTypedDataReturnType as VerifyTypedDataActionReturnType,\n} from './actions/public/verifyTypedData.js'\nexport type {\n VerifyMessageErrorType as VerifyMessageActionErrorType,\n VerifyMessageParameters as VerifyMessageActionParameters,\n VerifyMessageReturnType as VerifyMessageActionReturnType,\n} from './actions/public/verifyMessage.js'\nexport type {\n WatchContractEventOnLogsFn,\n WatchContractEventOnLogsParameter,\n WatchContractEventErrorType,\n WatchContractEventParameters,\n WatchContractEventReturnType,\n} from './actions/public/watchContractEvent.js'\nexport type {\n WriteContractErrorType,\n WriteContractParameters,\n WriteContractReturnType,\n} from './actions/wallet/writeContract.js'\nexport type { Call, Calls } from './types/calls.js'\nexport type {\n Chain,\n ChainConfig,\n ChainContract,\n ChainEstimateFeesPerGasFn,\n ChainFees,\n ChainFeesFnParameters,\n ChainFormatter,\n ChainEstimateFeesPerGasFnParameters,\n ChainMaxPriorityFeePerGasFn,\n DeriveChain,\n GetChainParameter,\n ChainFormatters,\n ChainSerializers,\n ExtractChainFormatterExclude,\n ExtractChainFormatterParameters,\n ExtractChainFormatterReturnType,\n} from './types/chain.js'\nexport type { GetTransactionRequestKzgParameter, Kzg } from './types/kzg.js'\nexport {\n type Client,\n type ClientConfig,\n type CreateClientErrorType,\n type MulticallBatchOptions,\n createClient,\n rpcSchema,\n} from './clients/createClient.js'\nexport {\n type CustomTransport,\n type CustomTransportConfig,\n type CustomTransportErrorType,\n custom,\n} from './clients/transports/custom.js'\nexport {\n type FallbackTransport,\n type FallbackTransportConfig,\n type FallbackTransportErrorType,\n fallback,\n shouldThrow,\n} from './clients/transports/fallback.js'\nexport {\n type HttpTransport,\n type HttpTransportConfig,\n type HttpTransportErrorType,\n http,\n} from './clients/transports/http.js'\nexport {\n type PublicClient,\n type PublicClientConfig,\n type CreatePublicClientErrorType,\n createPublicClient,\n} from './clients/createPublicClient.js'\nexport {\n type TestClient,\n type TestClientConfig,\n type CreateTestClientErrorType,\n createTestClient,\n} from './clients/createTestClient.js'\nexport {\n type PublicActions,\n publicActions,\n} from './clients/decorators/public.js'\nexport {\n type TestActions,\n testActions,\n} from './clients/decorators/test.js'\nexport {\n type WalletActions,\n walletActions,\n} from './clients/decorators/wallet.js'\nexport {\n type Transport,\n type TransportConfig,\n type CreateTransportErrorType,\n createTransport,\n} from './clients/transports/createTransport.js'\nexport {\n type WalletClient,\n type WalletClientConfig,\n type CreateWalletClientErrorType,\n createWalletClient,\n} from './clients/createWalletClient.js'\nexport {\n type WebSocketTransport,\n type WebSocketTransportConfig,\n type WebSocketTransportErrorType,\n webSocket,\n} from './clients/transports/webSocket.js'\nexport {\n multicall3Abi,\n erc20Abi,\n erc20Abi_bytes32,\n erc721Abi,\n erc4626Abi,\n universalSignatureValidatorAbi,\n} from './constants/abis.js'\nexport { ethAddress, zeroAddress } from './constants/address.js'\nexport {\n deploylessCallViaBytecodeBytecode,\n deploylessCallViaFactoryBytecode,\n universalSignatureValidatorByteCode,\n} from './constants/contracts.js'\nexport { etherUnits, gweiUnits, weiUnits } from './constants/unit.js'\nexport {\n maxInt8,\n maxInt16,\n maxInt24,\n maxInt32,\n maxInt40,\n maxInt48,\n maxInt56,\n maxInt64,\n maxInt72,\n maxInt80,\n maxInt88,\n maxInt96,\n maxInt104,\n maxInt112,\n maxInt120,\n maxInt128,\n maxInt136,\n maxInt144,\n maxInt152,\n maxInt160,\n maxInt168,\n maxInt176,\n maxInt184,\n maxInt192,\n maxInt200,\n maxInt208,\n maxInt216,\n maxInt224,\n maxInt232,\n maxInt240,\n maxInt248,\n maxInt256,\n maxUint8,\n maxUint16,\n maxUint24,\n maxUint32,\n maxUint40,\n maxUint48,\n maxUint56,\n maxUint64,\n maxUint72,\n maxUint80,\n maxUint88,\n maxUint96,\n maxUint104,\n maxUint112,\n maxUint120,\n maxUint128,\n maxUint136,\n maxUint144,\n maxUint152,\n maxUint160,\n maxUint168,\n maxUint176,\n maxUint184,\n maxUint192,\n maxUint200,\n maxUint208,\n maxUint216,\n maxUint224,\n maxUint232,\n maxUint240,\n maxUint248,\n maxUint256,\n minInt8,\n minInt16,\n minInt24,\n minInt32,\n minInt40,\n minInt48,\n minInt56,\n minInt64,\n minInt72,\n minInt80,\n minInt88,\n minInt96,\n minInt104,\n minInt112,\n minInt120,\n minInt128,\n minInt136,\n minInt144,\n minInt152,\n minInt160,\n minInt168,\n minInt176,\n minInt184,\n minInt192,\n minInt200,\n minInt208,\n minInt216,\n minInt224,\n minInt232,\n minInt240,\n minInt248,\n minInt256,\n} from './constants/number.js'\nexport { zeroHash } from './constants/bytes.js'\nexport { presignMessagePrefix } from './constants/strings.js'\nexport {\n AbiConstructorNotFoundError,\n type AbiConstructorNotFoundErrorType,\n AbiConstructorParamsNotFoundError,\n type AbiConstructorParamsNotFoundErrorType,\n AbiDecodingDataSizeInvalidError,\n type AbiDecodingDataSizeInvalidErrorType,\n AbiDecodingDataSizeTooSmallError,\n type AbiDecodingDataSizeTooSmallErrorType,\n AbiDecodingZeroDataError,\n type AbiDecodingZeroDataErrorType,\n AbiEncodingArrayLengthMismatchError,\n type AbiEncodingArrayLengthMismatchErrorType,\n AbiEncodingLengthMismatchError,\n type AbiEncodingLengthMismatchErrorType,\n AbiEncodingBytesSizeMismatchError,\n type AbiEncodingBytesSizeMismatchErrorType,\n AbiErrorInputsNotFoundError,\n type AbiErrorInputsNotFoundErrorType,\n AbiErrorNotFoundError,\n type AbiErrorNotFoundErrorType,\n AbiErrorSignatureNotFoundError,\n type AbiErrorSignatureNotFoundErrorType,\n AbiEventNotFoundError,\n type AbiEventNotFoundErrorType,\n AbiEventSignatureEmptyTopicsError,\n type AbiEventSignatureEmptyTopicsErrorType,\n AbiEventSignatureNotFoundError,\n type AbiEventSignatureNotFoundErrorType,\n AbiFunctionNotFoundError,\n type AbiFunctionNotFoundErrorType,\n AbiFunctionOutputsNotFoundError,\n type AbiFunctionOutputsNotFoundErrorType,\n AbiFunctionSignatureNotFoundError,\n type AbiFunctionSignatureNotFoundErrorType,\n BytesSizeMismatchError,\n type BytesSizeMismatchErrorType,\n DecodeLogDataMismatch,\n type DecodeLogDataMismatchErrorType,\n DecodeLogTopicsMismatch,\n type DecodeLogTopicsMismatchErrorType,\n InvalidAbiDecodingTypeError,\n type InvalidAbiDecodingTypeErrorType,\n InvalidAbiEncodingTypeError,\n type InvalidAbiEncodingTypeErrorType,\n InvalidArrayError,\n type InvalidArrayErrorType,\n InvalidDefinitionTypeError,\n type InvalidDefinitionTypeErrorType,\n UnsupportedPackedAbiType,\n type UnsupportedPackedAbiTypeErrorType,\n} from './errors/abi.js'\nexport { BaseError, type BaseErrorType, setErrorConfig } from './errors/base.js'\nexport {\n BlockNotFoundError,\n type BlockNotFoundErrorType,\n} from './errors/block.js'\nexport {\n CallExecutionError,\n type CallExecutionErrorType,\n ContractFunctionExecutionError,\n type ContractFunctionExecutionErrorType,\n ContractFunctionRevertedError,\n type ContractFunctionRevertedErrorType,\n ContractFunctionZeroDataError,\n type ContractFunctionZeroDataErrorType,\n RawContractError,\n type RawContractErrorType,\n CounterfactualDeploymentFailedError,\n type CounterfactualDeploymentFailedErrorType,\n} from './errors/contract.js'\nexport {\n BaseFeeScalarError,\n type BaseFeeScalarErrorType,\n Eip1559FeesNotSupportedError,\n type Eip1559FeesNotSupportedErrorType,\n MaxFeePerGasTooLowError,\n type MaxFeePerGasTooLowErrorType,\n} from './errors/fee.js'\nexport {\n ChainDisconnectedError,\n type ChainDisconnectedErrorType,\n InternalRpcError,\n type InternalRpcErrorType,\n InvalidInputRpcError,\n type InvalidInputRpcErrorType,\n InvalidParamsRpcError,\n type InvalidParamsRpcErrorType,\n InvalidRequestRpcError,\n type InvalidRequestRpcErrorType,\n JsonRpcVersionUnsupportedError,\n type JsonRpcVersionUnsupportedErrorType,\n LimitExceededRpcError,\n type LimitExceededRpcErrorType,\n MethodNotFoundRpcError,\n type MethodNotFoundRpcErrorType,\n MethodNotSupportedRpcError,\n type MethodNotSupportedRpcErrorType,\n ParseRpcError,\n type ParseRpcErrorType,\n ProviderDisconnectedError,\n type ProviderDisconnectedErrorType,\n ProviderRpcError,\n type ProviderRpcErrorCode,\n type ProviderRpcErrorType,\n ResourceNotFoundRpcError,\n type ResourceNotFoundRpcErrorType,\n ResourceUnavailableRpcError,\n type ResourceUnavailableRpcErrorType,\n RpcError,\n type RpcErrorType,\n type RpcErrorCode,\n SwitchChainError,\n TransactionRejectedRpcError,\n type TransactionRejectedRpcErrorType,\n UnauthorizedProviderError,\n type UnauthorizedProviderErrorType,\n UnknownRpcError,\n type UnknownRpcErrorType,\n UnsupportedProviderMethodError,\n type UnsupportedProviderMethodErrorType,\n UserRejectedRequestError,\n type UserRejectedRequestErrorType,\n} from './errors/rpc.js'\nexport {\n ChainDoesNotSupportContract,\n type ChainDoesNotSupportContractErrorType,\n ChainMismatchError,\n type ChainMismatchErrorType,\n ChainNotFoundError,\n type ChainNotFoundErrorType,\n ClientChainNotConfiguredError,\n type ClientChainNotConfiguredErrorType,\n InvalidChainIdError,\n type InvalidChainIdErrorType,\n} from './errors/chain.js'\nexport {\n InvalidBytesBooleanError,\n type InvalidBytesBooleanErrorType,\n IntegerOutOfRangeError,\n type IntegerOutOfRangeErrorType,\n InvalidHexBooleanError,\n type InvalidHexBooleanErrorType,\n InvalidHexValueError,\n type InvalidHexValueErrorType,\n SizeOverflowError,\n type SizeOverflowErrorType,\n} from './errors/encoding.js'\nexport {\n type EnsAvatarInvalidMetadataError,\n EnsAvatarUriResolutionError,\n type EnsAvatarInvalidMetadataErrorType,\n EnsAvatarInvalidNftUriError,\n type EnsAvatarInvalidNftUriErrorType,\n EnsAvatarUnsupportedNamespaceError,\n type EnsAvatarUnsupportedNamespaceErrorType,\n type EnsAvatarUriResolutionErrorType,\n} from './errors/ens.js'\nexport {\n type InvalidDecimalNumberErrorType,\n InvalidDecimalNumberError,\n} from './errors/unit.js'\nexport {\n EstimateGasExecutionError,\n type EstimateGasExecutionErrorType,\n} from './errors/estimateGas.js'\nexport {\n ExecutionRevertedError,\n type ExecutionRevertedErrorType,\n FeeCapTooHighError,\n type FeeCapTooHighErrorType,\n FeeCapTooLowError,\n type FeeCapTooLowErrorType,\n InsufficientFundsError,\n type InsufficientFundsErrorType,\n IntrinsicGasTooHighError,\n type IntrinsicGasTooHighErrorType,\n IntrinsicGasTooLowError,\n type IntrinsicGasTooLowErrorType,\n NonceMaxValueError,\n type NonceMaxValueErrorType,\n NonceTooHighError,\n type NonceTooHighErrorType,\n NonceTooLowError,\n type NonceTooLowErrorType,\n TipAboveFeeCapError,\n type TipAboveFeeCapErrorType,\n TransactionTypeNotSupportedError,\n type TransactionTypeNotSupportedErrorType,\n UnknownNodeError,\n type UnknownNodeErrorType,\n} from './errors/node.js'\nexport {\n FilterTypeNotSupportedError,\n type FilterTypeNotSupportedErrorType,\n} from './errors/log.js'\nexport {\n HttpRequestError,\n type HttpRequestErrorType,\n RpcRequestError,\n type RpcRequestErrorType,\n TimeoutError,\n type TimeoutErrorType,\n SocketClosedError,\n type SocketClosedErrorType,\n WebSocketRequestError,\n type WebSocketRequestErrorType,\n} from './errors/request.js'\nexport {\n InvalidAddressError,\n type InvalidAddressErrorType,\n} from './errors/address.js'\nexport {\n FeeConflictError,\n type FeeConflictErrorType,\n InvalidLegacyVError,\n type InvalidLegacyVErrorType,\n InvalidSerializableTransactionError,\n type InvalidSerializableTransactionErrorType,\n InvalidSerializedTransactionError,\n type InvalidSerializedTransactionErrorType,\n InvalidSerializedTransactionTypeError,\n type InvalidSerializedTransactionTypeErrorType,\n InvalidStorageKeySizeError,\n type InvalidStorageKeySizeErrorType,\n TransactionExecutionError,\n type TransactionExecutionErrorType,\n TransactionNotFoundError,\n type TransactionNotFoundErrorType,\n TransactionReceiptNotFoundError,\n type TransactionReceiptNotFoundErrorType,\n WaitForTransactionReceiptTimeoutError,\n type WaitForTransactionReceiptTimeoutErrorType,\n} from './errors/transaction.js'\nexport {\n SizeExceedsPaddingSizeError,\n type SizeExceedsPaddingSizeErrorType,\n SliceOffsetOutOfBoundsError,\n type SliceOffsetOutOfBoundsErrorType,\n} from './errors/data.js'\nexport {\n UrlRequiredError,\n type UrlRequiredErrorType,\n} from './errors/transport.js'\nexport {\n AccountStateConflictError,\n type AccountStateConflictErrorType,\n StateAssignmentConflictError,\n type StateAssignmentConflictErrorType,\n} from './errors/stateOverride.js'\nexport {\n InvalidDomainError,\n type InvalidDomainErrorType,\n InvalidPrimaryTypeError,\n type InvalidPrimaryTypeErrorType,\n InvalidStructTypeError,\n type InvalidStructTypeErrorType,\n} from './errors/typedData.js'\nexport type {\n AbiEventParameterToPrimitiveType,\n AbiEventParametersToPrimitiveTypes,\n AbiEventTopicToPrimitiveType,\n AbiItem,\n AbiItemArgs,\n AbiItemName,\n ContractConstructorArgs,\n ContractEventArgsFromTopics,\n EventDefinition,\n ExtractAbiFunctionForArgs,\n ExtractAbiItem,\n ExtractAbiItemForArgs,\n ExtractAbiItemNames,\n ContractErrorArgs,\n ContractErrorName,\n ContractEventArgs,\n ContractEventName,\n ContractFunctionParameters,\n ContractFunctionReturnType,\n ContractFunctionArgs,\n ContractFunctionName,\n GetEventArgs,\n GetValue,\n LogTopicType,\n MaybeAbiEventName,\n MaybeExtractEventArgsFromAbi,\n UnionWiden,\n Widen,\n} from './types/contract.js'\nexport type {\n AccessList,\n Transaction,\n TransactionBase,\n TransactionEIP1559,\n TransactionEIP2930,\n TransactionEIP4844,\n TransactionEIP7702,\n TransactionLegacy,\n TransactionReceipt,\n TransactionRequest,\n TransactionRequestBase,\n TransactionRequestEIP1559,\n TransactionRequestEIP2930,\n TransactionRequestEIP4844,\n TransactionRequestEIP7702,\n TransactionRequestGeneric,\n TransactionRequestLegacy,\n TransactionSerializable,\n TransactionSerializableBase,\n TransactionSerializableEIP1559,\n TransactionSerializableEIP2930,\n TransactionSerializableEIP4844,\n TransactionSerializableEIP7702,\n TransactionSerializableGeneric,\n TransactionSerializableLegacy,\n TransactionSerialized,\n TransactionSerializedEIP1559,\n TransactionSerializedEIP2930,\n TransactionSerializedEIP4844,\n TransactionSerializedEIP7702,\n TransactionSerializedGeneric,\n TransactionSerializedLegacy,\n TransactionType,\n} from './types/transaction.js'\nexport type {\n Assign,\n Branded,\n Evaluate,\n IsNarrowable,\n IsUndefined,\n IsUnion,\n LooseOmit,\n MaybePartial,\n MaybePromise,\n MaybeRequired,\n Mutable,\n NoInfer,\n NoUndefined,\n Omit,\n Or,\n PartialBy,\n RequiredBy,\n Some,\n UnionEvaluate,\n UnionLooseOmit,\n ValueOf,\n Prettify,\n ExactPartial,\n ExactRequired,\n IsNever,\n OneOf,\n UnionOmit,\n UnionPartialBy,\n UnionPick,\n UnionRequiredBy,\n UnionToTuple,\n} from './types/utils.js'\nexport type {\n Account,\n AccountSource,\n CustomSource,\n HDAccount,\n HDOptions,\n JsonRpcAccount,\n LocalAccount,\n PrivateKeyAccount,\n} from './accounts/types.js'\nexport type { AssetGateway, AssetGatewayUrls } from './types/ens.js'\nexport type {\n Block,\n BlockIdentifier,\n BlockNumber,\n BlockTag,\n Uncle,\n} from './types/block.js'\nexport type {\n ByteArray,\n Hash,\n Hex,\n LogTopic,\n Signature,\n CompactSignature,\n SignableMessage,\n} from './types/misc.js'\nexport type {\n AddEthereumChainParameter,\n BundlerRpcSchema,\n DebugBundlerRpcSchema,\n EIP1193EventMap,\n EIP1193Events,\n EIP1193Parameters,\n EIP1193Provider,\n EIP1193RequestFn,\n EIP1474Methods,\n ProviderRpcErrorType as EIP1193ProviderRpcErrorType,\n ProviderConnectInfo,\n ProviderMessage,\n PublicRpcSchema,\n PaymasterRpcSchema,\n NetworkSync,\n RpcSchema,\n RpcSchemaOverride,\n TestRpcSchema,\n WalletCapabilities,\n WalletCapabilitiesRecord,\n WalletCallReceipt,\n WalletGetCallsStatusReturnType,\n WalletGrantPermissionsParameters,\n WalletGrantPermissionsReturnType,\n WalletSendCallsParameters,\n WalletPermissionCaveat,\n WalletPermission,\n WalletRpcSchema,\n WatchAssetParams,\n} from './types/eip1193.js'\nexport { ProviderRpcError as EIP1193ProviderRpcError } from './types/eip1193.js'\nexport type { BlobSidecar, BlobSidecars } from './types/eip4844.js'\nexport type {\n FeeHistory,\n FeeValues,\n FeeValuesEIP1559,\n FeeValuesEIP4844,\n FeeValuesLegacy,\n FeeValuesType,\n} from './types/fee.js'\nexport type { Filter, FilterType } from './types/filter.js'\nexport type { TypedDataDefinition } from './types/typedData.js'\nexport type { GetTransportConfig, GetPollOptions } from './types/transport.js'\nexport type { Log } from './types/log.js'\nexport type {\n MulticallContracts,\n MulticallResponse,\n MulticallResults,\n} from './types/multicall.js'\nexport type {\n ParseAccount,\n DeriveAccount,\n HDKey,\n} from './types/account.js'\nexport type {\n Authorization,\n AuthorizationList,\n SerializedAuthorization,\n SerializedAuthorizationList,\n SignedAuthorization,\n SignedAuthorizationList,\n} from './types/authorization.js'\nexport type {\n Index,\n Quantity,\n RpcAuthorization,\n RpcAuthorizationList,\n RpcBlock,\n RpcBlockIdentifier,\n RpcBlockNumber,\n RpcFeeHistory,\n RpcFeeValues,\n RpcLog,\n RpcTransaction,\n RpcTransactionReceipt,\n RpcTransactionRequest,\n RpcUncle,\n Status,\n RpcProof,\n RpcAccountStateOverride,\n RpcStateOverride,\n RpcStateMapping,\n} from './types/rpc.js'\nexport type { Withdrawal } from './types/withdrawal.js'\nexport type {\n StateMapping,\n StateOverride,\n} from './types/stateOverride.js'\nexport { labelhash, type LabelhashErrorType } from './utils/ens/labelhash.js'\nexport { namehash, type NamehashErrorType } from './utils/ens/namehash.js'\nexport {\n type FormattedBlock,\n defineBlock,\n type DefineBlockErrorType,\n formatBlock,\n type FormatBlockErrorType,\n} from './utils/formatters/block.js'\nexport { formatLog, type FormatLogErrorType } from './utils/formatters/log.js'\nexport {\n type DecodeAbiParametersErrorType,\n type DecodeAbiParametersReturnType,\n decodeAbiParameters,\n} from './utils/abi/decodeAbiParameters.js'\nexport {\n type DecodeDeployDataErrorType,\n type DecodeDeployDataParameters,\n type DecodeDeployDataReturnType,\n decodeDeployData,\n} from './utils/abi/decodeDeployData.js'\nexport {\n type DecodeErrorResultErrorType,\n type DecodeErrorResultParameters,\n type DecodeErrorResultReturnType,\n decodeErrorResult,\n} from './utils/abi/decodeErrorResult.js'\nexport {\n type DecodeEventLogErrorType,\n type DecodeEventLogParameters,\n type DecodeEventLogReturnType,\n decodeEventLog,\n} from './utils/abi/decodeEventLog.js'\nexport {\n type DecodeFunctionDataErrorType,\n type DecodeFunctionDataParameters,\n type DecodeFunctionDataReturnType,\n decodeFunctionData,\n} from './utils/abi/decodeFunctionData.js'\nexport {\n type DecodeFunctionResultErrorType,\n type DecodeFunctionResultParameters,\n type DecodeFunctionResultReturnType,\n decodeFunctionResult,\n} from './utils/abi/decodeFunctionResult.js'\nexport {\n type EncodeAbiParametersErrorType,\n type EncodeAbiParametersReturnType,\n encodeAbiParameters,\n} from './utils/abi/encodeAbiParameters.js'\nexport {\n type EncodeDeployDataErrorType,\n type EncodeDeployDataParameters,\n type EncodeDeployDataReturnType,\n encodeDeployData,\n} from './utils/abi/encodeDeployData.js'\nexport {\n type EncodeErrorResultErrorType,\n type EncodeErrorResultParameters,\n type EncodeErrorResultReturnType,\n encodeErrorResult,\n} from './utils/abi/encodeErrorResult.js'\nexport {\n type EncodeEventTopicsErrorType,\n type EncodeEventTopicsParameters,\n type EncodeEventTopicsReturnType,\n encodeEventTopics,\n} from './utils/abi/encodeEventTopics.js'\nexport {\n type EncodeFunctionDataErrorType,\n type EncodeFunctionDataParameters,\n type EncodeFunctionDataReturnType,\n encodeFunctionData,\n} from './utils/abi/encodeFunctionData.js'\nexport {\n type PrepareEncodeFunctionDataErrorType,\n type PrepareEncodeFunctionDataParameters,\n type PrepareEncodeFunctionDataReturnType,\n prepareEncodeFunctionData,\n} from './utils/abi/prepareEncodeFunctionData.js'\nexport {\n type EncodeFunctionResultErrorType,\n type EncodeFunctionResultParameters,\n type EncodeFunctionResultReturnType,\n encodeFunctionResult,\n} from './utils/abi/encodeFunctionResult.js'\nexport {\n type ParseEventLogsErrorType,\n type ParseEventLogsParameters,\n type ParseEventLogsReturnType,\n parseEventLogs,\n} from './utils/abi/parseEventLogs.js'\nexport {\n type FormattedTransaction,\n defineTransaction,\n type DefineTransactionErrorType,\n formatTransaction,\n type FormatTransactionErrorType,\n transactionType,\n} from './utils/formatters/transaction.js'\nexport {\n type FormattedTransactionReceipt,\n defineTransactionReceipt,\n type DefineTransactionReceiptErrorType,\n formatTransactionReceipt,\n type FormatTransactionReceiptErrorType,\n} from './utils/formatters/transactionReceipt.js'\nexport {\n type FormattedTransactionRequest,\n defineTransactionRequest,\n type DefineTransactionRequestErrorType,\n formatTransactionRequest,\n type FormatTransactionRequestErrorType,\n rpcTransactionType,\n} from './utils/formatters/transactionRequest.js'\nexport {\n type GetAbiItemErrorType,\n type GetAbiItemParameters,\n type GetAbiItemReturnType,\n getAbiItem,\n} from './utils/abi/getAbiItem.js'\nexport {\n type GetContractAddressOptions,\n type GetCreate2AddressOptions,\n type GetCreate2AddressErrorType,\n type GetCreateAddressOptions,\n type GetCreateAddressErrorType,\n getContractAddress,\n getCreate2Address,\n getCreateAddress,\n} from './utils/address/getContractAddress.js'\nexport {\n type GetSerializedTransactionType,\n type GetSerializedTransactionTypeErrorType,\n getSerializedTransactionType,\n} from './utils/transaction/getSerializedTransactionType.js'\nexport {\n type GetTransactionType,\n type GetTransactionTypeErrorType,\n getTransactionType,\n} from './utils/transaction/getTransactionType.js'\nexport {\n type HashDomainErrorType,\n type HashStructErrorType,\n type HashTypedDataErrorType,\n type HashTypedDataParameters,\n type HashTypedDataReturnType,\n hashDomain,\n hashStruct,\n hashTypedData,\n} from './utils/signature/hashTypedData.js'\nexport {\n type CompactSignatureToSignatureErrorType,\n compactSignatureToSignature,\n} from './utils/signature/compactSignatureToSignature.js'\nexport {\n /** @deprecated Use `ParseCompactSignatureErrorType`. */\n type ParseCompactSignatureErrorType as HexToCompactSignatureErrorType,\n /** @deprecated Use `parseCompactSignature`. */\n parseCompactSignature as hexToCompactSignature,\n type ParseCompactSignatureErrorType,\n parseCompactSignature,\n} from './utils/signature/parseCompactSignature.js'\nexport {\n /** @deprecated Use `ParseSignatureErrorType`. */\n type ParseSignatureErrorType as HexToSignatureErrorType,\n /** @deprecated Use `parseSignature`. */\n parseSignature as hexToSignature,\n type ParseSignatureErrorType,\n parseSignature,\n} from './utils/signature/parseSignature.js'\nexport {\n type RecoverAddressErrorType,\n type RecoverAddressParameters,\n type RecoverAddressReturnType,\n recoverAddress,\n} from './utils/signature/recoverAddress.js'\nexport {\n type RecoverMessageAddressErrorType,\n type RecoverMessageAddressParameters,\n type RecoverMessageAddressReturnType,\n recoverMessageAddress,\n} from './utils/signature/recoverMessageAddress.js'\nexport {\n type RecoverPublicKeyErrorType,\n type RecoverPublicKeyParameters,\n type RecoverPublicKeyReturnType,\n recoverPublicKey,\n} from './utils/signature/recoverPublicKey.js'\nexport {\n type RecoverTransactionAddressErrorType,\n type RecoverTransactionAddressParameters,\n type RecoverTransactionAddressReturnType,\n recoverTransactionAddress,\n} from './utils/signature/recoverTransactionAddress.js'\nexport {\n type RecoverTypedDataAddressErrorType,\n type RecoverTypedDataAddressParameters,\n type RecoverTypedDataAddressReturnType,\n recoverTypedDataAddress,\n} from './utils/signature/recoverTypedDataAddress.js'\nexport {\n type SignatureToCompactSignatureErrorType,\n signatureToCompactSignature,\n} from './utils/signature/signatureToCompactSignature.js'\nexport {\n /** @deprecated Use `SignatureToHexErrorType` instead. */\n type SerializeCompactSignatureErrorType as CompactSignatureToHexErrorType,\n /** @deprecated Use `serializeCompactSignature` instead. */\n serializeCompactSignature as compactSignatureToHex,\n type SerializeCompactSignatureErrorType,\n serializeCompactSignature,\n} from './utils/signature/serializeCompactSignature.js'\nexport {\n /** @deprecated Use `SignatureToHexErrorType` instead. */\n type SerializeSignatureErrorType as SignatureToHexErrorType,\n /** @deprecated Use `serializeSignature` instead. */\n serializeSignature as signatureToHex,\n type SerializeSignatureParameters,\n type SerializeSignatureReturnType,\n type SerializeSignatureErrorType,\n serializeSignature,\n} from './utils/signature/serializeSignature.js'\nexport {\n bytesToRlp,\n type BytesToRlpErrorType,\n hexToRlp,\n type HexToRlpErrorType,\n toRlp,\n type ToRlpErrorType,\n type ToRlpReturnType,\n} from './utils/encoding/toRlp.js'\nexport {\n type VerifyHashErrorType,\n type VerifyHashParameters,\n type VerifyHashReturnType,\n verifyHash,\n} from './utils/signature/verifyHash.js'\nexport {\n type VerifyMessageErrorType,\n type VerifyMessageParameters,\n type VerifyMessageReturnType,\n verifyMessage,\n} from './utils/signature/verifyMessage.js'\nexport {\n type VerifyTypedDataErrorType,\n type VerifyTypedDataParameters,\n type VerifyTypedDataReturnType,\n verifyTypedData,\n} from './utils/signature/verifyTypedData.js'\nexport {\n type ParseErc6492SignatureErrorType,\n type ParseErc6492SignatureParameters,\n type ParseErc6492SignatureReturnType,\n parseErc6492Signature,\n} from './utils/signature/parseErc6492Signature.js'\nexport {\n type IsErc6492SignatureErrorType,\n type IsErc6492SignatureParameters,\n type IsErc6492SignatureReturnType,\n isErc6492Signature,\n} from './utils/signature/isErc6492Signature.js'\nexport {\n type SerializeErc6492SignatureErrorType,\n type SerializeErc6492SignatureParameters,\n type SerializeErc6492SignatureReturnType,\n serializeErc6492Signature,\n} from './utils/signature/serializeErc6492Signature.js'\nexport {\n type AssertRequestErrorType,\n assertRequest,\n} from './utils/transaction/assertRequest.js'\nexport {\n type AssertTransactionEIP1559ErrorType,\n assertTransactionEIP1559,\n type AssertTransactionEIP2930ErrorType,\n assertTransactionEIP2930,\n type AssertTransactionLegacyErrorType,\n assertTransactionLegacy,\n} from './utils/transaction/assertTransaction.js'\nexport {\n type BoolToBytesErrorType,\n type BoolToBytesOpts,\n boolToBytes,\n type HexToBytesErrorType,\n type HexToBytesOpts,\n hexToBytes,\n type NumberToBytesErrorType,\n numberToBytes,\n type StringToBytesErrorType,\n type StringToBytesOpts,\n stringToBytes,\n type ToBytesErrorType,\n type ToBytesParameters,\n toBytes,\n} from './utils/encoding/toBytes.js'\nexport {\n type BoolToHexErrorType,\n type BoolToHexOpts,\n boolToHex,\n type BytesToHexErrorType,\n type BytesToHexOpts,\n bytesToHex,\n type NumberToHexErrorType,\n type NumberToHexOpts,\n numberToHex,\n type StringToHexErrorType,\n type StringToHexOpts,\n stringToHex,\n type ToHexErrorType,\n type ToHexParameters,\n toHex,\n} from './utils/encoding/toHex.js'\nexport {\n type BytesToBigIntErrorType,\n type BytesToBigIntOpts,\n bytesToBigInt,\n type BytesToBoolErrorType,\n type BytesToBoolOpts,\n bytesToBool,\n type BytesToNumberErrorType,\n type BytesToNumberOpts,\n bytesToNumber,\n type BytesToStringErrorType,\n type BytesToStringOpts,\n bytesToString,\n type FromBytesErrorType,\n type FromBytesParameters,\n fromBytes,\n} from './utils/encoding/fromBytes.js'\nexport {\n type CcipRequestParameters,\n type CcipRequestErrorType,\n ccipRequest,\n /** @deprecated Use `ccipRequest`. */\n ccipRequest as ccipFetch,\n type OffchainLookupErrorType,\n offchainLookup,\n offchainLookupAbiItem,\n offchainLookupSignature,\n} from './utils/ccip.js'\nexport {\n type BlobsToCommitmentsErrorType,\n type BlobsToCommitmentsParameters,\n type BlobsToCommitmentsReturnType,\n blobsToCommitments,\n} from './utils/blob/blobsToCommitments.js'\nexport {\n type CommitmentToVersionedHashErrorType,\n type CommitmentToVersionedHashParameters,\n type CommitmentToVersionedHashReturnType,\n commitmentToVersionedHash,\n} from './utils/blob/commitmentToVersionedHash.js'\nexport {\n type CommitmentsToVersionedHashesErrorType,\n type CommitmentsToVersionedHashesParameters,\n type CommitmentsToVersionedHashesReturnType,\n commitmentsToVersionedHashes,\n} from './utils/blob/commitmentsToVersionedHashes.js'\nexport {\n type SidecarsToVersionedHashesErrorType,\n type SidecarsToVersionedHashesParameters,\n type SidecarsToVersionedHashesReturnType,\n sidecarsToVersionedHashes,\n} from './utils/blob/sidecarsToVersionedHashes.js'\nexport {\n type blobsToProofsErrorType,\n type blobsToProofsParameters,\n type blobsToProofsReturnType,\n blobsToProofs,\n} from './utils/blob/blobsToProofs.js'\nexport {\n type FromBlobsErrorType,\n type FromBlobsParameters,\n type FromBlobsReturnType,\n fromBlobs,\n} from './utils/blob/fromBlobs.js'\nexport {\n type ToBlobSidecarsErrorType,\n type ToBlobSidecarsParameters,\n type ToBlobSidecarsReturnType,\n toBlobSidecars,\n} from './utils/blob/toBlobSidecars.js'\nexport {\n type ToBlobsErrorType,\n type ToBlobsParameters,\n type ToBlobsReturnType,\n toBlobs,\n} from './utils/blob/toBlobs.js'\nexport {\n type DefineKzgErrorType,\n type DefineKzgParameters,\n type DefineKzgReturnType,\n defineKzg,\n} from './utils/kzg/defineKzg.js'\nexport {\n type SetupKzgErrorType,\n type SetupKzgParameters,\n type SetupKzgReturnType,\n setupKzg,\n} from './utils/kzg/setupKzg.js'\nexport {\n type ConcatBytesErrorType,\n type ConcatErrorType,\n type ConcatHexErrorType,\n type ConcatReturnType,\n concat,\n concatBytes,\n concatHex,\n} from './utils/data/concat.js'\nexport {\n type AssertCurrentChainErrorType,\n type AssertCurrentChainParameters,\n assertCurrentChain,\n} from './utils/chain/assertCurrentChain.js'\nexport { defineChain } from './utils/chain/defineChain.js'\nexport {\n type ExtractChainErrorType,\n type ExtractChainParameters,\n type ExtractChainReturnType,\n extractChain,\n} from './utils/chain/extractChain.js'\nexport {\n type GetChainContractAddressErrorType,\n getChainContractAddress,\n} from './utils/chain/getChainContractAddress.js'\nexport {\n type EncodePackedErrorType,\n encodePacked,\n} from './utils/abi/encodePacked.js'\nexport {\n type WithRetryErrorType,\n withRetry,\n} from './utils/promise/withRetry.js'\nexport {\n type WithTimeoutErrorType,\n withTimeout,\n} from './utils/promise/withTimeout.js'\nexport {\n type FormatEtherErrorType,\n formatEther,\n} from './utils/unit/formatEther.js'\nexport {\n type FormatGweiErrorType,\n formatGwei,\n} from './utils/unit/formatGwei.js'\nexport {\n type FormatUnitsErrorType,\n formatUnits,\n} from './utils/unit/formatUnits.js'\nexport {\n type FromHexErrorType,\n fromHex,\n type HexToBigIntErrorType,\n hexToBigInt,\n type HexToBoolErrorType,\n hexToBool,\n type HexToNumberErrorType,\n hexToNumber,\n type HexToStringErrorType,\n hexToString,\n} from './utils/encoding/fromHex.js'\nexport {\n type FromRlpErrorType,\n type FromRlpReturnType,\n fromRlp,\n} from './utils/encoding/fromRlp.js'\nexport {\n type ChecksumAddressErrorType,\n type GetAddressErrorType,\n checksumAddress,\n getAddress,\n} from './utils/address/getAddress.js'\nexport {\n type GetContractErrorReturnType,\n getContractError,\n} from './utils/errors/getContractError.js'\nexport {\n type ToEventSelectorErrorType,\n toEventSelector,\n /** @deprecated use `ToEventSelectorErrorType`. */\n type ToEventSelectorErrorType as GetEventSelectorErrorType,\n /** @deprecated use `toEventSelector`. */\n toEventSelector as getEventSelector,\n} from './utils/hash/toEventSelector.js'\nexport {\n type ToFunctionSelectorErrorType,\n toFunctionSelector,\n /** @deprecated use `ToFunctionSelectorErrorType`. */\n type ToFunctionSelectorErrorType as GetFunctionSelectorErrorType,\n /** @deprecated use `toFunctionSelector`. */\n toFunctionSelector as getFunctionSelector,\n} from './utils/hash/toFunctionSelector.js'\nexport {\n type ToEventSignatureErrorType,\n toEventSignature,\n /** @deprecated use `ToEventSignatureErrorType`. */\n type ToEventSignatureErrorType as GetEventSignatureErrorType,\n /** @deprecated use `toEventSignature`. */\n toEventSignature as getEventSignature,\n} from './utils/hash/toEventSignature.js'\nexport {\n type ToFunctionSignatureErrorType,\n toFunctionSignature,\n /** @deprecated use `ToFunctionSignatureErrorType`. */\n type ToFunctionSignatureErrorType as GetFunctionSignatureErrorType,\n /** @deprecated use `toFunctionSignature`. */\n toFunctionSignature as getFunctionSignature,\n} from './utils/hash/toFunctionSignature.js'\nexport {\n type ToEventHashErrorType,\n toEventHash,\n} from './utils/hash/toEventHash.js'\nexport {\n type ToFunctionHashErrorType,\n toFunctionHash,\n} from './utils/hash/toFunctionHash.js'\nexport {\n type HashMessageErrorType,\n hashMessage,\n} from './utils/signature/hashMessage.js'\nexport {\n type ToPrefixedMessageErrorType,\n toPrefixedMessage,\n} from './utils/signature/toPrefixedMessage.js'\nexport {\n type IsAddressOptions,\n type IsAddressErrorType,\n isAddress,\n} from './utils/address/isAddress.js'\nexport {\n type IsAddressEqualReturnType,\n type IsAddressEqualErrorType,\n isAddressEqual,\n} from './utils/address/isAddressEqual.js'\nexport { type IsBytesErrorType, isBytes } from './utils/data/isBytes.js'\nexport { type IsHashErrorType, isHash } from './utils/hash/isHash.js'\nexport { type IsHexErrorType, isHex } from './utils/data/isHex.js'\nexport {\n type Keccak256Hash,\n type Keccak256ErrorType,\n keccak256,\n} from './utils/hash/keccak256.js'\nexport {\n type Sha256Hash,\n type Sha256ErrorType,\n sha256,\n} from './utils/hash/sha256.js'\nexport {\n type Ripemd160Hash,\n type Ripemd160ErrorType,\n ripemd160,\n} from './utils/hash/ripemd160.js'\nexport {\n type PadBytesErrorType,\n type PadErrorType,\n type PadHexErrorType,\n type PadReturnType,\n pad,\n padBytes,\n padHex,\n} from './utils/data/pad.js'\nexport {\n type ParseEtherErrorType,\n parseEther,\n} from './utils/unit/parseEther.js'\nexport { type ParseGweiErrorType, parseGwei } from './utils/unit/parseGwei.js'\nexport {\n type ParseTransactionErrorType,\n type ParseTransactionReturnType,\n parseTransaction,\n} from './utils/transaction/parseTransaction.js'\nexport {\n type ParseUnitsErrorType,\n parseUnits,\n} from './utils/unit/parseUnits.js'\nexport {\n type SerializeAccessListErrorType,\n serializeAccessList,\n} from './utils/transaction/serializeAccessList.js'\nexport {\n serializeTransaction,\n type SerializeTransactionErrorType,\n type SerializedTransactionReturnType,\n type SerializeTransactionFn,\n} from './utils/transaction/serializeTransaction.js'\nexport { type SizeErrorType, size } from './utils/data/size.js'\nexport {\n type SliceBytesErrorType,\n type SliceErrorType,\n type SliceHexErrorType,\n slice,\n sliceBytes,\n sliceHex,\n} from './utils/data/slice.js'\nexport { type StringifyErrorType, stringify } from './utils/stringify.js'\nexport {\n type TrimErrorType,\n type TrimReturnType,\n trim,\n} from './utils/data/trim.js'\nexport {\n type DomainSeparatorErrorType,\n type GetTypesForEIP712DomainErrorType,\n type SerializeTypedDataErrorType,\n type ValidateTypedDataErrorType,\n serializeTypedData,\n validateTypedData,\n domainSeparator,\n getTypesForEIP712Domain,\n} from './utils/typedData.js'\nexport {\n type CreateNonceManagerParameters,\n type NonceManager,\n type NonceManagerSource,\n createNonceManager,\n nonceManager,\n} from './utils/nonceManager.js'\nexport type {\n RpcEstimateUserOperationGasReturnType,\n RpcGetUserOperationByHashReturnType,\n RpcUserOperation,\n RpcUserOperationReceipt,\n RpcUserOperationRequest,\n} from './account-abstraction/types/rpc.js'\n", "import { defineChain } from 'viem';\n\nimport { ChainDefinition } from '../../types/ConceroNetwork';\n\nexport function createViemChain(\n\tchainDefinition: ChainDefinition\n): ReturnType {\n\treturn defineChain({\n\t\tid: chainDefinition.id,\n\t\tname: chainDefinition.name,\n\t\tnativeCurrency: {\n\t\t\tdecimals: 18,\n\t\t\tname: 'eth',\n\t\t\tsymbol: 'eth',\n\t\t},\n\t\trpcUrls: {\n\t\t\tdefault: { http: chainDefinition.rpcUrls },\n\t\t},\n\t\tblockExplorers: chainDefinition.blockExplorer\n\t\t\t? {\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\tname: chainDefinition.blockExplorer.name,\n\t\t\t\t\t\turl: chainDefinition.blockExplorer.url,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: undefined,\n\t\ttestnet: chainDefinition.isTestnet,\n\t});\n}\n", "import process from 'process';\n\nimport { warn } from './log';\n\nfunction getEnvVar(key: string): string | undefined {\n\tconst value = process.env[key];\n\tif (value === undefined || value === '') {\n\t\twarn(`Missing env variable: ${key}`, 'getEnvVar');\n\t\treturn undefined;\n\t}\n\n\treturn value;\n}\n\nexport { getEnvVar };\n", "const networkColors: Record = {\n\tethereum: '\\x1b[30m', // grey\n\tarbitrum: '\\x1b[34m', // blue\n\tpolygon: '\\x1b[35m', // magenta\n\tavalanche: '\\x1b[31m', // red\n\tbase: '\\x1b[36m', // cyan\n\tethereumSepolia: '\\x1b[30m', // grey\n\tarbitrumSepolia: '\\x1b[34m', // blue\n\toptimismSepolia: '\\x1b[31m', // red\n\tpolygonAmoy: '\\x1b[35m', // magenta\n\tavalancheFuji: '\\x1b[31m', // red\n\tbaseSepolia: '\\x1b[36m', // cyan\n\thardhat: '\\x1b[32m', // green\n\tlocalhost: '\\x1b[32m', // green\n};\nconst reset = '\\x1b[0m';\n\nexport function log(message: any, functionName: string, networkName?: string) {\n\tconst greenFill = '\\x1b[32m';\n\tconst network = networkName ? `\\x1b[35m[${networkName}]${reset}` : '';\n\n\tconsole.log(`${network}${greenFill}[${functionName}]${reset}`, message);\n}\n\nexport function warn(message: any, functionName: string) {\n\tconst yellowFill = '\\x1b[33m';\n\n\tconsole.log(`${yellowFill}[${functionName}]${reset}`, message);\n}\n\nexport function err(message: any, functionName: string, networkName?: string) {\n\tconst redFill = '\\x1b[31m';\n\tconst network = networkName\n\t\t? `${networkColors[networkName]}[${networkName}]${reset}`\n\t\t: '';\n\n\tconsole.log(\n\t\t`${network}${redFill}[${functionName}] ERROR:${reset}`,\n\t\tmessage\n\t);\n}\n\nexport default log;\n", "import { getEnvVar } from './getEnvVar';\n\nexport const getTrezorDeployEnabled = () =>\n\tgetEnvVar('TREZOR_DEPLOY_ENABLED') === 'true';\n", "import { NetworkType } from '../networks/types';\nimport { warn } from './log';\n\nexport function getWallet(\n\tchainType: NetworkType,\n\taccountType:\n\t\t| 'proxyDeployer'\n\t\t| 'deployer'\n\t\t| 'operator'\n\t\t| 'priceFeedProxyDeployer',\n\twalletType: 'privateKey' | 'address'\n) {\n\tlet prefix;\n\tlet walletKey;\n\tswitch (accountType) {\n\t\tcase 'proxyDeployer':\n\t\t\tprefix = 'PROXY_DEPLOYER';\n\t\t\tbreak;\n\t\tcase 'deployer':\n\t\t\tprefix = 'DEPLOYER';\n\t\t\tbreak;\n\t\tcase 'operator':\n\t\t\tprefix = 'OPERATOR';\n\t\t\tbreak;\n\t\tcase 'priceFeedProxyDeployer':\n\t\t\tprefix = 'PRICE_FEED_PROXY_DEPLOYER';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown account type: ${accountType}`);\n\t}\n\n\tswitch (walletType) {\n\t\tcase 'privateKey':\n\t\t\twalletKey = 'PRIVATE_KEY';\n\t\t\tbreak;\n\t\tcase 'address':\n\t\t\twalletKey = 'ADDRESS';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown wallet type: ${walletType}`);\n\t}\n\n\t// Determine the environment variable key based on the wallet type\n\tconst envKey = `${chainType.toUpperCase()}_${prefix}_${walletKey}`;\n\tconst walletValue = process.env[envKey];\n\n\tif (!walletValue) {\n\t\twarn(`Missing env variable: ${envKey}`, 'getEnvVar');\n\t}\n\n\treturn walletValue;\n}\n", "import { readFileSync, writeFileSync } from \"fs\";\nimport path from \"path\";\n\nimport { getNetworkEnvKey } from \"../networks/getNetworkEnvKey\";\n\nimport { envPrefixes } from \"../constants/deploymentVariables\";\nimport { ConceroNetworkNames } from \"../../types/ConceroNetwork\";\nimport { EnvFileName, EnvPrefixes } from \"../../types/deploymentVariables\";\nimport log from \"./log\";\n\nexport type ContractPrefix = keyof EnvPrefixes;\n\nexport function updateEnvVariable(key: string, newValue: string, envFileName: EnvFileName) {\n\tconst filePath = path.join(__dirname, `../.env.${envFileName}`);\n\tif (!filePath) throw new Error(`File not found: ${filePath}`);\n\n\tconst envContents = readFileSync(filePath, \"utf8\");\n\tlet lines = envContents.split(/\\r?\\n/);\n\n\tif (!lines.some(line => line.startsWith(`${key}=`))) {\n\t\tlog(`Key ${key} not found in .env file. Adding to ${filePath}`, \"updateEnvVariable\");\n\t\tlines.push(`${key}=${newValue}`);\n\t}\n\n\tconst newLines = lines.map(line => {\n\t\tlet [currentKey, currentValue] = line.split(\"=\");\n\t\tif (currentKey === key) {\n\t\t\treturn `${key}=${newValue}`;\n\t\t}\n\t\treturn line;\n\t});\n\n\twriteFileSync(filePath, newLines.join(\"\\n\"));\n\tprocess.env[key] = newValue;\n}\n\nexport function updateEnvAddress(\n\tprefix: ContractPrefix,\n\tnewValue: string,\n\tenvFileName: EnvFileName,\n\tnetworkPostfix?: ConceroNetworkNames | string,\n): void {\n\tconst searchKey = networkPostfix\n\t\t? `${envPrefixes[prefix]}_${getNetworkEnvKey(networkPostfix)}`\n\t\t: envPrefixes[prefix];\n\n\tupdateEnvVariable(searchKey, newValue, envFileName);\n}\n\nexport default updateEnvVariable;\n", "import type { WaitForTransactionReceiptParameters } from \"viem/actions/public/waitForTransactionReceipt\";\n\nimport { EnvPrefixes } from \"../../types/deploymentVariables\";\nimport { ConceroNetwork } from \"../../types/ConceroNetwork\";\n\nenum ProxyEnum {\n\trouterProxy = \"routerProxy\",\n\tverifierProxy = \"verifierProxy\",\n\tpriceFeedProxy = \"priceFeedProxy\",\n\tcreValidatorLibProxy = \"creValidatorLibProxy\",\n\trelayerLibProxy = \"relayerLibProxy\",\n}\n\nfunction getViemReceiptConfig(chain: ConceroNetwork): Partial {\n\treturn {\n\t\ttimeout: 0,\n\t\tconfirmations: chain.confirmations,\n\t};\n}\n\nconst envPrefixes: EnvPrefixes = {\n\trouter: \"CONCERO_ROUTER\",\n\trouterProxy: \"CONCERO_ROUTER_PROXY\",\n\trouterProxyAdmin: \"CONCERO_ROUTER_PROXY_ADMIN\",\n\tverifier: \"CONCERO_VERIFIER\",\n\tverifierProxy: \"CONCERO_VERIFIER_PROXY\",\n\tverifierProxyAdmin: \"CONCERO_VERIFIER_PROXY_ADMIN\",\n\tpriceFeed: \"CONCERO_PRICE_FEED\",\n\tpriceFeedProxy: \"CONCERO_PRICE_FEED_PROXY\",\n\tpriceFeedProxyAdmin: \"CONCERO_PRICE_FEED_PROXY_ADMIN\",\n\tlpToken: \"LPTOKEN\",\n\tpause: \"CONCERO_PAUSE\",\n\tcreValidatorLibProxy: \"CONCERO_CRE_VALIDATOR_LIB_PROXY\",\n\tcreValidatorLibProxyAdmin: \"CONCERO_CRE_VALIDATOR_LIB_PROXY_ADMIN\",\n\tcreValidatorLib: \"CONCERO_CRE_VALIDATOR_LIB\",\n\trelayerLib: \"CONCERO_RELAYER_LIB\",\n\trelayerLibProxy: \"CONCERO_RELAYER_LIB_PROXY\",\n\trelayerLibProxyAdmin: \"CONCERO_RELAYER_LIB_PROXY_ADMIN\",\n};\n\nconst ADMIN_SLOT = \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\";\nconst ADMIN_ROLE = \"0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42\";\n\nexport {\n\tProxyEnum,\n\tenvPrefixes,\n\tgetViemReceiptConfig,\n\tADMIN_SLOT,\n\tADMIN_ROLE,\n};\n", "import mainnetChains from '@concero/concero-networks/output/chains.mainnet.json';\nimport testnetChains from '@concero/concero-networks/output/chains.testnet.json';\nimport type { Chain } from '@concero/concero-networks/src/types';\nimport { type NetworkType } from '../../types/ConceroNetwork';\n\nimport {\n\tChainDefinition,\n\tConceroNetwork,\n} from '../../types/ConceroNetwork';\nimport { getWallet } from '../utils';\nimport { createViemChain } from '../utils/createViemChain';\nimport { getTrezorDeployEnabled } from '../utils/getTrezorDeployEnabled';\n\nconst mainnetProxyDeployerPK = getWallet(\n\t'mainnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\nconst testnetProxyDeployerPK = getWallet(\n\t'testnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\n\nconst mainnetDeployerPK = getWallet('mainnet', 'deployer', 'privateKey');\nconst testnetDeployerPK = getWallet('testnet', 'deployer', 'privateKey');\n\nconst trezorDeployEnabled = getTrezorDeployEnabled();\n\nconst testnetAccounts = [testnetDeployerPK, testnetProxyDeployerPK];\n\nconst networkTypes: Record = {\n\tmainnet: 'mainnet',\n\ttestnet: 'testnet',\n\tlocalhost: 'localhost',\n};\n\nexport type ConceroMainnetNetworkNames =\n\t(typeof mainnetChains)[keyof typeof mainnetChains]['name'];\nexport type ConceroTestnetNetworkNames =\n\t(typeof testnetChains)[keyof typeof testnetChains]['name'];\n\nfunction createExtendedNetworks>(\n\tchains: T,\n\tnetworkType: NetworkType,\n\taccounts: (string | undefined)[]\n): Record {\n\tconst validAccounts = accounts.filter((acc): acc is string => !!acc);\n\t\n\treturn Object.fromEntries(\n\t\tObject.values(chains).map(chain => {\n\t\t\tconst chainDefinition: ChainDefinition = {\n\t\t\t\tid: parseInt(chain.id),\n\t\t\t\tname: chain.name,\n\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\tisTestnet: chain.isTestnet ?? false,\n\t\t\t\t...(chain.blockExplorers?.[0] && {\n\t\t\t\t\tblockExplorer: {\n\t\t\t\t\t\tname: chain.blockExplorers[0].name,\n\t\t\t\t\t\turl: chain.blockExplorers[0].url,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t};\n\n\t\t\tconst viemChain = createViemChain(chainDefinition);\n\n\t\t\treturn [\n\t\t\t\tchain.name,\n\t\t\t\t{\n\t\t\t\t\tname: chain.name,\n\t\t\t\t\tchainId: parseInt(chain.id),\n\t\t\t\t\ttype: networkType,\n\t\t\t\t\turl: chain.rpcUrls[0] || '',\n\t\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\t\tsaveDeployments: false,\n\t\t\t\t\t...(!trezorDeployEnabled && { accounts: validAccounts }),\n\t\t\t\t\tchainSelector: BigInt(chain.chainSelector),\n\t\t\t\t\tconfirmations: 1,\n\t\t\t\t\tviemChain,\n\t\t\t\t\t...(trezorDeployEnabled && {\n\t\t\t\t\t\ttrezorDerivationPaths: [\n\t\t\t\t\t\t\t[44, 60, 0, 0, 0],\n\t\t\t\t\t\t\t[44, 60, 0, 0, 1],\n\t\t\t\t\t\t],\n\t\t\t\t\t\ttrezorInsecureDerivation: true,\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t];\n\t\t})\n\t) as Record;\n}\n\nexport const testnetNetworks = createExtendedNetworks(\n\ttestnetChains as unknown as Record,\n\tnetworkTypes.testnet,\n\ttestnetAccounts\n);\n\nexport const mainnetNetworks = createExtendedNetworks(\n\tmainnetChains as unknown as Record,\n\tnetworkTypes.mainnet,\n\t[mainnetDeployerPK, mainnetProxyDeployerPK]\n);\n\nexport const conceroNetworks: Record = {\n\t...testnetNetworks,\n\t...mainnetNetworks,\n};\n", "import { HardhatRuntimeEnvironment } from 'hardhat/types';\n\nimport { conceroNetworks } from '../constants/conceroNetworks';\nimport { ContractPrefix, EnvFileName } from '../../types/deploymentVariables';\nimport { getTrezorDeployEnabled, log, updateEnvAddress } from '../utils';\n\nexport interface ITxParams {\n\tgasLimit: bigint;\n}\n\nexport interface IGenericDeployParams {\n\thre: HardhatRuntimeEnvironment;\n\tcontractName: string;\n\tcontractPrefix: ContractPrefix;\n\ttxParams?: Partial;\n}\n\nexport const genericDeploy = async (\n\t{ hre, contractName, contractPrefix, txParams }: IGenericDeployParams,\n\t...contractConstructorArgs: any[]\n) => {\n\tconst [deployer] = await hre.ethers.getSigners();\n\tconst chain = conceroNetworks[hre.network.name];\n\n\tlog(\n\t\t`Deploy ${contractName} from address: ${await deployer.getAddress()}`,\n\t\t'contract deploy',\n\t\tchain.name\n\t);\n\n\tconst contractFactory = await hre.ethers.getContractFactory(contractName);\n\n\tconst deployOverrides = txParams?.gasLimit ? { gasLimit: txParams.gasLimit } : {};\n\n\tconst deployTx = contractFactory.getDeployTransaction(\n\t\t...contractConstructorArgs,\n\t\tdeployOverrides\n\t);\n\n\tconst isTrezorDeployEnabled = getTrezorDeployEnabled();\n\tif (deployTx.data && isTrezorDeployEnabled) {\n\t\tlog(\n\t\t\t`${contractName} input data: ${deployTx.data} \\n size: ${(deployTx.data.length - 2) / 2}`,\n\t\t\t'bytecode',\n\t\t\tchain.name\n\t\t);\n\t}\n\n\tconst contract = await contractFactory.deploy(...contractConstructorArgs, deployOverrides);\n\tawait contract.deploymentTransaction()?.wait();\n\tconst deploymentAddress = await contract.getAddress();\n\n\tif (hre.tenderly) {\n\t\tawait hre.tenderly.verify({ name: contractName, address: deploymentAddress });\n\t}\n\n\tlog(\n\t\t`Deployed at: ${deploymentAddress}`,\n\t\t`deploy ${contractName}`,\n\t\tchain.name\n\t);\n\n\tupdateEnvAddress(\n\t\tcontractPrefix,\n\t\tdeploymentAddress,\n\t\t`deployments.${chain.type}` as EnvFileName,\n\t\tchain.name,\n\t);\n\n\treturn contract.deploymentTransaction()?.hash;\n};\n", "import {\n\tAddress,\n\terc20Abi,\n\tformatUnits,\n\tHash,\n\tparseUnits,\n\tPublicClient,\n\tWalletClient,\n} from 'viem';\n\nexport class TokenSender {\n\tprivate walletClient: WalletClient;\n\tprivate publicClient: PublicClient;\n\n\tconstructor(walletClient: WalletClient, publicClient: PublicClient) {\n\t\tthis.walletClient = walletClient;\n\t\tthis.publicClient = publicClient;\n\t}\n\n\tpublic async sendToken(\n\t\ttokenAddress: Address,\n\t\tamount: string,\n\t\trecipient: Address\n\t): Promise {\n\t\tconst [tokenDecimals, tokenSymbol, tokenBalance] = await Promise.all([\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'decimals',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'symbol',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'balanceOf',\n\t\t\t\targs: [this.walletClient.account?.address!],\n\t\t\t}),\n\t\t]);\n\n\t\tconsole.log(\n\t\t\t`Current ${tokenSymbol} balance ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t);\n\n\t\tif (parseUnits(amount, tokenDecimals) > tokenBalance) {\n\t\t\tthrow new Error(\n\t\t\t\t`Insufficient balance. Required: ${amount}, available: ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t\t);\n\t\t}\n\n\t\tconst txHash = await this.walletClient.writeContract({\n\t\t\taddress: tokenAddress,\n\t\t\tabi: erc20Abi,\n\t\t\tfunctionName: 'transfer',\n\t\t\targs: [recipient, parseUnits(amount, tokenDecimals)],\n\t\t\tchain: this.walletClient.chain,\n\t\t\taccount: this.walletClient.account!,\n\t\t});\n\n\t\tconst { status } = await this.publicClient.waitForTransactionReceipt({\n\t\t\thash: txHash,\n\t\t});\n\n\t\tif (status !== 'success') {\n\t\t\tthrow new Error(`Error sending token. Hash: ${txHash}`);\n\t\t}\n\n\t\tconsole.log(`Token successfully sent. Hash: ${txHash}`);\n\n\t\treturn txHash;\n\t}\n}\n", "import { PublicClient } from 'viem';\n\ntype GasData = {\n\tgasPrice?: string;\n\tmaxFeePerGas?: string;\n\tmaxPriorityFeePerGas?: string;\n};\n\nexport async function getActualGasData(\n\tpublicClient: PublicClient\n): Promise {\n\tconst block = await publicClient.getBlock();\n\n\tconst isEIP1559 = !!block.baseFeePerGas;\n\n\tlet gasPrice = 0n;\n\tlet maxPriorityFeePerGas = 0n;\n\ttry {\n\t\tif (isEIP1559) {\n\t\t\tconst { maxFeePerGas } = await publicClient.estimateFeesPerGas();\n\t\t\tgasPrice = maxFeePerGas;\n\t\t\tmaxPriorityFeePerGas =\n\t\t\t\tawait publicClient.estimateMaxPriorityFeePerGas();\n\t\t} else {\n\t\t\tgasPrice = await publicClient.getGasPrice();\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('Error getting actual gas data:', error);\n\t\treturn {\n\t\t\tgasPrice: '0',\n\t\t\tmaxFeePerGas: '0',\n\t\t\tmaxPriorityFeePerGas: '0',\n\t\t};\n\t}\n\n\tconst gasDataLegacy = {\n\t\tgasPrice: gasPrice.toString(),\n\t};\n\n\tconst gasDataEIP1559 = {\n\t\tmaxFeePerGas: gasPrice.toString(),\n\t\tmaxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n\t};\n\n\tconst gasData: GasData = isEIP1559 ? gasDataEIP1559 : gasDataLegacy;\n\n\treturn gasData;\n}\n", "import { Deployment } from 'hardhat-deploy/types';\nimport { HardhatRuntimeEnvironment } from 'hardhat/types';\nimport { PublicClient } from 'viem';\nimport { getActualGasData } from './getActualGasData';\n\ntype HardhatDeployWrapperArgs = {\n\thre: HardhatRuntimeEnvironment;\n\targs: any[];\n\tpublicClient: PublicClient;\n\tproxy?: boolean;\n\tgasLimit?: number;\n\tlog?: boolean;\n\tlibraries?: {\n\t\t[key: string]: `0x${string}`;\n\t};\n\tskipIfAlreadyDeployed: boolean;\n};\n\nexport async function hardhatDeployWrapper(\n\tcontractName: string,\n\t{\n\t\thre,\n\t\targs,\n\t\tpublicClient,\n\t\tproxy = false,\n\t\tgasLimit,\n\t\tlog = false,\n\t\tlibraries,\n\t\tskipIfAlreadyDeployed = false,\n\t}: HardhatDeployWrapperArgs\n): Promise {\n\tlet actualDeployer;\n\n\tif (proxy) {\n\t\tconst { proxyDeployer } = await hre.getNamedAccounts();\n\t\tactualDeployer = proxyDeployer;\n\t} else {\n\t\tconst { deployer } = await hre.getNamedAccounts();\n\t\tactualDeployer = deployer;\n\t}\n\n\tconst { deploy } = hre.deployments;\n\n\tconst nonce = await publicClient.getTransactionCount({\n\t\taddress: actualDeployer as `0x${string}`,\n\t});\n\n\tconst gasData = await getActualGasData(publicClient);\n\tconst waitConfirmations = hre.network.name.startsWith('ethereum') ? 1 : 3;\n\n\tif (log) {\n\t\tconsole.log(\n\t\t\t`\\x1b[34m[hardhatDeployWrapper]\\x1b[0m\\x1b[35m[args]\\x1b[0m`,\n\t\t\t{\n\t\t\t\tfrom: actualDeployer,\n\t\t\t\targs,\n\t\t\t\tnonce,\n\t\t\t\tgasLimit: gasLimit ? gasLimit : 'auto',\n\t\t\t\tgasData,\n\t\t\t\twaitConfirmations,\n\t\t\t}\n\t\t);\n\t}\n\n\tlet deployment: Deployment;\n\ttry {\n\t\tconsole.log('Starting deployment of:', contractName);\n\t\tdeployment = await deploy(contractName, {\n\t\t\tfrom: actualDeployer,\n\t\t\targs: args,\n\t\t\tlog: true,\n\t\t\tautoMine: true,\n\t\t\tnonce,\n\t\t\twaitConfirmations,\n\t\t\t...(gasLimit ? { gasLimit } : {}),\n\t\t\t...gasData,\n\t\t\t...(libraries ? { libraries } : {}),\n\t\t\tskipIfAlreadyDeployed,\n\t\t});\n\t} catch (error) {\n\t\tconsole.error('Error deploying contract:', error);\n\t\tthrow error;\n\t}\n\n\treturn deployment;\n}\n"], + "mappings": "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", + "names": ["err", "process", "process", "networkTypes", "log"] } diff --git a/dist/types/hardhat.config.d.ts b/dist/types/hardhat.config.d.ts index 9f129ca..8fee9bd 100644 --- a/dist/types/hardhat.config.d.ts +++ b/dist/types/hardhat.config.d.ts @@ -1,5 +1,4 @@ import '@chainlink/hardhat-chainlink'; -import '@nomicfoundation/hardhat-ethers'; import '@typechain/hardhat'; import 'hardhat-deploy'; import 'hardhat-deploy-ethers'; diff --git a/dist/types/src/constants/conceroNetworks.d.ts b/dist/types/src/constants/conceroNetworks.d.ts new file mode 100644 index 0000000..ae9765c --- /dev/null +++ b/dist/types/src/constants/conceroNetworks.d.ts @@ -0,0 +1,8 @@ +import mainnetChains from '@concero/concero-networks/output/chains.mainnet.json'; +import testnetChains from '@concero/concero-networks/output/chains.testnet.json'; +import { ConceroNetwork } from '../../types/ConceroNetwork'; +export type ConceroMainnetNetworkNames = (typeof mainnetChains)[keyof typeof mainnetChains]['name']; +export type ConceroTestnetNetworkNames = (typeof testnetChains)[keyof typeof testnetChains]['name']; +export declare const testnetNetworks: Record; +export declare const mainnetNetworks: Record; +export declare const conceroNetworks: Record; diff --git a/dist/types/src/constants/deploymentVariables.d.ts b/dist/types/src/constants/deploymentVariables.d.ts new file mode 100644 index 0000000..4c73bb4 --- /dev/null +++ b/dist/types/src/constants/deploymentVariables.d.ts @@ -0,0 +1,15 @@ +import type { WaitForTransactionReceiptParameters } from "viem/actions/public/waitForTransactionReceipt"; +import { EnvPrefixes } from "../../types/deploymentVariables"; +import { ConceroNetwork } from "../../types/ConceroNetwork"; +declare enum ProxyEnum { + routerProxy = "routerProxy", + verifierProxy = "verifierProxy", + priceFeedProxy = "priceFeedProxy", + creValidatorLibProxy = "creValidatorLibProxy", + relayerLibProxy = "relayerLibProxy" +} +declare function getViemReceiptConfig(chain: ConceroNetwork): Partial; +declare const envPrefixes: EnvPrefixes; +declare const ADMIN_SLOT = "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; +declare const ADMIN_ROLE = "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42"; +export { ProxyEnum, envPrefixes, getViemReceiptConfig, ADMIN_SLOT, ADMIN_ROLE, }; diff --git a/dist/types/src/deploy/GenericDeploy.d.ts b/dist/types/src/deploy/GenericDeploy.d.ts new file mode 100644 index 0000000..50c4772 --- /dev/null +++ b/dist/types/src/deploy/GenericDeploy.d.ts @@ -0,0 +1,12 @@ +import { HardhatRuntimeEnvironment } from 'hardhat/types'; +import { ContractPrefix } from '../../types/deploymentVariables'; +export interface ITxParams { + gasLimit: bigint; +} +export interface IGenericDeployParams { + hre: HardhatRuntimeEnvironment; + contractName: string; + contractPrefix: ContractPrefix; + txParams?: Partial; +} +export declare const genericDeploy: ({ hre, contractName, contractPrefix, txParams }: IGenericDeployParams, ...contractConstructorArgs: any[]) => Promise; diff --git a/dist/types/src/index.d.ts b/dist/types/src/index.d.ts index c12623e..33dd77f 100644 --- a/dist/types/src/index.d.ts +++ b/dist/types/src/index.d.ts @@ -1,6 +1,7 @@ import { config } from './constants/config'; import { getNetworkEnvKey, getNetworkKey, networkTypes, type ConceroNetwork, type NetworkType } from './networks'; +import { genericDeploy } from './deploy/GenericDeploy'; import { TokenSender } from './tokens/TokenSender'; import { hardhatDeployWrapper } from './deploy/hardhatDeployWrapper'; -export { ConceroNetwork, config, getNetworkEnvKey, getNetworkKey, networkTypes, TokenSender, hardhatDeployWrapper, }; +export { ConceroNetwork, config, getNetworkEnvKey, getNetworkKey, networkTypes, TokenSender, hardhatDeployWrapper, genericDeploy, }; export type { NetworkType }; diff --git a/dist/types/src/utils/createViemChain.d.ts b/dist/types/src/utils/createViemChain.d.ts new file mode 100644 index 0000000..6bdf4bf --- /dev/null +++ b/dist/types/src/utils/createViemChain.d.ts @@ -0,0 +1,3 @@ +import { defineChain } from 'viem'; +import { ChainDefinition } from '../../types/ConceroNetwork'; +export declare function createViemChain(chainDefinition: ChainDefinition): ReturnType; diff --git a/dist/types/src/utils/getEnvVar.d.ts b/dist/types/src/utils/getEnvVar.d.ts new file mode 100644 index 0000000..82fb9b7 --- /dev/null +++ b/dist/types/src/utils/getEnvVar.d.ts @@ -0,0 +1,2 @@ +declare function getEnvVar(key: string): string | undefined; +export { getEnvVar }; diff --git a/dist/types/src/utils/getTrezorDeployEnabled.d.ts b/dist/types/src/utils/getTrezorDeployEnabled.d.ts new file mode 100644 index 0000000..babec9a --- /dev/null +++ b/dist/types/src/utils/getTrezorDeployEnabled.d.ts @@ -0,0 +1 @@ +export declare const getTrezorDeployEnabled: () => boolean; diff --git a/dist/types/src/utils/getWallet.d.ts b/dist/types/src/utils/getWallet.d.ts new file mode 100644 index 0000000..47a83e6 --- /dev/null +++ b/dist/types/src/utils/getWallet.d.ts @@ -0,0 +1,2 @@ +import { NetworkType } from '../networks/types'; +export declare function getWallet(chainType: NetworkType, accountType: 'proxyDeployer' | 'deployer' | 'operator' | 'priceFeedProxyDeployer', walletType: 'privateKey' | 'address'): string | undefined; diff --git a/dist/types/src/utils/index.d.ts b/dist/types/src/utils/index.d.ts new file mode 100644 index 0000000..1522c74 --- /dev/null +++ b/dist/types/src/utils/index.d.ts @@ -0,0 +1,7 @@ +import { createViemChain } from './createViemChain'; +import { getEnvVar } from './getEnvVar'; +import { getTrezorDeployEnabled } from './getTrezorDeployEnabled'; +import { getWallet } from './getWallet'; +import { err, log, warn } from './log'; +import { updateEnvAddress } from './updateEnvVariable'; +export { createViemChain, err, getEnvVar, getTrezorDeployEnabled, getWallet, log, warn, updateEnvAddress, }; diff --git a/dist/types/src/utils/log.d.ts b/dist/types/src/utils/log.d.ts new file mode 100644 index 0000000..00fcabc --- /dev/null +++ b/dist/types/src/utils/log.d.ts @@ -0,0 +1,4 @@ +export declare function log(message: any, functionName: string, networkName?: string): void; +export declare function warn(message: any, functionName: string): void; +export declare function err(message: any, functionName: string, networkName?: string): void; +export default log; diff --git a/dist/types/src/utils/updateEnvVariable.d.ts b/dist/types/src/utils/updateEnvVariable.d.ts new file mode 100644 index 0000000..d287693 --- /dev/null +++ b/dist/types/src/utils/updateEnvVariable.d.ts @@ -0,0 +1,6 @@ +import { ConceroNetworkNames } from "../../types/ConceroNetwork"; +import { EnvFileName, EnvPrefixes } from "../../types/deploymentVariables"; +export type ContractPrefix = keyof EnvPrefixes; +export declare function updateEnvVariable(key: string, newValue: string, envFileName: EnvFileName): void; +export declare function updateEnvAddress(prefix: ContractPrefix, newValue: string, envFileName: EnvFileName, networkPostfix?: ConceroNetworkNames | string): void; +export default updateEnvVariable; diff --git a/dist/types/types/ConceroNetwork.d.ts b/dist/types/types/ConceroNetwork.d.ts new file mode 100644 index 0000000..e947f3b --- /dev/null +++ b/dist/types/types/ConceroNetwork.d.ts @@ -0,0 +1,41 @@ +import { Chain } from 'viem'; +export type NetworkType = 'mainnet' | 'testnet' | 'localhost'; +export type ConceroNetworkNames = string; +export type ConceroNetwork = { + chainId: number; + name: string; + type: NetworkType; + chainSelector: bigint; + accounts?: string[]; + viemChain: Chain; + confirmations: number; + url: string; + rpcUrls: string[]; + saveDeployments?: boolean; + trezorDerivationPaths?: number[][]; + trezorInsecureDerivation?: boolean; +}; +export interface ChainDefinition { + id: number; + name: string; + rpcUrls: string[]; + blockExplorer?: { + name: string; + url: string; + }; + isTestnet: boolean; +} +export type ConceroLocalNetwork = ConceroNetwork & { + saveDeployments?: boolean; + forking?: { + url: string; + enabled: boolean; + blockNumber?: number; + }; +}; +export type ConceroHardhatNetwork = Omit & { + accounts: Array<{ + privateKey: string; + balance: string; + }>; +}; diff --git a/dist/types/types/deploymentVariables.d.ts b/dist/types/types/deploymentVariables.d.ts new file mode 100644 index 0000000..33b3004 --- /dev/null +++ b/dist/types/types/deploymentVariables.d.ts @@ -0,0 +1,21 @@ +export type EnvPrefixes = { + router: string; + routerProxy: string; + routerProxyAdmin: string; + verifier: string; + verifierProxy: string; + verifierProxyAdmin: string; + priceFeed: string; + priceFeedProxy: string; + priceFeedProxyAdmin: string; + lpToken: string; + pause: string; + creValidatorLib: string; + creValidatorLibProxy: string; + creValidatorLibProxyAdmin: string; + relayerLib: string; + relayerLibProxy: string; + relayerLibProxyAdmin: string; +}; +export type ContractPrefix = keyof EnvPrefixes; +export type EnvFileName = "deployments.mainnet" | "deployments.testnet" | "deployments.localhost"; diff --git a/hardhat.config.ts b/hardhat.config.ts index 9f129ca..8fee9bd 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -1,5 +1,4 @@ import '@chainlink/hardhat-chainlink'; -import '@nomicfoundation/hardhat-ethers'; import '@typechain/hardhat'; import 'hardhat-deploy'; import 'hardhat-deploy-ethers'; diff --git a/package.json b/package.json index 7310e20..c36ed18 100644 --- a/package.json +++ b/package.json @@ -38,12 +38,17 @@ "check-updates": "npx npm-check-updates" }, "peerDependencies": { + "ethers": "^6.14.0", "hardhat": "^2.17.0", "viem": "^2.24.0" }, + "peerDependenciesMeta": { + "@tenderly/hardhat-tenderly": { + "optional": true + } + }, "devDependencies": { "@chainlink/hardhat-chainlink": "0.0.4", - "@nomicfoundation/hardhat-toolbox": "^6.1.0", "@typechain/hardhat": "9.1.0", "@types/node": "*", "@types/prettier": "3.0.0", @@ -64,5 +69,7 @@ "typescript": "5.8.3", "viem": "2.24.2" }, - "dependencies": {} + "dependencies": { + "@concero/concero-networks": "https://github.com/concero/concero-networks" + } } diff --git a/src/constants/conceroNetworks.ts b/src/constants/conceroNetworks.ts new file mode 100644 index 0000000..26c202a --- /dev/null +++ b/src/constants/conceroNetworks.ts @@ -0,0 +1,108 @@ +import mainnetChains from '@concero/concero-networks/output/chains.mainnet.json'; +import testnetChains from '@concero/concero-networks/output/chains.testnet.json'; +import type { Chain } from '@concero/concero-networks/src/types'; +import { type NetworkType } from '../../types/ConceroNetwork'; + +import { + ChainDefinition, + ConceroNetwork, +} from '../../types/ConceroNetwork'; +import { getWallet } from '../utils'; +import { createViemChain } from '../utils/createViemChain'; +import { getTrezorDeployEnabled } from '../utils/getTrezorDeployEnabled'; + +const mainnetProxyDeployerPK = getWallet( + 'mainnet', + 'proxyDeployer', + 'privateKey' +); +const testnetProxyDeployerPK = getWallet( + 'testnet', + 'proxyDeployer', + 'privateKey' +); + +const mainnetDeployerPK = getWallet('mainnet', 'deployer', 'privateKey'); +const testnetDeployerPK = getWallet('testnet', 'deployer', 'privateKey'); + +const trezorDeployEnabled = getTrezorDeployEnabled(); + +const testnetAccounts = [testnetDeployerPK, testnetProxyDeployerPK]; + +const networkTypes: Record = { + mainnet: 'mainnet', + testnet: 'testnet', + localhost: 'localhost', +}; + +export type ConceroMainnetNetworkNames = + (typeof mainnetChains)[keyof typeof mainnetChains]['name']; +export type ConceroTestnetNetworkNames = + (typeof testnetChains)[keyof typeof testnetChains]['name']; + +function createExtendedNetworks>( + chains: T, + networkType: NetworkType, + accounts: (string | undefined)[] +): Record { + const validAccounts = accounts.filter((acc): acc is string => !!acc); + + return Object.fromEntries( + Object.values(chains).map(chain => { + const chainDefinition: ChainDefinition = { + id: parseInt(chain.id), + name: chain.name, + rpcUrls: chain.rpcUrls, + isTestnet: chain.isTestnet ?? false, + ...(chain.blockExplorers?.[0] && { + blockExplorer: { + name: chain.blockExplorers[0].name, + url: chain.blockExplorers[0].url, + }, + }), + }; + + const viemChain = createViemChain(chainDefinition); + + return [ + chain.name, + { + name: chain.name, + chainId: parseInt(chain.id), + type: networkType, + url: chain.rpcUrls[0] || '', + rpcUrls: chain.rpcUrls, + saveDeployments: false, + ...(!trezorDeployEnabled && { accounts: validAccounts }), + chainSelector: BigInt(chain.chainSelector), + confirmations: 1, + viemChain, + ...(trezorDeployEnabled && { + trezorDerivationPaths: [ + [44, 60, 0, 0, 0], + [44, 60, 0, 0, 1], + ], + trezorInsecureDerivation: true, + }), + }, + ]; + }) + ) as Record; +} + +export const testnetNetworks = createExtendedNetworks( + testnetChains as unknown as Record, + networkTypes.testnet, + testnetAccounts +); + +export const mainnetNetworks = createExtendedNetworks( + mainnetChains as unknown as Record, + networkTypes.mainnet, + [mainnetDeployerPK, mainnetProxyDeployerPK] +); + +export const conceroNetworks: Record = { + ...testnetNetworks, + ...mainnetNetworks, +}; diff --git a/src/constants/deploymentVariables.ts b/src/constants/deploymentVariables.ts new file mode 100644 index 0000000..b9767af --- /dev/null +++ b/src/constants/deploymentVariables.ts @@ -0,0 +1,50 @@ +import type { WaitForTransactionReceiptParameters } from "viem/actions/public/waitForTransactionReceipt"; + +import { EnvPrefixes } from "../../types/deploymentVariables"; +import { ConceroNetwork } from "../../types/ConceroNetwork"; + +enum ProxyEnum { + routerProxy = "routerProxy", + verifierProxy = "verifierProxy", + priceFeedProxy = "priceFeedProxy", + creValidatorLibProxy = "creValidatorLibProxy", + relayerLibProxy = "relayerLibProxy", +} + +function getViemReceiptConfig(chain: ConceroNetwork): Partial { + return { + timeout: 0, + confirmations: chain.confirmations, + }; +} + +const envPrefixes: EnvPrefixes = { + router: "CONCERO_ROUTER", + routerProxy: "CONCERO_ROUTER_PROXY", + routerProxyAdmin: "CONCERO_ROUTER_PROXY_ADMIN", + verifier: "CONCERO_VERIFIER", + verifierProxy: "CONCERO_VERIFIER_PROXY", + verifierProxyAdmin: "CONCERO_VERIFIER_PROXY_ADMIN", + priceFeed: "CONCERO_PRICE_FEED", + priceFeedProxy: "CONCERO_PRICE_FEED_PROXY", + priceFeedProxyAdmin: "CONCERO_PRICE_FEED_PROXY_ADMIN", + lpToken: "LPTOKEN", + pause: "CONCERO_PAUSE", + creValidatorLibProxy: "CONCERO_CRE_VALIDATOR_LIB_PROXY", + creValidatorLibProxyAdmin: "CONCERO_CRE_VALIDATOR_LIB_PROXY_ADMIN", + creValidatorLib: "CONCERO_CRE_VALIDATOR_LIB", + relayerLib: "CONCERO_RELAYER_LIB", + relayerLibProxy: "CONCERO_RELAYER_LIB_PROXY", + relayerLibProxyAdmin: "CONCERO_RELAYER_LIB_PROXY_ADMIN", +}; + +const ADMIN_SLOT = "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; +const ADMIN_ROLE = "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42"; + +export { + ProxyEnum, + envPrefixes, + getViemReceiptConfig, + ADMIN_SLOT, + ADMIN_ROLE, +}; diff --git a/src/deploy/GenericDeploy.ts b/src/deploy/GenericDeploy.ts new file mode 100644 index 0000000..519a71f --- /dev/null +++ b/src/deploy/GenericDeploy.ts @@ -0,0 +1,71 @@ +import { HardhatRuntimeEnvironment } from 'hardhat/types'; + +import { conceroNetworks } from '../constants/conceroNetworks'; +import { ContractPrefix, EnvFileName } from '../../types/deploymentVariables'; +import { getTrezorDeployEnabled, log, updateEnvAddress } from '../utils'; + +export interface ITxParams { + gasLimit: bigint; +} + +export interface IGenericDeployParams { + hre: HardhatRuntimeEnvironment; + contractName: string; + contractPrefix: ContractPrefix; + txParams?: Partial; +} + +export const genericDeploy = async ( + { hre, contractName, contractPrefix, txParams }: IGenericDeployParams, + ...contractConstructorArgs: any[] +) => { + const [deployer] = await hre.ethers.getSigners(); + const chain = conceroNetworks[hre.network.name]; + + log( + `Deploy ${contractName} from address: ${await deployer.getAddress()}`, + 'contract deploy', + chain.name + ); + + const contractFactory = await hre.ethers.getContractFactory(contractName); + + const deployOverrides = txParams?.gasLimit ? { gasLimit: txParams.gasLimit } : {}; + + const deployTx = contractFactory.getDeployTransaction( + ...contractConstructorArgs, + deployOverrides + ); + + const isTrezorDeployEnabled = getTrezorDeployEnabled(); + if (deployTx.data && isTrezorDeployEnabled) { + log( + `${contractName} input data: ${deployTx.data} \n size: ${(deployTx.data.length - 2) / 2}`, + 'bytecode', + chain.name + ); + } + + const contract = await contractFactory.deploy(...contractConstructorArgs, deployOverrides); + await contract.deploymentTransaction()?.wait(); + const deploymentAddress = await contract.getAddress(); + + if (hre.tenderly) { + await hre.tenderly.verify({ name: contractName, address: deploymentAddress }); + } + + log( + `Deployed at: ${deploymentAddress}`, + `deploy ${contractName}`, + chain.name + ); + + updateEnvAddress( + contractPrefix, + deploymentAddress, + `deployments.${chain.type}` as EnvFileName, + chain.name, + ); + + return contract.deploymentTransaction()?.hash; +}; diff --git a/src/index.ts b/src/index.ts index a3d00da..16ff46e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -6,6 +6,7 @@ import { type ConceroNetwork, type NetworkType, } from './networks'; +import { genericDeploy } from './deploy/GenericDeploy'; import { TokenSender } from './tokens/TokenSender'; @@ -19,5 +20,6 @@ export { networkTypes, TokenSender, hardhatDeployWrapper, + genericDeploy, }; export type { NetworkType }; diff --git a/src/networks/types.ts b/src/networks/types.ts index 43c7a99..78c5ea0 100644 --- a/src/networks/types.ts +++ b/src/networks/types.ts @@ -2,10 +2,10 @@ import { Chain } from 'viem'; export type NetworkType = 'mainnet' | 'testnet' | 'localhost'; export type ConceroNetwork = { - name: string; - type: NetworkType; - chainId: number; - chainSelector: number; - confirmations: number; - viemChain: Chain; + name: string; + type: NetworkType; + chainId: number; + chainSelector: number; + confirmations: number; + viemChain: Chain; }; diff --git a/src/utils/createViemChain.ts b/src/utils/createViemChain.ts new file mode 100644 index 0000000..731b87b --- /dev/null +++ b/src/utils/createViemChain.ts @@ -0,0 +1,29 @@ +import { defineChain } from 'viem'; + +import { ChainDefinition } from '../../types/ConceroNetwork'; + +export function createViemChain( + chainDefinition: ChainDefinition +): ReturnType { + return defineChain({ + id: chainDefinition.id, + name: chainDefinition.name, + nativeCurrency: { + decimals: 18, + name: 'eth', + symbol: 'eth', + }, + rpcUrls: { + default: { http: chainDefinition.rpcUrls }, + }, + blockExplorers: chainDefinition.blockExplorer + ? { + default: { + name: chainDefinition.blockExplorer.name, + url: chainDefinition.blockExplorer.url, + }, + } + : undefined, + testnet: chainDefinition.isTestnet, + }); +} diff --git a/src/utils/getEnvVar.ts b/src/utils/getEnvVar.ts new file mode 100644 index 0000000..815c50f --- /dev/null +++ b/src/utils/getEnvVar.ts @@ -0,0 +1,15 @@ +import process from 'process'; + +import { warn } from './log'; + +function getEnvVar(key: string): string | undefined { + const value = process.env[key]; + if (value === undefined || value === '') { + warn(`Missing env variable: ${key}`, 'getEnvVar'); + return undefined; + } + + return value; +} + +export { getEnvVar }; diff --git a/src/utils/getTrezorDeployEnabled.ts b/src/utils/getTrezorDeployEnabled.ts new file mode 100644 index 0000000..9c18b8d --- /dev/null +++ b/src/utils/getTrezorDeployEnabled.ts @@ -0,0 +1,4 @@ +import { getEnvVar } from './getEnvVar'; + +export const getTrezorDeployEnabled = () => + getEnvVar('TREZOR_DEPLOY_ENABLED') === 'true'; diff --git a/src/utils/getWallet.ts b/src/utils/getWallet.ts new file mode 100644 index 0000000..984b9dc --- /dev/null +++ b/src/utils/getWallet.ts @@ -0,0 +1,52 @@ +import { NetworkType } from '../networks/types'; +import { warn } from './log'; + +export function getWallet( + chainType: NetworkType, + accountType: + | 'proxyDeployer' + | 'deployer' + | 'operator' + | 'priceFeedProxyDeployer', + walletType: 'privateKey' | 'address' +) { + let prefix; + let walletKey; + switch (accountType) { + case 'proxyDeployer': + prefix = 'PROXY_DEPLOYER'; + break; + case 'deployer': + prefix = 'DEPLOYER'; + break; + case 'operator': + prefix = 'OPERATOR'; + break; + case 'priceFeedProxyDeployer': + prefix = 'PRICE_FEED_PROXY_DEPLOYER'; + break; + default: + throw new Error(`Unknown account type: ${accountType}`); + } + + switch (walletType) { + case 'privateKey': + walletKey = 'PRIVATE_KEY'; + break; + case 'address': + walletKey = 'ADDRESS'; + break; + default: + throw new Error(`Unknown wallet type: ${walletType}`); + } + + // Determine the environment variable key based on the wallet type + const envKey = `${chainType.toUpperCase()}_${prefix}_${walletKey}`; + const walletValue = process.env[envKey]; + + if (!walletValue) { + warn(`Missing env variable: ${envKey}`, 'getEnvVar'); + } + + return walletValue; +} diff --git a/src/utils/index.ts b/src/utils/index.ts new file mode 100644 index 0000000..fa3c07c --- /dev/null +++ b/src/utils/index.ts @@ -0,0 +1,17 @@ +import { createViemChain } from './createViemChain'; +import { getEnvVar } from './getEnvVar'; +import { getTrezorDeployEnabled } from './getTrezorDeployEnabled'; +import { getWallet } from './getWallet'; +import { err, log, warn } from './log'; +import { updateEnvAddress } from './updateEnvVariable'; + +export { + createViemChain, + err, + getEnvVar, + getTrezorDeployEnabled, + getWallet, + log, + warn, + updateEnvAddress, +}; diff --git a/src/utils/log.ts b/src/utils/log.ts new file mode 100644 index 0000000..fefca6f --- /dev/null +++ b/src/utils/log.ts @@ -0,0 +1,43 @@ +const networkColors: Record = { + ethereum: '\x1b[30m', // grey + arbitrum: '\x1b[34m', // blue + polygon: '\x1b[35m', // magenta + avalanche: '\x1b[31m', // red + base: '\x1b[36m', // cyan + ethereumSepolia: '\x1b[30m', // grey + arbitrumSepolia: '\x1b[34m', // blue + optimismSepolia: '\x1b[31m', // red + polygonAmoy: '\x1b[35m', // magenta + avalancheFuji: '\x1b[31m', // red + baseSepolia: '\x1b[36m', // cyan + hardhat: '\x1b[32m', // green + localhost: '\x1b[32m', // green +}; +const reset = '\x1b[0m'; + +export function log(message: any, functionName: string, networkName?: string) { + const greenFill = '\x1b[32m'; + const network = networkName ? `\x1b[35m[${networkName}]${reset}` : ''; + + console.log(`${network}${greenFill}[${functionName}]${reset}`, message); +} + +export function warn(message: any, functionName: string) { + const yellowFill = '\x1b[33m'; + + console.log(`${yellowFill}[${functionName}]${reset}`, message); +} + +export function err(message: any, functionName: string, networkName?: string) { + const redFill = '\x1b[31m'; + const network = networkName + ? `${networkColors[networkName]}[${networkName}]${reset}` + : ''; + + console.log( + `${network}${redFill}[${functionName}] ERROR:${reset}`, + message + ); +} + +export default log; diff --git a/src/utils/updateEnvVariable.ts b/src/utils/updateEnvVariable.ts new file mode 100644 index 0000000..5538ab6 --- /dev/null +++ b/src/utils/updateEnvVariable.ts @@ -0,0 +1,50 @@ +import { readFileSync, writeFileSync } from "fs"; +import path from "path"; + +import { getNetworkEnvKey } from "../networks/getNetworkEnvKey"; + +import { envPrefixes } from "../constants/deploymentVariables"; +import { ConceroNetworkNames } from "../../types/ConceroNetwork"; +import { EnvFileName, EnvPrefixes } from "../../types/deploymentVariables"; +import log from "./log"; + +export type ContractPrefix = keyof EnvPrefixes; + +export function updateEnvVariable(key: string, newValue: string, envFileName: EnvFileName) { + const filePath = path.join(__dirname, `../.env.${envFileName}`); + if (!filePath) throw new Error(`File not found: ${filePath}`); + + const envContents = readFileSync(filePath, "utf8"); + let lines = envContents.split(/\r?\n/); + + if (!lines.some(line => line.startsWith(`${key}=`))) { + log(`Key ${key} not found in .env file. Adding to ${filePath}`, "updateEnvVariable"); + lines.push(`${key}=${newValue}`); + } + + const newLines = lines.map(line => { + let [currentKey, currentValue] = line.split("="); + if (currentKey === key) { + return `${key}=${newValue}`; + } + return line; + }); + + writeFileSync(filePath, newLines.join("\n")); + process.env[key] = newValue; +} + +export function updateEnvAddress( + prefix: ContractPrefix, + newValue: string, + envFileName: EnvFileName, + networkPostfix?: ConceroNetworkNames | string, +): void { + const searchKey = networkPostfix + ? `${envPrefixes[prefix]}_${getNetworkEnvKey(networkPostfix)}` + : envPrefixes[prefix]; + + updateEnvVariable(searchKey, newValue, envFileName); +} + +export default updateEnvVariable; diff --git a/tsconfig.json b/tsconfig.json index 566e823..1ef8ac1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -11,6 +11,7 @@ "module": "ESNext", "esModuleInterop": true, "skipLibCheck": true, - "forceConsistentCasingInFileNames": true + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true } } diff --git a/types/ConceroNetwork.ts b/types/ConceroNetwork.ts new file mode 100644 index 0000000..966bb34 --- /dev/null +++ b/types/ConceroNetwork.ts @@ -0,0 +1,46 @@ +import { Chain } from 'viem'; + +export type NetworkType = 'mainnet' | 'testnet' | 'localhost'; + +export type ConceroNetworkNames = string; + +export type ConceroNetwork = { + chainId: number; + name: string; + type: NetworkType; + chainSelector: bigint; + accounts?: string[]; + viemChain: Chain; + confirmations: number; + url: string; + rpcUrls: string[]; + saveDeployments?: boolean; + trezorDerivationPaths?: number[][]; + trezorInsecureDerivation?: boolean; +}; + +export interface ChainDefinition { + id: number; + name: string; + rpcUrls: string[]; + blockExplorer?: { + name: string; + url: string; + }; + isTestnet: boolean; +} + +export type ConceroLocalNetwork = ConceroNetwork & { + saveDeployments?: boolean; + forking?: { + url: string; + enabled: boolean; + blockNumber?: number; + }; +}; +export type ConceroHardhatNetwork = Omit & { + accounts: Array<{ + privateKey: string; + balance: string; + }>; +}; diff --git a/types/deploymentVariables.ts b/types/deploymentVariables.ts new file mode 100644 index 0000000..fcf013f --- /dev/null +++ b/types/deploymentVariables.ts @@ -0,0 +1,27 @@ +export type EnvPrefixes = { + router: string; + routerProxy: string; + routerProxyAdmin: string; + verifier: string; + verifierProxy: string; + verifierProxyAdmin: string; + priceFeed: string; + priceFeedProxy: string; + priceFeedProxyAdmin: string; + lpToken: string; + pause: string; + creValidatorLib: string; + creValidatorLibProxy: string; + creValidatorLibProxyAdmin: string; + relayerLib: string; + relayerLibProxy: string; + relayerLibProxyAdmin: string; +}; + +export type ContractPrefix = keyof EnvPrefixes; + +export type EnvFileName = +| "deployments.mainnet" +| "deployments.testnet" +| "deployments.localhost" + diff --git a/types/hardhat.d.ts b/types/hardhat.d.ts new file mode 100644 index 0000000..ea30111 --- /dev/null +++ b/types/hardhat.d.ts @@ -0,0 +1,9 @@ +import 'hardhat/types/runtime'; + +declare module 'hardhat/types/runtime' { + interface HardhatRuntimeEnvironment { + tenderly?: { + verify(params: { name: string; address: string }): Promise; + }; + } +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index b051fa8..155799e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,151 +2,377 @@ # yarn lockfile v1 -"@adraffy/ens-normalize@^1.10.1": +"@adraffy/ens-normalize@1.10.1": + version "1.10.1" + resolved "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz#63430d04bd8c5e74f8d7d049338f1cd9d4f02069" + integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== + +"@adraffy/ens-normalize@^1.10.1", "@adraffy/ens-normalize@^1.11.0": version "1.11.1" - resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.11.1.tgz#6c2d657d4b2dfb37f8ea811dcb3e60843d4ac24a" + resolved "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.11.1.tgz#6c2d657d4b2dfb37f8ea811dcb3e60843d4ac24a" integrity sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ== +"@babel/runtime@7.27.0": + version "7.27.0" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz#fbee7cf97c709518ecc1f590984481d5460d4762" + integrity sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw== + dependencies: + regenerator-runtime "^0.14.0" + +"@chainlink/contracts@0.8.0": + version "0.8.0" + resolved "https://registry.npmjs.org/@chainlink/contracts/-/contracts-0.8.0.tgz#4050c83c8b1603ffb0fd6ab99f1d9ea9db2c37de" + integrity sha512-nUv1Uxw5Mn92wgLs2bgPYmo8hpdQ3s9jB/lcbdU0LmNOVu0hbfmouVnqwRLa28Ll50q6GczUA+eO0ikNIKLZsA== + dependencies: + "@eth-optimism/contracts" "^0.5.21" + "@openzeppelin/contracts" "~4.3.3" + "@openzeppelin/contracts-upgradeable-4.7.3" "npm:@openzeppelin/contracts-upgradeable@v4.7.3" + "@openzeppelin/contracts-v0.7" "npm:@openzeppelin/contracts@v3.4.2" + +"@chainlink/functions-toolkit@0.2.6": + version "0.2.6" + resolved "https://registry.npmjs.org/@chainlink/functions-toolkit/-/functions-toolkit-0.2.6.tgz#d3e87ef27db231eb537ddcb7e4430897947c8871" + integrity sha512-cXc9cp+1Ns4aH8R8MBva/Rghq5GcIOhEDjmmvQ8P9u+LTj+Kkpqjy43IVPJETCTyIjJpRDuhaEQrAUCChlwoIA== + dependencies: + axios "^1.4.0" + bcrypto "^5.4.0" + cbor "^9.0.1" + eth-crypto "^2.6.0" + ethers "^5.7.2" + ganache "^7.9.1" + uniq "^1.0.1" + +"@chainlink/hardhat-chainlink@0.0.4": + version "0.0.4" + resolved "https://registry.npmjs.org/@chainlink/hardhat-chainlink/-/hardhat-chainlink-0.0.4.tgz#19c951d5c3d589f2bf82663be9777f3e28c38f48" + integrity sha512-fl+cRYm0qTLIMLrc1HzUVetxKF+ndOY8b423aLC2WBE24vwpuuQMejeyT1AvJE8w+9m1coyggA7xypZPHJoPnA== + dependencies: + "@chainlink/contracts" "0.8.0" + "@chainlink/functions-toolkit" "0.2.6" + "@inquirer/confirm" "^2.0.6" + "@inquirer/input" "^1.2.5" + "@inquirer/select" "^1.2.5" + "@nomiclabs/hardhat-ethers" "^2.2.3" + axios "^1.4.0" + chalk "4.1.2" + docker-compose "^0.24.1" + ethers "^5.4.7" + +"@chainsafe/as-sha256@^0.3.1": + version "0.3.1" + resolved "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz#3639df0e1435cab03f4d9870cc3ac079e57a6fc9" + integrity sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg== + +"@chainsafe/persistent-merkle-tree@^0.4.2": + version "0.4.2" + resolved "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz#4c9ee80cc57cd3be7208d98c40014ad38f36f7ff" + integrity sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + +"@chainsafe/persistent-merkle-tree@^0.5.0": + version "0.5.0" + resolved "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz#2b4a62c9489a5739dedd197250d8d2f5427e9f63" + integrity sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + +"@chainsafe/ssz@^0.10.0": + version "0.10.2" + resolved "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.10.2.tgz#c782929e1bb25fec66ba72e75934b31fd087579e" + integrity sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + "@chainsafe/persistent-merkle-tree" "^0.5.0" + +"@chainsafe/ssz@^0.9.2": + version "0.9.4" + resolved "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.9.4.tgz#696a8db46d6975b600f8309ad3a12f7c0e310497" + integrity sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + "@chainsafe/persistent-merkle-tree" "^0.4.2" + case "^1.6.3" + +"@concero/concero-networks@https://github.com/concero/concero-networks": + version "1.0.0" + resolved "https://github.com/concero/concero-networks#206d1543d3cc5e8007c68a3f8f16616eca5508da" + dependencies: + axios "^1.13.2" + esbuild "^0.27.0" + typescript "^5.9.3" + viem "^2.40.3" + "@esbuild/aix-ppc64@0.25.2": version "0.25.2" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz#b87036f644f572efb2b3c75746c97d1d2d87ace8" + resolved "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz#b87036f644f572efb2b3c75746c97d1d2d87ace8" integrity sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag== +"@esbuild/aix-ppc64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz#521cbd968dcf362094034947f76fa1b18d2d403c" + integrity sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw== + "@esbuild/android-arm64@0.25.2": version "0.25.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz#5ca7dc20a18f18960ad8d5e6ef5cf7b0a256e196" + resolved "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz#5ca7dc20a18f18960ad8d5e6ef5cf7b0a256e196" integrity sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w== +"@esbuild/android-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz#61ea550962d8aa12a9b33194394e007657a6df57" + integrity sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA== + "@esbuild/android-arm@0.25.2": version "0.25.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.2.tgz#3c49f607b7082cde70c6ce0c011c362c57a194ee" + resolved "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.2.tgz#3c49f607b7082cde70c6ce0c011c362c57a194ee" integrity sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA== +"@esbuild/android-arm@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz#554887821e009dd6d853f972fde6c5143f1de142" + integrity sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA== + "@esbuild/android-x64@0.25.2": version "0.25.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.2.tgz#8a00147780016aff59e04f1036e7cb1b683859e2" + resolved "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.2.tgz#8a00147780016aff59e04f1036e7cb1b683859e2" integrity sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg== +"@esbuild/android-x64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz#a7ce9d0721825fc578f9292a76d9e53334480ba2" + integrity sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A== + "@esbuild/darwin-arm64@0.25.2": version "0.25.2" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz#486efe7599a8d90a27780f2bb0318d9a85c6c423" + resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz#486efe7599a8d90a27780f2bb0318d9a85c6c423" integrity sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA== +"@esbuild/darwin-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz#2cb7659bd5d109803c593cfc414450d5430c8256" + integrity sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg== + "@esbuild/darwin-x64@0.25.2": version "0.25.2" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz#95ee222aacf668c7a4f3d7ee87b3240a51baf374" + resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz#95ee222aacf668c7a4f3d7ee87b3240a51baf374" integrity sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA== +"@esbuild/darwin-x64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz#e741fa6b1abb0cd0364126ba34ca17fd5e7bf509" + integrity sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA== + "@esbuild/freebsd-arm64@0.25.2": version "0.25.2" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz#67efceda8554b6fc6a43476feba068fb37fa2ef6" + resolved "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz#67efceda8554b6fc6a43476feba068fb37fa2ef6" integrity sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w== +"@esbuild/freebsd-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz#2b64e7116865ca172d4ce034114c21f3c93e397c" + integrity sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g== + "@esbuild/freebsd-x64@0.25.2": version "0.25.2" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz#88a9d7ecdd3adadbfe5227c2122d24816959b809" + resolved "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz#88a9d7ecdd3adadbfe5227c2122d24816959b809" integrity sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ== +"@esbuild/freebsd-x64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz#e5252551e66f499e4934efb611812f3820e990bb" + integrity sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA== + "@esbuild/linux-arm64@0.25.2": version "0.25.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz#87be1099b2bbe61282333b084737d46bc8308058" + resolved "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz#87be1099b2bbe61282333b084737d46bc8308058" integrity sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g== +"@esbuild/linux-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz#dc4acf235531cd6984f5d6c3b13dbfb7ddb303cb" + integrity sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw== + "@esbuild/linux-arm@0.25.2": version "0.25.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz#72a285b0fe64496e191fcad222185d7bf9f816f6" + resolved "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz#72a285b0fe64496e191fcad222185d7bf9f816f6" integrity sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g== +"@esbuild/linux-arm@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz#56a900e39240d7d5d1d273bc053daa295c92e322" + integrity sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw== + "@esbuild/linux-ia32@0.25.2": version "0.25.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz#337a87a4c4dd48a832baed5cbb022be20809d737" + resolved "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz#337a87a4c4dd48a832baed5cbb022be20809d737" integrity sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ== +"@esbuild/linux-ia32@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz#d4a36d473360f6870efcd19d52bbfff59a2ed1cc" + integrity sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w== + "@esbuild/linux-loong64@0.25.2": version "0.25.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz#1b81aa77103d6b8a8cfa7c094ed3d25c7579ba2a" + resolved "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz#1b81aa77103d6b8a8cfa7c094ed3d25c7579ba2a" integrity sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w== +"@esbuild/linux-loong64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz#fcf0ab8c3eaaf45891d0195d4961cb18b579716a" + integrity sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg== + "@esbuild/linux-mips64el@0.25.2": version "0.25.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz#afbe380b6992e7459bf7c2c3b9556633b2e47f30" + resolved "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz#afbe380b6992e7459bf7c2c3b9556633b2e47f30" integrity sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q== +"@esbuild/linux-mips64el@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz#598b67d34048bb7ee1901cb12e2a0a434c381c10" + integrity sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw== + "@esbuild/linux-ppc64@0.25.2": version "0.25.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz#6bf8695cab8a2b135cca1aa555226dc932d52067" + resolved "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz#6bf8695cab8a2b135cca1aa555226dc932d52067" integrity sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g== +"@esbuild/linux-ppc64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz#3846c5df6b2016dab9bc95dde26c40f11e43b4c0" + integrity sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ== + "@esbuild/linux-riscv64@0.25.2": version "0.25.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz#43c2d67a1a39199fb06ba978aebb44992d7becc3" + resolved "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz#43c2d67a1a39199fb06ba978aebb44992d7becc3" integrity sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw== +"@esbuild/linux-riscv64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz#173d4475b37c8d2c3e1707e068c174bb3f53d07d" + integrity sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA== + "@esbuild/linux-s390x@0.25.2": version "0.25.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz#419e25737ec815c6dce2cd20d026e347cbb7a602" + resolved "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz#419e25737ec815c6dce2cd20d026e347cbb7a602" integrity sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q== +"@esbuild/linux-s390x@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz#f7a4790105edcab8a5a31df26fbfac1aa3dacfab" + integrity sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w== + "@esbuild/linux-x64@0.25.2": version "0.25.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz#22451f6edbba84abe754a8cbd8528ff6e28d9bcb" + resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz#22451f6edbba84abe754a8cbd8528ff6e28d9bcb" integrity sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg== +"@esbuild/linux-x64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz#2ecc1284b1904aeb41e54c9ddc7fcd349b18f650" + integrity sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA== + "@esbuild/netbsd-arm64@0.25.2": version "0.25.2" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz#744affd3b8d8236b08c5210d828b0698a62c58ac" + resolved "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz#744affd3b8d8236b08c5210d828b0698a62c58ac" integrity sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw== +"@esbuild/netbsd-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz#e2863c2cd1501845995cb11adf26f7fe4be527b0" + integrity sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw== + "@esbuild/netbsd-x64@0.25.2": version "0.25.2" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz#dbbe7521fd6d7352f34328d676af923fc0f8a78f" + resolved "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz#dbbe7521fd6d7352f34328d676af923fc0f8a78f" integrity sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg== +"@esbuild/netbsd-x64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz#93f7609e2885d1c0b5a1417885fba8d1fcc41272" + integrity sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA== + "@esbuild/openbsd-arm64@0.25.2": version "0.25.2" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz#f9caf987e3e0570500832b487ce3039ca648ce9f" + resolved "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz#f9caf987e3e0570500832b487ce3039ca648ce9f" integrity sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg== +"@esbuild/openbsd-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz#a1985604a203cdc325fd47542e106fafd698f02e" + integrity sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA== + "@esbuild/openbsd-x64@0.25.2": version "0.25.2" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz#d2bb6a0f8ffea7b394bb43dfccbb07cabd89f768" + resolved "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz#d2bb6a0f8ffea7b394bb43dfccbb07cabd89f768" integrity sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw== +"@esbuild/openbsd-x64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz#8209e46c42f1ffbe6e4ef77a32e1f47d404ad42a" + integrity sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg== + +"@esbuild/openharmony-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz#8fade4441893d9cc44cbd7dcf3776f508ab6fb2f" + integrity sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag== + "@esbuild/sunos-x64@0.25.2": version "0.25.2" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz#49b437ed63fe333b92137b7a0c65a65852031afb" + resolved "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz#49b437ed63fe333b92137b7a0c65a65852031afb" integrity sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA== +"@esbuild/sunos-x64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz#980d4b9703a16f0f07016632424fc6d9a789dfc2" + integrity sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg== + "@esbuild/win32-arm64@0.25.2": version "0.25.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz#081424168463c7d6c7fb78f631aede0c104373cf" + resolved "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz#081424168463c7d6c7fb78f631aede0c104373cf" integrity sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q== +"@esbuild/win32-arm64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz#1c09a3633c949ead3d808ba37276883e71f6111a" + integrity sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg== + "@esbuild/win32-ia32@0.25.2": version "0.25.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz#3f9e87143ddd003133d21384944a6c6cadf9693f" + resolved "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz#3f9e87143ddd003133d21384944a6c6cadf9693f" integrity sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg== +"@esbuild/win32-ia32@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz#1b1e3a63ad4bef82200fef4e369e0fff7009eee5" + integrity sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ== + "@esbuild/win32-x64@0.25.2": version "0.25.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz#839f72c2decd378f86b8f525e1979a97b920c67d" + resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz#839f72c2decd378f86b8f525e1979a97b920c67d" integrity sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA== +"@esbuild/win32-x64@0.27.2": + version "0.27.2" + resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz#9e585ab6086bef994c6e8a5b3a0481219ada862b" + integrity sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ== + "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": - version "4.9.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz#7308df158e064f0dd8b8fdb58aa14fa2a7f913b3" - integrity sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g== + version "4.9.1" + resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz#4e90af67bc51ddee6cdef5284edf572ec376b595" + integrity sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ== dependencies: eslint-visitor-keys "^3.4.3" "@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.12.1": - version "4.12.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" - integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== + version "4.12.2" + resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b" + integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew== "@eslint/config-array@^0.20.0": version "0.20.1" - resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.20.1.tgz#454f89be82b0e5b1ae872c154c7e2f3dd42c3979" + resolved "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.1.tgz#454f89be82b0e5b1ae872c154c7e2f3dd42c3979" integrity sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw== dependencies: "@eslint/object-schema" "^2.1.6" @@ -155,27 +381,27 @@ "@eslint/config-helpers@^0.2.0": version "0.2.3" - resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.2.3.tgz#39d6da64ed05d7662659aa7035b54cd55a9f3672" + resolved "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.3.tgz#39d6da64ed05d7662659aa7035b54cd55a9f3672" integrity sha512-u180qk2Um1le4yf0ruXH3PYFeEZeYC3p/4wCTKrr2U1CmGdzGi3KtY0nuPDH48UJxlKCC5RDzbcbh4X0XlqgHg== "@eslint/core@^0.12.0": version "0.12.0" - resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.12.0.tgz#5f960c3d57728be9f6c65bd84aa6aa613078798e" + resolved "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz#5f960c3d57728be9f6c65bd84aa6aa613078798e" integrity sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg== dependencies: "@types/json-schema" "^7.0.15" "@eslint/core@^0.13.0": version "0.13.0" - resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.13.0.tgz#bf02f209846d3bf996f9e8009db62df2739b458c" + resolved "https://registry.npmjs.org/@eslint/core/-/core-0.13.0.tgz#bf02f209846d3bf996f9e8009db62df2739b458c" integrity sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw== dependencies: "@types/json-schema" "^7.0.15" "@eslint/eslintrc@^3.3.1": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.1.tgz#e55f7f1dd400600dd066dbba349c4c0bac916964" - integrity sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ== + version "3.3.3" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz#26393a0806501b5e2b6a43aa588a4d8df67880ac" + integrity sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -183,36 +409,772 @@ globals "^14.0.0" ignore "^5.2.0" import-fresh "^3.2.1" - js-yaml "^4.1.0" + js-yaml "^4.1.1" minimatch "^3.1.2" strip-json-comments "^3.1.1" "@eslint/js@9.24.0": version "9.24.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.24.0.tgz#685277980bb7bf84ecc8e4e133ccdda7545a691e" + resolved "https://registry.npmjs.org/@eslint/js/-/js-9.24.0.tgz#685277980bb7bf84ecc8e4e133ccdda7545a691e" integrity sha512-uIY/y3z0uvOGX8cp1C2fiC4+ZmBhp6yZWkojtHL1YEMnRt1Y63HB9TM17proGEmeG7HeUY+UP36F0aknKYTpYA== "@eslint/object-schema@^2.1.6": - version "2.1.6" - resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.6.tgz#58369ab5b5b3ca117880c0f6c0b0f32f6950f24f" - integrity sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA== + version "2.1.7" + resolved "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz#6e2126a1347e86a4dedf8706ec67ff8e107ebbad" + integrity sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA== "@eslint/plugin-kit@^0.2.7": version "0.2.8" - resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz#47488d8f8171b5d4613e833313f3ce708e3525f8" + resolved "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz#47488d8f8171b5d4613e833313f3ce708e3525f8" integrity sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA== dependencies: "@eslint/core" "^0.13.0" levn "^0.4.1" +"@eth-optimism/contracts@^0.5.21": + version "0.5.40" + resolved "https://registry.npmjs.org/@eth-optimism/contracts/-/contracts-0.5.40.tgz#d13a04a15ea947a69055e6fc74d87e215d4c936a" + integrity sha512-MrzV0nvsymfO/fursTB7m/KunkPsCndltVgfdHaT1Aj5Vi6R/doKIGGkOofHX+8B6VMZpuZosKCMQ5lQuqjt8w== + dependencies: + "@eth-optimism/core-utils" "0.12.0" + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + +"@eth-optimism/core-utils@0.12.0": + version "0.12.0" + resolved "https://registry.npmjs.org/@eth-optimism/core-utils/-/core-utils-0.12.0.tgz#6337e4599a34de23f8eceb20378de2a2de82b0ea" + integrity sha512-qW+7LZYCz7i8dRa7SRlUKIo1VBU8lvN0HeXCxJR+z+xtMzMQpPds20XJNCMclszxYQHkXY00fOT6GvFw9ZL6nw== + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/contracts" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/providers" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + bufio "^1.0.7" + chai "^4.3.4" + +"@ethereumjs/common@^2.6.4": + version "2.6.5" + resolved "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz#0a75a22a046272579d91919cb12d84f2756e8d30" + integrity sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA== + dependencies: + crc-32 "^1.2.0" + ethereumjs-util "^7.1.5" + +"@ethereumjs/tx@3.5.2": + version "3.5.2" + resolved "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz#197b9b6299582ad84f9527ca961466fce2296c1c" + integrity sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw== + dependencies: + "@ethereumjs/common" "^2.6.4" + ethereumjs-util "^7.1.5" + +"@ethersproject/abi@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" + integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/abi@5.8.0", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.7.0", "@ethersproject/abi@^5.8.0": + version "5.8.0" + resolved "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz#e79bb51940ac35fe6f3262d7fe2cdb25ad5f07d9" + integrity sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q== + dependencies: + "@ethersproject/address" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/hash" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + +"@ethersproject/abstract-provider@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" + integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + +"@ethersproject/abstract-provider@5.8.0", "@ethersproject/abstract-provider@^5.7.0", "@ethersproject/abstract-provider@^5.8.0": + version "5.8.0" + resolved "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz#7581f9be601afa1d02b95d26b9d9840926a35b0c" + integrity sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg== + dependencies: + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/networks" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" + "@ethersproject/web" "^5.8.0" + +"@ethersproject/abstract-signer@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" + integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/abstract-signer@5.8.0", "@ethersproject/abstract-signer@^5.7.0", "@ethersproject/abstract-signer@^5.8.0": + version "5.8.0" + resolved "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz#8d7417e95e4094c1797a9762e6789c7356db0754" + integrity sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA== + dependencies: + "@ethersproject/abstract-provider" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + +"@ethersproject/address@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" + integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + +"@ethersproject/address@5.8.0", "@ethersproject/address@^5.7.0", "@ethersproject/address@^5.8.0": + version "5.8.0" + resolved "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz#3007a2c352eee566ad745dca1dbbebdb50a6a983" + integrity sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA== + dependencies: + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/rlp" "^5.8.0" + +"@ethersproject/base64@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" + integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + +"@ethersproject/base64@5.8.0", "@ethersproject/base64@^5.7.0", "@ethersproject/base64@^5.8.0": + version "5.8.0" + resolved "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz#61c669c648f6e6aad002c228465d52ac93ee83eb" + integrity sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ== + dependencies: + "@ethersproject/bytes" "^5.8.0" + +"@ethersproject/basex@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" + integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/basex@5.8.0", "@ethersproject/basex@^5.7.0", "@ethersproject/basex@^5.8.0": + version "5.8.0" + resolved "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.8.0.tgz#1d279a90c4be84d1c1139114a1f844869e57d03a" + integrity sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + +"@ethersproject/bignumber@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" + integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + bn.js "^5.2.1" + +"@ethersproject/bignumber@5.8.0", "@ethersproject/bignumber@^5.7.0", "@ethersproject/bignumber@^5.8.0": + version "5.8.0" + resolved "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz#c381d178f9eeb370923d389284efa19f69efa5d7" + integrity sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + bn.js "^5.2.1" + +"@ethersproject/bytes@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" + integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/bytes@5.8.0", "@ethersproject/bytes@^5.7.0", "@ethersproject/bytes@^5.8.0": + version "5.8.0" + resolved "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz#9074820e1cac7507a34372cadeb035461463be34" + integrity sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A== + dependencies: + "@ethersproject/logger" "^5.8.0" + +"@ethersproject/constants@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" + integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + +"@ethersproject/constants@5.8.0", "@ethersproject/constants@^5.7.0", "@ethersproject/constants@^5.8.0": + version "5.8.0" + resolved "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz#12f31c2f4317b113a4c19de94e50933648c90704" + integrity sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg== + dependencies: + "@ethersproject/bignumber" "^5.8.0" + +"@ethersproject/contracts@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" + integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== + dependencies: + "@ethersproject/abi" "^5.7.0" + "@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/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + +"@ethersproject/contracts@5.8.0", "@ethersproject/contracts@^5.7.0": + version "5.8.0" + resolved "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz#243a38a2e4aa3e757215ea64e276f8a8c9d8ed73" + integrity sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ== + dependencies: + "@ethersproject/abi" "^5.8.0" + "@ethersproject/abstract-provider" "^5.8.0" + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/address" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" + +"@ethersproject/hash@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" + integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/hash@5.8.0", "@ethersproject/hash@^5.7.0", "@ethersproject/hash@^5.8.0": + version "5.8.0" + resolved "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz#b8893d4629b7f8462a90102572f8cd65a0192b4c" + integrity sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA== + dependencies: + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/address" "^5.8.0" + "@ethersproject/base64" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + +"@ethersproject/hdnode@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" + integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wordlists" "^5.7.0" + +"@ethersproject/hdnode@5.8.0", "@ethersproject/hdnode@^5.7.0", "@ethersproject/hdnode@^5.8.0": + version "5.8.0" + resolved "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz#a51ae2a50bcd48ef6fd108c64cbae5e6ff34a761" + integrity sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA== + dependencies: + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/basex" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/pbkdf2" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/sha2" "^5.8.0" + "@ethersproject/signing-key" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" + "@ethersproject/wordlists" "^5.8.0" + +"@ethersproject/json-wallets@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" + integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hdnode" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + aes-js "3.0.0" + scrypt-js "3.0.1" + +"@ethersproject/json-wallets@5.8.0", "@ethersproject/json-wallets@^5.7.0", "@ethersproject/json-wallets@^5.8.0": + version "5.8.0" + resolved "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz#d18de0a4cf0f185f232eb3c17d5e0744d97eb8c9" + integrity sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w== + dependencies: + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/address" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/hdnode" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/pbkdf2" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/random" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" + aes-js "3.0.0" + scrypt-js "3.0.1" + +"@ethersproject/keccak256@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" + integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + js-sha3 "0.8.0" + +"@ethersproject/keccak256@5.8.0", "@ethersproject/keccak256@^5.7.0", "@ethersproject/keccak256@^5.8.0": + version "5.8.0" + resolved "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz#d2123a379567faf2d75d2aaea074ffd4df349e6a" + integrity sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng== + dependencies: + "@ethersproject/bytes" "^5.8.0" + js-sha3 "0.8.0" + +"@ethersproject/logger@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" + integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== + +"@ethersproject/logger@5.8.0", "@ethersproject/logger@^5.7.0", "@ethersproject/logger@^5.8.0": + version "5.8.0" + resolved "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz#f0232968a4f87d29623a0481690a2732662713d6" + integrity sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA== + +"@ethersproject/networks@5.7.1": + version "5.7.1" + resolved "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" + integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/networks@5.8.0", "@ethersproject/networks@^5.7.0", "@ethersproject/networks@^5.8.0": + version "5.8.0" + resolved "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz#8b4517a3139380cba9fb00b63ffad0a979671fde" + integrity sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg== + dependencies: + "@ethersproject/logger" "^5.8.0" + +"@ethersproject/pbkdf2@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" + integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + +"@ethersproject/pbkdf2@5.8.0", "@ethersproject/pbkdf2@^5.7.0", "@ethersproject/pbkdf2@^5.8.0": + version "5.8.0" + resolved "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz#cd2621130e5dd51f6a0172e63a6e4a0c0a0ec37e" + integrity sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/sha2" "^5.8.0" + +"@ethersproject/properties@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" + integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/properties@5.8.0", "@ethersproject/properties@^5.7.0", "@ethersproject/properties@^5.8.0": + version "5.8.0" + resolved "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz#405a8affb6311a49a91dabd96aeeae24f477020e" + integrity sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw== + dependencies: + "@ethersproject/logger" "^5.8.0" + +"@ethersproject/providers@5.7.2": + version "5.7.2" + resolved "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" + integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + bech32 "1.1.4" + ws "7.4.6" + +"@ethersproject/providers@5.8.0", "@ethersproject/providers@^5.7.0", "@ethersproject/providers@^5.7.1", "@ethersproject/providers@^5.7.2": + version "5.8.0" + resolved "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz#6c2ae354f7f96ee150439f7de06236928bc04cb4" + integrity sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw== + dependencies: + "@ethersproject/abstract-provider" "^5.8.0" + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/address" "^5.8.0" + "@ethersproject/base64" "^5.8.0" + "@ethersproject/basex" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/hash" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/networks" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/random" "^5.8.0" + "@ethersproject/rlp" "^5.8.0" + "@ethersproject/sha2" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" + "@ethersproject/web" "^5.8.0" + bech32 "1.1.4" + ws "8.18.0" + +"@ethersproject/random@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" + integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/random@5.8.0", "@ethersproject/random@^5.7.0", "@ethersproject/random@^5.8.0": + version "5.8.0" + resolved "https://registry.npmjs.org/@ethersproject/random/-/random-5.8.0.tgz#1bced04d49449f37c6437c701735a1a022f0057a" + integrity sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + +"@ethersproject/rlp@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" + integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/rlp@5.8.0", "@ethersproject/rlp@^5.7.0", "@ethersproject/rlp@^5.8.0": + version "5.8.0" + resolved "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz#5a0d49f61bc53e051532a5179472779141451de5" + integrity sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + +"@ethersproject/sha2@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" + integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + hash.js "1.1.7" + +"@ethersproject/sha2@5.8.0", "@ethersproject/sha2@^5.7.0", "@ethersproject/sha2@^5.8.0": + version "5.8.0" + resolved "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.8.0.tgz#8954a613bb78dac9b46829c0a95de561ef74e5e1" + integrity sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + hash.js "1.1.7" + +"@ethersproject/signing-key@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" + integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== + 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" + +"@ethersproject/signing-key@5.8.0", "@ethersproject/signing-key@^5.7.0", "@ethersproject/signing-key@^5.8.0": + version "5.8.0" + resolved "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz#9797e02c717b68239c6349394ea85febf8893119" + integrity sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + bn.js "^5.2.1" + elliptic "6.6.1" + hash.js "1.1.7" + +"@ethersproject/solidity@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" + integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== + 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" + +"@ethersproject/solidity@5.8.0", "@ethersproject/solidity@^5.7.0": + version "5.8.0" + resolved "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.8.0.tgz#429bb9fcf5521307a9448d7358c26b93695379b9" + integrity sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA== + dependencies: + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/sha2" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + +"@ethersproject/strings@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" + integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/strings@5.8.0", "@ethersproject/strings@^5.7.0", "@ethersproject/strings@^5.8.0": + version "5.8.0" + resolved "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz#ad79fafbf0bd272d9765603215ac74fd7953908f" + integrity sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + +"@ethersproject/transactions@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" + integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== + 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" + +"@ethersproject/transactions@5.8.0", "@ethersproject/transactions@^5.7.0", "@ethersproject/transactions@^5.8.0": + version "5.8.0" + resolved "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz#1e518822403abc99def5a043d1c6f6fe0007e46b" + integrity sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg== + dependencies: + "@ethersproject/address" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/rlp" "^5.8.0" + "@ethersproject/signing-key" "^5.8.0" + +"@ethersproject/units@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" + integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/units@5.8.0": + version "5.8.0" + resolved "https://registry.npmjs.org/@ethersproject/units/-/units-5.8.0.tgz#c12f34ba7c3a2de0e9fa0ed0ee32f3e46c5c2c6a" + integrity sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ== + dependencies: + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + +"@ethersproject/wallet@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" + integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== + 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" + +"@ethersproject/wallet@5.8.0", "@ethersproject/wallet@^5.7.0": + version "5.8.0" + resolved "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.8.0.tgz#49c300d10872e6986d953e8310dc33d440da8127" + integrity sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA== + dependencies: + "@ethersproject/abstract-provider" "^5.8.0" + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/address" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/hash" "^5.8.0" + "@ethersproject/hdnode" "^5.8.0" + "@ethersproject/json-wallets" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/random" "^5.8.0" + "@ethersproject/signing-key" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" + "@ethersproject/wordlists" "^5.8.0" + +"@ethersproject/web@5.7.1": + version "5.7.1" + resolved "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" + integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== + 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" + +"@ethersproject/web@5.8.0", "@ethersproject/web@^5.7.0", "@ethersproject/web@^5.8.0": + version "5.8.0" + resolved "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz#3e54badc0013b7a801463a7008a87988efce8a37" + integrity sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw== + dependencies: + "@ethersproject/base64" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + +"@ethersproject/wordlists@5.7.0": + version "5.7.0" + resolved "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" + integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== + 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" + +"@ethersproject/wordlists@5.8.0", "@ethersproject/wordlists@^5.7.0", "@ethersproject/wordlists@^5.8.0": + version "5.8.0" + resolved "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz#7a5654ee8d1bb1f4dbe43f91d217356d650ad821" + integrity sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/hash" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + +"@fastify/busboy@^2.0.0": + version "2.1.1" + resolved "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" + integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== + "@humanfs/core@^0.19.1": version "0.19.1" - resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77" + resolved "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77" integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== "@humanfs/node@^0.16.6": version "0.16.7" - resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.7.tgz#822cb7b3a12c5a240a24f621b5a2413e27a45f26" + resolved "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz#822cb7b3a12c5a240a24f621b5a2413e27a45f26" integrity sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ== dependencies: "@humanfs/core" "^0.19.1" @@ -220,53 +1182,159 @@ "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== "@humanwhocodes/retry@^0.4.0", "@humanwhocodes/retry@^0.4.2": version "0.4.3" - resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.3.tgz#c2b9d2e374ee62c586d3adbea87199b1d7a7a6ba" + resolved "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz#c2b9d2e374ee62c586d3adbea87199b1d7a7a6ba" integrity sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ== +"@inquirer/confirm@^2.0.6": + version "2.0.17" + resolved "https://registry.npmjs.org/@inquirer/confirm/-/confirm-2.0.17.tgz#a45eb1b973c51c993a3c093a0114e960b1cf09a4" + integrity sha512-EqzhGryzmGpy2aJf6LxJVhndxYmFs+m8cxXzf8nejb1DE3sabf6mUgBcp4J0jAUEiAcYzqmkqRr7LPFh/WdnXA== + dependencies: + "@inquirer/core" "^6.0.0" + "@inquirer/type" "^1.1.6" + chalk "^4.1.2" + +"@inquirer/core@^6.0.0": + version "6.0.0" + resolved "https://registry.npmjs.org/@inquirer/core/-/core-6.0.0.tgz#d44ccd8ae09a4879a78f09cca35bf1ab894b95f4" + integrity sha512-fKi63Khkisgda3ohnskNf5uZJj+zXOaBvOllHsOkdsXRA/ubQLJQrZchFFi57NKbZzkTunXiBMdvWOv71alonw== + dependencies: + "@inquirer/type" "^1.1.6" + "@types/mute-stream" "^0.0.4" + "@types/node" "^20.10.7" + "@types/wrap-ansi" "^3.0.0" + ansi-escapes "^4.3.2" + chalk "^4.1.2" + cli-spinners "^2.9.2" + cli-width "^4.1.0" + figures "^3.2.0" + mute-stream "^1.0.0" + run-async "^3.0.0" + signal-exit "^4.1.0" + strip-ansi "^6.0.1" + wrap-ansi "^6.2.0" + +"@inquirer/input@^1.2.5": + version "1.2.16" + resolved "https://registry.npmjs.org/@inquirer/input/-/input-1.2.16.tgz#94d8765a47689e799fd55ed0361dedc8f554341b" + integrity sha512-Ou0LaSWvj1ni+egnyQ+NBtfM1885UwhRCMtsRt2bBO47DoC1dwtCa+ZUNgrxlnCHHF0IXsbQHYtIIjFGAavI4g== + dependencies: + "@inquirer/core" "^6.0.0" + "@inquirer/type" "^1.1.6" + chalk "^4.1.2" + +"@inquirer/select@^1.2.5": + version "1.3.3" + resolved "https://registry.npmjs.org/@inquirer/select/-/select-1.3.3.tgz#7d832ee603c15b706148e47cda29cdf6634cd94b" + integrity sha512-RzlRISXWqIKEf83FDC9ZtJ3JvuK1l7aGpretf41BCWYrvla2wU8W8MTRNMiPrPJ+1SIqrRC1nZdZ60hD9hRXLg== + dependencies: + "@inquirer/core" "^6.0.0" + "@inquirer/type" "^1.1.6" + ansi-escapes "^4.3.2" + chalk "^4.1.2" + figures "^3.2.0" + +"@inquirer/type@^1.1.6": + version "1.5.5" + resolved "https://registry.npmjs.org/@inquirer/type/-/type-1.5.5.tgz#303ea04ce7ad2e585b921b662b3be36ef7b4f09b" + integrity sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA== + dependencies: + mute-stream "^1.0.0" + +"@metamask/eth-sig-util@^4.0.0": + version "4.0.1" + resolved "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" + integrity sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ== + dependencies: + ethereumjs-abi "^0.6.8" + ethereumjs-util "^6.2.1" + ethjs-util "^0.1.6" + tweetnacl "^1.0.3" + tweetnacl-util "^0.15.1" + +"@noble/ciphers@^1.3.0": + version "1.3.0" + resolved "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz#f64b8ff886c240e644e5573c097f86e5b43676dc" + integrity sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw== + +"@noble/curves@1.2.0": + version "1.2.0" + resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" + integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== + dependencies: + "@noble/hashes" "1.3.2" + "@noble/curves@1.8.1": version "1.8.1" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.8.1.tgz#19bc3970e205c99e4bdb1c64a4785706bce497ff" + resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.8.1.tgz#19bc3970e205c99e4bdb1c64a4785706bce497ff" integrity sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ== dependencies: "@noble/hashes" "1.7.1" +"@noble/curves@1.9.1": + version "1.9.1" + resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz#9654a0bc6c13420ae252ddcf975eaf0f58f0a35c" + integrity sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA== + dependencies: + "@noble/hashes" "1.8.0" + "@noble/curves@^1.6.0", "@noble/curves@~1.9.0": version "1.9.7" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.9.7.tgz#79d04b4758a43e4bca2cbdc62e7771352fa6b951" + resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz#79d04b4758a43e4bca2cbdc62e7771352fa6b951" integrity sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw== dependencies: "@noble/hashes" "1.8.0" "@noble/curves@~1.8.1": version "1.8.2" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.8.2.tgz#8f24c037795e22b90ae29e222a856294c1d9ffc7" + resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.8.2.tgz#8f24c037795e22b90ae29e222a856294c1d9ffc7" integrity sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g== dependencies: "@noble/hashes" "1.7.2" +"@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": + version "1.2.0" + resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" + integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== + +"@noble/hashes@1.3.2": + version "1.3.2" + resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" + integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== + "@noble/hashes@1.7.1": version "1.7.1" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.1.tgz#5738f6d765710921e7a751e00c20ae091ed8db0f" + resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.1.tgz#5738f6d765710921e7a751e00c20ae091ed8db0f" integrity sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ== "@noble/hashes@1.7.2", "@noble/hashes@~1.7.1": version "1.7.2" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.2.tgz#d53c65a21658fb02f3303e7ee3ba89d6754c64b4" + resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz#d53c65a21658fb02f3303e7ee3ba89d6754c64b4" integrity sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ== -"@noble/hashes@1.8.0", "@noble/hashes@^1.5.0", "@noble/hashes@~1.8.0": +"@noble/hashes@1.8.0", "@noble/hashes@^1.5.0", "@noble/hashes@^1.8.0", "@noble/hashes@~1.8.0": version "1.8.0" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.8.0.tgz#cee43d801fcef9644b11b8194857695acd5f815a" + resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz#cee43d801fcef9644b11b8194857695acd5f815a" integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== +"@noble/secp256k1@1.7.1": + version "1.7.1" + resolved "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" + integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== + +"@noble/secp256k1@~1.7.0": + version "1.7.2" + resolved "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.2.tgz#c2c3343e2dce80e15a914d7442147507f8a98e7f" + integrity sha512-/qzwYl5eFLH8OWIecQWM31qld2g1NfjgylK+TNhqtaUKP37Nm+Y+z30Fjhw0Ct8p9yCQEm2N3W/AckdIb3SMcQ== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" @@ -274,105 +1342,507 @@ "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3": version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@nomicfoundation/ethereumjs-block@5.0.2": + version "5.0.2" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.2.tgz#13a7968f5964f1697da941281b7f7943b0465d04" + integrity sha512-hSe6CuHI4SsSiWWjHDIzWhSiAVpzMUcDRpWYzN0T9l8/Rz7xNn3elwVOJ/tAyS0LqL6vitUD78Uk7lQDXZun7Q== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-trie" "6.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + ethereum-cryptography "0.1.3" + ethers "^5.7.1" + +"@nomicfoundation/ethereumjs-blockchain@7.0.2": + version "7.0.2" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.2.tgz#45323b673b3d2fab6b5008535340d1b8fea7d446" + integrity sha512-8UUsSXJs+MFfIIAKdh3cG16iNmWzWC/91P40sazNvrqhhdR/RtGDlFk2iFTGbBAZPs2+klZVzhRX8m2wvuvz3w== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.2" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-ethash" "3.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-trie" "6.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + abstract-level "^1.0.3" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + level "^8.0.0" + lru-cache "^5.1.1" + memory-level "^1.0.0" + +"@nomicfoundation/ethereumjs-common@4.0.2": + version "4.0.2" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.2.tgz#a15d1651ca36757588fdaf2a7d381a150662a3c3" + integrity sha512-I2WGP3HMGsOoycSdOTSqIaES0ughQTueOsddJ36aYVpI3SN8YSusgRFLwzDJwRFVIYDKx/iJz0sQ5kBHVgdDwg== + dependencies: + "@nomicfoundation/ethereumjs-util" "9.0.2" + crc-32 "^1.2.0" + +"@nomicfoundation/ethereumjs-ethash@3.0.2": + version "3.0.2" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.2.tgz#da77147f806401ee996bfddfa6487500118addca" + integrity sha512-8PfoOQCcIcO9Pylq0Buijuq/O73tmMVURK0OqdjhwqcGHYC2PwhbajDh7GZ55ekB0Px197ajK3PQhpKoiI/UPg== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + abstract-level "^1.0.3" + bigint-crypto-utils "^3.0.23" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-evm@2.0.2": + version "2.0.2" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.2.tgz#4c2f4b84c056047102a4fa41c127454e3f0cfcf6" + integrity sha512-rBLcUaUfANJxyOx9HIdMX6uXGin6lANCulIm/pjMgRqfiCRMZie3WKYxTSd8ZE/d+qT+zTedBF4+VHTdTSePmQ== + dependencies: + "@ethersproject/providers" "^5.7.1" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + mcl-wasm "^0.7.1" + rustbn.js "~0.2.0" + +"@nomicfoundation/ethereumjs-rlp@5.0.2": + version "5.0.2" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.2.tgz#4fee8dc58a53ac6ae87fb1fca7c15dc06c6b5dea" + integrity sha512-QwmemBc+MMsHJ1P1QvPl8R8p2aPvvVcKBbvHnQOKBpBztEo0omN0eaob6FeZS/e3y9NSe+mfu3nNFBHszqkjTA== + +"@nomicfoundation/ethereumjs-statemanager@2.0.2": + version "2.0.2" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.2.tgz#3ba4253b29b1211cafe4f9265fee5a0d780976e0" + integrity sha512-dlKy5dIXLuDubx8Z74sipciZnJTRSV/uHG48RSijhgm1V7eXYFC567xgKtsKiVZB1ViTP9iFL4B6Je0xD6X2OA== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + ethers "^5.7.1" + js-sdsl "^4.1.4" + +"@nomicfoundation/ethereumjs-trie@6.0.2": + version "6.0.2" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.2.tgz#9a6dbd28482dca1bc162d12b3733acab8cd12835" + integrity sha512-yw8vg9hBeLYk4YNg5MrSJ5H55TLOv2FSWUTROtDtTMMmDGROsAu+0tBjiNGTnKRi400M6cEzoFfa89Fc5k8NTQ== + dependencies: + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + "@types/readable-stream" "^2.3.13" + ethereum-cryptography "0.1.3" + readable-stream "^3.6.0" + +"@nomicfoundation/ethereumjs-tx@5.0.2": + version "5.0.2" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.2.tgz#117813b69c0fdc14dd0446698a64be6df71d7e56" + integrity sha512-T+l4/MmTp7VhJeNloMkM+lPU3YMUaXdcXgTGCf8+ZFvV9NYZTRLFekRwlG6/JMmVfIfbrW+dRRJ9A6H5Q/Z64g== + dependencies: + "@chainsafe/ssz" "^0.9.2" + "@ethersproject/providers" "^5.7.2" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-util@9.0.2": + version "9.0.2" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.2.tgz#16bdc1bb36f333b8a3559bbb4b17dac805ce904d" + integrity sha512-4Wu9D3LykbSBWZo8nJCnzVIYGvGCuyiYLIJa9XXNVt1q1jUzHdB+sJvx95VGCpPkCT+IbLecW6yfzy3E1bQrwQ== + dependencies: + "@chainsafe/ssz" "^0.10.0" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-vm@7.0.2": + version "7.0.2" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.2.tgz#3b0852cb3584df0e18c182d0672a3596c9ca95e6" + integrity sha512-Bj3KZT64j54Tcwr7Qm/0jkeZXJMfdcAtRBedou+Hx0dPOSIgqaIr0vvLwP65TpHbak2DmAq+KJbW2KNtIoFwvA== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.2" + "@nomicfoundation/ethereumjs-blockchain" "7.0.2" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-evm" "2.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-statemanager" "2.0.2" + "@nomicfoundation/ethereumjs-trie" "6.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + mcl-wasm "^0.7.1" + rustbn.js "~0.2.0" + +"@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.2": + version "0.1.2" + resolved "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz#3a9c3b20d51360b20affb8f753e756d553d49557" + integrity sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw== + +"@nomicfoundation/solidity-analyzer-darwin-x64@0.1.2": + version "0.1.2" + resolved "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz#74dcfabeb4ca373d95bd0d13692f44fcef133c28" + integrity sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw== + +"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.2": + version "0.1.2" + resolved "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz#4af5849a89e5a8f511acc04f28eb5d4460ba2b6a" + integrity sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA== + +"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.2": + version "0.1.2" + resolved "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz#54036808a9a327b2ff84446c130a6687ee702a8e" + integrity sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA== + +"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.2": + version "0.1.2" + resolved "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz#466cda0d6e43691986c944b909fc6dbb8cfc594e" + integrity sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g== + +"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.2": + version "0.1.2" + resolved "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz#2b35826987a6e94444140ac92310baa088ee7f94" + integrity sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg== + +"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.2": + version "0.1.2" + resolved "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz#e6363d13b8709ca66f330562337dbc01ce8bbbd9" + integrity sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA== + +"@nomicfoundation/solidity-analyzer@^0.1.0": + version "0.1.2" + resolved "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz#8bcea7d300157bf3a770a851d9f5c5e2db34ac55" + integrity sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA== + optionalDependencies: + "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.2" + "@nomicfoundation/solidity-analyzer-darwin-x64" "0.1.2" + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.1.2" + "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.1.2" + "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.1.2" + "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.1.2" + "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.2" + +"@nomiclabs/hardhat-ethers@^2.2.3": + version "2.2.3" + resolved "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.3.tgz#b41053e360c31a32c2640c9a45ee981a7e603fe0" + integrity sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg== + +"@openzeppelin/contracts-upgradeable-4.7.3@npm:@openzeppelin/contracts-upgradeable@v4.7.3": + version "4.7.3" + resolved "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz#f1d606e2827d409053f3e908ba4eb8adb1dd6995" + integrity sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A== + +"@openzeppelin/contracts-v0.7@npm:@openzeppelin/contracts@v3.4.2": + version "3.4.2" + resolved "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-3.4.2.tgz#d81f786fda2871d1eb8a8c5a73e455753ba53527" + integrity sha512-z0zMCjyhhp4y7XKAcDAi3Vgms4T2PstwBdahiO0+9NaGICQKjynK3wduSRplTgk4LXmoO1yfDGO5RbjKYxtuxA== + +"@openzeppelin/contracts@~4.3.3": + version "4.3.3" + resolved "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.3.3.tgz#ff6ee919fc2a1abaf72b22814bfb72ed129ec137" + integrity sha512-tDBopO1c98Yk7Cv/PZlHqrvtVjlgK5R4J6jxLwoO7qxK4xqOiZG+zSkIvGFpPZ0ikc3QOED3plgdqjgNTnBc7g== + "@pkgr/core@^0.2.9": version "0.2.9" - resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.2.9.tgz#d229a7b7f9dac167a156992ef23c7f023653f53b" + resolved "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz#d229a7b7f9dac167a156992ef23c7f023653f53b" integrity sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA== +"@scure/base@~1.1.0": + version "1.1.9" + resolved "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz#e5e142fbbfe251091f9c5f1dd4c834ac04c3dbd1" + integrity sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg== + "@scure/base@~1.2.2", "@scure/base@~1.2.4", "@scure/base@~1.2.5": version "1.2.6" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.2.6.tgz#ca917184b8231394dd8847509c67a0be522e59f6" + resolved "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz#ca917184b8231394dd8847509c67a0be522e59f6" integrity sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg== +"@scure/bip32@1.1.5": + version "1.1.5" + resolved "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz#d2ccae16dcc2e75bc1d75f5ef3c66a338d1ba300" + integrity sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw== + dependencies: + "@noble/hashes" "~1.2.0" + "@noble/secp256k1" "~1.7.0" + "@scure/base" "~1.1.0" + "@scure/bip32@1.6.2": version "1.6.2" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.6.2.tgz#093caa94961619927659ed0e711a6e4bf35bffd0" + resolved "https://registry.npmjs.org/@scure/bip32/-/bip32-1.6.2.tgz#093caa94961619927659ed0e711a6e4bf35bffd0" integrity sha512-t96EPDMbtGgtb7onKKqxRLfE5g05k7uHnHRM2xdE6BP/ZmxaLtPek4J4KfVn/90IQNrU1IOAqMgiDtUdtbe3nw== dependencies: "@noble/curves" "~1.8.1" "@noble/hashes" "~1.7.1" "@scure/base" "~1.2.2" -"@scure/bip32@^1.5.0": +"@scure/bip32@1.7.0", "@scure/bip32@^1.5.0", "@scure/bip32@^1.7.0": version "1.7.0" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.7.0.tgz#b8683bab172369f988f1589640e53c4606984219" + resolved "https://registry.npmjs.org/@scure/bip32/-/bip32-1.7.0.tgz#b8683bab172369f988f1589640e53c4606984219" integrity sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw== dependencies: "@noble/curves" "~1.9.0" "@noble/hashes" "~1.8.0" "@scure/base" "~1.2.5" +"@scure/bip39@1.1.1": + version "1.1.1" + resolved "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz#b54557b2e86214319405db819c4b6a370cf340c5" + integrity sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg== + dependencies: + "@noble/hashes" "~1.2.0" + "@scure/base" "~1.1.0" + "@scure/bip39@1.5.4": version "1.5.4" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.5.4.tgz#07fd920423aa671be4540d59bdd344cc1461db51" + resolved "https://registry.npmjs.org/@scure/bip39/-/bip39-1.5.4.tgz#07fd920423aa671be4540d59bdd344cc1461db51" integrity sha512-TFM4ni0vKvCfBpohoh+/lY05i9gRbSwXWngAsF4CABQxoaOHijxuaZ2R6cStDQ5CHtHO9aGJTr4ksVJASRRyMA== dependencies: "@noble/hashes" "~1.7.1" "@scure/base" "~1.2.4" -"@scure/bip39@^1.4.0": +"@scure/bip39@1.6.0", "@scure/bip39@^1.4.0", "@scure/bip39@^1.6.0": version "1.6.0" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.6.0.tgz#475970ace440d7be87a6086cbee77cb8f1a684f9" + resolved "https://registry.npmjs.org/@scure/bip39/-/bip39-1.6.0.tgz#475970ace440d7be87a6086cbee77cb8f1a684f9" integrity sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A== dependencies: "@noble/hashes" "~1.8.0" "@scure/base" "~1.2.5" +"@sentry/core@5.30.0": + version "5.30.0" + resolved "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" + integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/hub@5.30.0": + version "5.30.0" + resolved "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz#2453be9b9cb903404366e198bd30c7ca74cdc100" + integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== + dependencies: + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/minimal@5.30.0": + version "5.30.0" + resolved "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz#ce3d3a6a273428e0084adcb800bc12e72d34637b" + integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@sentry/node@^5.18.1": + version "5.30.0" + resolved "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz#4ca479e799b1021285d7fe12ac0858951c11cd48" + integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg== + dependencies: + "@sentry/core" "5.30.0" + "@sentry/hub" "5.30.0" + "@sentry/tracing" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + cookie "^0.4.1" + https-proxy-agent "^5.0.0" + lru_map "^0.3.3" + tslib "^1.9.3" + +"@sentry/tracing@5.30.0": + version "5.30.0" + resolved "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz#501d21f00c3f3be7f7635d8710da70d9419d4e1f" + integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/types@5.30.0": + version "5.30.0" + resolved "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402" + integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== + +"@sentry/utils@5.30.0": + version "5.30.0" + resolved "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980" + integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== + dependencies: + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@trufflesuite/bigint-buffer@1.1.10": + version "1.1.10" + resolved "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz#a1d9ca22d3cad1a138b78baaf15543637a3e1692" + integrity sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw== + dependencies: + node-gyp-build "4.4.0" + +"@trufflesuite/uws-js-unofficial@20.30.0-unofficial.0": + version "20.30.0-unofficial.0" + resolved "https://registry.npmjs.org/@trufflesuite/uws-js-unofficial/-/uws-js-unofficial-20.30.0-unofficial.0.tgz#2fbc2f8ef7e82fbeea6abaf7e8a9d42a02b479d3" + integrity sha512-r5X0aOQcuT6pLwTRLD+mPnAM/nlKtvIK4Z+My++A8tTOR0qTjNRx8UB8jzRj3D+p9PMAp5LnpCUUGmz7/TppwA== + dependencies: + ws "8.13.0" + optionalDependencies: + bufferutil "4.0.7" + utf-8-validate "6.0.3" + +"@typechain/hardhat@9.1.0": + version "9.1.0" + resolved "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-9.1.0.tgz#6985015f01dfb37ef2ca8a29c742d05890351ddc" + integrity sha512-mtaUlzLlkqTlfPwB3FORdejqBskSnh+Jl8AIJGjXNAQfRQ4ofHADPl1+oU7Z3pAJzmZbUXII8MhOLQltcHgKnA== + dependencies: + fs-extra "^9.1.0" + +"@types/bn.js@5.1.6": + version "5.1.6" + resolved "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.6.tgz#9ba818eec0c85e4d3c679518428afdf611d03203" + integrity sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w== + dependencies: + "@types/node" "*" + +"@types/bn.js@^4.11.3": + version "4.11.6" + resolved "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" + integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== + dependencies: + "@types/node" "*" + +"@types/bn.js@^5.1.0": + version "5.2.0" + resolved "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.2.0.tgz#4349b9710e98f9ab3cdc50f1c5e4dcbd8ef29c80" + integrity sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q== + dependencies: + "@types/node" "*" + "@types/debug@^4.0.0": version "4.1.12" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" + resolved "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== dependencies: "@types/ms" "*" "@types/estree@^1.0.6": version "1.0.8" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== "@types/json-schema@^7.0.15": version "7.0.15" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== +"@types/lru-cache@5.1.1", "@types/lru-cache@^5.1.0": + version "5.1.1" + resolved "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" + integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== + "@types/mdast@^4.0.0": version "4.0.4" - resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.4.tgz#7ccf72edd2f1aa7dd3437e180c64373585804dd6" + resolved "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz#7ccf72edd2f1aa7dd3437e180c64373585804dd6" integrity sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA== dependencies: "@types/unist" "*" "@types/ms@*": version "2.1.0" - resolved "https://registry.yarnpkg.com/@types/ms/-/ms-2.1.0.tgz#052aa67a48eccc4309d7f0191b7e41434b90bb78" + resolved "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz#052aa67a48eccc4309d7f0191b7e41434b90bb78" integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== +"@types/mute-stream@^0.0.4": + version "0.0.4" + resolved "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz#77208e56a08767af6c5e1237be8888e2f255c478" + integrity sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow== + dependencies: + "@types/node" "*" + +"@types/node@*": + version "25.0.9" + resolved "https://registry.npmjs.org/@types/node/-/node-25.0.9.tgz#81ce3579ddf67cae812a9d49c8a0ab90c82e7782" + integrity sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw== + dependencies: + undici-types "~7.16.0" + +"@types/node@22.7.5": + version "22.7.5" + resolved "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz#cfde981727a7ab3611a481510b473ae54442b92b" + integrity sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ== + dependencies: + undici-types "~6.19.2" + +"@types/node@^20.10.7": + version "20.19.30" + resolved "https://registry.npmjs.org/@types/node/-/node-20.19.30.tgz#84fa87498ade5cd2b6ba8f8eec01d3b138ca60d0" + integrity sha512-WJtwWJu7UdlvzEAUm484QNg5eAoq5QR08KDNx7g45Usrs2NtOPiX8ugDqmKdXkyL03rBqU5dYNYVQetEpBHq2g== + dependencies: + undici-types "~6.21.0" + +"@types/pbkdf2@^3.0.0": + version "3.1.2" + resolved "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz#2dc43808e9985a2c69ff02e2d2027bd4fe33e8dc" + integrity sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew== + dependencies: + "@types/node" "*" + "@types/prettier@3.0.0": version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-3.0.0.tgz#e9bc8160230d3a461dab5c5b41cceef1ef723057" + resolved "https://registry.npmjs.org/@types/prettier/-/prettier-3.0.0.tgz#e9bc8160230d3a461dab5c5b41cceef1ef723057" integrity sha512-mFMBfMOz8QxhYVbuINtswBp9VL2b4Y0QqYHwqLz3YbgtfAcat2Dl6Y1o4e22S/OVE6Ebl9m7wWiMT2lSbAs1wA== dependencies: prettier "*" +"@types/readable-stream@^2.3.13": + version "2.3.15" + resolved "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz#3d79c9ceb1b6a57d5f6e6976f489b9b5384321ae" + integrity sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ== + dependencies: + "@types/node" "*" + safe-buffer "~5.1.1" + +"@types/secp256k1@^4.0.1": + version "4.0.7" + resolved "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.7.tgz#534c9814eb80964962108ad45d549d1555c75fa0" + integrity sha512-Rcvjl6vARGAKRO6jHeKMatGrvOMGrR/AR11N1x2LqintPCyDZ7NBhrh238Z2VZc7aM7KIwnFpFQ7fnfK4H/9Qw== + dependencies: + "@types/node" "*" + +"@types/seedrandom@3.0.1": + version "3.0.1" + resolved "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-3.0.1.tgz#1254750a4fec4aff2ebec088ccd0bb02e91fedb4" + integrity sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw== + "@types/unist@*", "@types/unist@^3.0.0": version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c" + resolved "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c" integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q== +"@types/wrap-ansi@^3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz#18b97a972f94f60a679fd5c796d96421b9abb9fd" + integrity sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g== + "@typescript-eslint/eslint-plugin@8.29.1": version "8.29.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.29.1.tgz#593639d9bb5239b2d877d65757b7e2c9100a2e84" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.29.1.tgz#593639d9bb5239b2d877d65757b7e2c9100a2e84" integrity sha512-ba0rr4Wfvg23vERs3eB+P3lfj2E+2g3lhWcCVukUuhtcdUx5lSIFZlGFEBHKr+3zizDa/TvZTptdNHVZWAkSBg== dependencies: "@eslint-community/regexpp" "^4.10.0" @@ -387,7 +1857,7 @@ "@typescript-eslint/parser@8.29.1": version "8.29.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.29.1.tgz#10bf37411be0a199c27b6515726e22fe8d3df8d0" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.29.1.tgz#10bf37411be0a199c27b6515726e22fe8d3df8d0" integrity sha512-zczrHVEqEaTwh12gWBIJWj8nx+ayDcCJs06yoNMY0kwjMWDM6+kppljY+BxWI06d2Ja+h4+WdufDcwMnnMEWmg== dependencies: "@typescript-eslint/scope-manager" "8.29.1" @@ -398,7 +1868,7 @@ "@typescript-eslint/scope-manager@8.29.1": version "8.29.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.29.1.tgz#cfdfd4144f20c38b9d3e430efd6480e297ef52f6" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.29.1.tgz#cfdfd4144f20c38b9d3e430efd6480e297ef52f6" integrity sha512-2nggXGX5F3YrsGN08pw4XpMLO1Rgtnn4AzTegC2MDesv6q3QaTU5yU7IbS1tf1IwCR0Hv/1EFygLn9ms6LIpDA== dependencies: "@typescript-eslint/types" "8.29.1" @@ -406,7 +1876,7 @@ "@typescript-eslint/type-utils@8.29.1": version "8.29.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.29.1.tgz#653dfff5c1711bc920a6a46a5a2c274899f00179" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.29.1.tgz#653dfff5c1711bc920a6a46a5a2c274899f00179" integrity sha512-DkDUSDwZVCYN71xA4wzySqqcZsHKic53A4BLqmrWFFpOpNSoxX233lwGu/2135ymTCR04PoKiEEEvN1gFYg4Tw== dependencies: "@typescript-eslint/typescript-estree" "8.29.1" @@ -416,12 +1886,12 @@ "@typescript-eslint/types@8.29.1": version "8.29.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.29.1.tgz#984ed1283fedbfb41d3993a9abdcb7b299971500" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.29.1.tgz#984ed1283fedbfb41d3993a9abdcb7b299971500" integrity sha512-VT7T1PuJF1hpYC3AGm2rCgJBjHL3nc+A/bhOp9sGMKfi5v0WufsX/sHCFBfNTx2F+zA6qBc/PD0/kLRLjdt8mQ== "@typescript-eslint/typescript-estree@8.29.1": version "8.29.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.29.1.tgz#4ac085665ed5390d11c0e3426427978570e3b747" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.29.1.tgz#4ac085665ed5390d11c0e3426427978570e3b747" integrity sha512-l1enRoSaUkQxOQnbi0KPUtqeZkSiFlqrx9/3ns2rEDhGKfTa+88RmXqedC1zmVTOWrLc2e6DEJrTA51C9iLH5g== dependencies: "@typescript-eslint/types" "8.29.1" @@ -435,7 +1905,7 @@ "@typescript-eslint/utils@8.29.1": version "8.29.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.29.1.tgz#3d206c8c8def3527a8eb0588e94e3e60f7e167c9" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.29.1.tgz#3d206c8c8def3527a8eb0588e94e3e60f7e167c9" integrity sha512-QAkFEbytSaB8wnmB+DflhUPz6CLbFWE2SnSCrRMEa+KnXIzDYbpsn++1HGvnfAsUY44doDXmvRkO5shlM/3UfA== dependencies: "@eslint-community/eslint-utils" "^4.4.0" @@ -445,7 +1915,7 @@ "@typescript-eslint/visitor-keys@8.29.1": version "8.29.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.29.1.tgz#9b74e5098c71138d42bbf2178fbe4dfad45d6b9a" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.29.1.tgz#9b74e5098c71138d42bbf2178fbe4dfad45d6b9a" integrity sha512-RGLh5CRaUEf02viP5c1Vh1cMGffQscyHe7HPAzGpfmfflFg1wUz2rYxd+OZqwpeypYvZ8UxSxuIpF++fmOzEcg== dependencies: "@typescript-eslint/types" "8.29.1" @@ -453,27 +1923,100 @@ abitype@1.0.8: version "1.0.8" - resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.8.tgz#3554f28b2e9d6e9f35eb59878193eabd1b9f46ba" + resolved "https://registry.npmjs.org/abitype/-/abitype-1.0.8.tgz#3554f28b2e9d6e9f35eb59878193eabd1b9f46ba" integrity sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg== -abitype@^1.0.6: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.1.1.tgz#b50ed400f8bfca5452eb4033445c309d3e1117c8" - integrity sha512-Loe5/6tAgsBukY95eGaPSDmQHIjRZYQq8PB1MpsNccDIK8WiV+Uw6WzaIXipvaxTEL2yEB0OpEaQv3gs8pkS9Q== +abitype@1.2.3, abitype@^1.0.6, abitype@^1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/abitype/-/abitype-1.2.3.tgz#bec3e09dea97d99ef6c719140bee663a329ad1f4" + integrity sha512-Ofer5QUnuUdTFsBRwARMoWKOH1ND5ehwYhJ3OJ/BQO+StkwQjHw0XyVh4vDttzHB7QOFhPHa/o413PJ82gU/Tg== + +abstract-level@1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz#78a67d3d84da55ee15201486ab44c09560070741" + integrity sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA== + dependencies: + buffer "^6.0.3" + catering "^2.1.0" + is-buffer "^2.0.5" + level-supports "^4.0.0" + level-transcoder "^1.0.1" + module-error "^1.0.1" + queue-microtask "^1.2.3" + +abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3, abstract-level@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.4.tgz#3ad8d684c51cc9cbc9cf9612a7100b716c414b57" + integrity sha512-eUP/6pbXBkMbXFdx4IH2fVgvB7M0JvR7/lIL33zcs0IBcwjdzSSl31TOJsaCzmKSSDF9h8QYSOJux4Nd4YJqFg== + dependencies: + buffer "^6.0.3" + catering "^2.1.0" + is-buffer "^2.0.5" + level-supports "^4.0.0" + level-transcoder "^1.0.1" + module-error "^1.0.1" + queue-microtask "^1.2.3" + +abstract-leveldown@7.2.0, abstract-leveldown@^7.2.0: + version "7.2.0" + resolved "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#08d19d4e26fb5be426f7a57004851b39e1795a2e" + integrity sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ== + dependencies: + buffer "^6.0.3" + catering "^2.0.0" + is-buffer "^2.0.5" + level-concat-iterator "^3.0.0" + level-supports "^2.0.1" + queue-microtask "^1.2.3" acorn-jsx@^5.3.2: version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== +acorn@7.1.1: + version "7.1.1" + resolved "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" + integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== + acorn@^8.15.0: version "8.15.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== +adm-zip@^0.4.16: + version "0.4.16" + resolved "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" + integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== + +aes-js@3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" + integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== + +aes-js@4.0.0-beta.5: + version "4.0.0-beta.5" + resolved "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz#8d2452c52adedebc3a3e28465d858c11ca315873" + integrity sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q== + +agent-base@6: + version "6.0.2" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + ajv@^6.12.4: version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -481,31 +2024,179 @@ ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-styles@^4.1.0: +ansi-colors@^4.1.1, ansi-colors@^4.1.3: + version "4.1.3" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-escapes@^4.3.0, ansi-escapes@^4.3.2: + version "4.3.2" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + argparse@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + +async-eventemitter@0.2.4: + version "0.2.4" + resolved "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" + integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== + dependencies: + async "^2.4.0" + +async@^2.4.0: + version "2.6.4" + resolved "https://registry.npmjs.org/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + +axios@^0.21.1: + version "0.21.4" + resolved "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" + integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== + dependencies: + follow-redirects "^1.14.0" + +axios@^1.13.2, axios@^1.4.0: + version "1.13.2" + resolved "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz#9ada120b7b5ab24509553ec3e40123521117f687" + integrity sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.4" + proxy-from-env "^1.1.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +base-x@^3.0.2: + version "3.0.11" + resolved "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz#40d80e2a1aeacba29792ccc6c5354806421287ff" + integrity sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA== + dependencies: + safe-buffer "^5.0.1" + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bcrypto@^5.4.0: + version "5.5.2" + resolved "https://registry.npmjs.org/bcrypto/-/bcrypto-5.5.2.tgz#7568186b31a1cfb142df50b22a87309287708e96" + integrity sha512-k3PF755oJM0+25iOVuraNedF5XneykxRwl+oBoMeQPfYee4qX8hHQhKCsNZWLthNYgi41GH2ysopd/8sDQDhEw== + dependencies: + bufio "~1.0.7" + loady "~0.0.5" + +bech32@1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" + integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== + +bigint-crypto-utils@^3.0.23: + version "3.3.0" + resolved "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz#72ad00ae91062cf07f2b1def9594006c279c1d77" + integrity sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg== + +binary-extensions@^2.0.0: + version "2.3.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + binary-searching@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/binary-searching/-/binary-searching-2.0.5.tgz#ab6d08d51cd1b58878ae208ab61988f885b22dd3" + resolved "https://registry.npmjs.org/binary-searching/-/binary-searching-2.0.5.tgz#ab6d08d51cd1b58878ae208ab61988f885b22dd3" integrity sha512-v4N2l3RxL+m4zDxyxz3Ne2aTmiPn8ZUpKFpdPtO+ItW1NcTCXA7JeHG5GMBSvoKSkQZ9ycS+EouDVxYB9ufKWA== +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bip66@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz#01fa8748785ca70955d5011217d1b3139969ca22" + integrity sha512-nemMHz95EmS38a26XbbdxIYj5csHd3RMP3H5bwQknX0WYHF01qhpufP42mLOwVICuH2JmhIhXiWs89MfUGL7Xw== + dependencies: + safe-buffer "^5.0.1" + +blakejs@^1.1.0: + version "1.2.1" + resolved "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" + integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== + +bn.js@^4.11.0, bn.js@^4.11.8, bn.js@^4.11.9: + version "4.12.2" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz#3d8fed6796c24e177737f7cc5172ee04ef39ec99" + integrity sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw== + +bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: + version "5.2.2" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz#82c09f9ebbb17107cd72cb7fd39bd1f9d0aaa566" + integrity sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw== + brace-expansion@^1.1.7: version "1.1.12" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843" integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg== dependencies: balanced-match "^1.0.0" @@ -513,101 +2204,563 @@ brace-expansion@^1.1.7: brace-expansion@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.2.tgz#54fc53237a613d854c7bd37463aad17df87214e7" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz#54fc53237a613d854c7bd37463aad17df87214e7" integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ== dependencies: balanced-match "^1.0.0" -braces@^3.0.3: +braces@^3.0.3, braces@~3.0.2: version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: fill-range "^7.1.1" +brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + +browser-level@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz#36e8c3183d0fe1c405239792faaab5f315871011" + integrity sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ== + dependencies: + abstract-level "^1.0.2" + catering "^2.1.1" + module-error "^1.0.2" + run-parallel-limit "^1.1.0" + +browser-stdout@^1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + +browserify-aes@^1.0.6, browserify-aes@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +bs58@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== + dependencies: + base-x "^3.0.2" + +bs58check@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" + integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== + dependencies: + bs58 "^4.0.0" + create-hash "^1.1.0" + safe-buffer "^5.1.2" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== + +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +bufferutil@4.0.5: + version "4.0.5" + resolved "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz#da9ea8166911cc276bf677b8aed2d02d31f59028" + integrity sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A== + dependencies: + node-gyp-build "^4.3.0" + +bufferutil@4.0.7: + version "4.0.7" + resolved "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz#60c0d19ba2c992dd8273d3f73772ffc894c153ad" + integrity sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw== + dependencies: + node-gyp-build "^4.3.0" + +bufio@^1.0.7: + version "1.2.3" + resolved "https://registry.npmjs.org/bufio/-/bufio-1.2.3.tgz#25049c13f05e7cf56c88aa00f2503202b4bf2799" + integrity sha512-5Tt66bRzYUSlVZatc0E92uDenreJ+DpTBmSAUwL4VSxJn3e6cUyYwx+PoqML0GRZatgA/VX8ybhxItF8InZgqA== + +bufio@~1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/bufio/-/bufio-1.0.7.tgz#b7f63a1369a0829ed64cc14edf0573b3e382a33e" + integrity sha512-bd1dDQhiC+bEbEfg56IdBv7faWa6OipMs/AFFFvtFnB3wAYjlwQpQRZ0pm6ZkgtfL0pILRXhKxOiQj6UzoMR7A== + +bytes@~3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + +call-bind@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" + get-intrinsic "^1.2.4" + set-function-length "^1.2.2" + +call-bound@^1.0.3, call-bound@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" + callsites@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -chalk@^4.0.0: +camelcase@^6.0.0: + version "6.3.0" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +case@^1.6.3: + version "1.6.3" + resolved "https://registry.npmjs.org/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9" + integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ== + +catering@^2.0.0, catering@^2.1.0, catering@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" + integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== + +cbor@^9.0.1: + version "9.0.2" + resolved "https://registry.npmjs.org/cbor/-/cbor-9.0.2.tgz#536b4f2d544411e70ec2b19a2453f10f83cd9fdb" + integrity sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ== + dependencies: + nofilter "^3.1.0" + +chai@^4.3.4: + version "4.5.0" + resolved "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz#707e49923afdd9b13a8b0b47d33d732d13812fd8" + integrity sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.3" + deep-eql "^4.1.3" + get-func-name "^2.0.2" + loupe "^2.3.6" + pathval "^1.1.1" + type-detect "^4.1.0" + +chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + character-entities@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" + resolved "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== +check-error@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" + integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== + dependencies: + get-func-name "^2.0.2" + +chokidar@^3.4.0, chokidar@^3.5.2, chokidar@^3.5.3: + version "3.6.0" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.7" + resolved "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.7.tgz#bd094bfef42634ccfd9e13b9fc73274997111e39" + integrity sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA== + dependencies: + inherits "^2.0.4" + safe-buffer "^5.2.1" + to-buffer "^1.2.2" + +classic-level@^1.2.0: + version "1.4.1" + resolved "https://registry.npmjs.org/classic-level/-/classic-level-1.4.1.tgz#169ecf9f9c6200ad42a98c8576af449c1badbaee" + integrity sha512-qGx/KJl3bvtOHrGau2WklEZuXhS3zme+jf+fsu6Ej7W7IP/C49v7KNlWIsT1jZu0YnfzSIYDGcEWpCa1wKGWXQ== + dependencies: + abstract-level "^1.0.2" + catering "^2.1.0" + module-error "^1.0.1" + napi-macros "^2.2.2" + node-gyp-build "^4.3.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-spinners@^2.9.2: + version "2.9.2" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== + +cli-width@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" + integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + color-name@~1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +command-exists@^1.2.8: + version "1.2.9" + resolved "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" + integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== + +commander@3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" + integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== + comment-parser@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.4.1.tgz#bdafead37961ac079be11eb7ec65c4d021eaf9cc" - integrity sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg== + version "1.4.4" + resolved "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.4.tgz#45b16f7d9de769b1271ba22e8a3ecf2bb0873c63" + integrity sha512-0D6qSQ5IkeRrGJFHRClzaMOenMeT0gErz3zIw3AprKMqhRN6LNU2jQOdkPG/FZ+8bCgXE1VidrgSzlBBDZRr8A== concat-map@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== +cookie@^0.4.1: + version "0.4.2" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +crc-32@^1.2.0: + version "1.2.2" + resolved "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + cross-spawn@^7.0.6: version "7.0.6" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" which "^2.0.1" -debug@^4.0.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: +debug@4, debug@^4.0.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@^4.3.5: version "4.4.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + resolved "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== dependencies: ms "^2.1.3" +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + decode-named-character-reference@^1.0.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz#25c32ae6dd5e21889549d40f676030e9514cc0ed" + resolved "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz#25c32ae6dd5e21889549d40f676030e9514cc0ed" integrity sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q== dependencies: character-entities "^2.0.0" +deep-eql@^4.1.3: + version "4.1.4" + resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz#d0d3912865911bb8fac5afb4e3acfa6a28dc72b7" + integrity sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg== + dependencies: + type-detect "^4.0.0" + deep-is@^0.1.3: version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== +define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +depd@~2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + dequal@^2.0.0: version "2.0.3" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + resolved "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== devlop@^1.0.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/devlop/-/devlop-1.1.0.tgz#4db7c2ca4dc6e0e834c30be70c94bbc976dc7018" + resolved "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz#4db7c2ca4dc6e0e834c30be70c94bbc976dc7018" integrity sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA== dependencies: dequal "^2.0.0" +diff@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" + integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== + +docker-compose@^0.24.1: + version "0.24.8" + resolved "https://registry.npmjs.org/docker-compose/-/docker-compose-0.24.8.tgz#6c125e6b9e04cf68ced47e2596ef2bb93ee9694e" + integrity sha512-plizRs/Vf15H+GCVxq2EUvyPK7ei9b/cVesHvjnX4xaXjM9spHe2Ytq0BitndFgvTJ3E3NljPNUEl7BAN43iZw== + dependencies: + yaml "^2.2.2" + +drbg.js@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz#3e36b6c42b37043823cdbc332d58f31e2445480b" + integrity sha512-F4wZ06PvqxYLFEZKkFxTDcns9oFNk34hvmJSEwdzsxVQ8YI5YaxtACgQatkYgv2VI2CFkUd2Y+xosPQnHv809g== + dependencies: + browserify-aes "^1.0.6" + create-hash "^1.1.2" + create-hmac "^1.1.4" + +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + +eccrypto@1.1.6: + version "1.1.6" + resolved "https://registry.npmjs.org/eccrypto/-/eccrypto-1.1.6.tgz#846bd1222323036f7a3515613704386399702bd3" + integrity sha512-d78ivVEzu7Tn0ZphUUaL43+jVPKTMPFGtmgtz1D0LrFn7cY3K8CdrvibuLz2AAkHBLKZtR8DMbB2ukRYFk987A== + dependencies: + acorn "7.1.1" + elliptic "6.5.4" + es6-promise "4.2.8" + nan "2.14.0" + optionalDependencies: + secp256k1 "3.7.1" + +elliptic@6.5.4: + version "6.5.4" + resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +elliptic@6.6.1, elliptic@^6.4.1, elliptic@^6.5.2, elliptic@^6.5.4, elliptic@^6.5.7: + version "6.6.1" + resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz#3b8ffb02670bf69e382c7f65bf524c97c5405c06" + integrity sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emittery@0.10.0: + version "0.10.0" + resolved "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz#bb373c660a9d421bb44706ec4967ed50c02a8026" + integrity sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +encode-utf8@^1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" + integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== + +enquirer@^2.3.0, enquirer@^2.3.6: + version "2.4.1" + resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" + integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== + dependencies: + ansi-colors "^4.1.1" + strip-ansi "^6.0.1" + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +es-define-property@^1.0.0, es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +es6-promise@4.2.8: + version "4.2.8" + resolved "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + esbuild@0.25.2: version "0.25.2" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.2.tgz#55a1d9ebcb3aa2f95e8bba9e900c1a5061bc168b" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz#55a1d9ebcb3aa2f95e8bba9e900c1a5061bc168b" integrity sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ== optionalDependencies: "@esbuild/aix-ppc64" "0.25.2" @@ -636,19 +2789,61 @@ esbuild@0.25.2: "@esbuild/win32-ia32" "0.25.2" "@esbuild/win32-x64" "0.25.2" +esbuild@^0.27.0: + version "0.27.2" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz#d83ed2154d5813a5367376bb2292a9296fc83717" + integrity sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw== + optionalDependencies: + "@esbuild/aix-ppc64" "0.27.2" + "@esbuild/android-arm" "0.27.2" + "@esbuild/android-arm64" "0.27.2" + "@esbuild/android-x64" "0.27.2" + "@esbuild/darwin-arm64" "0.27.2" + "@esbuild/darwin-x64" "0.27.2" + "@esbuild/freebsd-arm64" "0.27.2" + "@esbuild/freebsd-x64" "0.27.2" + "@esbuild/linux-arm" "0.27.2" + "@esbuild/linux-arm64" "0.27.2" + "@esbuild/linux-ia32" "0.27.2" + "@esbuild/linux-loong64" "0.27.2" + "@esbuild/linux-mips64el" "0.27.2" + "@esbuild/linux-ppc64" "0.27.2" + "@esbuild/linux-riscv64" "0.27.2" + "@esbuild/linux-s390x" "0.27.2" + "@esbuild/linux-x64" "0.27.2" + "@esbuild/netbsd-arm64" "0.27.2" + "@esbuild/netbsd-x64" "0.27.2" + "@esbuild/openbsd-arm64" "0.27.2" + "@esbuild/openbsd-x64" "0.27.2" + "@esbuild/openharmony-arm64" "0.27.2" + "@esbuild/sunos-x64" "0.27.2" + "@esbuild/win32-arm64" "0.27.2" + "@esbuild/win32-ia32" "0.27.2" + "@esbuild/win32-x64" "0.27.2" + +escalade@^3.1.1: + version "3.2.0" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + escape-string-regexp@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== eslint-config-prettier@10.1.2: version "10.1.2" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-10.1.2.tgz#31a4b393c40c4180202c27e829af43323bf85276" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.2.tgz#31a4b393c40c4180202c27e829af43323bf85276" integrity sha512-Epgp/EofAUeEpIdZkW60MHKvPyru1ruQJxPL+WIycnaPApuseK0Zpkrh/FwL9oIpQvIhJwV7ptOy0DWUjTlCiA== eslint-plugin-prettier@5.2.6: version "5.2.6" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.6.tgz#be39e3bb23bb3eeb7e7df0927cdb46e4d7945096" + resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.6.tgz#be39e3bb23bb3eeb7e7df0927cdb46e4d7945096" integrity sha512-mUcf7QG2Tjk7H055Jk0lGBjbgDnfrvqjhXh9t2xLMSCjZVcw9Rb1V6sVNXO0th3jgeO7zllWPTNRil3JW94TnQ== dependencies: prettier-linter-helpers "^1.0.0" @@ -656,7 +2851,7 @@ eslint-plugin-prettier@5.2.6: eslint-scope@^8.3.0: version "8.4.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.4.0.tgz#88e646a207fad61436ffa39eb505147200655c82" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz#88e646a207fad61436ffa39eb505147200655c82" integrity sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg== dependencies: esrecurse "^4.3.0" @@ -664,17 +2859,17 @@ eslint-scope@^8.3.0: eslint-visitor-keys@^3.4.3: version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== eslint-visitor-keys@^4.2.0, eslint-visitor-keys@^4.2.1: version "4.2.1" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1" integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== eslint@9.24.0: version "9.24.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.24.0.tgz#9a7f2e6cb2de81c405ab244b02f4584c79dc6bee" + resolved "https://registry.npmjs.org/eslint/-/eslint-9.24.0.tgz#9a7f2e6cb2de81c405ab244b02f4584c79dc6bee" integrity sha512-eh/jxIEJyZrvbWRe4XuVclLPDYSYYYgLy5zXGGxD6j8zjSAxFEzI2fL/8xNq6O2yKqVt+eF2YhV+hxjV6UKXwQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" @@ -715,7 +2910,7 @@ eslint@9.24.0: espree@^10.0.1, espree@^10.3.0: version "10.4.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-10.4.0.tgz#d54f4949d4629005a1fa168d937c3ff1f7e2a837" + resolved "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz#d54f4949d4629005a1fa168d937c3ff1f7e2a837" integrity sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ== dependencies: acorn "^8.15.0" @@ -723,47 +2918,224 @@ espree@^10.0.1, espree@^10.3.0: eslint-visitor-keys "^4.2.1" esquery@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" - integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== + version "1.7.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz#08d048f261f0ddedb5bae95f46809463d9c9496d" + integrity sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g== dependencies: estraverse "^5.1.0" esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^5.1.0, estraverse@^5.2.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +eth-crypto@^2.6.0: + version "2.8.0" + resolved "https://registry.npmjs.org/eth-crypto/-/eth-crypto-2.8.0.tgz#8edec2f479eadfb51b0f616b4e75b2c5c0e9f97e" + integrity sha512-QtVmfLZK+N0k4+RA65ORbVCBM2ndzPM0Q/VFhkYYrGY16+4OAwuxG+eyFlWyDO3HBFMlPnMLa69OZCKOoQkcdQ== + dependencies: + "@babel/runtime" "7.27.0" + "@ethereumjs/tx" "3.5.2" + "@types/bn.js" "5.1.6" + eccrypto "1.1.6" + ethereumjs-util "7.1.5" + ethers "5.8.0" + secp256k1 "5.0.1" + +ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3: + version "0.1.3" + resolved "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" + integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== + dependencies: + "@types/pbkdf2" "^3.0.0" + "@types/secp256k1" "^4.0.1" + blakejs "^1.1.0" + browserify-aes "^1.2.0" + bs58check "^2.1.2" + create-hash "^1.2.0" + create-hmac "^1.1.7" + hash.js "^1.1.7" + keccak "^3.0.0" + pbkdf2 "^3.0.17" + randombytes "^2.1.0" + safe-buffer "^5.1.2" + scrypt-js "^3.0.0" + secp256k1 "^4.0.1" + setimmediate "^1.0.5" + +ethereum-cryptography@^1.0.3: + version "1.2.0" + resolved "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz#5ccfa183e85fdaf9f9b299a79430c044268c9b3a" + integrity sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw== + dependencies: + "@noble/hashes" "1.2.0" + "@noble/secp256k1" "1.7.1" + "@scure/bip32" "1.1.5" + "@scure/bip39" "1.1.1" + +ethereumjs-abi@^0.6.8: + version "0.6.8" + resolved "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" + integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== + dependencies: + bn.js "^4.11.8" + ethereumjs-util "^6.0.0" + +ethereumjs-util@7.1.5, ethereumjs-util@^7.1.5: + version "7.1.5" + resolved "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" + integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== + dependencies: + "@types/bn.js" "^5.1.0" + bn.js "^5.1.2" + create-hash "^1.1.2" + ethereum-cryptography "^0.1.3" + rlp "^2.2.4" + +ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: + version "6.2.1" + resolved "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" + integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== + dependencies: + "@types/bn.js" "^4.11.3" + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "0.1.6" + rlp "^2.2.3" + +ethers@5.8.0, ethers@^5.4.7, ethers@^5.7.0, ethers@^5.7.1, ethers@^5.7.2: + version "5.8.0" + resolved "https://registry.npmjs.org/ethers/-/ethers-5.8.0.tgz#97858dc4d4c74afce83ea7562fe9493cedb4d377" + integrity sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg== + dependencies: + "@ethersproject/abi" "5.8.0" + "@ethersproject/abstract-provider" "5.8.0" + "@ethersproject/abstract-signer" "5.8.0" + "@ethersproject/address" "5.8.0" + "@ethersproject/base64" "5.8.0" + "@ethersproject/basex" "5.8.0" + "@ethersproject/bignumber" "5.8.0" + "@ethersproject/bytes" "5.8.0" + "@ethersproject/constants" "5.8.0" + "@ethersproject/contracts" "5.8.0" + "@ethersproject/hash" "5.8.0" + "@ethersproject/hdnode" "5.8.0" + "@ethersproject/json-wallets" "5.8.0" + "@ethersproject/keccak256" "5.8.0" + "@ethersproject/logger" "5.8.0" + "@ethersproject/networks" "5.8.0" + "@ethersproject/pbkdf2" "5.8.0" + "@ethersproject/properties" "5.8.0" + "@ethersproject/providers" "5.8.0" + "@ethersproject/random" "5.8.0" + "@ethersproject/rlp" "5.8.0" + "@ethersproject/sha2" "5.8.0" + "@ethersproject/signing-key" "5.8.0" + "@ethersproject/solidity" "5.8.0" + "@ethersproject/strings" "5.8.0" + "@ethersproject/transactions" "5.8.0" + "@ethersproject/units" "5.8.0" + "@ethersproject/wallet" "5.8.0" + "@ethersproject/web" "5.8.0" + "@ethersproject/wordlists" "5.8.0" + +ethers@6.13.4: + version "6.13.4" + resolved "https://registry.npmjs.org/ethers/-/ethers-6.13.4.tgz#bd3e1c3dc1e7dc8ce10f9ffb4ee40967a651b53c" + integrity sha512-21YtnZVg4/zKkCQPjrDj38B1r4nQvTZLopUGMLQ1ePU2zV/joCfDC3t3iKQjWRzjjjbzR+mdAIoikeBRNkdllA== + dependencies: + "@adraffy/ens-normalize" "1.10.1" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@types/node" "22.7.5" + aes-js "4.0.0-beta.5" + tslib "2.7.0" + ws "8.17.1" + +ethers@~5.7.0: + version "5.7.2" + resolved "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" + integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== + dependencies: + "@ethersproject/abi" "5.7.0" + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/abstract-signer" "5.7.0" + "@ethersproject/address" "5.7.0" + "@ethersproject/base64" "5.7.0" + "@ethersproject/basex" "5.7.0" + "@ethersproject/bignumber" "5.7.0" + "@ethersproject/bytes" "5.7.0" + "@ethersproject/constants" "5.7.0" + "@ethersproject/contracts" "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/networks" "5.7.1" + "@ethersproject/pbkdf2" "5.7.0" + "@ethersproject/properties" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@ethersproject/random" "5.7.0" + "@ethersproject/rlp" "5.7.0" + "@ethersproject/sha2" "5.7.0" + "@ethersproject/signing-key" "5.7.0" + "@ethersproject/solidity" "5.7.0" + "@ethersproject/strings" "5.7.0" + "@ethersproject/transactions" "5.7.0" + "@ethersproject/units" "5.7.0" + "@ethersproject/wallet" "5.7.0" + "@ethersproject/web" "5.7.1" + "@ethersproject/wordlists" "5.7.0" + +ethjs-util@0.1.6, ethjs-util@^0.1.6: + version "0.1.6" + resolved "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" + integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== + dependencies: + is-hex-prefixed "1.0.0" + strip-hex-prefix "1.0.0" + eventemitter3@5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== +evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-diff@^1.1.2: version "1.3.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== fast-glob@^3.3.2: version "3.3.3" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== dependencies: "@nodelib/fs.stat" "^2.0.2" @@ -774,38 +3146,57 @@ fast-glob@^3.3.2: fast-json-stable-stringify@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@^2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fastq@^1.6.0: - version "1.19.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" - integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== + version "1.20.1" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz#ca750a10dc925bc8b18839fd203e3ef4b3ced675" + integrity sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw== dependencies: reusify "^1.0.4" +figures@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + file-entry-cache@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== dependencies: flat-cache "^4.0.0" +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + fill-range@^7.1.1: version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" +find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== + dependencies: + locate-path "^2.0.0" + find-up@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" @@ -813,148 +3204,798 @@ find-up@^5.0.0: flat-cache@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== dependencies: flatted "^3.2.9" keyv "^4.5.4" +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + flatted@^3.2.9: version "3.3.3" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== -glob-parent@^5.1.2: +fmix@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz#c7bbf124dec42c9d191cfb947d0a9778dd986c0c" + integrity sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w== + dependencies: + imul "^1.0.0" + +follow-redirects@^1.12.1, follow-redirects@^1.14.0, follow-redirects@^1.15.6: + version "1.15.11" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340" + integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== + +for-each@^0.3.5: + version "0.3.5" + resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" + integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== + dependencies: + is-callable "^1.2.7" + +form-data@^4.0.0, form-data@^4.0.4: + version "4.0.5" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz#b49e48858045ff4cbf6b03e1805cebcad3679053" + integrity sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + hasown "^2.0.2" + mime-types "^2.1.12" + +fp-ts@1.19.3: + version "1.19.3" + resolved "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" + integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== + +fp-ts@^1.0.0: + version "1.19.5" + resolved "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" + integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== + +fs-extra@^0.30.0: + version "0.30.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" + integrity sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + path-is-absolute "^1.0.0" + rimraf "^2.2.8" + +fs-extra@^10.0.0: + version "10.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^9.1.0: + version "9.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== + +ganache@^7.9.1: + version "7.9.2" + resolved "https://registry.npmjs.org/ganache/-/ganache-7.9.2.tgz#77f506ad2735dd9109696ffa1834a9dd2f806449" + integrity sha512-7gsVVDpO9AhrFyDMWWl7SpMsPpqGcnAzjxz3k32LheIPNd64p2XsY9GYRdhWmKuryb60W1iaWPZWDkFKlbRWHA== + dependencies: + "@trufflesuite/bigint-buffer" "1.1.10" + "@trufflesuite/uws-js-unofficial" "20.30.0-unofficial.0" + "@types/bn.js" "^5.1.0" + "@types/lru-cache" "5.1.1" + "@types/seedrandom" "3.0.1" + abstract-level "1.0.3" + abstract-leveldown "7.2.0" + async-eventemitter "0.2.4" + emittery "0.10.0" + keccak "3.0.2" + leveldown "6.1.0" + secp256k1 "4.0.3" + optionalDependencies: + bufferutil "4.0.5" + utf-8-validate "5.0.7" + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-func-name@^2.0.1, get-func-name@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" + integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== + +get-intrinsic@^1.2.4, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + +get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + +glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob-parent@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: is-glob "^4.0.3" +glob@7.2.0: + version "7.2.0" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + globals@^14.0.0: version "14.0.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" + resolved "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== +gopd@^1.0.1, gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: + version "4.2.11" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + graphemer@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== +hardhat-deploy-ethers@0.4.2: + version "0.4.2" + resolved "https://registry.npmjs.org/hardhat-deploy-ethers/-/hardhat-deploy-ethers-0.4.2.tgz#10aa44ef806ec8cf3d67ad9692f3762ed965b5e7" + integrity sha512-AskNH/XRYYYqPT94MvO5s1yMi+/QvoNjS4oU5VcVqfDU99kgpGETl+uIYHIrSXtH5sy7J6gyVjpRMf4x0tjLSQ== + +hardhat-deploy@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-1.0.4.tgz#363266e99226d8e3bdf48c5522b9c8cce6584068" + integrity sha512-vl6vYQHDtZmILerAIRERI2AjghLH5gJIcQjNrSldn2SjQdY5Y47umXVll4/ywPzBRlsqdpJfL92PhnQ+1xB+Sg== + dependencies: + "@ethersproject/abi" "^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/constants" "^5.7.0" + "@ethersproject/contracts" "^5.7.0" + "@ethersproject/providers" "^5.7.2" + "@ethersproject/solidity" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wallet" "^5.7.0" + axios "^0.21.1" + chalk "^4.1.2" + chokidar "^3.5.2" + debug "^4.3.2" + enquirer "^2.3.6" + ethers "^5.7.0" + form-data "^4.0.0" + fs-extra "^10.0.0" + match-all "^1.2.6" + murmur-128 "^0.2.1" + neoqs "^6.13.0" + zksync-ethers "^5.0.0" + +hardhat@2.17.4: + version "2.17.4" + resolved "https://registry.npmjs.org/hardhat/-/hardhat-2.17.4.tgz#aebaac3aea54ee02d6afa089eeb4c095e83a817c" + integrity sha512-YTyHjVc9s14CY/O7Dbtzcr/92fcz6AzhrMaj6lYsZpYPIPLzOrFCZHHPxfGQB6FiE6IPNE0uJaAbr7zGF79goA== + dependencies: + "@ethersproject/abi" "^5.1.2" + "@metamask/eth-sig-util" "^4.0.0" + "@nomicfoundation/ethereumjs-block" "5.0.2" + "@nomicfoundation/ethereumjs-blockchain" "7.0.2" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-evm" "2.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-statemanager" "2.0.2" + "@nomicfoundation/ethereumjs-trie" "6.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + "@nomicfoundation/ethereumjs-vm" "7.0.2" + "@nomicfoundation/solidity-analyzer" "^0.1.0" + "@sentry/node" "^5.18.1" + "@types/bn.js" "^5.1.0" + "@types/lru-cache" "^5.1.0" + adm-zip "^0.4.16" + aggregate-error "^3.0.0" + ansi-escapes "^4.3.0" + chalk "^2.4.2" + chokidar "^3.4.0" + ci-info "^2.0.0" + debug "^4.1.1" + enquirer "^2.3.0" + env-paths "^2.2.0" + ethereum-cryptography "^1.0.3" + ethereumjs-abi "^0.6.8" + find-up "^2.1.0" + fp-ts "1.19.3" + fs-extra "^7.0.1" + glob "7.2.0" + immutable "^4.0.0-rc.12" + io-ts "1.10.4" + keccak "^3.0.2" + lodash "^4.17.11" + mnemonist "^0.38.0" + mocha "^10.0.0" + p-map "^4.0.0" + raw-body "^2.4.1" + resolve "1.17.0" + semver "^6.3.0" + solc "0.7.3" + source-map-support "^0.5.13" + stacktrace-parser "^0.1.10" + tsort "0.0.1" + undici "^5.14.0" + uuid "^8.3.2" + ws "^7.4.6" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== +has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +hash-base@^3.0.0, hash-base@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/hash-base/-/hash-base-3.1.2.tgz#79d72def7611c3f6e3c3b5730652638001b10a74" + integrity sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg== + dependencies: + inherits "^2.0.4" + readable-stream "^2.3.8" + safe-buffer "^5.2.1" + to-buffer "^1.2.1" + +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: + version "1.1.7" + resolved "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +http-errors@~2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz#36d2f65bc909c8790018dd36fb4d93da6caae06b" + integrity sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ== + dependencies: + depd "~2.0.0" + inherits "~2.0.4" + setprototypeof "~1.2.0" + statuses "~2.0.2" + toidentifier "~1.0.1" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + husky@9.1.7: version "9.1.7" - resolved "https://registry.yarnpkg.com/husky/-/husky-9.1.7.tgz#d46a38035d101b46a70456a850ff4201344c0b2d" + resolved "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz#d46a38035d101b46a70456a850ff4201344c0b2d" integrity sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA== +iconv-lite@~0.4.24: + version "0.4.24" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + ignore@^5.2.0, ignore@^5.3.1: version "5.3.2" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== +immutable@^4.0.0-rc.12: + version "4.3.7" + resolved "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz#c70145fc90d89fb02021e65c84eb0226e4e5a381" + integrity sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw== + import-fresh@^3.2.1: version "3.3.1" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" +imul@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz#9d5867161e8b3de96c2c38d5dc7cb102f35e2ac9" + integrity sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA== + imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@~2.0.4: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +io-ts@1.10.4: + version "1.10.4" + resolved "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" + integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g== + dependencies: + fp-ts "^1.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-buffer@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" +is-hex-prefixed@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" + integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== + is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-typed-array@^1.1.14: + version "1.1.15" + resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== + dependencies: + which-typed-array "^1.1.16" + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + isexe@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== isows@1.0.6: version "1.0.6" - resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.6.tgz#0da29d706fa51551c663c627ace42769850f86e7" + resolved "https://registry.npmjs.org/isows/-/isows-1.0.6.tgz#0da29d706fa51551c663c627ace42769850f86e7" integrity sha512-lPHCayd40oW98/I0uvgaHKWCSvkzY27LjWLbtzOm64yQ+G3Q5npjjbdppU65iZXkK1Zt+kH9pfegli0AYfwYYw== -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== +isows@1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/isows/-/isows-1.0.7.tgz#1c06400b7eed216fbba3bcbd68f12490fc342915" + integrity sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg== + +js-sdsl@^4.1.4: + version "4.4.2" + resolved "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847" + integrity sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w== + +js-sha3@0.8.0: + version "0.8.0" + resolved "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + +js-yaml@^4.1.0, js-yaml@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b" + integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== dependencies: argparse "^2.0.1" json-buffer@3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.2.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz#7c265bd1b65de6977478300087c99f1c84383f62" + integrity sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +keccak@3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" + integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + +keccak@^3.0.0, keccak@^3.0.2: + version "3.0.4" + resolved "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz#edc09b89e633c0549da444432ecf062ffadee86d" + integrity sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + keyv@^4.5.4: version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" +klaw@^1.0.0: + version "1.3.1" + resolved "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" + integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw== + optionalDependencies: + graceful-fs "^4.1.9" + +level-concat-iterator@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz#5235b1f744bc34847ed65a50548aa88d22e881cf" + integrity sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ== + dependencies: + catering "^2.1.0" + +level-supports@^2.0.1: + version "2.1.0" + resolved "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz#9af908d853597ecd592293b2fad124375be79c5f" + integrity sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA== + +level-supports@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz#431546f9d81f10ff0fea0e74533a0e875c08c66a" + integrity sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA== + +level-transcoder@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz#f8cef5990c4f1283d4c86d949e73631b0bc8ba9c" + integrity sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w== + dependencies: + buffer "^6.0.3" + module-error "^1.0.1" + +level@^8.0.0: + version "8.0.1" + resolved "https://registry.npmjs.org/level/-/level-8.0.1.tgz#737161db1bc317193aca4e7b6f436e7e1df64379" + integrity sha512-oPBGkheysuw7DmzFQYyFe8NAia5jFLAgEnkgWnK3OXAuJr8qFT+xBQIwokAZPME2bhPFzS8hlYcL16m8UZrtwQ== + dependencies: + abstract-level "^1.0.4" + browser-level "^1.0.1" + classic-level "^1.2.0" + +leveldown@6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/leveldown/-/leveldown-6.1.0.tgz#7ab1297706f70c657d1a72b31b40323aa612b9ee" + integrity sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w== + dependencies: + abstract-leveldown "^7.2.0" + napi-macros "~2.0.0" + node-gyp-build "^4.3.0" + levn@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: prelude-ls "^1.2.1" type-check "~0.4.0" +loady@~0.0.5: + version "0.0.5" + resolved "https://registry.npmjs.org/loady/-/loady-0.0.5.tgz#b17adb52d2fb7e743f107b0928ba0b591da5d881" + integrity sha512-uxKD2HIj042/HBx77NBcmEPsD+hxCgAtjEWlYNScuUjIsh/62Uyu39GOR68TBR68v+jqDL9zfftCWoUo4y03sQ== + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + locate-path@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: p-locate "^5.0.0" lodash.merge@^4.6.2: version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== +lodash@^4.17.11, lodash@^4.17.14: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +loupe@^2.3.6: + version "2.3.7" + resolved "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" + integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== + dependencies: + get-func-name "^2.0.1" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru_map@^0.3.3: + version "0.3.3" + resolved "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" + integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== + +match-all@^1.2.6: + version "1.2.7" + resolved "https://registry.npmjs.org/match-all/-/match-all-1.2.7.tgz#3c03b7f7ee372ae177aac5eca08c3ad6af59633a" + integrity sha512-qSpsBKarh55r9KyXzFC3xBLRf2GlGasba2em9kbpRsSlGvdTAqjx3QD0r3FKSARiW+OE4iMHYsolM3aX9n5djw== + +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + +mcl-wasm@^0.7.1: + version "0.7.9" + resolved "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" + integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + mdast-util-from-markdown@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz#4850390ca7cf17413a9b9a0fbefcd1bc0eb4160a" + resolved "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz#4850390ca7cf17413a9b9a0fbefcd1bc0eb4160a" integrity sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA== dependencies: "@types/mdast" "^4.0.0" @@ -972,19 +4013,33 @@ mdast-util-from-markdown@^2.0.0: mdast-util-to-string@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz#7a5121475556a04e7eddeb67b264aae79d312814" + resolved "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz#7a5121475556a04e7eddeb67b264aae79d312814" integrity sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg== dependencies: "@types/mdast" "^4.0.0" +memory-level@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/memory-level/-/memory-level-1.0.0.tgz#7323c3fd368f9af2f71c3cd76ba403a17ac41692" + integrity sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og== + dependencies: + abstract-level "^1.0.0" + functional-red-black-tree "^1.0.1" + module-error "^1.0.1" + +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== + merge2@^1.3.0: version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== micromark-core-commonmark@^2.0.0: version "2.0.3" - resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz#c691630e485021a68cf28dbc2b2ca27ebf678cd4" + resolved "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz#c691630e485021a68cf28dbc2b2ca27ebf678cd4" integrity sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg== dependencies: decode-named-character-reference "^1.0.0" @@ -1006,7 +4061,7 @@ micromark-core-commonmark@^2.0.0: micromark-factory-destination@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz#8fef8e0f7081f0474fbdd92deb50c990a0264639" + resolved "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz#8fef8e0f7081f0474fbdd92deb50c990a0264639" integrity sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA== dependencies: micromark-util-character "^2.0.0" @@ -1015,7 +4070,7 @@ micromark-factory-destination@^2.0.0: micromark-factory-label@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz#5267efa97f1e5254efc7f20b459a38cb21058ba1" + resolved "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz#5267efa97f1e5254efc7f20b459a38cb21058ba1" integrity sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg== dependencies: devlop "^1.0.0" @@ -1025,7 +4080,7 @@ micromark-factory-label@^2.0.0: micromark-factory-space@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz#36d0212e962b2b3121f8525fc7a3c7c029f334fc" + resolved "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz#36d0212e962b2b3121f8525fc7a3c7c029f334fc" integrity sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg== dependencies: micromark-util-character "^2.0.0" @@ -1033,7 +4088,7 @@ micromark-factory-space@^2.0.0: micromark-factory-title@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz#237e4aa5d58a95863f01032d9ee9b090f1de6e94" + resolved "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz#237e4aa5d58a95863f01032d9ee9b090f1de6e94" integrity sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw== dependencies: micromark-factory-space "^2.0.0" @@ -1043,7 +4098,7 @@ micromark-factory-title@^2.0.0: micromark-factory-whitespace@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz#06b26b2983c4d27bfcc657b33e25134d4868b0b1" + resolved "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz#06b26b2983c4d27bfcc657b33e25134d4868b0b1" integrity sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ== dependencies: micromark-factory-space "^2.0.0" @@ -1053,7 +4108,7 @@ micromark-factory-whitespace@^2.0.0: micromark-util-character@^2.0.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-2.1.1.tgz#2f987831a40d4c510ac261e89852c4e9703ccda6" + resolved "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz#2f987831a40d4c510ac261e89852c4e9703ccda6" integrity sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q== dependencies: micromark-util-symbol "^2.0.0" @@ -1061,14 +4116,14 @@ micromark-util-character@^2.0.0: micromark-util-chunked@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz#47fbcd93471a3fccab86cff03847fc3552db1051" + resolved "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz#47fbcd93471a3fccab86cff03847fc3552db1051" integrity sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA== dependencies: micromark-util-symbol "^2.0.0" micromark-util-classify-character@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz#d399faf9c45ca14c8b4be98b1ea481bced87b629" + resolved "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz#d399faf9c45ca14c8b4be98b1ea481bced87b629" integrity sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q== dependencies: micromark-util-character "^2.0.0" @@ -1077,7 +4132,7 @@ micromark-util-classify-character@^2.0.0: micromark-util-combine-extensions@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz#2a0f490ab08bff5cc2fd5eec6dd0ca04f89b30a9" + resolved "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz#2a0f490ab08bff5cc2fd5eec6dd0ca04f89b30a9" integrity sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg== dependencies: micromark-util-chunked "^2.0.0" @@ -1085,14 +4140,14 @@ micromark-util-combine-extensions@^2.0.0: micromark-util-decode-numeric-character-reference@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz#fcf15b660979388e6f118cdb6bf7d79d73d26fe5" + resolved "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz#fcf15b660979388e6f118cdb6bf7d79d73d26fe5" integrity sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw== dependencies: micromark-util-symbol "^2.0.0" micromark-util-decode-string@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz#6cb99582e5d271e84efca8e61a807994d7161eb2" + resolved "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz#6cb99582e5d271e84efca8e61a807994d7161eb2" integrity sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ== dependencies: decode-named-character-reference "^1.0.0" @@ -1102,31 +4157,31 @@ micromark-util-decode-string@^2.0.0: micromark-util-encode@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz#0d51d1c095551cfaac368326963cf55f15f540b8" + resolved "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz#0d51d1c095551cfaac368326963cf55f15f540b8" integrity sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw== micromark-util-html-tag-name@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz#e40403096481986b41c106627f98f72d4d10b825" + resolved "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz#e40403096481986b41c106627f98f72d4d10b825" integrity sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA== micromark-util-normalize-identifier@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz#c30d77b2e832acf6526f8bf1aa47bc9c9438c16d" + resolved "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz#c30d77b2e832acf6526f8bf1aa47bc9c9438c16d" integrity sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q== dependencies: micromark-util-symbol "^2.0.0" micromark-util-resolve-all@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz#e1a2d62cdd237230a2ae11839027b19381e31e8b" + resolved "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz#e1a2d62cdd237230a2ae11839027b19381e31e8b" integrity sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg== dependencies: micromark-util-types "^2.0.0" micromark-util-sanitize-uri@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz#ab89789b818a58752b73d6b55238621b7faa8fd7" + resolved "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz#ab89789b818a58752b73d6b55238621b7faa8fd7" integrity sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ== dependencies: micromark-util-character "^2.0.0" @@ -1135,7 +4190,7 @@ micromark-util-sanitize-uri@^2.0.0: micromark-util-subtokenize@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz#d8ade5ba0f3197a1cf6a2999fbbfe6357a1a19ee" + resolved "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz#d8ade5ba0f3197a1cf6a2999fbbfe6357a1a19ee" integrity sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA== dependencies: devlop "^1.0.0" @@ -1145,17 +4200,17 @@ micromark-util-subtokenize@^2.0.0: micromark-util-symbol@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz#e5da494e8eb2b071a0d08fb34f6cefec6c0a19b8" + resolved "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz#e5da494e8eb2b071a0d08fb34f6cefec6c0a19b8" integrity sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q== micromark-util-types@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.2.tgz#f00225f5f5a0ebc3254f96c36b6605c4b393908e" + resolved "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz#f00225f5f5a0ebc3254f96c36b6605c4b393908e" integrity sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA== micromark@^4.0.0: version "4.0.2" - resolved "https://registry.yarnpkg.com/micromark/-/micromark-4.0.2.tgz#91395a3e1884a198e62116e33c9c568e39936fdb" + resolved "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz#91395a3e1884a198e62116e33c9c568e39936fdb" integrity sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA== dependencies: "@types/debug" "^4.0.0" @@ -1178,39 +4233,187 @@ micromark@^4.0.0: micromatch@^4.0.8: version "4.0.8" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== dependencies: braces "^3.0.3" picomatch "^2.3.1" -minimatch@^3.1.2: +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" +minimatch@^5.0.1, minimatch@^5.1.6: + version "5.1.6" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + minimatch@^9.0.4: version "9.0.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: brace-expansion "^2.0.1" +mnemonist@^0.38.0: + version "0.38.5" + resolved "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" + integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg== + dependencies: + obliterator "^2.0.0" + +mocha@^10.0.0: + version "10.8.2" + resolved "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz#8d8342d016ed411b12a429eb731b825f961afb96" + integrity sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg== + dependencies: + ansi-colors "^4.1.3" + browser-stdout "^1.3.1" + chokidar "^3.5.3" + debug "^4.3.5" + diff "^5.2.0" + escape-string-regexp "^4.0.0" + find-up "^5.0.0" + glob "^8.1.0" + he "^1.2.0" + js-yaml "^4.1.0" + log-symbols "^4.1.0" + minimatch "^5.1.6" + ms "^2.1.3" + serialize-javascript "^6.0.2" + strip-json-comments "^3.1.1" + supports-color "^8.1.1" + workerpool "^6.5.1" + yargs "^16.2.0" + yargs-parser "^20.2.9" + yargs-unparser "^2.0.0" + +module-error@^1.0.1, module-error@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" + integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== + ms@^2.1.3: version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +murmur-128@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/murmur-128/-/murmur-128-0.2.1.tgz#a9f6568781d2350ecb1bf80c14968cadbeaa4b4d" + integrity sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg== + dependencies: + encode-utf8 "^1.0.2" + fmix "^0.1.0" + imul "^1.0.0" + +mute-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" + integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== + +nan@2.14.0: + version "2.14.0" + resolved "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" + integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== + +nan@^2.14.0: + version "2.24.0" + resolved "https://registry.npmjs.org/nan/-/nan-2.24.0.tgz#a8919b36e692aa5b260831910e4f81419fc0a283" + integrity sha512-Vpf9qnVW1RaDkoNKFUvfxqAbtI8ncb8OJlqZ9wwpXzWPEsvsB1nvdUi6oYrHIkQ1Y/tMDnr1h4nczS0VB9Xykg== + +napi-macros@^2.2.2: + version "2.2.2" + resolved "https://registry.npmjs.org/napi-macros/-/napi-macros-2.2.2.tgz#817fef20c3e0e40a963fbf7b37d1600bd0201044" + integrity sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g== + +napi-macros@~2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" + integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== + natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== +neoqs@^6.13.0: + version "6.13.0" + resolved "https://registry.npmjs.org/neoqs/-/neoqs-6.13.0.tgz#a034bccafefdf8c01fcf4f45fee0aed4b75b4944" + integrity sha512-IysBpjrEG9qiUb/IT6XrXSz2ASzBxLebp4s8/GBm7STYC315vMNqH0aWdRR+f7KvXK4aRlLcf5r2Z6dOTxQSrQ== + +node-addon-api@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" + integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== + +node-addon-api@^5.0.0: + version "5.1.0" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz#49da1ca055e109a23d537e9de43c09cca21eb762" + integrity sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA== + +node-gyp-build@4.4.0: + version "4.4.0" + resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz#42e99687ce87ddeaf3a10b99dc06abc11021f3f4" + integrity sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ== + +node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: + version "4.8.4" + resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8" + integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ== + +nofilter@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz#c757ba68801d41ff930ba2ec55bab52ca184aa66" + integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +obliterator@^2.0.0: + version "2.0.5" + resolved "https://registry.npmjs.org/obliterator/-/obliterator-2.0.5.tgz#031e0145354b0c18840336ae51d41e7d6d2c76aa" + integrity sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw== + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + optionator@^0.9.3: version "0.9.4" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== dependencies: deep-is "^0.1.3" @@ -1220,9 +4423,28 @@ optionator@^0.9.3: type-check "^0.4.0" word-wrap "^1.2.5" +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +ox@0.11.3: + version "0.11.3" + resolved "https://registry.npmjs.org/ox/-/ox-0.11.3.tgz#f50be1cae88822f5111b1e3f4a324c4c07eed422" + integrity sha512-1bWYGk/xZel3xro3l8WGg6eq4YEKlaqvyMtVhfMFpbJzK2F6rj4EDRtqDCWVEJMkzcmEi9uW2QxsqELokOlarw== + dependencies: + "@adraffy/ens-normalize" "^1.11.0" + "@noble/ciphers" "^1.3.0" + "@noble/curves" "1.9.1" + "@noble/hashes" "^1.8.0" + "@scure/bip32" "^1.7.0" + "@scure/bip39" "^1.6.0" + abitype "^1.2.3" + eventemitter3 "5.0.1" + ox@0.6.9: version "0.6.9" - resolved "https://registry.yarnpkg.com/ox/-/ox-0.6.9.tgz#da1ee04fa10de30c8d04c15bfb80fe58b1f554bd" + resolved "https://registry.npmjs.org/ox/-/ox-0.6.9.tgz#da1ee04fa10de30c8d04c15bfb80fe58b1f554bd" integrity sha512-wi5ShvzE4eOcTwQVsIPdFr+8ycyX+5le/96iAJutaZAvCes1J0+RvpEPg5QDPDiaR0XQQAvZVl7AwqQcINuUug== dependencies: "@adraffy/ens-normalize" "^1.10.1" @@ -1233,57 +4455,120 @@ ox@0.6.9: abitype "^1.0.6" eventemitter3 "5.0.1" +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + p-limit@^3.0.2: version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== + dependencies: + p-limit "^1.1.0" + p-locate@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: p-limit "^3.0.2" +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== + parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + path-key@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -picomatch@^2.3.1: +path-parse@^1.0.6: + version "1.0.7" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + +pbkdf2@^3.0.17: + version "3.1.5" + resolved "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.5.tgz#444a59d7a259a95536c56e80c89de31cc01ed366" + integrity sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ== + dependencies: + create-hash "^1.2.0" + create-hmac "^1.1.7" + ripemd160 "^2.0.3" + safe-buffer "^5.2.1" + sha.js "^2.4.12" + to-buffer "^1.2.1" + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +possible-typed-array-names@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" + integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== + prelude-ls@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + version "1.0.1" + resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz#6a31f88a4bad6c7adda253de12ba4edaea80ebcd" + integrity sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg== dependencies: fast-diff "^1.1.2" prettier-plugin-jsdoc@1.3.2: version "1.3.2" - resolved "https://registry.yarnpkg.com/prettier-plugin-jsdoc/-/prettier-plugin-jsdoc-1.3.2.tgz#9a03581edc4a5313abe872f0083e3189f7edaaf1" + resolved "https://registry.npmjs.org/prettier-plugin-jsdoc/-/prettier-plugin-jsdoc-1.3.2.tgz#9a03581edc4a5313abe872f0083e3189f7edaaf1" integrity sha512-LNi9eq0TjyZn/PUNf/SYQxxUvGg5FLK4alEbi3i/S+2JbMyTu790c/puFueXzx09KP44oWCJ+TaHRyM/a0rKJQ== dependencies: binary-searching "^2.0.5" @@ -1292,124 +4577,587 @@ prettier-plugin-jsdoc@1.3.2: prettier-plugin-organize-imports@4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-4.1.0.tgz#f3d3764046a8e7ba6491431158b9be6ffd83b90f" + resolved "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-4.1.0.tgz#f3d3764046a8e7ba6491431158b9be6ffd83b90f" integrity sha512-5aWRdCgv645xaa58X8lOxzZoiHAldAPChljr/MT0crXVOWTZ+Svl4hIWlz+niYSlO6ikE5UXkN1JrRvIP2ut0A== prettier@*: - version "3.6.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.6.2.tgz#ccda02a1003ebbb2bfda6f83a074978f608b9393" - integrity sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ== + version "3.8.0" + resolved "https://registry.npmjs.org/prettier/-/prettier-3.8.0.tgz#f72cf71505133f40cfa2ef77a2668cdc558fcd69" + integrity sha512-yEPsovQfpxYfgWNhCfECjG5AQaO+K3dp6XERmOepyPDVqcJm+bjyCVO3pmU+nAPe0N5dDvekfGezt/EIiRe1TA== prettier@3.5.3: version "3.5.3" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.5.3.tgz#4fc2ce0d657e7a02e602549f053b239cb7dfe1b5" + resolved "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz#4fc2ce0d657e7a02e602549f053b239cb7dfe1b5" integrity sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw== +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + punycode@^2.1.0: version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== -queue-microtask@^1.2.2: +queue-microtask@^1.2.2, queue-microtask@^1.2.3: version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +raw-body@^2.4.1: + version "2.5.3" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz#11c6650ee770a7de1b494f197927de0c923822e2" + integrity sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA== + dependencies: + bytes "~3.1.2" + http-errors "~2.0.1" + iconv-lite "~0.4.24" + unpipe "~1.0.0" + +readable-stream@^2.3.8: + version "2.3.8" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve@1.17.0: + version "1.17.0" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + reusify@^1.0.4: version "1.1.0" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== +rimraf@^2.2.8: + version "2.7.1" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1, ripemd160@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.3.tgz#9be54e4ba5e3559c8eee06a25cd7648bbccdf5a8" + integrity sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA== + dependencies: + hash-base "^3.1.2" + inherits "^2.0.4" + +rlp@^2.2.3, rlp@^2.2.4: + version "2.2.7" + resolved "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" + integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== + dependencies: + bn.js "^5.2.0" + +run-async@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz#42a432f6d76c689522058984384df28be379daad" + integrity sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q== + +run-parallel-limit@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" + integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw== + dependencies: + queue-microtask "^1.2.2" + run-parallel@^1.1.9: version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" +rustbn.js@~0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" + integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +scrypt-js@3.0.1, scrypt-js@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + +secp256k1@3.7.1: + version "3.7.1" + resolved "https://registry.npmjs.org/secp256k1/-/secp256k1-3.7.1.tgz#12e473e0e9a7c2f2d4d4818e722ad0e14cc1e2f1" + integrity sha512-1cf8sbnRreXrQFdH6qsg2H71Xw91fCCS9Yp021GnUNJzWJS/py96fS4lHbnTnouLp08Xj6jBoBB6V78Tdbdu5g== + dependencies: + bindings "^1.5.0" + bip66 "^1.1.5" + bn.js "^4.11.8" + create-hash "^1.2.0" + drbg.js "^1.0.1" + elliptic "^6.4.1" + nan "^2.14.0" + safe-buffer "^5.1.2" + +secp256k1@4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" + integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== + dependencies: + elliptic "^6.5.4" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + +secp256k1@5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/secp256k1/-/secp256k1-5.0.1.tgz#dc2c86187d48ff2da756f0f7e96417ee03c414b1" + integrity sha512-lDFs9AAIaWP9UCdtWrotXWWF9t8PWgQDcxqgAnpM9rMqxb3Oaq2J0thzPVSxBwdJgyQtkU/sYtFtbM1RSt/iYA== + dependencies: + elliptic "^6.5.7" + node-addon-api "^5.0.0" + node-gyp-build "^4.2.0" + +secp256k1@^4.0.1: + version "4.0.4" + resolved "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.4.tgz#58f0bfe1830fe777d9ca1ffc7574962a8189f8ab" + integrity sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw== + dependencies: + elliptic "^6.5.7" + node-addon-api "^5.0.0" + node-gyp-build "^4.2.0" + +semver@^5.5.0: + version "5.7.2" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@^6.3.0: + version "6.3.1" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + semver@^7.6.0: - version "7.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" - integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== + version "7.7.3" + resolved "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946" + integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== + +serialize-javascript@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== + dependencies: + randombytes "^2.1.0" + +set-function-length@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +setprototypeof@~1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +sha.js@^2.4.0, sha.js@^2.4.12, sha.js@^2.4.8: + version "2.4.12" + resolved "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz#eb8b568bf383dfd1867a32c3f2b74eb52bdbf23f" + integrity sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w== + dependencies: + inherits "^2.0.4" + safe-buffer "^5.2.1" + to-buffer "^1.2.0" shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +signal-exit@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +solc@0.7.3: + version "0.7.3" + resolved "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" + integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA== + dependencies: + command-exists "^1.2.8" + commander "3.0.2" + follow-redirects "^1.12.1" + fs-extra "^0.30.0" + js-sha3 "0.8.0" + memorystream "^0.3.1" + require-from-string "^2.0.0" + semver "^5.5.0" + tmp "0.0.33" + +source-map-support@^0.5.13: + version "0.5.21" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +stacktrace-parser@^0.1.10: + version "0.1.11" + resolved "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz#c7c08f9b29ef566b9a6f7b255d7db572f66fabc4" + integrity sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg== + dependencies: + type-fest "^0.7.1" + +statuses@~2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" + integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-hex-prefix@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" + integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== + dependencies: + is-hex-prefixed "1.0.0" + strip-json-comments@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" +supports-color@^8.1.1: + version "8.1.1" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + synckit@^0.11.0: - version "0.11.11" - resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.11.11.tgz#c0b619cf258a97faa209155d9cd1699b5c998cb0" - integrity sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw== + version "0.11.12" + resolved "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz#abe74124264fbc00a48011b0d98bdc1cffb64a7b" + integrity sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ== dependencies: "@pkgr/core" "^0.2.9" +tmp@0.0.33: + version "0.0.33" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-buffer@^1.2.0, to-buffer@^1.2.1, to-buffer@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz#ffe59ef7522ada0a2d1cb5dfe03bb8abc3cdc133" + integrity sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw== + dependencies: + isarray "^2.0.5" + safe-buffer "^5.2.1" + typed-array-buffer "^1.0.3" + to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" +toidentifier@~1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + ts-api-utils@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz#595f7094e46eed364c13fd23e75f9513d29baf91" - integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ== + version "2.4.0" + resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz#2690579f96d2790253bdcf1ca35d569ad78f9ad8" + integrity sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA== + +tslib@2.7.0: + version "2.7.0" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" + integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== + +tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tsort@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" + integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== + +tweetnacl-util@^0.15.1: + version "0.15.1" + resolved "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" + integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== + +tweetnacl@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" + integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: prelude-ls "^1.2.1" +type-detect@^4.0.0, type-detect@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz#deb2453e8f08dcae7ae98c626b13dddb0155906c" + integrity sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.7.1: + version "0.7.1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" + integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== + +typed-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" + integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-typed-array "^1.1.14" + typescript@5.8.3: version "5.8.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.3.tgz#92f8a3e5e3cf497356f4178c34cd65a7f5e8440e" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz#92f8a3e5e3cf497356f4178c34cd65a7f5e8440e" integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== +typescript@^5.9.3: + version "5.9.3" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f" + integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw== + +undici-types@~6.19.2: + version "6.19.8" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== + +undici-types@~6.21.0: + version "6.21.0" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" + integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== + +undici-types@~7.16.0: + version "7.16.0" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz#ffccdff36aea4884cbfce9a750a0580224f58a46" + integrity sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw== + +undici@^5.14.0: + version "5.29.0" + resolved "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz#419595449ae3f2cdcba3580a2e8903399bd1f5a3" + integrity sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg== + dependencies: + "@fastify/busboy" "^2.0.0" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA== + unist-util-stringify-position@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz#449c6e21a880e0855bf5aabadeb3a740314abac2" + resolved "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz#449c6e21a880e0855bf5aabadeb3a740314abac2" integrity sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ== dependencies: "@types/unist" "^3.0.0" +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" -viem@2.26.2: - version "2.26.2" - resolved "https://registry.yarnpkg.com/viem/-/viem-2.26.2.tgz#0095676262ffe44bf5a6c7f8a221a4b81bc766d7" - integrity sha512-+yXSl1n+jV/Kn/zpETiNq0WOcINXti29nxdPIONvvNh+Es0VfeusW8bb2okVfa55pmuc8kOCOpB5wq3ZIUCTSA== +utf-8-validate@5.0.7: + version "5.0.7" + resolved "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz#c15a19a6af1f7ad9ec7ddc425747ca28c3644922" + integrity sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q== + dependencies: + node-gyp-build "^4.3.0" + +utf-8-validate@6.0.3: + version "6.0.3" + resolved "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-6.0.3.tgz#7d8c936d854e86b24d1d655f138ee27d2636d777" + integrity sha512-uIuGf9TWQ/y+0Lp+KGZCMuJWc3N9BHA+l/UmHd/oUHwJJDeysyTRxNQVkbzsIWfGFbRe3OcgML/i0mvVRPOyDA== + dependencies: + node-gyp-build "^4.3.0" + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +viem@2.24.2: + version "2.24.2" + resolved "https://registry.npmjs.org/viem/-/viem-2.24.2.tgz#68aac43c35e8d73587bbdab2c547579dd60ebb80" + integrity sha512-lUGoTHhMYlR4ktQiOrbTPmYvrMn3jKUdn2PSmB9QLICxnsQJxMkSCeGRoJFq7hi7K6PCMQgAyLMR/9J1key5cg== dependencies: "@noble/curves" "1.8.1" "@noble/hashes" "1.7.1" @@ -1420,24 +5168,159 @@ viem@2.26.2: ox "0.6.9" ws "8.18.1" +viem@^2.40.3: + version "2.44.4" + resolved "https://registry.npmjs.org/viem/-/viem-2.44.4.tgz#f749f038f9bd5a93b959319a35a1554803a09c2e" + integrity sha512-sJDLVl2EsS5Fo7GSWZME5CXEV7QRYkUJPeBw7ac+4XI3D4ydvMw/gjulTsT5pgqcpu70BploFnOAC6DLpan1Yg== + dependencies: + "@noble/curves" "1.9.1" + "@noble/hashes" "1.8.0" + "@scure/bip32" "1.7.0" + "@scure/bip39" "1.6.0" + abitype "1.2.3" + isows "1.0.7" + ox "0.11.3" + ws "8.18.3" + +which-typed-array@^1.1.16: + version "1.1.20" + resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz#3fdb7adfafe0ea69157b1509f3a1cd892bd1d122" + integrity sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + for-each "^0.3.5" + get-proto "^1.0.1" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + which@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" word-wrap@^1.2.5: version "1.2.5" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== +workerpool@^6.5.1: + version "6.5.1" + resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz#060f73b39d0caf97c6db64da004cd01b4c099544" + integrity sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA== + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@7.4.6: + version "7.4.6" + resolved "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + +ws@8.13.0: + version "8.13.0" + resolved "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== + +ws@8.17.1: + version "8.17.1" + resolved "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" + integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== + +ws@8.18.0: + version "8.18.0" + resolved "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== + ws@8.18.1: version "8.18.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.1.tgz#ea131d3784e1dfdff91adb0a4a116b127515e3cb" + resolved "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz#ea131d3784e1dfdff91adb0a4a116b127515e3cb" integrity sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w== +ws@8.18.3: + version "8.18.3" + resolved "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" + integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== + +ws@^7.4.6: + version "7.5.10" + resolved "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yaml@^2.2.2: + version "2.8.2" + resolved "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz#5694f25eca0ce9c3e7a9d9e00ce0ddabbd9e35c5" + integrity sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A== + +yargs-parser@^20.2.2, yargs-parser@^20.2.9: + version "20.2.9" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-unparser@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + yocto-queue@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zksync-ethers@^5.0.0: + version "5.11.1" + resolved "https://registry.npmjs.org/zksync-ethers/-/zksync-ethers-5.11.1.tgz#17cf4e6195e8922a607e816846afea7ac07ae831" + integrity sha512-Znl2p0gporGnHbAO0KKM1TIQpyRQKCi8nf1kOlZuTVCvlgBwhweWjTy53le96ZOoR3J5LUXAk7aYil2czSLJZw== + dependencies: + ethers "~5.7.0" From b02bc06266f2c1ce50b1db2edd946adfe1d422c9 Mon Sep 17 00:00:00 2001 From: Roman Yarlykov Date: Mon, 19 Jan 2026 15:52:13 +0500 Subject: [PATCH 2/5] refactor: --- dist/index.cjs.js | 2856 +++-------------- dist/index.cjs.js.map | 8 +- dist/index.esm.js | 2769 ++-------------- dist/index.esm.js.map | 8 +- dist/types/src/constants/conceroNetworks.d.ts | 2 +- .../src/constants/deploymentVariables.d.ts | 3 +- dist/types/src/deploy/GenericDeploy.d.ts | 11 +- dist/types/src/index.d.ts | 14 +- dist/types/src/networks/index.d.ts | 7 +- dist/types/src/types/ConceroNetwork.d.ts | 41 + dist/types/src/types/index.d.ts | 2 + dist/types/src/types/networkTypes.d.ts | 2 + dist/types/src/utils/compileContracts.d.ts | 9 + dist/types/src/utils/createDotEnvLoader.d.ts | 6 + dist/types/src/utils/createEnvUpdater.d.ts | 8 + dist/types/src/utils/createViemChain.d.ts | 2 +- .../src/utils/ethersSignerCallContract.d.ts | 3 + .../src/utils/extractProxyAdminAddress.d.ts | 2 + dist/types/src/utils/formatting.d.ts | 3 + dist/types/src/utils/getActualGasData.d.ts | 8 + dist/types/src/utils/getEnvVar.d.ts | 10 +- dist/types/src/utils/getViemClients.d.ts | 34 + dist/types/src/utils/getWallet.d.ts | 4 +- dist/types/src/utils/index.d.ts | 20 +- dist/types/src/utils/loadEnvFiles.d.ts | 6 + dist/types/src/utils/localhostViemChain.d.ts | 82 + dist/types/types/networkTypes.d.ts | 2 + hardhat.d.ts | 9 + package.json | 7 +- src/constants/conceroNetworks.ts | 17 +- src/constants/deploymentVariables.ts | 50 - src/deploy/GenericDeploy.ts | 34 +- src/deploy/hardhatDeployWrapper.ts | 86 - src/index.ts | 41 +- src/networks/index.ts | 8 +- src/networks/networkTypes.ts | 7 - src/networks/types.ts | 11 - {types => src/types}/ConceroNetwork.ts | 1 + src/types/index.ts | 10 + src/types/networkTypes.ts | 7 + src/utils/compileContracts.ts | 29 + src/utils/createEnvUpdater.ts | 65 + src/utils/createViemChain.ts | 12 +- src/utils/ethersSignerCallContract.ts | 24 + src/utils/extractProxyAdminAddress.ts | 18 + src/utils/formatting.ts | 10 + src/{deploy => utils}/getActualGasData.ts | 0 src/utils/getEnvVar.ts | 32 +- src/utils/getTrezorDeployEnabled.ts | 2 +- src/utils/getViemClients.ts | 117 + src/utils/getWallet.ts | 8 +- src/utils/index.ts | 34 +- src/utils/localhostViemChain.ts | 29 + src/utils/updateEnvVariable.ts | 50 - types/deploymentVariables.ts | 27 - types/hardhat.d.ts | 9 - yarn.lock | 8 +- 57 files changed, 1434 insertions(+), 5250 deletions(-) create mode 100644 dist/types/src/types/ConceroNetwork.d.ts create mode 100644 dist/types/src/types/index.d.ts create mode 100644 dist/types/src/types/networkTypes.d.ts create mode 100644 dist/types/src/utils/compileContracts.d.ts create mode 100644 dist/types/src/utils/createDotEnvLoader.d.ts create mode 100644 dist/types/src/utils/createEnvUpdater.d.ts create mode 100644 dist/types/src/utils/ethersSignerCallContract.d.ts create mode 100644 dist/types/src/utils/extractProxyAdminAddress.d.ts create mode 100644 dist/types/src/utils/formatting.d.ts create mode 100644 dist/types/src/utils/getActualGasData.d.ts create mode 100644 dist/types/src/utils/getViemClients.d.ts create mode 100644 dist/types/src/utils/loadEnvFiles.d.ts create mode 100644 dist/types/src/utils/localhostViemChain.d.ts create mode 100644 dist/types/types/networkTypes.d.ts create mode 100644 hardhat.d.ts delete mode 100644 src/constants/deploymentVariables.ts delete mode 100644 src/deploy/hardhatDeployWrapper.ts delete mode 100644 src/networks/networkTypes.ts delete mode 100644 src/networks/types.ts rename {types => src/types}/ConceroNetwork.ts (99%) create mode 100644 src/types/index.ts create mode 100644 src/types/networkTypes.ts create mode 100644 src/utils/compileContracts.ts create mode 100644 src/utils/createEnvUpdater.ts create mode 100644 src/utils/ethersSignerCallContract.ts create mode 100644 src/utils/extractProxyAdminAddress.ts create mode 100644 src/utils/formatting.ts rename src/{deploy => utils}/getActualGasData.ts (100%) create mode 100644 src/utils/getViemClients.ts create mode 100644 src/utils/localhostViemChain.ts delete mode 100644 src/utils/updateEnvVariable.ts delete mode 100644 types/deploymentVariables.ts delete mode 100644 types/hardhat.d.ts diff --git a/dist/index.cjs.js b/dist/index.cjs.js index ced85ec..372d8d6 100644 --- a/dist/index.cjs.js +++ b/dist/index.cjs.js @@ -5,2304 +5,74 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; -var __esm = (fn, res) => function __init() { - return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; -}; -var __export = (target, all) => { - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); -}; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; -}; -var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, - mod -)); -var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); - -// node_modules/viem/_esm/errors/version.js -var version; -var init_version = __esm({ - "node_modules/viem/_esm/errors/version.js"() { - version = "2.24.2"; - } -}); - -// node_modules/viem/_esm/errors/base.js -function walk(err2, fn) { - if (fn?.(err2)) - return err2; - if (err2 && typeof err2 === "object" && "cause" in err2 && err2.cause !== void 0) - return walk(err2.cause, fn); - return fn ? null : err2; -} -var errorConfig, BaseError; -var init_base = __esm({ - "node_modules/viem/_esm/errors/base.js"() { - init_version(); - errorConfig = { - getDocsUrl: ({ docsBaseUrl, docsPath = "", docsSlug }) => docsPath ? `${docsBaseUrl ?? "https://viem.sh"}${docsPath}${docsSlug ? `#${docsSlug}` : ""}` : void 0, - version: `viem@${version}` - }; - BaseError = class _BaseError extends Error { - constructor(shortMessage, args = {}) { - const details = (() => { - if (args.cause instanceof _BaseError) - return args.cause.details; - if (args.cause?.message) - return args.cause.message; - return args.details; - })(); - const docsPath = (() => { - if (args.cause instanceof _BaseError) - return args.cause.docsPath || args.docsPath; - return args.docsPath; - })(); - const docsUrl = errorConfig.getDocsUrl?.({ ...args, docsPath }); - const message = [ - shortMessage || "An error occurred.", - "", - ...args.metaMessages ? [...args.metaMessages, ""] : [], - ...docsUrl ? [`Docs: ${docsUrl}`] : [], - ...details ? [`Details: ${details}`] : [], - ...errorConfig.version ? [`Version: ${errorConfig.version}`] : [] - ].join("\n"); - super(message, args.cause ? { cause: args.cause } : void 0); - Object.defineProperty(this, "details", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "docsPath", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "metaMessages", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "shortMessage", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "version", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "name", { - enumerable: true, - configurable: true, - writable: true, - value: "BaseError" - }); - this.details = details; - this.docsPath = docsPath; - this.metaMessages = args.metaMessages; - this.name = args.name ?? this.name; - this.shortMessage = shortMessage; - this.version = version; - } - walk(fn) { - return walk(this, fn); - } - }; - } -}); - -// node_modules/viem/_esm/utils/unit/formatUnits.js -function formatUnits(value, decimals) { - let display = value.toString(); - const negative = display.startsWith("-"); - if (negative) - display = display.slice(1); - display = display.padStart(decimals, "0"); - let [integer, fraction] = [ - display.slice(0, display.length - decimals), - display.slice(display.length - decimals) - ]; - fraction = fraction.replace(/(0+)$/, ""); - return `${negative ? "-" : ""}${integer || "0"}${fraction ? `.${fraction}` : ""}`; -} -var init_formatUnits = __esm({ - "node_modules/viem/_esm/utils/unit/formatUnits.js"() { - } -}); - -// node_modules/viem/_esm/constants/abis.js -var universalResolverErrors, universalResolverResolveAbi, universalResolverReverseAbi, erc20Abi; -var init_abis = __esm({ - "node_modules/viem/_esm/constants/abis.js"() { - universalResolverErrors = [ - { - inputs: [], - name: "ResolverNotFound", - type: "error" - }, - { - inputs: [], - name: "ResolverWildcardNotSupported", - type: "error" - }, - { - inputs: [], - name: "ResolverNotContract", - type: "error" - }, - { - inputs: [ - { - name: "returnData", - type: "bytes" - } - ], - name: "ResolverError", - type: "error" - }, - { - inputs: [ - { - components: [ - { - name: "status", - type: "uint16" - }, - { - name: "message", - type: "string" - } - ], - name: "errors", - type: "tuple[]" - } - ], - name: "HttpError", - type: "error" - } - ]; - universalResolverResolveAbi = [ - ...universalResolverErrors, - { - name: "resolve", - type: "function", - stateMutability: "view", - inputs: [ - { name: "name", type: "bytes" }, - { name: "data", type: "bytes" } - ], - outputs: [ - { name: "", type: "bytes" }, - { name: "address", type: "address" } - ] - }, - { - name: "resolve", - type: "function", - stateMutability: "view", - inputs: [ - { name: "name", type: "bytes" }, - { name: "data", type: "bytes" }, - { name: "gateways", type: "string[]" } - ], - outputs: [ - { name: "", type: "bytes" }, - { name: "address", type: "address" } - ] - } - ]; - universalResolverReverseAbi = [ - ...universalResolverErrors, - { - name: "reverse", - type: "function", - stateMutability: "view", - inputs: [{ type: "bytes", name: "reverseName" }], - outputs: [ - { type: "string", name: "resolvedName" }, - { type: "address", name: "resolvedAddress" }, - { type: "address", name: "reverseResolver" }, - { type: "address", name: "resolver" } - ] - }, - { - name: "reverse", - type: "function", - stateMutability: "view", - inputs: [ - { type: "bytes", name: "reverseName" }, - { type: "string[]", name: "gateways" } - ], - outputs: [ - { type: "string", name: "resolvedName" }, - { type: "address", name: "resolvedAddress" }, - { type: "address", name: "reverseResolver" }, - { type: "address", name: "resolver" } - ] - } - ]; - erc20Abi = [ - { - type: "event", - name: "Approval", - inputs: [ - { - indexed: true, - name: "owner", - type: "address" - }, - { - indexed: true, - name: "spender", - type: "address" - }, - { - indexed: false, - name: "value", - type: "uint256" - } - ] - }, - { - type: "event", - name: "Transfer", - inputs: [ - { - indexed: true, - name: "from", - type: "address" - }, - { - indexed: true, - name: "to", - type: "address" - }, - { - indexed: false, - name: "value", - type: "uint256" - } - ] - }, - { - type: "function", - name: "allowance", - stateMutability: "view", - inputs: [ - { - name: "owner", - type: "address" - }, - { - name: "spender", - type: "address" - } - ], - outputs: [ - { - type: "uint256" - } - ] - }, - { - type: "function", - name: "approve", - stateMutability: "nonpayable", - inputs: [ - { - name: "spender", - type: "address" - }, - { - name: "amount", - type: "uint256" - } - ], - outputs: [ - { - type: "bool" - } - ] - }, - { - type: "function", - name: "balanceOf", - stateMutability: "view", - inputs: [ - { - name: "account", - type: "address" - } - ], - outputs: [ - { - type: "uint256" - } - ] - }, - { - type: "function", - name: "decimals", - stateMutability: "view", - inputs: [], - outputs: [ - { - type: "uint8" - } - ] - }, - { - type: "function", - name: "name", - stateMutability: "view", - inputs: [], - outputs: [ - { - type: "string" - } - ] - }, - { - type: "function", - name: "symbol", - stateMutability: "view", - inputs: [], - outputs: [ - { - type: "string" - } - ] - }, - { - type: "function", - name: "totalSupply", - stateMutability: "view", - inputs: [], - outputs: [ - { - type: "uint256" - } - ] - }, - { - type: "function", - name: "transfer", - stateMutability: "nonpayable", - inputs: [ - { - name: "recipient", - type: "address" - }, - { - name: "amount", - type: "uint256" - } - ], - outputs: [ - { - type: "bool" - } - ] - }, - { - type: "function", - name: "transferFrom", - stateMutability: "nonpayable", - inputs: [ - { - name: "sender", - type: "address" - }, - { - name: "recipient", - type: "address" - }, - { - name: "amount", - type: "uint256" - } - ], - outputs: [ - { - type: "bool" - } - ] - } - ]; - } -}); - -// src/index.ts -var index_exports = {}; -__export(index_exports, { - TokenSender: () => TokenSender, - config: () => config, - genericDeploy: () => genericDeploy, - getNetworkEnvKey: () => getNetworkEnvKey, - getNetworkKey: () => getNetworkKey, - hardhatDeployWrapper: () => hardhatDeployWrapper, - networkTypes: () => networkTypes -}); -module.exports = __toCommonJS(index_exports); - -// src/constants/config.ts -var config = { - DEFAULT_BLOCK_CONFIRMATIONS: 2 -}; - -// src/networks/getNetworkEnvKey.ts -function getNetworkEnvKey(networkName) { - if (!networkName) { - throw new Error("Network name must be provided"); - } - return camelCaseToCapsSnakeCase(networkName); -} -function getNetworkKey(NETWORK_NAME) { - if (!NETWORK_NAME) { - throw new Error("Network name must be provided"); - } - return capsSnakeCaseToCamelCase(NETWORK_NAME); -} -function capsSnakeCaseToCamelCase(snakeCaseString) { - if (!snakeCaseString) { - throw new Error("String must be provided"); - } - return snakeCaseString.toLowerCase().replace(/_([a-z])/g, (_, char) => char.toUpperCase()); -} -function camelCaseToCapsSnakeCase(camelCaseString) { - if (!camelCaseString) { - throw new Error("String must be provided"); - } - return camelCaseString.replace(/([a-z0-9])([A-Z])/g, "$1_$2").toUpperCase(); -} - -// src/networks/networkTypes.ts -var networkTypes = { - mainnet: "mainnet", - testnet: "testnet", - localhost: "localhost" -}; - -// node_modules/@concero/concero-networks/output/chains.mainnet.json -var chains_mainnet_default = { - "1": { - id: "1", - chainSelector: 1, - name: "ethereum", - rpcUrls: [ - "https://cloudflare-eth.com", - "https://eth1.lava.build", - "https://mainnet.gateway.tenderly.co", - "https://eth.drpc.org", - "https://gateway.tenderly.co/public/mainnet", - "https://go.getblock.io/aefd01aa907c4805ba3c00a9e5b48c6b", - "https://0xrpc.io/eth", - "https://eth-mainnet.rpcfast.com?api_key=xbhWBI1Wkguk8SNMu1bvvLurPGLXmgwYeC4S6g2H7WdwFigZSmPWVZRxrskEQwIf", - "https://rpc.eth.gateway.fm", - "https://1rpc.io/eth", - "https://eth-mainnet.public.blastapi.io", - "https://ethereum-rpc.publicnode.com", - "https://rpc.mevblocker.io/fast", - "https://eth.meowrpc.com", - "https://eth.api.pocket.network", - "https://ethereum-public.nodies.app", - "https://rpc.flashbots.net/fast", - "https://ethereum-json-rpc.stakely.io", - "https://eth.llamarpc.com", - "https://eth.rpc.blxrbdn.com", - "https://ethereum.public.blockpi.network/v1/rpc/public", - "https://ethereum-mainnet.gateway.tatum.io", - "https://eth.blockrazor.xyz", - "https://api-ethereum-mainnet-reth.n.dwellir.com/2ccf18bf-2916-4198-8856-42172854353c", - "https://eth.merkle.io", - "https://eth-mainnet.nodereal.io/v1/1659dfb40aa24bbb8153a677b98064d7", - "https://rpc.flashbots.net", - "https://rpc.mevblocker.io/fullprivacy", - "https://rpc.mevblocker.io/noreverts", - "https://rpc.fullsend.to", - "https://eth.api.onfinality.io/public", - "https://public-eth.nownodes.io", - "https://openapi.bitstack.com/v1/wNFxbiJyQsSeLrX8RRCHi7NpRxrlErZk/DjShIqLishPCTB9HiMkPHXjUM9CNM9Na/ETH/mainnet", - "https://core.gashawk.io/rpc", - "https://rpc.mevblocker.io", - "https://ethereum.rpc.subquery.network/public" - ], - nativeCurrency: { - name: "Ethereum", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [ - { - name: "Etherscan", - url: "https://etherscan.io", - apiUrl: "https://api.etherscan.io/api" - } - ], - finalityConfirmations: 75, - minBlockConfirmations: 1, - deployments: {} - }, - "10": { - id: "10", - chainSelector: 10, - name: "optimism", - rpcUrls: [ - "https://optimism.drpc.org", - "https://go.getblock.io/e8a75f8dcf614861becfbcb185be6eb4", - "https://gateway.tenderly.co/public/optimism", - "https://mainnet.optimism.io", - "https://1rpc.io/op", - "https://optimism.gateway.tenderly.co", - "https://api-optimism-mainnet-archive.n.dwellir.com/2ccf18bf-2916-4198-8856-42172854353c", - "https://optimism-rpc.publicnode.com", - "https://optimism-public.nodies.app", - "https://public-op-mainnet.fastnode.io", - "https://optimism-mainnet.gateway.tatum.io", - "https://optimism.api.onfinality.io/public", - "https://optimism.public.blockpi.network/v1/rpc/public", - "https://optimism.rpc.subquery.network/public" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [ - { - name: "Optimism Explorer", - url: "https://optimistic.etherscan.io", - apiUrl: "https://api-optimistic.etherscan.io/api" - } - ], - finalityConfirmations: 50, - minBlockConfirmations: 1, - deployments: {} - }, - "137": { - id: "137", - chainSelector: 137, - name: "polygon", - rpcUrls: [ - "https://polygon.drpc.org", - "https://gateway.tenderly.co/public/polygon", - "https://polygon.lava.build", - "https://go.getblock.io/02667b699f05444ab2c64f9bff28f027", - "https://polygon-mainnet.gateway.tatum.io", - "https://polygon-rpc.com", - "https://1rpc.io/matic", - "https://polygon.meowrpc.com", - "https://polygon-bor-rpc.publicnode.com", - "https://polygon-public.nodies.app", - "https://polygon.gateway.tenderly.co", - "https://rpc-mainnet.matic.quiknode.pro", - "https://polygon-mainnet.rpcfast.com?api_key=xbhWBI1Wkguk8SNMu1bvvLurPGLXmgwYeC4S6g2H7WdwFigZSmPWVZRxrskEQwIf", - "https://polygon.rpc.subquery.network/public", - "https://polygon.api.onfinality.io/public", - "https://poly.api.pocket.network" - ], - nativeCurrency: { - name: "POL", - decimals: 18, - symbol: "POL" - }, - blockExplorers: [ - { - name: "PolygonScan", - url: "https://polygonscan.com", - apiUrl: "https://api.polygonscan.com/api" - } - ], - finalityConfirmations: 128, - minBlockConfirmations: 1, - deployments: {} - }, - "8453": { - id: "8453", - chainSelector: 8453, - name: "base", - rpcUrls: [ - "https://base.drpc.org", - "https://base.lava.build", - "https://mainnet.base.org", - "https://gateway.tenderly.co/public/base", - "https://base.meowrpc.com", - "https://base.gateway.tenderly.co", - "https://developer-access-mainnet.base.org", - "https://1rpc.io/base", - "https://base-rpc.publicnode.com", - "https://base-public.nodies.app", - "https://base.public.blockpi.network/v1/rpc/public", - "https://base-mainnet.public.blastapi.io", - "https://base.api.onfinality.io/public", - "https://base.rpc.blxrbdn.com", - "https://base.api.pocket.network", - "https://base.llamarpc.com", - "https://api-base-mainnet-archive.n.dwellir.com/2ccf18bf-2916-4198-8856-42172854353c", - "https://base.rpc.subquery.network/public" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [ - { - name: "Basescan", - url: "https://basescan.org", - apiUrl: "https://api.basescan.org/api" - } - ], - finalityConfirmations: 50, - minBlockConfirmations: 1, - deployments: {} - }, - "42161": { - id: "42161", - chainSelector: 42161, - name: "arbitrum", - rpcUrls: [ - "https://arbitrum.drpc.org", - "https://api-arbitrum-mainnet-archive.n.dwellir.com/2ccf18bf-2916-4198-8856-42172854353c", - "https://arb1.lava.build", - "https://1rpc.io/arb", - "https://arbitrum-one-rpc.publicnode.com", - "https://arbitrum-one-public.nodies.app", - "https://arbitrum.gateway.tenderly.co", - "https://arbitrum-one.public.blastapi.io", - "https://arbitrum.api.onfinality.io/public", - "https://arbitrum.meowrpc.com", - "https://arbitrum.public.blockpi.network/v1/rpc/public", - "https://arb1.arbitrum.io/rpc", - "https://public-arb-mainnet.fastnode.io", - "https://arbitrum.rpc.subquery.network/public" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [ - { - name: "Arbiscan", - url: "https://arbiscan.io", - apiUrl: "https://api.arbiscan.io/api" - } - ], - finalityConfirmations: 4080, - minBlockConfirmations: 1, - deployments: {} - }, - "43114": { - id: "43114", - chainSelector: 43114, - name: "avalanche", - rpcUrls: [ - "https://api.avax.network/ext/bc/C/rpc", - "https://avalanche-mainnet.gateway.tenderly.co", - "https://avalanche.drpc.org", - "https://avax.api.pocket.network", - "https://avalanche-c-chain-rpc.publicnode.com", - "https://1rpc.io/avax/c", - "https://avalanche-public.nodies.app/ext/bc/C/rpc", - "https://avax.meowrpc.com", - "https://avalanche.api.onfinality.io/public/ext/bc/C/rpc", - "https://spectrum-01.simplystaking.xyz/avalanche-mn-rpc/ext/bc/C/rpc" - ], - nativeCurrency: { - name: "Avalanche", - decimals: 18, - symbol: "AVAX" - }, - blockExplorers: [ - { - name: "SnowTrace", - url: "https://snowtrace.io", - apiUrl: "https://api.snowtrace.io/api" - } - ], - finalityConfirmations: 1, - minBlockConfirmations: 1, - deployments: {} - } -}; - -// node_modules/@concero/concero-networks/output/chains.testnet.json -var chains_testnet_default = { - "81": { - id: "81", - isTestnet: true, - chainSelector: 81, - name: "astarShibuya", - rpcUrls: [ - "https://evm.shibuya.astar.network", - "https://evm.shibuya.astar.network", - "https://shibuya.public.blastapi.io", - "https://shibuya-rpc.dwellir.com" - ], - nativeCurrency: { - name: "Astar", - decimals: 18, - symbol: "ASTR" - }, - blockExplorers: [ - { - name: "Subscan", - url: "https://shibuya.subscan.io", - apiUrl: "https://shibuya.subscan.io/api" - } - ], - finalityConfirmations: 6, - minBlockConfirmations: 1, - deployments: {} - }, - "97": { - id: "97", - isTestnet: true, - chainSelector: 97, - name: "bnbTestnet", - rpcUrls: [ - "https://bsc-testnet.drpc.org", - "https://bsc-testnet-rpc.publicnode.com", - "https://data-seed-prebsc-2-s2.bnbchain.org:8545", - "https://data-seed-prebsc-1-s2.bnbchain.org:8545", - "https://data-seed-prebsc-2-s3.bnbchain.org:8545", - "https://data-seed-prebsc-1-s1.bnbchain.org:8545", - "https://data-seed-prebsc-2-s1.bnbchain.org:8545", - "https://data-seed-prebsc-1-s3.bnbchain.org:8545", - "https://bnb-testnet.api.onfinality.io/public" - ], - nativeCurrency: { - name: "BNB", - decimals: 18, - symbol: "tBNB" - }, - blockExplorers: [ - { - name: "BscScan", - url: "https://testnet.bscscan.com", - apiUrl: "https://api-testnet.bscscan.com/api" - } - ], - finalityConfirmations: 7, - minBlockConfirmations: 1, - deployments: { - router: "0xf6BBdC1fD89E554639D7A683909338802B05F160", - relayerLib: "0x3a4EA7fd0CeA70a4B2Cf72c5AC966225C98eE48d", - validatorLib: "0xAEBaacfa9CaC6B8486Ae77843728c863c909E7d0" - } - }, - "133": { - id: "133", - isTestnet: true, - chainSelector: 133, - name: "hashkeyTestnet", - rpcUrls: [], - nativeCurrency: { - name: "HashKey EcoPoints", - decimals: 18, - symbol: "HSK" - }, - blockExplorers: [ - { - name: "Hashkey Explorer", - url: "https://testnet.hashkeyscan.io", - apiUrl: "https://testnet.hashkeyscan.io/api" - } - ], - finalityConfirmations: 1800, - minBlockConfirmations: 1, - deployments: {} - }, - "157": { - id: "157", - isTestnet: true, - chainSelector: 157, - name: "shibariumPuppynet", - rpcUrls: [ - "https://puppynet.shibrpc.com" - ], - nativeCurrency: { - name: "Bone", - decimals: 18, - symbol: "BONE" - }, - blockExplorers: [ - { - name: "Puppyscan", - url: "https://puppyscan.shib.io", - apiUrl: "https://puppyscan.shib.io/api" - } - ], - finalityConfirmations: 60, - minBlockConfirmations: 1, - deployments: { - router: "0xea73Bc856EdD980912Fb8FE4CFC7bba52D980F6A", - relayerLib: "0x9900a9E38E8695eE9109962b9f4671cF977c265a", - validatorLib: "0x39f311124745064935cB196AeE2a950cbbC11336" - } - }, - "195": { - id: "195", - isTestnet: true, - chainSelector: 195, - name: "xlayerSepolia", - rpcUrls: [], - nativeCurrency: { - name: "OKB", - decimals: 18, - symbol: "OKB" - }, - blockExplorers: [ - { - name: "X Layer Explorer", - url: "https://testnet-explorer.xlayer.tech", - apiUrl: "https://testnet-explorer.xlayer.tech/api" - } - ], - finalityConfirmations: 3600, - minBlockConfirmations: 1, - deployments: {} - }, - "296": { - id: "296", - isTestnet: true, - chainSelector: 296, - name: "hederaTestnet", - rpcUrls: [ - "https://testnet.hashio.io/api", - "https://296.rpc.thirdweb.com" - ], - nativeCurrency: { - name: "HBAR", - decimals: 18, - symbol: "HBAR" - }, - blockExplorers: [], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: {} - }, - "300": { - id: "300", - isTestnet: true, - chainSelector: 300, - name: "zksyncSepolia", - rpcUrls: [ - "https://zksync-sepolia.drpc.org", - "https://rpc.ankr.com/zksync_era_sepolia", - "https://sepolia.era.zksync.dev" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [], - finalityConfirmations: 1200, - minBlockConfirmations: 1, - deployments: { - router: "0xBd5EC2962802123f6D8d0092dC485C98e23D1394", - relayerLib: "0x06942a1E6A73069a58306d9E154051b85b32D071", - validatorLib: "0xe277f7afA46291d4c729a184D51D78ae598d54b1" - } - }, - "338": { - id: "338", - isTestnet: true, - chainSelector: 338, - name: "cronosTestnet", - rpcUrls: [ - "https://cro-testnet.gateway.tatum.io", - "https://cronos-testnet.drpc.org", - "https://evm-t3.cronos.org" - ], - nativeCurrency: { - name: "CRO", - decimals: 18, - symbol: "tCRO" - }, - blockExplorers: [ - { - name: "Cronos Explorer", - url: "https://testnet.cronoscan.com", - apiUrl: "https://api-testnet.cronoscan.com/api" - } - ], - finalityConfirmations: 2, - minBlockConfirmations: 1, - deployments: {} - }, - "545": { - id: "545", - isTestnet: true, - chainSelector: 545, - name: "flowTestnet", - rpcUrls: [ - "https://testnet.evm.nodes.onflow.org" - ], - nativeCurrency: { - name: "Flow", - decimals: 18, - symbol: "FLOW" - }, - blockExplorers: [], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: { - router: "0xf6BBdC1fD89E554639D7A683909338802B05F160", - relayerLib: "0x3a4EA7fd0CeA70a4B2Cf72c5AC966225C98eE48d", - validatorLib: "0xAEBaacfa9CaC6B8486Ae77843728c863c909E7d0" - } - }, - "919": { - id: "919", - isTestnet: true, - chainSelector: 919, - name: "modeTestnet", - rpcUrls: [ - "https://mode-testnet.drpc.org", - "https://sepolia.mode.network" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [ - { - name: "Mode Explorer", - url: "https://sepolia.explorer.mode.network", - apiUrl: "https://sepolia.explorer.mode.network/api" - } - ], - finalityConfirmations: 1110, - minBlockConfirmations: 1, - deployments: {} - }, - "943": { - id: "943", - isTestnet: true, - chainSelector: 943, - name: "pulsechainTestnet", - rpcUrls: [ - "https://pulsechain-testnet-rpc.publicnode.com", - "https://rpc-testnet-pulsechain.g4mm4.io", - "https://rpc.v4.testnet.pulsechain.com" - ], - nativeCurrency: { - name: "V4 Pulse", - decimals: 18, - symbol: "v4PLS" - }, - blockExplorers: [], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: { - router: "0xea73Bc856EdD980912Fb8FE4CFC7bba52D980F6A", - relayerLib: "0x9900a9E38E8695eE9109962b9f4671cF977c265a", - validatorLib: "0x39f311124745064935cB196AeE2a950cbbC11336" - } - }, - "1001": { - id: "1001", - isTestnet: true, - chainSelector: 1001, - name: "kaiaKairos", - rpcUrls: [ - "https://klaytn-baobab.drpc.org", - "https://kaia-kairos.blockpi.network/v1/rpc/public", - "https://rpc.ankr.com/kaia_testnet", - "https://public-en-kairos.node.kaia.io" - ], - nativeCurrency: { - name: "KAIA", - decimals: 18, - symbol: "KAIA" - }, - blockExplorers: [], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: {} - }, - "1112": { - id: "1112", - isTestnet: true, - chainSelector: 1112, - name: "wemixTestnet", - rpcUrls: [ - "https://wemix-testnet.drpc.org", - "https://api.test.wemix.com" - ], - nativeCurrency: { - name: "WEMIX", - decimals: 18, - symbol: "tWEMIX" - }, - blockExplorers: [], - finalityConfirmations: 2, - minBlockConfirmations: 1, - deployments: {} - }, - "1114": { - id: "1114", - isTestnet: true, - chainSelector: 1114, - name: "coreTestnet", - rpcUrls: [ - "https://rpc.test2.btcs.network" - ], - nativeCurrency: { - name: "tCORE2", - decimals: 18, - symbol: "tCORE2" - }, - blockExplorers: [ - { - name: "CoreScan", - url: "https://scan.test.btcs.network", - apiUrl: "https://scan.test.btcs.network/api" - } - ], - finalityConfirmations: 7, - minBlockConfirmations: 1, - deployments: { - router: "0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5", - relayerLib: "0x54B8d67AA64CF8A59F604cA6e98c643C64920b03", - validatorLib: "0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a" - } - }, - "1123": { - id: "1123", - isTestnet: true, - finalityTagEnabled: true, - chainSelector: 1123, - name: "b2Testnet", - rpcUrls: [ - "https://rpc.ankr.com/b2_testnet" - ], - nativeCurrency: { - name: "Bitcoin", - decimals: 18, - symbol: "BTC" - }, - blockExplorers: [], - minBlockConfirmations: 1, - deployments: {} - }, - "1174": { - id: "1174", - isTestnet: true, - chainSelector: 1174, - name: "litheumTestnet", - rpcUrls: [ - "https://testnet.litheum.com" - ], - nativeCurrency: { - name: "LTH", - decimals: 18, - symbol: "LTH" - }, - blockExplorers: [], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: {} - }, - "1270": { - id: "1270", - isTestnet: true, - chainSelector: 1270, - name: "irysTestnet", - rpcUrls: [ - "https://testnet-rpc.irys.xyz/v1/execution-rpc", - "testnet-rpc.irys.xyz" - ], - nativeCurrency: { - name: "mIRYS", - decimals: 18, - symbol: "mIRYS" - }, - blockExplorers: [], - finalityConfirmations: 6, - minBlockConfirmations: 1, - deployments: {} - }, - "1301": { - id: "1301", - isTestnet: true, - chainSelector: 1301, - name: "unichainSepolia", - rpcUrls: [ - "https://unichain-sepolia.drpc.org", - "https://unichain-sepolia-rpc.publicnode.com", - "https://unichain-sepolia.api.onfinality.io/public", - "https://sepolia.unichain.org" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [ - { - name: "Unichain Explorer", - url: "https://sepolia-explorer.unichain.network", - apiUrl: "https://sepolia-explorer.unichain.network/api" - } - ], - finalityConfirmations: 1440, - minBlockConfirmations: 1, - deployments: { - router: "0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5", - relayerLib: "0x54B8d67AA64CF8A59F604cA6e98c643C64920b03", - validatorLib: "0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a" - } - }, - "1328": { - id: "1328", - isTestnet: true, - chainSelector: 1328, - name: "seiTestnet", - rpcUrls: [ - "https://sei-testnet.drpc.org", - "https://sei-testnet-public.nodies.app", - "https://evm-rpc-testnet.sei-apis.com" - ], - nativeCurrency: { - name: "Sei", - decimals: 18, - symbol: "SEI" - }, - blockExplorers: [ - { - name: "Sei Explorer", - url: "https://seitrace.com", - apiUrl: "https://seitrace.com/api" - } - ], - finalityConfirmations: 3, - minBlockConfirmations: 1, - deployments: { - router: "0x122947C8c3529DCa006aeE65832D3C3fED6bf3C0", - relayerLib: "0xe965dEBDfa6365CFb9e643ccdCBADE424a2eC381", - validatorLib: "0xB708D151D18e5aB3506934B39375D00EE1e0C882" - } - }, - "1946": { - id: "1946", - isTestnet: true, - chainSelector: 1946, - name: "soneiumMinato", - rpcUrls: [ - "https://soneium-minato.drpc.org", - "https://rpc.minato.soneium.org" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [ - { - name: "Soneium Explorer", - url: "https://minato-explorer.soneium.com", - apiUrl: "https://minato-explorer.soneium.com/api" - } - ], - finalityConfirmations: 810, - minBlockConfirmations: 1, - deployments: {} - }, - "2021": { - id: "2021", - isTestnet: true, - chainSelector: 2021, - name: "roninSaigon", - rpcUrls: [ - "https://saigon-testnet.roninchain.com/rpc", - "https://saigon-testnet.roninchain.com/rpc" - ], - nativeCurrency: { - name: "RON", - decimals: 18, - symbol: "RON" - }, - blockExplorers: [ - { - name: "Ronin Explorer", - url: "https://saigon-explorer.roninchain.com", - apiUrl: "https://saigon-explorer.roninchain.com/api" - } - ], - finalityConfirmations: 4, - minBlockConfirmations: 1, - deployments: { - router: "0xea73Bc856EdD980912Fb8FE4CFC7bba52D980F6A", - relayerLib: "0x9900a9E38E8695eE9109962b9f4671cF977c265a", - validatorLib: "0x39f311124745064935cB196AeE2a950cbbC11336" - } - }, - "2221": { - id: "2221", - isTestnet: true, - chainSelector: 2221, - name: "kavaTestnet", - rpcUrls: [ - "https://kava-testnet.drpc.org", - "https://evm.testnet.kava.io" - ], - nativeCurrency: { - name: "Kava", - decimals: 18, - symbol: "KAVA" - }, - blockExplorers: [], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: {} - }, - "2522": { - id: "2522", - isTestnet: true, - chainSelector: 2522, - name: "fraxtalHolesky", - rpcUrls: [], - nativeCurrency: { - name: "FRAX", - decimals: 18, - symbol: "FRAX" - }, - blockExplorers: [], - finalityConfirmations: 900, - minBlockConfirmations: 1, - deployments: {} - }, - "2810": { - id: "2810", - isTestnet: true, - chainSelector: 2810, - name: "morphHolesky", - rpcUrls: [], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: {} - }, - "3636": { - id: "3636", - isTestnet: true, - chainSelector: 3636, - name: "botanixTestnet", - rpcUrls: [ - "https://rpc.ankr.com/botanix_testnet", - "https://node.botanixlabs.dev" - ], - nativeCurrency: { - name: "Botanix", - decimals: 18, - symbol: "BTC" - }, - blockExplorers: [ - { - name: "Botanix Explorer", - url: "https://testnet-explorer.botanixlabs.xyz", - apiUrl: "https://testnet-explorer.botanixlabs.xyz/api" - } - ], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: {} - }, - "4801": { - id: "4801", - isTestnet: true, - chainSelector: 4801, - name: "worldchainTestnet", - rpcUrls: [ - "https://worldchain-sepolia.drpc.org", - "https://worldchain-sepolia.g.alchemy.com/public", - "https://worldchain-sepolia.gateway.tenderly.co", - "https://4801.rpc.thirdweb.com" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [], - finalityConfirmations: 1200, - minBlockConfirmations: 1, - deployments: { - router: "0xea73Bc856EdD980912Fb8FE4CFC7bba52D980F6A", - relayerLib: "0x9900a9E38E8695eE9109962b9f4671cF977c265a", - validatorLib: "0x39f311124745064935cB196AeE2a950cbbC11336" - } - }, - "5003": { - id: "5003", - isTestnet: true, - chainSelector: 5003, - name: "mantleSepolia", - rpcUrls: [ - "https://mantle-sepolia.drpc.org", - "https://rpc.sepolia.mantle.xyz" - ], - nativeCurrency: { - name: "MNT", - decimals: 18, - symbol: "MNT" - }, - blockExplorers: [ - { - name: "Mantle Explorer", - url: "https://explorer.sepolia.mantle.xyz", - apiUrl: "https://explorer.sepolia.mantle.xyz/api" - } - ], - finalityConfirmations: 840, - minBlockConfirmations: 1, - deployments: {} - }, - "5124": { - id: "5124", - isTestnet: true, - chainSelector: 5124, - name: "seismicDevnet", - rpcUrls: [ - "https://node-2.seismicdev.net/rpc" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: {} - }, - "5611": { - id: "5611", - isTestnet: true, - chainSelector: 5611, - name: "opbnbTestnet", - rpcUrls: [ - "https://opbnb-testnet.drpc.org", - "https://opbnb-testnet-rpc.publicnode.com", - "https://opbnb-testnet-rpc.bnbchain.org", - "https://opbnb-testnet.nodereal.io/v1/e9a36765eb8a40b9bd12e680a1fd2bc5", - "https://opbnb-testnet.nodereal.io/v1/64a9df0874fb4a93b9d0a3849de012d3" - ], - nativeCurrency: { - name: "tBNB", - decimals: 18, - symbol: "tBNB" - }, - blockExplorers: [], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: {} - }, - "6342": { - id: "6342", - isTestnet: true, - chainSelector: 6342, - name: "megaethTestnet", - rpcUrls: [], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [ - { - name: "MegaEth Explorer", - url: "https://explorer-testnet.megaeth.io", - apiUrl: "https://explorer-testnet.megaeth.io/api" - } - ], - finalityConfirmations: 900, - minBlockConfirmations: 1, - deployments: {} - }, - "8408": { - id: "8408", - isTestnet: true, - chainSelector: 8408, - name: "zenchainTestnet", - rpcUrls: [ - "https://zenchain-testnet.api.onfinality.io/public" - ], - nativeCurrency: { - name: "ZTC", - decimals: 18, - symbol: "ZTC" - }, - blockExplorers: [], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: {} - }, - "10143": { - id: "10143", - isTestnet: true, - chainSelector: 10143, - name: "monadTestnet", - rpcUrls: [ - "https://monad-testnet.drpc.org", - "https://rpc.ankr.com/monad_testnet", - "https://testnet-rpc.monad.xyz", - "https://rpc-testnet.monadinfra.com", - "https://monad-testnet.api.onfinality.io/public" - ], - nativeCurrency: { - name: "Testnet MON Token", - decimals: 18, - symbol: "MON" - }, - blockExplorers: [ - { - name: "Monad Explorer", - url: "https://explorer.testnet.monad.xyz", - apiUrl: "https://explorer.testnet.monad.xyz/api" - } - ], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: { - router: "0x3E2Ee768D9fADdd3673a69ED4d0D1d9147FA1054", - relayerLib: "0x9900a9E38E8695eE9109962b9f4671cF977c265a", - validatorLib: "0x39f311124745064935cB196AeE2a950cbbC11336" - } - }, - "10200": { - id: "10200", - isTestnet: true, - chainSelector: 10200, - name: "gnosisChiado", - rpcUrls: [ - "https://gnosis-chiado.drpc.org", - "https://rpc.chiadochain.net", - "https://gnosis-chiado-rpc.publicnode.com", - "https://rpc.chiado.gnosis.gateway.fm" - ], - nativeCurrency: { - name: "Gnosis", - decimals: 18, - symbol: "xDAI" - }, - blockExplorers: [ - { - name: "Blockscout", - url: "https://gnosis-chiado.blockscout.com", - apiUrl: "https://gnosis-chiado.blockscout.com/api" - } - ], - finalityConfirmations: 35, - minBlockConfirmations: 1, - deployments: { - router: "0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5", - relayerLib: "0x54B8d67AA64CF8A59F604cA6e98c643C64920b03", - validatorLib: "0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a" - } - }, - "11124": { - id: "11124", - isTestnet: true, - finalityTagEnabled: true, - chainSelector: 11124, - name: "abstractSepolia", - rpcUrls: [ - "https://abstract-sepolia.drpc.org", - "https://api.testnet.abs.xyz" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [], - minBlockConfirmations: 1, - deployments: {} - }, - "18880": { - id: "18880", - isTestnet: true, - chainSelector: 18880, - name: "expchainTestnet", - rpcUrls: [ - "https://rpc1-testnet.expchain.ai", - "https://expchain.polyhedra.network/rpc1-testnet", - "https://expchain.polyhedra.network/rpc0-testnet", - "https://expchain.polyhedra.network/rpc0-testnet", - "https://expchain.polyhedra.network/rpc1-testnet" - ], - nativeCurrency: { - name: "tZKJ", - decimals: 18, - symbol: "tZKJ" - }, - blockExplorers: [], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: {} - }, - "23295": { - id: "23295", - isTestnet: true, - chainSelector: 23295, - name: "oasissapphireTestnet", - rpcUrls: [ - "https://testnet.sapphire.oasis.io" - ], - nativeCurrency: { - name: "Sapphire Test Rose", - decimals: 18, - symbol: "TEST" - }, - blockExplorers: [], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: { - router: "0xcc9D0438ac3b90fB8291f4f3C1c420E215f36585", - relayerLib: "0x8510C780097cA53aeF8e3527a5107C4629b21f0C", - validatorLib: "0xb31EED4695De3eCE4381a40fA638d9a63904882b" - } - }, - "33111": { - id: "33111", - isTestnet: true, - finalityTagEnabled: true, - chainSelector: 33111, - name: "apechainCurtis", - rpcUrls: [ - "https://apechain-curtis.drpc.org", - "https://curtis.rpc.caldera.xyz/http", - "https://rpc.curtis.apechain.com" - ], - nativeCurrency: { - name: "APE", - decimals: 18, - symbol: "APE" - }, - blockExplorers: [ - { - name: "Apechain Explorer", - url: "https://curtis-explorer.apechain.io", - apiUrl: "https://curtis-explorer.apechain.io/api" - } - ], - minBlockConfirmations: 1, - deployments: {} - }, - "37111": { - id: "37111", - isTestnet: true, - chainSelector: 37111, - name: "lensSepolia", - rpcUrls: [ - "https://rpc.testnet.lens.dev", - "https://lens-testnet.drpc.org" - ], - nativeCurrency: { - name: "GRASS", - decimals: 18, - symbol: "GRASS" - }, - blockExplorers: [], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: {} - }, - "43113": { - id: "43113", - isTestnet: true, - finalityTagEnabled: true, - chainSelector: 43113, - name: "avalancheFuji", - rpcUrls: [ - "https://api.avax-test.network/ext/bc/C/rpc", - "https://avalanche-fuji.drpc.org", - "https://avalanche-fuji-c-chain-rpc.publicnode.com" - ], - nativeCurrency: { - name: "Avalanche Fuji", - decimals: 18, - symbol: "AVAX" - }, - blockExplorers: [ - { - name: "Snowtrace", - url: "https://testnet.snowtrace.io", - apiUrl: "https://api-testnet.snowtrace.io/api" - } - ], - minBlockConfirmations: 1, - deployments: { - router: "0xe965dEBDfa6365CFb9e643ccdCBADE424a2eC381", - relayerLib: "0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a", - validatorLib: "0x246892c38a2314c30E56490ADf1bcf3470DCAE6A" - } - }, - "44787": { - id: "44787", - isTestnet: true, - chainSelector: 44787, - name: "celoAlfajores", - rpcUrls: [], - nativeCurrency: { - name: "CELO", - decimals: 18, - symbol: "A-CELO" - }, - blockExplorers: [ - { - name: "Celoscan", - url: "https://alfajores.celoscan.io", - apiUrl: "https://api-alfajores.celoscan.io/api" - } - ], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: {} - }, - "48899": { - id: "48899", - isTestnet: true, - chainSelector: 48899, - name: "zircuitTestnet", - rpcUrls: [ - "https://testnet.zircuit.com", - "https://zircuit1-testnet.p2pify.com" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [ - { - name: "Zircuit Explorer", - url: "https://explorer.zircuit.com", - apiUrl: "https://explorer.zircuit.com/api" - } - ], - finalityConfirmations: 630, - minBlockConfirmations: 1, - deployments: {} - }, - "57054": { - id: "57054", - isTestnet: true, - chainSelector: 57054, - name: "sonicBlaze", - rpcUrls: [ - "https://sonic-testnet.drpc.org", - "https://sonic-blaze-rpc.publicnode.com", - "https://rpc.blaze.soniclabs.com" - ], - nativeCurrency: { - name: "S", - decimals: 18, - symbol: "S" - }, - blockExplorers: [ - { - name: "Sonic Explorer", - url: "https://explorer-testnet.sonic.guru", - apiUrl: "https://explorer-testnet.sonic.guru/api" - } - ], - finalityConfirmations: 10, - minBlockConfirmations: 1, - deployments: { - router: "0xAEBaacfa9CaC6B8486Ae77843728c863c909E7d0", - relayerLib: "0x13187bb1d2f100F84770a848A1374bf745Ea4cF6", - validatorLib: "0x90D7e742746Abf405036aA21981C835F3E842DA4" - } - }, - "59141": { - id: "59141", - isTestnet: true, - chainSelector: 59141, - name: "lineaSepolia", - rpcUrls: [ - "https://linea-sepolia.drpc.org", - "https://linea-sepolia-rpc.publicnode.com", - "https://rpc.sepolia.linea.build" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [ - { - name: "Linea Explorer", - url: "https://sepolia.lineascan.build", - apiUrl: "https://api-sepolia.lineascan.build/api" - } - ], - finalityConfirmations: 600, - minBlockConfirmations: 1, - deployments: {} - }, - "59902": { - id: "59902", - isTestnet: true, - chainSelector: 59902, - name: "metisSepolia", - rpcUrls: [ - "https://metis-sepolia.gateway.tenderly.co", - "https://metis-sepolia-rpc.publicnode.com", - "https://sepolia.metisdevops.link" - ], - nativeCurrency: { - name: "tMETIS", - decimals: 18, - symbol: "tMETIS" - }, - blockExplorers: [], - finalityConfirmations: 360, - minBlockConfirmations: 1, - deployments: {} - }, - "80002": { - id: "80002", - isTestnet: true, - chainSelector: 80002, - name: "polygonAmoy", - rpcUrls: [ - "https://rpc-amoy.polygon.technology", - "https://polygon-amoy.gateway.tenderly.co", - "https://polygon-amoy.drpc.org", - "https://polygon-amoy-public.nodies.app", - "https://polygon-amoy-bor-rpc.publicnode.com", - "https://polygon-amoy.api.onfinality.io/public" - ], - nativeCurrency: { - name: "POL", - decimals: 18, - symbol: "POL" - }, - blockExplorers: [ - { - name: "PolygonScan", - url: "https://amoy.polygonscan.com", - apiUrl: "https://api-amoy.polygonscan.com/api" - } - ], - finalityConfirmations: 500, - minBlockConfirmations: 1, - deployments: { - router: "0x6FF322BC8da39bC87A056d4052aa763f7BDeE836", - relayerLib: "0x81365cc081dF5fdF6cbD47a34fF4acBcA2B35F0d", - validatorLib: "0x99542DdB261186F818974e579e4aBF3BFb44819e" - } - }, - "80069": { - id: "80069", - isTestnet: true, - chainSelector: 80069, - name: "berachainBepolia", - rpcUrls: [ - "https://bepolia.rpc.berachain.com" - ], - nativeCurrency: { - name: "BERA Token", - decimals: 18, - symbol: "BERA" - }, - blockExplorers: [], - finalityConfirmations: 1, - minBlockConfirmations: 1, - deployments: { - router: "0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5", - relayerLib: "0x54B8d67AA64CF8A59F604cA6e98c643C64920b03", - validatorLib: "0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a" - } - }, - "84532": { - id: "84532", - isTestnet: true, - finalityTagEnabled: true, - chainSelector: 84532, - name: "baseSepolia", - rpcUrls: [ - "https://base-sepolia.gateway.tenderly.co", - "https://sepolia.base.org", - "https://base-sepolia.drpc.org", - "https://base-sepolia-rpc.publicnode.com", - "https://base-sepolia-public.nodies.app", - "https://base-sepolia.api.onfinality.io/public" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [ - { - name: "BaseScan", - url: "https://sepolia.basescan.org", - apiUrl: "https://api-sepolia.basescan.org/api" - }, - { - name: "Blockscout", - url: "https://base-sepolia.blockscout.com", - apiUrl: "https://base-sepolia.blockscout.com/api" - } - ], - minBlockConfirmations: 1, - deployments: { - router: "0xE3d861a49bc5903499fB5Bb411B83d980422c31B", - relayerLib: "0x429E6875Ba6A13cc015e9Eba594e8b42936244C4", - validatorLib: "0x67BE79Df5A37d2a89384D32C2A066d2a7354eD2B" - } - }, - "167009": { - id: "167009", - isTestnet: true, - chainSelector: 167009, - name: "taikoTestnet", - rpcUrls: [], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [], - finalityConfirmations: 20, - minBlockConfirmations: 1, - deployments: {} - }, - "200810": { - id: "200810", - isTestnet: true, - chainSelector: 200810, - name: "bitlayerTestnet", - rpcUrls: [ - "https://rpc.ankr.com/bitlayer_testnet", - "https://testnet-rpc.bitlayer.org", - "https://testnet-rpc.bitlayer-rpc.com" - ], - nativeCurrency: { - name: "Bitcoin", - decimals: 18, - symbol: "BTC" - }, - blockExplorers: [ - { - name: "Bitlayer Explorer", - url: "https://testnet-explorer.bitlayer.org", - apiUrl: "https://testnet-explorer.bitlayer.org/api" - } - ], - finalityConfirmations: 21, - minBlockConfirmations: 1, - deployments: {} - }, - "344100": { - id: "3441006", - isTestnet: true, - chainSelector: 344100, - name: "mantapacificSepolia", - rpcUrls: [ - "https://manta-pacific-sepolia.drpc.org", - "https://manta-sepolia.rpc.caldera.xyz/http", - "https://pacific-rpc.sepolia-testnet.manta.network/http" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: {} - }, - "421614": { - id: "421614", - isTestnet: true, - finalityTagEnabled: true, - chainSelector: 421614, - name: "arbitrumSepolia", - rpcUrls: [ - "https://arbitrum-sepolia.gateway.tenderly.co", - "https://arbitrum-sepolia.drpc.org", - "https://arbitrum-sepolia-testnet.api.pocket.network", - "https://arbitrum-sepolia-rpc.publicnode.com", - "https://sepolia-rollup.arbitrum.io/rpc", - "https://arbitrum-sepolia.api.onfinality.io/public" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [ - { - name: "Arbiscan", - url: "https://sepolia.arbiscan.io", - apiUrl: "https://api-sepolia.arbiscan.io/api" - } - ], - minBlockConfirmations: 1, - deployments: { - router: "0x6c99cC0FCC985fF175787BD2565AfD15781C99d0", - relayerLib: "0x622b5FeBf5Fd44Ab2E7636398F2621FC4E956304", - validatorLib: "0x7F445E3DE6B46cD36887B9f136DBe13298517C1F" - } - }, - "534351": { - id: "534351", - isTestnet: true, - chainSelector: 534351, - name: "scrollSepolia", - rpcUrls: [ - "https://scroll-sepolia.drpc.org", - "https://scroll-sepolia-rpc.publicnode.com", - "https://sepolia-rpc.scroll.io", - "https://scroll-sepolia-public.nodies.app" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [ - { - name: "Scrollscan", - url: "https://sepolia.scrollscan.com", - apiUrl: "https://api-sepolia.scrollscan.com/api" - } - ], - finalityConfirmations: 720, - minBlockConfirmations: 1, - deployments: { - router: "0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5", - relayerLib: "0x54B8d67AA64CF8A59F604cA6e98c643C64920b03", - validatorLib: "0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a" - } - }, - "688689": { - id: "688689", - isTestnet: true, - chainSelector: 688689, - name: "pharosTestnet", - rpcUrls: [ - "https://atlantic.dplabs-internal.com" - ], - nativeCurrency: { - name: "PHRS", - decimals: 18, - symbol: "PHRS" - }, - blockExplorers: [], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: {} - }, - "763373": { - id: "763373", - isTestnet: true, - chainSelector: 763373, - name: "inkSepolia", - rpcUrls: [ - "https://rpc-gel-sepolia.inkonchain.com", - "https://ink-sepolia.drpc.org" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [ - { - name: "Ink Explorer", - url: "https://sepolia.inkscan.io", - apiUrl: "https://sepolia.inkscan.io/api" - } - ], - finalityConfirmations: 3600, - minBlockConfirmations: 1, - deployments: {} - }, - "808813": { - id: "808813", - isTestnet: true, - chainSelector: 808813, - name: "bobSepolia", - rpcUrls: [ - "https://bob-testnet.drpc.org", - "https://bob-sepolia.rpc.gobob.xyz" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [], - finalityConfirmations: 3600, - minBlockConfirmations: 1, - deployments: {} - }, - "1000101": { - id: "1000101", - isTestnet: true, - chainSelector: 1000101, - name: "xomarketTestnet", - rpcUrls: [ - "https://dev-testnet-rpc.xo.market", - "https://testnet-rpc-1.xo.market" - ], - nativeCurrency: { - name: "XO", - decimals: 18, - symbol: "XO" - }, - blockExplorers: [], - finalityConfirmations: 2, - minBlockConfirmations: 1, - deployments: {} - }, - "1234200": { - id: "123420001114", - isTestnet: true, - chainSelector: 1234200, - name: "campv2Testnet", - rpcUrls: [ - "https://rpc.basecamp.t.raas.gelato.cloud" - ], - nativeCurrency: { - name: "Camp", - decimals: 18, - symbol: "CAMP" - }, - blockExplorers: [], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: {} - }, - "1313161": { - id: "1313161555", - isTestnet: true, - finalityTagEnabled: true, - chainSelector: 1313161, - name: "auroraTestnet", - rpcUrls: [ - "https://aurora-testnet.drpc.org", - "https://testnet.aurora.dev" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [], - minBlockConfirmations: 1, - deployments: {} - }, - "1685877": { - id: "168587773", - isTestnet: true, - chainSelector: 1685877, - name: "blastSepolia", - rpcUrls: [ - "https://blast-sepolia.drpc.org", - "https://blast-testnet-public.nodies.app", - "https://sepolia.blast.io" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [ - { - name: "Blastscan", - url: "https://sepolia.blastscan.io", - apiUrl: "https://api-sepolia.blastscan.io/api" - } - ], - finalityConfirmations: 600, - minBlockConfirmations: 1, - deployments: {} - }, - "11155111": { - id: "11155111", - isTestnet: true, - finalityTagEnabled: true, - chainSelector: 11155111, - name: "ethereumSepolia", - rpcUrls: [ - "https://gateway.tenderly.co/public/sepolia", - "https://sepolia.gateway.tenderly.co", - "https://sepolia.drpc.org", - "https://1rpc.io/sepolia", - "https://ethereum-sepolia-public.nodies.app", - "https://0xrpc.io/sep", - "https://ethereum-sepolia-rpc.publicnode.com", - "https://eth-sepolia.api.onfinality.io/public", - "https://eth-sepolia-testnet.api.pocket.network", - "https://ethereum-sepolia.rpc.subquery.network/public" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [ - { - name: "Etherscan", - url: "https://sepolia.etherscan.io", - apiUrl: "https://api-sepolia.etherscan.io/api" - } - ], - minBlockConfirmations: 1, - deployments: { - router: "0x3E0aAA63fFb51169B9aE9b7Dc3616b43362124D6", - relayerLib: "0x8338A0B9c83C0d7E67C267432DF4C8b7cA98e11C", - validatorLib: "0x1A808aa4F1E874763E114AB4fD170460D84A8D54" - } - }, - "11155420": { - id: "11155420", - isTestnet: true, - chainSelector: 11155420, - name: "optimismSepolia", - rpcUrls: [ - "https://sepolia.optimism.io", - "https://optimism-sepolia.gateway.tenderly.co", - "https://optimism-sepolia.drpc.org", - "https://optimism-sepolia-public.nodies.app", - "https://optimism-sepolia.api.onfinality.io/public" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [ - { - name: "Optimism Explorer", - url: "https://sepolia-optimism.etherscan.io", - apiUrl: "https://api-sepolia-optimism.etherscan.io/api" - } - ], - finalityConfirmations: 600, - minBlockConfirmations: 1, - deployments: { - router: "0x25c2037546Bf5B525DfAfe85A662DB519c07bDdB", - relayerLib: "0x6E0b96885Ab0A58e82f2D1ce4df29AF6F5a40089", - validatorLib: "0x0C12fAdDb045bB71C256E36662D56b4b22f1bD58" - } - }, - "11155931": { - id: "11155931", - isTestnet: true, - chainSelector: 11155931, - name: "riseTestnet", - rpcUrls: [ - "https://testnet.riselabs.xyz" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: {} - } +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); }; - -// node_modules/viem/_esm/utils/chain/defineChain.js -function defineChain(chain) { - return { - formatters: void 0, - fees: void 0, - serializers: void 0, - ...chain - }; -} - -// node_modules/viem/_esm/errors/unit.js -init_base(); -var InvalidDecimalNumberError = class extends BaseError { - constructor({ value }) { - super(`Number \`${value}\` is not a valid decimal number.`, { - name: "InvalidDecimalNumberError" - }); +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } + return to; }; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); -// node_modules/viem/_esm/utils/unit/parseUnits.js -function parseUnits(value, decimals) { - if (!/^(-?)([0-9]*)\.?([0-9]*)$/.test(value)) - throw new InvalidDecimalNumberError({ value }); - let [integer, fraction = "0"] = value.split("."); - const negative = integer.startsWith("-"); - if (negative) - integer = integer.slice(1); - fraction = fraction.replace(/(0+)$/, ""); - if (decimals === 0) { - if (Math.round(Number(`.${fraction}`)) === 1) - integer = `${BigInt(integer) + 1n}`; - fraction = ""; - } else if (fraction.length > decimals) { - const [left, unit, right] = [ - fraction.slice(0, decimals - 1), - fraction.slice(decimals - 1, decimals), - fraction.slice(decimals) - ]; - const rounded = Math.round(Number(`${unit}.${right}`)); - if (rounded > 9) - fraction = `${BigInt(left) + BigInt(1)}0`.padStart(left.length + 1, "0"); - else - fraction = `${left}${rounded}`; - if (fraction.length > decimals) { - fraction = fraction.slice(1); - integer = `${BigInt(integer) + 1n}`; - } - fraction = fraction.slice(0, decimals); - } else { - fraction = fraction.padEnd(decimals, "0"); - } - return BigInt(`${negative ? "-" : ""}${integer}${fraction}`); -} +// src/index.ts +var index_exports = {}; +__export(index_exports, { + TokenSender: () => TokenSender, + compileContracts: () => compileContracts, + conceroNetworks: () => conceroNetworks, + config: () => config, + createEnvAddressGetter: () => createEnvAddressGetter, + createEnvUpdater: () => createEnvUpdater, + createViemChain: () => createViemChain, + err: () => err, + ethersSignerCallContract: () => ethersSignerCallContract, + extractProxyAdminAddress: () => extractProxyAdminAddress, + formatGas: () => formatGas, + genericDeploy: () => genericDeploy, + getActualGasData: () => getActualGasData, + getClients: () => getClients, + getEnvVar: () => getEnvVar, + getFallbackClients: () => getFallbackClients, + getNetworkEnvKey: () => getNetworkEnvKey, + getNetworkKey: () => getNetworkKey, + getTestClient: () => getTestClient, + getTrezorDeployEnabled: () => getTrezorDeployEnabled, + getViemAccount: () => getViemAccount, + getWallet: () => getWallet, + localhostViemChain: () => localhostViemChain, + log: () => log, + mainnetNetworks: () => mainnetNetworks, + networkTypes: () => networkTypes, + shorten: () => shorten, + testnetNetworks: () => testnetNetworks, + warn: () => warn +}); +module.exports = __toCommonJS(index_exports); -// node_modules/viem/_esm/index.js -init_abis(); -init_formatUnits(); +// src/types/networkTypes.ts +var networkTypes = { + mainnet: "mainnet", + testnet: "testnet", + localhost: "localhost" +}; // src/utils/createViemChain.ts +var import_viem = require("viem"); function createViemChain(chainDefinition) { - return defineChain({ + return (0, import_viem.defineChain)({ id: chainDefinition.id, name: chainDefinition.name, nativeCurrency: { @@ -2327,6 +97,34 @@ function createViemChain(chainDefinition) { var import_process = __toESM(require("process")); // src/utils/log.ts +var networkColors = { + ethereum: "\x1B[30m", + // grey + arbitrum: "\x1B[34m", + // blue + polygon: "\x1B[35m", + // magenta + avalanche: "\x1B[31m", + // red + base: "\x1B[36m", + // cyan + ethereumSepolia: "\x1B[30m", + // grey + arbitrumSepolia: "\x1B[34m", + // blue + optimismSepolia: "\x1B[31m", + // red + polygonAmoy: "\x1B[35m", + // magenta + avalancheFuji: "\x1B[31m", + // red + baseSepolia: "\x1B[36m", + // cyan + hardhat: "\x1B[32m", + // green + localhost: "\x1B[32m" + // green +}; var reset = "\x1B[0m"; function log(message, functionName, networkName) { const greenFill = "\x1B[32m"; @@ -2337,20 +135,72 @@ function warn(message, functionName) { const yellowFill = "\x1B[33m"; console.log(`${yellowFill}[${functionName}]${reset}`, message); } +function err(message, functionName, networkName) { + const redFill = "\x1B[31m"; + const network = networkName ? `${networkColors[networkName]}[${networkName}]${reset}` : ""; + console.log( + `${network}${redFill}[${functionName}] ERROR:${reset}`, + message + ); +} var log_default = log; +// src/utils/formatting.ts +function shorten(address) { + return `${address.slice(0, 6)}...${address.slice(-4)}`; +} +function formatGas(gasAmountWei) { + return gasAmountWei.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); +} + +// src/networks/getNetworkEnvKey.ts +function getNetworkEnvKey(networkName) { + if (!networkName) { + throw new Error("Network name must be provided"); + } + return camelCaseToCapsSnakeCase(networkName); +} +function getNetworkKey(NETWORK_NAME) { + if (!NETWORK_NAME) { + throw new Error("Network name must be provided"); + } + return capsSnakeCaseToCamelCase(NETWORK_NAME); +} +function capsSnakeCaseToCamelCase(snakeCaseString) { + if (!snakeCaseString) { + throw new Error("String must be provided"); + } + return snakeCaseString.toLowerCase().replace(/_([a-z])/g, (_, char) => char.toUpperCase()); +} +function camelCaseToCapsSnakeCase(camelCaseString) { + if (!camelCaseString) { + throw new Error("String must be provided"); + } + return camelCaseString.replace(/([a-z0-9])([A-Z])/g, "$1_$2").toUpperCase(); +} + // src/utils/getEnvVar.ts -function getEnvVar(key) { +function getEnvVar(key, defaultValue) { const value = import_process.default.env[key]; if (value === void 0 || value === "") { + if (defaultValue !== void 0) return defaultValue; warn(`Missing env variable: ${key}`, "getEnvVar"); - return void 0; + return ""; } return value; } +function createEnvAddressGetter(config2) { + function getEnvAddress(prefix, networkName) { + const searchKey = networkName ? `${config2.prefixes[prefix]}_${getNetworkEnvKey(networkName)}` : config2.prefixes[prefix]; + const value = getEnvVar(searchKey); + const friendlyName = `${String(prefix)}(${shorten(value)})`; + return [value, friendlyName]; + } + return { getEnvAddress }; +} // src/utils/getTrezorDeployEnabled.ts -var getTrezorDeployEnabled = () => getEnvVar("TREZOR_DEPLOY_ENABLED") === "true"; +var getTrezorDeployEnabled = () => getEnvVar("TREZOR_DEPLOY_ENABLED", "false") === "true"; // src/utils/getWallet.ts function getWallet(chainType, accountType, walletType) { @@ -2366,9 +216,6 @@ function getWallet(chainType, accountType, walletType) { case "operator": prefix = "OPERATOR"; break; - case "priceFeedProxyDeployer": - prefix = "PRICE_FEED_PROXY_DEPLOYER"; - break; default: throw new Error(`Unknown account type: ${accountType}`); } @@ -2390,57 +237,152 @@ function getWallet(chainType, accountType, walletType) { return walletValue; } -// src/utils/updateEnvVariable.ts -var import_fs = require("fs"); -var import_path = __toESM(require("path")); - -// src/constants/deploymentVariables.ts -var envPrefixes = { - router: "CONCERO_ROUTER", - routerProxy: "CONCERO_ROUTER_PROXY", - routerProxyAdmin: "CONCERO_ROUTER_PROXY_ADMIN", - verifier: "CONCERO_VERIFIER", - verifierProxy: "CONCERO_VERIFIER_PROXY", - verifierProxyAdmin: "CONCERO_VERIFIER_PROXY_ADMIN", - priceFeed: "CONCERO_PRICE_FEED", - priceFeedProxy: "CONCERO_PRICE_FEED_PROXY", - priceFeedProxyAdmin: "CONCERO_PRICE_FEED_PROXY_ADMIN", - lpToken: "LPTOKEN", - pause: "CONCERO_PAUSE", - creValidatorLibProxy: "CONCERO_CRE_VALIDATOR_LIB_PROXY", - creValidatorLibProxyAdmin: "CONCERO_CRE_VALIDATOR_LIB_PROXY_ADMIN", - creValidatorLib: "CONCERO_CRE_VALIDATOR_LIB", - relayerLib: "CONCERO_RELAYER_LIB", - relayerLibProxy: "CONCERO_RELAYER_LIB_PROXY", - relayerLibProxyAdmin: "CONCERO_RELAYER_LIB_PROXY_ADMIN" +// src/utils/ethersSignerCallContract.ts +var ethersSignerCallContract = async (hre, contract, abi, functionName, ...functionArgs) => { + const [ethersSigner] = await hre.ethers.getSigners(); + const ethersContract = new hre.ethers.Contract(contract, abi, ethersSigner); + const unsignedTx = await ethersContract[functionName].populateTransaction(...functionArgs); + log( + `Size: ${(unsignedTx.data.length - 2) / 2}, Input data: ${unsignedTx.data}, Address: ${unsignedTx.to}`, + functionName, + hre.network.name + ); + return (await ethersSigner.sendTransaction(unsignedTx)).hash; }; -// src/utils/updateEnvVariable.ts -function updateEnvVariable(key, newValue, envFileName) { - const filePath = import_path.default.join(__dirname, `../.env.${envFileName}`); - if (!filePath) throw new Error(`File not found: ${filePath}`); - const envContents = (0, import_fs.readFileSync)(filePath, "utf8"); - let lines = envContents.split(/\r?\n/); - if (!lines.some((line) => line.startsWith(`${key}=`))) { - log_default(`Key ${key} not found in .env file. Adding to ${filePath}`, "updateEnvVariable"); - lines.push(`${key}=${newValue}`); +// src/utils/compileContracts.ts +var import_child_process = require("child_process"); +function compileContracts({ quiet = true, force = false }) { + const packageManager = process.env["PACKAGE_MANAGER"] || "yarn"; + const command = `${packageManager} compile`; + const args = []; + if (quiet) args.push("--quiet"); + if (force) args.push("--force"); + (0, import_child_process.execSync)(`${command} ${args.join(" ")}`, { stdio: "inherit" }); +} + +// src/utils/localhostViemChain.ts +var import_viem2 = require("viem"); +var localhostViemChain = (0, import_viem2.defineChain)({ + id: Number(process.env.LOCALHOST_FORK_CHAIN_ID), + name: "localhost", + nativeCurrency: { + decimals: 18, + name: "eth", + symbol: "eth" + }, + rpcUrls: { + default: { http: [process.env.LOCALHOST_RPC_URL ?? "http://127.0.0.1:8545"] } + }, + testnet: true +}); +var hardhatViemChain = (0, import_viem2.defineChain)({ + id: Number(process.env.HARDHAT_CHAIN_ID), + name: "hardhat", + nativeCurrency: { + decimals: 18, + name: "eth", + symbol: "eth" + }, + rpcUrls: { + default: { http: [process.env.HARDHAT_RPC_URL ?? "http://127.0.0.1:8545"] } + }, + testnet: true +}); + +// src/utils/extractProxyAdminAddress.ts +var import_ethers = require("ethers"); +function extractProxyAdminAddress(receipt) { + if (!receipt) return import_ethers.ethers.ZeroAddress; + const adminChangedTopic = import_ethers.ethers.id("AdminChanged(address,address)"); + const adminChangedLog = receipt.logs.find((log2) => log2.topics[0] === adminChangedTopic); + if (!adminChangedLog) return import_ethers.ethers.ZeroAddress; + try { + const abiCoder = import_ethers.ethers.AbiCoder.defaultAbiCoder(); + const [, newAdmin] = abiCoder.decode(["address", "address"], adminChangedLog.data); + return newAdmin; + } catch { + return import_ethers.ethers.ZeroAddress; } - const newLines = lines.map((line) => { - let [currentKey, currentValue] = line.split("="); - if (currentKey === key) { - return `${key}=${newValue}`; +} + +// src/utils/createEnvUpdater.ts +var import_fs = require("fs"); +var import_path = __toESM(require("path")); +function createEnvUpdater(config2) { + function updateEnvVariable(key, newValue, envFileName) { + const filePath = import_path.default.join(config2.basePath, `.env.${envFileName}`); + if (!(0, import_fs.existsSync)(filePath)) { + throw new Error(`File not found: ${filePath}`); } - return line; - }); - (0, import_fs.writeFileSync)(filePath, newLines.join("\n")); - process.env[key] = newValue; + const envContents = (0, import_fs.readFileSync)(filePath, "utf8"); + let lines = envContents.split(/\r?\n/); + const keyExists = lines.some((line) => line.startsWith(`${key}=`)); + if (!keyExists) { + log_default( + `Key ${key} not found in .env file. Adding to ${filePath}`, + "updateEnvVariable" + ); + lines.push(`${key}=${newValue}`); + } else { + lines = lines.map((line) => { + const [currentKey] = line.split("="); + if (currentKey === key) { + return `${key}=${newValue}`; + } + return line; + }); + } + (0, import_fs.writeFileSync)(filePath, lines.join("\n")); + process.env[key] = newValue; + } + function updateEnvAddress(prefix, newValue, envFileName, networkPostfix) { + const searchKey = networkPostfix ? `${config2.prefixes[prefix]}_${getNetworkEnvKey(networkPostfix)}` : String(config2.prefixes[prefix]); + updateEnvVariable(searchKey, newValue, envFileName); + } + return { updateEnvVariable, updateEnvAddress }; } -function updateEnvAddress(prefix, newValue, envFileName, networkPostfix) { - const searchKey = networkPostfix ? `${envPrefixes[prefix]}_${getNetworkEnvKey(networkPostfix)}` : envPrefixes[prefix]; - updateEnvVariable(searchKey, newValue, envFileName); + +// src/utils/getActualGasData.ts +async function getActualGasData(publicClient) { + const block = await publicClient.getBlock(); + const isEIP1559 = !!block.baseFeePerGas; + let gasPrice = 0n; + let maxPriorityFeePerGas = 0n; + try { + if (isEIP1559) { + const { maxFeePerGas } = await publicClient.estimateFeesPerGas(); + gasPrice = maxFeePerGas; + maxPriorityFeePerGas = await publicClient.estimateMaxPriorityFeePerGas(); + } else { + gasPrice = await publicClient.getGasPrice(); + } + } catch (error) { + console.error("Error getting actual gas data:", error); + return { + gasPrice: "0", + maxFeePerGas: "0", + maxPriorityFeePerGas: "0" + }; + } + const gasDataLegacy = { + gasPrice: gasPrice.toString() + }; + const gasDataEIP1559 = { + maxFeePerGas: gasPrice.toString(), + maxPriorityFeePerGas: maxPriorityFeePerGas.toString() + }; + const gasData = isEIP1559 ? gasDataEIP1559 : gasDataLegacy; + return gasData; } +// src/utils/getViemClients.ts +var import_viem3 = require("viem"); +var import_accounts = require("viem/accounts"); + // src/constants/conceroNetworks.ts +var import_chains_mainnet = __toESM(require("@concero/concero-networks/output/chains.mainnet.json")); +var import_chains_testnet = __toESM(require("@concero/concero-networks/output/chains.testnet.json")); var mainnetProxyDeployerPK = getWallet( "mainnet", "proxyDeployer", @@ -2455,11 +397,6 @@ var mainnetDeployerPK = getWallet("mainnet", "deployer", "privateKey"); var testnetDeployerPK = getWallet("testnet", "deployer", "privateKey"); var trezorDeployEnabled = getTrezorDeployEnabled(); var testnetAccounts = [testnetDeployerPK, testnetProxyDeployerPK]; -var networkTypes2 = { - mainnet: "mainnet", - testnet: "testnet", - localhost: "localhost" -}; function createExtendedNetworks(chains, networkType, accounts) { const validAccounts = accounts.filter((acc) => !!acc); return Object.fromEntries( @@ -2503,13 +440,13 @@ function createExtendedNetworks(chains, networkType, accounts) { ); } var testnetNetworks = createExtendedNetworks( - chains_testnet_default, - networkTypes2.testnet, + import_chains_testnet.default, + networkTypes.testnet, testnetAccounts ); var mainnetNetworks = createExtendedNetworks( - chains_mainnet_default, - networkTypes2.mainnet, + import_chains_mainnet.default, + networkTypes.mainnet, [mainnetDeployerPK, mainnetProxyDeployerPK] ); var conceroNetworks = { @@ -2517,8 +454,77 @@ var conceroNetworks = { ...mainnetNetworks }; +// src/utils/getViemClients.ts +function getClients(viemChain, url, account = (0, import_accounts.privateKeyToAccount)( + `0x${process.env.TESTNET_DEPLOYER_PRIVATE_KEY}` +)) { + const publicClient = (0, import_viem3.createPublicClient)({ transport: (0, import_viem3.http)(url), chain: viemChain }); + const walletClient = (0, import_viem3.createWalletClient)({ transport: (0, import_viem3.http)(url), chain: viemChain, account }); + return { walletClient, publicClient, account }; +} +function getTestClient(account) { + const testClient = (0, import_viem3.createTestClient)({ + chain: localhostViemChain, + mode: "hardhat", + transport: (0, import_viem3.http)(), + account + }).extend(import_viem3.publicActions).extend(import_viem3.walletActions); + return testClient; +} +function getFallbackClients(chain, account) { + if (!account) { + switch (chain.type) { + case "mainnet": + account = (0, import_accounts.privateKeyToAccount)(`0x${process.env.MAINNET_DEPLOYER_PRIVATE_KEY}`); + break; + case "testnet": + account = (0, import_accounts.privateKeyToAccount)(`0x${process.env.TESTNET_DEPLOYER_PRIVATE_KEY}`, { + nonceManager: import_viem3.nonceManager + }); + break; + case "localhost": + account = (0, import_accounts.privateKeyToAccount)(`0x${process.env.LOCALHOST_DEPLOYER_PRIVATE_KEY}`); + break; + default: + throw new Error(`Unsupported chain type: ${chain.type}`); + } + } + const { viemChain, name } = chain; + if (!conceroNetworks[name].rpcUrls.length) { + throw new Error(`No URLs configured for chain: ${name}`); + } + const transport = (0, import_viem3.fallback)( + conceroNetworks[name].rpcUrls.map( + (url) => (0, import_viem3.http)(url, { + timeout: 1e4, + retryCount: 1, + retryDelay: 250, + onFetchResponse: async (response) => { + if (response.status >= 400) { + throw new Error(`HTTP error: ${response.status} ${response.statusText}`); + } + } + }) + ) + ); + const publicClient = (0, import_viem3.createPublicClient)({ transport, chain: viemChain }); + const walletClient = (0, import_viem3.createWalletClient)({ transport, chain: viemChain, account }); + return { walletClient, publicClient, account }; +} +function getViemAccount(chainType, accountType) { + const privateKey = `0x${getWallet(chainType, accountType, "privateKey")}`; + return (0, import_accounts.privateKeyToAccount)(privateKey, { + nonceManager: import_viem3.nonceManager + }); +} + +// src/constants/config.ts +var config = { + DEFAULT_BLOCK_CONFIRMATIONS: 2 +}; + // src/deploy/GenericDeploy.ts -var genericDeploy = async ({ hre, contractName, contractPrefix, txParams }, ...contractConstructorArgs) => { +var genericDeploy = async ({ hre, contractName, txParams }, ...contractConstructorArgs) => { const [deployer] = await hre.ethers.getSigners(); const chain = conceroNetworks[hre.network.name]; log( @@ -2542,7 +548,7 @@ var genericDeploy = async ({ hre, contractName, contractPrefix, txParams }, ...c ); } const contract = await contractFactory.deploy(...contractConstructorArgs, deployOverrides); - await contract.deploymentTransaction()?.wait(); + const receipt = await contract.deploymentTransaction()?.wait(); const deploymentAddress = await contract.getAddress(); if (hre.tenderly) { await hre.tenderly.verify({ name: contractName, address: deploymentAddress }); @@ -2552,16 +558,17 @@ var genericDeploy = async ({ hre, contractName, contractPrefix, txParams }, ...c `deploy ${contractName}`, chain.name ); - updateEnvAddress( - contractPrefix, - deploymentAddress, - `deployments.${chain.type}`, - chain.name - ); - return contract.deploymentTransaction()?.hash; + return { + hash: contract.deploymentTransaction()?.hash, + address: deploymentAddress, + chainName: chain.name, + chainType: chain.type, + proxyAdminAddress: extractProxyAdminAddress(receipt) + }; }; // src/tokens/TokenSender.ts +var import_viem4 = require("viem"); var TokenSender = class { walletClient; publicClient; @@ -2573,36 +580,36 @@ var TokenSender = class { const [tokenDecimals, tokenSymbol, tokenBalance] = await Promise.all([ this.publicClient.readContract({ address: tokenAddress, - abi: erc20Abi, + abi: import_viem4.erc20Abi, functionName: "decimals", args: [] }), this.publicClient.readContract({ address: tokenAddress, - abi: erc20Abi, + abi: import_viem4.erc20Abi, functionName: "symbol", args: [] }), this.publicClient.readContract({ address: tokenAddress, - abi: erc20Abi, + abi: import_viem4.erc20Abi, functionName: "balanceOf", args: [this.walletClient.account?.address] }) ]); console.log( - `Current ${tokenSymbol} balance ${formatUnits(tokenBalance, tokenDecimals)}` + `Current ${tokenSymbol} balance ${(0, import_viem4.formatUnits)(tokenBalance, tokenDecimals)}` ); - if (parseUnits(amount, tokenDecimals) > tokenBalance) { + if ((0, import_viem4.parseUnits)(amount, tokenDecimals) > tokenBalance) { throw new Error( - `Insufficient balance. Required: ${amount}, available: ${formatUnits(tokenBalance, tokenDecimals)}` + `Insufficient balance. Required: ${amount}, available: ${(0, import_viem4.formatUnits)(tokenBalance, tokenDecimals)}` ); } const txHash = await this.walletClient.writeContract({ address: tokenAddress, - abi: erc20Abi, + abi: import_viem4.erc20Abi, functionName: "transfer", - args: [recipient, parseUnits(amount, tokenDecimals)], + args: [recipient, (0, import_viem4.parseUnits)(amount, tokenDecimals)], chain: this.walletClient.chain, account: this.walletClient.account }); @@ -2616,107 +623,36 @@ var TokenSender = class { return txHash; } }; - -// src/deploy/getActualGasData.ts -async function getActualGasData(publicClient) { - const block = await publicClient.getBlock(); - const isEIP1559 = !!block.baseFeePerGas; - let gasPrice = 0n; - let maxPriorityFeePerGas = 0n; - try { - if (isEIP1559) { - const { maxFeePerGas } = await publicClient.estimateFeesPerGas(); - gasPrice = maxFeePerGas; - maxPriorityFeePerGas = await publicClient.estimateMaxPriorityFeePerGas(); - } else { - gasPrice = await publicClient.getGasPrice(); - } - } catch (error) { - console.error("Error getting actual gas data:", error); - return { - gasPrice: "0", - maxFeePerGas: "0", - maxPriorityFeePerGas: "0" - }; - } - const gasDataLegacy = { - gasPrice: gasPrice.toString() - }; - const gasDataEIP1559 = { - maxFeePerGas: gasPrice.toString(), - maxPriorityFeePerGas: maxPriorityFeePerGas.toString() - }; - const gasData = isEIP1559 ? gasDataEIP1559 : gasDataLegacy; - return gasData; -} - -// src/deploy/hardhatDeployWrapper.ts -async function hardhatDeployWrapper(contractName, { - hre, - args, - publicClient, - proxy = false, - gasLimit, - log: log2 = false, - libraries, - skipIfAlreadyDeployed = false -}) { - let actualDeployer; - if (proxy) { - const { proxyDeployer } = await hre.getNamedAccounts(); - actualDeployer = proxyDeployer; - } else { - const { deployer } = await hre.getNamedAccounts(); - actualDeployer = deployer; - } - const { deploy } = hre.deployments; - const nonce = await publicClient.getTransactionCount({ - address: actualDeployer - }); - const gasData = await getActualGasData(publicClient); - const waitConfirmations = hre.network.name.startsWith("ethereum") ? 1 : 3; - if (log2) { - console.log( - `\x1B[34m[hardhatDeployWrapper]\x1B[0m\x1B[35m[args]\x1B[0m`, - { - from: actualDeployer, - args, - nonce, - gasLimit: gasLimit ? gasLimit : "auto", - gasData, - waitConfirmations - } - ); - } - let deployment; - try { - console.log("Starting deployment of:", contractName); - deployment = await deploy(contractName, { - from: actualDeployer, - args, - log: true, - autoMine: true, - nonce, - waitConfirmations, - ...gasLimit ? { gasLimit } : {}, - ...gasData, - ...libraries ? { libraries } : {}, - skipIfAlreadyDeployed - }); - } catch (error) { - console.error("Error deploying contract:", error); - throw error; - } - return deployment; -} // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { TokenSender, + compileContracts, + conceroNetworks, config, + createEnvAddressGetter, + createEnvUpdater, + createViemChain, + err, + ethersSignerCallContract, + extractProxyAdminAddress, + formatGas, genericDeploy, + getActualGasData, + getClients, + getEnvVar, + getFallbackClients, getNetworkEnvKey, getNetworkKey, - hardhatDeployWrapper, - networkTypes + getTestClient, + getTrezorDeployEnabled, + getViemAccount, + getWallet, + localhostViemChain, + log, + mainnetNetworks, + networkTypes, + shorten, + testnetNetworks, + warn }); //# sourceMappingURL=index.cjs.js.map diff --git a/dist/index.cjs.js.map b/dist/index.cjs.js.map index 2df12ef..988c1dc 100644 --- a/dist/index.cjs.js.map +++ b/dist/index.cjs.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../node_modules/viem/errors/version.ts", "../node_modules/viem/errors/base.ts", "../node_modules/viem/utils/unit/formatUnits.ts", "../node_modules/viem/constants/abis.ts", "../src/index.ts", "../src/constants/config.ts", "../src/networks/getNetworkEnvKey.ts", "../src/networks/networkTypes.ts", "../node_modules/@concero/concero-networks/output/chains.mainnet.json", "../node_modules/@concero/concero-networks/output/chains.testnet.json", "../node_modules/viem/utils/chain/defineChain.ts", "../node_modules/viem/errors/unit.ts", "../node_modules/viem/utils/unit/parseUnits.ts", "../node_modules/viem/index.ts", "../src/utils/createViemChain.ts", "../src/utils/getEnvVar.ts", "../src/utils/log.ts", "../src/utils/getTrezorDeployEnabled.ts", "../src/utils/getWallet.ts", "../src/utils/updateEnvVariable.ts", "../src/constants/deploymentVariables.ts", "../src/constants/conceroNetworks.ts", "../src/deploy/GenericDeploy.ts", "../src/tokens/TokenSender.ts", "../src/deploy/getActualGasData.ts", "../src/deploy/hardhatDeployWrapper.ts"], - "sourcesContent": ["export const version = '2.24.2'\n", "import { version } from './version.js'\n\ntype ErrorConfig = {\n getDocsUrl?: ((args: BaseErrorParameters) => string | undefined) | undefined\n version?: string | undefined\n}\n\nlet errorConfig: ErrorConfig = {\n getDocsUrl: ({\n docsBaseUrl,\n docsPath = '',\n docsSlug,\n }: BaseErrorParameters) =>\n docsPath\n ? `${docsBaseUrl ?? 'https://viem.sh'}${docsPath}${\n docsSlug ? `#${docsSlug}` : ''\n }`\n : undefined,\n version: `viem@${version}`,\n}\n\nexport function setErrorConfig(config: ErrorConfig) {\n errorConfig = config\n}\n\ntype BaseErrorParameters = {\n cause?: BaseError | Error | undefined\n details?: string | undefined\n docsBaseUrl?: string | undefined\n docsPath?: string | undefined\n docsSlug?: string | undefined\n metaMessages?: string[] | undefined\n name?: string | undefined\n}\n\nexport type BaseErrorType = BaseError & { name: 'BaseError' }\nexport class BaseError extends Error {\n details: string\n docsPath?: string | undefined\n metaMessages?: string[] | undefined\n shortMessage: string\n version: string\n\n override name = 'BaseError'\n\n constructor(shortMessage: string, args: BaseErrorParameters = {}) {\n const details = (() => {\n if (args.cause instanceof BaseError) return args.cause.details\n if (args.cause?.message) return args.cause.message\n return args.details!\n })()\n const docsPath = (() => {\n if (args.cause instanceof BaseError)\n return args.cause.docsPath || args.docsPath\n return args.docsPath\n })()\n const docsUrl = errorConfig.getDocsUrl?.({ ...args, docsPath })\n\n const message = [\n shortMessage || 'An error occurred.',\n '',\n ...(args.metaMessages ? [...args.metaMessages, ''] : []),\n ...(docsUrl ? [`Docs: ${docsUrl}`] : []),\n ...(details ? [`Details: ${details}`] : []),\n ...(errorConfig.version ? [`Version: ${errorConfig.version}`] : []),\n ].join('\\n')\n\n super(message, args.cause ? { cause: args.cause } : undefined)\n\n this.details = details\n this.docsPath = docsPath\n this.metaMessages = args.metaMessages\n this.name = args.name ?? this.name\n this.shortMessage = shortMessage\n this.version = version\n }\n\n walk(): Error\n walk(fn: (err: unknown) => boolean): Error | null\n walk(fn?: any): any {\n return walk(this, fn)\n }\n}\n\nfunction walk(\n err: unknown,\n fn?: ((err: unknown) => boolean) | undefined,\n): unknown {\n if (fn?.(err)) return err\n if (\n err &&\n typeof err === 'object' &&\n 'cause' in err &&\n err.cause !== undefined\n )\n return walk(err.cause, fn)\n return fn ? null : err\n}\n", "import type { ErrorType } from '../../errors/utils.js'\n\nexport type FormatUnitsErrorType = ErrorType\n\n/**\n * Divides a number by a given exponent of base 10 (10exponent), and formats it into a string representation of the number..\n *\n * - Docs: https://viem.sh/docs/utilities/formatUnits\n *\n * @example\n * import { formatUnits } from 'viem'\n *\n * formatUnits(420000000000n, 9)\n * // '420'\n */\nexport function formatUnits(value: bigint, decimals: number) {\n let display = value.toString()\n\n const negative = display.startsWith('-')\n if (negative) display = display.slice(1)\n\n display = display.padStart(decimals, '0')\n\n let [integer, fraction] = [\n display.slice(0, display.length - decimals),\n display.slice(display.length - decimals),\n ]\n fraction = fraction.replace(/(0+)$/, '')\n return `${negative ? '-' : ''}${integer || '0'}${\n fraction ? `.${fraction}` : ''\n }`\n}\n", "/* [Multicall3](https://github.com/mds1/multicall) */\nexport const multicall3Abi = [\n {\n inputs: [\n {\n components: [\n {\n name: 'target',\n type: 'address',\n },\n {\n name: 'allowFailure',\n type: 'bool',\n },\n {\n name: 'callData',\n type: 'bytes',\n },\n ],\n name: 'calls',\n type: 'tuple[]',\n },\n ],\n name: 'aggregate3',\n outputs: [\n {\n components: [\n {\n name: 'success',\n type: 'bool',\n },\n {\n name: 'returnData',\n type: 'bytes',\n },\n ],\n name: 'returnData',\n type: 'tuple[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n] as const\n\nconst universalResolverErrors = [\n {\n inputs: [],\n name: 'ResolverNotFound',\n type: 'error',\n },\n {\n inputs: [],\n name: 'ResolverWildcardNotSupported',\n type: 'error',\n },\n {\n inputs: [],\n name: 'ResolverNotContract',\n type: 'error',\n },\n {\n inputs: [\n {\n name: 'returnData',\n type: 'bytes',\n },\n ],\n name: 'ResolverError',\n type: 'error',\n },\n {\n inputs: [\n {\n components: [\n {\n name: 'status',\n type: 'uint16',\n },\n {\n name: 'message',\n type: 'string',\n },\n ],\n name: 'errors',\n type: 'tuple[]',\n },\n ],\n name: 'HttpError',\n type: 'error',\n },\n] as const\n\nexport const universalResolverResolveAbi = [\n ...universalResolverErrors,\n {\n name: 'resolve',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'name', type: 'bytes' },\n { name: 'data', type: 'bytes' },\n ],\n outputs: [\n { name: '', type: 'bytes' },\n { name: 'address', type: 'address' },\n ],\n },\n {\n name: 'resolve',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'name', type: 'bytes' },\n { name: 'data', type: 'bytes' },\n { name: 'gateways', type: 'string[]' },\n ],\n outputs: [\n { name: '', type: 'bytes' },\n { name: 'address', type: 'address' },\n ],\n },\n] as const\n\nexport const universalResolverReverseAbi = [\n ...universalResolverErrors,\n {\n name: 'reverse',\n type: 'function',\n stateMutability: 'view',\n inputs: [{ type: 'bytes', name: 'reverseName' }],\n outputs: [\n { type: 'string', name: 'resolvedName' },\n { type: 'address', name: 'resolvedAddress' },\n { type: 'address', name: 'reverseResolver' },\n { type: 'address', name: 'resolver' },\n ],\n },\n {\n name: 'reverse',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { type: 'bytes', name: 'reverseName' },\n { type: 'string[]', name: 'gateways' },\n ],\n outputs: [\n { type: 'string', name: 'resolvedName' },\n { type: 'address', name: 'resolvedAddress' },\n { type: 'address', name: 'reverseResolver' },\n { type: 'address', name: 'resolver' },\n ],\n },\n] as const\n\nexport const textResolverAbi = [\n {\n name: 'text',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'name', type: 'bytes32' },\n { name: 'key', type: 'string' },\n ],\n outputs: [{ name: '', type: 'string' }],\n },\n] as const\n\nexport const addressResolverAbi = [\n {\n name: 'addr',\n type: 'function',\n stateMutability: 'view',\n inputs: [{ name: 'name', type: 'bytes32' }],\n outputs: [{ name: '', type: 'address' }],\n },\n {\n name: 'addr',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'name', type: 'bytes32' },\n { name: 'coinType', type: 'uint256' },\n ],\n outputs: [{ name: '', type: 'bytes' }],\n },\n] as const\n\n// ERC-1271\n// isValidSignature(bytes32 hash, bytes signature) \u2192 bytes4 magicValue\n/** @internal */\nexport const smartAccountAbi = [\n {\n name: 'isValidSignature',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'hash', type: 'bytes32' },\n { name: 'signature', type: 'bytes' },\n ],\n outputs: [{ name: '', type: 'bytes4' }],\n },\n] as const\n\n// ERC-6492 - universal deployless signature validator contract\n// constructor(address _signer, bytes32 _hash, bytes _signature) \u2192 bytes4 returnValue\n// returnValue is either 0x1 (valid) or 0x0 (invalid)\nexport const universalSignatureValidatorAbi = [\n {\n inputs: [\n {\n name: '_signer',\n type: 'address',\n },\n {\n name: '_hash',\n type: 'bytes32',\n },\n {\n name: '_signature',\n type: 'bytes',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'constructor',\n },\n {\n inputs: [\n {\n name: '_signer',\n type: 'address',\n },\n {\n name: '_hash',\n type: 'bytes32',\n },\n {\n name: '_signature',\n type: 'bytes',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n name: 'isValidSig',\n },\n] as const\n\n/** [ERC-20 Token Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-20) */\nexport const erc20Abi = [\n {\n type: 'event',\n name: 'Approval',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'event',\n name: 'Transfer',\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'allowance',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'spender',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'approve',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'balanceOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'decimals',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint8',\n },\n ],\n },\n {\n type: 'function',\n name: 'name',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'symbol',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'totalSupply',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'transfer',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'transferFrom',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'sender',\n type: 'address',\n },\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n] as const\n\n/**\n * [bytes32-flavored ERC-20](https://docs.makerdao.com/smart-contract-modules/mkr-module#4.-gotchas-potential-source-of-user-error)\n * for tokens (ie. Maker) that use bytes32 instead of string.\n */\nexport const erc20Abi_bytes32 = [\n {\n type: 'event',\n name: 'Approval',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'event',\n name: 'Transfer',\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'allowance',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'spender',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'approve',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'balanceOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'decimals',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint8',\n },\n ],\n },\n {\n type: 'function',\n name: 'name',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'bytes32',\n },\n ],\n },\n {\n type: 'function',\n name: 'symbol',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'bytes32',\n },\n ],\n },\n {\n type: 'function',\n name: 'totalSupply',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'transfer',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'transferFrom',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'sender',\n type: 'address',\n },\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n] as const\n\n/** [ERC-721 Non-Fungible Token Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-721) */\nexport const erc721Abi = [\n {\n type: 'event',\n name: 'Approval',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: true,\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'event',\n name: 'ApprovalForAll',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'operator',\n type: 'address',\n },\n {\n indexed: false,\n name: 'approved',\n type: 'bool',\n },\n ],\n },\n {\n type: 'event',\n name: 'Transfer',\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: true,\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'approve',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'balanceOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'getApproved',\n stateMutability: 'view',\n inputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'address',\n },\n ],\n },\n {\n type: 'function',\n name: 'isApprovedForAll',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'operator',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'name',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'ownerOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n name: 'owner',\n type: 'address',\n },\n ],\n },\n {\n type: 'function',\n name: 'safeTransferFrom',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'from',\n type: 'address',\n },\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'safeTransferFrom',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'from',\n type: 'address',\n },\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'id',\n type: 'uint256',\n },\n {\n name: 'data',\n type: 'bytes',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'setApprovalForAll',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'operator',\n type: 'address',\n },\n {\n name: 'approved',\n type: 'bool',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'symbol',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'tokenByIndex',\n stateMutability: 'view',\n inputs: [\n {\n name: 'index',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'tokenByIndex',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'index',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'tokenURI',\n stateMutability: 'view',\n inputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'totalSupply',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'transferFrom',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'sender',\n type: 'address',\n },\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'tokeId',\n type: 'uint256',\n },\n ],\n outputs: [],\n },\n] as const\n\n/** [ERC-4626 Tokenized Vaults Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-4626) */\nexport const erc4626Abi = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'Approval',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'sender',\n type: 'address',\n },\n {\n indexed: true,\n name: 'receiver',\n type: 'address',\n },\n {\n indexed: false,\n name: 'assets',\n type: 'uint256',\n },\n {\n indexed: false,\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'Deposit',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'Transfer',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'sender',\n type: 'address',\n },\n {\n indexed: true,\n name: 'receiver',\n type: 'address',\n },\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: false,\n name: 'assets',\n type: 'uint256',\n },\n {\n indexed: false,\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'Withdraw',\n type: 'event',\n },\n {\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'spender',\n type: 'address',\n },\n ],\n name: 'allowance',\n outputs: [\n {\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'approve',\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'asset',\n outputs: [\n {\n name: 'assetTokenAddress',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n name: 'balanceOf',\n outputs: [\n {\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'convertToAssets',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n name: 'convertToShares',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n ],\n name: 'deposit',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'caller',\n type: 'address',\n },\n ],\n name: 'maxDeposit',\n outputs: [\n {\n name: 'maxAssets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'caller',\n type: 'address',\n },\n ],\n name: 'maxMint',\n outputs: [\n {\n name: 'maxShares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'maxRedeem',\n outputs: [\n {\n name: 'maxShares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'maxWithdraw',\n outputs: [\n {\n name: 'maxAssets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n ],\n name: 'mint',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n name: 'previewDeposit',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'previewMint',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'previewRedeem',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n name: 'previewWithdraw',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'redeem',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'totalAssets',\n outputs: [\n {\n name: 'totalManagedAssets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'totalSupply',\n outputs: [\n {\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'transfer',\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'from',\n type: 'address',\n },\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'transferFrom',\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'withdraw',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const\n", "import { config } from './constants/config';\nimport {\n\tgetNetworkEnvKey,\n\tgetNetworkKey,\n\tnetworkTypes,\n\ttype ConceroNetwork,\n\ttype NetworkType,\n} from './networks';\nimport { genericDeploy } from './deploy/GenericDeploy';\n\nimport { TokenSender } from './tokens/TokenSender';\n\nimport { hardhatDeployWrapper } from './deploy/hardhatDeployWrapper';\n\nexport {\n\tConceroNetwork,\n\tconfig,\n\tgetNetworkEnvKey,\n\tgetNetworkKey,\n\tnetworkTypes,\n\tTokenSender,\n\thardhatDeployWrapper,\n\tgenericDeploy,\n};\nexport type { NetworkType };\n", "export const config = {\n DEFAULT_BLOCK_CONFIRMATIONS: 2,\n};\n", "/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkEnvKey(networkName: string): string {\n if (!networkName) {\n throw new Error('Network name must be provided');\n }\n return camelCaseToCapsSnakeCase(networkName);\n}\n\n/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkKey(NETWORK_NAME: string): string {\n if (!NETWORK_NAME) {\n throw new Error('Network name must be provided');\n }\n return capsSnakeCaseToCamelCase(NETWORK_NAME);\n}\n\n/**\n * Converts a string from CAPS_SNAKE_CASE to camelCase\n *\n * @param snakeCaseString The string in CAPS_SNAKE_CASE format\n * @returns The string converted to camelCase format\n */\nexport function capsSnakeCaseToCamelCase(snakeCaseString: string): string {\n if (!snakeCaseString) {\n throw new Error('String must be provided');\n }\n\n return snakeCaseString\n .toLowerCase()\n .replace(/_([a-z])/g, (_, char) => char.toUpperCase());\n}\n\n/**\n * Converts a string from camelCase to CAPS_SNAKE_CASE\n *\n * @param camelCaseString The string in camelCase format\n * @returns The string converted to CAPS_SNAKE_CASE format\n */\nexport function camelCaseToCapsSnakeCase(camelCaseString: string): string {\n if (!camelCaseString) {\n throw new Error('String must be provided');\n }\n\n return camelCaseString.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toUpperCase();\n}\n\nexport function getNetworkName(networkEnvKey: string): string {\n if (!networkEnvKey) {\n throw new Error('Network name must be provided');\n }\n\n return networkEnvKey\n .toLowerCase()\n .split('_')\n .map((word, index) =>\n index === 0 ? word : word[0].toUpperCase() + word.slice(1)\n )\n .join('');\n}\n", "import { type NetworkType } from './types';\n\nexport const networkTypes: Record = {\n mainnet: 'mainnet',\n testnet: 'testnet',\n localhost: 'localhost',\n};\n", "{\n \"1\": {\n \"id\": \"1\",\n \"chainSelector\": 1,\n \"name\": \"ethereum\",\n \"rpcUrls\": [\n \"https://cloudflare-eth.com\",\n \"https://eth1.lava.build\",\n \"https://mainnet.gateway.tenderly.co\",\n \"https://eth.drpc.org\",\n \"https://gateway.tenderly.co/public/mainnet\",\n \"https://go.getblock.io/aefd01aa907c4805ba3c00a9e5b48c6b\",\n \"https://0xrpc.io/eth\",\n \"https://eth-mainnet.rpcfast.com?api_key=xbhWBI1Wkguk8SNMu1bvvLurPGLXmgwYeC4S6g2H7WdwFigZSmPWVZRxrskEQwIf\",\n \"https://rpc.eth.gateway.fm\",\n \"https://1rpc.io/eth\",\n \"https://eth-mainnet.public.blastapi.io\",\n \"https://ethereum-rpc.publicnode.com\",\n \"https://rpc.mevblocker.io/fast\",\n \"https://eth.meowrpc.com\",\n \"https://eth.api.pocket.network\",\n \"https://ethereum-public.nodies.app\",\n \"https://rpc.flashbots.net/fast\",\n \"https://ethereum-json-rpc.stakely.io\",\n \"https://eth.llamarpc.com\",\n \"https://eth.rpc.blxrbdn.com\",\n \"https://ethereum.public.blockpi.network/v1/rpc/public\",\n \"https://ethereum-mainnet.gateway.tatum.io\",\n \"https://eth.blockrazor.xyz\",\n \"https://api-ethereum-mainnet-reth.n.dwellir.com/2ccf18bf-2916-4198-8856-42172854353c\",\n \"https://eth.merkle.io\",\n \"https://eth-mainnet.nodereal.io/v1/1659dfb40aa24bbb8153a677b98064d7\",\n \"https://rpc.flashbots.net\",\n \"https://rpc.mevblocker.io/fullprivacy\",\n \"https://rpc.mevblocker.io/noreverts\",\n \"https://rpc.fullsend.to\",\n \"https://eth.api.onfinality.io/public\",\n \"https://public-eth.nownodes.io\",\n \"https://openapi.bitstack.com/v1/wNFxbiJyQsSeLrX8RRCHi7NpRxrlErZk/DjShIqLishPCTB9HiMkPHXjUM9CNM9Na/ETH/mainnet\",\n \"https://core.gashawk.io/rpc\",\n \"https://rpc.mevblocker.io\",\n \"https://ethereum.rpc.subquery.network/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Ethereum\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Etherscan\",\n \"url\": \"https://etherscan.io\",\n \"apiUrl\": \"https://api.etherscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 75,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"10\": {\n \"id\": \"10\",\n \"chainSelector\": 10,\n \"name\": \"optimism\",\n \"rpcUrls\": [\n \"https://optimism.drpc.org\",\n \"https://go.getblock.io/e8a75f8dcf614861becfbcb185be6eb4\",\n \"https://gateway.tenderly.co/public/optimism\",\n \"https://mainnet.optimism.io\",\n \"https://1rpc.io/op\",\n \"https://optimism.gateway.tenderly.co\",\n \"https://api-optimism-mainnet-archive.n.dwellir.com/2ccf18bf-2916-4198-8856-42172854353c\",\n \"https://optimism-rpc.publicnode.com\",\n \"https://optimism-public.nodies.app\",\n \"https://public-op-mainnet.fastnode.io\",\n \"https://optimism-mainnet.gateway.tatum.io\",\n \"https://optimism.api.onfinality.io/public\",\n \"https://optimism.public.blockpi.network/v1/rpc/public\",\n \"https://optimism.rpc.subquery.network/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Optimism Explorer\",\n \"url\": \"https://optimistic.etherscan.io\",\n \"apiUrl\": \"https://api-optimistic.etherscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 50,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"137\": {\n \"id\": \"137\",\n \"chainSelector\": 137,\n \"name\": \"polygon\",\n \"rpcUrls\": [\n \"https://polygon.drpc.org\",\n \"https://gateway.tenderly.co/public/polygon\",\n \"https://polygon.lava.build\",\n \"https://go.getblock.io/02667b699f05444ab2c64f9bff28f027\",\n \"https://polygon-mainnet.gateway.tatum.io\",\n \"https://polygon-rpc.com\",\n \"https://1rpc.io/matic\",\n \"https://polygon.meowrpc.com\",\n \"https://polygon-bor-rpc.publicnode.com\",\n \"https://polygon-public.nodies.app\",\n \"https://polygon.gateway.tenderly.co\",\n \"https://rpc-mainnet.matic.quiknode.pro\",\n \"https://polygon-mainnet.rpcfast.com?api_key=xbhWBI1Wkguk8SNMu1bvvLurPGLXmgwYeC4S6g2H7WdwFigZSmPWVZRxrskEQwIf\",\n \"https://polygon.rpc.subquery.network/public\",\n \"https://polygon.api.onfinality.io/public\",\n \"https://poly.api.pocket.network\"\n ],\n \"nativeCurrency\": {\n \"name\": \"POL\",\n \"decimals\": 18,\n \"symbol\": \"POL\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"PolygonScan\",\n \"url\": \"https://polygonscan.com\",\n \"apiUrl\": \"https://api.polygonscan.com/api\"\n }\n ],\n \"finalityConfirmations\": 128,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"8453\": {\n \"id\": \"8453\",\n \"chainSelector\": 8453,\n \"name\": \"base\",\n \"rpcUrls\": [\n \"https://base.drpc.org\",\n \"https://base.lava.build\",\n \"https://mainnet.base.org\",\n \"https://gateway.tenderly.co/public/base\",\n \"https://base.meowrpc.com\",\n \"https://base.gateway.tenderly.co\",\n \"https://developer-access-mainnet.base.org\",\n \"https://1rpc.io/base\",\n \"https://base-rpc.publicnode.com\",\n \"https://base-public.nodies.app\",\n \"https://base.public.blockpi.network/v1/rpc/public\",\n \"https://base-mainnet.public.blastapi.io\",\n \"https://base.api.onfinality.io/public\",\n \"https://base.rpc.blxrbdn.com\",\n \"https://base.api.pocket.network\",\n \"https://base.llamarpc.com\",\n \"https://api-base-mainnet-archive.n.dwellir.com/2ccf18bf-2916-4198-8856-42172854353c\",\n \"https://base.rpc.subquery.network/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Basescan\",\n \"url\": \"https://basescan.org\",\n \"apiUrl\": \"https://api.basescan.org/api\"\n }\n ],\n \"finalityConfirmations\": 50,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"42161\": {\n \"id\": \"42161\",\n \"chainSelector\": 42161,\n \"name\": \"arbitrum\",\n \"rpcUrls\": [\n \"https://arbitrum.drpc.org\",\n \"https://api-arbitrum-mainnet-archive.n.dwellir.com/2ccf18bf-2916-4198-8856-42172854353c\",\n \"https://arb1.lava.build\",\n \"https://1rpc.io/arb\",\n \"https://arbitrum-one-rpc.publicnode.com\",\n \"https://arbitrum-one-public.nodies.app\",\n \"https://arbitrum.gateway.tenderly.co\",\n \"https://arbitrum-one.public.blastapi.io\",\n \"https://arbitrum.api.onfinality.io/public\",\n \"https://arbitrum.meowrpc.com\",\n \"https://arbitrum.public.blockpi.network/v1/rpc/public\",\n \"https://arb1.arbitrum.io/rpc\",\n \"https://public-arb-mainnet.fastnode.io\",\n \"https://arbitrum.rpc.subquery.network/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Arbiscan\",\n \"url\": \"https://arbiscan.io\",\n \"apiUrl\": \"https://api.arbiscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 4080,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"43114\": {\n \"id\": \"43114\",\n \"chainSelector\": 43114,\n \"name\": \"avalanche\",\n \"rpcUrls\": [\n \"https://api.avax.network/ext/bc/C/rpc\",\n \"https://avalanche-mainnet.gateway.tenderly.co\",\n \"https://avalanche.drpc.org\",\n \"https://avax.api.pocket.network\",\n \"https://avalanche-c-chain-rpc.publicnode.com\",\n \"https://1rpc.io/avax/c\",\n \"https://avalanche-public.nodies.app/ext/bc/C/rpc\",\n \"https://avax.meowrpc.com\",\n \"https://avalanche.api.onfinality.io/public/ext/bc/C/rpc\",\n \"https://spectrum-01.simplystaking.xyz/avalanche-mn-rpc/ext/bc/C/rpc\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Avalanche\",\n \"decimals\": 18,\n \"symbol\": \"AVAX\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"SnowTrace\",\n \"url\": \"https://snowtrace.io\",\n \"apiUrl\": \"https://api.snowtrace.io/api\"\n }\n ],\n \"finalityConfirmations\": 1,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n }\n}", "{\n \"81\": {\n \"id\": \"81\",\n \"isTestnet\": true,\n \"chainSelector\": 81,\n \"name\": \"astarShibuya\",\n \"rpcUrls\": [\n \"https://evm.shibuya.astar.network\",\n \"https://evm.shibuya.astar.network\",\n \"https://shibuya.public.blastapi.io\",\n \"https://shibuya-rpc.dwellir.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Astar\",\n \"decimals\": 18,\n \"symbol\": \"ASTR\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Subscan\",\n \"url\": \"https://shibuya.subscan.io\",\n \"apiUrl\": \"https://shibuya.subscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 6,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"97\": {\n \"id\": \"97\",\n \"isTestnet\": true,\n \"chainSelector\": 97,\n \"name\": \"bnbTestnet\",\n \"rpcUrls\": [\n \"https://bsc-testnet.drpc.org\",\n \"https://bsc-testnet-rpc.publicnode.com\",\n \"https://data-seed-prebsc-2-s2.bnbchain.org:8545\",\n \"https://data-seed-prebsc-1-s2.bnbchain.org:8545\",\n \"https://data-seed-prebsc-2-s3.bnbchain.org:8545\",\n \"https://data-seed-prebsc-1-s1.bnbchain.org:8545\",\n \"https://data-seed-prebsc-2-s1.bnbchain.org:8545\",\n \"https://data-seed-prebsc-1-s3.bnbchain.org:8545\",\n \"https://bnb-testnet.api.onfinality.io/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"BNB\",\n \"decimals\": 18,\n \"symbol\": \"tBNB\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"BscScan\",\n \"url\": \"https://testnet.bscscan.com\",\n \"apiUrl\": \"https://api-testnet.bscscan.com/api\"\n }\n ],\n \"finalityConfirmations\": 7,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xf6BBdC1fD89E554639D7A683909338802B05F160\",\n \"relayerLib\": \"0x3a4EA7fd0CeA70a4B2Cf72c5AC966225C98eE48d\",\n \"validatorLib\": \"0xAEBaacfa9CaC6B8486Ae77843728c863c909E7d0\"\n }\n },\n \"133\": {\n \"id\": \"133\",\n \"isTestnet\": true,\n \"chainSelector\": 133,\n \"name\": \"hashkeyTestnet\",\n \"rpcUrls\": [],\n \"nativeCurrency\": {\n \"name\": \"HashKey EcoPoints\",\n \"decimals\": 18,\n \"symbol\": \"HSK\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Hashkey Explorer\",\n \"url\": \"https://testnet.hashkeyscan.io\",\n \"apiUrl\": \"https://testnet.hashkeyscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 1800,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"157\": {\n \"id\": \"157\",\n \"isTestnet\": true,\n \"chainSelector\": 157,\n \"name\": \"shibariumPuppynet\",\n \"rpcUrls\": [\n \"https://puppynet.shibrpc.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Bone\",\n \"decimals\": 18,\n \"symbol\": \"BONE\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Puppyscan\",\n \"url\": \"https://puppyscan.shib.io\",\n \"apiUrl\": \"https://puppyscan.shib.io/api\"\n }\n ],\n \"finalityConfirmations\": 60,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xea73Bc856EdD980912Fb8FE4CFC7bba52D980F6A\",\n \"relayerLib\": \"0x9900a9E38E8695eE9109962b9f4671cF977c265a\",\n \"validatorLib\": \"0x39f311124745064935cB196AeE2a950cbbC11336\"\n }\n },\n \"195\": {\n \"id\": \"195\",\n \"isTestnet\": true,\n \"chainSelector\": 195,\n \"name\": \"xlayerSepolia\",\n \"rpcUrls\": [],\n \"nativeCurrency\": {\n \"name\": \"OKB\",\n \"decimals\": 18,\n \"symbol\": \"OKB\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"X Layer Explorer\",\n \"url\": \"https://testnet-explorer.xlayer.tech\",\n \"apiUrl\": \"https://testnet-explorer.xlayer.tech/api\"\n }\n ],\n \"finalityConfirmations\": 3600,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"296\": {\n \"id\": \"296\",\n \"isTestnet\": true,\n \"chainSelector\": 296,\n \"name\": \"hederaTestnet\",\n \"rpcUrls\": [\n \"https://testnet.hashio.io/api\",\n \"https://296.rpc.thirdweb.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"HBAR\",\n \"decimals\": 18,\n \"symbol\": \"HBAR\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"300\": {\n \"id\": \"300\",\n \"isTestnet\": true,\n \"chainSelector\": 300,\n \"name\": \"zksyncSepolia\",\n \"rpcUrls\": [\n \"https://zksync-sepolia.drpc.org\",\n \"https://rpc.ankr.com/zksync_era_sepolia\",\n \"https://sepolia.era.zksync.dev\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 1200,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xBd5EC2962802123f6D8d0092dC485C98e23D1394\",\n \"relayerLib\": \"0x06942a1E6A73069a58306d9E154051b85b32D071\",\n \"validatorLib\": \"0xe277f7afA46291d4c729a184D51D78ae598d54b1\"\n }\n },\n \"338\": {\n \"id\": \"338\",\n \"isTestnet\": true,\n \"chainSelector\": 338,\n \"name\": \"cronosTestnet\",\n \"rpcUrls\": [\n \"https://cro-testnet.gateway.tatum.io\",\n \"https://cronos-testnet.drpc.org\",\n \"https://evm-t3.cronos.org\"\n ],\n \"nativeCurrency\": {\n \"name\": \"CRO\",\n \"decimals\": 18,\n \"symbol\": \"tCRO\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Cronos Explorer\",\n \"url\": \"https://testnet.cronoscan.com\",\n \"apiUrl\": \"https://api-testnet.cronoscan.com/api\"\n }\n ],\n \"finalityConfirmations\": 2,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"545\": {\n \"id\": \"545\",\n \"isTestnet\": true,\n \"chainSelector\": 545,\n \"name\": \"flowTestnet\",\n \"rpcUrls\": [\n \"https://testnet.evm.nodes.onflow.org\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Flow\",\n \"decimals\": 18,\n \"symbol\": \"FLOW\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xf6BBdC1fD89E554639D7A683909338802B05F160\",\n \"relayerLib\": \"0x3a4EA7fd0CeA70a4B2Cf72c5AC966225C98eE48d\",\n \"validatorLib\": \"0xAEBaacfa9CaC6B8486Ae77843728c863c909E7d0\"\n }\n },\n \"919\": {\n \"id\": \"919\",\n \"isTestnet\": true,\n \"chainSelector\": 919,\n \"name\": \"modeTestnet\",\n \"rpcUrls\": [\n \"https://mode-testnet.drpc.org\",\n \"https://sepolia.mode.network\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Mode Explorer\",\n \"url\": \"https://sepolia.explorer.mode.network\",\n \"apiUrl\": \"https://sepolia.explorer.mode.network/api\"\n }\n ],\n \"finalityConfirmations\": 1110,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"943\": {\n \"id\": \"943\",\n \"isTestnet\": true,\n \"chainSelector\": 943,\n \"name\": \"pulsechainTestnet\",\n \"rpcUrls\": [\n \"https://pulsechain-testnet-rpc.publicnode.com\",\n \"https://rpc-testnet-pulsechain.g4mm4.io\",\n \"https://rpc.v4.testnet.pulsechain.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"V4 Pulse\",\n \"decimals\": 18,\n \"symbol\": \"v4PLS\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xea73Bc856EdD980912Fb8FE4CFC7bba52D980F6A\",\n \"relayerLib\": \"0x9900a9E38E8695eE9109962b9f4671cF977c265a\",\n \"validatorLib\": \"0x39f311124745064935cB196AeE2a950cbbC11336\"\n }\n },\n \"1001\": {\n \"id\": \"1001\",\n \"isTestnet\": true,\n \"chainSelector\": 1001,\n \"name\": \"kaiaKairos\",\n \"rpcUrls\": [\n \"https://klaytn-baobab.drpc.org\",\n \"https://kaia-kairos.blockpi.network/v1/rpc/public\",\n \"https://rpc.ankr.com/kaia_testnet\",\n \"https://public-en-kairos.node.kaia.io\"\n ],\n \"nativeCurrency\": {\n \"name\": \"KAIA\",\n \"decimals\": 18,\n \"symbol\": \"KAIA\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1112\": {\n \"id\": \"1112\",\n \"isTestnet\": true,\n \"chainSelector\": 1112,\n \"name\": \"wemixTestnet\",\n \"rpcUrls\": [\n \"https://wemix-testnet.drpc.org\",\n \"https://api.test.wemix.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"WEMIX\",\n \"decimals\": 18,\n \"symbol\": \"tWEMIX\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 2,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1114\": {\n \"id\": \"1114\",\n \"isTestnet\": true,\n \"chainSelector\": 1114,\n \"name\": \"coreTestnet\",\n \"rpcUrls\": [\n \"https://rpc.test2.btcs.network\"\n ],\n \"nativeCurrency\": {\n \"name\": \"tCORE2\",\n \"decimals\": 18,\n \"symbol\": \"tCORE2\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"CoreScan\",\n \"url\": \"https://scan.test.btcs.network\",\n \"apiUrl\": \"https://scan.test.btcs.network/api\"\n }\n ],\n \"finalityConfirmations\": 7,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5\",\n \"relayerLib\": \"0x54B8d67AA64CF8A59F604cA6e98c643C64920b03\",\n \"validatorLib\": \"0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a\"\n }\n },\n \"1123\": {\n \"id\": \"1123\",\n \"isTestnet\": true,\n \"finalityTagEnabled\": true,\n \"chainSelector\": 1123,\n \"name\": \"b2Testnet\",\n \"rpcUrls\": [\n \"https://rpc.ankr.com/b2_testnet\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Bitcoin\",\n \"decimals\": 18,\n \"symbol\": \"BTC\"\n },\n \"blockExplorers\": [],\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1174\": {\n \"id\": \"1174\",\n \"isTestnet\": true,\n \"chainSelector\": 1174,\n \"name\": \"litheumTestnet\",\n \"rpcUrls\": [\n \"https://testnet.litheum.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"LTH\",\n \"decimals\": 18,\n \"symbol\": \"LTH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1270\": {\n \"id\": \"1270\",\n \"isTestnet\": true,\n \"chainSelector\": 1270,\n \"name\": \"irysTestnet\",\n \"rpcUrls\": [\n \"https://testnet-rpc.irys.xyz/v1/execution-rpc\",\n \"testnet-rpc.irys.xyz\"\n ],\n \"nativeCurrency\": {\n \"name\": \"mIRYS\",\n \"decimals\": 18,\n \"symbol\": \"mIRYS\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 6,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1301\": {\n \"id\": \"1301\",\n \"isTestnet\": true,\n \"chainSelector\": 1301,\n \"name\": \"unichainSepolia\",\n \"rpcUrls\": [\n \"https://unichain-sepolia.drpc.org\",\n \"https://unichain-sepolia-rpc.publicnode.com\",\n \"https://unichain-sepolia.api.onfinality.io/public\",\n \"https://sepolia.unichain.org\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Unichain Explorer\",\n \"url\": \"https://sepolia-explorer.unichain.network\",\n \"apiUrl\": \"https://sepolia-explorer.unichain.network/api\"\n }\n ],\n \"finalityConfirmations\": 1440,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5\",\n \"relayerLib\": \"0x54B8d67AA64CF8A59F604cA6e98c643C64920b03\",\n \"validatorLib\": \"0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a\"\n }\n },\n \"1328\": {\n \"id\": \"1328\",\n \"isTestnet\": true,\n \"chainSelector\": 1328,\n \"name\": \"seiTestnet\",\n \"rpcUrls\": [\n \"https://sei-testnet.drpc.org\",\n \"https://sei-testnet-public.nodies.app\",\n \"https://evm-rpc-testnet.sei-apis.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Sei\",\n \"decimals\": 18,\n \"symbol\": \"SEI\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Sei Explorer\",\n \"url\": \"https://seitrace.com\",\n \"apiUrl\": \"https://seitrace.com/api\"\n }\n ],\n \"finalityConfirmations\": 3,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x122947C8c3529DCa006aeE65832D3C3fED6bf3C0\",\n \"relayerLib\": \"0xe965dEBDfa6365CFb9e643ccdCBADE424a2eC381\",\n \"validatorLib\": \"0xB708D151D18e5aB3506934B39375D00EE1e0C882\"\n }\n },\n \"1946\": {\n \"id\": \"1946\",\n \"isTestnet\": true,\n \"chainSelector\": 1946,\n \"name\": \"soneiumMinato\",\n \"rpcUrls\": [\n \"https://soneium-minato.drpc.org\",\n \"https://rpc.minato.soneium.org\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Soneium Explorer\",\n \"url\": \"https://minato-explorer.soneium.com\",\n \"apiUrl\": \"https://minato-explorer.soneium.com/api\"\n }\n ],\n \"finalityConfirmations\": 810,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"2021\": {\n \"id\": \"2021\",\n \"isTestnet\": true,\n \"chainSelector\": 2021,\n \"name\": \"roninSaigon\",\n \"rpcUrls\": [\n \"https://saigon-testnet.roninchain.com/rpc\",\n \"https://saigon-testnet.roninchain.com/rpc\"\n ],\n \"nativeCurrency\": {\n \"name\": \"RON\",\n \"decimals\": 18,\n \"symbol\": \"RON\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Ronin Explorer\",\n \"url\": \"https://saigon-explorer.roninchain.com\",\n \"apiUrl\": \"https://saigon-explorer.roninchain.com/api\"\n }\n ],\n \"finalityConfirmations\": 4,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xea73Bc856EdD980912Fb8FE4CFC7bba52D980F6A\",\n \"relayerLib\": \"0x9900a9E38E8695eE9109962b9f4671cF977c265a\",\n \"validatorLib\": \"0x39f311124745064935cB196AeE2a950cbbC11336\"\n }\n },\n \"2221\": {\n \"id\": \"2221\",\n \"isTestnet\": true,\n \"chainSelector\": 2221,\n \"name\": \"kavaTestnet\",\n \"rpcUrls\": [\n \"https://kava-testnet.drpc.org\",\n \"https://evm.testnet.kava.io\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Kava\",\n \"decimals\": 18,\n \"symbol\": \"KAVA\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"2522\": {\n \"id\": \"2522\",\n \"isTestnet\": true,\n \"chainSelector\": 2522,\n \"name\": \"fraxtalHolesky\",\n \"rpcUrls\": [],\n \"nativeCurrency\": {\n \"name\": \"FRAX\",\n \"decimals\": 18,\n \"symbol\": \"FRAX\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 900,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"2810\": {\n \"id\": \"2810\",\n \"isTestnet\": true,\n \"chainSelector\": 2810,\n \"name\": \"morphHolesky\",\n \"rpcUrls\": [],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"3636\": {\n \"id\": \"3636\",\n \"isTestnet\": true,\n \"chainSelector\": 3636,\n \"name\": \"botanixTestnet\",\n \"rpcUrls\": [\n \"https://rpc.ankr.com/botanix_testnet\",\n \"https://node.botanixlabs.dev\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Botanix\",\n \"decimals\": 18,\n \"symbol\": \"BTC\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Botanix Explorer\",\n \"url\": \"https://testnet-explorer.botanixlabs.xyz\",\n \"apiUrl\": \"https://testnet-explorer.botanixlabs.xyz/api\"\n }\n ],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"4801\": {\n \"id\": \"4801\",\n \"isTestnet\": true,\n \"chainSelector\": 4801,\n \"name\": \"worldchainTestnet\",\n \"rpcUrls\": [\n \"https://worldchain-sepolia.drpc.org\",\n \"https://worldchain-sepolia.g.alchemy.com/public\",\n \"https://worldchain-sepolia.gateway.tenderly.co\",\n \"https://4801.rpc.thirdweb.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 1200,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xea73Bc856EdD980912Fb8FE4CFC7bba52D980F6A\",\n \"relayerLib\": \"0x9900a9E38E8695eE9109962b9f4671cF977c265a\",\n \"validatorLib\": \"0x39f311124745064935cB196AeE2a950cbbC11336\"\n }\n },\n \"5003\": {\n \"id\": \"5003\",\n \"isTestnet\": true,\n \"chainSelector\": 5003,\n \"name\": \"mantleSepolia\",\n \"rpcUrls\": [\n \"https://mantle-sepolia.drpc.org\",\n \"https://rpc.sepolia.mantle.xyz\"\n ],\n \"nativeCurrency\": {\n \"name\": \"MNT\",\n \"decimals\": 18,\n \"symbol\": \"MNT\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Mantle Explorer\",\n \"url\": \"https://explorer.sepolia.mantle.xyz\",\n \"apiUrl\": \"https://explorer.sepolia.mantle.xyz/api\"\n }\n ],\n \"finalityConfirmations\": 840,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"5124\": {\n \"id\": \"5124\",\n \"isTestnet\": true,\n \"chainSelector\": 5124,\n \"name\": \"seismicDevnet\",\n \"rpcUrls\": [\n \"https://node-2.seismicdev.net/rpc\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"5611\": {\n \"id\": \"5611\",\n \"isTestnet\": true,\n \"chainSelector\": 5611,\n \"name\": \"opbnbTestnet\",\n \"rpcUrls\": [\n \"https://opbnb-testnet.drpc.org\",\n \"https://opbnb-testnet-rpc.publicnode.com\",\n \"https://opbnb-testnet-rpc.bnbchain.org\",\n \"https://opbnb-testnet.nodereal.io/v1/e9a36765eb8a40b9bd12e680a1fd2bc5\",\n \"https://opbnb-testnet.nodereal.io/v1/64a9df0874fb4a93b9d0a3849de012d3\"\n ],\n \"nativeCurrency\": {\n \"name\": \"tBNB\",\n \"decimals\": 18,\n \"symbol\": \"tBNB\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"6342\": {\n \"id\": \"6342\",\n \"isTestnet\": true,\n \"chainSelector\": 6342,\n \"name\": \"megaethTestnet\",\n \"rpcUrls\": [],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"MegaEth Explorer\",\n \"url\": \"https://explorer-testnet.megaeth.io\",\n \"apiUrl\": \"https://explorer-testnet.megaeth.io/api\"\n }\n ],\n \"finalityConfirmations\": 900,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"8408\": {\n \"id\": \"8408\",\n \"isTestnet\": true,\n \"chainSelector\": 8408,\n \"name\": \"zenchainTestnet\",\n \"rpcUrls\": [\n \"https://zenchain-testnet.api.onfinality.io/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ZTC\",\n \"decimals\": 18,\n \"symbol\": \"ZTC\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"10143\": {\n \"id\": \"10143\",\n \"isTestnet\": true,\n \"chainSelector\": 10143,\n \"name\": \"monadTestnet\",\n \"rpcUrls\": [\n \"https://monad-testnet.drpc.org\",\n \"https://rpc.ankr.com/monad_testnet\",\n \"https://testnet-rpc.monad.xyz\",\n \"https://rpc-testnet.monadinfra.com\",\n \"https://monad-testnet.api.onfinality.io/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Testnet MON Token\",\n \"decimals\": 18,\n \"symbol\": \"MON\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Monad Explorer\",\n \"url\": \"https://explorer.testnet.monad.xyz\",\n \"apiUrl\": \"https://explorer.testnet.monad.xyz/api\"\n }\n ],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x3E2Ee768D9fADdd3673a69ED4d0D1d9147FA1054\",\n \"relayerLib\": \"0x9900a9E38E8695eE9109962b9f4671cF977c265a\",\n \"validatorLib\": \"0x39f311124745064935cB196AeE2a950cbbC11336\"\n }\n },\n \"10200\": {\n \"id\": \"10200\",\n \"isTestnet\": true,\n \"chainSelector\": 10200,\n \"name\": \"gnosisChiado\",\n \"rpcUrls\": [\n \"https://gnosis-chiado.drpc.org\",\n \"https://rpc.chiadochain.net\",\n \"https://gnosis-chiado-rpc.publicnode.com\",\n \"https://rpc.chiado.gnosis.gateway.fm\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Gnosis\",\n \"decimals\": 18,\n \"symbol\": \"xDAI\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Blockscout\",\n \"url\": \"https://gnosis-chiado.blockscout.com\",\n \"apiUrl\": \"https://gnosis-chiado.blockscout.com/api\"\n }\n ],\n \"finalityConfirmations\": 35,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5\",\n \"relayerLib\": \"0x54B8d67AA64CF8A59F604cA6e98c643C64920b03\",\n \"validatorLib\": \"0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a\"\n }\n },\n \"11124\": {\n \"id\": \"11124\",\n \"isTestnet\": true,\n \"finalityTagEnabled\": true,\n \"chainSelector\": 11124,\n \"name\": \"abstractSepolia\",\n \"rpcUrls\": [\n \"https://abstract-sepolia.drpc.org\",\n \"https://api.testnet.abs.xyz\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"18880\": {\n \"id\": \"18880\",\n \"isTestnet\": true,\n \"chainSelector\": 18880,\n \"name\": \"expchainTestnet\",\n \"rpcUrls\": [\n \"https://rpc1-testnet.expchain.ai\",\n \"https://expchain.polyhedra.network/rpc1-testnet\",\n \"https://expchain.polyhedra.network/rpc0-testnet\",\n \"https://expchain.polyhedra.network/rpc0-testnet\",\n \"https://expchain.polyhedra.network/rpc1-testnet\"\n ],\n \"nativeCurrency\": {\n \"name\": \"tZKJ\",\n \"decimals\": 18,\n \"symbol\": \"tZKJ\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"23295\": {\n \"id\": \"23295\",\n \"isTestnet\": true,\n \"chainSelector\": 23295,\n \"name\": \"oasissapphireTestnet\",\n \"rpcUrls\": [\n \"https://testnet.sapphire.oasis.io\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Sapphire Test Rose\",\n \"decimals\": 18,\n \"symbol\": \"TEST\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xcc9D0438ac3b90fB8291f4f3C1c420E215f36585\",\n \"relayerLib\": \"0x8510C780097cA53aeF8e3527a5107C4629b21f0C\",\n \"validatorLib\": \"0xb31EED4695De3eCE4381a40fA638d9a63904882b\"\n }\n },\n \"33111\": {\n \"id\": \"33111\",\n \"isTestnet\": true,\n \"finalityTagEnabled\": true,\n \"chainSelector\": 33111,\n \"name\": \"apechainCurtis\",\n \"rpcUrls\": [\n \"https://apechain-curtis.drpc.org\",\n \"https://curtis.rpc.caldera.xyz/http\",\n \"https://rpc.curtis.apechain.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"APE\",\n \"decimals\": 18,\n \"symbol\": \"APE\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Apechain Explorer\",\n \"url\": \"https://curtis-explorer.apechain.io\",\n \"apiUrl\": \"https://curtis-explorer.apechain.io/api\"\n }\n ],\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"37111\": {\n \"id\": \"37111\",\n \"isTestnet\": true,\n \"chainSelector\": 37111,\n \"name\": \"lensSepolia\",\n \"rpcUrls\": [\n \"https://rpc.testnet.lens.dev\",\n \"https://lens-testnet.drpc.org\"\n ],\n \"nativeCurrency\": {\n \"name\": \"GRASS\",\n \"decimals\": 18,\n \"symbol\": \"GRASS\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"43113\": {\n \"id\": \"43113\",\n \"isTestnet\": true,\n \"finalityTagEnabled\": true,\n \"chainSelector\": 43113,\n \"name\": \"avalancheFuji\",\n \"rpcUrls\": [\n \"https://api.avax-test.network/ext/bc/C/rpc\",\n \"https://avalanche-fuji.drpc.org\",\n \"https://avalanche-fuji-c-chain-rpc.publicnode.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Avalanche Fuji\",\n \"decimals\": 18,\n \"symbol\": \"AVAX\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Snowtrace\",\n \"url\": \"https://testnet.snowtrace.io\",\n \"apiUrl\": \"https://api-testnet.snowtrace.io/api\"\n }\n ],\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xe965dEBDfa6365CFb9e643ccdCBADE424a2eC381\",\n \"relayerLib\": \"0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a\",\n \"validatorLib\": \"0x246892c38a2314c30E56490ADf1bcf3470DCAE6A\"\n }\n },\n \"44787\": {\n \"id\": \"44787\",\n \"isTestnet\": true,\n \"chainSelector\": 44787,\n \"name\": \"celoAlfajores\",\n \"rpcUrls\": [],\n \"nativeCurrency\": {\n \"name\": \"CELO\",\n \"decimals\": 18,\n \"symbol\": \"A-CELO\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Celoscan\",\n \"url\": \"https://alfajores.celoscan.io\",\n \"apiUrl\": \"https://api-alfajores.celoscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"48899\": {\n \"id\": \"48899\",\n \"isTestnet\": true,\n \"chainSelector\": 48899,\n \"name\": \"zircuitTestnet\",\n \"rpcUrls\": [\n \"https://testnet.zircuit.com\",\n \"https://zircuit1-testnet.p2pify.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Zircuit Explorer\",\n \"url\": \"https://explorer.zircuit.com\",\n \"apiUrl\": \"https://explorer.zircuit.com/api\"\n }\n ],\n \"finalityConfirmations\": 630,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"57054\": {\n \"id\": \"57054\",\n \"isTestnet\": true,\n \"chainSelector\": 57054,\n \"name\": \"sonicBlaze\",\n \"rpcUrls\": [\n \"https://sonic-testnet.drpc.org\",\n \"https://sonic-blaze-rpc.publicnode.com\",\n \"https://rpc.blaze.soniclabs.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"S\",\n \"decimals\": 18,\n \"symbol\": \"S\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Sonic Explorer\",\n \"url\": \"https://explorer-testnet.sonic.guru\",\n \"apiUrl\": \"https://explorer-testnet.sonic.guru/api\"\n }\n ],\n \"finalityConfirmations\": 10,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xAEBaacfa9CaC6B8486Ae77843728c863c909E7d0\",\n \"relayerLib\": \"0x13187bb1d2f100F84770a848A1374bf745Ea4cF6\",\n \"validatorLib\": \"0x90D7e742746Abf405036aA21981C835F3E842DA4\"\n }\n },\n \"59141\": {\n \"id\": \"59141\",\n \"isTestnet\": true,\n \"chainSelector\": 59141,\n \"name\": \"lineaSepolia\",\n \"rpcUrls\": [\n \"https://linea-sepolia.drpc.org\",\n \"https://linea-sepolia-rpc.publicnode.com\",\n \"https://rpc.sepolia.linea.build\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Linea Explorer\",\n \"url\": \"https://sepolia.lineascan.build\",\n \"apiUrl\": \"https://api-sepolia.lineascan.build/api\"\n }\n ],\n \"finalityConfirmations\": 600,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"59902\": {\n \"id\": \"59902\",\n \"isTestnet\": true,\n \"chainSelector\": 59902,\n \"name\": \"metisSepolia\",\n \"rpcUrls\": [\n \"https://metis-sepolia.gateway.tenderly.co\",\n \"https://metis-sepolia-rpc.publicnode.com\",\n \"https://sepolia.metisdevops.link\"\n ],\n \"nativeCurrency\": {\n \"name\": \"tMETIS\",\n \"decimals\": 18,\n \"symbol\": \"tMETIS\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 360,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"80002\": {\n \"id\": \"80002\",\n \"isTestnet\": true,\n \"chainSelector\": 80002,\n \"name\": \"polygonAmoy\",\n \"rpcUrls\": [\n \"https://rpc-amoy.polygon.technology\",\n \"https://polygon-amoy.gateway.tenderly.co\",\n \"https://polygon-amoy.drpc.org\",\n \"https://polygon-amoy-public.nodies.app\",\n \"https://polygon-amoy-bor-rpc.publicnode.com\",\n \"https://polygon-amoy.api.onfinality.io/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"POL\",\n \"decimals\": 18,\n \"symbol\": \"POL\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"PolygonScan\",\n \"url\": \"https://amoy.polygonscan.com\",\n \"apiUrl\": \"https://api-amoy.polygonscan.com/api\"\n }\n ],\n \"finalityConfirmations\": 500,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x6FF322BC8da39bC87A056d4052aa763f7BDeE836\",\n \"relayerLib\": \"0x81365cc081dF5fdF6cbD47a34fF4acBcA2B35F0d\",\n \"validatorLib\": \"0x99542DdB261186F818974e579e4aBF3BFb44819e\"\n }\n },\n \"80069\": {\n \"id\": \"80069\",\n \"isTestnet\": true,\n \"chainSelector\": 80069,\n \"name\": \"berachainBepolia\",\n \"rpcUrls\": [\n \"https://bepolia.rpc.berachain.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"BERA Token\",\n \"decimals\": 18,\n \"symbol\": \"BERA\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 1,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5\",\n \"relayerLib\": \"0x54B8d67AA64CF8A59F604cA6e98c643C64920b03\",\n \"validatorLib\": \"0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a\"\n }\n },\n \"84532\": {\n \"id\": \"84532\",\n \"isTestnet\": true,\n \"finalityTagEnabled\": true,\n \"chainSelector\": 84532,\n \"name\": \"baseSepolia\",\n \"rpcUrls\": [\n \"https://base-sepolia.gateway.tenderly.co\",\n \"https://sepolia.base.org\",\n \"https://base-sepolia.drpc.org\",\n \"https://base-sepolia-rpc.publicnode.com\",\n \"https://base-sepolia-public.nodies.app\",\n \"https://base-sepolia.api.onfinality.io/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"BaseScan\",\n \"url\": \"https://sepolia.basescan.org\",\n \"apiUrl\": \"https://api-sepolia.basescan.org/api\"\n },\n {\n \"name\": \"Blockscout\",\n \"url\": \"https://base-sepolia.blockscout.com\",\n \"apiUrl\": \"https://base-sepolia.blockscout.com/api\"\n }\n ],\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xE3d861a49bc5903499fB5Bb411B83d980422c31B\",\n \"relayerLib\": \"0x429E6875Ba6A13cc015e9Eba594e8b42936244C4\",\n \"validatorLib\": \"0x67BE79Df5A37d2a89384D32C2A066d2a7354eD2B\"\n }\n },\n \"167009\": {\n \"id\": \"167009\",\n \"isTestnet\": true,\n \"chainSelector\": 167009,\n \"name\": \"taikoTestnet\",\n \"rpcUrls\": [],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 20,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"200810\": {\n \"id\": \"200810\",\n \"isTestnet\": true,\n \"chainSelector\": 200810,\n \"name\": \"bitlayerTestnet\",\n \"rpcUrls\": [\n \"https://rpc.ankr.com/bitlayer_testnet\",\n \"https://testnet-rpc.bitlayer.org\",\n \"https://testnet-rpc.bitlayer-rpc.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Bitcoin\",\n \"decimals\": 18,\n \"symbol\": \"BTC\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Bitlayer Explorer\",\n \"url\": \"https://testnet-explorer.bitlayer.org\",\n \"apiUrl\": \"https://testnet-explorer.bitlayer.org/api\"\n }\n ],\n \"finalityConfirmations\": 21,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"344100\": {\n \"id\": \"3441006\",\n \"isTestnet\": true,\n \"chainSelector\": 344100,\n \"name\": \"mantapacificSepolia\",\n \"rpcUrls\": [\n \"https://manta-pacific-sepolia.drpc.org\",\n \"https://manta-sepolia.rpc.caldera.xyz/http\",\n \"https://pacific-rpc.sepolia-testnet.manta.network/http\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"421614\": {\n \"id\": \"421614\",\n \"isTestnet\": true,\n \"finalityTagEnabled\": true,\n \"chainSelector\": 421614,\n \"name\": \"arbitrumSepolia\",\n \"rpcUrls\": [\n \"https://arbitrum-sepolia.gateway.tenderly.co\",\n \"https://arbitrum-sepolia.drpc.org\",\n \"https://arbitrum-sepolia-testnet.api.pocket.network\",\n \"https://arbitrum-sepolia-rpc.publicnode.com\",\n \"https://sepolia-rollup.arbitrum.io/rpc\",\n \"https://arbitrum-sepolia.api.onfinality.io/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Arbiscan\",\n \"url\": \"https://sepolia.arbiscan.io\",\n \"apiUrl\": \"https://api-sepolia.arbiscan.io/api\"\n }\n ],\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x6c99cC0FCC985fF175787BD2565AfD15781C99d0\",\n \"relayerLib\": \"0x622b5FeBf5Fd44Ab2E7636398F2621FC4E956304\",\n \"validatorLib\": \"0x7F445E3DE6B46cD36887B9f136DBe13298517C1F\"\n }\n },\n \"534351\": {\n \"id\": \"534351\",\n \"isTestnet\": true,\n \"chainSelector\": 534351,\n \"name\": \"scrollSepolia\",\n \"rpcUrls\": [\n \"https://scroll-sepolia.drpc.org\",\n \"https://scroll-sepolia-rpc.publicnode.com\",\n \"https://sepolia-rpc.scroll.io\",\n \"https://scroll-sepolia-public.nodies.app\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Scrollscan\",\n \"url\": \"https://sepolia.scrollscan.com\",\n \"apiUrl\": \"https://api-sepolia.scrollscan.com/api\"\n }\n ],\n \"finalityConfirmations\": 720,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5\",\n \"relayerLib\": \"0x54B8d67AA64CF8A59F604cA6e98c643C64920b03\",\n \"validatorLib\": \"0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a\"\n }\n },\n \"688689\": {\n \"id\": \"688689\",\n \"isTestnet\": true,\n \"chainSelector\": 688689,\n \"name\": \"pharosTestnet\",\n \"rpcUrls\": [\n \"https://atlantic.dplabs-internal.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"PHRS\",\n \"decimals\": 18,\n \"symbol\": \"PHRS\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"763373\": {\n \"id\": \"763373\",\n \"isTestnet\": true,\n \"chainSelector\": 763373,\n \"name\": \"inkSepolia\",\n \"rpcUrls\": [\n \"https://rpc-gel-sepolia.inkonchain.com\",\n \"https://ink-sepolia.drpc.org\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Ink Explorer\",\n \"url\": \"https://sepolia.inkscan.io\",\n \"apiUrl\": \"https://sepolia.inkscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 3600,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"808813\": {\n \"id\": \"808813\",\n \"isTestnet\": true,\n \"chainSelector\": 808813,\n \"name\": \"bobSepolia\",\n \"rpcUrls\": [\n \"https://bob-testnet.drpc.org\",\n \"https://bob-sepolia.rpc.gobob.xyz\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 3600,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1000101\": {\n \"id\": \"1000101\",\n \"isTestnet\": true,\n \"chainSelector\": 1000101,\n \"name\": \"xomarketTestnet\",\n \"rpcUrls\": [\n \"https://dev-testnet-rpc.xo.market\",\n \"https://testnet-rpc-1.xo.market\"\n ],\n \"nativeCurrency\": {\n \"name\": \"XO\",\n \"decimals\": 18,\n \"symbol\": \"XO\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 2,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1234200\": {\n \"id\": \"123420001114\",\n \"isTestnet\": true,\n \"chainSelector\": 1234200,\n \"name\": \"campv2Testnet\",\n \"rpcUrls\": [\n \"https://rpc.basecamp.t.raas.gelato.cloud\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Camp\",\n \"decimals\": 18,\n \"symbol\": \"CAMP\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1313161\": {\n \"id\": \"1313161555\",\n \"isTestnet\": true,\n \"finalityTagEnabled\": true,\n \"chainSelector\": 1313161,\n \"name\": \"auroraTestnet\",\n \"rpcUrls\": [\n \"https://aurora-testnet.drpc.org\",\n \"https://testnet.aurora.dev\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1685877\": {\n \"id\": \"168587773\",\n \"isTestnet\": true,\n \"chainSelector\": 1685877,\n \"name\": \"blastSepolia\",\n \"rpcUrls\": [\n \"https://blast-sepolia.drpc.org\",\n \"https://blast-testnet-public.nodies.app\",\n \"https://sepolia.blast.io\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Blastscan\",\n \"url\": \"https://sepolia.blastscan.io\",\n \"apiUrl\": \"https://api-sepolia.blastscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 600,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"11155111\": {\n \"id\": \"11155111\",\n \"isTestnet\": true,\n \"finalityTagEnabled\": true,\n \"chainSelector\": 11155111,\n \"name\": \"ethereumSepolia\",\n \"rpcUrls\": [\n \"https://gateway.tenderly.co/public/sepolia\",\n \"https://sepolia.gateway.tenderly.co\",\n \"https://sepolia.drpc.org\",\n \"https://1rpc.io/sepolia\",\n \"https://ethereum-sepolia-public.nodies.app\",\n \"https://0xrpc.io/sep\",\n \"https://ethereum-sepolia-rpc.publicnode.com\",\n \"https://eth-sepolia.api.onfinality.io/public\",\n \"https://eth-sepolia-testnet.api.pocket.network\",\n \"https://ethereum-sepolia.rpc.subquery.network/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Etherscan\",\n \"url\": \"https://sepolia.etherscan.io\",\n \"apiUrl\": \"https://api-sepolia.etherscan.io/api\"\n }\n ],\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x3E0aAA63fFb51169B9aE9b7Dc3616b43362124D6\",\n \"relayerLib\": \"0x8338A0B9c83C0d7E67C267432DF4C8b7cA98e11C\",\n \"validatorLib\": \"0x1A808aa4F1E874763E114AB4fD170460D84A8D54\"\n }\n },\n \"11155420\": {\n \"id\": \"11155420\",\n \"isTestnet\": true,\n \"chainSelector\": 11155420,\n \"name\": \"optimismSepolia\",\n \"rpcUrls\": [\n \"https://sepolia.optimism.io\",\n \"https://optimism-sepolia.gateway.tenderly.co\",\n \"https://optimism-sepolia.drpc.org\",\n \"https://optimism-sepolia-public.nodies.app\",\n \"https://optimism-sepolia.api.onfinality.io/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Optimism Explorer\",\n \"url\": \"https://sepolia-optimism.etherscan.io\",\n \"apiUrl\": \"https://api-sepolia-optimism.etherscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 600,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x25c2037546Bf5B525DfAfe85A662DB519c07bDdB\",\n \"relayerLib\": \"0x6E0b96885Ab0A58e82f2D1ce4df29AF6F5a40089\",\n \"validatorLib\": \"0x0C12fAdDb045bB71C256E36662D56b4b22f1bD58\"\n }\n },\n \"11155931\": {\n \"id\": \"11155931\",\n \"isTestnet\": true,\n \"chainSelector\": 11155931,\n \"name\": \"riseTestnet\",\n \"rpcUrls\": [\n \"https://testnet.riselabs.xyz\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n }\n}", "import type { Chain, ChainFormatters } from '../../types/chain.js'\nimport type { Assign, Prettify } from '../../types/utils.js'\n\nexport function defineChain<\n formatters extends ChainFormatters,\n const chain extends Chain,\n>(chain: chain): Prettify, chain>> {\n return {\n formatters: undefined,\n fees: undefined,\n serializers: undefined,\n ...chain,\n } as Assign, chain>\n}\n", "import { BaseError } from './base.js'\n\nexport type InvalidDecimalNumberErrorType = InvalidDecimalNumberError & {\n name: 'InvalidDecimalNumberError'\n}\nexport class InvalidDecimalNumberError extends BaseError {\n constructor({ value }: { value: string }) {\n super(`Number \\`${value}\\` is not a valid decimal number.`, {\n name: 'InvalidDecimalNumberError',\n })\n }\n}\n", "import { InvalidDecimalNumberError } from '../../errors/unit.js'\nimport type { ErrorType } from '../../errors/utils.js'\n\nexport type ParseUnitsErrorType = ErrorType\n\n/**\n * Multiplies a string representation of a number by a given exponent of base 10 (10exponent).\n *\n * - Docs: https://viem.sh/docs/utilities/parseUnits\n *\n * @example\n * import { parseUnits } from 'viem'\n *\n * parseUnits('420', 9)\n * // 420000000000n\n */\nexport function parseUnits(value: string, decimals: number) {\n if (!/^(-?)([0-9]*)\\.?([0-9]*)$/.test(value))\n throw new InvalidDecimalNumberError({ value })\n\n let [integer, fraction = '0'] = value.split('.')\n\n const negative = integer.startsWith('-')\n if (negative) integer = integer.slice(1)\n\n // trim trailing zeros.\n fraction = fraction.replace(/(0+)$/, '')\n\n // round off if the fraction is larger than the number of decimals.\n if (decimals === 0) {\n if (Math.round(Number(`.${fraction}`)) === 1)\n integer = `${BigInt(integer) + 1n}`\n fraction = ''\n } else if (fraction.length > decimals) {\n const [left, unit, right] = [\n fraction.slice(0, decimals - 1),\n fraction.slice(decimals - 1, decimals),\n fraction.slice(decimals),\n ]\n\n const rounded = Math.round(Number(`${unit}.${right}`))\n if (rounded > 9)\n fraction = `${BigInt(left) + BigInt(1)}0`.padStart(left.length + 1, '0')\n else fraction = `${left}${rounded}`\n\n if (fraction.length > decimals) {\n fraction = fraction.slice(1)\n integer = `${BigInt(integer) + 1n}`\n }\n\n fraction = fraction.slice(0, decimals)\n } else {\n fraction = fraction.padEnd(decimals, '0')\n }\n\n return BigInt(`${negative ? '-' : ''}${integer}${fraction}`)\n}\n", "// biome-ignore lint/performance/noBarrelFile: entrypoint module\nexport {\n type Abi,\n type AbiFunction,\n type AbiParameter,\n type AbiEvent,\n type AbiStateMutability,\n type AbiParameterKind,\n type AbiParameterToPrimitiveType,\n type Address,\n type Narrow,\n type ParseAbi,\n type ParseAbiItem,\n type ParseAbiParameter,\n type ParseAbiParameters,\n type ResolvedRegister,\n type TypedData,\n type TypedDataDomain,\n type TypedDataParameter,\n CircularReferenceError,\n InvalidAbiParameterError,\n InvalidAbiParametersError,\n InvalidAbiItemError,\n InvalidAbiTypeParameterError,\n InvalidFunctionModifierError,\n InvalidModifierError,\n InvalidParameterError,\n InvalidParenthesisError,\n InvalidSignatureError,\n InvalidStructSignatureError,\n SolidityProtectedKeywordError,\n UnknownTypeError,\n UnknownSignatureError,\n parseAbi,\n parseAbiItem,\n parseAbiParameter,\n parseAbiParameters,\n} from 'abitype'\nexport type {\n BlockOverrides,\n Rpc as RpcBlockOverrides,\n} from 'ox/BlockOverrides'\n\nexport {\n getContract,\n type GetContractErrorType,\n type GetContractParameters,\n type GetContractReturnType,\n} from './actions/getContract.js'\nexport {\n type GetContractEventsErrorType,\n type GetContractEventsParameters,\n type GetContractEventsReturnType,\n} from './actions/public/getContractEvents.js'\nexport {\n type GetEip712DomainErrorType,\n type GetEip712DomainParameters,\n type GetEip712DomainReturnType,\n} from './actions/public/getEip712Domain.js'\nexport {\n type AddChainErrorType,\n type AddChainParameters,\n} from './actions/wallet/addChain.js'\nexport {\n type CallErrorType,\n type CallParameters,\n type CallReturnType,\n} from './actions/public/call.js'\nexport type {\n CreateAccessListParameters,\n CreateAccessListReturnType,\n CreateAccessListErrorType,\n} from './actions/public/createAccessList.js'\nexport type {\n CreateBlockFilterErrorType,\n CreateBlockFilterReturnType,\n} from './actions/public/createBlockFilter.js'\nexport type {\n CreateContractEventFilterErrorType,\n CreateContractEventFilterParameters,\n CreateContractEventFilterReturnType,\n} from './actions/public/createContractEventFilter.js'\nexport type {\n CreateEventFilterErrorType,\n CreateEventFilterParameters,\n CreateEventFilterReturnType,\n} from './actions/public/createEventFilter.js'\nexport type {\n CreatePendingTransactionFilterErrorType,\n CreatePendingTransactionFilterReturnType,\n} from './actions/public/createPendingTransactionFilter.js'\nexport type {\n DeployContractErrorType,\n DeployContractParameters,\n DeployContractReturnType,\n} from './actions/wallet/deployContract.js'\nexport type {\n DropTransactionErrorType,\n DropTransactionParameters,\n} from './actions/test/dropTransaction.js'\nexport type {\n DumpStateErrorType,\n DumpStateReturnType,\n} from './actions/test/dumpState.js'\nexport type {\n GetAutomineErrorType,\n GetAutomineReturnType,\n} from './actions/test/getAutomine.js'\nexport type {\n EstimateContractGasErrorType,\n EstimateContractGasParameters,\n EstimateContractGasReturnType,\n} from './actions/public/estimateContractGas.js'\nexport type {\n EstimateGasErrorType,\n EstimateGasParameters,\n EstimateGasReturnType,\n} from './actions/public/estimateGas.js'\nexport type {\n EstimateFeesPerGasErrorType,\n EstimateFeesPerGasParameters,\n EstimateFeesPerGasReturnType,\n} from './actions/public/estimateFeesPerGas.js'\nexport type {\n EstimateMaxPriorityFeePerGasErrorType,\n EstimateMaxPriorityFeePerGasParameters,\n EstimateMaxPriorityFeePerGasReturnType,\n} from './actions/public/estimateMaxPriorityFeePerGas.js'\nexport type {\n GetAddressesErrorType,\n GetAddressesReturnType,\n} from './actions/wallet/getAddresses.js'\nexport type {\n GetBalanceErrorType,\n GetBalanceParameters,\n GetBalanceReturnType,\n} from './actions/public/getBalance.js'\nexport type {\n GetBlobBaseFeeErrorType,\n GetBlobBaseFeeReturnType,\n} from './actions/public/getBlobBaseFee.js'\nexport type {\n GetBlockNumberErrorType,\n GetBlockNumberParameters,\n GetBlockNumberReturnType,\n} from './actions/public/getBlockNumber.js'\nexport type {\n GetBlockErrorType,\n GetBlockParameters,\n GetBlockReturnType,\n} from './actions/public/getBlock.js'\nexport type {\n GetBlockTransactionCountErrorType,\n GetBlockTransactionCountParameters,\n GetBlockTransactionCountReturnType,\n} from './actions/public/getBlockTransactionCount.js'\nexport type {\n /** @deprecated Use `GetCodeErrorType` instead */\n GetCodeErrorType as GetBytecodeErrorType,\n /** @deprecated Use `GetCodeParameters` instead */\n GetCodeParameters as GetBytecodeParameters,\n /** @deprecated Use `GetCodeReturnType` instead */\n GetCodeReturnType as GetBytecodeReturnType,\n GetCodeErrorType,\n GetCodeParameters,\n GetCodeReturnType,\n} from './actions/public/getCode.js'\nexport type {\n GetChainIdErrorType,\n GetChainIdReturnType,\n} from './actions/public/getChainId.js'\nexport type {\n GetEnsAddressErrorType,\n GetEnsAddressParameters,\n GetEnsAddressReturnType,\n} from './actions/ens/getEnsAddress.js'\nexport type {\n GetEnsAvatarErrorType,\n GetEnsAvatarParameters,\n GetEnsAvatarReturnType,\n} from './actions/ens/getEnsAvatar.js'\nexport type {\n GetEnsNameErrorType,\n GetEnsNameParameters,\n GetEnsNameReturnType,\n} from './actions/ens/getEnsName.js'\nexport type {\n GetEnsResolverErrorType,\n GetEnsResolverParameters,\n GetEnsResolverReturnType,\n} from './actions/ens/getEnsResolver.js'\nexport type {\n GetEnsTextErrorType,\n GetEnsTextParameters,\n GetEnsTextReturnType,\n} from './actions/ens/getEnsText.js'\nexport type {\n GetFeeHistoryErrorType,\n GetFeeHistoryParameters,\n GetFeeHistoryReturnType,\n} from './actions/public/getFeeHistory.js'\nexport type {\n GetFilterChangesErrorType,\n GetFilterChangesParameters,\n GetFilterChangesReturnType,\n} from './actions/public/getFilterChanges.js'\nexport type {\n GetFilterLogsErrorType,\n GetFilterLogsParameters,\n GetFilterLogsReturnType,\n} from './actions/public/getFilterLogs.js'\nexport type {\n GetGasPriceErrorType,\n GetGasPriceReturnType,\n} from './actions/public/getGasPrice.js'\nexport type {\n GetLogsErrorType,\n GetLogsParameters,\n GetLogsReturnType,\n} from './actions/public/getLogs.js'\nexport type {\n GetPermissionsErrorType,\n GetPermissionsReturnType,\n} from './actions/wallet/getPermissions.js'\nexport type {\n GetProofErrorType,\n GetProofParameters,\n GetProofReturnType,\n} from './actions/public/getProof.js'\nexport type {\n GetStorageAtErrorType,\n GetStorageAtParameters,\n GetStorageAtReturnType,\n} from './actions/public/getStorageAt.js'\nexport type {\n GetTransactionConfirmationsErrorType,\n GetTransactionConfirmationsParameters,\n GetTransactionConfirmationsReturnType,\n} from './actions/public/getTransactionConfirmations.js'\nexport type {\n GetTransactionCountErrorType,\n GetTransactionCountParameters,\n GetTransactionCountReturnType,\n} from './actions/public/getTransactionCount.js'\nexport type {\n GetTransactionErrorType,\n GetTransactionParameters,\n GetTransactionReturnType,\n} from './actions/public/getTransaction.js'\nexport type {\n GetTransactionReceiptErrorType,\n GetTransactionReceiptParameters,\n GetTransactionReceiptReturnType,\n} from './actions/public/getTransactionReceipt.js'\nexport type {\n ImpersonateAccountErrorType,\n ImpersonateAccountParameters,\n} from './actions/test/impersonateAccount.js'\nexport type {\n IncreaseTimeErrorType,\n IncreaseTimeParameters,\n} from './actions/test/increaseTime.js'\nexport type {\n LoadStateErrorType,\n LoadStateParameters,\n LoadStateReturnType,\n} from './actions/test/loadState.js'\nexport type { MineErrorType, MineParameters } from './actions/test/mine.js'\nexport type {\n MulticallErrorType,\n MulticallParameters,\n MulticallReturnType,\n} from './actions/public/multicall.js'\nexport type { SnapshotErrorType } from './actions/test/snapshot.js'\nexport type {\n SimulateBlocksParameters,\n SimulateBlocksReturnType,\n SimulateBlocksErrorType,\n} from './actions/public/simulateBlocks.js'\nexport type {\n SimulateCallsParameters,\n SimulateCallsReturnType,\n SimulateCallsErrorType,\n} from './actions/public/simulateCalls.js'\nexport type {\n GetMutabilityAwareValue,\n SimulateContractParameters,\n SimulateContractReturnType,\n SimulateContractErrorType,\n} from './actions/public/simulateContract.js'\nexport type {\n OnBlock,\n OnBlockParameter,\n WatchBlocksErrorType,\n WatchBlocksParameters,\n WatchBlocksReturnType,\n} from './actions/public/watchBlocks.js'\nexport type {\n OnBlockNumberFn,\n OnBlockNumberParameter,\n WatchBlockNumberErrorType,\n WatchBlockNumberParameters,\n WatchBlockNumberReturnType,\n} from './actions/public/watchBlockNumber.js'\nexport type {\n WatchEventOnLogsFn,\n WatchEventOnLogsParameter,\n WatchEventErrorType,\n WatchEventParameters,\n WatchEventReturnType,\n} from './actions/public/watchEvent.js'\nexport type {\n OnTransactionsFn,\n OnTransactionsParameter,\n WatchPendingTransactionsErrorType,\n WatchPendingTransactionsParameters,\n WatchPendingTransactionsReturnType,\n} from './actions/public/watchPendingTransactions.js'\nexport type {\n ReadContractErrorType,\n ReadContractParameters,\n ReadContractReturnType,\n} from './actions/public/readContract.js'\nexport type {\n ReplacementReason,\n ReplacementReturnType,\n WaitForTransactionReceiptErrorType,\n WaitForTransactionReceiptParameters,\n WaitForTransactionReceiptReturnType,\n} from './actions/public/waitForTransactionReceipt.js'\nexport type {\n RequestAddressesErrorType,\n RequestAddressesReturnType,\n} from './actions/wallet/requestAddresses.js'\nexport type {\n RequestPermissionsErrorType,\n RequestPermissionsReturnType,\n RequestPermissionsParameters,\n} from './actions/wallet/requestPermissions.js'\nexport type {\n GetTxpoolContentErrorType,\n GetTxpoolContentReturnType,\n} from './actions/test/getTxpoolContent.js'\nexport type {\n GetTxpoolStatusErrorType,\n GetTxpoolStatusReturnType,\n} from './actions/test/getTxpoolStatus.js'\nexport type {\n InspectTxpoolErrorType,\n InspectTxpoolReturnType,\n} from './actions/test/inspectTxpool.js'\nexport type { RemoveBlockTimestampIntervalErrorType } from './actions/test/removeBlockTimestampInterval.js'\nexport type { ResetErrorType, ResetParameters } from './actions/test/reset.js'\nexport type {\n RevertErrorType,\n RevertParameters,\n} from './actions/test/revert.js'\nexport type {\n SendRawTransactionErrorType,\n SendRawTransactionParameters,\n SendRawTransactionReturnType,\n} from './actions/wallet/sendRawTransaction.js'\nexport type {\n SendTransactionErrorType,\n SendTransactionParameters,\n SendTransactionRequest,\n SendTransactionReturnType,\n} from './actions/wallet/sendTransaction.js'\nexport type {\n SignTransactionErrorType,\n SignTransactionParameters,\n SignTransactionReturnType,\n} from './actions/wallet/signTransaction.js'\nexport type {\n PrepareTransactionRequestErrorType,\n PrepareTransactionRequestParameters,\n PrepareTransactionRequestParameterType,\n PrepareTransactionRequestRequest,\n PrepareTransactionRequestReturnType,\n} from './actions/wallet/prepareTransactionRequest.js'\nexport type {\n SendUnsignedTransactionErrorType,\n SendUnsignedTransactionParameters,\n SendUnsignedTransactionReturnType,\n} from './actions/test/sendUnsignedTransaction.js'\nexport type { SetAutomineErrorType } from './actions/test/setAutomine.js'\nexport type {\n SetBalanceErrorType,\n SetBalanceParameters,\n} from './actions/test/setBalance.js'\nexport type {\n SetBlockGasLimitErrorType,\n SetBlockGasLimitParameters,\n} from './actions/test/setBlockGasLimit.js'\nexport type {\n SetBlockTimestampIntervalErrorType,\n SetBlockTimestampIntervalParameters,\n} from './actions/test/setBlockTimestampInterval.js'\nexport type {\n SetCodeErrorType,\n SetCodeParameters,\n} from './actions/test/setCode.js'\nexport type {\n SetCoinbaseErrorType,\n SetCoinbaseParameters,\n} from './actions/test/setCoinbase.js'\nexport type {\n SetIntervalMiningErrorType,\n SetIntervalMiningParameters,\n} from './actions/test/setIntervalMining.js'\nexport type { SetLoggingEnabledErrorType } from './actions/test/setLoggingEnabled.js'\nexport type {\n SetMinGasPriceErrorType,\n SetMinGasPriceParameters,\n} from './actions/test/setMinGasPrice.js'\nexport type {\n SetNextBlockBaseFeePerGasErrorType,\n SetNextBlockBaseFeePerGasParameters,\n} from './actions/test/setNextBlockBaseFeePerGas.js'\nexport type {\n SetNextBlockTimestampErrorType,\n SetNextBlockTimestampParameters,\n} from './actions/test/setNextBlockTimestamp.js'\nexport type {\n SetNonceErrorType,\n SetNonceParameters,\n} from './actions/test/setNonce.js'\nexport type { SetRpcUrlErrorType } from './actions/test/setRpcUrl.js'\nexport type {\n SetStorageAtErrorType,\n SetStorageAtParameters,\n} from './actions/test/setStorageAt.js'\nexport type {\n SignMessageErrorType,\n SignMessageParameters,\n SignMessageReturnType,\n} from './actions/wallet/signMessage.js'\nexport type {\n SignTypedDataErrorType,\n SignTypedDataParameters,\n SignTypedDataReturnType,\n} from './actions/wallet/signTypedData.js'\nexport type {\n StopImpersonatingAccountErrorType,\n StopImpersonatingAccountParameters,\n} from './actions/test/stopImpersonatingAccount.js'\nexport type {\n SwitchChainErrorType,\n SwitchChainParameters,\n} from './actions/wallet/switchChain.js'\nexport type {\n UninstallFilterErrorType,\n UninstallFilterParameters,\n UninstallFilterReturnType,\n} from './actions/public/uninstallFilter.js'\nexport type {\n WatchAssetErrorType,\n WatchAssetParameters,\n WatchAssetReturnType,\n} from './actions/wallet/watchAsset.js'\nexport type {\n VerifyHashErrorType as VerifyHashActionErrorType,\n VerifyHashParameters as VerifyHashActionParameters,\n VerifyHashReturnType as VerifyHashActionReturnType,\n} from './actions/public/verifyHash.js'\nexport type {\n VerifyTypedDataErrorType as VerifyTypedDataActionErrorType,\n VerifyTypedDataParameters as VerifyTypedDataActionParameters,\n VerifyTypedDataReturnType as VerifyTypedDataActionReturnType,\n} from './actions/public/verifyTypedData.js'\nexport type {\n VerifyMessageErrorType as VerifyMessageActionErrorType,\n VerifyMessageParameters as VerifyMessageActionParameters,\n VerifyMessageReturnType as VerifyMessageActionReturnType,\n} from './actions/public/verifyMessage.js'\nexport type {\n WatchContractEventOnLogsFn,\n WatchContractEventOnLogsParameter,\n WatchContractEventErrorType,\n WatchContractEventParameters,\n WatchContractEventReturnType,\n} from './actions/public/watchContractEvent.js'\nexport type {\n WriteContractErrorType,\n WriteContractParameters,\n WriteContractReturnType,\n} from './actions/wallet/writeContract.js'\nexport type { Call, Calls } from './types/calls.js'\nexport type {\n Chain,\n ChainConfig,\n ChainContract,\n ChainEstimateFeesPerGasFn,\n ChainFees,\n ChainFeesFnParameters,\n ChainFormatter,\n ChainEstimateFeesPerGasFnParameters,\n ChainMaxPriorityFeePerGasFn,\n DeriveChain,\n GetChainParameter,\n ChainFormatters,\n ChainSerializers,\n ExtractChainFormatterExclude,\n ExtractChainFormatterParameters,\n ExtractChainFormatterReturnType,\n} from './types/chain.js'\nexport type { GetTransactionRequestKzgParameter, Kzg } from './types/kzg.js'\nexport {\n type Client,\n type ClientConfig,\n type CreateClientErrorType,\n type MulticallBatchOptions,\n createClient,\n rpcSchema,\n} from './clients/createClient.js'\nexport {\n type CustomTransport,\n type CustomTransportConfig,\n type CustomTransportErrorType,\n custom,\n} from './clients/transports/custom.js'\nexport {\n type FallbackTransport,\n type FallbackTransportConfig,\n type FallbackTransportErrorType,\n fallback,\n shouldThrow,\n} from './clients/transports/fallback.js'\nexport {\n type HttpTransport,\n type HttpTransportConfig,\n type HttpTransportErrorType,\n http,\n} from './clients/transports/http.js'\nexport {\n type PublicClient,\n type PublicClientConfig,\n type CreatePublicClientErrorType,\n createPublicClient,\n} from './clients/createPublicClient.js'\nexport {\n type TestClient,\n type TestClientConfig,\n type CreateTestClientErrorType,\n createTestClient,\n} from './clients/createTestClient.js'\nexport {\n type PublicActions,\n publicActions,\n} from './clients/decorators/public.js'\nexport {\n type TestActions,\n testActions,\n} from './clients/decorators/test.js'\nexport {\n type WalletActions,\n walletActions,\n} from './clients/decorators/wallet.js'\nexport {\n type Transport,\n type TransportConfig,\n type CreateTransportErrorType,\n createTransport,\n} from './clients/transports/createTransport.js'\nexport {\n type WalletClient,\n type WalletClientConfig,\n type CreateWalletClientErrorType,\n createWalletClient,\n} from './clients/createWalletClient.js'\nexport {\n type WebSocketTransport,\n type WebSocketTransportConfig,\n type WebSocketTransportErrorType,\n webSocket,\n} from './clients/transports/webSocket.js'\nexport {\n multicall3Abi,\n erc20Abi,\n erc20Abi_bytes32,\n erc721Abi,\n erc4626Abi,\n universalSignatureValidatorAbi,\n} from './constants/abis.js'\nexport { ethAddress, zeroAddress } from './constants/address.js'\nexport {\n deploylessCallViaBytecodeBytecode,\n deploylessCallViaFactoryBytecode,\n universalSignatureValidatorByteCode,\n} from './constants/contracts.js'\nexport { etherUnits, gweiUnits, weiUnits } from './constants/unit.js'\nexport {\n maxInt8,\n maxInt16,\n maxInt24,\n maxInt32,\n maxInt40,\n maxInt48,\n maxInt56,\n maxInt64,\n maxInt72,\n maxInt80,\n maxInt88,\n maxInt96,\n maxInt104,\n maxInt112,\n maxInt120,\n maxInt128,\n maxInt136,\n maxInt144,\n maxInt152,\n maxInt160,\n maxInt168,\n maxInt176,\n maxInt184,\n maxInt192,\n maxInt200,\n maxInt208,\n maxInt216,\n maxInt224,\n maxInt232,\n maxInt240,\n maxInt248,\n maxInt256,\n maxUint8,\n maxUint16,\n maxUint24,\n maxUint32,\n maxUint40,\n maxUint48,\n maxUint56,\n maxUint64,\n maxUint72,\n maxUint80,\n maxUint88,\n maxUint96,\n maxUint104,\n maxUint112,\n maxUint120,\n maxUint128,\n maxUint136,\n maxUint144,\n maxUint152,\n maxUint160,\n maxUint168,\n maxUint176,\n maxUint184,\n maxUint192,\n maxUint200,\n maxUint208,\n maxUint216,\n maxUint224,\n maxUint232,\n maxUint240,\n maxUint248,\n maxUint256,\n minInt8,\n minInt16,\n minInt24,\n minInt32,\n minInt40,\n minInt48,\n minInt56,\n minInt64,\n minInt72,\n minInt80,\n minInt88,\n minInt96,\n minInt104,\n minInt112,\n minInt120,\n minInt128,\n minInt136,\n minInt144,\n minInt152,\n minInt160,\n minInt168,\n minInt176,\n minInt184,\n minInt192,\n minInt200,\n minInt208,\n minInt216,\n minInt224,\n minInt232,\n minInt240,\n minInt248,\n minInt256,\n} from './constants/number.js'\nexport { zeroHash } from './constants/bytes.js'\nexport { presignMessagePrefix } from './constants/strings.js'\nexport {\n AbiConstructorNotFoundError,\n type AbiConstructorNotFoundErrorType,\n AbiConstructorParamsNotFoundError,\n type AbiConstructorParamsNotFoundErrorType,\n AbiDecodingDataSizeInvalidError,\n type AbiDecodingDataSizeInvalidErrorType,\n AbiDecodingDataSizeTooSmallError,\n type AbiDecodingDataSizeTooSmallErrorType,\n AbiDecodingZeroDataError,\n type AbiDecodingZeroDataErrorType,\n AbiEncodingArrayLengthMismatchError,\n type AbiEncodingArrayLengthMismatchErrorType,\n AbiEncodingLengthMismatchError,\n type AbiEncodingLengthMismatchErrorType,\n AbiEncodingBytesSizeMismatchError,\n type AbiEncodingBytesSizeMismatchErrorType,\n AbiErrorInputsNotFoundError,\n type AbiErrorInputsNotFoundErrorType,\n AbiErrorNotFoundError,\n type AbiErrorNotFoundErrorType,\n AbiErrorSignatureNotFoundError,\n type AbiErrorSignatureNotFoundErrorType,\n AbiEventNotFoundError,\n type AbiEventNotFoundErrorType,\n AbiEventSignatureEmptyTopicsError,\n type AbiEventSignatureEmptyTopicsErrorType,\n AbiEventSignatureNotFoundError,\n type AbiEventSignatureNotFoundErrorType,\n AbiFunctionNotFoundError,\n type AbiFunctionNotFoundErrorType,\n AbiFunctionOutputsNotFoundError,\n type AbiFunctionOutputsNotFoundErrorType,\n AbiFunctionSignatureNotFoundError,\n type AbiFunctionSignatureNotFoundErrorType,\n BytesSizeMismatchError,\n type BytesSizeMismatchErrorType,\n DecodeLogDataMismatch,\n type DecodeLogDataMismatchErrorType,\n DecodeLogTopicsMismatch,\n type DecodeLogTopicsMismatchErrorType,\n InvalidAbiDecodingTypeError,\n type InvalidAbiDecodingTypeErrorType,\n InvalidAbiEncodingTypeError,\n type InvalidAbiEncodingTypeErrorType,\n InvalidArrayError,\n type InvalidArrayErrorType,\n InvalidDefinitionTypeError,\n type InvalidDefinitionTypeErrorType,\n UnsupportedPackedAbiType,\n type UnsupportedPackedAbiTypeErrorType,\n} from './errors/abi.js'\nexport { BaseError, type BaseErrorType, setErrorConfig } from './errors/base.js'\nexport {\n BlockNotFoundError,\n type BlockNotFoundErrorType,\n} from './errors/block.js'\nexport {\n CallExecutionError,\n type CallExecutionErrorType,\n ContractFunctionExecutionError,\n type ContractFunctionExecutionErrorType,\n ContractFunctionRevertedError,\n type ContractFunctionRevertedErrorType,\n ContractFunctionZeroDataError,\n type ContractFunctionZeroDataErrorType,\n RawContractError,\n type RawContractErrorType,\n CounterfactualDeploymentFailedError,\n type CounterfactualDeploymentFailedErrorType,\n} from './errors/contract.js'\nexport {\n BaseFeeScalarError,\n type BaseFeeScalarErrorType,\n Eip1559FeesNotSupportedError,\n type Eip1559FeesNotSupportedErrorType,\n MaxFeePerGasTooLowError,\n type MaxFeePerGasTooLowErrorType,\n} from './errors/fee.js'\nexport {\n ChainDisconnectedError,\n type ChainDisconnectedErrorType,\n InternalRpcError,\n type InternalRpcErrorType,\n InvalidInputRpcError,\n type InvalidInputRpcErrorType,\n InvalidParamsRpcError,\n type InvalidParamsRpcErrorType,\n InvalidRequestRpcError,\n type InvalidRequestRpcErrorType,\n JsonRpcVersionUnsupportedError,\n type JsonRpcVersionUnsupportedErrorType,\n LimitExceededRpcError,\n type LimitExceededRpcErrorType,\n MethodNotFoundRpcError,\n type MethodNotFoundRpcErrorType,\n MethodNotSupportedRpcError,\n type MethodNotSupportedRpcErrorType,\n ParseRpcError,\n type ParseRpcErrorType,\n ProviderDisconnectedError,\n type ProviderDisconnectedErrorType,\n ProviderRpcError,\n type ProviderRpcErrorCode,\n type ProviderRpcErrorType,\n ResourceNotFoundRpcError,\n type ResourceNotFoundRpcErrorType,\n ResourceUnavailableRpcError,\n type ResourceUnavailableRpcErrorType,\n RpcError,\n type RpcErrorType,\n type RpcErrorCode,\n SwitchChainError,\n TransactionRejectedRpcError,\n type TransactionRejectedRpcErrorType,\n UnauthorizedProviderError,\n type UnauthorizedProviderErrorType,\n UnknownRpcError,\n type UnknownRpcErrorType,\n UnsupportedProviderMethodError,\n type UnsupportedProviderMethodErrorType,\n UserRejectedRequestError,\n type UserRejectedRequestErrorType,\n} from './errors/rpc.js'\nexport {\n ChainDoesNotSupportContract,\n type ChainDoesNotSupportContractErrorType,\n ChainMismatchError,\n type ChainMismatchErrorType,\n ChainNotFoundError,\n type ChainNotFoundErrorType,\n ClientChainNotConfiguredError,\n type ClientChainNotConfiguredErrorType,\n InvalidChainIdError,\n type InvalidChainIdErrorType,\n} from './errors/chain.js'\nexport {\n InvalidBytesBooleanError,\n type InvalidBytesBooleanErrorType,\n IntegerOutOfRangeError,\n type IntegerOutOfRangeErrorType,\n InvalidHexBooleanError,\n type InvalidHexBooleanErrorType,\n InvalidHexValueError,\n type InvalidHexValueErrorType,\n SizeOverflowError,\n type SizeOverflowErrorType,\n} from './errors/encoding.js'\nexport {\n type EnsAvatarInvalidMetadataError,\n EnsAvatarUriResolutionError,\n type EnsAvatarInvalidMetadataErrorType,\n EnsAvatarInvalidNftUriError,\n type EnsAvatarInvalidNftUriErrorType,\n EnsAvatarUnsupportedNamespaceError,\n type EnsAvatarUnsupportedNamespaceErrorType,\n type EnsAvatarUriResolutionErrorType,\n} from './errors/ens.js'\nexport {\n type InvalidDecimalNumberErrorType,\n InvalidDecimalNumberError,\n} from './errors/unit.js'\nexport {\n EstimateGasExecutionError,\n type EstimateGasExecutionErrorType,\n} from './errors/estimateGas.js'\nexport {\n ExecutionRevertedError,\n type ExecutionRevertedErrorType,\n FeeCapTooHighError,\n type FeeCapTooHighErrorType,\n FeeCapTooLowError,\n type FeeCapTooLowErrorType,\n InsufficientFundsError,\n type InsufficientFundsErrorType,\n IntrinsicGasTooHighError,\n type IntrinsicGasTooHighErrorType,\n IntrinsicGasTooLowError,\n type IntrinsicGasTooLowErrorType,\n NonceMaxValueError,\n type NonceMaxValueErrorType,\n NonceTooHighError,\n type NonceTooHighErrorType,\n NonceTooLowError,\n type NonceTooLowErrorType,\n TipAboveFeeCapError,\n type TipAboveFeeCapErrorType,\n TransactionTypeNotSupportedError,\n type TransactionTypeNotSupportedErrorType,\n UnknownNodeError,\n type UnknownNodeErrorType,\n} from './errors/node.js'\nexport {\n FilterTypeNotSupportedError,\n type FilterTypeNotSupportedErrorType,\n} from './errors/log.js'\nexport {\n HttpRequestError,\n type HttpRequestErrorType,\n RpcRequestError,\n type RpcRequestErrorType,\n TimeoutError,\n type TimeoutErrorType,\n SocketClosedError,\n type SocketClosedErrorType,\n WebSocketRequestError,\n type WebSocketRequestErrorType,\n} from './errors/request.js'\nexport {\n InvalidAddressError,\n type InvalidAddressErrorType,\n} from './errors/address.js'\nexport {\n FeeConflictError,\n type FeeConflictErrorType,\n InvalidLegacyVError,\n type InvalidLegacyVErrorType,\n InvalidSerializableTransactionError,\n type InvalidSerializableTransactionErrorType,\n InvalidSerializedTransactionError,\n type InvalidSerializedTransactionErrorType,\n InvalidSerializedTransactionTypeError,\n type InvalidSerializedTransactionTypeErrorType,\n InvalidStorageKeySizeError,\n type InvalidStorageKeySizeErrorType,\n TransactionExecutionError,\n type TransactionExecutionErrorType,\n TransactionNotFoundError,\n type TransactionNotFoundErrorType,\n TransactionReceiptNotFoundError,\n type TransactionReceiptNotFoundErrorType,\n WaitForTransactionReceiptTimeoutError,\n type WaitForTransactionReceiptTimeoutErrorType,\n} from './errors/transaction.js'\nexport {\n SizeExceedsPaddingSizeError,\n type SizeExceedsPaddingSizeErrorType,\n SliceOffsetOutOfBoundsError,\n type SliceOffsetOutOfBoundsErrorType,\n} from './errors/data.js'\nexport {\n UrlRequiredError,\n type UrlRequiredErrorType,\n} from './errors/transport.js'\nexport {\n AccountStateConflictError,\n type AccountStateConflictErrorType,\n StateAssignmentConflictError,\n type StateAssignmentConflictErrorType,\n} from './errors/stateOverride.js'\nexport {\n InvalidDomainError,\n type InvalidDomainErrorType,\n InvalidPrimaryTypeError,\n type InvalidPrimaryTypeErrorType,\n InvalidStructTypeError,\n type InvalidStructTypeErrorType,\n} from './errors/typedData.js'\nexport type {\n AbiEventParameterToPrimitiveType,\n AbiEventParametersToPrimitiveTypes,\n AbiEventTopicToPrimitiveType,\n AbiItem,\n AbiItemArgs,\n AbiItemName,\n ContractConstructorArgs,\n ContractEventArgsFromTopics,\n EventDefinition,\n ExtractAbiFunctionForArgs,\n ExtractAbiItem,\n ExtractAbiItemForArgs,\n ExtractAbiItemNames,\n ContractErrorArgs,\n ContractErrorName,\n ContractEventArgs,\n ContractEventName,\n ContractFunctionParameters,\n ContractFunctionReturnType,\n ContractFunctionArgs,\n ContractFunctionName,\n GetEventArgs,\n GetValue,\n LogTopicType,\n MaybeAbiEventName,\n MaybeExtractEventArgsFromAbi,\n UnionWiden,\n Widen,\n} from './types/contract.js'\nexport type {\n AccessList,\n Transaction,\n TransactionBase,\n TransactionEIP1559,\n TransactionEIP2930,\n TransactionEIP4844,\n TransactionEIP7702,\n TransactionLegacy,\n TransactionReceipt,\n TransactionRequest,\n TransactionRequestBase,\n TransactionRequestEIP1559,\n TransactionRequestEIP2930,\n TransactionRequestEIP4844,\n TransactionRequestEIP7702,\n TransactionRequestGeneric,\n TransactionRequestLegacy,\n TransactionSerializable,\n TransactionSerializableBase,\n TransactionSerializableEIP1559,\n TransactionSerializableEIP2930,\n TransactionSerializableEIP4844,\n TransactionSerializableEIP7702,\n TransactionSerializableGeneric,\n TransactionSerializableLegacy,\n TransactionSerialized,\n TransactionSerializedEIP1559,\n TransactionSerializedEIP2930,\n TransactionSerializedEIP4844,\n TransactionSerializedEIP7702,\n TransactionSerializedGeneric,\n TransactionSerializedLegacy,\n TransactionType,\n} from './types/transaction.js'\nexport type {\n Assign,\n Branded,\n Evaluate,\n IsNarrowable,\n IsUndefined,\n IsUnion,\n LooseOmit,\n MaybePartial,\n MaybePromise,\n MaybeRequired,\n Mutable,\n NoInfer,\n NoUndefined,\n Omit,\n Or,\n PartialBy,\n RequiredBy,\n Some,\n UnionEvaluate,\n UnionLooseOmit,\n ValueOf,\n Prettify,\n ExactPartial,\n ExactRequired,\n IsNever,\n OneOf,\n UnionOmit,\n UnionPartialBy,\n UnionPick,\n UnionRequiredBy,\n UnionToTuple,\n} from './types/utils.js'\nexport type {\n Account,\n AccountSource,\n CustomSource,\n HDAccount,\n HDOptions,\n JsonRpcAccount,\n LocalAccount,\n PrivateKeyAccount,\n} from './accounts/types.js'\nexport type { AssetGateway, AssetGatewayUrls } from './types/ens.js'\nexport type {\n Block,\n BlockIdentifier,\n BlockNumber,\n BlockTag,\n Uncle,\n} from './types/block.js'\nexport type {\n ByteArray,\n Hash,\n Hex,\n LogTopic,\n Signature,\n CompactSignature,\n SignableMessage,\n} from './types/misc.js'\nexport type {\n AddEthereumChainParameter,\n BundlerRpcSchema,\n DebugBundlerRpcSchema,\n EIP1193EventMap,\n EIP1193Events,\n EIP1193Parameters,\n EIP1193Provider,\n EIP1193RequestFn,\n EIP1474Methods,\n ProviderRpcErrorType as EIP1193ProviderRpcErrorType,\n ProviderConnectInfo,\n ProviderMessage,\n PublicRpcSchema,\n PaymasterRpcSchema,\n NetworkSync,\n RpcSchema,\n RpcSchemaOverride,\n TestRpcSchema,\n WalletCapabilities,\n WalletCapabilitiesRecord,\n WalletCallReceipt,\n WalletGetCallsStatusReturnType,\n WalletGrantPermissionsParameters,\n WalletGrantPermissionsReturnType,\n WalletSendCallsParameters,\n WalletPermissionCaveat,\n WalletPermission,\n WalletRpcSchema,\n WatchAssetParams,\n} from './types/eip1193.js'\nexport { ProviderRpcError as EIP1193ProviderRpcError } from './types/eip1193.js'\nexport type { BlobSidecar, BlobSidecars } from './types/eip4844.js'\nexport type {\n FeeHistory,\n FeeValues,\n FeeValuesEIP1559,\n FeeValuesEIP4844,\n FeeValuesLegacy,\n FeeValuesType,\n} from './types/fee.js'\nexport type { Filter, FilterType } from './types/filter.js'\nexport type { TypedDataDefinition } from './types/typedData.js'\nexport type { GetTransportConfig, GetPollOptions } from './types/transport.js'\nexport type { Log } from './types/log.js'\nexport type {\n MulticallContracts,\n MulticallResponse,\n MulticallResults,\n} from './types/multicall.js'\nexport type {\n ParseAccount,\n DeriveAccount,\n HDKey,\n} from './types/account.js'\nexport type {\n Authorization,\n AuthorizationList,\n SerializedAuthorization,\n SerializedAuthorizationList,\n SignedAuthorization,\n SignedAuthorizationList,\n} from './types/authorization.js'\nexport type {\n Index,\n Quantity,\n RpcAuthorization,\n RpcAuthorizationList,\n RpcBlock,\n RpcBlockIdentifier,\n RpcBlockNumber,\n RpcFeeHistory,\n RpcFeeValues,\n RpcLog,\n RpcTransaction,\n RpcTransactionReceipt,\n RpcTransactionRequest,\n RpcUncle,\n Status,\n RpcProof,\n RpcAccountStateOverride,\n RpcStateOverride,\n RpcStateMapping,\n} from './types/rpc.js'\nexport type { Withdrawal } from './types/withdrawal.js'\nexport type {\n StateMapping,\n StateOverride,\n} from './types/stateOverride.js'\nexport { labelhash, type LabelhashErrorType } from './utils/ens/labelhash.js'\nexport { namehash, type NamehashErrorType } from './utils/ens/namehash.js'\nexport {\n type FormattedBlock,\n defineBlock,\n type DefineBlockErrorType,\n formatBlock,\n type FormatBlockErrorType,\n} from './utils/formatters/block.js'\nexport { formatLog, type FormatLogErrorType } from './utils/formatters/log.js'\nexport {\n type DecodeAbiParametersErrorType,\n type DecodeAbiParametersReturnType,\n decodeAbiParameters,\n} from './utils/abi/decodeAbiParameters.js'\nexport {\n type DecodeDeployDataErrorType,\n type DecodeDeployDataParameters,\n type DecodeDeployDataReturnType,\n decodeDeployData,\n} from './utils/abi/decodeDeployData.js'\nexport {\n type DecodeErrorResultErrorType,\n type DecodeErrorResultParameters,\n type DecodeErrorResultReturnType,\n decodeErrorResult,\n} from './utils/abi/decodeErrorResult.js'\nexport {\n type DecodeEventLogErrorType,\n type DecodeEventLogParameters,\n type DecodeEventLogReturnType,\n decodeEventLog,\n} from './utils/abi/decodeEventLog.js'\nexport {\n type DecodeFunctionDataErrorType,\n type DecodeFunctionDataParameters,\n type DecodeFunctionDataReturnType,\n decodeFunctionData,\n} from './utils/abi/decodeFunctionData.js'\nexport {\n type DecodeFunctionResultErrorType,\n type DecodeFunctionResultParameters,\n type DecodeFunctionResultReturnType,\n decodeFunctionResult,\n} from './utils/abi/decodeFunctionResult.js'\nexport {\n type EncodeAbiParametersErrorType,\n type EncodeAbiParametersReturnType,\n encodeAbiParameters,\n} from './utils/abi/encodeAbiParameters.js'\nexport {\n type EncodeDeployDataErrorType,\n type EncodeDeployDataParameters,\n type EncodeDeployDataReturnType,\n encodeDeployData,\n} from './utils/abi/encodeDeployData.js'\nexport {\n type EncodeErrorResultErrorType,\n type EncodeErrorResultParameters,\n type EncodeErrorResultReturnType,\n encodeErrorResult,\n} from './utils/abi/encodeErrorResult.js'\nexport {\n type EncodeEventTopicsErrorType,\n type EncodeEventTopicsParameters,\n type EncodeEventTopicsReturnType,\n encodeEventTopics,\n} from './utils/abi/encodeEventTopics.js'\nexport {\n type EncodeFunctionDataErrorType,\n type EncodeFunctionDataParameters,\n type EncodeFunctionDataReturnType,\n encodeFunctionData,\n} from './utils/abi/encodeFunctionData.js'\nexport {\n type PrepareEncodeFunctionDataErrorType,\n type PrepareEncodeFunctionDataParameters,\n type PrepareEncodeFunctionDataReturnType,\n prepareEncodeFunctionData,\n} from './utils/abi/prepareEncodeFunctionData.js'\nexport {\n type EncodeFunctionResultErrorType,\n type EncodeFunctionResultParameters,\n type EncodeFunctionResultReturnType,\n encodeFunctionResult,\n} from './utils/abi/encodeFunctionResult.js'\nexport {\n type ParseEventLogsErrorType,\n type ParseEventLogsParameters,\n type ParseEventLogsReturnType,\n parseEventLogs,\n} from './utils/abi/parseEventLogs.js'\nexport {\n type FormattedTransaction,\n defineTransaction,\n type DefineTransactionErrorType,\n formatTransaction,\n type FormatTransactionErrorType,\n transactionType,\n} from './utils/formatters/transaction.js'\nexport {\n type FormattedTransactionReceipt,\n defineTransactionReceipt,\n type DefineTransactionReceiptErrorType,\n formatTransactionReceipt,\n type FormatTransactionReceiptErrorType,\n} from './utils/formatters/transactionReceipt.js'\nexport {\n type FormattedTransactionRequest,\n defineTransactionRequest,\n type DefineTransactionRequestErrorType,\n formatTransactionRequest,\n type FormatTransactionRequestErrorType,\n rpcTransactionType,\n} from './utils/formatters/transactionRequest.js'\nexport {\n type GetAbiItemErrorType,\n type GetAbiItemParameters,\n type GetAbiItemReturnType,\n getAbiItem,\n} from './utils/abi/getAbiItem.js'\nexport {\n type GetContractAddressOptions,\n type GetCreate2AddressOptions,\n type GetCreate2AddressErrorType,\n type GetCreateAddressOptions,\n type GetCreateAddressErrorType,\n getContractAddress,\n getCreate2Address,\n getCreateAddress,\n} from './utils/address/getContractAddress.js'\nexport {\n type GetSerializedTransactionType,\n type GetSerializedTransactionTypeErrorType,\n getSerializedTransactionType,\n} from './utils/transaction/getSerializedTransactionType.js'\nexport {\n type GetTransactionType,\n type GetTransactionTypeErrorType,\n getTransactionType,\n} from './utils/transaction/getTransactionType.js'\nexport {\n type HashDomainErrorType,\n type HashStructErrorType,\n type HashTypedDataErrorType,\n type HashTypedDataParameters,\n type HashTypedDataReturnType,\n hashDomain,\n hashStruct,\n hashTypedData,\n} from './utils/signature/hashTypedData.js'\nexport {\n type CompactSignatureToSignatureErrorType,\n compactSignatureToSignature,\n} from './utils/signature/compactSignatureToSignature.js'\nexport {\n /** @deprecated Use `ParseCompactSignatureErrorType`. */\n type ParseCompactSignatureErrorType as HexToCompactSignatureErrorType,\n /** @deprecated Use `parseCompactSignature`. */\n parseCompactSignature as hexToCompactSignature,\n type ParseCompactSignatureErrorType,\n parseCompactSignature,\n} from './utils/signature/parseCompactSignature.js'\nexport {\n /** @deprecated Use `ParseSignatureErrorType`. */\n type ParseSignatureErrorType as HexToSignatureErrorType,\n /** @deprecated Use `parseSignature`. */\n parseSignature as hexToSignature,\n type ParseSignatureErrorType,\n parseSignature,\n} from './utils/signature/parseSignature.js'\nexport {\n type RecoverAddressErrorType,\n type RecoverAddressParameters,\n type RecoverAddressReturnType,\n recoverAddress,\n} from './utils/signature/recoverAddress.js'\nexport {\n type RecoverMessageAddressErrorType,\n type RecoverMessageAddressParameters,\n type RecoverMessageAddressReturnType,\n recoverMessageAddress,\n} from './utils/signature/recoverMessageAddress.js'\nexport {\n type RecoverPublicKeyErrorType,\n type RecoverPublicKeyParameters,\n type RecoverPublicKeyReturnType,\n recoverPublicKey,\n} from './utils/signature/recoverPublicKey.js'\nexport {\n type RecoverTransactionAddressErrorType,\n type RecoverTransactionAddressParameters,\n type RecoverTransactionAddressReturnType,\n recoverTransactionAddress,\n} from './utils/signature/recoverTransactionAddress.js'\nexport {\n type RecoverTypedDataAddressErrorType,\n type RecoverTypedDataAddressParameters,\n type RecoverTypedDataAddressReturnType,\n recoverTypedDataAddress,\n} from './utils/signature/recoverTypedDataAddress.js'\nexport {\n type SignatureToCompactSignatureErrorType,\n signatureToCompactSignature,\n} from './utils/signature/signatureToCompactSignature.js'\nexport {\n /** @deprecated Use `SignatureToHexErrorType` instead. */\n type SerializeCompactSignatureErrorType as CompactSignatureToHexErrorType,\n /** @deprecated Use `serializeCompactSignature` instead. */\n serializeCompactSignature as compactSignatureToHex,\n type SerializeCompactSignatureErrorType,\n serializeCompactSignature,\n} from './utils/signature/serializeCompactSignature.js'\nexport {\n /** @deprecated Use `SignatureToHexErrorType` instead. */\n type SerializeSignatureErrorType as SignatureToHexErrorType,\n /** @deprecated Use `serializeSignature` instead. */\n serializeSignature as signatureToHex,\n type SerializeSignatureParameters,\n type SerializeSignatureReturnType,\n type SerializeSignatureErrorType,\n serializeSignature,\n} from './utils/signature/serializeSignature.js'\nexport {\n bytesToRlp,\n type BytesToRlpErrorType,\n hexToRlp,\n type HexToRlpErrorType,\n toRlp,\n type ToRlpErrorType,\n type ToRlpReturnType,\n} from './utils/encoding/toRlp.js'\nexport {\n type VerifyHashErrorType,\n type VerifyHashParameters,\n type VerifyHashReturnType,\n verifyHash,\n} from './utils/signature/verifyHash.js'\nexport {\n type VerifyMessageErrorType,\n type VerifyMessageParameters,\n type VerifyMessageReturnType,\n verifyMessage,\n} from './utils/signature/verifyMessage.js'\nexport {\n type VerifyTypedDataErrorType,\n type VerifyTypedDataParameters,\n type VerifyTypedDataReturnType,\n verifyTypedData,\n} from './utils/signature/verifyTypedData.js'\nexport {\n type ParseErc6492SignatureErrorType,\n type ParseErc6492SignatureParameters,\n type ParseErc6492SignatureReturnType,\n parseErc6492Signature,\n} from './utils/signature/parseErc6492Signature.js'\nexport {\n type IsErc6492SignatureErrorType,\n type IsErc6492SignatureParameters,\n type IsErc6492SignatureReturnType,\n isErc6492Signature,\n} from './utils/signature/isErc6492Signature.js'\nexport {\n type SerializeErc6492SignatureErrorType,\n type SerializeErc6492SignatureParameters,\n type SerializeErc6492SignatureReturnType,\n serializeErc6492Signature,\n} from './utils/signature/serializeErc6492Signature.js'\nexport {\n type AssertRequestErrorType,\n assertRequest,\n} from './utils/transaction/assertRequest.js'\nexport {\n type AssertTransactionEIP1559ErrorType,\n assertTransactionEIP1559,\n type AssertTransactionEIP2930ErrorType,\n assertTransactionEIP2930,\n type AssertTransactionLegacyErrorType,\n assertTransactionLegacy,\n} from './utils/transaction/assertTransaction.js'\nexport {\n type BoolToBytesErrorType,\n type BoolToBytesOpts,\n boolToBytes,\n type HexToBytesErrorType,\n type HexToBytesOpts,\n hexToBytes,\n type NumberToBytesErrorType,\n numberToBytes,\n type StringToBytesErrorType,\n type StringToBytesOpts,\n stringToBytes,\n type ToBytesErrorType,\n type ToBytesParameters,\n toBytes,\n} from './utils/encoding/toBytes.js'\nexport {\n type BoolToHexErrorType,\n type BoolToHexOpts,\n boolToHex,\n type BytesToHexErrorType,\n type BytesToHexOpts,\n bytesToHex,\n type NumberToHexErrorType,\n type NumberToHexOpts,\n numberToHex,\n type StringToHexErrorType,\n type StringToHexOpts,\n stringToHex,\n type ToHexErrorType,\n type ToHexParameters,\n toHex,\n} from './utils/encoding/toHex.js'\nexport {\n type BytesToBigIntErrorType,\n type BytesToBigIntOpts,\n bytesToBigInt,\n type BytesToBoolErrorType,\n type BytesToBoolOpts,\n bytesToBool,\n type BytesToNumberErrorType,\n type BytesToNumberOpts,\n bytesToNumber,\n type BytesToStringErrorType,\n type BytesToStringOpts,\n bytesToString,\n type FromBytesErrorType,\n type FromBytesParameters,\n fromBytes,\n} from './utils/encoding/fromBytes.js'\nexport {\n type CcipRequestParameters,\n type CcipRequestErrorType,\n ccipRequest,\n /** @deprecated Use `ccipRequest`. */\n ccipRequest as ccipFetch,\n type OffchainLookupErrorType,\n offchainLookup,\n offchainLookupAbiItem,\n offchainLookupSignature,\n} from './utils/ccip.js'\nexport {\n type BlobsToCommitmentsErrorType,\n type BlobsToCommitmentsParameters,\n type BlobsToCommitmentsReturnType,\n blobsToCommitments,\n} from './utils/blob/blobsToCommitments.js'\nexport {\n type CommitmentToVersionedHashErrorType,\n type CommitmentToVersionedHashParameters,\n type CommitmentToVersionedHashReturnType,\n commitmentToVersionedHash,\n} from './utils/blob/commitmentToVersionedHash.js'\nexport {\n type CommitmentsToVersionedHashesErrorType,\n type CommitmentsToVersionedHashesParameters,\n type CommitmentsToVersionedHashesReturnType,\n commitmentsToVersionedHashes,\n} from './utils/blob/commitmentsToVersionedHashes.js'\nexport {\n type SidecarsToVersionedHashesErrorType,\n type SidecarsToVersionedHashesParameters,\n type SidecarsToVersionedHashesReturnType,\n sidecarsToVersionedHashes,\n} from './utils/blob/sidecarsToVersionedHashes.js'\nexport {\n type blobsToProofsErrorType,\n type blobsToProofsParameters,\n type blobsToProofsReturnType,\n blobsToProofs,\n} from './utils/blob/blobsToProofs.js'\nexport {\n type FromBlobsErrorType,\n type FromBlobsParameters,\n type FromBlobsReturnType,\n fromBlobs,\n} from './utils/blob/fromBlobs.js'\nexport {\n type ToBlobSidecarsErrorType,\n type ToBlobSidecarsParameters,\n type ToBlobSidecarsReturnType,\n toBlobSidecars,\n} from './utils/blob/toBlobSidecars.js'\nexport {\n type ToBlobsErrorType,\n type ToBlobsParameters,\n type ToBlobsReturnType,\n toBlobs,\n} from './utils/blob/toBlobs.js'\nexport {\n type DefineKzgErrorType,\n type DefineKzgParameters,\n type DefineKzgReturnType,\n defineKzg,\n} from './utils/kzg/defineKzg.js'\nexport {\n type SetupKzgErrorType,\n type SetupKzgParameters,\n type SetupKzgReturnType,\n setupKzg,\n} from './utils/kzg/setupKzg.js'\nexport {\n type ConcatBytesErrorType,\n type ConcatErrorType,\n type ConcatHexErrorType,\n type ConcatReturnType,\n concat,\n concatBytes,\n concatHex,\n} from './utils/data/concat.js'\nexport {\n type AssertCurrentChainErrorType,\n type AssertCurrentChainParameters,\n assertCurrentChain,\n} from './utils/chain/assertCurrentChain.js'\nexport { defineChain } from './utils/chain/defineChain.js'\nexport {\n type ExtractChainErrorType,\n type ExtractChainParameters,\n type ExtractChainReturnType,\n extractChain,\n} from './utils/chain/extractChain.js'\nexport {\n type GetChainContractAddressErrorType,\n getChainContractAddress,\n} from './utils/chain/getChainContractAddress.js'\nexport {\n type EncodePackedErrorType,\n encodePacked,\n} from './utils/abi/encodePacked.js'\nexport {\n type WithRetryErrorType,\n withRetry,\n} from './utils/promise/withRetry.js'\nexport {\n type WithTimeoutErrorType,\n withTimeout,\n} from './utils/promise/withTimeout.js'\nexport {\n type FormatEtherErrorType,\n formatEther,\n} from './utils/unit/formatEther.js'\nexport {\n type FormatGweiErrorType,\n formatGwei,\n} from './utils/unit/formatGwei.js'\nexport {\n type FormatUnitsErrorType,\n formatUnits,\n} from './utils/unit/formatUnits.js'\nexport {\n type FromHexErrorType,\n fromHex,\n type HexToBigIntErrorType,\n hexToBigInt,\n type HexToBoolErrorType,\n hexToBool,\n type HexToNumberErrorType,\n hexToNumber,\n type HexToStringErrorType,\n hexToString,\n} from './utils/encoding/fromHex.js'\nexport {\n type FromRlpErrorType,\n type FromRlpReturnType,\n fromRlp,\n} from './utils/encoding/fromRlp.js'\nexport {\n type ChecksumAddressErrorType,\n type GetAddressErrorType,\n checksumAddress,\n getAddress,\n} from './utils/address/getAddress.js'\nexport {\n type GetContractErrorReturnType,\n getContractError,\n} from './utils/errors/getContractError.js'\nexport {\n type ToEventSelectorErrorType,\n toEventSelector,\n /** @deprecated use `ToEventSelectorErrorType`. */\n type ToEventSelectorErrorType as GetEventSelectorErrorType,\n /** @deprecated use `toEventSelector`. */\n toEventSelector as getEventSelector,\n} from './utils/hash/toEventSelector.js'\nexport {\n type ToFunctionSelectorErrorType,\n toFunctionSelector,\n /** @deprecated use `ToFunctionSelectorErrorType`. */\n type ToFunctionSelectorErrorType as GetFunctionSelectorErrorType,\n /** @deprecated use `toFunctionSelector`. */\n toFunctionSelector as getFunctionSelector,\n} from './utils/hash/toFunctionSelector.js'\nexport {\n type ToEventSignatureErrorType,\n toEventSignature,\n /** @deprecated use `ToEventSignatureErrorType`. */\n type ToEventSignatureErrorType as GetEventSignatureErrorType,\n /** @deprecated use `toEventSignature`. */\n toEventSignature as getEventSignature,\n} from './utils/hash/toEventSignature.js'\nexport {\n type ToFunctionSignatureErrorType,\n toFunctionSignature,\n /** @deprecated use `ToFunctionSignatureErrorType`. */\n type ToFunctionSignatureErrorType as GetFunctionSignatureErrorType,\n /** @deprecated use `toFunctionSignature`. */\n toFunctionSignature as getFunctionSignature,\n} from './utils/hash/toFunctionSignature.js'\nexport {\n type ToEventHashErrorType,\n toEventHash,\n} from './utils/hash/toEventHash.js'\nexport {\n type ToFunctionHashErrorType,\n toFunctionHash,\n} from './utils/hash/toFunctionHash.js'\nexport {\n type HashMessageErrorType,\n hashMessage,\n} from './utils/signature/hashMessage.js'\nexport {\n type ToPrefixedMessageErrorType,\n toPrefixedMessage,\n} from './utils/signature/toPrefixedMessage.js'\nexport {\n type IsAddressOptions,\n type IsAddressErrorType,\n isAddress,\n} from './utils/address/isAddress.js'\nexport {\n type IsAddressEqualReturnType,\n type IsAddressEqualErrorType,\n isAddressEqual,\n} from './utils/address/isAddressEqual.js'\nexport { type IsBytesErrorType, isBytes } from './utils/data/isBytes.js'\nexport { type IsHashErrorType, isHash } from './utils/hash/isHash.js'\nexport { type IsHexErrorType, isHex } from './utils/data/isHex.js'\nexport {\n type Keccak256Hash,\n type Keccak256ErrorType,\n keccak256,\n} from './utils/hash/keccak256.js'\nexport {\n type Sha256Hash,\n type Sha256ErrorType,\n sha256,\n} from './utils/hash/sha256.js'\nexport {\n type Ripemd160Hash,\n type Ripemd160ErrorType,\n ripemd160,\n} from './utils/hash/ripemd160.js'\nexport {\n type PadBytesErrorType,\n type PadErrorType,\n type PadHexErrorType,\n type PadReturnType,\n pad,\n padBytes,\n padHex,\n} from './utils/data/pad.js'\nexport {\n type ParseEtherErrorType,\n parseEther,\n} from './utils/unit/parseEther.js'\nexport { type ParseGweiErrorType, parseGwei } from './utils/unit/parseGwei.js'\nexport {\n type ParseTransactionErrorType,\n type ParseTransactionReturnType,\n parseTransaction,\n} from './utils/transaction/parseTransaction.js'\nexport {\n type ParseUnitsErrorType,\n parseUnits,\n} from './utils/unit/parseUnits.js'\nexport {\n type SerializeAccessListErrorType,\n serializeAccessList,\n} from './utils/transaction/serializeAccessList.js'\nexport {\n serializeTransaction,\n type SerializeTransactionErrorType,\n type SerializedTransactionReturnType,\n type SerializeTransactionFn,\n} from './utils/transaction/serializeTransaction.js'\nexport { type SizeErrorType, size } from './utils/data/size.js'\nexport {\n type SliceBytesErrorType,\n type SliceErrorType,\n type SliceHexErrorType,\n slice,\n sliceBytes,\n sliceHex,\n} from './utils/data/slice.js'\nexport { type StringifyErrorType, stringify } from './utils/stringify.js'\nexport {\n type TrimErrorType,\n type TrimReturnType,\n trim,\n} from './utils/data/trim.js'\nexport {\n type DomainSeparatorErrorType,\n type GetTypesForEIP712DomainErrorType,\n type SerializeTypedDataErrorType,\n type ValidateTypedDataErrorType,\n serializeTypedData,\n validateTypedData,\n domainSeparator,\n getTypesForEIP712Domain,\n} from './utils/typedData.js'\nexport {\n type CreateNonceManagerParameters,\n type NonceManager,\n type NonceManagerSource,\n createNonceManager,\n nonceManager,\n} from './utils/nonceManager.js'\nexport type {\n RpcEstimateUserOperationGasReturnType,\n RpcGetUserOperationByHashReturnType,\n RpcUserOperation,\n RpcUserOperationReceipt,\n RpcUserOperationRequest,\n} from './account-abstraction/types/rpc.js'\n", "import { defineChain } from 'viem';\n\nimport { ChainDefinition } from '../../types/ConceroNetwork';\n\nexport function createViemChain(\n\tchainDefinition: ChainDefinition\n): ReturnType {\n\treturn defineChain({\n\t\tid: chainDefinition.id,\n\t\tname: chainDefinition.name,\n\t\tnativeCurrency: {\n\t\t\tdecimals: 18,\n\t\t\tname: 'eth',\n\t\t\tsymbol: 'eth',\n\t\t},\n\t\trpcUrls: {\n\t\t\tdefault: { http: chainDefinition.rpcUrls },\n\t\t},\n\t\tblockExplorers: chainDefinition.blockExplorer\n\t\t\t? {\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\tname: chainDefinition.blockExplorer.name,\n\t\t\t\t\t\turl: chainDefinition.blockExplorer.url,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: undefined,\n\t\ttestnet: chainDefinition.isTestnet,\n\t});\n}\n", "import process from 'process';\n\nimport { warn } from './log';\n\nfunction getEnvVar(key: string): string | undefined {\n\tconst value = process.env[key];\n\tif (value === undefined || value === '') {\n\t\twarn(`Missing env variable: ${key}`, 'getEnvVar');\n\t\treturn undefined;\n\t}\n\n\treturn value;\n}\n\nexport { getEnvVar };\n", "const networkColors: Record = {\n\tethereum: '\\x1b[30m', // grey\n\tarbitrum: '\\x1b[34m', // blue\n\tpolygon: '\\x1b[35m', // magenta\n\tavalanche: '\\x1b[31m', // red\n\tbase: '\\x1b[36m', // cyan\n\tethereumSepolia: '\\x1b[30m', // grey\n\tarbitrumSepolia: '\\x1b[34m', // blue\n\toptimismSepolia: '\\x1b[31m', // red\n\tpolygonAmoy: '\\x1b[35m', // magenta\n\tavalancheFuji: '\\x1b[31m', // red\n\tbaseSepolia: '\\x1b[36m', // cyan\n\thardhat: '\\x1b[32m', // green\n\tlocalhost: '\\x1b[32m', // green\n};\nconst reset = '\\x1b[0m';\n\nexport function log(message: any, functionName: string, networkName?: string) {\n\tconst greenFill = '\\x1b[32m';\n\tconst network = networkName ? `\\x1b[35m[${networkName}]${reset}` : '';\n\n\tconsole.log(`${network}${greenFill}[${functionName}]${reset}`, message);\n}\n\nexport function warn(message: any, functionName: string) {\n\tconst yellowFill = '\\x1b[33m';\n\n\tconsole.log(`${yellowFill}[${functionName}]${reset}`, message);\n}\n\nexport function err(message: any, functionName: string, networkName?: string) {\n\tconst redFill = '\\x1b[31m';\n\tconst network = networkName\n\t\t? `${networkColors[networkName]}[${networkName}]${reset}`\n\t\t: '';\n\n\tconsole.log(\n\t\t`${network}${redFill}[${functionName}] ERROR:${reset}`,\n\t\tmessage\n\t);\n}\n\nexport default log;\n", "import { getEnvVar } from './getEnvVar';\n\nexport const getTrezorDeployEnabled = () =>\n\tgetEnvVar('TREZOR_DEPLOY_ENABLED') === 'true';\n", "import { NetworkType } from '../networks/types';\nimport { warn } from './log';\n\nexport function getWallet(\n\tchainType: NetworkType,\n\taccountType:\n\t\t| 'proxyDeployer'\n\t\t| 'deployer'\n\t\t| 'operator'\n\t\t| 'priceFeedProxyDeployer',\n\twalletType: 'privateKey' | 'address'\n) {\n\tlet prefix;\n\tlet walletKey;\n\tswitch (accountType) {\n\t\tcase 'proxyDeployer':\n\t\t\tprefix = 'PROXY_DEPLOYER';\n\t\t\tbreak;\n\t\tcase 'deployer':\n\t\t\tprefix = 'DEPLOYER';\n\t\t\tbreak;\n\t\tcase 'operator':\n\t\t\tprefix = 'OPERATOR';\n\t\t\tbreak;\n\t\tcase 'priceFeedProxyDeployer':\n\t\t\tprefix = 'PRICE_FEED_PROXY_DEPLOYER';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown account type: ${accountType}`);\n\t}\n\n\tswitch (walletType) {\n\t\tcase 'privateKey':\n\t\t\twalletKey = 'PRIVATE_KEY';\n\t\t\tbreak;\n\t\tcase 'address':\n\t\t\twalletKey = 'ADDRESS';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown wallet type: ${walletType}`);\n\t}\n\n\t// Determine the environment variable key based on the wallet type\n\tconst envKey = `${chainType.toUpperCase()}_${prefix}_${walletKey}`;\n\tconst walletValue = process.env[envKey];\n\n\tif (!walletValue) {\n\t\twarn(`Missing env variable: ${envKey}`, 'getEnvVar');\n\t}\n\n\treturn walletValue;\n}\n", "import { readFileSync, writeFileSync } from \"fs\";\nimport path from \"path\";\n\nimport { getNetworkEnvKey } from \"../networks/getNetworkEnvKey\";\n\nimport { envPrefixes } from \"../constants/deploymentVariables\";\nimport { ConceroNetworkNames } from \"../../types/ConceroNetwork\";\nimport { EnvFileName, EnvPrefixes } from \"../../types/deploymentVariables\";\nimport log from \"./log\";\n\nexport type ContractPrefix = keyof EnvPrefixes;\n\nexport function updateEnvVariable(key: string, newValue: string, envFileName: EnvFileName) {\n\tconst filePath = path.join(__dirname, `../.env.${envFileName}`);\n\tif (!filePath) throw new Error(`File not found: ${filePath}`);\n\n\tconst envContents = readFileSync(filePath, \"utf8\");\n\tlet lines = envContents.split(/\\r?\\n/);\n\n\tif (!lines.some(line => line.startsWith(`${key}=`))) {\n\t\tlog(`Key ${key} not found in .env file. Adding to ${filePath}`, \"updateEnvVariable\");\n\t\tlines.push(`${key}=${newValue}`);\n\t}\n\n\tconst newLines = lines.map(line => {\n\t\tlet [currentKey, currentValue] = line.split(\"=\");\n\t\tif (currentKey === key) {\n\t\t\treturn `${key}=${newValue}`;\n\t\t}\n\t\treturn line;\n\t});\n\n\twriteFileSync(filePath, newLines.join(\"\\n\"));\n\tprocess.env[key] = newValue;\n}\n\nexport function updateEnvAddress(\n\tprefix: ContractPrefix,\n\tnewValue: string,\n\tenvFileName: EnvFileName,\n\tnetworkPostfix?: ConceroNetworkNames | string,\n): void {\n\tconst searchKey = networkPostfix\n\t\t? `${envPrefixes[prefix]}_${getNetworkEnvKey(networkPostfix)}`\n\t\t: envPrefixes[prefix];\n\n\tupdateEnvVariable(searchKey, newValue, envFileName);\n}\n\nexport default updateEnvVariable;\n", "import type { WaitForTransactionReceiptParameters } from \"viem/actions/public/waitForTransactionReceipt\";\n\nimport { EnvPrefixes } from \"../../types/deploymentVariables\";\nimport { ConceroNetwork } from \"../../types/ConceroNetwork\";\n\nenum ProxyEnum {\n\trouterProxy = \"routerProxy\",\n\tverifierProxy = \"verifierProxy\",\n\tpriceFeedProxy = \"priceFeedProxy\",\n\tcreValidatorLibProxy = \"creValidatorLibProxy\",\n\trelayerLibProxy = \"relayerLibProxy\",\n}\n\nfunction getViemReceiptConfig(chain: ConceroNetwork): Partial {\n\treturn {\n\t\ttimeout: 0,\n\t\tconfirmations: chain.confirmations,\n\t};\n}\n\nconst envPrefixes: EnvPrefixes = {\n\trouter: \"CONCERO_ROUTER\",\n\trouterProxy: \"CONCERO_ROUTER_PROXY\",\n\trouterProxyAdmin: \"CONCERO_ROUTER_PROXY_ADMIN\",\n\tverifier: \"CONCERO_VERIFIER\",\n\tverifierProxy: \"CONCERO_VERIFIER_PROXY\",\n\tverifierProxyAdmin: \"CONCERO_VERIFIER_PROXY_ADMIN\",\n\tpriceFeed: \"CONCERO_PRICE_FEED\",\n\tpriceFeedProxy: \"CONCERO_PRICE_FEED_PROXY\",\n\tpriceFeedProxyAdmin: \"CONCERO_PRICE_FEED_PROXY_ADMIN\",\n\tlpToken: \"LPTOKEN\",\n\tpause: \"CONCERO_PAUSE\",\n\tcreValidatorLibProxy: \"CONCERO_CRE_VALIDATOR_LIB_PROXY\",\n\tcreValidatorLibProxyAdmin: \"CONCERO_CRE_VALIDATOR_LIB_PROXY_ADMIN\",\n\tcreValidatorLib: \"CONCERO_CRE_VALIDATOR_LIB\",\n\trelayerLib: \"CONCERO_RELAYER_LIB\",\n\trelayerLibProxy: \"CONCERO_RELAYER_LIB_PROXY\",\n\trelayerLibProxyAdmin: \"CONCERO_RELAYER_LIB_PROXY_ADMIN\",\n};\n\nconst ADMIN_SLOT = \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\";\nconst ADMIN_ROLE = \"0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42\";\n\nexport {\n\tProxyEnum,\n\tenvPrefixes,\n\tgetViemReceiptConfig,\n\tADMIN_SLOT,\n\tADMIN_ROLE,\n};\n", "import mainnetChains from '@concero/concero-networks/output/chains.mainnet.json';\nimport testnetChains from '@concero/concero-networks/output/chains.testnet.json';\nimport type { Chain } from '@concero/concero-networks/src/types';\nimport { type NetworkType } from '../../types/ConceroNetwork';\n\nimport {\n\tChainDefinition,\n\tConceroNetwork,\n} from '../../types/ConceroNetwork';\nimport { getWallet } from '../utils';\nimport { createViemChain } from '../utils/createViemChain';\nimport { getTrezorDeployEnabled } from '../utils/getTrezorDeployEnabled';\n\nconst mainnetProxyDeployerPK = getWallet(\n\t'mainnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\nconst testnetProxyDeployerPK = getWallet(\n\t'testnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\n\nconst mainnetDeployerPK = getWallet('mainnet', 'deployer', 'privateKey');\nconst testnetDeployerPK = getWallet('testnet', 'deployer', 'privateKey');\n\nconst trezorDeployEnabled = getTrezorDeployEnabled();\n\nconst testnetAccounts = [testnetDeployerPK, testnetProxyDeployerPK];\n\nconst networkTypes: Record = {\n\tmainnet: 'mainnet',\n\ttestnet: 'testnet',\n\tlocalhost: 'localhost',\n};\n\nexport type ConceroMainnetNetworkNames =\n\t(typeof mainnetChains)[keyof typeof mainnetChains]['name'];\nexport type ConceroTestnetNetworkNames =\n\t(typeof testnetChains)[keyof typeof testnetChains]['name'];\n\nfunction createExtendedNetworks>(\n\tchains: T,\n\tnetworkType: NetworkType,\n\taccounts: (string | undefined)[]\n): Record {\n\tconst validAccounts = accounts.filter((acc): acc is string => !!acc);\n\t\n\treturn Object.fromEntries(\n\t\tObject.values(chains).map(chain => {\n\t\t\tconst chainDefinition: ChainDefinition = {\n\t\t\t\tid: parseInt(chain.id),\n\t\t\t\tname: chain.name,\n\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\tisTestnet: chain.isTestnet ?? false,\n\t\t\t\t...(chain.blockExplorers?.[0] && {\n\t\t\t\t\tblockExplorer: {\n\t\t\t\t\t\tname: chain.blockExplorers[0].name,\n\t\t\t\t\t\turl: chain.blockExplorers[0].url,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t};\n\n\t\t\tconst viemChain = createViemChain(chainDefinition);\n\n\t\t\treturn [\n\t\t\t\tchain.name,\n\t\t\t\t{\n\t\t\t\t\tname: chain.name,\n\t\t\t\t\tchainId: parseInt(chain.id),\n\t\t\t\t\ttype: networkType,\n\t\t\t\t\turl: chain.rpcUrls[0] || '',\n\t\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\t\tsaveDeployments: false,\n\t\t\t\t\t...(!trezorDeployEnabled && { accounts: validAccounts }),\n\t\t\t\t\tchainSelector: BigInt(chain.chainSelector),\n\t\t\t\t\tconfirmations: 1,\n\t\t\t\t\tviemChain,\n\t\t\t\t\t...(trezorDeployEnabled && {\n\t\t\t\t\t\ttrezorDerivationPaths: [\n\t\t\t\t\t\t\t[44, 60, 0, 0, 0],\n\t\t\t\t\t\t\t[44, 60, 0, 0, 1],\n\t\t\t\t\t\t],\n\t\t\t\t\t\ttrezorInsecureDerivation: true,\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t];\n\t\t})\n\t) as Record;\n}\n\nexport const testnetNetworks = createExtendedNetworks(\n\ttestnetChains as unknown as Record,\n\tnetworkTypes.testnet,\n\ttestnetAccounts\n);\n\nexport const mainnetNetworks = createExtendedNetworks(\n\tmainnetChains as unknown as Record,\n\tnetworkTypes.mainnet,\n\t[mainnetDeployerPK, mainnetProxyDeployerPK]\n);\n\nexport const conceroNetworks: Record = {\n\t...testnetNetworks,\n\t...mainnetNetworks,\n};\n", "import { HardhatRuntimeEnvironment } from 'hardhat/types';\n\nimport { conceroNetworks } from '../constants/conceroNetworks';\nimport { ContractPrefix, EnvFileName } from '../../types/deploymentVariables';\nimport { getTrezorDeployEnabled, log, updateEnvAddress } from '../utils';\n\nexport interface ITxParams {\n\tgasLimit: bigint;\n}\n\nexport interface IGenericDeployParams {\n\thre: HardhatRuntimeEnvironment;\n\tcontractName: string;\n\tcontractPrefix: ContractPrefix;\n\ttxParams?: Partial;\n}\n\nexport const genericDeploy = async (\n\t{ hre, contractName, contractPrefix, txParams }: IGenericDeployParams,\n\t...contractConstructorArgs: any[]\n) => {\n\tconst [deployer] = await hre.ethers.getSigners();\n\tconst chain = conceroNetworks[hre.network.name];\n\n\tlog(\n\t\t`Deploy ${contractName} from address: ${await deployer.getAddress()}`,\n\t\t'contract deploy',\n\t\tchain.name\n\t);\n\n\tconst contractFactory = await hre.ethers.getContractFactory(contractName);\n\n\tconst deployOverrides = txParams?.gasLimit ? { gasLimit: txParams.gasLimit } : {};\n\n\tconst deployTx = contractFactory.getDeployTransaction(\n\t\t...contractConstructorArgs,\n\t\tdeployOverrides\n\t);\n\n\tconst isTrezorDeployEnabled = getTrezorDeployEnabled();\n\tif (deployTx.data && isTrezorDeployEnabled) {\n\t\tlog(\n\t\t\t`${contractName} input data: ${deployTx.data} \\n size: ${(deployTx.data.length - 2) / 2}`,\n\t\t\t'bytecode',\n\t\t\tchain.name\n\t\t);\n\t}\n\n\tconst contract = await contractFactory.deploy(...contractConstructorArgs, deployOverrides);\n\tawait contract.deploymentTransaction()?.wait();\n\tconst deploymentAddress = await contract.getAddress();\n\n\tif (hre.tenderly) {\n\t\tawait hre.tenderly.verify({ name: contractName, address: deploymentAddress });\n\t}\n\n\tlog(\n\t\t`Deployed at: ${deploymentAddress}`,\n\t\t`deploy ${contractName}`,\n\t\tchain.name\n\t);\n\n\tupdateEnvAddress(\n\t\tcontractPrefix,\n\t\tdeploymentAddress,\n\t\t`deployments.${chain.type}` as EnvFileName,\n\t\tchain.name,\n\t);\n\n\treturn contract.deploymentTransaction()?.hash;\n};\n", "import {\n\tAddress,\n\terc20Abi,\n\tformatUnits,\n\tHash,\n\tparseUnits,\n\tPublicClient,\n\tWalletClient,\n} from 'viem';\n\nexport class TokenSender {\n\tprivate walletClient: WalletClient;\n\tprivate publicClient: PublicClient;\n\n\tconstructor(walletClient: WalletClient, publicClient: PublicClient) {\n\t\tthis.walletClient = walletClient;\n\t\tthis.publicClient = publicClient;\n\t}\n\n\tpublic async sendToken(\n\t\ttokenAddress: Address,\n\t\tamount: string,\n\t\trecipient: Address\n\t): Promise {\n\t\tconst [tokenDecimals, tokenSymbol, tokenBalance] = await Promise.all([\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'decimals',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'symbol',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'balanceOf',\n\t\t\t\targs: [this.walletClient.account?.address!],\n\t\t\t}),\n\t\t]);\n\n\t\tconsole.log(\n\t\t\t`Current ${tokenSymbol} balance ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t);\n\n\t\tif (parseUnits(amount, tokenDecimals) > tokenBalance) {\n\t\t\tthrow new Error(\n\t\t\t\t`Insufficient balance. Required: ${amount}, available: ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t\t);\n\t\t}\n\n\t\tconst txHash = await this.walletClient.writeContract({\n\t\t\taddress: tokenAddress,\n\t\t\tabi: erc20Abi,\n\t\t\tfunctionName: 'transfer',\n\t\t\targs: [recipient, parseUnits(amount, tokenDecimals)],\n\t\t\tchain: this.walletClient.chain,\n\t\t\taccount: this.walletClient.account!,\n\t\t});\n\n\t\tconst { status } = await this.publicClient.waitForTransactionReceipt({\n\t\t\thash: txHash,\n\t\t});\n\n\t\tif (status !== 'success') {\n\t\t\tthrow new Error(`Error sending token. Hash: ${txHash}`);\n\t\t}\n\n\t\tconsole.log(`Token successfully sent. Hash: ${txHash}`);\n\n\t\treturn txHash;\n\t}\n}\n", "import { PublicClient } from 'viem';\n\ntype GasData = {\n\tgasPrice?: string;\n\tmaxFeePerGas?: string;\n\tmaxPriorityFeePerGas?: string;\n};\n\nexport async function getActualGasData(\n\tpublicClient: PublicClient\n): Promise {\n\tconst block = await publicClient.getBlock();\n\n\tconst isEIP1559 = !!block.baseFeePerGas;\n\n\tlet gasPrice = 0n;\n\tlet maxPriorityFeePerGas = 0n;\n\ttry {\n\t\tif (isEIP1559) {\n\t\t\tconst { maxFeePerGas } = await publicClient.estimateFeesPerGas();\n\t\t\tgasPrice = maxFeePerGas;\n\t\t\tmaxPriorityFeePerGas =\n\t\t\t\tawait publicClient.estimateMaxPriorityFeePerGas();\n\t\t} else {\n\t\t\tgasPrice = await publicClient.getGasPrice();\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('Error getting actual gas data:', error);\n\t\treturn {\n\t\t\tgasPrice: '0',\n\t\t\tmaxFeePerGas: '0',\n\t\t\tmaxPriorityFeePerGas: '0',\n\t\t};\n\t}\n\n\tconst gasDataLegacy = {\n\t\tgasPrice: gasPrice.toString(),\n\t};\n\n\tconst gasDataEIP1559 = {\n\t\tmaxFeePerGas: gasPrice.toString(),\n\t\tmaxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n\t};\n\n\tconst gasData: GasData = isEIP1559 ? gasDataEIP1559 : gasDataLegacy;\n\n\treturn gasData;\n}\n", "import { Deployment } from 'hardhat-deploy/types';\nimport { HardhatRuntimeEnvironment } from 'hardhat/types';\nimport { PublicClient } from 'viem';\nimport { getActualGasData } from './getActualGasData';\n\ntype HardhatDeployWrapperArgs = {\n\thre: HardhatRuntimeEnvironment;\n\targs: any[];\n\tpublicClient: PublicClient;\n\tproxy?: boolean;\n\tgasLimit?: number;\n\tlog?: boolean;\n\tlibraries?: {\n\t\t[key: string]: `0x${string}`;\n\t};\n\tskipIfAlreadyDeployed: boolean;\n};\n\nexport async function hardhatDeployWrapper(\n\tcontractName: string,\n\t{\n\t\thre,\n\t\targs,\n\t\tpublicClient,\n\t\tproxy = false,\n\t\tgasLimit,\n\t\tlog = false,\n\t\tlibraries,\n\t\tskipIfAlreadyDeployed = false,\n\t}: HardhatDeployWrapperArgs\n): Promise {\n\tlet actualDeployer;\n\n\tif (proxy) {\n\t\tconst { proxyDeployer } = await hre.getNamedAccounts();\n\t\tactualDeployer = proxyDeployer;\n\t} else {\n\t\tconst { deployer } = await hre.getNamedAccounts();\n\t\tactualDeployer = deployer;\n\t}\n\n\tconst { deploy } = hre.deployments;\n\n\tconst nonce = await publicClient.getTransactionCount({\n\t\taddress: actualDeployer as `0x${string}`,\n\t});\n\n\tconst gasData = await getActualGasData(publicClient);\n\tconst waitConfirmations = hre.network.name.startsWith('ethereum') ? 1 : 3;\n\n\tif (log) {\n\t\tconsole.log(\n\t\t\t`\\x1b[34m[hardhatDeployWrapper]\\x1b[0m\\x1b[35m[args]\\x1b[0m`,\n\t\t\t{\n\t\t\t\tfrom: actualDeployer,\n\t\t\t\targs,\n\t\t\t\tnonce,\n\t\t\t\tgasLimit: gasLimit ? gasLimit : 'auto',\n\t\t\t\tgasData,\n\t\t\t\twaitConfirmations,\n\t\t\t}\n\t\t);\n\t}\n\n\tlet deployment: Deployment;\n\ttry {\n\t\tconsole.log('Starting deployment of:', contractName);\n\t\tdeployment = await deploy(contractName, {\n\t\t\tfrom: actualDeployer,\n\t\t\targs: args,\n\t\t\tlog: true,\n\t\t\tautoMine: true,\n\t\t\tnonce,\n\t\t\twaitConfirmations,\n\t\t\t...(gasLimit ? { gasLimit } : {}),\n\t\t\t...gasData,\n\t\t\t...(libraries ? { libraries } : {}),\n\t\t\tskipIfAlreadyDeployed,\n\t\t});\n\t} catch (error) {\n\t\tconsole.error('Error deploying contract:', error);\n\t\tthrow error;\n\t}\n\n\treturn deployment;\n}\n"], - "mappings": "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", - "names": ["err", "process", "path", "networkTypes", "log"] + "sources": ["../src/index.ts", "../src/types/networkTypes.ts", "../src/utils/createViemChain.ts", "../src/utils/getEnvVar.ts", "../src/utils/log.ts", "../src/utils/formatting.ts", "../src/networks/getNetworkEnvKey.ts", "../src/utils/getTrezorDeployEnabled.ts", "../src/utils/getWallet.ts", "../src/utils/ethersSignerCallContract.ts", "../src/utils/compileContracts.ts", "../src/utils/localhostViemChain.ts", "../src/utils/extractProxyAdminAddress.ts", "../src/utils/createEnvUpdater.ts", "../src/utils/getActualGasData.ts", "../src/utils/getViemClients.ts", "../src/constants/conceroNetworks.ts", "../src/constants/config.ts", "../src/deploy/GenericDeploy.ts", "../src/tokens/TokenSender.ts"], + "sourcesContent": ["// Types\nexport * from './types';\n\n// Utils\nexport * from './utils';\n\n// Networks\nexport * from './networks';\n\n// Constants\nexport { config } from './constants/config';\nexport {\n\tconceroNetworks,\n\ttestnetNetworks,\n\tmainnetNetworks,\n\ttype ConceroMainnetNetworkNames,\n\ttype ConceroTestnetNetworkNames,\n} from './constants/conceroNetworks';\n\n// Deploy\nexport { genericDeploy, type IDeployResult, type IGenericDeployParams, type ITxParams } from './deploy/GenericDeploy';\n\n// Tokens\nexport { TokenSender } from './tokens/TokenSender';\n", "import { type NetworkType } from './ConceroNetwork';\n\nexport const networkTypes: Record = {\n\tmainnet: 'mainnet',\n\ttestnet: 'testnet',\n\tlocalhost: 'localhost',\n};\n", "import { defineChain } from 'viem';\n\nimport { type ChainDefinition } from '../types';\n\nexport function createViemChain(\n\tchainDefinition: ChainDefinition\n): ReturnType {\n\treturn defineChain({\n\t\tid: chainDefinition.id,\n\t\tname: chainDefinition.name,\n\t\tnativeCurrency: {\n\t\t\tdecimals: 18,\n\t\t\tname: 'eth',\n\t\t\tsymbol: 'eth',\n\t\t},\n\t\trpcUrls: {\n\t\t\tdefault: { http: chainDefinition.rpcUrls },\n\t\t},\n\t\tblockExplorers: chainDefinition.blockExplorer\n\t\t\t? {\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\tname: chainDefinition.blockExplorer.name,\n\t\t\t\t\t\turl: chainDefinition.blockExplorer.url,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: undefined,\n\t\ttestnet: chainDefinition.isTestnet,\n\t});\n}\n", "import process from 'process';\nimport { Address } from 'viem';\n\nimport { warn } from './log';\nimport { shorten } from './formatting';\nimport { getNetworkEnvKey } from '../networks';\n\nexport function getEnvVar(key: string, defaultValue?: string): string {\n\tconst value = process.env[key];\n\tif (value === undefined || value === '') {\n\t\tif (defaultValue !== undefined) return defaultValue;\n\t\twarn(`Missing env variable: ${key}`, 'getEnvVar');\n\t\treturn '';\n\t}\n\n\treturn value;\n}\n\nexport interface EnvAddressConfig> {\n\tprefixes: TPrefixes;\n}\n\nexport function createEnvAddressGetter>(\n\tconfig: EnvAddressConfig,\n) {\n\tfunction getEnvAddress(\n\t\tprefix: keyof TPrefixes,\n\t\tnetworkName?: string,\n\t): [Address, string] {\n\t\tconst searchKey = networkName\n\t\t\t? `${config.prefixes[prefix]}_${getNetworkEnvKey(networkName)}`\n\t\t\t: config.prefixes[prefix];\n\n\t\tconst value = getEnvVar(searchKey) as Address;\n\t\tconst friendlyName = `${String(prefix)}(${shorten(value)})`\n\n\t\treturn [value, friendlyName];\n\t}\n\n\treturn { getEnvAddress };\n}\n", "const networkColors: Record = {\n\tethereum: '\\x1b[30m', // grey\n\tarbitrum: '\\x1b[34m', // blue\n\tpolygon: '\\x1b[35m', // magenta\n\tavalanche: '\\x1b[31m', // red\n\tbase: '\\x1b[36m', // cyan\n\tethereumSepolia: '\\x1b[30m', // grey\n\tarbitrumSepolia: '\\x1b[34m', // blue\n\toptimismSepolia: '\\x1b[31m', // red\n\tpolygonAmoy: '\\x1b[35m', // magenta\n\tavalancheFuji: '\\x1b[31m', // red\n\tbaseSepolia: '\\x1b[36m', // cyan\n\thardhat: '\\x1b[32m', // green\n\tlocalhost: '\\x1b[32m', // green\n};\nconst reset = '\\x1b[0m';\n\nexport function log(message: any, functionName: string, networkName?: string) {\n\tconst greenFill = '\\x1b[32m';\n\tconst network = networkName ? `\\x1b[35m[${networkName}]${reset}` : '';\n\n\tconsole.log(`${network}${greenFill}[${functionName}]${reset}`, message);\n}\n\nexport function warn(message: any, functionName: string) {\n\tconst yellowFill = '\\x1b[33m';\n\n\tconsole.log(`${yellowFill}[${functionName}]${reset}`, message);\n}\n\nexport function err(message: any, functionName: string, networkName?: string) {\n\tconst redFill = '\\x1b[31m';\n\tconst network = networkName\n\t\t? `${networkColors[networkName]}[${networkName}]${reset}`\n\t\t: '';\n\n\tconsole.log(\n\t\t`${network}${redFill}[${functionName}] ERROR:${reset}`,\n\t\tmessage\n\t);\n}\n\nexport default log;\n", "import { type Address } from \"viem\";\n\nexport function shorten(address: Address) {\n\treturn `${address.slice(0, 6)}...${address.slice(-4)}`;\n}\n\nexport function formatGas(gasAmountWei: bigint) {\n\t// splits gas number with commas like so: 1,000,000\n\treturn gasAmountWei.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n}\n", "/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkEnvKey(networkName: string): string {\n if (!networkName) {\n throw new Error('Network name must be provided');\n }\n return camelCaseToCapsSnakeCase(networkName);\n}\n\n/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkKey(NETWORK_NAME: string): string {\n if (!NETWORK_NAME) {\n throw new Error('Network name must be provided');\n }\n return capsSnakeCaseToCamelCase(NETWORK_NAME);\n}\n\n/**\n * Converts a string from CAPS_SNAKE_CASE to camelCase\n *\n * @param snakeCaseString The string in CAPS_SNAKE_CASE format\n * @returns The string converted to camelCase format\n */\nexport function capsSnakeCaseToCamelCase(snakeCaseString: string): string {\n if (!snakeCaseString) {\n throw new Error('String must be provided');\n }\n\n return snakeCaseString\n .toLowerCase()\n .replace(/_([a-z])/g, (_, char) => char.toUpperCase());\n}\n\n/**\n * Converts a string from camelCase to CAPS_SNAKE_CASE\n *\n * @param camelCaseString The string in camelCase format\n * @returns The string converted to CAPS_SNAKE_CASE format\n */\nexport function camelCaseToCapsSnakeCase(camelCaseString: string): string {\n if (!camelCaseString) {\n throw new Error('String must be provided');\n }\n\n return camelCaseString.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toUpperCase();\n}\n\nexport function getNetworkName(networkEnvKey: string): string {\n if (!networkEnvKey) {\n throw new Error('Network name must be provided');\n }\n\n return networkEnvKey\n .toLowerCase()\n .split('_')\n .map((word, index) =>\n index === 0 ? word : word[0].toUpperCase() + word.slice(1)\n )\n .join('');\n}\n", "import { getEnvVar } from './getEnvVar';\n\nexport const getTrezorDeployEnabled = () =>\n\tgetEnvVar('TREZOR_DEPLOY_ENABLED', 'false') === 'true';\n", "import { type NetworkType } from '../types';\nimport { warn } from './log';\n\nexport function getWallet(\n\tchainType: NetworkType,\n\taccountType:\n\t\t| 'proxyDeployer'\n\t\t| 'deployer'\n\t\t| 'operator',\n\twalletType: 'privateKey' | 'address'\n) {\n\tlet prefix;\n\tlet walletKey;\n\tswitch (accountType) {\n\t\tcase 'proxyDeployer':\n\t\t\tprefix = 'PROXY_DEPLOYER';\n\t\t\tbreak;\n\t\tcase 'deployer':\n\t\t\tprefix = 'DEPLOYER';\n\t\t\tbreak;\n\t\tcase 'operator':\n\t\t\tprefix = 'OPERATOR';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown account type: ${accountType}`);\n\t}\n\n\tswitch (walletType) {\n\t\tcase 'privateKey':\n\t\t\twalletKey = 'PRIVATE_KEY';\n\t\t\tbreak;\n\t\tcase 'address':\n\t\t\twalletKey = 'ADDRESS';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown wallet type: ${walletType}`);\n\t}\n\n\t// Determine the environment variable key based on the wallet type\n\tconst envKey = `${chainType.toUpperCase()}_${prefix}_${walletKey}`;\n\tconst walletValue = process.env[envKey];\n\n\tif (!walletValue) {\n\t\twarn(`Missing env variable: ${envKey}`, 'getEnvVar');\n\t}\n\n\treturn walletValue;\n}\n", "import { HardhatRuntimeEnvironment } from \"hardhat/types\";\nimport { Address, Hash } from \"viem\";\n\nimport { log } from \"./log\";\n\nexport const ethersSignerCallContract = async (\n\thre: HardhatRuntimeEnvironment,\n\tcontract: Address,\n\tabi: any[],\n\tfunctionName: string,\n\t...functionArgs: any[]\n) => {\n\tconst [ethersSigner] = await hre.ethers.getSigners();\n\tconst ethersContract = new hre.ethers.Contract(contract, abi, ethersSigner);\n\tconst unsignedTx = await ethersContract[functionName].populateTransaction(...functionArgs);\n\n\tlog(\n\t\t`Size: ${(unsignedTx.data.length - 2) / 2}, Input data: ${unsignedTx.data}, Address: ${unsignedTx.to}`,\n\t\tfunctionName,\n\t\thre.network.name,\n\t);\n\n\treturn (await ethersSigner.sendTransaction(unsignedTx)).hash as Hash;\n};\n", "/*\nhardhat compile\n --concurrency Number of compilation jobs executed in parallel. Defaults to the number of CPU cores - 1 (default: 9)\n --force Force compilation ignoring cache\n --no-size-contracts Don't size contracts after running this task, even if runOnCompile option is enabled\n --no-typechain Skip Typechain compilation\n --quiet Makes the compilation process less verbose\n */\nimport { execSync } from \"child_process\";\n\ninterface HardhatCompileParams {\n\tconcurrency?: number;\n\tforce?: boolean;\n\tnoSizeContracts?: boolean;\n\tnoTypechain?: boolean;\n\tquiet?: boolean;\n}\n\nexport function compileContracts({ quiet = true, force = false }: HardhatCompileParams) {\n\tconst packageManager = process.env[\"PACKAGE_MANAGER\"] || \"yarn\";\n\tconst command = `${packageManager} compile`;\n\tconst args = [];\n\t// if (concurrency) args.push(`--concurrency ${concurrency}`);\n\t// if (noSizeContracts) args.push(\"--no-size-contracts\");\n\t// if (noTypechain) args.push(\"--no-typechain\");\n\tif (quiet) args.push(\"--quiet\");\n\tif (force) args.push(\"--force\");\n\texecSync(`${command} ${args.join(\" \")}`, { stdio: \"inherit\" });\n}\n", "import { defineChain } from \"viem\";\n\nexport const localhostViemChain = defineChain({\n\tid: Number(process.env.LOCALHOST_FORK_CHAIN_ID),\n\tname: \"localhost\",\n\tnativeCurrency: {\n\t\tdecimals: 18,\n\t\tname: \"eth\",\n\t\tsymbol: \"eth\",\n\t},\n\trpcUrls: {\n\t\tdefault: { http: [process.env.LOCALHOST_RPC_URL ?? \"http://127.0.0.1:8545\"] },\n\t},\n\ttestnet: true,\n});\n\nexport const hardhatViemChain = defineChain({\n\tid: Number(process.env.HARDHAT_CHAIN_ID),\n\tname: \"hardhat\",\n\tnativeCurrency: {\n\t\tdecimals: 18,\n\t\tname: \"eth\",\n\t\tsymbol: \"eth\",\n\t},\n\trpcUrls: {\n\t\tdefault: { http: [process.env.HARDHAT_RPC_URL ?? \"http://127.0.0.1:8545\"] },\n\t},\n\ttestnet: true,\n});\n", "import { ethers } from 'ethers';\n\nexport function extractProxyAdminAddress(receipt: ethers.TransactionReceipt | null): string {\n\tif (!receipt) return ethers.ZeroAddress;\n\n\tconst adminChangedTopic = ethers.id(\"AdminChanged(address,address)\");\n\tconst adminChangedLog = receipt.logs.find((log: ethers.Log) => log.topics[0] === adminChangedTopic);\n\n\tif (!adminChangedLog) return ethers.ZeroAddress;\n\n\ttry {\n\t\tconst abiCoder = ethers.AbiCoder.defaultAbiCoder();\n\t\tconst [, newAdmin] = abiCoder.decode(['address', 'address'], adminChangedLog.data);\n\t\treturn newAdmin;\n\t} catch {\n\t\treturn ethers.ZeroAddress;\n\t}\n}", "import { existsSync, readFileSync, writeFileSync } from \"fs\";\nimport path from \"path\";\nimport { getNetworkEnvKey } from \"../networks/getNetworkEnvKey\";\nimport log from \"./log\";\n\nexport interface EnvUpdaterConfig> {\n\tprefixes: TPrefixes;\n\tbasePath: string;\n}\n\nexport function createEnvUpdater<\n\tTPrefixes extends Record,\n\tTEnvFileName extends string,\n>(config: EnvUpdaterConfig) {\n\tfunction updateEnvVariable(\n\t\tkey: string,\n\t\tnewValue: string,\n\t\tenvFileName: TEnvFileName,\n\t): void {\n\t\tconst filePath = path.join(config.basePath, `.env.${envFileName}`);\n\n\t\tif (!existsSync(filePath)) {\n\t\t\tthrow new Error(`File not found: ${filePath}`);\n\t\t}\n\n\t\tconst envContents = readFileSync(filePath, \"utf8\");\n\t\tlet lines = envContents.split(/\\r?\\n/);\n\n\t\tconst keyExists = lines.some(line => line.startsWith(`${key}=`));\n\n\t\tif (!keyExists) {\n\t\t\tlog(\n\t\t\t\t`Key ${key} not found in .env file. Adding to ${filePath}`,\n\t\t\t\t\"updateEnvVariable\",\n\t\t\t);\n\t\t\tlines.push(`${key}=${newValue}`);\n\t\t} else {\n\t\t\tlines = lines.map(line => {\n\t\t\t\tconst [currentKey] = line.split(\"=\");\n\t\t\t\tif (currentKey === key) {\n\t\t\t\t\treturn `${key}=${newValue}`;\n\t\t\t\t}\n\t\t\t\treturn line;\n\t\t\t});\n\t\t}\n\n\t\twriteFileSync(filePath, lines.join(\"\\n\"));\n\t\tprocess.env[key] = newValue;\n\t}\n\n\tfunction updateEnvAddress(\n\t\tprefix: keyof TPrefixes,\n\t\tnewValue: string,\n\t\tenvFileName: TEnvFileName,\n\t\tnetworkPostfix?: string,\n\t): void {\n\t\tconst searchKey = networkPostfix\n\t\t\t? `${config.prefixes[prefix]}_${getNetworkEnvKey(networkPostfix)}`\n\t\t\t: String(config.prefixes[prefix]);\n\n\t\tupdateEnvVariable(searchKey, newValue, envFileName);\n\t}\n\n\treturn { updateEnvVariable, updateEnvAddress };\n}\n", "import { PublicClient } from 'viem';\n\ntype GasData = {\n\tgasPrice?: string;\n\tmaxFeePerGas?: string;\n\tmaxPriorityFeePerGas?: string;\n};\n\nexport async function getActualGasData(\n\tpublicClient: PublicClient\n): Promise {\n\tconst block = await publicClient.getBlock();\n\n\tconst isEIP1559 = !!block.baseFeePerGas;\n\n\tlet gasPrice = 0n;\n\tlet maxPriorityFeePerGas = 0n;\n\ttry {\n\t\tif (isEIP1559) {\n\t\t\tconst { maxFeePerGas } = await publicClient.estimateFeesPerGas();\n\t\t\tgasPrice = maxFeePerGas;\n\t\t\tmaxPriorityFeePerGas =\n\t\t\t\tawait publicClient.estimateMaxPriorityFeePerGas();\n\t\t} else {\n\t\t\tgasPrice = await publicClient.getGasPrice();\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('Error getting actual gas data:', error);\n\t\treturn {\n\t\t\tgasPrice: '0',\n\t\t\tmaxFeePerGas: '0',\n\t\t\tmaxPriorityFeePerGas: '0',\n\t\t};\n\t}\n\n\tconst gasDataLegacy = {\n\t\tgasPrice: gasPrice.toString(),\n\t};\n\n\tconst gasDataEIP1559 = {\n\t\tmaxFeePerGas: gasPrice.toString(),\n\t\tmaxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n\t};\n\n\tconst gasData: GasData = isEIP1559 ? gasDataEIP1559 : gasDataLegacy;\n\n\treturn gasData;\n}\n", "import {\n\tChain,\n\ttype TestClient,\n\ttype PublicClient,\n\ttype WalletClient,\n\tcreatePublicClient,\n\tcreateTestClient,\n\tcreateWalletClient,\n\tfallback,\n\thttp,\n\tpublicActions,\n\twalletActions,\n\tnonceManager,\n} from \"viem\";\nimport { privateKeyToAccount, type PrivateKeyAccount } from \"viem/accounts\";\n\nimport { type ConceroNetwork, type NetworkType } from \"../types\";\nimport { getWallet } from \"../utils\";\nimport { localhostViemChain } from \"./localhostViemChain\";\nimport { conceroNetworks } from \"../constants/conceroNetworks\";\n\nfunction getClients(\n\tviemChain: Chain,\n\turl: string | undefined,\n\taccount: PrivateKeyAccount = privateKeyToAccount(\n\t\t`0x${process.env.TESTNET_DEPLOYER_PRIVATE_KEY}`,\n\t),\n): {\n\twalletClient: WalletClient;\n\tpublicClient: PublicClient;\n\taccount: PrivateKeyAccount;\n} {\n\tconst publicClient = createPublicClient({ transport: http(url), chain: viemChain });\n\tconst walletClient = createWalletClient({ transport: http(url), chain: viemChain, account });\n\n\treturn { walletClient, publicClient, account };\n}\n\nexport type ExtendedTestClient = TestClient & WalletClient & PublicClient;\n\nfunction getTestClient(account: PrivateKeyAccount): ExtendedTestClient {\n\tconst testClient = createTestClient({\n\t\tchain: localhostViemChain,\n\t\tmode: \"hardhat\",\n\t\ttransport: http(),\n\t\taccount,\n\t})\n\t\t.extend(publicActions)\n\t\t.extend(walletActions);\n\n\treturn testClient as unknown as ExtendedTestClient;\n}\n\nfunction getFallbackClients(\n\tchain: ConceroNetwork,\n\taccount?: PrivateKeyAccount,\n): {\n\twalletClient: WalletClient;\n\tpublicClient: PublicClient;\n\taccount: PrivateKeyAccount;\n} {\n\tif (!account) {\n\t\tswitch (chain.type) {\n\t\t\tcase \"mainnet\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.MAINNET_DEPLOYER_PRIVATE_KEY}`);\n\t\t\t\tbreak;\n\t\t\tcase \"testnet\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.TESTNET_DEPLOYER_PRIVATE_KEY}`, {\n\t\t\t\t\tnonceManager: nonceManager,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"localhost\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.LOCALHOST_DEPLOYER_PRIVATE_KEY}`);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unsupported chain type: ${chain.type}`);\n\t\t}\n\t}\n\n\tconst { viemChain, name } = chain;\n\n\tif (!conceroNetworks[name].rpcUrls.length) {\n\t\tthrow new Error(`No URLs configured for chain: ${name}`);\n\t}\n\n\tconst transport = fallback(\n\t\tconceroNetworks[name].rpcUrls.map(url =>\n\t\t\thttp(url, {\n\t\t\t\ttimeout: 10000,\n\t\t\t\tretryCount: 1,\n\t\t\t\tretryDelay: 250,\n\t\t\t\tonFetchResponse: async response => {\n\t\t\t\t\tif (response.status >= 400) {\n\t\t\t\t\t\tthrow new Error(`HTTP error: ${response.status} ${response.statusText}`);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t}),\n\t\t),\n\t);\n\tconst publicClient = createPublicClient({ transport, chain: viemChain });\n\tconst walletClient = createWalletClient({ transport, chain: viemChain, account });\n\n\treturn { walletClient, publicClient, account };\n}\n\nfunction getViemAccount(\n\tchainType: NetworkType,\n\taccountType: \"proxyDeployer\" | \"deployer\",\n) {\n\tconst privateKey = `0x${getWallet(chainType, accountType, \"privateKey\")}`;\n\n\treturn privateKeyToAccount(privateKey as `0x${string}`, {\n\t\tnonceManager: nonceManager,\n\t});\n}\n\nexport { getClients, getFallbackClients, getTestClient, getViemAccount };\n", "import mainnetChains from '@concero/concero-networks/output/chains.mainnet.json';\nimport testnetChains from '@concero/concero-networks/output/chains.testnet.json';\nimport type { Chain } from '@concero/concero-networks/src/types';\n\nimport {\n\ttype NetworkType,\n\ttype ChainDefinition,\n\ttype ConceroNetwork,\n\tnetworkTypes,\n} from '../types';\nimport { getWallet } from '../utils';\nimport { createViemChain } from '../utils/createViemChain';\nimport { getTrezorDeployEnabled } from '../utils/getTrezorDeployEnabled';\n\nconst mainnetProxyDeployerPK = getWallet(\n\t'mainnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\nconst testnetProxyDeployerPK = getWallet(\n\t'testnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\n\nconst mainnetDeployerPK = getWallet('mainnet', 'deployer', 'privateKey');\nconst testnetDeployerPK = getWallet('testnet', 'deployer', 'privateKey');\n\nconst trezorDeployEnabled = getTrezorDeployEnabled();\n\nconst testnetAccounts = [testnetDeployerPK, testnetProxyDeployerPK];\n\nexport type ConceroMainnetNetworkNames =\n\t(typeof mainnetChains)[keyof typeof mainnetChains]['name'];\nexport type ConceroTestnetNetworkNames =\n\t(typeof testnetChains)[keyof typeof testnetChains]['name'];\n\nfunction createExtendedNetworks>(\n\tchains: T,\n\tnetworkType: NetworkType,\n\taccounts: (string | undefined)[]\n): Record {\n\tconst validAccounts = accounts.filter((acc): acc is string => !!acc);\n\n\treturn Object.fromEntries(\n\t\tObject.values(chains).map(chain => {\n\t\t\tconst chainDefinition: ChainDefinition = {\n\t\t\t\tid: parseInt(chain.id),\n\t\t\t\tname: chain.name,\n\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\tisTestnet: chain.isTestnet ?? false,\n\t\t\t\t...(chain.blockExplorers?.[0] && {\n\t\t\t\t\tblockExplorer: {\n\t\t\t\t\t\tname: chain.blockExplorers[0].name,\n\t\t\t\t\t\turl: chain.blockExplorers[0].url,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t};\n\n\t\t\tconst viemChain = createViemChain(chainDefinition);\n\n\t\t\treturn [\n\t\t\t\tchain.name,\n\t\t\t\t{\n\t\t\t\t\tname: chain.name,\n\t\t\t\t\tchainId: parseInt(chain.id),\n\t\t\t\t\ttype: networkType,\n\t\t\t\t\turl: chain.rpcUrls[0] || '',\n\t\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\t\tsaveDeployments: false,\n\t\t\t\t\t...(!trezorDeployEnabled && { accounts: validAccounts }),\n\t\t\t\t\tchainSelector: BigInt(chain.chainSelector),\n\t\t\t\t\tconfirmations: 1,\n\t\t\t\t\tviemChain,\n\t\t\t\t\t...(trezorDeployEnabled && {\n\t\t\t\t\t\ttrezorDerivationPaths: [\n\t\t\t\t\t\t\t[44, 60, 0, 0, 0],\n\t\t\t\t\t\t\t[44, 60, 0, 0, 1],\n\t\t\t\t\t\t],\n\t\t\t\t\t\ttrezorInsecureDerivation: true,\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t];\n\t\t})\n\t) as Record;\n}\n\nexport const testnetNetworks = createExtendedNetworks(\n\ttestnetChains as unknown as Record,\n\tnetworkTypes.testnet,\n\ttestnetAccounts\n);\n\nexport const mainnetNetworks = createExtendedNetworks(\n\tmainnetChains as unknown as Record,\n\tnetworkTypes.mainnet,\n\t[mainnetDeployerPK, mainnetProxyDeployerPK]\n);\n\nexport const conceroNetworks: Record = {\n\t...testnetNetworks,\n\t...mainnetNetworks,\n};\n", "export const config = {\n DEFAULT_BLOCK_CONFIRMATIONS: 2,\n};\n", "import { HardhatRuntimeEnvironment } from 'hardhat/types';\n\nimport { conceroNetworks } from '../constants/conceroNetworks';\nimport { getTrezorDeployEnabled, log } from '../utils';\nimport { extractProxyAdminAddress } from '../utils/extractProxyAdminAddress';\n\nexport interface ITxParams {\n\tgasLimit: bigint;\n}\n\nexport interface IDeployResult {\n\thash: string;\n\taddress: string;\n\tchainType: string;\n\tchainName: string;\n\tproxyAdminAddress: string;\n}\n\nexport interface IGenericDeployParams {\n\thre: HardhatRuntimeEnvironment;\n\tcontractName: string;\n\ttxParams?: Partial;\n}\n\nexport const genericDeploy = async (\n\t{ hre, contractName, txParams }: IGenericDeployParams,\n\t...contractConstructorArgs: any[]\n): Promise => {\n\tconst [deployer] = await hre.ethers.getSigners();\n\tconst chain = conceroNetworks[hre.network.name];\n\n\tlog(\n\t\t`Deploy ${contractName} from address: ${await deployer.getAddress()}`,\n\t\t'contract deploy',\n\t\tchain.name\n\t);\n\n\tconst contractFactory = await hre.ethers.getContractFactory(contractName);\n\n\tconst deployOverrides = txParams?.gasLimit ? { gasLimit: txParams.gasLimit } : {};\n\n\tconst deployTx = contractFactory.getDeployTransaction(\n\t\t...contractConstructorArgs,\n\t\tdeployOverrides\n\t);\n\n\tconst isTrezorDeployEnabled = getTrezorDeployEnabled();\n\tif (deployTx.data && isTrezorDeployEnabled) {\n\t\tlog(\n\t\t\t`${contractName} input data: ${deployTx.data} \\n size: ${(deployTx.data.length - 2) / 2}`,\n\t\t\t'bytecode',\n\t\t\tchain.name\n\t\t);\n\t}\n\n\tconst contract = await contractFactory.deploy(...contractConstructorArgs, deployOverrides);\n\tconst receipt = await contract.deploymentTransaction()?.wait();\n\tconst deploymentAddress = await contract.getAddress();\n\n\tif (hre.tenderly) {\n\t\tawait hre.tenderly.verify({ name: contractName, address: deploymentAddress });\n\t}\n\n\tlog(\n\t\t`Deployed at: ${deploymentAddress}`,\n\t\t`deploy ${contractName}`,\n\t\tchain.name\n\t);\n\n\treturn {\n\t\thash: contract.deploymentTransaction()?.hash,\n\t\taddress: deploymentAddress,\n\t\tchainName: chain.name,\n\t\tchainType: chain.type,\n\t\tproxyAdminAddress: extractProxyAdminAddress(receipt)\n\t};\n};\n", "import {\n\tAddress,\n\terc20Abi,\n\tformatUnits,\n\tHash,\n\tparseUnits,\n\tPublicClient,\n\tWalletClient,\n} from 'viem';\n\nexport class TokenSender {\n\tprivate walletClient: WalletClient;\n\tprivate publicClient: PublicClient;\n\n\tconstructor(walletClient: WalletClient, publicClient: PublicClient) {\n\t\tthis.walletClient = walletClient;\n\t\tthis.publicClient = publicClient;\n\t}\n\n\tpublic async sendToken(\n\t\ttokenAddress: Address,\n\t\tamount: string,\n\t\trecipient: Address\n\t): Promise {\n\t\tconst [tokenDecimals, tokenSymbol, tokenBalance] = await Promise.all([\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'decimals',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'symbol',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'balanceOf',\n\t\t\t\targs: [this.walletClient.account?.address!],\n\t\t\t}),\n\t\t]);\n\n\t\tconsole.log(\n\t\t\t`Current ${tokenSymbol} balance ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t);\n\n\t\tif (parseUnits(amount, tokenDecimals) > tokenBalance) {\n\t\t\tthrow new Error(\n\t\t\t\t`Insufficient balance. Required: ${amount}, available: ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t\t);\n\t\t}\n\n\t\tconst txHash = await this.walletClient.writeContract({\n\t\t\taddress: tokenAddress,\n\t\t\tabi: erc20Abi,\n\t\t\tfunctionName: 'transfer',\n\t\t\targs: [recipient, parseUnits(amount, tokenDecimals)],\n\t\t\tchain: this.walletClient.chain,\n\t\t\taccount: this.walletClient.account!,\n\t\t});\n\n\t\tconst { status } = await this.publicClient.waitForTransactionReceipt({\n\t\t\thash: txHash,\n\t\t});\n\n\t\tif (status !== 'success') {\n\t\t\tthrow new Error(`Error sending token. Hash: ${txHash}`);\n\t\t}\n\n\t\tconsole.log(`Token successfully sent. Hash: ${txHash}`);\n\n\t\treturn txHash;\n\t}\n}\n"], + "mappings": "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", + "names": ["process", "config", "import_viem", "log", "config", "path", "import_viem", "testnetChains", "mainnetChains", "import_viem"] } diff --git a/dist/index.esm.js b/dist/index.esm.js index 16c551c..d9f6320 100644 --- a/dist/index.esm.js +++ b/dist/index.esm.js @@ -1,2266 +1,12 @@ -var __getOwnPropNames = Object.getOwnPropertyNames; -var __esm = (fn, res) => function __init() { - return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; -}; - -// node_modules/viem/_esm/errors/version.js -var version; -var init_version = __esm({ - "node_modules/viem/_esm/errors/version.js"() { - version = "2.24.2"; - } -}); - -// node_modules/viem/_esm/errors/base.js -function walk(err2, fn) { - if (fn?.(err2)) - return err2; - if (err2 && typeof err2 === "object" && "cause" in err2 && err2.cause !== void 0) - return walk(err2.cause, fn); - return fn ? null : err2; -} -var errorConfig, BaseError; -var init_base = __esm({ - "node_modules/viem/_esm/errors/base.js"() { - init_version(); - errorConfig = { - getDocsUrl: ({ docsBaseUrl, docsPath = "", docsSlug }) => docsPath ? `${docsBaseUrl ?? "https://viem.sh"}${docsPath}${docsSlug ? `#${docsSlug}` : ""}` : void 0, - version: `viem@${version}` - }; - BaseError = class _BaseError extends Error { - constructor(shortMessage, args = {}) { - const details = (() => { - if (args.cause instanceof _BaseError) - return args.cause.details; - if (args.cause?.message) - return args.cause.message; - return args.details; - })(); - const docsPath = (() => { - if (args.cause instanceof _BaseError) - return args.cause.docsPath || args.docsPath; - return args.docsPath; - })(); - const docsUrl = errorConfig.getDocsUrl?.({ ...args, docsPath }); - const message = [ - shortMessage || "An error occurred.", - "", - ...args.metaMessages ? [...args.metaMessages, ""] : [], - ...docsUrl ? [`Docs: ${docsUrl}`] : [], - ...details ? [`Details: ${details}`] : [], - ...errorConfig.version ? [`Version: ${errorConfig.version}`] : [] - ].join("\n"); - super(message, args.cause ? { cause: args.cause } : void 0); - Object.defineProperty(this, "details", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "docsPath", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "metaMessages", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "shortMessage", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "version", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - Object.defineProperty(this, "name", { - enumerable: true, - configurable: true, - writable: true, - value: "BaseError" - }); - this.details = details; - this.docsPath = docsPath; - this.metaMessages = args.metaMessages; - this.name = args.name ?? this.name; - this.shortMessage = shortMessage; - this.version = version; - } - walk(fn) { - return walk(this, fn); - } - }; - } -}); - -// node_modules/viem/_esm/utils/unit/formatUnits.js -function formatUnits(value, decimals) { - let display = value.toString(); - const negative = display.startsWith("-"); - if (negative) - display = display.slice(1); - display = display.padStart(decimals, "0"); - let [integer, fraction] = [ - display.slice(0, display.length - decimals), - display.slice(display.length - decimals) - ]; - fraction = fraction.replace(/(0+)$/, ""); - return `${negative ? "-" : ""}${integer || "0"}${fraction ? `.${fraction}` : ""}`; -} -var init_formatUnits = __esm({ - "node_modules/viem/_esm/utils/unit/formatUnits.js"() { - } -}); - -// node_modules/viem/_esm/constants/abis.js -var universalResolverErrors, universalResolverResolveAbi, universalResolverReverseAbi, erc20Abi; -var init_abis = __esm({ - "node_modules/viem/_esm/constants/abis.js"() { - universalResolverErrors = [ - { - inputs: [], - name: "ResolverNotFound", - type: "error" - }, - { - inputs: [], - name: "ResolverWildcardNotSupported", - type: "error" - }, - { - inputs: [], - name: "ResolverNotContract", - type: "error" - }, - { - inputs: [ - { - name: "returnData", - type: "bytes" - } - ], - name: "ResolverError", - type: "error" - }, - { - inputs: [ - { - components: [ - { - name: "status", - type: "uint16" - }, - { - name: "message", - type: "string" - } - ], - name: "errors", - type: "tuple[]" - } - ], - name: "HttpError", - type: "error" - } - ]; - universalResolverResolveAbi = [ - ...universalResolverErrors, - { - name: "resolve", - type: "function", - stateMutability: "view", - inputs: [ - { name: "name", type: "bytes" }, - { name: "data", type: "bytes" } - ], - outputs: [ - { name: "", type: "bytes" }, - { name: "address", type: "address" } - ] - }, - { - name: "resolve", - type: "function", - stateMutability: "view", - inputs: [ - { name: "name", type: "bytes" }, - { name: "data", type: "bytes" }, - { name: "gateways", type: "string[]" } - ], - outputs: [ - { name: "", type: "bytes" }, - { name: "address", type: "address" } - ] - } - ]; - universalResolverReverseAbi = [ - ...universalResolverErrors, - { - name: "reverse", - type: "function", - stateMutability: "view", - inputs: [{ type: "bytes", name: "reverseName" }], - outputs: [ - { type: "string", name: "resolvedName" }, - { type: "address", name: "resolvedAddress" }, - { type: "address", name: "reverseResolver" }, - { type: "address", name: "resolver" } - ] - }, - { - name: "reverse", - type: "function", - stateMutability: "view", - inputs: [ - { type: "bytes", name: "reverseName" }, - { type: "string[]", name: "gateways" } - ], - outputs: [ - { type: "string", name: "resolvedName" }, - { type: "address", name: "resolvedAddress" }, - { type: "address", name: "reverseResolver" }, - { type: "address", name: "resolver" } - ] - } - ]; - erc20Abi = [ - { - type: "event", - name: "Approval", - inputs: [ - { - indexed: true, - name: "owner", - type: "address" - }, - { - indexed: true, - name: "spender", - type: "address" - }, - { - indexed: false, - name: "value", - type: "uint256" - } - ] - }, - { - type: "event", - name: "Transfer", - inputs: [ - { - indexed: true, - name: "from", - type: "address" - }, - { - indexed: true, - name: "to", - type: "address" - }, - { - indexed: false, - name: "value", - type: "uint256" - } - ] - }, - { - type: "function", - name: "allowance", - stateMutability: "view", - inputs: [ - { - name: "owner", - type: "address" - }, - { - name: "spender", - type: "address" - } - ], - outputs: [ - { - type: "uint256" - } - ] - }, - { - type: "function", - name: "approve", - stateMutability: "nonpayable", - inputs: [ - { - name: "spender", - type: "address" - }, - { - name: "amount", - type: "uint256" - } - ], - outputs: [ - { - type: "bool" - } - ] - }, - { - type: "function", - name: "balanceOf", - stateMutability: "view", - inputs: [ - { - name: "account", - type: "address" - } - ], - outputs: [ - { - type: "uint256" - } - ] - }, - { - type: "function", - name: "decimals", - stateMutability: "view", - inputs: [], - outputs: [ - { - type: "uint8" - } - ] - }, - { - type: "function", - name: "name", - stateMutability: "view", - inputs: [], - outputs: [ - { - type: "string" - } - ] - }, - { - type: "function", - name: "symbol", - stateMutability: "view", - inputs: [], - outputs: [ - { - type: "string" - } - ] - }, - { - type: "function", - name: "totalSupply", - stateMutability: "view", - inputs: [], - outputs: [ - { - type: "uint256" - } - ] - }, - { - type: "function", - name: "transfer", - stateMutability: "nonpayable", - inputs: [ - { - name: "recipient", - type: "address" - }, - { - name: "amount", - type: "uint256" - } - ], - outputs: [ - { - type: "bool" - } - ] - }, - { - type: "function", - name: "transferFrom", - stateMutability: "nonpayable", - inputs: [ - { - name: "sender", - type: "address" - }, - { - name: "recipient", - type: "address" - }, - { - name: "amount", - type: "uint256" - } - ], - outputs: [ - { - type: "bool" - } - ] - } - ]; - } -}); - -// src/constants/config.ts -var config = { - DEFAULT_BLOCK_CONFIRMATIONS: 2 -}; - -// src/networks/getNetworkEnvKey.ts -function getNetworkEnvKey(networkName) { - if (!networkName) { - throw new Error("Network name must be provided"); - } - return camelCaseToCapsSnakeCase(networkName); -} -function getNetworkKey(NETWORK_NAME) { - if (!NETWORK_NAME) { - throw new Error("Network name must be provided"); - } - return capsSnakeCaseToCamelCase(NETWORK_NAME); -} -function capsSnakeCaseToCamelCase(snakeCaseString) { - if (!snakeCaseString) { - throw new Error("String must be provided"); - } - return snakeCaseString.toLowerCase().replace(/_([a-z])/g, (_, char) => char.toUpperCase()); -} -function camelCaseToCapsSnakeCase(camelCaseString) { - if (!camelCaseString) { - throw new Error("String must be provided"); - } - return camelCaseString.replace(/([a-z0-9])([A-Z])/g, "$1_$2").toUpperCase(); -} - -// src/networks/networkTypes.ts -var networkTypes = { - mainnet: "mainnet", - testnet: "testnet", - localhost: "localhost" -}; - -// node_modules/@concero/concero-networks/output/chains.mainnet.json -var chains_mainnet_default = { - "1": { - id: "1", - chainSelector: 1, - name: "ethereum", - rpcUrls: [ - "https://cloudflare-eth.com", - "https://eth1.lava.build", - "https://mainnet.gateway.tenderly.co", - "https://eth.drpc.org", - "https://gateway.tenderly.co/public/mainnet", - "https://go.getblock.io/aefd01aa907c4805ba3c00a9e5b48c6b", - "https://0xrpc.io/eth", - "https://eth-mainnet.rpcfast.com?api_key=xbhWBI1Wkguk8SNMu1bvvLurPGLXmgwYeC4S6g2H7WdwFigZSmPWVZRxrskEQwIf", - "https://rpc.eth.gateway.fm", - "https://1rpc.io/eth", - "https://eth-mainnet.public.blastapi.io", - "https://ethereum-rpc.publicnode.com", - "https://rpc.mevblocker.io/fast", - "https://eth.meowrpc.com", - "https://eth.api.pocket.network", - "https://ethereum-public.nodies.app", - "https://rpc.flashbots.net/fast", - "https://ethereum-json-rpc.stakely.io", - "https://eth.llamarpc.com", - "https://eth.rpc.blxrbdn.com", - "https://ethereum.public.blockpi.network/v1/rpc/public", - "https://ethereum-mainnet.gateway.tatum.io", - "https://eth.blockrazor.xyz", - "https://api-ethereum-mainnet-reth.n.dwellir.com/2ccf18bf-2916-4198-8856-42172854353c", - "https://eth.merkle.io", - "https://eth-mainnet.nodereal.io/v1/1659dfb40aa24bbb8153a677b98064d7", - "https://rpc.flashbots.net", - "https://rpc.mevblocker.io/fullprivacy", - "https://rpc.mevblocker.io/noreverts", - "https://rpc.fullsend.to", - "https://eth.api.onfinality.io/public", - "https://public-eth.nownodes.io", - "https://openapi.bitstack.com/v1/wNFxbiJyQsSeLrX8RRCHi7NpRxrlErZk/DjShIqLishPCTB9HiMkPHXjUM9CNM9Na/ETH/mainnet", - "https://core.gashawk.io/rpc", - "https://rpc.mevblocker.io", - "https://ethereum.rpc.subquery.network/public" - ], - nativeCurrency: { - name: "Ethereum", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [ - { - name: "Etherscan", - url: "https://etherscan.io", - apiUrl: "https://api.etherscan.io/api" - } - ], - finalityConfirmations: 75, - minBlockConfirmations: 1, - deployments: {} - }, - "10": { - id: "10", - chainSelector: 10, - name: "optimism", - rpcUrls: [ - "https://optimism.drpc.org", - "https://go.getblock.io/e8a75f8dcf614861becfbcb185be6eb4", - "https://gateway.tenderly.co/public/optimism", - "https://mainnet.optimism.io", - "https://1rpc.io/op", - "https://optimism.gateway.tenderly.co", - "https://api-optimism-mainnet-archive.n.dwellir.com/2ccf18bf-2916-4198-8856-42172854353c", - "https://optimism-rpc.publicnode.com", - "https://optimism-public.nodies.app", - "https://public-op-mainnet.fastnode.io", - "https://optimism-mainnet.gateway.tatum.io", - "https://optimism.api.onfinality.io/public", - "https://optimism.public.blockpi.network/v1/rpc/public", - "https://optimism.rpc.subquery.network/public" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [ - { - name: "Optimism Explorer", - url: "https://optimistic.etherscan.io", - apiUrl: "https://api-optimistic.etherscan.io/api" - } - ], - finalityConfirmations: 50, - minBlockConfirmations: 1, - deployments: {} - }, - "137": { - id: "137", - chainSelector: 137, - name: "polygon", - rpcUrls: [ - "https://polygon.drpc.org", - "https://gateway.tenderly.co/public/polygon", - "https://polygon.lava.build", - "https://go.getblock.io/02667b699f05444ab2c64f9bff28f027", - "https://polygon-mainnet.gateway.tatum.io", - "https://polygon-rpc.com", - "https://1rpc.io/matic", - "https://polygon.meowrpc.com", - "https://polygon-bor-rpc.publicnode.com", - "https://polygon-public.nodies.app", - "https://polygon.gateway.tenderly.co", - "https://rpc-mainnet.matic.quiknode.pro", - "https://polygon-mainnet.rpcfast.com?api_key=xbhWBI1Wkguk8SNMu1bvvLurPGLXmgwYeC4S6g2H7WdwFigZSmPWVZRxrskEQwIf", - "https://polygon.rpc.subquery.network/public", - "https://polygon.api.onfinality.io/public", - "https://poly.api.pocket.network" - ], - nativeCurrency: { - name: "POL", - decimals: 18, - symbol: "POL" - }, - blockExplorers: [ - { - name: "PolygonScan", - url: "https://polygonscan.com", - apiUrl: "https://api.polygonscan.com/api" - } - ], - finalityConfirmations: 128, - minBlockConfirmations: 1, - deployments: {} - }, - "8453": { - id: "8453", - chainSelector: 8453, - name: "base", - rpcUrls: [ - "https://base.drpc.org", - "https://base.lava.build", - "https://mainnet.base.org", - "https://gateway.tenderly.co/public/base", - "https://base.meowrpc.com", - "https://base.gateway.tenderly.co", - "https://developer-access-mainnet.base.org", - "https://1rpc.io/base", - "https://base-rpc.publicnode.com", - "https://base-public.nodies.app", - "https://base.public.blockpi.network/v1/rpc/public", - "https://base-mainnet.public.blastapi.io", - "https://base.api.onfinality.io/public", - "https://base.rpc.blxrbdn.com", - "https://base.api.pocket.network", - "https://base.llamarpc.com", - "https://api-base-mainnet-archive.n.dwellir.com/2ccf18bf-2916-4198-8856-42172854353c", - "https://base.rpc.subquery.network/public" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [ - { - name: "Basescan", - url: "https://basescan.org", - apiUrl: "https://api.basescan.org/api" - } - ], - finalityConfirmations: 50, - minBlockConfirmations: 1, - deployments: {} - }, - "42161": { - id: "42161", - chainSelector: 42161, - name: "arbitrum", - rpcUrls: [ - "https://arbitrum.drpc.org", - "https://api-arbitrum-mainnet-archive.n.dwellir.com/2ccf18bf-2916-4198-8856-42172854353c", - "https://arb1.lava.build", - "https://1rpc.io/arb", - "https://arbitrum-one-rpc.publicnode.com", - "https://arbitrum-one-public.nodies.app", - "https://arbitrum.gateway.tenderly.co", - "https://arbitrum-one.public.blastapi.io", - "https://arbitrum.api.onfinality.io/public", - "https://arbitrum.meowrpc.com", - "https://arbitrum.public.blockpi.network/v1/rpc/public", - "https://arb1.arbitrum.io/rpc", - "https://public-arb-mainnet.fastnode.io", - "https://arbitrum.rpc.subquery.network/public" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [ - { - name: "Arbiscan", - url: "https://arbiscan.io", - apiUrl: "https://api.arbiscan.io/api" - } - ], - finalityConfirmations: 4080, - minBlockConfirmations: 1, - deployments: {} - }, - "43114": { - id: "43114", - chainSelector: 43114, - name: "avalanche", - rpcUrls: [ - "https://api.avax.network/ext/bc/C/rpc", - "https://avalanche-mainnet.gateway.tenderly.co", - "https://avalanche.drpc.org", - "https://avax.api.pocket.network", - "https://avalanche-c-chain-rpc.publicnode.com", - "https://1rpc.io/avax/c", - "https://avalanche-public.nodies.app/ext/bc/C/rpc", - "https://avax.meowrpc.com", - "https://avalanche.api.onfinality.io/public/ext/bc/C/rpc", - "https://spectrum-01.simplystaking.xyz/avalanche-mn-rpc/ext/bc/C/rpc" - ], - nativeCurrency: { - name: "Avalanche", - decimals: 18, - symbol: "AVAX" - }, - blockExplorers: [ - { - name: "SnowTrace", - url: "https://snowtrace.io", - apiUrl: "https://api.snowtrace.io/api" - } - ], - finalityConfirmations: 1, - minBlockConfirmations: 1, - deployments: {} - } -}; - -// node_modules/@concero/concero-networks/output/chains.testnet.json -var chains_testnet_default = { - "81": { - id: "81", - isTestnet: true, - chainSelector: 81, - name: "astarShibuya", - rpcUrls: [ - "https://evm.shibuya.astar.network", - "https://evm.shibuya.astar.network", - "https://shibuya.public.blastapi.io", - "https://shibuya-rpc.dwellir.com" - ], - nativeCurrency: { - name: "Astar", - decimals: 18, - symbol: "ASTR" - }, - blockExplorers: [ - { - name: "Subscan", - url: "https://shibuya.subscan.io", - apiUrl: "https://shibuya.subscan.io/api" - } - ], - finalityConfirmations: 6, - minBlockConfirmations: 1, - deployments: {} - }, - "97": { - id: "97", - isTestnet: true, - chainSelector: 97, - name: "bnbTestnet", - rpcUrls: [ - "https://bsc-testnet.drpc.org", - "https://bsc-testnet-rpc.publicnode.com", - "https://data-seed-prebsc-2-s2.bnbchain.org:8545", - "https://data-seed-prebsc-1-s2.bnbchain.org:8545", - "https://data-seed-prebsc-2-s3.bnbchain.org:8545", - "https://data-seed-prebsc-1-s1.bnbchain.org:8545", - "https://data-seed-prebsc-2-s1.bnbchain.org:8545", - "https://data-seed-prebsc-1-s3.bnbchain.org:8545", - "https://bnb-testnet.api.onfinality.io/public" - ], - nativeCurrency: { - name: "BNB", - decimals: 18, - symbol: "tBNB" - }, - blockExplorers: [ - { - name: "BscScan", - url: "https://testnet.bscscan.com", - apiUrl: "https://api-testnet.bscscan.com/api" - } - ], - finalityConfirmations: 7, - minBlockConfirmations: 1, - deployments: { - router: "0xf6BBdC1fD89E554639D7A683909338802B05F160", - relayerLib: "0x3a4EA7fd0CeA70a4B2Cf72c5AC966225C98eE48d", - validatorLib: "0xAEBaacfa9CaC6B8486Ae77843728c863c909E7d0" - } - }, - "133": { - id: "133", - isTestnet: true, - chainSelector: 133, - name: "hashkeyTestnet", - rpcUrls: [], - nativeCurrency: { - name: "HashKey EcoPoints", - decimals: 18, - symbol: "HSK" - }, - blockExplorers: [ - { - name: "Hashkey Explorer", - url: "https://testnet.hashkeyscan.io", - apiUrl: "https://testnet.hashkeyscan.io/api" - } - ], - finalityConfirmations: 1800, - minBlockConfirmations: 1, - deployments: {} - }, - "157": { - id: "157", - isTestnet: true, - chainSelector: 157, - name: "shibariumPuppynet", - rpcUrls: [ - "https://puppynet.shibrpc.com" - ], - nativeCurrency: { - name: "Bone", - decimals: 18, - symbol: "BONE" - }, - blockExplorers: [ - { - name: "Puppyscan", - url: "https://puppyscan.shib.io", - apiUrl: "https://puppyscan.shib.io/api" - } - ], - finalityConfirmations: 60, - minBlockConfirmations: 1, - deployments: { - router: "0xea73Bc856EdD980912Fb8FE4CFC7bba52D980F6A", - relayerLib: "0x9900a9E38E8695eE9109962b9f4671cF977c265a", - validatorLib: "0x39f311124745064935cB196AeE2a950cbbC11336" - } - }, - "195": { - id: "195", - isTestnet: true, - chainSelector: 195, - name: "xlayerSepolia", - rpcUrls: [], - nativeCurrency: { - name: "OKB", - decimals: 18, - symbol: "OKB" - }, - blockExplorers: [ - { - name: "X Layer Explorer", - url: "https://testnet-explorer.xlayer.tech", - apiUrl: "https://testnet-explorer.xlayer.tech/api" - } - ], - finalityConfirmations: 3600, - minBlockConfirmations: 1, - deployments: {} - }, - "296": { - id: "296", - isTestnet: true, - chainSelector: 296, - name: "hederaTestnet", - rpcUrls: [ - "https://testnet.hashio.io/api", - "https://296.rpc.thirdweb.com" - ], - nativeCurrency: { - name: "HBAR", - decimals: 18, - symbol: "HBAR" - }, - blockExplorers: [], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: {} - }, - "300": { - id: "300", - isTestnet: true, - chainSelector: 300, - name: "zksyncSepolia", - rpcUrls: [ - "https://zksync-sepolia.drpc.org", - "https://rpc.ankr.com/zksync_era_sepolia", - "https://sepolia.era.zksync.dev" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [], - finalityConfirmations: 1200, - minBlockConfirmations: 1, - deployments: { - router: "0xBd5EC2962802123f6D8d0092dC485C98e23D1394", - relayerLib: "0x06942a1E6A73069a58306d9E154051b85b32D071", - validatorLib: "0xe277f7afA46291d4c729a184D51D78ae598d54b1" - } - }, - "338": { - id: "338", - isTestnet: true, - chainSelector: 338, - name: "cronosTestnet", - rpcUrls: [ - "https://cro-testnet.gateway.tatum.io", - "https://cronos-testnet.drpc.org", - "https://evm-t3.cronos.org" - ], - nativeCurrency: { - name: "CRO", - decimals: 18, - symbol: "tCRO" - }, - blockExplorers: [ - { - name: "Cronos Explorer", - url: "https://testnet.cronoscan.com", - apiUrl: "https://api-testnet.cronoscan.com/api" - } - ], - finalityConfirmations: 2, - minBlockConfirmations: 1, - deployments: {} - }, - "545": { - id: "545", - isTestnet: true, - chainSelector: 545, - name: "flowTestnet", - rpcUrls: [ - "https://testnet.evm.nodes.onflow.org" - ], - nativeCurrency: { - name: "Flow", - decimals: 18, - symbol: "FLOW" - }, - blockExplorers: [], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: { - router: "0xf6BBdC1fD89E554639D7A683909338802B05F160", - relayerLib: "0x3a4EA7fd0CeA70a4B2Cf72c5AC966225C98eE48d", - validatorLib: "0xAEBaacfa9CaC6B8486Ae77843728c863c909E7d0" - } - }, - "919": { - id: "919", - isTestnet: true, - chainSelector: 919, - name: "modeTestnet", - rpcUrls: [ - "https://mode-testnet.drpc.org", - "https://sepolia.mode.network" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [ - { - name: "Mode Explorer", - url: "https://sepolia.explorer.mode.network", - apiUrl: "https://sepolia.explorer.mode.network/api" - } - ], - finalityConfirmations: 1110, - minBlockConfirmations: 1, - deployments: {} - }, - "943": { - id: "943", - isTestnet: true, - chainSelector: 943, - name: "pulsechainTestnet", - rpcUrls: [ - "https://pulsechain-testnet-rpc.publicnode.com", - "https://rpc-testnet-pulsechain.g4mm4.io", - "https://rpc.v4.testnet.pulsechain.com" - ], - nativeCurrency: { - name: "V4 Pulse", - decimals: 18, - symbol: "v4PLS" - }, - blockExplorers: [], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: { - router: "0xea73Bc856EdD980912Fb8FE4CFC7bba52D980F6A", - relayerLib: "0x9900a9E38E8695eE9109962b9f4671cF977c265a", - validatorLib: "0x39f311124745064935cB196AeE2a950cbbC11336" - } - }, - "1001": { - id: "1001", - isTestnet: true, - chainSelector: 1001, - name: "kaiaKairos", - rpcUrls: [ - "https://klaytn-baobab.drpc.org", - "https://kaia-kairos.blockpi.network/v1/rpc/public", - "https://rpc.ankr.com/kaia_testnet", - "https://public-en-kairos.node.kaia.io" - ], - nativeCurrency: { - name: "KAIA", - decimals: 18, - symbol: "KAIA" - }, - blockExplorers: [], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: {} - }, - "1112": { - id: "1112", - isTestnet: true, - chainSelector: 1112, - name: "wemixTestnet", - rpcUrls: [ - "https://wemix-testnet.drpc.org", - "https://api.test.wemix.com" - ], - nativeCurrency: { - name: "WEMIX", - decimals: 18, - symbol: "tWEMIX" - }, - blockExplorers: [], - finalityConfirmations: 2, - minBlockConfirmations: 1, - deployments: {} - }, - "1114": { - id: "1114", - isTestnet: true, - chainSelector: 1114, - name: "coreTestnet", - rpcUrls: [ - "https://rpc.test2.btcs.network" - ], - nativeCurrency: { - name: "tCORE2", - decimals: 18, - symbol: "tCORE2" - }, - blockExplorers: [ - { - name: "CoreScan", - url: "https://scan.test.btcs.network", - apiUrl: "https://scan.test.btcs.network/api" - } - ], - finalityConfirmations: 7, - minBlockConfirmations: 1, - deployments: { - router: "0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5", - relayerLib: "0x54B8d67AA64CF8A59F604cA6e98c643C64920b03", - validatorLib: "0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a" - } - }, - "1123": { - id: "1123", - isTestnet: true, - finalityTagEnabled: true, - chainSelector: 1123, - name: "b2Testnet", - rpcUrls: [ - "https://rpc.ankr.com/b2_testnet" - ], - nativeCurrency: { - name: "Bitcoin", - decimals: 18, - symbol: "BTC" - }, - blockExplorers: [], - minBlockConfirmations: 1, - deployments: {} - }, - "1174": { - id: "1174", - isTestnet: true, - chainSelector: 1174, - name: "litheumTestnet", - rpcUrls: [ - "https://testnet.litheum.com" - ], - nativeCurrency: { - name: "LTH", - decimals: 18, - symbol: "LTH" - }, - blockExplorers: [], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: {} - }, - "1270": { - id: "1270", - isTestnet: true, - chainSelector: 1270, - name: "irysTestnet", - rpcUrls: [ - "https://testnet-rpc.irys.xyz/v1/execution-rpc", - "testnet-rpc.irys.xyz" - ], - nativeCurrency: { - name: "mIRYS", - decimals: 18, - symbol: "mIRYS" - }, - blockExplorers: [], - finalityConfirmations: 6, - minBlockConfirmations: 1, - deployments: {} - }, - "1301": { - id: "1301", - isTestnet: true, - chainSelector: 1301, - name: "unichainSepolia", - rpcUrls: [ - "https://unichain-sepolia.drpc.org", - "https://unichain-sepolia-rpc.publicnode.com", - "https://unichain-sepolia.api.onfinality.io/public", - "https://sepolia.unichain.org" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [ - { - name: "Unichain Explorer", - url: "https://sepolia-explorer.unichain.network", - apiUrl: "https://sepolia-explorer.unichain.network/api" - } - ], - finalityConfirmations: 1440, - minBlockConfirmations: 1, - deployments: { - router: "0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5", - relayerLib: "0x54B8d67AA64CF8A59F604cA6e98c643C64920b03", - validatorLib: "0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a" - } - }, - "1328": { - id: "1328", - isTestnet: true, - chainSelector: 1328, - name: "seiTestnet", - rpcUrls: [ - "https://sei-testnet.drpc.org", - "https://sei-testnet-public.nodies.app", - "https://evm-rpc-testnet.sei-apis.com" - ], - nativeCurrency: { - name: "Sei", - decimals: 18, - symbol: "SEI" - }, - blockExplorers: [ - { - name: "Sei Explorer", - url: "https://seitrace.com", - apiUrl: "https://seitrace.com/api" - } - ], - finalityConfirmations: 3, - minBlockConfirmations: 1, - deployments: { - router: "0x122947C8c3529DCa006aeE65832D3C3fED6bf3C0", - relayerLib: "0xe965dEBDfa6365CFb9e643ccdCBADE424a2eC381", - validatorLib: "0xB708D151D18e5aB3506934B39375D00EE1e0C882" - } - }, - "1946": { - id: "1946", - isTestnet: true, - chainSelector: 1946, - name: "soneiumMinato", - rpcUrls: [ - "https://soneium-minato.drpc.org", - "https://rpc.minato.soneium.org" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [ - { - name: "Soneium Explorer", - url: "https://minato-explorer.soneium.com", - apiUrl: "https://minato-explorer.soneium.com/api" - } - ], - finalityConfirmations: 810, - minBlockConfirmations: 1, - deployments: {} - }, - "2021": { - id: "2021", - isTestnet: true, - chainSelector: 2021, - name: "roninSaigon", - rpcUrls: [ - "https://saigon-testnet.roninchain.com/rpc", - "https://saigon-testnet.roninchain.com/rpc" - ], - nativeCurrency: { - name: "RON", - decimals: 18, - symbol: "RON" - }, - blockExplorers: [ - { - name: "Ronin Explorer", - url: "https://saigon-explorer.roninchain.com", - apiUrl: "https://saigon-explorer.roninchain.com/api" - } - ], - finalityConfirmations: 4, - minBlockConfirmations: 1, - deployments: { - router: "0xea73Bc856EdD980912Fb8FE4CFC7bba52D980F6A", - relayerLib: "0x9900a9E38E8695eE9109962b9f4671cF977c265a", - validatorLib: "0x39f311124745064935cB196AeE2a950cbbC11336" - } - }, - "2221": { - id: "2221", - isTestnet: true, - chainSelector: 2221, - name: "kavaTestnet", - rpcUrls: [ - "https://kava-testnet.drpc.org", - "https://evm.testnet.kava.io" - ], - nativeCurrency: { - name: "Kava", - decimals: 18, - symbol: "KAVA" - }, - blockExplorers: [], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: {} - }, - "2522": { - id: "2522", - isTestnet: true, - chainSelector: 2522, - name: "fraxtalHolesky", - rpcUrls: [], - nativeCurrency: { - name: "FRAX", - decimals: 18, - symbol: "FRAX" - }, - blockExplorers: [], - finalityConfirmations: 900, - minBlockConfirmations: 1, - deployments: {} - }, - "2810": { - id: "2810", - isTestnet: true, - chainSelector: 2810, - name: "morphHolesky", - rpcUrls: [], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: {} - }, - "3636": { - id: "3636", - isTestnet: true, - chainSelector: 3636, - name: "botanixTestnet", - rpcUrls: [ - "https://rpc.ankr.com/botanix_testnet", - "https://node.botanixlabs.dev" - ], - nativeCurrency: { - name: "Botanix", - decimals: 18, - symbol: "BTC" - }, - blockExplorers: [ - { - name: "Botanix Explorer", - url: "https://testnet-explorer.botanixlabs.xyz", - apiUrl: "https://testnet-explorer.botanixlabs.xyz/api" - } - ], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: {} - }, - "4801": { - id: "4801", - isTestnet: true, - chainSelector: 4801, - name: "worldchainTestnet", - rpcUrls: [ - "https://worldchain-sepolia.drpc.org", - "https://worldchain-sepolia.g.alchemy.com/public", - "https://worldchain-sepolia.gateway.tenderly.co", - "https://4801.rpc.thirdweb.com" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [], - finalityConfirmations: 1200, - minBlockConfirmations: 1, - deployments: { - router: "0xea73Bc856EdD980912Fb8FE4CFC7bba52D980F6A", - relayerLib: "0x9900a9E38E8695eE9109962b9f4671cF977c265a", - validatorLib: "0x39f311124745064935cB196AeE2a950cbbC11336" - } - }, - "5003": { - id: "5003", - isTestnet: true, - chainSelector: 5003, - name: "mantleSepolia", - rpcUrls: [ - "https://mantle-sepolia.drpc.org", - "https://rpc.sepolia.mantle.xyz" - ], - nativeCurrency: { - name: "MNT", - decimals: 18, - symbol: "MNT" - }, - blockExplorers: [ - { - name: "Mantle Explorer", - url: "https://explorer.sepolia.mantle.xyz", - apiUrl: "https://explorer.sepolia.mantle.xyz/api" - } - ], - finalityConfirmations: 840, - minBlockConfirmations: 1, - deployments: {} - }, - "5124": { - id: "5124", - isTestnet: true, - chainSelector: 5124, - name: "seismicDevnet", - rpcUrls: [ - "https://node-2.seismicdev.net/rpc" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: {} - }, - "5611": { - id: "5611", - isTestnet: true, - chainSelector: 5611, - name: "opbnbTestnet", - rpcUrls: [ - "https://opbnb-testnet.drpc.org", - "https://opbnb-testnet-rpc.publicnode.com", - "https://opbnb-testnet-rpc.bnbchain.org", - "https://opbnb-testnet.nodereal.io/v1/e9a36765eb8a40b9bd12e680a1fd2bc5", - "https://opbnb-testnet.nodereal.io/v1/64a9df0874fb4a93b9d0a3849de012d3" - ], - nativeCurrency: { - name: "tBNB", - decimals: 18, - symbol: "tBNB" - }, - blockExplorers: [], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: {} - }, - "6342": { - id: "6342", - isTestnet: true, - chainSelector: 6342, - name: "megaethTestnet", - rpcUrls: [], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [ - { - name: "MegaEth Explorer", - url: "https://explorer-testnet.megaeth.io", - apiUrl: "https://explorer-testnet.megaeth.io/api" - } - ], - finalityConfirmations: 900, - minBlockConfirmations: 1, - deployments: {} - }, - "8408": { - id: "8408", - isTestnet: true, - chainSelector: 8408, - name: "zenchainTestnet", - rpcUrls: [ - "https://zenchain-testnet.api.onfinality.io/public" - ], - nativeCurrency: { - name: "ZTC", - decimals: 18, - symbol: "ZTC" - }, - blockExplorers: [], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: {} - }, - "10143": { - id: "10143", - isTestnet: true, - chainSelector: 10143, - name: "monadTestnet", - rpcUrls: [ - "https://monad-testnet.drpc.org", - "https://rpc.ankr.com/monad_testnet", - "https://testnet-rpc.monad.xyz", - "https://rpc-testnet.monadinfra.com", - "https://monad-testnet.api.onfinality.io/public" - ], - nativeCurrency: { - name: "Testnet MON Token", - decimals: 18, - symbol: "MON" - }, - blockExplorers: [ - { - name: "Monad Explorer", - url: "https://explorer.testnet.monad.xyz", - apiUrl: "https://explorer.testnet.monad.xyz/api" - } - ], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: { - router: "0x3E2Ee768D9fADdd3673a69ED4d0D1d9147FA1054", - relayerLib: "0x9900a9E38E8695eE9109962b9f4671cF977c265a", - validatorLib: "0x39f311124745064935cB196AeE2a950cbbC11336" - } - }, - "10200": { - id: "10200", - isTestnet: true, - chainSelector: 10200, - name: "gnosisChiado", - rpcUrls: [ - "https://gnosis-chiado.drpc.org", - "https://rpc.chiadochain.net", - "https://gnosis-chiado-rpc.publicnode.com", - "https://rpc.chiado.gnosis.gateway.fm" - ], - nativeCurrency: { - name: "Gnosis", - decimals: 18, - symbol: "xDAI" - }, - blockExplorers: [ - { - name: "Blockscout", - url: "https://gnosis-chiado.blockscout.com", - apiUrl: "https://gnosis-chiado.blockscout.com/api" - } - ], - finalityConfirmations: 35, - minBlockConfirmations: 1, - deployments: { - router: "0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5", - relayerLib: "0x54B8d67AA64CF8A59F604cA6e98c643C64920b03", - validatorLib: "0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a" - } - }, - "11124": { - id: "11124", - isTestnet: true, - finalityTagEnabled: true, - chainSelector: 11124, - name: "abstractSepolia", - rpcUrls: [ - "https://abstract-sepolia.drpc.org", - "https://api.testnet.abs.xyz" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [], - minBlockConfirmations: 1, - deployments: {} - }, - "18880": { - id: "18880", - isTestnet: true, - chainSelector: 18880, - name: "expchainTestnet", - rpcUrls: [ - "https://rpc1-testnet.expchain.ai", - "https://expchain.polyhedra.network/rpc1-testnet", - "https://expchain.polyhedra.network/rpc0-testnet", - "https://expchain.polyhedra.network/rpc0-testnet", - "https://expchain.polyhedra.network/rpc1-testnet" - ], - nativeCurrency: { - name: "tZKJ", - decimals: 18, - symbol: "tZKJ" - }, - blockExplorers: [], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: {} - }, - "23295": { - id: "23295", - isTestnet: true, - chainSelector: 23295, - name: "oasissapphireTestnet", - rpcUrls: [ - "https://testnet.sapphire.oasis.io" - ], - nativeCurrency: { - name: "Sapphire Test Rose", - decimals: 18, - symbol: "TEST" - }, - blockExplorers: [], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: { - router: "0xcc9D0438ac3b90fB8291f4f3C1c420E215f36585", - relayerLib: "0x8510C780097cA53aeF8e3527a5107C4629b21f0C", - validatorLib: "0xb31EED4695De3eCE4381a40fA638d9a63904882b" - } - }, - "33111": { - id: "33111", - isTestnet: true, - finalityTagEnabled: true, - chainSelector: 33111, - name: "apechainCurtis", - rpcUrls: [ - "https://apechain-curtis.drpc.org", - "https://curtis.rpc.caldera.xyz/http", - "https://rpc.curtis.apechain.com" - ], - nativeCurrency: { - name: "APE", - decimals: 18, - symbol: "APE" - }, - blockExplorers: [ - { - name: "Apechain Explorer", - url: "https://curtis-explorer.apechain.io", - apiUrl: "https://curtis-explorer.apechain.io/api" - } - ], - minBlockConfirmations: 1, - deployments: {} - }, - "37111": { - id: "37111", - isTestnet: true, - chainSelector: 37111, - name: "lensSepolia", - rpcUrls: [ - "https://rpc.testnet.lens.dev", - "https://lens-testnet.drpc.org" - ], - nativeCurrency: { - name: "GRASS", - decimals: 18, - symbol: "GRASS" - }, - blockExplorers: [], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: {} - }, - "43113": { - id: "43113", - isTestnet: true, - finalityTagEnabled: true, - chainSelector: 43113, - name: "avalancheFuji", - rpcUrls: [ - "https://api.avax-test.network/ext/bc/C/rpc", - "https://avalanche-fuji.drpc.org", - "https://avalanche-fuji-c-chain-rpc.publicnode.com" - ], - nativeCurrency: { - name: "Avalanche Fuji", - decimals: 18, - symbol: "AVAX" - }, - blockExplorers: [ - { - name: "Snowtrace", - url: "https://testnet.snowtrace.io", - apiUrl: "https://api-testnet.snowtrace.io/api" - } - ], - minBlockConfirmations: 1, - deployments: { - router: "0xe965dEBDfa6365CFb9e643ccdCBADE424a2eC381", - relayerLib: "0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a", - validatorLib: "0x246892c38a2314c30E56490ADf1bcf3470DCAE6A" - } - }, - "44787": { - id: "44787", - isTestnet: true, - chainSelector: 44787, - name: "celoAlfajores", - rpcUrls: [], - nativeCurrency: { - name: "CELO", - decimals: 18, - symbol: "A-CELO" - }, - blockExplorers: [ - { - name: "Celoscan", - url: "https://alfajores.celoscan.io", - apiUrl: "https://api-alfajores.celoscan.io/api" - } - ], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: {} - }, - "48899": { - id: "48899", - isTestnet: true, - chainSelector: 48899, - name: "zircuitTestnet", - rpcUrls: [ - "https://testnet.zircuit.com", - "https://zircuit1-testnet.p2pify.com" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [ - { - name: "Zircuit Explorer", - url: "https://explorer.zircuit.com", - apiUrl: "https://explorer.zircuit.com/api" - } - ], - finalityConfirmations: 630, - minBlockConfirmations: 1, - deployments: {} - }, - "57054": { - id: "57054", - isTestnet: true, - chainSelector: 57054, - name: "sonicBlaze", - rpcUrls: [ - "https://sonic-testnet.drpc.org", - "https://sonic-blaze-rpc.publicnode.com", - "https://rpc.blaze.soniclabs.com" - ], - nativeCurrency: { - name: "S", - decimals: 18, - symbol: "S" - }, - blockExplorers: [ - { - name: "Sonic Explorer", - url: "https://explorer-testnet.sonic.guru", - apiUrl: "https://explorer-testnet.sonic.guru/api" - } - ], - finalityConfirmations: 10, - minBlockConfirmations: 1, - deployments: { - router: "0xAEBaacfa9CaC6B8486Ae77843728c863c909E7d0", - relayerLib: "0x13187bb1d2f100F84770a848A1374bf745Ea4cF6", - validatorLib: "0x90D7e742746Abf405036aA21981C835F3E842DA4" - } - }, - "59141": { - id: "59141", - isTestnet: true, - chainSelector: 59141, - name: "lineaSepolia", - rpcUrls: [ - "https://linea-sepolia.drpc.org", - "https://linea-sepolia-rpc.publicnode.com", - "https://rpc.sepolia.linea.build" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [ - { - name: "Linea Explorer", - url: "https://sepolia.lineascan.build", - apiUrl: "https://api-sepolia.lineascan.build/api" - } - ], - finalityConfirmations: 600, - minBlockConfirmations: 1, - deployments: {} - }, - "59902": { - id: "59902", - isTestnet: true, - chainSelector: 59902, - name: "metisSepolia", - rpcUrls: [ - "https://metis-sepolia.gateway.tenderly.co", - "https://metis-sepolia-rpc.publicnode.com", - "https://sepolia.metisdevops.link" - ], - nativeCurrency: { - name: "tMETIS", - decimals: 18, - symbol: "tMETIS" - }, - blockExplorers: [], - finalityConfirmations: 360, - minBlockConfirmations: 1, - deployments: {} - }, - "80002": { - id: "80002", - isTestnet: true, - chainSelector: 80002, - name: "polygonAmoy", - rpcUrls: [ - "https://rpc-amoy.polygon.technology", - "https://polygon-amoy.gateway.tenderly.co", - "https://polygon-amoy.drpc.org", - "https://polygon-amoy-public.nodies.app", - "https://polygon-amoy-bor-rpc.publicnode.com", - "https://polygon-amoy.api.onfinality.io/public" - ], - nativeCurrency: { - name: "POL", - decimals: 18, - symbol: "POL" - }, - blockExplorers: [ - { - name: "PolygonScan", - url: "https://amoy.polygonscan.com", - apiUrl: "https://api-amoy.polygonscan.com/api" - } - ], - finalityConfirmations: 500, - minBlockConfirmations: 1, - deployments: { - router: "0x6FF322BC8da39bC87A056d4052aa763f7BDeE836", - relayerLib: "0x81365cc081dF5fdF6cbD47a34fF4acBcA2B35F0d", - validatorLib: "0x99542DdB261186F818974e579e4aBF3BFb44819e" - } - }, - "80069": { - id: "80069", - isTestnet: true, - chainSelector: 80069, - name: "berachainBepolia", - rpcUrls: [ - "https://bepolia.rpc.berachain.com" - ], - nativeCurrency: { - name: "BERA Token", - decimals: 18, - symbol: "BERA" - }, - blockExplorers: [], - finalityConfirmations: 1, - minBlockConfirmations: 1, - deployments: { - router: "0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5", - relayerLib: "0x54B8d67AA64CF8A59F604cA6e98c643C64920b03", - validatorLib: "0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a" - } - }, - "84532": { - id: "84532", - isTestnet: true, - finalityTagEnabled: true, - chainSelector: 84532, - name: "baseSepolia", - rpcUrls: [ - "https://base-sepolia.gateway.tenderly.co", - "https://sepolia.base.org", - "https://base-sepolia.drpc.org", - "https://base-sepolia-rpc.publicnode.com", - "https://base-sepolia-public.nodies.app", - "https://base-sepolia.api.onfinality.io/public" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [ - { - name: "BaseScan", - url: "https://sepolia.basescan.org", - apiUrl: "https://api-sepolia.basescan.org/api" - }, - { - name: "Blockscout", - url: "https://base-sepolia.blockscout.com", - apiUrl: "https://base-sepolia.blockscout.com/api" - } - ], - minBlockConfirmations: 1, - deployments: { - router: "0xE3d861a49bc5903499fB5Bb411B83d980422c31B", - relayerLib: "0x429E6875Ba6A13cc015e9Eba594e8b42936244C4", - validatorLib: "0x67BE79Df5A37d2a89384D32C2A066d2a7354eD2B" - } - }, - "167009": { - id: "167009", - isTestnet: true, - chainSelector: 167009, - name: "taikoTestnet", - rpcUrls: [], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [], - finalityConfirmations: 20, - minBlockConfirmations: 1, - deployments: {} - }, - "200810": { - id: "200810", - isTestnet: true, - chainSelector: 200810, - name: "bitlayerTestnet", - rpcUrls: [ - "https://rpc.ankr.com/bitlayer_testnet", - "https://testnet-rpc.bitlayer.org", - "https://testnet-rpc.bitlayer-rpc.com" - ], - nativeCurrency: { - name: "Bitcoin", - decimals: 18, - symbol: "BTC" - }, - blockExplorers: [ - { - name: "Bitlayer Explorer", - url: "https://testnet-explorer.bitlayer.org", - apiUrl: "https://testnet-explorer.bitlayer.org/api" - } - ], - finalityConfirmations: 21, - minBlockConfirmations: 1, - deployments: {} - }, - "344100": { - id: "3441006", - isTestnet: true, - chainSelector: 344100, - name: "mantapacificSepolia", - rpcUrls: [ - "https://manta-pacific-sepolia.drpc.org", - "https://manta-sepolia.rpc.caldera.xyz/http", - "https://pacific-rpc.sepolia-testnet.manta.network/http" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: {} - }, - "421614": { - id: "421614", - isTestnet: true, - finalityTagEnabled: true, - chainSelector: 421614, - name: "arbitrumSepolia", - rpcUrls: [ - "https://arbitrum-sepolia.gateway.tenderly.co", - "https://arbitrum-sepolia.drpc.org", - "https://arbitrum-sepolia-testnet.api.pocket.network", - "https://arbitrum-sepolia-rpc.publicnode.com", - "https://sepolia-rollup.arbitrum.io/rpc", - "https://arbitrum-sepolia.api.onfinality.io/public" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [ - { - name: "Arbiscan", - url: "https://sepolia.arbiscan.io", - apiUrl: "https://api-sepolia.arbiscan.io/api" - } - ], - minBlockConfirmations: 1, - deployments: { - router: "0x6c99cC0FCC985fF175787BD2565AfD15781C99d0", - relayerLib: "0x622b5FeBf5Fd44Ab2E7636398F2621FC4E956304", - validatorLib: "0x7F445E3DE6B46cD36887B9f136DBe13298517C1F" - } - }, - "534351": { - id: "534351", - isTestnet: true, - chainSelector: 534351, - name: "scrollSepolia", - rpcUrls: [ - "https://scroll-sepolia.drpc.org", - "https://scroll-sepolia-rpc.publicnode.com", - "https://sepolia-rpc.scroll.io", - "https://scroll-sepolia-public.nodies.app" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [ - { - name: "Scrollscan", - url: "https://sepolia.scrollscan.com", - apiUrl: "https://api-sepolia.scrollscan.com/api" - } - ], - finalityConfirmations: 720, - minBlockConfirmations: 1, - deployments: { - router: "0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5", - relayerLib: "0x54B8d67AA64CF8A59F604cA6e98c643C64920b03", - validatorLib: "0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a" - } - }, - "688689": { - id: "688689", - isTestnet: true, - chainSelector: 688689, - name: "pharosTestnet", - rpcUrls: [ - "https://atlantic.dplabs-internal.com" - ], - nativeCurrency: { - name: "PHRS", - decimals: 18, - symbol: "PHRS" - }, - blockExplorers: [], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: {} - }, - "763373": { - id: "763373", - isTestnet: true, - chainSelector: 763373, - name: "inkSepolia", - rpcUrls: [ - "https://rpc-gel-sepolia.inkonchain.com", - "https://ink-sepolia.drpc.org" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [ - { - name: "Ink Explorer", - url: "https://sepolia.inkscan.io", - apiUrl: "https://sepolia.inkscan.io/api" - } - ], - finalityConfirmations: 3600, - minBlockConfirmations: 1, - deployments: {} - }, - "808813": { - id: "808813", - isTestnet: true, - chainSelector: 808813, - name: "bobSepolia", - rpcUrls: [ - "https://bob-testnet.drpc.org", - "https://bob-sepolia.rpc.gobob.xyz" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [], - finalityConfirmations: 3600, - minBlockConfirmations: 1, - deployments: {} - }, - "1000101": { - id: "1000101", - isTestnet: true, - chainSelector: 1000101, - name: "xomarketTestnet", - rpcUrls: [ - "https://dev-testnet-rpc.xo.market", - "https://testnet-rpc-1.xo.market" - ], - nativeCurrency: { - name: "XO", - decimals: 18, - symbol: "XO" - }, - blockExplorers: [], - finalityConfirmations: 2, - minBlockConfirmations: 1, - deployments: {} - }, - "1234200": { - id: "123420001114", - isTestnet: true, - chainSelector: 1234200, - name: "campv2Testnet", - rpcUrls: [ - "https://rpc.basecamp.t.raas.gelato.cloud" - ], - nativeCurrency: { - name: "Camp", - decimals: 18, - symbol: "CAMP" - }, - blockExplorers: [], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: {} - }, - "1313161": { - id: "1313161555", - isTestnet: true, - finalityTagEnabled: true, - chainSelector: 1313161, - name: "auroraTestnet", - rpcUrls: [ - "https://aurora-testnet.drpc.org", - "https://testnet.aurora.dev" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [], - minBlockConfirmations: 1, - deployments: {} - }, - "1685877": { - id: "168587773", - isTestnet: true, - chainSelector: 1685877, - name: "blastSepolia", - rpcUrls: [ - "https://blast-sepolia.drpc.org", - "https://blast-testnet-public.nodies.app", - "https://sepolia.blast.io" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [ - { - name: "Blastscan", - url: "https://sepolia.blastscan.io", - apiUrl: "https://api-sepolia.blastscan.io/api" - } - ], - finalityConfirmations: 600, - minBlockConfirmations: 1, - deployments: {} - }, - "11155111": { - id: "11155111", - isTestnet: true, - finalityTagEnabled: true, - chainSelector: 11155111, - name: "ethereumSepolia", - rpcUrls: [ - "https://gateway.tenderly.co/public/sepolia", - "https://sepolia.gateway.tenderly.co", - "https://sepolia.drpc.org", - "https://1rpc.io/sepolia", - "https://ethereum-sepolia-public.nodies.app", - "https://0xrpc.io/sep", - "https://ethereum-sepolia-rpc.publicnode.com", - "https://eth-sepolia.api.onfinality.io/public", - "https://eth-sepolia-testnet.api.pocket.network", - "https://ethereum-sepolia.rpc.subquery.network/public" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [ - { - name: "Etherscan", - url: "https://sepolia.etherscan.io", - apiUrl: "https://api-sepolia.etherscan.io/api" - } - ], - minBlockConfirmations: 1, - deployments: { - router: "0x3E0aAA63fFb51169B9aE9b7Dc3616b43362124D6", - relayerLib: "0x8338A0B9c83C0d7E67C267432DF4C8b7cA98e11C", - validatorLib: "0x1A808aa4F1E874763E114AB4fD170460D84A8D54" - } - }, - "11155420": { - id: "11155420", - isTestnet: true, - chainSelector: 11155420, - name: "optimismSepolia", - rpcUrls: [ - "https://sepolia.optimism.io", - "https://optimism-sepolia.gateway.tenderly.co", - "https://optimism-sepolia.drpc.org", - "https://optimism-sepolia-public.nodies.app", - "https://optimism-sepolia.api.onfinality.io/public" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [ - { - name: "Optimism Explorer", - url: "https://sepolia-optimism.etherscan.io", - apiUrl: "https://api-sepolia-optimism.etherscan.io/api" - } - ], - finalityConfirmations: 600, - minBlockConfirmations: 1, - deployments: { - router: "0x25c2037546Bf5B525DfAfe85A662DB519c07bDdB", - relayerLib: "0x6E0b96885Ab0A58e82f2D1ce4df29AF6F5a40089", - validatorLib: "0x0C12fAdDb045bB71C256E36662D56b4b22f1bD58" - } - }, - "11155931": { - id: "11155931", - isTestnet: true, - chainSelector: 11155931, - name: "riseTestnet", - rpcUrls: [ - "https://testnet.riselabs.xyz" - ], - nativeCurrency: { - name: "ETH", - decimals: 18, - symbol: "ETH" - }, - blockExplorers: [], - finalityConfirmations: 0, - minBlockConfirmations: 1, - deployments: {} - } -}; - -// node_modules/viem/_esm/utils/chain/defineChain.js -function defineChain(chain) { - return { - formatters: void 0, - fees: void 0, - serializers: void 0, - ...chain - }; -} - -// node_modules/viem/_esm/errors/unit.js -init_base(); -var InvalidDecimalNumberError = class extends BaseError { - constructor({ value }) { - super(`Number \`${value}\` is not a valid decimal number.`, { - name: "InvalidDecimalNumberError" - }); - } +// src/types/networkTypes.ts +var networkTypes = { + mainnet: "mainnet", + testnet: "testnet", + localhost: "localhost" }; -// node_modules/viem/_esm/utils/unit/parseUnits.js -function parseUnits(value, decimals) { - if (!/^(-?)([0-9]*)\.?([0-9]*)$/.test(value)) - throw new InvalidDecimalNumberError({ value }); - let [integer, fraction = "0"] = value.split("."); - const negative = integer.startsWith("-"); - if (negative) - integer = integer.slice(1); - fraction = fraction.replace(/(0+)$/, ""); - if (decimals === 0) { - if (Math.round(Number(`.${fraction}`)) === 1) - integer = `${BigInt(integer) + 1n}`; - fraction = ""; - } else if (fraction.length > decimals) { - const [left, unit, right] = [ - fraction.slice(0, decimals - 1), - fraction.slice(decimals - 1, decimals), - fraction.slice(decimals) - ]; - const rounded = Math.round(Number(`${unit}.${right}`)); - if (rounded > 9) - fraction = `${BigInt(left) + BigInt(1)}0`.padStart(left.length + 1, "0"); - else - fraction = `${left}${rounded}`; - if (fraction.length > decimals) { - fraction = fraction.slice(1); - integer = `${BigInt(integer) + 1n}`; - } - fraction = fraction.slice(0, decimals); - } else { - fraction = fraction.padEnd(decimals, "0"); - } - return BigInt(`${negative ? "-" : ""}${integer}${fraction}`); -} - -// node_modules/viem/_esm/index.js -init_abis(); -init_formatUnits(); - // src/utils/createViemChain.ts +import { defineChain } from "viem"; function createViemChain(chainDefinition) { return defineChain({ id: chainDefinition.id, @@ -2287,6 +33,34 @@ function createViemChain(chainDefinition) { import process2 from "process"; // src/utils/log.ts +var networkColors = { + ethereum: "\x1B[30m", + // grey + arbitrum: "\x1B[34m", + // blue + polygon: "\x1B[35m", + // magenta + avalanche: "\x1B[31m", + // red + base: "\x1B[36m", + // cyan + ethereumSepolia: "\x1B[30m", + // grey + arbitrumSepolia: "\x1B[34m", + // blue + optimismSepolia: "\x1B[31m", + // red + polygonAmoy: "\x1B[35m", + // magenta + avalancheFuji: "\x1B[31m", + // red + baseSepolia: "\x1B[36m", + // cyan + hardhat: "\x1B[32m", + // green + localhost: "\x1B[32m" + // green +}; var reset = "\x1B[0m"; function log(message, functionName, networkName) { const greenFill = "\x1B[32m"; @@ -2297,20 +71,72 @@ function warn(message, functionName) { const yellowFill = "\x1B[33m"; console.log(`${yellowFill}[${functionName}]${reset}`, message); } +function err(message, functionName, networkName) { + const redFill = "\x1B[31m"; + const network = networkName ? `${networkColors[networkName]}[${networkName}]${reset}` : ""; + console.log( + `${network}${redFill}[${functionName}] ERROR:${reset}`, + message + ); +} var log_default = log; +// src/utils/formatting.ts +function shorten(address) { + return `${address.slice(0, 6)}...${address.slice(-4)}`; +} +function formatGas(gasAmountWei) { + return gasAmountWei.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); +} + +// src/networks/getNetworkEnvKey.ts +function getNetworkEnvKey(networkName) { + if (!networkName) { + throw new Error("Network name must be provided"); + } + return camelCaseToCapsSnakeCase(networkName); +} +function getNetworkKey(NETWORK_NAME) { + if (!NETWORK_NAME) { + throw new Error("Network name must be provided"); + } + return capsSnakeCaseToCamelCase(NETWORK_NAME); +} +function capsSnakeCaseToCamelCase(snakeCaseString) { + if (!snakeCaseString) { + throw new Error("String must be provided"); + } + return snakeCaseString.toLowerCase().replace(/_([a-z])/g, (_, char) => char.toUpperCase()); +} +function camelCaseToCapsSnakeCase(camelCaseString) { + if (!camelCaseString) { + throw new Error("String must be provided"); + } + return camelCaseString.replace(/([a-z0-9])([A-Z])/g, "$1_$2").toUpperCase(); +} + // src/utils/getEnvVar.ts -function getEnvVar(key) { +function getEnvVar(key, defaultValue) { const value = process2.env[key]; if (value === void 0 || value === "") { + if (defaultValue !== void 0) return defaultValue; warn(`Missing env variable: ${key}`, "getEnvVar"); - return void 0; + return ""; } return value; } +function createEnvAddressGetter(config2) { + function getEnvAddress(prefix, networkName) { + const searchKey = networkName ? `${config2.prefixes[prefix]}_${getNetworkEnvKey(networkName)}` : config2.prefixes[prefix]; + const value = getEnvVar(searchKey); + const friendlyName = `${String(prefix)}(${shorten(value)})`; + return [value, friendlyName]; + } + return { getEnvAddress }; +} // src/utils/getTrezorDeployEnabled.ts -var getTrezorDeployEnabled = () => getEnvVar("TREZOR_DEPLOY_ENABLED") === "true"; +var getTrezorDeployEnabled = () => getEnvVar("TREZOR_DEPLOY_ENABLED", "false") === "true"; // src/utils/getWallet.ts function getWallet(chainType, accountType, walletType) { @@ -2326,9 +152,6 @@ function getWallet(chainType, accountType, walletType) { case "operator": prefix = "OPERATOR"; break; - case "priceFeedProxyDeployer": - prefix = "PRICE_FEED_PROXY_DEPLOYER"; - break; default: throw new Error(`Unknown account type: ${accountType}`); } @@ -2350,57 +173,161 @@ function getWallet(chainType, accountType, walletType) { return walletValue; } -// src/utils/updateEnvVariable.ts -import { readFileSync, writeFileSync } from "fs"; -import path from "path"; - -// src/constants/deploymentVariables.ts -var envPrefixes = { - router: "CONCERO_ROUTER", - routerProxy: "CONCERO_ROUTER_PROXY", - routerProxyAdmin: "CONCERO_ROUTER_PROXY_ADMIN", - verifier: "CONCERO_VERIFIER", - verifierProxy: "CONCERO_VERIFIER_PROXY", - verifierProxyAdmin: "CONCERO_VERIFIER_PROXY_ADMIN", - priceFeed: "CONCERO_PRICE_FEED", - priceFeedProxy: "CONCERO_PRICE_FEED_PROXY", - priceFeedProxyAdmin: "CONCERO_PRICE_FEED_PROXY_ADMIN", - lpToken: "LPTOKEN", - pause: "CONCERO_PAUSE", - creValidatorLibProxy: "CONCERO_CRE_VALIDATOR_LIB_PROXY", - creValidatorLibProxyAdmin: "CONCERO_CRE_VALIDATOR_LIB_PROXY_ADMIN", - creValidatorLib: "CONCERO_CRE_VALIDATOR_LIB", - relayerLib: "CONCERO_RELAYER_LIB", - relayerLibProxy: "CONCERO_RELAYER_LIB_PROXY", - relayerLibProxyAdmin: "CONCERO_RELAYER_LIB_PROXY_ADMIN" +// src/utils/ethersSignerCallContract.ts +var ethersSignerCallContract = async (hre, contract, abi, functionName, ...functionArgs) => { + const [ethersSigner] = await hre.ethers.getSigners(); + const ethersContract = new hre.ethers.Contract(contract, abi, ethersSigner); + const unsignedTx = await ethersContract[functionName].populateTransaction(...functionArgs); + log( + `Size: ${(unsignedTx.data.length - 2) / 2}, Input data: ${unsignedTx.data}, Address: ${unsignedTx.to}`, + functionName, + hre.network.name + ); + return (await ethersSigner.sendTransaction(unsignedTx)).hash; }; -// src/utils/updateEnvVariable.ts -function updateEnvVariable(key, newValue, envFileName) { - const filePath = path.join(__dirname, `../.env.${envFileName}`); - if (!filePath) throw new Error(`File not found: ${filePath}`); - const envContents = readFileSync(filePath, "utf8"); - let lines = envContents.split(/\r?\n/); - if (!lines.some((line) => line.startsWith(`${key}=`))) { - log_default(`Key ${key} not found in .env file. Adding to ${filePath}`, "updateEnvVariable"); - lines.push(`${key}=${newValue}`); +// src/utils/compileContracts.ts +import { execSync } from "child_process"; +function compileContracts({ quiet = true, force = false }) { + const packageManager = process.env["PACKAGE_MANAGER"] || "yarn"; + const command = `${packageManager} compile`; + const args = []; + if (quiet) args.push("--quiet"); + if (force) args.push("--force"); + execSync(`${command} ${args.join(" ")}`, { stdio: "inherit" }); +} + +// src/utils/localhostViemChain.ts +import { defineChain as defineChain2 } from "viem"; +var localhostViemChain = defineChain2({ + id: Number(process.env.LOCALHOST_FORK_CHAIN_ID), + name: "localhost", + nativeCurrency: { + decimals: 18, + name: "eth", + symbol: "eth" + }, + rpcUrls: { + default: { http: [process.env.LOCALHOST_RPC_URL ?? "http://127.0.0.1:8545"] } + }, + testnet: true +}); +var hardhatViemChain = defineChain2({ + id: Number(process.env.HARDHAT_CHAIN_ID), + name: "hardhat", + nativeCurrency: { + decimals: 18, + name: "eth", + symbol: "eth" + }, + rpcUrls: { + default: { http: [process.env.HARDHAT_RPC_URL ?? "http://127.0.0.1:8545"] } + }, + testnet: true +}); + +// src/utils/extractProxyAdminAddress.ts +import { ethers } from "ethers"; +function extractProxyAdminAddress(receipt) { + if (!receipt) return ethers.ZeroAddress; + const adminChangedTopic = ethers.id("AdminChanged(address,address)"); + const adminChangedLog = receipt.logs.find((log2) => log2.topics[0] === adminChangedTopic); + if (!adminChangedLog) return ethers.ZeroAddress; + try { + const abiCoder = ethers.AbiCoder.defaultAbiCoder(); + const [, newAdmin] = abiCoder.decode(["address", "address"], adminChangedLog.data); + return newAdmin; + } catch { + return ethers.ZeroAddress; } - const newLines = lines.map((line) => { - let [currentKey, currentValue] = line.split("="); - if (currentKey === key) { - return `${key}=${newValue}`; +} + +// src/utils/createEnvUpdater.ts +import { existsSync, readFileSync, writeFileSync } from "fs"; +import path from "path"; +function createEnvUpdater(config2) { + function updateEnvVariable(key, newValue, envFileName) { + const filePath = path.join(config2.basePath, `.env.${envFileName}`); + if (!existsSync(filePath)) { + throw new Error(`File not found: ${filePath}`); } - return line; - }); - writeFileSync(filePath, newLines.join("\n")); - process.env[key] = newValue; + const envContents = readFileSync(filePath, "utf8"); + let lines = envContents.split(/\r?\n/); + const keyExists = lines.some((line) => line.startsWith(`${key}=`)); + if (!keyExists) { + log_default( + `Key ${key} not found in .env file. Adding to ${filePath}`, + "updateEnvVariable" + ); + lines.push(`${key}=${newValue}`); + } else { + lines = lines.map((line) => { + const [currentKey] = line.split("="); + if (currentKey === key) { + return `${key}=${newValue}`; + } + return line; + }); + } + writeFileSync(filePath, lines.join("\n")); + process.env[key] = newValue; + } + function updateEnvAddress(prefix, newValue, envFileName, networkPostfix) { + const searchKey = networkPostfix ? `${config2.prefixes[prefix]}_${getNetworkEnvKey(networkPostfix)}` : String(config2.prefixes[prefix]); + updateEnvVariable(searchKey, newValue, envFileName); + } + return { updateEnvVariable, updateEnvAddress }; } -function updateEnvAddress(prefix, newValue, envFileName, networkPostfix) { - const searchKey = networkPostfix ? `${envPrefixes[prefix]}_${getNetworkEnvKey(networkPostfix)}` : envPrefixes[prefix]; - updateEnvVariable(searchKey, newValue, envFileName); + +// src/utils/getActualGasData.ts +async function getActualGasData(publicClient) { + const block = await publicClient.getBlock(); + const isEIP1559 = !!block.baseFeePerGas; + let gasPrice = 0n; + let maxPriorityFeePerGas = 0n; + try { + if (isEIP1559) { + const { maxFeePerGas } = await publicClient.estimateFeesPerGas(); + gasPrice = maxFeePerGas; + maxPriorityFeePerGas = await publicClient.estimateMaxPriorityFeePerGas(); + } else { + gasPrice = await publicClient.getGasPrice(); + } + } catch (error) { + console.error("Error getting actual gas data:", error); + return { + gasPrice: "0", + maxFeePerGas: "0", + maxPriorityFeePerGas: "0" + }; + } + const gasDataLegacy = { + gasPrice: gasPrice.toString() + }; + const gasDataEIP1559 = { + maxFeePerGas: gasPrice.toString(), + maxPriorityFeePerGas: maxPriorityFeePerGas.toString() + }; + const gasData = isEIP1559 ? gasDataEIP1559 : gasDataLegacy; + return gasData; } +// src/utils/getViemClients.ts +import { + createPublicClient, + createTestClient, + createWalletClient, + fallback, + http, + publicActions, + walletActions, + nonceManager +} from "viem"; +import { privateKeyToAccount } from "viem/accounts"; + // src/constants/conceroNetworks.ts +import mainnetChains from "@concero/concero-networks/output/chains.mainnet.json"; +import testnetChains from "@concero/concero-networks/output/chains.testnet.json"; var mainnetProxyDeployerPK = getWallet( "mainnet", "proxyDeployer", @@ -2415,11 +342,6 @@ var mainnetDeployerPK = getWallet("mainnet", "deployer", "privateKey"); var testnetDeployerPK = getWallet("testnet", "deployer", "privateKey"); var trezorDeployEnabled = getTrezorDeployEnabled(); var testnetAccounts = [testnetDeployerPK, testnetProxyDeployerPK]; -var networkTypes2 = { - mainnet: "mainnet", - testnet: "testnet", - localhost: "localhost" -}; function createExtendedNetworks(chains, networkType, accounts) { const validAccounts = accounts.filter((acc) => !!acc); return Object.fromEntries( @@ -2463,13 +385,13 @@ function createExtendedNetworks(chains, networkType, accounts) { ); } var testnetNetworks = createExtendedNetworks( - chains_testnet_default, - networkTypes2.testnet, + testnetChains, + networkTypes.testnet, testnetAccounts ); var mainnetNetworks = createExtendedNetworks( - chains_mainnet_default, - networkTypes2.mainnet, + mainnetChains, + networkTypes.mainnet, [mainnetDeployerPK, mainnetProxyDeployerPK] ); var conceroNetworks = { @@ -2477,8 +399,77 @@ var conceroNetworks = { ...mainnetNetworks }; +// src/utils/getViemClients.ts +function getClients(viemChain, url, account = privateKeyToAccount( + `0x${process.env.TESTNET_DEPLOYER_PRIVATE_KEY}` +)) { + const publicClient = createPublicClient({ transport: http(url), chain: viemChain }); + const walletClient = createWalletClient({ transport: http(url), chain: viemChain, account }); + return { walletClient, publicClient, account }; +} +function getTestClient(account) { + const testClient = createTestClient({ + chain: localhostViemChain, + mode: "hardhat", + transport: http(), + account + }).extend(publicActions).extend(walletActions); + return testClient; +} +function getFallbackClients(chain, account) { + if (!account) { + switch (chain.type) { + case "mainnet": + account = privateKeyToAccount(`0x${process.env.MAINNET_DEPLOYER_PRIVATE_KEY}`); + break; + case "testnet": + account = privateKeyToAccount(`0x${process.env.TESTNET_DEPLOYER_PRIVATE_KEY}`, { + nonceManager + }); + break; + case "localhost": + account = privateKeyToAccount(`0x${process.env.LOCALHOST_DEPLOYER_PRIVATE_KEY}`); + break; + default: + throw new Error(`Unsupported chain type: ${chain.type}`); + } + } + const { viemChain, name } = chain; + if (!conceroNetworks[name].rpcUrls.length) { + throw new Error(`No URLs configured for chain: ${name}`); + } + const transport = fallback( + conceroNetworks[name].rpcUrls.map( + (url) => http(url, { + timeout: 1e4, + retryCount: 1, + retryDelay: 250, + onFetchResponse: async (response) => { + if (response.status >= 400) { + throw new Error(`HTTP error: ${response.status} ${response.statusText}`); + } + } + }) + ) + ); + const publicClient = createPublicClient({ transport, chain: viemChain }); + const walletClient = createWalletClient({ transport, chain: viemChain, account }); + return { walletClient, publicClient, account }; +} +function getViemAccount(chainType, accountType) { + const privateKey = `0x${getWallet(chainType, accountType, "privateKey")}`; + return privateKeyToAccount(privateKey, { + nonceManager + }); +} + +// src/constants/config.ts +var config = { + DEFAULT_BLOCK_CONFIRMATIONS: 2 +}; + // src/deploy/GenericDeploy.ts -var genericDeploy = async ({ hre, contractName, contractPrefix, txParams }, ...contractConstructorArgs) => { +var genericDeploy = async ({ hre, contractName, txParams }, ...contractConstructorArgs) => { const [deployer] = await hre.ethers.getSigners(); const chain = conceroNetworks[hre.network.name]; log( @@ -2502,7 +493,7 @@ var genericDeploy = async ({ hre, contractName, contractPrefix, txParams }, ...c ); } const contract = await contractFactory.deploy(...contractConstructorArgs, deployOverrides); - await contract.deploymentTransaction()?.wait(); + const receipt = await contract.deploymentTransaction()?.wait(); const deploymentAddress = await contract.getAddress(); if (hre.tenderly) { await hre.tenderly.verify({ name: contractName, address: deploymentAddress }); @@ -2512,16 +503,21 @@ var genericDeploy = async ({ hre, contractName, contractPrefix, txParams }, ...c `deploy ${contractName}`, chain.name ); - updateEnvAddress( - contractPrefix, - deploymentAddress, - `deployments.${chain.type}`, - chain.name - ); - return contract.deploymentTransaction()?.hash; + return { + hash: contract.deploymentTransaction()?.hash, + address: deploymentAddress, + chainName: chain.name, + chainType: chain.type, + proxyAdminAddress: extractProxyAdminAddress(receipt) + }; }; // src/tokens/TokenSender.ts +import { + erc20Abi, + formatUnits, + parseUnits +} from "viem"; var TokenSender = class { walletClient; publicClient; @@ -2576,106 +572,35 @@ var TokenSender = class { return txHash; } }; - -// src/deploy/getActualGasData.ts -async function getActualGasData(publicClient) { - const block = await publicClient.getBlock(); - const isEIP1559 = !!block.baseFeePerGas; - let gasPrice = 0n; - let maxPriorityFeePerGas = 0n; - try { - if (isEIP1559) { - const { maxFeePerGas } = await publicClient.estimateFeesPerGas(); - gasPrice = maxFeePerGas; - maxPriorityFeePerGas = await publicClient.estimateMaxPriorityFeePerGas(); - } else { - gasPrice = await publicClient.getGasPrice(); - } - } catch (error) { - console.error("Error getting actual gas data:", error); - return { - gasPrice: "0", - maxFeePerGas: "0", - maxPriorityFeePerGas: "0" - }; - } - const gasDataLegacy = { - gasPrice: gasPrice.toString() - }; - const gasDataEIP1559 = { - maxFeePerGas: gasPrice.toString(), - maxPriorityFeePerGas: maxPriorityFeePerGas.toString() - }; - const gasData = isEIP1559 ? gasDataEIP1559 : gasDataLegacy; - return gasData; -} - -// src/deploy/hardhatDeployWrapper.ts -async function hardhatDeployWrapper(contractName, { - hre, - args, - publicClient, - proxy = false, - gasLimit, - log: log2 = false, - libraries, - skipIfAlreadyDeployed = false -}) { - let actualDeployer; - if (proxy) { - const { proxyDeployer } = await hre.getNamedAccounts(); - actualDeployer = proxyDeployer; - } else { - const { deployer } = await hre.getNamedAccounts(); - actualDeployer = deployer; - } - const { deploy } = hre.deployments; - const nonce = await publicClient.getTransactionCount({ - address: actualDeployer - }); - const gasData = await getActualGasData(publicClient); - const waitConfirmations = hre.network.name.startsWith("ethereum") ? 1 : 3; - if (log2) { - console.log( - `\x1B[34m[hardhatDeployWrapper]\x1B[0m\x1B[35m[args]\x1B[0m`, - { - from: actualDeployer, - args, - nonce, - gasLimit: gasLimit ? gasLimit : "auto", - gasData, - waitConfirmations - } - ); - } - let deployment; - try { - console.log("Starting deployment of:", contractName); - deployment = await deploy(contractName, { - from: actualDeployer, - args, - log: true, - autoMine: true, - nonce, - waitConfirmations, - ...gasLimit ? { gasLimit } : {}, - ...gasData, - ...libraries ? { libraries } : {}, - skipIfAlreadyDeployed - }); - } catch (error) { - console.error("Error deploying contract:", error); - throw error; - } - return deployment; -} export { TokenSender, + compileContracts, + conceroNetworks, config, + createEnvAddressGetter, + createEnvUpdater, + createViemChain, + err, + ethersSignerCallContract, + extractProxyAdminAddress, + formatGas, genericDeploy, + getActualGasData, + getClients, + getEnvVar, + getFallbackClients, getNetworkEnvKey, getNetworkKey, - hardhatDeployWrapper, - networkTypes + getTestClient, + getTrezorDeployEnabled, + getViemAccount, + getWallet, + localhostViemChain, + log, + mainnetNetworks, + networkTypes, + shorten, + testnetNetworks, + warn }; //# sourceMappingURL=index.esm.js.map diff --git a/dist/index.esm.js.map b/dist/index.esm.js.map index e7ee8a1..289d082 100644 --- a/dist/index.esm.js.map +++ b/dist/index.esm.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../node_modules/viem/errors/version.ts", "../node_modules/viem/errors/base.ts", "../node_modules/viem/utils/unit/formatUnits.ts", "../node_modules/viem/constants/abis.ts", "../src/constants/config.ts", "../src/networks/getNetworkEnvKey.ts", "../src/networks/networkTypes.ts", "../node_modules/@concero/concero-networks/output/chains.mainnet.json", "../node_modules/@concero/concero-networks/output/chains.testnet.json", "../node_modules/viem/utils/chain/defineChain.ts", "../node_modules/viem/errors/unit.ts", "../node_modules/viem/utils/unit/parseUnits.ts", "../node_modules/viem/index.ts", "../src/utils/createViemChain.ts", "../src/utils/getEnvVar.ts", "../src/utils/log.ts", "../src/utils/getTrezorDeployEnabled.ts", "../src/utils/getWallet.ts", "../src/utils/updateEnvVariable.ts", "../src/constants/deploymentVariables.ts", "../src/constants/conceroNetworks.ts", "../src/deploy/GenericDeploy.ts", "../src/tokens/TokenSender.ts", "../src/deploy/getActualGasData.ts", "../src/deploy/hardhatDeployWrapper.ts"], - "sourcesContent": ["export const version = '2.24.2'\n", "import { version } from './version.js'\n\ntype ErrorConfig = {\n getDocsUrl?: ((args: BaseErrorParameters) => string | undefined) | undefined\n version?: string | undefined\n}\n\nlet errorConfig: ErrorConfig = {\n getDocsUrl: ({\n docsBaseUrl,\n docsPath = '',\n docsSlug,\n }: BaseErrorParameters) =>\n docsPath\n ? `${docsBaseUrl ?? 'https://viem.sh'}${docsPath}${\n docsSlug ? `#${docsSlug}` : ''\n }`\n : undefined,\n version: `viem@${version}`,\n}\n\nexport function setErrorConfig(config: ErrorConfig) {\n errorConfig = config\n}\n\ntype BaseErrorParameters = {\n cause?: BaseError | Error | undefined\n details?: string | undefined\n docsBaseUrl?: string | undefined\n docsPath?: string | undefined\n docsSlug?: string | undefined\n metaMessages?: string[] | undefined\n name?: string | undefined\n}\n\nexport type BaseErrorType = BaseError & { name: 'BaseError' }\nexport class BaseError extends Error {\n details: string\n docsPath?: string | undefined\n metaMessages?: string[] | undefined\n shortMessage: string\n version: string\n\n override name = 'BaseError'\n\n constructor(shortMessage: string, args: BaseErrorParameters = {}) {\n const details = (() => {\n if (args.cause instanceof BaseError) return args.cause.details\n if (args.cause?.message) return args.cause.message\n return args.details!\n })()\n const docsPath = (() => {\n if (args.cause instanceof BaseError)\n return args.cause.docsPath || args.docsPath\n return args.docsPath\n })()\n const docsUrl = errorConfig.getDocsUrl?.({ ...args, docsPath })\n\n const message = [\n shortMessage || 'An error occurred.',\n '',\n ...(args.metaMessages ? [...args.metaMessages, ''] : []),\n ...(docsUrl ? [`Docs: ${docsUrl}`] : []),\n ...(details ? [`Details: ${details}`] : []),\n ...(errorConfig.version ? [`Version: ${errorConfig.version}`] : []),\n ].join('\\n')\n\n super(message, args.cause ? { cause: args.cause } : undefined)\n\n this.details = details\n this.docsPath = docsPath\n this.metaMessages = args.metaMessages\n this.name = args.name ?? this.name\n this.shortMessage = shortMessage\n this.version = version\n }\n\n walk(): Error\n walk(fn: (err: unknown) => boolean): Error | null\n walk(fn?: any): any {\n return walk(this, fn)\n }\n}\n\nfunction walk(\n err: unknown,\n fn?: ((err: unknown) => boolean) | undefined,\n): unknown {\n if (fn?.(err)) return err\n if (\n err &&\n typeof err === 'object' &&\n 'cause' in err &&\n err.cause !== undefined\n )\n return walk(err.cause, fn)\n return fn ? null : err\n}\n", "import type { ErrorType } from '../../errors/utils.js'\n\nexport type FormatUnitsErrorType = ErrorType\n\n/**\n * Divides a number by a given exponent of base 10 (10exponent), and formats it into a string representation of the number..\n *\n * - Docs: https://viem.sh/docs/utilities/formatUnits\n *\n * @example\n * import { formatUnits } from 'viem'\n *\n * formatUnits(420000000000n, 9)\n * // '420'\n */\nexport function formatUnits(value: bigint, decimals: number) {\n let display = value.toString()\n\n const negative = display.startsWith('-')\n if (negative) display = display.slice(1)\n\n display = display.padStart(decimals, '0')\n\n let [integer, fraction] = [\n display.slice(0, display.length - decimals),\n display.slice(display.length - decimals),\n ]\n fraction = fraction.replace(/(0+)$/, '')\n return `${negative ? '-' : ''}${integer || '0'}${\n fraction ? `.${fraction}` : ''\n }`\n}\n", "/* [Multicall3](https://github.com/mds1/multicall) */\nexport const multicall3Abi = [\n {\n inputs: [\n {\n components: [\n {\n name: 'target',\n type: 'address',\n },\n {\n name: 'allowFailure',\n type: 'bool',\n },\n {\n name: 'callData',\n type: 'bytes',\n },\n ],\n name: 'calls',\n type: 'tuple[]',\n },\n ],\n name: 'aggregate3',\n outputs: [\n {\n components: [\n {\n name: 'success',\n type: 'bool',\n },\n {\n name: 'returnData',\n type: 'bytes',\n },\n ],\n name: 'returnData',\n type: 'tuple[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n] as const\n\nconst universalResolverErrors = [\n {\n inputs: [],\n name: 'ResolverNotFound',\n type: 'error',\n },\n {\n inputs: [],\n name: 'ResolverWildcardNotSupported',\n type: 'error',\n },\n {\n inputs: [],\n name: 'ResolverNotContract',\n type: 'error',\n },\n {\n inputs: [\n {\n name: 'returnData',\n type: 'bytes',\n },\n ],\n name: 'ResolverError',\n type: 'error',\n },\n {\n inputs: [\n {\n components: [\n {\n name: 'status',\n type: 'uint16',\n },\n {\n name: 'message',\n type: 'string',\n },\n ],\n name: 'errors',\n type: 'tuple[]',\n },\n ],\n name: 'HttpError',\n type: 'error',\n },\n] as const\n\nexport const universalResolverResolveAbi = [\n ...universalResolverErrors,\n {\n name: 'resolve',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'name', type: 'bytes' },\n { name: 'data', type: 'bytes' },\n ],\n outputs: [\n { name: '', type: 'bytes' },\n { name: 'address', type: 'address' },\n ],\n },\n {\n name: 'resolve',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'name', type: 'bytes' },\n { name: 'data', type: 'bytes' },\n { name: 'gateways', type: 'string[]' },\n ],\n outputs: [\n { name: '', type: 'bytes' },\n { name: 'address', type: 'address' },\n ],\n },\n] as const\n\nexport const universalResolverReverseAbi = [\n ...universalResolverErrors,\n {\n name: 'reverse',\n type: 'function',\n stateMutability: 'view',\n inputs: [{ type: 'bytes', name: 'reverseName' }],\n outputs: [\n { type: 'string', name: 'resolvedName' },\n { type: 'address', name: 'resolvedAddress' },\n { type: 'address', name: 'reverseResolver' },\n { type: 'address', name: 'resolver' },\n ],\n },\n {\n name: 'reverse',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { type: 'bytes', name: 'reverseName' },\n { type: 'string[]', name: 'gateways' },\n ],\n outputs: [\n { type: 'string', name: 'resolvedName' },\n { type: 'address', name: 'resolvedAddress' },\n { type: 'address', name: 'reverseResolver' },\n { type: 'address', name: 'resolver' },\n ],\n },\n] as const\n\nexport const textResolverAbi = [\n {\n name: 'text',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'name', type: 'bytes32' },\n { name: 'key', type: 'string' },\n ],\n outputs: [{ name: '', type: 'string' }],\n },\n] as const\n\nexport const addressResolverAbi = [\n {\n name: 'addr',\n type: 'function',\n stateMutability: 'view',\n inputs: [{ name: 'name', type: 'bytes32' }],\n outputs: [{ name: '', type: 'address' }],\n },\n {\n name: 'addr',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'name', type: 'bytes32' },\n { name: 'coinType', type: 'uint256' },\n ],\n outputs: [{ name: '', type: 'bytes' }],\n },\n] as const\n\n// ERC-1271\n// isValidSignature(bytes32 hash, bytes signature) \u2192 bytes4 magicValue\n/** @internal */\nexport const smartAccountAbi = [\n {\n name: 'isValidSignature',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'hash', type: 'bytes32' },\n { name: 'signature', type: 'bytes' },\n ],\n outputs: [{ name: '', type: 'bytes4' }],\n },\n] as const\n\n// ERC-6492 - universal deployless signature validator contract\n// constructor(address _signer, bytes32 _hash, bytes _signature) \u2192 bytes4 returnValue\n// returnValue is either 0x1 (valid) or 0x0 (invalid)\nexport const universalSignatureValidatorAbi = [\n {\n inputs: [\n {\n name: '_signer',\n type: 'address',\n },\n {\n name: '_hash',\n type: 'bytes32',\n },\n {\n name: '_signature',\n type: 'bytes',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'constructor',\n },\n {\n inputs: [\n {\n name: '_signer',\n type: 'address',\n },\n {\n name: '_hash',\n type: 'bytes32',\n },\n {\n name: '_signature',\n type: 'bytes',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n name: 'isValidSig',\n },\n] as const\n\n/** [ERC-20 Token Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-20) */\nexport const erc20Abi = [\n {\n type: 'event',\n name: 'Approval',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'event',\n name: 'Transfer',\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'allowance',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'spender',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'approve',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'balanceOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'decimals',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint8',\n },\n ],\n },\n {\n type: 'function',\n name: 'name',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'symbol',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'totalSupply',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'transfer',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'transferFrom',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'sender',\n type: 'address',\n },\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n] as const\n\n/**\n * [bytes32-flavored ERC-20](https://docs.makerdao.com/smart-contract-modules/mkr-module#4.-gotchas-potential-source-of-user-error)\n * for tokens (ie. Maker) that use bytes32 instead of string.\n */\nexport const erc20Abi_bytes32 = [\n {\n type: 'event',\n name: 'Approval',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'event',\n name: 'Transfer',\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'allowance',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'spender',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'approve',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'balanceOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'decimals',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint8',\n },\n ],\n },\n {\n type: 'function',\n name: 'name',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'bytes32',\n },\n ],\n },\n {\n type: 'function',\n name: 'symbol',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'bytes32',\n },\n ],\n },\n {\n type: 'function',\n name: 'totalSupply',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'transfer',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'transferFrom',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'sender',\n type: 'address',\n },\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n] as const\n\n/** [ERC-721 Non-Fungible Token Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-721) */\nexport const erc721Abi = [\n {\n type: 'event',\n name: 'Approval',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: true,\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'event',\n name: 'ApprovalForAll',\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'operator',\n type: 'address',\n },\n {\n indexed: false,\n name: 'approved',\n type: 'bool',\n },\n ],\n },\n {\n type: 'event',\n name: 'Transfer',\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: true,\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'approve',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'balanceOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'getApproved',\n stateMutability: 'view',\n inputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'address',\n },\n ],\n },\n {\n type: 'function',\n name: 'isApprovedForAll',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'operator',\n type: 'address',\n },\n ],\n outputs: [\n {\n type: 'bool',\n },\n ],\n },\n {\n type: 'function',\n name: 'name',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'ownerOf',\n stateMutability: 'view',\n inputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n name: 'owner',\n type: 'address',\n },\n ],\n },\n {\n type: 'function',\n name: 'safeTransferFrom',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'from',\n type: 'address',\n },\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'safeTransferFrom',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'from',\n type: 'address',\n },\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'id',\n type: 'uint256',\n },\n {\n name: 'data',\n type: 'bytes',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'setApprovalForAll',\n stateMutability: 'nonpayable',\n inputs: [\n {\n name: 'operator',\n type: 'address',\n },\n {\n name: 'approved',\n type: 'bool',\n },\n ],\n outputs: [],\n },\n {\n type: 'function',\n name: 'symbol',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'tokenByIndex',\n stateMutability: 'view',\n inputs: [\n {\n name: 'index',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'tokenByIndex',\n stateMutability: 'view',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'index',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'tokenURI',\n stateMutability: 'view',\n inputs: [\n {\n name: 'tokenId',\n type: 'uint256',\n },\n ],\n outputs: [\n {\n type: 'string',\n },\n ],\n },\n {\n type: 'function',\n name: 'totalSupply',\n stateMutability: 'view',\n inputs: [],\n outputs: [\n {\n type: 'uint256',\n },\n ],\n },\n {\n type: 'function',\n name: 'transferFrom',\n stateMutability: 'payable',\n inputs: [\n {\n name: 'sender',\n type: 'address',\n },\n {\n name: 'recipient',\n type: 'address',\n },\n {\n name: 'tokeId',\n type: 'uint256',\n },\n ],\n outputs: [],\n },\n] as const\n\n/** [ERC-4626 Tokenized Vaults Standard](https://ethereum.org/en/developers/docs/standards/tokens/erc-4626) */\nexport const erc4626Abi = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'Approval',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'sender',\n type: 'address',\n },\n {\n indexed: true,\n name: 'receiver',\n type: 'address',\n },\n {\n indexed: false,\n name: 'assets',\n type: 'uint256',\n },\n {\n indexed: false,\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'Deposit',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'Transfer',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'sender',\n type: 'address',\n },\n {\n indexed: true,\n name: 'receiver',\n type: 'address',\n },\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: false,\n name: 'assets',\n type: 'uint256',\n },\n {\n indexed: false,\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'Withdraw',\n type: 'event',\n },\n {\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n {\n name: 'spender',\n type: 'address',\n },\n ],\n name: 'allowance',\n outputs: [\n {\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'spender',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'approve',\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'asset',\n outputs: [\n {\n name: 'assetTokenAddress',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'account',\n type: 'address',\n },\n ],\n name: 'balanceOf',\n outputs: [\n {\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'convertToAssets',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n name: 'convertToShares',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n ],\n name: 'deposit',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'caller',\n type: 'address',\n },\n ],\n name: 'maxDeposit',\n outputs: [\n {\n name: 'maxAssets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'caller',\n type: 'address',\n },\n ],\n name: 'maxMint',\n outputs: [\n {\n name: 'maxShares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'maxRedeem',\n outputs: [\n {\n name: 'maxShares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'maxWithdraw',\n outputs: [\n {\n name: 'maxAssets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n ],\n name: 'mint',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n name: 'previewDeposit',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'previewMint',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n name: 'previewRedeem',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n name: 'previewWithdraw',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'redeem',\n outputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'totalAssets',\n outputs: [\n {\n name: 'totalManagedAssets',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'totalSupply',\n outputs: [\n {\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'transfer',\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'from',\n type: 'address',\n },\n {\n name: 'to',\n type: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'transferFrom',\n outputs: [\n {\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n name: 'assets',\n type: 'uint256',\n },\n {\n name: 'receiver',\n type: 'address',\n },\n {\n name: 'owner',\n type: 'address',\n },\n ],\n name: 'withdraw',\n outputs: [\n {\n name: 'shares',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const\n", "export const config = {\n DEFAULT_BLOCK_CONFIRMATIONS: 2,\n};\n", "/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkEnvKey(networkName: string): string {\n if (!networkName) {\n throw new Error('Network name must be provided');\n }\n return camelCaseToCapsSnakeCase(networkName);\n}\n\n/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkKey(NETWORK_NAME: string): string {\n if (!NETWORK_NAME) {\n throw new Error('Network name must be provided');\n }\n return capsSnakeCaseToCamelCase(NETWORK_NAME);\n}\n\n/**\n * Converts a string from CAPS_SNAKE_CASE to camelCase\n *\n * @param snakeCaseString The string in CAPS_SNAKE_CASE format\n * @returns The string converted to camelCase format\n */\nexport function capsSnakeCaseToCamelCase(snakeCaseString: string): string {\n if (!snakeCaseString) {\n throw new Error('String must be provided');\n }\n\n return snakeCaseString\n .toLowerCase()\n .replace(/_([a-z])/g, (_, char) => char.toUpperCase());\n}\n\n/**\n * Converts a string from camelCase to CAPS_SNAKE_CASE\n *\n * @param camelCaseString The string in camelCase format\n * @returns The string converted to CAPS_SNAKE_CASE format\n */\nexport function camelCaseToCapsSnakeCase(camelCaseString: string): string {\n if (!camelCaseString) {\n throw new Error('String must be provided');\n }\n\n return camelCaseString.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toUpperCase();\n}\n\nexport function getNetworkName(networkEnvKey: string): string {\n if (!networkEnvKey) {\n throw new Error('Network name must be provided');\n }\n\n return networkEnvKey\n .toLowerCase()\n .split('_')\n .map((word, index) =>\n index === 0 ? word : word[0].toUpperCase() + word.slice(1)\n )\n .join('');\n}\n", "import { type NetworkType } from './types';\n\nexport const networkTypes: Record = {\n mainnet: 'mainnet',\n testnet: 'testnet',\n localhost: 'localhost',\n};\n", "{\n \"1\": {\n \"id\": \"1\",\n \"chainSelector\": 1,\n \"name\": \"ethereum\",\n \"rpcUrls\": [\n \"https://cloudflare-eth.com\",\n \"https://eth1.lava.build\",\n \"https://mainnet.gateway.tenderly.co\",\n \"https://eth.drpc.org\",\n \"https://gateway.tenderly.co/public/mainnet\",\n \"https://go.getblock.io/aefd01aa907c4805ba3c00a9e5b48c6b\",\n \"https://0xrpc.io/eth\",\n \"https://eth-mainnet.rpcfast.com?api_key=xbhWBI1Wkguk8SNMu1bvvLurPGLXmgwYeC4S6g2H7WdwFigZSmPWVZRxrskEQwIf\",\n \"https://rpc.eth.gateway.fm\",\n \"https://1rpc.io/eth\",\n \"https://eth-mainnet.public.blastapi.io\",\n \"https://ethereum-rpc.publicnode.com\",\n \"https://rpc.mevblocker.io/fast\",\n \"https://eth.meowrpc.com\",\n \"https://eth.api.pocket.network\",\n \"https://ethereum-public.nodies.app\",\n \"https://rpc.flashbots.net/fast\",\n \"https://ethereum-json-rpc.stakely.io\",\n \"https://eth.llamarpc.com\",\n \"https://eth.rpc.blxrbdn.com\",\n \"https://ethereum.public.blockpi.network/v1/rpc/public\",\n \"https://ethereum-mainnet.gateway.tatum.io\",\n \"https://eth.blockrazor.xyz\",\n \"https://api-ethereum-mainnet-reth.n.dwellir.com/2ccf18bf-2916-4198-8856-42172854353c\",\n \"https://eth.merkle.io\",\n \"https://eth-mainnet.nodereal.io/v1/1659dfb40aa24bbb8153a677b98064d7\",\n \"https://rpc.flashbots.net\",\n \"https://rpc.mevblocker.io/fullprivacy\",\n \"https://rpc.mevblocker.io/noreverts\",\n \"https://rpc.fullsend.to\",\n \"https://eth.api.onfinality.io/public\",\n \"https://public-eth.nownodes.io\",\n \"https://openapi.bitstack.com/v1/wNFxbiJyQsSeLrX8RRCHi7NpRxrlErZk/DjShIqLishPCTB9HiMkPHXjUM9CNM9Na/ETH/mainnet\",\n \"https://core.gashawk.io/rpc\",\n \"https://rpc.mevblocker.io\",\n \"https://ethereum.rpc.subquery.network/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Ethereum\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Etherscan\",\n \"url\": \"https://etherscan.io\",\n \"apiUrl\": \"https://api.etherscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 75,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"10\": {\n \"id\": \"10\",\n \"chainSelector\": 10,\n \"name\": \"optimism\",\n \"rpcUrls\": [\n \"https://optimism.drpc.org\",\n \"https://go.getblock.io/e8a75f8dcf614861becfbcb185be6eb4\",\n \"https://gateway.tenderly.co/public/optimism\",\n \"https://mainnet.optimism.io\",\n \"https://1rpc.io/op\",\n \"https://optimism.gateway.tenderly.co\",\n \"https://api-optimism-mainnet-archive.n.dwellir.com/2ccf18bf-2916-4198-8856-42172854353c\",\n \"https://optimism-rpc.publicnode.com\",\n \"https://optimism-public.nodies.app\",\n \"https://public-op-mainnet.fastnode.io\",\n \"https://optimism-mainnet.gateway.tatum.io\",\n \"https://optimism.api.onfinality.io/public\",\n \"https://optimism.public.blockpi.network/v1/rpc/public\",\n \"https://optimism.rpc.subquery.network/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Optimism Explorer\",\n \"url\": \"https://optimistic.etherscan.io\",\n \"apiUrl\": \"https://api-optimistic.etherscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 50,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"137\": {\n \"id\": \"137\",\n \"chainSelector\": 137,\n \"name\": \"polygon\",\n \"rpcUrls\": [\n \"https://polygon.drpc.org\",\n \"https://gateway.tenderly.co/public/polygon\",\n \"https://polygon.lava.build\",\n \"https://go.getblock.io/02667b699f05444ab2c64f9bff28f027\",\n \"https://polygon-mainnet.gateway.tatum.io\",\n \"https://polygon-rpc.com\",\n \"https://1rpc.io/matic\",\n \"https://polygon.meowrpc.com\",\n \"https://polygon-bor-rpc.publicnode.com\",\n \"https://polygon-public.nodies.app\",\n \"https://polygon.gateway.tenderly.co\",\n \"https://rpc-mainnet.matic.quiknode.pro\",\n \"https://polygon-mainnet.rpcfast.com?api_key=xbhWBI1Wkguk8SNMu1bvvLurPGLXmgwYeC4S6g2H7WdwFigZSmPWVZRxrskEQwIf\",\n \"https://polygon.rpc.subquery.network/public\",\n \"https://polygon.api.onfinality.io/public\",\n \"https://poly.api.pocket.network\"\n ],\n \"nativeCurrency\": {\n \"name\": \"POL\",\n \"decimals\": 18,\n \"symbol\": \"POL\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"PolygonScan\",\n \"url\": \"https://polygonscan.com\",\n \"apiUrl\": \"https://api.polygonscan.com/api\"\n }\n ],\n \"finalityConfirmations\": 128,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"8453\": {\n \"id\": \"8453\",\n \"chainSelector\": 8453,\n \"name\": \"base\",\n \"rpcUrls\": [\n \"https://base.drpc.org\",\n \"https://base.lava.build\",\n \"https://mainnet.base.org\",\n \"https://gateway.tenderly.co/public/base\",\n \"https://base.meowrpc.com\",\n \"https://base.gateway.tenderly.co\",\n \"https://developer-access-mainnet.base.org\",\n \"https://1rpc.io/base\",\n \"https://base-rpc.publicnode.com\",\n \"https://base-public.nodies.app\",\n \"https://base.public.blockpi.network/v1/rpc/public\",\n \"https://base-mainnet.public.blastapi.io\",\n \"https://base.api.onfinality.io/public\",\n \"https://base.rpc.blxrbdn.com\",\n \"https://base.api.pocket.network\",\n \"https://base.llamarpc.com\",\n \"https://api-base-mainnet-archive.n.dwellir.com/2ccf18bf-2916-4198-8856-42172854353c\",\n \"https://base.rpc.subquery.network/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Basescan\",\n \"url\": \"https://basescan.org\",\n \"apiUrl\": \"https://api.basescan.org/api\"\n }\n ],\n \"finalityConfirmations\": 50,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"42161\": {\n \"id\": \"42161\",\n \"chainSelector\": 42161,\n \"name\": \"arbitrum\",\n \"rpcUrls\": [\n \"https://arbitrum.drpc.org\",\n \"https://api-arbitrum-mainnet-archive.n.dwellir.com/2ccf18bf-2916-4198-8856-42172854353c\",\n \"https://arb1.lava.build\",\n \"https://1rpc.io/arb\",\n \"https://arbitrum-one-rpc.publicnode.com\",\n \"https://arbitrum-one-public.nodies.app\",\n \"https://arbitrum.gateway.tenderly.co\",\n \"https://arbitrum-one.public.blastapi.io\",\n \"https://arbitrum.api.onfinality.io/public\",\n \"https://arbitrum.meowrpc.com\",\n \"https://arbitrum.public.blockpi.network/v1/rpc/public\",\n \"https://arb1.arbitrum.io/rpc\",\n \"https://public-arb-mainnet.fastnode.io\",\n \"https://arbitrum.rpc.subquery.network/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Arbiscan\",\n \"url\": \"https://arbiscan.io\",\n \"apiUrl\": \"https://api.arbiscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 4080,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"43114\": {\n \"id\": \"43114\",\n \"chainSelector\": 43114,\n \"name\": \"avalanche\",\n \"rpcUrls\": [\n \"https://api.avax.network/ext/bc/C/rpc\",\n \"https://avalanche-mainnet.gateway.tenderly.co\",\n \"https://avalanche.drpc.org\",\n \"https://avax.api.pocket.network\",\n \"https://avalanche-c-chain-rpc.publicnode.com\",\n \"https://1rpc.io/avax/c\",\n \"https://avalanche-public.nodies.app/ext/bc/C/rpc\",\n \"https://avax.meowrpc.com\",\n \"https://avalanche.api.onfinality.io/public/ext/bc/C/rpc\",\n \"https://spectrum-01.simplystaking.xyz/avalanche-mn-rpc/ext/bc/C/rpc\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Avalanche\",\n \"decimals\": 18,\n \"symbol\": \"AVAX\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"SnowTrace\",\n \"url\": \"https://snowtrace.io\",\n \"apiUrl\": \"https://api.snowtrace.io/api\"\n }\n ],\n \"finalityConfirmations\": 1,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n }\n}", "{\n \"81\": {\n \"id\": \"81\",\n \"isTestnet\": true,\n \"chainSelector\": 81,\n \"name\": \"astarShibuya\",\n \"rpcUrls\": [\n \"https://evm.shibuya.astar.network\",\n \"https://evm.shibuya.astar.network\",\n \"https://shibuya.public.blastapi.io\",\n \"https://shibuya-rpc.dwellir.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Astar\",\n \"decimals\": 18,\n \"symbol\": \"ASTR\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Subscan\",\n \"url\": \"https://shibuya.subscan.io\",\n \"apiUrl\": \"https://shibuya.subscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 6,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"97\": {\n \"id\": \"97\",\n \"isTestnet\": true,\n \"chainSelector\": 97,\n \"name\": \"bnbTestnet\",\n \"rpcUrls\": [\n \"https://bsc-testnet.drpc.org\",\n \"https://bsc-testnet-rpc.publicnode.com\",\n \"https://data-seed-prebsc-2-s2.bnbchain.org:8545\",\n \"https://data-seed-prebsc-1-s2.bnbchain.org:8545\",\n \"https://data-seed-prebsc-2-s3.bnbchain.org:8545\",\n \"https://data-seed-prebsc-1-s1.bnbchain.org:8545\",\n \"https://data-seed-prebsc-2-s1.bnbchain.org:8545\",\n \"https://data-seed-prebsc-1-s3.bnbchain.org:8545\",\n \"https://bnb-testnet.api.onfinality.io/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"BNB\",\n \"decimals\": 18,\n \"symbol\": \"tBNB\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"BscScan\",\n \"url\": \"https://testnet.bscscan.com\",\n \"apiUrl\": \"https://api-testnet.bscscan.com/api\"\n }\n ],\n \"finalityConfirmations\": 7,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xf6BBdC1fD89E554639D7A683909338802B05F160\",\n \"relayerLib\": \"0x3a4EA7fd0CeA70a4B2Cf72c5AC966225C98eE48d\",\n \"validatorLib\": \"0xAEBaacfa9CaC6B8486Ae77843728c863c909E7d0\"\n }\n },\n \"133\": {\n \"id\": \"133\",\n \"isTestnet\": true,\n \"chainSelector\": 133,\n \"name\": \"hashkeyTestnet\",\n \"rpcUrls\": [],\n \"nativeCurrency\": {\n \"name\": \"HashKey EcoPoints\",\n \"decimals\": 18,\n \"symbol\": \"HSK\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Hashkey Explorer\",\n \"url\": \"https://testnet.hashkeyscan.io\",\n \"apiUrl\": \"https://testnet.hashkeyscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 1800,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"157\": {\n \"id\": \"157\",\n \"isTestnet\": true,\n \"chainSelector\": 157,\n \"name\": \"shibariumPuppynet\",\n \"rpcUrls\": [\n \"https://puppynet.shibrpc.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Bone\",\n \"decimals\": 18,\n \"symbol\": \"BONE\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Puppyscan\",\n \"url\": \"https://puppyscan.shib.io\",\n \"apiUrl\": \"https://puppyscan.shib.io/api\"\n }\n ],\n \"finalityConfirmations\": 60,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xea73Bc856EdD980912Fb8FE4CFC7bba52D980F6A\",\n \"relayerLib\": \"0x9900a9E38E8695eE9109962b9f4671cF977c265a\",\n \"validatorLib\": \"0x39f311124745064935cB196AeE2a950cbbC11336\"\n }\n },\n \"195\": {\n \"id\": \"195\",\n \"isTestnet\": true,\n \"chainSelector\": 195,\n \"name\": \"xlayerSepolia\",\n \"rpcUrls\": [],\n \"nativeCurrency\": {\n \"name\": \"OKB\",\n \"decimals\": 18,\n \"symbol\": \"OKB\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"X Layer Explorer\",\n \"url\": \"https://testnet-explorer.xlayer.tech\",\n \"apiUrl\": \"https://testnet-explorer.xlayer.tech/api\"\n }\n ],\n \"finalityConfirmations\": 3600,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"296\": {\n \"id\": \"296\",\n \"isTestnet\": true,\n \"chainSelector\": 296,\n \"name\": \"hederaTestnet\",\n \"rpcUrls\": [\n \"https://testnet.hashio.io/api\",\n \"https://296.rpc.thirdweb.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"HBAR\",\n \"decimals\": 18,\n \"symbol\": \"HBAR\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"300\": {\n \"id\": \"300\",\n \"isTestnet\": true,\n \"chainSelector\": 300,\n \"name\": \"zksyncSepolia\",\n \"rpcUrls\": [\n \"https://zksync-sepolia.drpc.org\",\n \"https://rpc.ankr.com/zksync_era_sepolia\",\n \"https://sepolia.era.zksync.dev\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 1200,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xBd5EC2962802123f6D8d0092dC485C98e23D1394\",\n \"relayerLib\": \"0x06942a1E6A73069a58306d9E154051b85b32D071\",\n \"validatorLib\": \"0xe277f7afA46291d4c729a184D51D78ae598d54b1\"\n }\n },\n \"338\": {\n \"id\": \"338\",\n \"isTestnet\": true,\n \"chainSelector\": 338,\n \"name\": \"cronosTestnet\",\n \"rpcUrls\": [\n \"https://cro-testnet.gateway.tatum.io\",\n \"https://cronos-testnet.drpc.org\",\n \"https://evm-t3.cronos.org\"\n ],\n \"nativeCurrency\": {\n \"name\": \"CRO\",\n \"decimals\": 18,\n \"symbol\": \"tCRO\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Cronos Explorer\",\n \"url\": \"https://testnet.cronoscan.com\",\n \"apiUrl\": \"https://api-testnet.cronoscan.com/api\"\n }\n ],\n \"finalityConfirmations\": 2,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"545\": {\n \"id\": \"545\",\n \"isTestnet\": true,\n \"chainSelector\": 545,\n \"name\": \"flowTestnet\",\n \"rpcUrls\": [\n \"https://testnet.evm.nodes.onflow.org\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Flow\",\n \"decimals\": 18,\n \"symbol\": \"FLOW\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xf6BBdC1fD89E554639D7A683909338802B05F160\",\n \"relayerLib\": \"0x3a4EA7fd0CeA70a4B2Cf72c5AC966225C98eE48d\",\n \"validatorLib\": \"0xAEBaacfa9CaC6B8486Ae77843728c863c909E7d0\"\n }\n },\n \"919\": {\n \"id\": \"919\",\n \"isTestnet\": true,\n \"chainSelector\": 919,\n \"name\": \"modeTestnet\",\n \"rpcUrls\": [\n \"https://mode-testnet.drpc.org\",\n \"https://sepolia.mode.network\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Mode Explorer\",\n \"url\": \"https://sepolia.explorer.mode.network\",\n \"apiUrl\": \"https://sepolia.explorer.mode.network/api\"\n }\n ],\n \"finalityConfirmations\": 1110,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"943\": {\n \"id\": \"943\",\n \"isTestnet\": true,\n \"chainSelector\": 943,\n \"name\": \"pulsechainTestnet\",\n \"rpcUrls\": [\n \"https://pulsechain-testnet-rpc.publicnode.com\",\n \"https://rpc-testnet-pulsechain.g4mm4.io\",\n \"https://rpc.v4.testnet.pulsechain.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"V4 Pulse\",\n \"decimals\": 18,\n \"symbol\": \"v4PLS\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xea73Bc856EdD980912Fb8FE4CFC7bba52D980F6A\",\n \"relayerLib\": \"0x9900a9E38E8695eE9109962b9f4671cF977c265a\",\n \"validatorLib\": \"0x39f311124745064935cB196AeE2a950cbbC11336\"\n }\n },\n \"1001\": {\n \"id\": \"1001\",\n \"isTestnet\": true,\n \"chainSelector\": 1001,\n \"name\": \"kaiaKairos\",\n \"rpcUrls\": [\n \"https://klaytn-baobab.drpc.org\",\n \"https://kaia-kairos.blockpi.network/v1/rpc/public\",\n \"https://rpc.ankr.com/kaia_testnet\",\n \"https://public-en-kairos.node.kaia.io\"\n ],\n \"nativeCurrency\": {\n \"name\": \"KAIA\",\n \"decimals\": 18,\n \"symbol\": \"KAIA\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1112\": {\n \"id\": \"1112\",\n \"isTestnet\": true,\n \"chainSelector\": 1112,\n \"name\": \"wemixTestnet\",\n \"rpcUrls\": [\n \"https://wemix-testnet.drpc.org\",\n \"https://api.test.wemix.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"WEMIX\",\n \"decimals\": 18,\n \"symbol\": \"tWEMIX\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 2,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1114\": {\n \"id\": \"1114\",\n \"isTestnet\": true,\n \"chainSelector\": 1114,\n \"name\": \"coreTestnet\",\n \"rpcUrls\": [\n \"https://rpc.test2.btcs.network\"\n ],\n \"nativeCurrency\": {\n \"name\": \"tCORE2\",\n \"decimals\": 18,\n \"symbol\": \"tCORE2\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"CoreScan\",\n \"url\": \"https://scan.test.btcs.network\",\n \"apiUrl\": \"https://scan.test.btcs.network/api\"\n }\n ],\n \"finalityConfirmations\": 7,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5\",\n \"relayerLib\": \"0x54B8d67AA64CF8A59F604cA6e98c643C64920b03\",\n \"validatorLib\": \"0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a\"\n }\n },\n \"1123\": {\n \"id\": \"1123\",\n \"isTestnet\": true,\n \"finalityTagEnabled\": true,\n \"chainSelector\": 1123,\n \"name\": \"b2Testnet\",\n \"rpcUrls\": [\n \"https://rpc.ankr.com/b2_testnet\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Bitcoin\",\n \"decimals\": 18,\n \"symbol\": \"BTC\"\n },\n \"blockExplorers\": [],\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1174\": {\n \"id\": \"1174\",\n \"isTestnet\": true,\n \"chainSelector\": 1174,\n \"name\": \"litheumTestnet\",\n \"rpcUrls\": [\n \"https://testnet.litheum.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"LTH\",\n \"decimals\": 18,\n \"symbol\": \"LTH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1270\": {\n \"id\": \"1270\",\n \"isTestnet\": true,\n \"chainSelector\": 1270,\n \"name\": \"irysTestnet\",\n \"rpcUrls\": [\n \"https://testnet-rpc.irys.xyz/v1/execution-rpc\",\n \"testnet-rpc.irys.xyz\"\n ],\n \"nativeCurrency\": {\n \"name\": \"mIRYS\",\n \"decimals\": 18,\n \"symbol\": \"mIRYS\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 6,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1301\": {\n \"id\": \"1301\",\n \"isTestnet\": true,\n \"chainSelector\": 1301,\n \"name\": \"unichainSepolia\",\n \"rpcUrls\": [\n \"https://unichain-sepolia.drpc.org\",\n \"https://unichain-sepolia-rpc.publicnode.com\",\n \"https://unichain-sepolia.api.onfinality.io/public\",\n \"https://sepolia.unichain.org\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Unichain Explorer\",\n \"url\": \"https://sepolia-explorer.unichain.network\",\n \"apiUrl\": \"https://sepolia-explorer.unichain.network/api\"\n }\n ],\n \"finalityConfirmations\": 1440,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5\",\n \"relayerLib\": \"0x54B8d67AA64CF8A59F604cA6e98c643C64920b03\",\n \"validatorLib\": \"0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a\"\n }\n },\n \"1328\": {\n \"id\": \"1328\",\n \"isTestnet\": true,\n \"chainSelector\": 1328,\n \"name\": \"seiTestnet\",\n \"rpcUrls\": [\n \"https://sei-testnet.drpc.org\",\n \"https://sei-testnet-public.nodies.app\",\n \"https://evm-rpc-testnet.sei-apis.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Sei\",\n \"decimals\": 18,\n \"symbol\": \"SEI\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Sei Explorer\",\n \"url\": \"https://seitrace.com\",\n \"apiUrl\": \"https://seitrace.com/api\"\n }\n ],\n \"finalityConfirmations\": 3,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x122947C8c3529DCa006aeE65832D3C3fED6bf3C0\",\n \"relayerLib\": \"0xe965dEBDfa6365CFb9e643ccdCBADE424a2eC381\",\n \"validatorLib\": \"0xB708D151D18e5aB3506934B39375D00EE1e0C882\"\n }\n },\n \"1946\": {\n \"id\": \"1946\",\n \"isTestnet\": true,\n \"chainSelector\": 1946,\n \"name\": \"soneiumMinato\",\n \"rpcUrls\": [\n \"https://soneium-minato.drpc.org\",\n \"https://rpc.minato.soneium.org\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Soneium Explorer\",\n \"url\": \"https://minato-explorer.soneium.com\",\n \"apiUrl\": \"https://minato-explorer.soneium.com/api\"\n }\n ],\n \"finalityConfirmations\": 810,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"2021\": {\n \"id\": \"2021\",\n \"isTestnet\": true,\n \"chainSelector\": 2021,\n \"name\": \"roninSaigon\",\n \"rpcUrls\": [\n \"https://saigon-testnet.roninchain.com/rpc\",\n \"https://saigon-testnet.roninchain.com/rpc\"\n ],\n \"nativeCurrency\": {\n \"name\": \"RON\",\n \"decimals\": 18,\n \"symbol\": \"RON\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Ronin Explorer\",\n \"url\": \"https://saigon-explorer.roninchain.com\",\n \"apiUrl\": \"https://saigon-explorer.roninchain.com/api\"\n }\n ],\n \"finalityConfirmations\": 4,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xea73Bc856EdD980912Fb8FE4CFC7bba52D980F6A\",\n \"relayerLib\": \"0x9900a9E38E8695eE9109962b9f4671cF977c265a\",\n \"validatorLib\": \"0x39f311124745064935cB196AeE2a950cbbC11336\"\n }\n },\n \"2221\": {\n \"id\": \"2221\",\n \"isTestnet\": true,\n \"chainSelector\": 2221,\n \"name\": \"kavaTestnet\",\n \"rpcUrls\": [\n \"https://kava-testnet.drpc.org\",\n \"https://evm.testnet.kava.io\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Kava\",\n \"decimals\": 18,\n \"symbol\": \"KAVA\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"2522\": {\n \"id\": \"2522\",\n \"isTestnet\": true,\n \"chainSelector\": 2522,\n \"name\": \"fraxtalHolesky\",\n \"rpcUrls\": [],\n \"nativeCurrency\": {\n \"name\": \"FRAX\",\n \"decimals\": 18,\n \"symbol\": \"FRAX\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 900,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"2810\": {\n \"id\": \"2810\",\n \"isTestnet\": true,\n \"chainSelector\": 2810,\n \"name\": \"morphHolesky\",\n \"rpcUrls\": [],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"3636\": {\n \"id\": \"3636\",\n \"isTestnet\": true,\n \"chainSelector\": 3636,\n \"name\": \"botanixTestnet\",\n \"rpcUrls\": [\n \"https://rpc.ankr.com/botanix_testnet\",\n \"https://node.botanixlabs.dev\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Botanix\",\n \"decimals\": 18,\n \"symbol\": \"BTC\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Botanix Explorer\",\n \"url\": \"https://testnet-explorer.botanixlabs.xyz\",\n \"apiUrl\": \"https://testnet-explorer.botanixlabs.xyz/api\"\n }\n ],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"4801\": {\n \"id\": \"4801\",\n \"isTestnet\": true,\n \"chainSelector\": 4801,\n \"name\": \"worldchainTestnet\",\n \"rpcUrls\": [\n \"https://worldchain-sepolia.drpc.org\",\n \"https://worldchain-sepolia.g.alchemy.com/public\",\n \"https://worldchain-sepolia.gateway.tenderly.co\",\n \"https://4801.rpc.thirdweb.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 1200,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xea73Bc856EdD980912Fb8FE4CFC7bba52D980F6A\",\n \"relayerLib\": \"0x9900a9E38E8695eE9109962b9f4671cF977c265a\",\n \"validatorLib\": \"0x39f311124745064935cB196AeE2a950cbbC11336\"\n }\n },\n \"5003\": {\n \"id\": \"5003\",\n \"isTestnet\": true,\n \"chainSelector\": 5003,\n \"name\": \"mantleSepolia\",\n \"rpcUrls\": [\n \"https://mantle-sepolia.drpc.org\",\n \"https://rpc.sepolia.mantle.xyz\"\n ],\n \"nativeCurrency\": {\n \"name\": \"MNT\",\n \"decimals\": 18,\n \"symbol\": \"MNT\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Mantle Explorer\",\n \"url\": \"https://explorer.sepolia.mantle.xyz\",\n \"apiUrl\": \"https://explorer.sepolia.mantle.xyz/api\"\n }\n ],\n \"finalityConfirmations\": 840,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"5124\": {\n \"id\": \"5124\",\n \"isTestnet\": true,\n \"chainSelector\": 5124,\n \"name\": \"seismicDevnet\",\n \"rpcUrls\": [\n \"https://node-2.seismicdev.net/rpc\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"5611\": {\n \"id\": \"5611\",\n \"isTestnet\": true,\n \"chainSelector\": 5611,\n \"name\": \"opbnbTestnet\",\n \"rpcUrls\": [\n \"https://opbnb-testnet.drpc.org\",\n \"https://opbnb-testnet-rpc.publicnode.com\",\n \"https://opbnb-testnet-rpc.bnbchain.org\",\n \"https://opbnb-testnet.nodereal.io/v1/e9a36765eb8a40b9bd12e680a1fd2bc5\",\n \"https://opbnb-testnet.nodereal.io/v1/64a9df0874fb4a93b9d0a3849de012d3\"\n ],\n \"nativeCurrency\": {\n \"name\": \"tBNB\",\n \"decimals\": 18,\n \"symbol\": \"tBNB\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"6342\": {\n \"id\": \"6342\",\n \"isTestnet\": true,\n \"chainSelector\": 6342,\n \"name\": \"megaethTestnet\",\n \"rpcUrls\": [],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"MegaEth Explorer\",\n \"url\": \"https://explorer-testnet.megaeth.io\",\n \"apiUrl\": \"https://explorer-testnet.megaeth.io/api\"\n }\n ],\n \"finalityConfirmations\": 900,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"8408\": {\n \"id\": \"8408\",\n \"isTestnet\": true,\n \"chainSelector\": 8408,\n \"name\": \"zenchainTestnet\",\n \"rpcUrls\": [\n \"https://zenchain-testnet.api.onfinality.io/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ZTC\",\n \"decimals\": 18,\n \"symbol\": \"ZTC\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"10143\": {\n \"id\": \"10143\",\n \"isTestnet\": true,\n \"chainSelector\": 10143,\n \"name\": \"monadTestnet\",\n \"rpcUrls\": [\n \"https://monad-testnet.drpc.org\",\n \"https://rpc.ankr.com/monad_testnet\",\n \"https://testnet-rpc.monad.xyz\",\n \"https://rpc-testnet.monadinfra.com\",\n \"https://monad-testnet.api.onfinality.io/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Testnet MON Token\",\n \"decimals\": 18,\n \"symbol\": \"MON\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Monad Explorer\",\n \"url\": \"https://explorer.testnet.monad.xyz\",\n \"apiUrl\": \"https://explorer.testnet.monad.xyz/api\"\n }\n ],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x3E2Ee768D9fADdd3673a69ED4d0D1d9147FA1054\",\n \"relayerLib\": \"0x9900a9E38E8695eE9109962b9f4671cF977c265a\",\n \"validatorLib\": \"0x39f311124745064935cB196AeE2a950cbbC11336\"\n }\n },\n \"10200\": {\n \"id\": \"10200\",\n \"isTestnet\": true,\n \"chainSelector\": 10200,\n \"name\": \"gnosisChiado\",\n \"rpcUrls\": [\n \"https://gnosis-chiado.drpc.org\",\n \"https://rpc.chiadochain.net\",\n \"https://gnosis-chiado-rpc.publicnode.com\",\n \"https://rpc.chiado.gnosis.gateway.fm\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Gnosis\",\n \"decimals\": 18,\n \"symbol\": \"xDAI\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Blockscout\",\n \"url\": \"https://gnosis-chiado.blockscout.com\",\n \"apiUrl\": \"https://gnosis-chiado.blockscout.com/api\"\n }\n ],\n \"finalityConfirmations\": 35,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5\",\n \"relayerLib\": \"0x54B8d67AA64CF8A59F604cA6e98c643C64920b03\",\n \"validatorLib\": \"0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a\"\n }\n },\n \"11124\": {\n \"id\": \"11124\",\n \"isTestnet\": true,\n \"finalityTagEnabled\": true,\n \"chainSelector\": 11124,\n \"name\": \"abstractSepolia\",\n \"rpcUrls\": [\n \"https://abstract-sepolia.drpc.org\",\n \"https://api.testnet.abs.xyz\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"18880\": {\n \"id\": \"18880\",\n \"isTestnet\": true,\n \"chainSelector\": 18880,\n \"name\": \"expchainTestnet\",\n \"rpcUrls\": [\n \"https://rpc1-testnet.expchain.ai\",\n \"https://expchain.polyhedra.network/rpc1-testnet\",\n \"https://expchain.polyhedra.network/rpc0-testnet\",\n \"https://expchain.polyhedra.network/rpc0-testnet\",\n \"https://expchain.polyhedra.network/rpc1-testnet\"\n ],\n \"nativeCurrency\": {\n \"name\": \"tZKJ\",\n \"decimals\": 18,\n \"symbol\": \"tZKJ\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"23295\": {\n \"id\": \"23295\",\n \"isTestnet\": true,\n \"chainSelector\": 23295,\n \"name\": \"oasissapphireTestnet\",\n \"rpcUrls\": [\n \"https://testnet.sapphire.oasis.io\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Sapphire Test Rose\",\n \"decimals\": 18,\n \"symbol\": \"TEST\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xcc9D0438ac3b90fB8291f4f3C1c420E215f36585\",\n \"relayerLib\": \"0x8510C780097cA53aeF8e3527a5107C4629b21f0C\",\n \"validatorLib\": \"0xb31EED4695De3eCE4381a40fA638d9a63904882b\"\n }\n },\n \"33111\": {\n \"id\": \"33111\",\n \"isTestnet\": true,\n \"finalityTagEnabled\": true,\n \"chainSelector\": 33111,\n \"name\": \"apechainCurtis\",\n \"rpcUrls\": [\n \"https://apechain-curtis.drpc.org\",\n \"https://curtis.rpc.caldera.xyz/http\",\n \"https://rpc.curtis.apechain.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"APE\",\n \"decimals\": 18,\n \"symbol\": \"APE\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Apechain Explorer\",\n \"url\": \"https://curtis-explorer.apechain.io\",\n \"apiUrl\": \"https://curtis-explorer.apechain.io/api\"\n }\n ],\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"37111\": {\n \"id\": \"37111\",\n \"isTestnet\": true,\n \"chainSelector\": 37111,\n \"name\": \"lensSepolia\",\n \"rpcUrls\": [\n \"https://rpc.testnet.lens.dev\",\n \"https://lens-testnet.drpc.org\"\n ],\n \"nativeCurrency\": {\n \"name\": \"GRASS\",\n \"decimals\": 18,\n \"symbol\": \"GRASS\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"43113\": {\n \"id\": \"43113\",\n \"isTestnet\": true,\n \"finalityTagEnabled\": true,\n \"chainSelector\": 43113,\n \"name\": \"avalancheFuji\",\n \"rpcUrls\": [\n \"https://api.avax-test.network/ext/bc/C/rpc\",\n \"https://avalanche-fuji.drpc.org\",\n \"https://avalanche-fuji-c-chain-rpc.publicnode.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Avalanche Fuji\",\n \"decimals\": 18,\n \"symbol\": \"AVAX\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Snowtrace\",\n \"url\": \"https://testnet.snowtrace.io\",\n \"apiUrl\": \"https://api-testnet.snowtrace.io/api\"\n }\n ],\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xe965dEBDfa6365CFb9e643ccdCBADE424a2eC381\",\n \"relayerLib\": \"0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a\",\n \"validatorLib\": \"0x246892c38a2314c30E56490ADf1bcf3470DCAE6A\"\n }\n },\n \"44787\": {\n \"id\": \"44787\",\n \"isTestnet\": true,\n \"chainSelector\": 44787,\n \"name\": \"celoAlfajores\",\n \"rpcUrls\": [],\n \"nativeCurrency\": {\n \"name\": \"CELO\",\n \"decimals\": 18,\n \"symbol\": \"A-CELO\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Celoscan\",\n \"url\": \"https://alfajores.celoscan.io\",\n \"apiUrl\": \"https://api-alfajores.celoscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"48899\": {\n \"id\": \"48899\",\n \"isTestnet\": true,\n \"chainSelector\": 48899,\n \"name\": \"zircuitTestnet\",\n \"rpcUrls\": [\n \"https://testnet.zircuit.com\",\n \"https://zircuit1-testnet.p2pify.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Zircuit Explorer\",\n \"url\": \"https://explorer.zircuit.com\",\n \"apiUrl\": \"https://explorer.zircuit.com/api\"\n }\n ],\n \"finalityConfirmations\": 630,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"57054\": {\n \"id\": \"57054\",\n \"isTestnet\": true,\n \"chainSelector\": 57054,\n \"name\": \"sonicBlaze\",\n \"rpcUrls\": [\n \"https://sonic-testnet.drpc.org\",\n \"https://sonic-blaze-rpc.publicnode.com\",\n \"https://rpc.blaze.soniclabs.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"S\",\n \"decimals\": 18,\n \"symbol\": \"S\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Sonic Explorer\",\n \"url\": \"https://explorer-testnet.sonic.guru\",\n \"apiUrl\": \"https://explorer-testnet.sonic.guru/api\"\n }\n ],\n \"finalityConfirmations\": 10,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xAEBaacfa9CaC6B8486Ae77843728c863c909E7d0\",\n \"relayerLib\": \"0x13187bb1d2f100F84770a848A1374bf745Ea4cF6\",\n \"validatorLib\": \"0x90D7e742746Abf405036aA21981C835F3E842DA4\"\n }\n },\n \"59141\": {\n \"id\": \"59141\",\n \"isTestnet\": true,\n \"chainSelector\": 59141,\n \"name\": \"lineaSepolia\",\n \"rpcUrls\": [\n \"https://linea-sepolia.drpc.org\",\n \"https://linea-sepolia-rpc.publicnode.com\",\n \"https://rpc.sepolia.linea.build\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Linea Explorer\",\n \"url\": \"https://sepolia.lineascan.build\",\n \"apiUrl\": \"https://api-sepolia.lineascan.build/api\"\n }\n ],\n \"finalityConfirmations\": 600,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"59902\": {\n \"id\": \"59902\",\n \"isTestnet\": true,\n \"chainSelector\": 59902,\n \"name\": \"metisSepolia\",\n \"rpcUrls\": [\n \"https://metis-sepolia.gateway.tenderly.co\",\n \"https://metis-sepolia-rpc.publicnode.com\",\n \"https://sepolia.metisdevops.link\"\n ],\n \"nativeCurrency\": {\n \"name\": \"tMETIS\",\n \"decimals\": 18,\n \"symbol\": \"tMETIS\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 360,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"80002\": {\n \"id\": \"80002\",\n \"isTestnet\": true,\n \"chainSelector\": 80002,\n \"name\": \"polygonAmoy\",\n \"rpcUrls\": [\n \"https://rpc-amoy.polygon.technology\",\n \"https://polygon-amoy.gateway.tenderly.co\",\n \"https://polygon-amoy.drpc.org\",\n \"https://polygon-amoy-public.nodies.app\",\n \"https://polygon-amoy-bor-rpc.publicnode.com\",\n \"https://polygon-amoy.api.onfinality.io/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"POL\",\n \"decimals\": 18,\n \"symbol\": \"POL\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"PolygonScan\",\n \"url\": \"https://amoy.polygonscan.com\",\n \"apiUrl\": \"https://api-amoy.polygonscan.com/api\"\n }\n ],\n \"finalityConfirmations\": 500,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x6FF322BC8da39bC87A056d4052aa763f7BDeE836\",\n \"relayerLib\": \"0x81365cc081dF5fdF6cbD47a34fF4acBcA2B35F0d\",\n \"validatorLib\": \"0x99542DdB261186F818974e579e4aBF3BFb44819e\"\n }\n },\n \"80069\": {\n \"id\": \"80069\",\n \"isTestnet\": true,\n \"chainSelector\": 80069,\n \"name\": \"berachainBepolia\",\n \"rpcUrls\": [\n \"https://bepolia.rpc.berachain.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"BERA Token\",\n \"decimals\": 18,\n \"symbol\": \"BERA\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 1,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5\",\n \"relayerLib\": \"0x54B8d67AA64CF8A59F604cA6e98c643C64920b03\",\n \"validatorLib\": \"0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a\"\n }\n },\n \"84532\": {\n \"id\": \"84532\",\n \"isTestnet\": true,\n \"finalityTagEnabled\": true,\n \"chainSelector\": 84532,\n \"name\": \"baseSepolia\",\n \"rpcUrls\": [\n \"https://base-sepolia.gateway.tenderly.co\",\n \"https://sepolia.base.org\",\n \"https://base-sepolia.drpc.org\",\n \"https://base-sepolia-rpc.publicnode.com\",\n \"https://base-sepolia-public.nodies.app\",\n \"https://base-sepolia.api.onfinality.io/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"BaseScan\",\n \"url\": \"https://sepolia.basescan.org\",\n \"apiUrl\": \"https://api-sepolia.basescan.org/api\"\n },\n {\n \"name\": \"Blockscout\",\n \"url\": \"https://base-sepolia.blockscout.com\",\n \"apiUrl\": \"https://base-sepolia.blockscout.com/api\"\n }\n ],\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0xE3d861a49bc5903499fB5Bb411B83d980422c31B\",\n \"relayerLib\": \"0x429E6875Ba6A13cc015e9Eba594e8b42936244C4\",\n \"validatorLib\": \"0x67BE79Df5A37d2a89384D32C2A066d2a7354eD2B\"\n }\n },\n \"167009\": {\n \"id\": \"167009\",\n \"isTestnet\": true,\n \"chainSelector\": 167009,\n \"name\": \"taikoTestnet\",\n \"rpcUrls\": [],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 20,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"200810\": {\n \"id\": \"200810\",\n \"isTestnet\": true,\n \"chainSelector\": 200810,\n \"name\": \"bitlayerTestnet\",\n \"rpcUrls\": [\n \"https://rpc.ankr.com/bitlayer_testnet\",\n \"https://testnet-rpc.bitlayer.org\",\n \"https://testnet-rpc.bitlayer-rpc.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Bitcoin\",\n \"decimals\": 18,\n \"symbol\": \"BTC\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Bitlayer Explorer\",\n \"url\": \"https://testnet-explorer.bitlayer.org\",\n \"apiUrl\": \"https://testnet-explorer.bitlayer.org/api\"\n }\n ],\n \"finalityConfirmations\": 21,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"344100\": {\n \"id\": \"3441006\",\n \"isTestnet\": true,\n \"chainSelector\": 344100,\n \"name\": \"mantapacificSepolia\",\n \"rpcUrls\": [\n \"https://manta-pacific-sepolia.drpc.org\",\n \"https://manta-sepolia.rpc.caldera.xyz/http\",\n \"https://pacific-rpc.sepolia-testnet.manta.network/http\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"421614\": {\n \"id\": \"421614\",\n \"isTestnet\": true,\n \"finalityTagEnabled\": true,\n \"chainSelector\": 421614,\n \"name\": \"arbitrumSepolia\",\n \"rpcUrls\": [\n \"https://arbitrum-sepolia.gateway.tenderly.co\",\n \"https://arbitrum-sepolia.drpc.org\",\n \"https://arbitrum-sepolia-testnet.api.pocket.network\",\n \"https://arbitrum-sepolia-rpc.publicnode.com\",\n \"https://sepolia-rollup.arbitrum.io/rpc\",\n \"https://arbitrum-sepolia.api.onfinality.io/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Arbiscan\",\n \"url\": \"https://sepolia.arbiscan.io\",\n \"apiUrl\": \"https://api-sepolia.arbiscan.io/api\"\n }\n ],\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x6c99cC0FCC985fF175787BD2565AfD15781C99d0\",\n \"relayerLib\": \"0x622b5FeBf5Fd44Ab2E7636398F2621FC4E956304\",\n \"validatorLib\": \"0x7F445E3DE6B46cD36887B9f136DBe13298517C1F\"\n }\n },\n \"534351\": {\n \"id\": \"534351\",\n \"isTestnet\": true,\n \"chainSelector\": 534351,\n \"name\": \"scrollSepolia\",\n \"rpcUrls\": [\n \"https://scroll-sepolia.drpc.org\",\n \"https://scroll-sepolia-rpc.publicnode.com\",\n \"https://sepolia-rpc.scroll.io\",\n \"https://scroll-sepolia-public.nodies.app\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Scrollscan\",\n \"url\": \"https://sepolia.scrollscan.com\",\n \"apiUrl\": \"https://api-sepolia.scrollscan.com/api\"\n }\n ],\n \"finalityConfirmations\": 720,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x5E3607995Cc65dB53A5A20725237eDb9f91d5CE5\",\n \"relayerLib\": \"0x54B8d67AA64CF8A59F604cA6e98c643C64920b03\",\n \"validatorLib\": \"0x6EDCB27Aaf312938FA3C1C631C18A0635bD34E1a\"\n }\n },\n \"688689\": {\n \"id\": \"688689\",\n \"isTestnet\": true,\n \"chainSelector\": 688689,\n \"name\": \"pharosTestnet\",\n \"rpcUrls\": [\n \"https://atlantic.dplabs-internal.com\"\n ],\n \"nativeCurrency\": {\n \"name\": \"PHRS\",\n \"decimals\": 18,\n \"symbol\": \"PHRS\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"763373\": {\n \"id\": \"763373\",\n \"isTestnet\": true,\n \"chainSelector\": 763373,\n \"name\": \"inkSepolia\",\n \"rpcUrls\": [\n \"https://rpc-gel-sepolia.inkonchain.com\",\n \"https://ink-sepolia.drpc.org\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Ink Explorer\",\n \"url\": \"https://sepolia.inkscan.io\",\n \"apiUrl\": \"https://sepolia.inkscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 3600,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"808813\": {\n \"id\": \"808813\",\n \"isTestnet\": true,\n \"chainSelector\": 808813,\n \"name\": \"bobSepolia\",\n \"rpcUrls\": [\n \"https://bob-testnet.drpc.org\",\n \"https://bob-sepolia.rpc.gobob.xyz\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 3600,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1000101\": {\n \"id\": \"1000101\",\n \"isTestnet\": true,\n \"chainSelector\": 1000101,\n \"name\": \"xomarketTestnet\",\n \"rpcUrls\": [\n \"https://dev-testnet-rpc.xo.market\",\n \"https://testnet-rpc-1.xo.market\"\n ],\n \"nativeCurrency\": {\n \"name\": \"XO\",\n \"decimals\": 18,\n \"symbol\": \"XO\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 2,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1234200\": {\n \"id\": \"123420001114\",\n \"isTestnet\": true,\n \"chainSelector\": 1234200,\n \"name\": \"campv2Testnet\",\n \"rpcUrls\": [\n \"https://rpc.basecamp.t.raas.gelato.cloud\"\n ],\n \"nativeCurrency\": {\n \"name\": \"Camp\",\n \"decimals\": 18,\n \"symbol\": \"CAMP\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1313161\": {\n \"id\": \"1313161555\",\n \"isTestnet\": true,\n \"finalityTagEnabled\": true,\n \"chainSelector\": 1313161,\n \"name\": \"auroraTestnet\",\n \"rpcUrls\": [\n \"https://aurora-testnet.drpc.org\",\n \"https://testnet.aurora.dev\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"1685877\": {\n \"id\": \"168587773\",\n \"isTestnet\": true,\n \"chainSelector\": 1685877,\n \"name\": \"blastSepolia\",\n \"rpcUrls\": [\n \"https://blast-sepolia.drpc.org\",\n \"https://blast-testnet-public.nodies.app\",\n \"https://sepolia.blast.io\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Blastscan\",\n \"url\": \"https://sepolia.blastscan.io\",\n \"apiUrl\": \"https://api-sepolia.blastscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 600,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n },\n \"11155111\": {\n \"id\": \"11155111\",\n \"isTestnet\": true,\n \"finalityTagEnabled\": true,\n \"chainSelector\": 11155111,\n \"name\": \"ethereumSepolia\",\n \"rpcUrls\": [\n \"https://gateway.tenderly.co/public/sepolia\",\n \"https://sepolia.gateway.tenderly.co\",\n \"https://sepolia.drpc.org\",\n \"https://1rpc.io/sepolia\",\n \"https://ethereum-sepolia-public.nodies.app\",\n \"https://0xrpc.io/sep\",\n \"https://ethereum-sepolia-rpc.publicnode.com\",\n \"https://eth-sepolia.api.onfinality.io/public\",\n \"https://eth-sepolia-testnet.api.pocket.network\",\n \"https://ethereum-sepolia.rpc.subquery.network/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Etherscan\",\n \"url\": \"https://sepolia.etherscan.io\",\n \"apiUrl\": \"https://api-sepolia.etherscan.io/api\"\n }\n ],\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x3E0aAA63fFb51169B9aE9b7Dc3616b43362124D6\",\n \"relayerLib\": \"0x8338A0B9c83C0d7E67C267432DF4C8b7cA98e11C\",\n \"validatorLib\": \"0x1A808aa4F1E874763E114AB4fD170460D84A8D54\"\n }\n },\n \"11155420\": {\n \"id\": \"11155420\",\n \"isTestnet\": true,\n \"chainSelector\": 11155420,\n \"name\": \"optimismSepolia\",\n \"rpcUrls\": [\n \"https://sepolia.optimism.io\",\n \"https://optimism-sepolia.gateway.tenderly.co\",\n \"https://optimism-sepolia.drpc.org\",\n \"https://optimism-sepolia-public.nodies.app\",\n \"https://optimism-sepolia.api.onfinality.io/public\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [\n {\n \"name\": \"Optimism Explorer\",\n \"url\": \"https://sepolia-optimism.etherscan.io\",\n \"apiUrl\": \"https://api-sepolia-optimism.etherscan.io/api\"\n }\n ],\n \"finalityConfirmations\": 600,\n \"minBlockConfirmations\": 1,\n \"deployments\": {\n \"router\": \"0x25c2037546Bf5B525DfAfe85A662DB519c07bDdB\",\n \"relayerLib\": \"0x6E0b96885Ab0A58e82f2D1ce4df29AF6F5a40089\",\n \"validatorLib\": \"0x0C12fAdDb045bB71C256E36662D56b4b22f1bD58\"\n }\n },\n \"11155931\": {\n \"id\": \"11155931\",\n \"isTestnet\": true,\n \"chainSelector\": 11155931,\n \"name\": \"riseTestnet\",\n \"rpcUrls\": [\n \"https://testnet.riselabs.xyz\"\n ],\n \"nativeCurrency\": {\n \"name\": \"ETH\",\n \"decimals\": 18,\n \"symbol\": \"ETH\"\n },\n \"blockExplorers\": [],\n \"finalityConfirmations\": 0,\n \"minBlockConfirmations\": 1,\n \"deployments\": {}\n }\n}", "import type { Chain, ChainFormatters } from '../../types/chain.js'\nimport type { Assign, Prettify } from '../../types/utils.js'\n\nexport function defineChain<\n formatters extends ChainFormatters,\n const chain extends Chain,\n>(chain: chain): Prettify, chain>> {\n return {\n formatters: undefined,\n fees: undefined,\n serializers: undefined,\n ...chain,\n } as Assign, chain>\n}\n", "import { BaseError } from './base.js'\n\nexport type InvalidDecimalNumberErrorType = InvalidDecimalNumberError & {\n name: 'InvalidDecimalNumberError'\n}\nexport class InvalidDecimalNumberError extends BaseError {\n constructor({ value }: { value: string }) {\n super(`Number \\`${value}\\` is not a valid decimal number.`, {\n name: 'InvalidDecimalNumberError',\n })\n }\n}\n", "import { InvalidDecimalNumberError } from '../../errors/unit.js'\nimport type { ErrorType } from '../../errors/utils.js'\n\nexport type ParseUnitsErrorType = ErrorType\n\n/**\n * Multiplies a string representation of a number by a given exponent of base 10 (10exponent).\n *\n * - Docs: https://viem.sh/docs/utilities/parseUnits\n *\n * @example\n * import { parseUnits } from 'viem'\n *\n * parseUnits('420', 9)\n * // 420000000000n\n */\nexport function parseUnits(value: string, decimals: number) {\n if (!/^(-?)([0-9]*)\\.?([0-9]*)$/.test(value))\n throw new InvalidDecimalNumberError({ value })\n\n let [integer, fraction = '0'] = value.split('.')\n\n const negative = integer.startsWith('-')\n if (negative) integer = integer.slice(1)\n\n // trim trailing zeros.\n fraction = fraction.replace(/(0+)$/, '')\n\n // round off if the fraction is larger than the number of decimals.\n if (decimals === 0) {\n if (Math.round(Number(`.${fraction}`)) === 1)\n integer = `${BigInt(integer) + 1n}`\n fraction = ''\n } else if (fraction.length > decimals) {\n const [left, unit, right] = [\n fraction.slice(0, decimals - 1),\n fraction.slice(decimals - 1, decimals),\n fraction.slice(decimals),\n ]\n\n const rounded = Math.round(Number(`${unit}.${right}`))\n if (rounded > 9)\n fraction = `${BigInt(left) + BigInt(1)}0`.padStart(left.length + 1, '0')\n else fraction = `${left}${rounded}`\n\n if (fraction.length > decimals) {\n fraction = fraction.slice(1)\n integer = `${BigInt(integer) + 1n}`\n }\n\n fraction = fraction.slice(0, decimals)\n } else {\n fraction = fraction.padEnd(decimals, '0')\n }\n\n return BigInt(`${negative ? '-' : ''}${integer}${fraction}`)\n}\n", "// biome-ignore lint/performance/noBarrelFile: entrypoint module\nexport {\n type Abi,\n type AbiFunction,\n type AbiParameter,\n type AbiEvent,\n type AbiStateMutability,\n type AbiParameterKind,\n type AbiParameterToPrimitiveType,\n type Address,\n type Narrow,\n type ParseAbi,\n type ParseAbiItem,\n type ParseAbiParameter,\n type ParseAbiParameters,\n type ResolvedRegister,\n type TypedData,\n type TypedDataDomain,\n type TypedDataParameter,\n CircularReferenceError,\n InvalidAbiParameterError,\n InvalidAbiParametersError,\n InvalidAbiItemError,\n InvalidAbiTypeParameterError,\n InvalidFunctionModifierError,\n InvalidModifierError,\n InvalidParameterError,\n InvalidParenthesisError,\n InvalidSignatureError,\n InvalidStructSignatureError,\n SolidityProtectedKeywordError,\n UnknownTypeError,\n UnknownSignatureError,\n parseAbi,\n parseAbiItem,\n parseAbiParameter,\n parseAbiParameters,\n} from 'abitype'\nexport type {\n BlockOverrides,\n Rpc as RpcBlockOverrides,\n} from 'ox/BlockOverrides'\n\nexport {\n getContract,\n type GetContractErrorType,\n type GetContractParameters,\n type GetContractReturnType,\n} from './actions/getContract.js'\nexport {\n type GetContractEventsErrorType,\n type GetContractEventsParameters,\n type GetContractEventsReturnType,\n} from './actions/public/getContractEvents.js'\nexport {\n type GetEip712DomainErrorType,\n type GetEip712DomainParameters,\n type GetEip712DomainReturnType,\n} from './actions/public/getEip712Domain.js'\nexport {\n type AddChainErrorType,\n type AddChainParameters,\n} from './actions/wallet/addChain.js'\nexport {\n type CallErrorType,\n type CallParameters,\n type CallReturnType,\n} from './actions/public/call.js'\nexport type {\n CreateAccessListParameters,\n CreateAccessListReturnType,\n CreateAccessListErrorType,\n} from './actions/public/createAccessList.js'\nexport type {\n CreateBlockFilterErrorType,\n CreateBlockFilterReturnType,\n} from './actions/public/createBlockFilter.js'\nexport type {\n CreateContractEventFilterErrorType,\n CreateContractEventFilterParameters,\n CreateContractEventFilterReturnType,\n} from './actions/public/createContractEventFilter.js'\nexport type {\n CreateEventFilterErrorType,\n CreateEventFilterParameters,\n CreateEventFilterReturnType,\n} from './actions/public/createEventFilter.js'\nexport type {\n CreatePendingTransactionFilterErrorType,\n CreatePendingTransactionFilterReturnType,\n} from './actions/public/createPendingTransactionFilter.js'\nexport type {\n DeployContractErrorType,\n DeployContractParameters,\n DeployContractReturnType,\n} from './actions/wallet/deployContract.js'\nexport type {\n DropTransactionErrorType,\n DropTransactionParameters,\n} from './actions/test/dropTransaction.js'\nexport type {\n DumpStateErrorType,\n DumpStateReturnType,\n} from './actions/test/dumpState.js'\nexport type {\n GetAutomineErrorType,\n GetAutomineReturnType,\n} from './actions/test/getAutomine.js'\nexport type {\n EstimateContractGasErrorType,\n EstimateContractGasParameters,\n EstimateContractGasReturnType,\n} from './actions/public/estimateContractGas.js'\nexport type {\n EstimateGasErrorType,\n EstimateGasParameters,\n EstimateGasReturnType,\n} from './actions/public/estimateGas.js'\nexport type {\n EstimateFeesPerGasErrorType,\n EstimateFeesPerGasParameters,\n EstimateFeesPerGasReturnType,\n} from './actions/public/estimateFeesPerGas.js'\nexport type {\n EstimateMaxPriorityFeePerGasErrorType,\n EstimateMaxPriorityFeePerGasParameters,\n EstimateMaxPriorityFeePerGasReturnType,\n} from './actions/public/estimateMaxPriorityFeePerGas.js'\nexport type {\n GetAddressesErrorType,\n GetAddressesReturnType,\n} from './actions/wallet/getAddresses.js'\nexport type {\n GetBalanceErrorType,\n GetBalanceParameters,\n GetBalanceReturnType,\n} from './actions/public/getBalance.js'\nexport type {\n GetBlobBaseFeeErrorType,\n GetBlobBaseFeeReturnType,\n} from './actions/public/getBlobBaseFee.js'\nexport type {\n GetBlockNumberErrorType,\n GetBlockNumberParameters,\n GetBlockNumberReturnType,\n} from './actions/public/getBlockNumber.js'\nexport type {\n GetBlockErrorType,\n GetBlockParameters,\n GetBlockReturnType,\n} from './actions/public/getBlock.js'\nexport type {\n GetBlockTransactionCountErrorType,\n GetBlockTransactionCountParameters,\n GetBlockTransactionCountReturnType,\n} from './actions/public/getBlockTransactionCount.js'\nexport type {\n /** @deprecated Use `GetCodeErrorType` instead */\n GetCodeErrorType as GetBytecodeErrorType,\n /** @deprecated Use `GetCodeParameters` instead */\n GetCodeParameters as GetBytecodeParameters,\n /** @deprecated Use `GetCodeReturnType` instead */\n GetCodeReturnType as GetBytecodeReturnType,\n GetCodeErrorType,\n GetCodeParameters,\n GetCodeReturnType,\n} from './actions/public/getCode.js'\nexport type {\n GetChainIdErrorType,\n GetChainIdReturnType,\n} from './actions/public/getChainId.js'\nexport type {\n GetEnsAddressErrorType,\n GetEnsAddressParameters,\n GetEnsAddressReturnType,\n} from './actions/ens/getEnsAddress.js'\nexport type {\n GetEnsAvatarErrorType,\n GetEnsAvatarParameters,\n GetEnsAvatarReturnType,\n} from './actions/ens/getEnsAvatar.js'\nexport type {\n GetEnsNameErrorType,\n GetEnsNameParameters,\n GetEnsNameReturnType,\n} from './actions/ens/getEnsName.js'\nexport type {\n GetEnsResolverErrorType,\n GetEnsResolverParameters,\n GetEnsResolverReturnType,\n} from './actions/ens/getEnsResolver.js'\nexport type {\n GetEnsTextErrorType,\n GetEnsTextParameters,\n GetEnsTextReturnType,\n} from './actions/ens/getEnsText.js'\nexport type {\n GetFeeHistoryErrorType,\n GetFeeHistoryParameters,\n GetFeeHistoryReturnType,\n} from './actions/public/getFeeHistory.js'\nexport type {\n GetFilterChangesErrorType,\n GetFilterChangesParameters,\n GetFilterChangesReturnType,\n} from './actions/public/getFilterChanges.js'\nexport type {\n GetFilterLogsErrorType,\n GetFilterLogsParameters,\n GetFilterLogsReturnType,\n} from './actions/public/getFilterLogs.js'\nexport type {\n GetGasPriceErrorType,\n GetGasPriceReturnType,\n} from './actions/public/getGasPrice.js'\nexport type {\n GetLogsErrorType,\n GetLogsParameters,\n GetLogsReturnType,\n} from './actions/public/getLogs.js'\nexport type {\n GetPermissionsErrorType,\n GetPermissionsReturnType,\n} from './actions/wallet/getPermissions.js'\nexport type {\n GetProofErrorType,\n GetProofParameters,\n GetProofReturnType,\n} from './actions/public/getProof.js'\nexport type {\n GetStorageAtErrorType,\n GetStorageAtParameters,\n GetStorageAtReturnType,\n} from './actions/public/getStorageAt.js'\nexport type {\n GetTransactionConfirmationsErrorType,\n GetTransactionConfirmationsParameters,\n GetTransactionConfirmationsReturnType,\n} from './actions/public/getTransactionConfirmations.js'\nexport type {\n GetTransactionCountErrorType,\n GetTransactionCountParameters,\n GetTransactionCountReturnType,\n} from './actions/public/getTransactionCount.js'\nexport type {\n GetTransactionErrorType,\n GetTransactionParameters,\n GetTransactionReturnType,\n} from './actions/public/getTransaction.js'\nexport type {\n GetTransactionReceiptErrorType,\n GetTransactionReceiptParameters,\n GetTransactionReceiptReturnType,\n} from './actions/public/getTransactionReceipt.js'\nexport type {\n ImpersonateAccountErrorType,\n ImpersonateAccountParameters,\n} from './actions/test/impersonateAccount.js'\nexport type {\n IncreaseTimeErrorType,\n IncreaseTimeParameters,\n} from './actions/test/increaseTime.js'\nexport type {\n LoadStateErrorType,\n LoadStateParameters,\n LoadStateReturnType,\n} from './actions/test/loadState.js'\nexport type { MineErrorType, MineParameters } from './actions/test/mine.js'\nexport type {\n MulticallErrorType,\n MulticallParameters,\n MulticallReturnType,\n} from './actions/public/multicall.js'\nexport type { SnapshotErrorType } from './actions/test/snapshot.js'\nexport type {\n SimulateBlocksParameters,\n SimulateBlocksReturnType,\n SimulateBlocksErrorType,\n} from './actions/public/simulateBlocks.js'\nexport type {\n SimulateCallsParameters,\n SimulateCallsReturnType,\n SimulateCallsErrorType,\n} from './actions/public/simulateCalls.js'\nexport type {\n GetMutabilityAwareValue,\n SimulateContractParameters,\n SimulateContractReturnType,\n SimulateContractErrorType,\n} from './actions/public/simulateContract.js'\nexport type {\n OnBlock,\n OnBlockParameter,\n WatchBlocksErrorType,\n WatchBlocksParameters,\n WatchBlocksReturnType,\n} from './actions/public/watchBlocks.js'\nexport type {\n OnBlockNumberFn,\n OnBlockNumberParameter,\n WatchBlockNumberErrorType,\n WatchBlockNumberParameters,\n WatchBlockNumberReturnType,\n} from './actions/public/watchBlockNumber.js'\nexport type {\n WatchEventOnLogsFn,\n WatchEventOnLogsParameter,\n WatchEventErrorType,\n WatchEventParameters,\n WatchEventReturnType,\n} from './actions/public/watchEvent.js'\nexport type {\n OnTransactionsFn,\n OnTransactionsParameter,\n WatchPendingTransactionsErrorType,\n WatchPendingTransactionsParameters,\n WatchPendingTransactionsReturnType,\n} from './actions/public/watchPendingTransactions.js'\nexport type {\n ReadContractErrorType,\n ReadContractParameters,\n ReadContractReturnType,\n} from './actions/public/readContract.js'\nexport type {\n ReplacementReason,\n ReplacementReturnType,\n WaitForTransactionReceiptErrorType,\n WaitForTransactionReceiptParameters,\n WaitForTransactionReceiptReturnType,\n} from './actions/public/waitForTransactionReceipt.js'\nexport type {\n RequestAddressesErrorType,\n RequestAddressesReturnType,\n} from './actions/wallet/requestAddresses.js'\nexport type {\n RequestPermissionsErrorType,\n RequestPermissionsReturnType,\n RequestPermissionsParameters,\n} from './actions/wallet/requestPermissions.js'\nexport type {\n GetTxpoolContentErrorType,\n GetTxpoolContentReturnType,\n} from './actions/test/getTxpoolContent.js'\nexport type {\n GetTxpoolStatusErrorType,\n GetTxpoolStatusReturnType,\n} from './actions/test/getTxpoolStatus.js'\nexport type {\n InspectTxpoolErrorType,\n InspectTxpoolReturnType,\n} from './actions/test/inspectTxpool.js'\nexport type { RemoveBlockTimestampIntervalErrorType } from './actions/test/removeBlockTimestampInterval.js'\nexport type { ResetErrorType, ResetParameters } from './actions/test/reset.js'\nexport type {\n RevertErrorType,\n RevertParameters,\n} from './actions/test/revert.js'\nexport type {\n SendRawTransactionErrorType,\n SendRawTransactionParameters,\n SendRawTransactionReturnType,\n} from './actions/wallet/sendRawTransaction.js'\nexport type {\n SendTransactionErrorType,\n SendTransactionParameters,\n SendTransactionRequest,\n SendTransactionReturnType,\n} from './actions/wallet/sendTransaction.js'\nexport type {\n SignTransactionErrorType,\n SignTransactionParameters,\n SignTransactionReturnType,\n} from './actions/wallet/signTransaction.js'\nexport type {\n PrepareTransactionRequestErrorType,\n PrepareTransactionRequestParameters,\n PrepareTransactionRequestParameterType,\n PrepareTransactionRequestRequest,\n PrepareTransactionRequestReturnType,\n} from './actions/wallet/prepareTransactionRequest.js'\nexport type {\n SendUnsignedTransactionErrorType,\n SendUnsignedTransactionParameters,\n SendUnsignedTransactionReturnType,\n} from './actions/test/sendUnsignedTransaction.js'\nexport type { SetAutomineErrorType } from './actions/test/setAutomine.js'\nexport type {\n SetBalanceErrorType,\n SetBalanceParameters,\n} from './actions/test/setBalance.js'\nexport type {\n SetBlockGasLimitErrorType,\n SetBlockGasLimitParameters,\n} from './actions/test/setBlockGasLimit.js'\nexport type {\n SetBlockTimestampIntervalErrorType,\n SetBlockTimestampIntervalParameters,\n} from './actions/test/setBlockTimestampInterval.js'\nexport type {\n SetCodeErrorType,\n SetCodeParameters,\n} from './actions/test/setCode.js'\nexport type {\n SetCoinbaseErrorType,\n SetCoinbaseParameters,\n} from './actions/test/setCoinbase.js'\nexport type {\n SetIntervalMiningErrorType,\n SetIntervalMiningParameters,\n} from './actions/test/setIntervalMining.js'\nexport type { SetLoggingEnabledErrorType } from './actions/test/setLoggingEnabled.js'\nexport type {\n SetMinGasPriceErrorType,\n SetMinGasPriceParameters,\n} from './actions/test/setMinGasPrice.js'\nexport type {\n SetNextBlockBaseFeePerGasErrorType,\n SetNextBlockBaseFeePerGasParameters,\n} from './actions/test/setNextBlockBaseFeePerGas.js'\nexport type {\n SetNextBlockTimestampErrorType,\n SetNextBlockTimestampParameters,\n} from './actions/test/setNextBlockTimestamp.js'\nexport type {\n SetNonceErrorType,\n SetNonceParameters,\n} from './actions/test/setNonce.js'\nexport type { SetRpcUrlErrorType } from './actions/test/setRpcUrl.js'\nexport type {\n SetStorageAtErrorType,\n SetStorageAtParameters,\n} from './actions/test/setStorageAt.js'\nexport type {\n SignMessageErrorType,\n SignMessageParameters,\n SignMessageReturnType,\n} from './actions/wallet/signMessage.js'\nexport type {\n SignTypedDataErrorType,\n SignTypedDataParameters,\n SignTypedDataReturnType,\n} from './actions/wallet/signTypedData.js'\nexport type {\n StopImpersonatingAccountErrorType,\n StopImpersonatingAccountParameters,\n} from './actions/test/stopImpersonatingAccount.js'\nexport type {\n SwitchChainErrorType,\n SwitchChainParameters,\n} from './actions/wallet/switchChain.js'\nexport type {\n UninstallFilterErrorType,\n UninstallFilterParameters,\n UninstallFilterReturnType,\n} from './actions/public/uninstallFilter.js'\nexport type {\n WatchAssetErrorType,\n WatchAssetParameters,\n WatchAssetReturnType,\n} from './actions/wallet/watchAsset.js'\nexport type {\n VerifyHashErrorType as VerifyHashActionErrorType,\n VerifyHashParameters as VerifyHashActionParameters,\n VerifyHashReturnType as VerifyHashActionReturnType,\n} from './actions/public/verifyHash.js'\nexport type {\n VerifyTypedDataErrorType as VerifyTypedDataActionErrorType,\n VerifyTypedDataParameters as VerifyTypedDataActionParameters,\n VerifyTypedDataReturnType as VerifyTypedDataActionReturnType,\n} from './actions/public/verifyTypedData.js'\nexport type {\n VerifyMessageErrorType as VerifyMessageActionErrorType,\n VerifyMessageParameters as VerifyMessageActionParameters,\n VerifyMessageReturnType as VerifyMessageActionReturnType,\n} from './actions/public/verifyMessage.js'\nexport type {\n WatchContractEventOnLogsFn,\n WatchContractEventOnLogsParameter,\n WatchContractEventErrorType,\n WatchContractEventParameters,\n WatchContractEventReturnType,\n} from './actions/public/watchContractEvent.js'\nexport type {\n WriteContractErrorType,\n WriteContractParameters,\n WriteContractReturnType,\n} from './actions/wallet/writeContract.js'\nexport type { Call, Calls } from './types/calls.js'\nexport type {\n Chain,\n ChainConfig,\n ChainContract,\n ChainEstimateFeesPerGasFn,\n ChainFees,\n ChainFeesFnParameters,\n ChainFormatter,\n ChainEstimateFeesPerGasFnParameters,\n ChainMaxPriorityFeePerGasFn,\n DeriveChain,\n GetChainParameter,\n ChainFormatters,\n ChainSerializers,\n ExtractChainFormatterExclude,\n ExtractChainFormatterParameters,\n ExtractChainFormatterReturnType,\n} from './types/chain.js'\nexport type { GetTransactionRequestKzgParameter, Kzg } from './types/kzg.js'\nexport {\n type Client,\n type ClientConfig,\n type CreateClientErrorType,\n type MulticallBatchOptions,\n createClient,\n rpcSchema,\n} from './clients/createClient.js'\nexport {\n type CustomTransport,\n type CustomTransportConfig,\n type CustomTransportErrorType,\n custom,\n} from './clients/transports/custom.js'\nexport {\n type FallbackTransport,\n type FallbackTransportConfig,\n type FallbackTransportErrorType,\n fallback,\n shouldThrow,\n} from './clients/transports/fallback.js'\nexport {\n type HttpTransport,\n type HttpTransportConfig,\n type HttpTransportErrorType,\n http,\n} from './clients/transports/http.js'\nexport {\n type PublicClient,\n type PublicClientConfig,\n type CreatePublicClientErrorType,\n createPublicClient,\n} from './clients/createPublicClient.js'\nexport {\n type TestClient,\n type TestClientConfig,\n type CreateTestClientErrorType,\n createTestClient,\n} from './clients/createTestClient.js'\nexport {\n type PublicActions,\n publicActions,\n} from './clients/decorators/public.js'\nexport {\n type TestActions,\n testActions,\n} from './clients/decorators/test.js'\nexport {\n type WalletActions,\n walletActions,\n} from './clients/decorators/wallet.js'\nexport {\n type Transport,\n type TransportConfig,\n type CreateTransportErrorType,\n createTransport,\n} from './clients/transports/createTransport.js'\nexport {\n type WalletClient,\n type WalletClientConfig,\n type CreateWalletClientErrorType,\n createWalletClient,\n} from './clients/createWalletClient.js'\nexport {\n type WebSocketTransport,\n type WebSocketTransportConfig,\n type WebSocketTransportErrorType,\n webSocket,\n} from './clients/transports/webSocket.js'\nexport {\n multicall3Abi,\n erc20Abi,\n erc20Abi_bytes32,\n erc721Abi,\n erc4626Abi,\n universalSignatureValidatorAbi,\n} from './constants/abis.js'\nexport { ethAddress, zeroAddress } from './constants/address.js'\nexport {\n deploylessCallViaBytecodeBytecode,\n deploylessCallViaFactoryBytecode,\n universalSignatureValidatorByteCode,\n} from './constants/contracts.js'\nexport { etherUnits, gweiUnits, weiUnits } from './constants/unit.js'\nexport {\n maxInt8,\n maxInt16,\n maxInt24,\n maxInt32,\n maxInt40,\n maxInt48,\n maxInt56,\n maxInt64,\n maxInt72,\n maxInt80,\n maxInt88,\n maxInt96,\n maxInt104,\n maxInt112,\n maxInt120,\n maxInt128,\n maxInt136,\n maxInt144,\n maxInt152,\n maxInt160,\n maxInt168,\n maxInt176,\n maxInt184,\n maxInt192,\n maxInt200,\n maxInt208,\n maxInt216,\n maxInt224,\n maxInt232,\n maxInt240,\n maxInt248,\n maxInt256,\n maxUint8,\n maxUint16,\n maxUint24,\n maxUint32,\n maxUint40,\n maxUint48,\n maxUint56,\n maxUint64,\n maxUint72,\n maxUint80,\n maxUint88,\n maxUint96,\n maxUint104,\n maxUint112,\n maxUint120,\n maxUint128,\n maxUint136,\n maxUint144,\n maxUint152,\n maxUint160,\n maxUint168,\n maxUint176,\n maxUint184,\n maxUint192,\n maxUint200,\n maxUint208,\n maxUint216,\n maxUint224,\n maxUint232,\n maxUint240,\n maxUint248,\n maxUint256,\n minInt8,\n minInt16,\n minInt24,\n minInt32,\n minInt40,\n minInt48,\n minInt56,\n minInt64,\n minInt72,\n minInt80,\n minInt88,\n minInt96,\n minInt104,\n minInt112,\n minInt120,\n minInt128,\n minInt136,\n minInt144,\n minInt152,\n minInt160,\n minInt168,\n minInt176,\n minInt184,\n minInt192,\n minInt200,\n minInt208,\n minInt216,\n minInt224,\n minInt232,\n minInt240,\n minInt248,\n minInt256,\n} from './constants/number.js'\nexport { zeroHash } from './constants/bytes.js'\nexport { presignMessagePrefix } from './constants/strings.js'\nexport {\n AbiConstructorNotFoundError,\n type AbiConstructorNotFoundErrorType,\n AbiConstructorParamsNotFoundError,\n type AbiConstructorParamsNotFoundErrorType,\n AbiDecodingDataSizeInvalidError,\n type AbiDecodingDataSizeInvalidErrorType,\n AbiDecodingDataSizeTooSmallError,\n type AbiDecodingDataSizeTooSmallErrorType,\n AbiDecodingZeroDataError,\n type AbiDecodingZeroDataErrorType,\n AbiEncodingArrayLengthMismatchError,\n type AbiEncodingArrayLengthMismatchErrorType,\n AbiEncodingLengthMismatchError,\n type AbiEncodingLengthMismatchErrorType,\n AbiEncodingBytesSizeMismatchError,\n type AbiEncodingBytesSizeMismatchErrorType,\n AbiErrorInputsNotFoundError,\n type AbiErrorInputsNotFoundErrorType,\n AbiErrorNotFoundError,\n type AbiErrorNotFoundErrorType,\n AbiErrorSignatureNotFoundError,\n type AbiErrorSignatureNotFoundErrorType,\n AbiEventNotFoundError,\n type AbiEventNotFoundErrorType,\n AbiEventSignatureEmptyTopicsError,\n type AbiEventSignatureEmptyTopicsErrorType,\n AbiEventSignatureNotFoundError,\n type AbiEventSignatureNotFoundErrorType,\n AbiFunctionNotFoundError,\n type AbiFunctionNotFoundErrorType,\n AbiFunctionOutputsNotFoundError,\n type AbiFunctionOutputsNotFoundErrorType,\n AbiFunctionSignatureNotFoundError,\n type AbiFunctionSignatureNotFoundErrorType,\n BytesSizeMismatchError,\n type BytesSizeMismatchErrorType,\n DecodeLogDataMismatch,\n type DecodeLogDataMismatchErrorType,\n DecodeLogTopicsMismatch,\n type DecodeLogTopicsMismatchErrorType,\n InvalidAbiDecodingTypeError,\n type InvalidAbiDecodingTypeErrorType,\n InvalidAbiEncodingTypeError,\n type InvalidAbiEncodingTypeErrorType,\n InvalidArrayError,\n type InvalidArrayErrorType,\n InvalidDefinitionTypeError,\n type InvalidDefinitionTypeErrorType,\n UnsupportedPackedAbiType,\n type UnsupportedPackedAbiTypeErrorType,\n} from './errors/abi.js'\nexport { BaseError, type BaseErrorType, setErrorConfig } from './errors/base.js'\nexport {\n BlockNotFoundError,\n type BlockNotFoundErrorType,\n} from './errors/block.js'\nexport {\n CallExecutionError,\n type CallExecutionErrorType,\n ContractFunctionExecutionError,\n type ContractFunctionExecutionErrorType,\n ContractFunctionRevertedError,\n type ContractFunctionRevertedErrorType,\n ContractFunctionZeroDataError,\n type ContractFunctionZeroDataErrorType,\n RawContractError,\n type RawContractErrorType,\n CounterfactualDeploymentFailedError,\n type CounterfactualDeploymentFailedErrorType,\n} from './errors/contract.js'\nexport {\n BaseFeeScalarError,\n type BaseFeeScalarErrorType,\n Eip1559FeesNotSupportedError,\n type Eip1559FeesNotSupportedErrorType,\n MaxFeePerGasTooLowError,\n type MaxFeePerGasTooLowErrorType,\n} from './errors/fee.js'\nexport {\n ChainDisconnectedError,\n type ChainDisconnectedErrorType,\n InternalRpcError,\n type InternalRpcErrorType,\n InvalidInputRpcError,\n type InvalidInputRpcErrorType,\n InvalidParamsRpcError,\n type InvalidParamsRpcErrorType,\n InvalidRequestRpcError,\n type InvalidRequestRpcErrorType,\n JsonRpcVersionUnsupportedError,\n type JsonRpcVersionUnsupportedErrorType,\n LimitExceededRpcError,\n type LimitExceededRpcErrorType,\n MethodNotFoundRpcError,\n type MethodNotFoundRpcErrorType,\n MethodNotSupportedRpcError,\n type MethodNotSupportedRpcErrorType,\n ParseRpcError,\n type ParseRpcErrorType,\n ProviderDisconnectedError,\n type ProviderDisconnectedErrorType,\n ProviderRpcError,\n type ProviderRpcErrorCode,\n type ProviderRpcErrorType,\n ResourceNotFoundRpcError,\n type ResourceNotFoundRpcErrorType,\n ResourceUnavailableRpcError,\n type ResourceUnavailableRpcErrorType,\n RpcError,\n type RpcErrorType,\n type RpcErrorCode,\n SwitchChainError,\n TransactionRejectedRpcError,\n type TransactionRejectedRpcErrorType,\n UnauthorizedProviderError,\n type UnauthorizedProviderErrorType,\n UnknownRpcError,\n type UnknownRpcErrorType,\n UnsupportedProviderMethodError,\n type UnsupportedProviderMethodErrorType,\n UserRejectedRequestError,\n type UserRejectedRequestErrorType,\n} from './errors/rpc.js'\nexport {\n ChainDoesNotSupportContract,\n type ChainDoesNotSupportContractErrorType,\n ChainMismatchError,\n type ChainMismatchErrorType,\n ChainNotFoundError,\n type ChainNotFoundErrorType,\n ClientChainNotConfiguredError,\n type ClientChainNotConfiguredErrorType,\n InvalidChainIdError,\n type InvalidChainIdErrorType,\n} from './errors/chain.js'\nexport {\n InvalidBytesBooleanError,\n type InvalidBytesBooleanErrorType,\n IntegerOutOfRangeError,\n type IntegerOutOfRangeErrorType,\n InvalidHexBooleanError,\n type InvalidHexBooleanErrorType,\n InvalidHexValueError,\n type InvalidHexValueErrorType,\n SizeOverflowError,\n type SizeOverflowErrorType,\n} from './errors/encoding.js'\nexport {\n type EnsAvatarInvalidMetadataError,\n EnsAvatarUriResolutionError,\n type EnsAvatarInvalidMetadataErrorType,\n EnsAvatarInvalidNftUriError,\n type EnsAvatarInvalidNftUriErrorType,\n EnsAvatarUnsupportedNamespaceError,\n type EnsAvatarUnsupportedNamespaceErrorType,\n type EnsAvatarUriResolutionErrorType,\n} from './errors/ens.js'\nexport {\n type InvalidDecimalNumberErrorType,\n InvalidDecimalNumberError,\n} from './errors/unit.js'\nexport {\n EstimateGasExecutionError,\n type EstimateGasExecutionErrorType,\n} from './errors/estimateGas.js'\nexport {\n ExecutionRevertedError,\n type ExecutionRevertedErrorType,\n FeeCapTooHighError,\n type FeeCapTooHighErrorType,\n FeeCapTooLowError,\n type FeeCapTooLowErrorType,\n InsufficientFundsError,\n type InsufficientFundsErrorType,\n IntrinsicGasTooHighError,\n type IntrinsicGasTooHighErrorType,\n IntrinsicGasTooLowError,\n type IntrinsicGasTooLowErrorType,\n NonceMaxValueError,\n type NonceMaxValueErrorType,\n NonceTooHighError,\n type NonceTooHighErrorType,\n NonceTooLowError,\n type NonceTooLowErrorType,\n TipAboveFeeCapError,\n type TipAboveFeeCapErrorType,\n TransactionTypeNotSupportedError,\n type TransactionTypeNotSupportedErrorType,\n UnknownNodeError,\n type UnknownNodeErrorType,\n} from './errors/node.js'\nexport {\n FilterTypeNotSupportedError,\n type FilterTypeNotSupportedErrorType,\n} from './errors/log.js'\nexport {\n HttpRequestError,\n type HttpRequestErrorType,\n RpcRequestError,\n type RpcRequestErrorType,\n TimeoutError,\n type TimeoutErrorType,\n SocketClosedError,\n type SocketClosedErrorType,\n WebSocketRequestError,\n type WebSocketRequestErrorType,\n} from './errors/request.js'\nexport {\n InvalidAddressError,\n type InvalidAddressErrorType,\n} from './errors/address.js'\nexport {\n FeeConflictError,\n type FeeConflictErrorType,\n InvalidLegacyVError,\n type InvalidLegacyVErrorType,\n InvalidSerializableTransactionError,\n type InvalidSerializableTransactionErrorType,\n InvalidSerializedTransactionError,\n type InvalidSerializedTransactionErrorType,\n InvalidSerializedTransactionTypeError,\n type InvalidSerializedTransactionTypeErrorType,\n InvalidStorageKeySizeError,\n type InvalidStorageKeySizeErrorType,\n TransactionExecutionError,\n type TransactionExecutionErrorType,\n TransactionNotFoundError,\n type TransactionNotFoundErrorType,\n TransactionReceiptNotFoundError,\n type TransactionReceiptNotFoundErrorType,\n WaitForTransactionReceiptTimeoutError,\n type WaitForTransactionReceiptTimeoutErrorType,\n} from './errors/transaction.js'\nexport {\n SizeExceedsPaddingSizeError,\n type SizeExceedsPaddingSizeErrorType,\n SliceOffsetOutOfBoundsError,\n type SliceOffsetOutOfBoundsErrorType,\n} from './errors/data.js'\nexport {\n UrlRequiredError,\n type UrlRequiredErrorType,\n} from './errors/transport.js'\nexport {\n AccountStateConflictError,\n type AccountStateConflictErrorType,\n StateAssignmentConflictError,\n type StateAssignmentConflictErrorType,\n} from './errors/stateOverride.js'\nexport {\n InvalidDomainError,\n type InvalidDomainErrorType,\n InvalidPrimaryTypeError,\n type InvalidPrimaryTypeErrorType,\n InvalidStructTypeError,\n type InvalidStructTypeErrorType,\n} from './errors/typedData.js'\nexport type {\n AbiEventParameterToPrimitiveType,\n AbiEventParametersToPrimitiveTypes,\n AbiEventTopicToPrimitiveType,\n AbiItem,\n AbiItemArgs,\n AbiItemName,\n ContractConstructorArgs,\n ContractEventArgsFromTopics,\n EventDefinition,\n ExtractAbiFunctionForArgs,\n ExtractAbiItem,\n ExtractAbiItemForArgs,\n ExtractAbiItemNames,\n ContractErrorArgs,\n ContractErrorName,\n ContractEventArgs,\n ContractEventName,\n ContractFunctionParameters,\n ContractFunctionReturnType,\n ContractFunctionArgs,\n ContractFunctionName,\n GetEventArgs,\n GetValue,\n LogTopicType,\n MaybeAbiEventName,\n MaybeExtractEventArgsFromAbi,\n UnionWiden,\n Widen,\n} from './types/contract.js'\nexport type {\n AccessList,\n Transaction,\n TransactionBase,\n TransactionEIP1559,\n TransactionEIP2930,\n TransactionEIP4844,\n TransactionEIP7702,\n TransactionLegacy,\n TransactionReceipt,\n TransactionRequest,\n TransactionRequestBase,\n TransactionRequestEIP1559,\n TransactionRequestEIP2930,\n TransactionRequestEIP4844,\n TransactionRequestEIP7702,\n TransactionRequestGeneric,\n TransactionRequestLegacy,\n TransactionSerializable,\n TransactionSerializableBase,\n TransactionSerializableEIP1559,\n TransactionSerializableEIP2930,\n TransactionSerializableEIP4844,\n TransactionSerializableEIP7702,\n TransactionSerializableGeneric,\n TransactionSerializableLegacy,\n TransactionSerialized,\n TransactionSerializedEIP1559,\n TransactionSerializedEIP2930,\n TransactionSerializedEIP4844,\n TransactionSerializedEIP7702,\n TransactionSerializedGeneric,\n TransactionSerializedLegacy,\n TransactionType,\n} from './types/transaction.js'\nexport type {\n Assign,\n Branded,\n Evaluate,\n IsNarrowable,\n IsUndefined,\n IsUnion,\n LooseOmit,\n MaybePartial,\n MaybePromise,\n MaybeRequired,\n Mutable,\n NoInfer,\n NoUndefined,\n Omit,\n Or,\n PartialBy,\n RequiredBy,\n Some,\n UnionEvaluate,\n UnionLooseOmit,\n ValueOf,\n Prettify,\n ExactPartial,\n ExactRequired,\n IsNever,\n OneOf,\n UnionOmit,\n UnionPartialBy,\n UnionPick,\n UnionRequiredBy,\n UnionToTuple,\n} from './types/utils.js'\nexport type {\n Account,\n AccountSource,\n CustomSource,\n HDAccount,\n HDOptions,\n JsonRpcAccount,\n LocalAccount,\n PrivateKeyAccount,\n} from './accounts/types.js'\nexport type { AssetGateway, AssetGatewayUrls } from './types/ens.js'\nexport type {\n Block,\n BlockIdentifier,\n BlockNumber,\n BlockTag,\n Uncle,\n} from './types/block.js'\nexport type {\n ByteArray,\n Hash,\n Hex,\n LogTopic,\n Signature,\n CompactSignature,\n SignableMessage,\n} from './types/misc.js'\nexport type {\n AddEthereumChainParameter,\n BundlerRpcSchema,\n DebugBundlerRpcSchema,\n EIP1193EventMap,\n EIP1193Events,\n EIP1193Parameters,\n EIP1193Provider,\n EIP1193RequestFn,\n EIP1474Methods,\n ProviderRpcErrorType as EIP1193ProviderRpcErrorType,\n ProviderConnectInfo,\n ProviderMessage,\n PublicRpcSchema,\n PaymasterRpcSchema,\n NetworkSync,\n RpcSchema,\n RpcSchemaOverride,\n TestRpcSchema,\n WalletCapabilities,\n WalletCapabilitiesRecord,\n WalletCallReceipt,\n WalletGetCallsStatusReturnType,\n WalletGrantPermissionsParameters,\n WalletGrantPermissionsReturnType,\n WalletSendCallsParameters,\n WalletPermissionCaveat,\n WalletPermission,\n WalletRpcSchema,\n WatchAssetParams,\n} from './types/eip1193.js'\nexport { ProviderRpcError as EIP1193ProviderRpcError } from './types/eip1193.js'\nexport type { BlobSidecar, BlobSidecars } from './types/eip4844.js'\nexport type {\n FeeHistory,\n FeeValues,\n FeeValuesEIP1559,\n FeeValuesEIP4844,\n FeeValuesLegacy,\n FeeValuesType,\n} from './types/fee.js'\nexport type { Filter, FilterType } from './types/filter.js'\nexport type { TypedDataDefinition } from './types/typedData.js'\nexport type { GetTransportConfig, GetPollOptions } from './types/transport.js'\nexport type { Log } from './types/log.js'\nexport type {\n MulticallContracts,\n MulticallResponse,\n MulticallResults,\n} from './types/multicall.js'\nexport type {\n ParseAccount,\n DeriveAccount,\n HDKey,\n} from './types/account.js'\nexport type {\n Authorization,\n AuthorizationList,\n SerializedAuthorization,\n SerializedAuthorizationList,\n SignedAuthorization,\n SignedAuthorizationList,\n} from './types/authorization.js'\nexport type {\n Index,\n Quantity,\n RpcAuthorization,\n RpcAuthorizationList,\n RpcBlock,\n RpcBlockIdentifier,\n RpcBlockNumber,\n RpcFeeHistory,\n RpcFeeValues,\n RpcLog,\n RpcTransaction,\n RpcTransactionReceipt,\n RpcTransactionRequest,\n RpcUncle,\n Status,\n RpcProof,\n RpcAccountStateOverride,\n RpcStateOverride,\n RpcStateMapping,\n} from './types/rpc.js'\nexport type { Withdrawal } from './types/withdrawal.js'\nexport type {\n StateMapping,\n StateOverride,\n} from './types/stateOverride.js'\nexport { labelhash, type LabelhashErrorType } from './utils/ens/labelhash.js'\nexport { namehash, type NamehashErrorType } from './utils/ens/namehash.js'\nexport {\n type FormattedBlock,\n defineBlock,\n type DefineBlockErrorType,\n formatBlock,\n type FormatBlockErrorType,\n} from './utils/formatters/block.js'\nexport { formatLog, type FormatLogErrorType } from './utils/formatters/log.js'\nexport {\n type DecodeAbiParametersErrorType,\n type DecodeAbiParametersReturnType,\n decodeAbiParameters,\n} from './utils/abi/decodeAbiParameters.js'\nexport {\n type DecodeDeployDataErrorType,\n type DecodeDeployDataParameters,\n type DecodeDeployDataReturnType,\n decodeDeployData,\n} from './utils/abi/decodeDeployData.js'\nexport {\n type DecodeErrorResultErrorType,\n type DecodeErrorResultParameters,\n type DecodeErrorResultReturnType,\n decodeErrorResult,\n} from './utils/abi/decodeErrorResult.js'\nexport {\n type DecodeEventLogErrorType,\n type DecodeEventLogParameters,\n type DecodeEventLogReturnType,\n decodeEventLog,\n} from './utils/abi/decodeEventLog.js'\nexport {\n type DecodeFunctionDataErrorType,\n type DecodeFunctionDataParameters,\n type DecodeFunctionDataReturnType,\n decodeFunctionData,\n} from './utils/abi/decodeFunctionData.js'\nexport {\n type DecodeFunctionResultErrorType,\n type DecodeFunctionResultParameters,\n type DecodeFunctionResultReturnType,\n decodeFunctionResult,\n} from './utils/abi/decodeFunctionResult.js'\nexport {\n type EncodeAbiParametersErrorType,\n type EncodeAbiParametersReturnType,\n encodeAbiParameters,\n} from './utils/abi/encodeAbiParameters.js'\nexport {\n type EncodeDeployDataErrorType,\n type EncodeDeployDataParameters,\n type EncodeDeployDataReturnType,\n encodeDeployData,\n} from './utils/abi/encodeDeployData.js'\nexport {\n type EncodeErrorResultErrorType,\n type EncodeErrorResultParameters,\n type EncodeErrorResultReturnType,\n encodeErrorResult,\n} from './utils/abi/encodeErrorResult.js'\nexport {\n type EncodeEventTopicsErrorType,\n type EncodeEventTopicsParameters,\n type EncodeEventTopicsReturnType,\n encodeEventTopics,\n} from './utils/abi/encodeEventTopics.js'\nexport {\n type EncodeFunctionDataErrorType,\n type EncodeFunctionDataParameters,\n type EncodeFunctionDataReturnType,\n encodeFunctionData,\n} from './utils/abi/encodeFunctionData.js'\nexport {\n type PrepareEncodeFunctionDataErrorType,\n type PrepareEncodeFunctionDataParameters,\n type PrepareEncodeFunctionDataReturnType,\n prepareEncodeFunctionData,\n} from './utils/abi/prepareEncodeFunctionData.js'\nexport {\n type EncodeFunctionResultErrorType,\n type EncodeFunctionResultParameters,\n type EncodeFunctionResultReturnType,\n encodeFunctionResult,\n} from './utils/abi/encodeFunctionResult.js'\nexport {\n type ParseEventLogsErrorType,\n type ParseEventLogsParameters,\n type ParseEventLogsReturnType,\n parseEventLogs,\n} from './utils/abi/parseEventLogs.js'\nexport {\n type FormattedTransaction,\n defineTransaction,\n type DefineTransactionErrorType,\n formatTransaction,\n type FormatTransactionErrorType,\n transactionType,\n} from './utils/formatters/transaction.js'\nexport {\n type FormattedTransactionReceipt,\n defineTransactionReceipt,\n type DefineTransactionReceiptErrorType,\n formatTransactionReceipt,\n type FormatTransactionReceiptErrorType,\n} from './utils/formatters/transactionReceipt.js'\nexport {\n type FormattedTransactionRequest,\n defineTransactionRequest,\n type DefineTransactionRequestErrorType,\n formatTransactionRequest,\n type FormatTransactionRequestErrorType,\n rpcTransactionType,\n} from './utils/formatters/transactionRequest.js'\nexport {\n type GetAbiItemErrorType,\n type GetAbiItemParameters,\n type GetAbiItemReturnType,\n getAbiItem,\n} from './utils/abi/getAbiItem.js'\nexport {\n type GetContractAddressOptions,\n type GetCreate2AddressOptions,\n type GetCreate2AddressErrorType,\n type GetCreateAddressOptions,\n type GetCreateAddressErrorType,\n getContractAddress,\n getCreate2Address,\n getCreateAddress,\n} from './utils/address/getContractAddress.js'\nexport {\n type GetSerializedTransactionType,\n type GetSerializedTransactionTypeErrorType,\n getSerializedTransactionType,\n} from './utils/transaction/getSerializedTransactionType.js'\nexport {\n type GetTransactionType,\n type GetTransactionTypeErrorType,\n getTransactionType,\n} from './utils/transaction/getTransactionType.js'\nexport {\n type HashDomainErrorType,\n type HashStructErrorType,\n type HashTypedDataErrorType,\n type HashTypedDataParameters,\n type HashTypedDataReturnType,\n hashDomain,\n hashStruct,\n hashTypedData,\n} from './utils/signature/hashTypedData.js'\nexport {\n type CompactSignatureToSignatureErrorType,\n compactSignatureToSignature,\n} from './utils/signature/compactSignatureToSignature.js'\nexport {\n /** @deprecated Use `ParseCompactSignatureErrorType`. */\n type ParseCompactSignatureErrorType as HexToCompactSignatureErrorType,\n /** @deprecated Use `parseCompactSignature`. */\n parseCompactSignature as hexToCompactSignature,\n type ParseCompactSignatureErrorType,\n parseCompactSignature,\n} from './utils/signature/parseCompactSignature.js'\nexport {\n /** @deprecated Use `ParseSignatureErrorType`. */\n type ParseSignatureErrorType as HexToSignatureErrorType,\n /** @deprecated Use `parseSignature`. */\n parseSignature as hexToSignature,\n type ParseSignatureErrorType,\n parseSignature,\n} from './utils/signature/parseSignature.js'\nexport {\n type RecoverAddressErrorType,\n type RecoverAddressParameters,\n type RecoverAddressReturnType,\n recoverAddress,\n} from './utils/signature/recoverAddress.js'\nexport {\n type RecoverMessageAddressErrorType,\n type RecoverMessageAddressParameters,\n type RecoverMessageAddressReturnType,\n recoverMessageAddress,\n} from './utils/signature/recoverMessageAddress.js'\nexport {\n type RecoverPublicKeyErrorType,\n type RecoverPublicKeyParameters,\n type RecoverPublicKeyReturnType,\n recoverPublicKey,\n} from './utils/signature/recoverPublicKey.js'\nexport {\n type RecoverTransactionAddressErrorType,\n type RecoverTransactionAddressParameters,\n type RecoverTransactionAddressReturnType,\n recoverTransactionAddress,\n} from './utils/signature/recoverTransactionAddress.js'\nexport {\n type RecoverTypedDataAddressErrorType,\n type RecoverTypedDataAddressParameters,\n type RecoverTypedDataAddressReturnType,\n recoverTypedDataAddress,\n} from './utils/signature/recoverTypedDataAddress.js'\nexport {\n type SignatureToCompactSignatureErrorType,\n signatureToCompactSignature,\n} from './utils/signature/signatureToCompactSignature.js'\nexport {\n /** @deprecated Use `SignatureToHexErrorType` instead. */\n type SerializeCompactSignatureErrorType as CompactSignatureToHexErrorType,\n /** @deprecated Use `serializeCompactSignature` instead. */\n serializeCompactSignature as compactSignatureToHex,\n type SerializeCompactSignatureErrorType,\n serializeCompactSignature,\n} from './utils/signature/serializeCompactSignature.js'\nexport {\n /** @deprecated Use `SignatureToHexErrorType` instead. */\n type SerializeSignatureErrorType as SignatureToHexErrorType,\n /** @deprecated Use `serializeSignature` instead. */\n serializeSignature as signatureToHex,\n type SerializeSignatureParameters,\n type SerializeSignatureReturnType,\n type SerializeSignatureErrorType,\n serializeSignature,\n} from './utils/signature/serializeSignature.js'\nexport {\n bytesToRlp,\n type BytesToRlpErrorType,\n hexToRlp,\n type HexToRlpErrorType,\n toRlp,\n type ToRlpErrorType,\n type ToRlpReturnType,\n} from './utils/encoding/toRlp.js'\nexport {\n type VerifyHashErrorType,\n type VerifyHashParameters,\n type VerifyHashReturnType,\n verifyHash,\n} from './utils/signature/verifyHash.js'\nexport {\n type VerifyMessageErrorType,\n type VerifyMessageParameters,\n type VerifyMessageReturnType,\n verifyMessage,\n} from './utils/signature/verifyMessage.js'\nexport {\n type VerifyTypedDataErrorType,\n type VerifyTypedDataParameters,\n type VerifyTypedDataReturnType,\n verifyTypedData,\n} from './utils/signature/verifyTypedData.js'\nexport {\n type ParseErc6492SignatureErrorType,\n type ParseErc6492SignatureParameters,\n type ParseErc6492SignatureReturnType,\n parseErc6492Signature,\n} from './utils/signature/parseErc6492Signature.js'\nexport {\n type IsErc6492SignatureErrorType,\n type IsErc6492SignatureParameters,\n type IsErc6492SignatureReturnType,\n isErc6492Signature,\n} from './utils/signature/isErc6492Signature.js'\nexport {\n type SerializeErc6492SignatureErrorType,\n type SerializeErc6492SignatureParameters,\n type SerializeErc6492SignatureReturnType,\n serializeErc6492Signature,\n} from './utils/signature/serializeErc6492Signature.js'\nexport {\n type AssertRequestErrorType,\n assertRequest,\n} from './utils/transaction/assertRequest.js'\nexport {\n type AssertTransactionEIP1559ErrorType,\n assertTransactionEIP1559,\n type AssertTransactionEIP2930ErrorType,\n assertTransactionEIP2930,\n type AssertTransactionLegacyErrorType,\n assertTransactionLegacy,\n} from './utils/transaction/assertTransaction.js'\nexport {\n type BoolToBytesErrorType,\n type BoolToBytesOpts,\n boolToBytes,\n type HexToBytesErrorType,\n type HexToBytesOpts,\n hexToBytes,\n type NumberToBytesErrorType,\n numberToBytes,\n type StringToBytesErrorType,\n type StringToBytesOpts,\n stringToBytes,\n type ToBytesErrorType,\n type ToBytesParameters,\n toBytes,\n} from './utils/encoding/toBytes.js'\nexport {\n type BoolToHexErrorType,\n type BoolToHexOpts,\n boolToHex,\n type BytesToHexErrorType,\n type BytesToHexOpts,\n bytesToHex,\n type NumberToHexErrorType,\n type NumberToHexOpts,\n numberToHex,\n type StringToHexErrorType,\n type StringToHexOpts,\n stringToHex,\n type ToHexErrorType,\n type ToHexParameters,\n toHex,\n} from './utils/encoding/toHex.js'\nexport {\n type BytesToBigIntErrorType,\n type BytesToBigIntOpts,\n bytesToBigInt,\n type BytesToBoolErrorType,\n type BytesToBoolOpts,\n bytesToBool,\n type BytesToNumberErrorType,\n type BytesToNumberOpts,\n bytesToNumber,\n type BytesToStringErrorType,\n type BytesToStringOpts,\n bytesToString,\n type FromBytesErrorType,\n type FromBytesParameters,\n fromBytes,\n} from './utils/encoding/fromBytes.js'\nexport {\n type CcipRequestParameters,\n type CcipRequestErrorType,\n ccipRequest,\n /** @deprecated Use `ccipRequest`. */\n ccipRequest as ccipFetch,\n type OffchainLookupErrorType,\n offchainLookup,\n offchainLookupAbiItem,\n offchainLookupSignature,\n} from './utils/ccip.js'\nexport {\n type BlobsToCommitmentsErrorType,\n type BlobsToCommitmentsParameters,\n type BlobsToCommitmentsReturnType,\n blobsToCommitments,\n} from './utils/blob/blobsToCommitments.js'\nexport {\n type CommitmentToVersionedHashErrorType,\n type CommitmentToVersionedHashParameters,\n type CommitmentToVersionedHashReturnType,\n commitmentToVersionedHash,\n} from './utils/blob/commitmentToVersionedHash.js'\nexport {\n type CommitmentsToVersionedHashesErrorType,\n type CommitmentsToVersionedHashesParameters,\n type CommitmentsToVersionedHashesReturnType,\n commitmentsToVersionedHashes,\n} from './utils/blob/commitmentsToVersionedHashes.js'\nexport {\n type SidecarsToVersionedHashesErrorType,\n type SidecarsToVersionedHashesParameters,\n type SidecarsToVersionedHashesReturnType,\n sidecarsToVersionedHashes,\n} from './utils/blob/sidecarsToVersionedHashes.js'\nexport {\n type blobsToProofsErrorType,\n type blobsToProofsParameters,\n type blobsToProofsReturnType,\n blobsToProofs,\n} from './utils/blob/blobsToProofs.js'\nexport {\n type FromBlobsErrorType,\n type FromBlobsParameters,\n type FromBlobsReturnType,\n fromBlobs,\n} from './utils/blob/fromBlobs.js'\nexport {\n type ToBlobSidecarsErrorType,\n type ToBlobSidecarsParameters,\n type ToBlobSidecarsReturnType,\n toBlobSidecars,\n} from './utils/blob/toBlobSidecars.js'\nexport {\n type ToBlobsErrorType,\n type ToBlobsParameters,\n type ToBlobsReturnType,\n toBlobs,\n} from './utils/blob/toBlobs.js'\nexport {\n type DefineKzgErrorType,\n type DefineKzgParameters,\n type DefineKzgReturnType,\n defineKzg,\n} from './utils/kzg/defineKzg.js'\nexport {\n type SetupKzgErrorType,\n type SetupKzgParameters,\n type SetupKzgReturnType,\n setupKzg,\n} from './utils/kzg/setupKzg.js'\nexport {\n type ConcatBytesErrorType,\n type ConcatErrorType,\n type ConcatHexErrorType,\n type ConcatReturnType,\n concat,\n concatBytes,\n concatHex,\n} from './utils/data/concat.js'\nexport {\n type AssertCurrentChainErrorType,\n type AssertCurrentChainParameters,\n assertCurrentChain,\n} from './utils/chain/assertCurrentChain.js'\nexport { defineChain } from './utils/chain/defineChain.js'\nexport {\n type ExtractChainErrorType,\n type ExtractChainParameters,\n type ExtractChainReturnType,\n extractChain,\n} from './utils/chain/extractChain.js'\nexport {\n type GetChainContractAddressErrorType,\n getChainContractAddress,\n} from './utils/chain/getChainContractAddress.js'\nexport {\n type EncodePackedErrorType,\n encodePacked,\n} from './utils/abi/encodePacked.js'\nexport {\n type WithRetryErrorType,\n withRetry,\n} from './utils/promise/withRetry.js'\nexport {\n type WithTimeoutErrorType,\n withTimeout,\n} from './utils/promise/withTimeout.js'\nexport {\n type FormatEtherErrorType,\n formatEther,\n} from './utils/unit/formatEther.js'\nexport {\n type FormatGweiErrorType,\n formatGwei,\n} from './utils/unit/formatGwei.js'\nexport {\n type FormatUnitsErrorType,\n formatUnits,\n} from './utils/unit/formatUnits.js'\nexport {\n type FromHexErrorType,\n fromHex,\n type HexToBigIntErrorType,\n hexToBigInt,\n type HexToBoolErrorType,\n hexToBool,\n type HexToNumberErrorType,\n hexToNumber,\n type HexToStringErrorType,\n hexToString,\n} from './utils/encoding/fromHex.js'\nexport {\n type FromRlpErrorType,\n type FromRlpReturnType,\n fromRlp,\n} from './utils/encoding/fromRlp.js'\nexport {\n type ChecksumAddressErrorType,\n type GetAddressErrorType,\n checksumAddress,\n getAddress,\n} from './utils/address/getAddress.js'\nexport {\n type GetContractErrorReturnType,\n getContractError,\n} from './utils/errors/getContractError.js'\nexport {\n type ToEventSelectorErrorType,\n toEventSelector,\n /** @deprecated use `ToEventSelectorErrorType`. */\n type ToEventSelectorErrorType as GetEventSelectorErrorType,\n /** @deprecated use `toEventSelector`. */\n toEventSelector as getEventSelector,\n} from './utils/hash/toEventSelector.js'\nexport {\n type ToFunctionSelectorErrorType,\n toFunctionSelector,\n /** @deprecated use `ToFunctionSelectorErrorType`. */\n type ToFunctionSelectorErrorType as GetFunctionSelectorErrorType,\n /** @deprecated use `toFunctionSelector`. */\n toFunctionSelector as getFunctionSelector,\n} from './utils/hash/toFunctionSelector.js'\nexport {\n type ToEventSignatureErrorType,\n toEventSignature,\n /** @deprecated use `ToEventSignatureErrorType`. */\n type ToEventSignatureErrorType as GetEventSignatureErrorType,\n /** @deprecated use `toEventSignature`. */\n toEventSignature as getEventSignature,\n} from './utils/hash/toEventSignature.js'\nexport {\n type ToFunctionSignatureErrorType,\n toFunctionSignature,\n /** @deprecated use `ToFunctionSignatureErrorType`. */\n type ToFunctionSignatureErrorType as GetFunctionSignatureErrorType,\n /** @deprecated use `toFunctionSignature`. */\n toFunctionSignature as getFunctionSignature,\n} from './utils/hash/toFunctionSignature.js'\nexport {\n type ToEventHashErrorType,\n toEventHash,\n} from './utils/hash/toEventHash.js'\nexport {\n type ToFunctionHashErrorType,\n toFunctionHash,\n} from './utils/hash/toFunctionHash.js'\nexport {\n type HashMessageErrorType,\n hashMessage,\n} from './utils/signature/hashMessage.js'\nexport {\n type ToPrefixedMessageErrorType,\n toPrefixedMessage,\n} from './utils/signature/toPrefixedMessage.js'\nexport {\n type IsAddressOptions,\n type IsAddressErrorType,\n isAddress,\n} from './utils/address/isAddress.js'\nexport {\n type IsAddressEqualReturnType,\n type IsAddressEqualErrorType,\n isAddressEqual,\n} from './utils/address/isAddressEqual.js'\nexport { type IsBytesErrorType, isBytes } from './utils/data/isBytes.js'\nexport { type IsHashErrorType, isHash } from './utils/hash/isHash.js'\nexport { type IsHexErrorType, isHex } from './utils/data/isHex.js'\nexport {\n type Keccak256Hash,\n type Keccak256ErrorType,\n keccak256,\n} from './utils/hash/keccak256.js'\nexport {\n type Sha256Hash,\n type Sha256ErrorType,\n sha256,\n} from './utils/hash/sha256.js'\nexport {\n type Ripemd160Hash,\n type Ripemd160ErrorType,\n ripemd160,\n} from './utils/hash/ripemd160.js'\nexport {\n type PadBytesErrorType,\n type PadErrorType,\n type PadHexErrorType,\n type PadReturnType,\n pad,\n padBytes,\n padHex,\n} from './utils/data/pad.js'\nexport {\n type ParseEtherErrorType,\n parseEther,\n} from './utils/unit/parseEther.js'\nexport { type ParseGweiErrorType, parseGwei } from './utils/unit/parseGwei.js'\nexport {\n type ParseTransactionErrorType,\n type ParseTransactionReturnType,\n parseTransaction,\n} from './utils/transaction/parseTransaction.js'\nexport {\n type ParseUnitsErrorType,\n parseUnits,\n} from './utils/unit/parseUnits.js'\nexport {\n type SerializeAccessListErrorType,\n serializeAccessList,\n} from './utils/transaction/serializeAccessList.js'\nexport {\n serializeTransaction,\n type SerializeTransactionErrorType,\n type SerializedTransactionReturnType,\n type SerializeTransactionFn,\n} from './utils/transaction/serializeTransaction.js'\nexport { type SizeErrorType, size } from './utils/data/size.js'\nexport {\n type SliceBytesErrorType,\n type SliceErrorType,\n type SliceHexErrorType,\n slice,\n sliceBytes,\n sliceHex,\n} from './utils/data/slice.js'\nexport { type StringifyErrorType, stringify } from './utils/stringify.js'\nexport {\n type TrimErrorType,\n type TrimReturnType,\n trim,\n} from './utils/data/trim.js'\nexport {\n type DomainSeparatorErrorType,\n type GetTypesForEIP712DomainErrorType,\n type SerializeTypedDataErrorType,\n type ValidateTypedDataErrorType,\n serializeTypedData,\n validateTypedData,\n domainSeparator,\n getTypesForEIP712Domain,\n} from './utils/typedData.js'\nexport {\n type CreateNonceManagerParameters,\n type NonceManager,\n type NonceManagerSource,\n createNonceManager,\n nonceManager,\n} from './utils/nonceManager.js'\nexport type {\n RpcEstimateUserOperationGasReturnType,\n RpcGetUserOperationByHashReturnType,\n RpcUserOperation,\n RpcUserOperationReceipt,\n RpcUserOperationRequest,\n} from './account-abstraction/types/rpc.js'\n", "import { defineChain } from 'viem';\n\nimport { ChainDefinition } from '../../types/ConceroNetwork';\n\nexport function createViemChain(\n\tchainDefinition: ChainDefinition\n): ReturnType {\n\treturn defineChain({\n\t\tid: chainDefinition.id,\n\t\tname: chainDefinition.name,\n\t\tnativeCurrency: {\n\t\t\tdecimals: 18,\n\t\t\tname: 'eth',\n\t\t\tsymbol: 'eth',\n\t\t},\n\t\trpcUrls: {\n\t\t\tdefault: { http: chainDefinition.rpcUrls },\n\t\t},\n\t\tblockExplorers: chainDefinition.blockExplorer\n\t\t\t? {\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\tname: chainDefinition.blockExplorer.name,\n\t\t\t\t\t\turl: chainDefinition.blockExplorer.url,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: undefined,\n\t\ttestnet: chainDefinition.isTestnet,\n\t});\n}\n", "import process from 'process';\n\nimport { warn } from './log';\n\nfunction getEnvVar(key: string): string | undefined {\n\tconst value = process.env[key];\n\tif (value === undefined || value === '') {\n\t\twarn(`Missing env variable: ${key}`, 'getEnvVar');\n\t\treturn undefined;\n\t}\n\n\treturn value;\n}\n\nexport { getEnvVar };\n", "const networkColors: Record = {\n\tethereum: '\\x1b[30m', // grey\n\tarbitrum: '\\x1b[34m', // blue\n\tpolygon: '\\x1b[35m', // magenta\n\tavalanche: '\\x1b[31m', // red\n\tbase: '\\x1b[36m', // cyan\n\tethereumSepolia: '\\x1b[30m', // grey\n\tarbitrumSepolia: '\\x1b[34m', // blue\n\toptimismSepolia: '\\x1b[31m', // red\n\tpolygonAmoy: '\\x1b[35m', // magenta\n\tavalancheFuji: '\\x1b[31m', // red\n\tbaseSepolia: '\\x1b[36m', // cyan\n\thardhat: '\\x1b[32m', // green\n\tlocalhost: '\\x1b[32m', // green\n};\nconst reset = '\\x1b[0m';\n\nexport function log(message: any, functionName: string, networkName?: string) {\n\tconst greenFill = '\\x1b[32m';\n\tconst network = networkName ? `\\x1b[35m[${networkName}]${reset}` : '';\n\n\tconsole.log(`${network}${greenFill}[${functionName}]${reset}`, message);\n}\n\nexport function warn(message: any, functionName: string) {\n\tconst yellowFill = '\\x1b[33m';\n\n\tconsole.log(`${yellowFill}[${functionName}]${reset}`, message);\n}\n\nexport function err(message: any, functionName: string, networkName?: string) {\n\tconst redFill = '\\x1b[31m';\n\tconst network = networkName\n\t\t? `${networkColors[networkName]}[${networkName}]${reset}`\n\t\t: '';\n\n\tconsole.log(\n\t\t`${network}${redFill}[${functionName}] ERROR:${reset}`,\n\t\tmessage\n\t);\n}\n\nexport default log;\n", "import { getEnvVar } from './getEnvVar';\n\nexport const getTrezorDeployEnabled = () =>\n\tgetEnvVar('TREZOR_DEPLOY_ENABLED') === 'true';\n", "import { NetworkType } from '../networks/types';\nimport { warn } from './log';\n\nexport function getWallet(\n\tchainType: NetworkType,\n\taccountType:\n\t\t| 'proxyDeployer'\n\t\t| 'deployer'\n\t\t| 'operator'\n\t\t| 'priceFeedProxyDeployer',\n\twalletType: 'privateKey' | 'address'\n) {\n\tlet prefix;\n\tlet walletKey;\n\tswitch (accountType) {\n\t\tcase 'proxyDeployer':\n\t\t\tprefix = 'PROXY_DEPLOYER';\n\t\t\tbreak;\n\t\tcase 'deployer':\n\t\t\tprefix = 'DEPLOYER';\n\t\t\tbreak;\n\t\tcase 'operator':\n\t\t\tprefix = 'OPERATOR';\n\t\t\tbreak;\n\t\tcase 'priceFeedProxyDeployer':\n\t\t\tprefix = 'PRICE_FEED_PROXY_DEPLOYER';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown account type: ${accountType}`);\n\t}\n\n\tswitch (walletType) {\n\t\tcase 'privateKey':\n\t\t\twalletKey = 'PRIVATE_KEY';\n\t\t\tbreak;\n\t\tcase 'address':\n\t\t\twalletKey = 'ADDRESS';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown wallet type: ${walletType}`);\n\t}\n\n\t// Determine the environment variable key based on the wallet type\n\tconst envKey = `${chainType.toUpperCase()}_${prefix}_${walletKey}`;\n\tconst walletValue = process.env[envKey];\n\n\tif (!walletValue) {\n\t\twarn(`Missing env variable: ${envKey}`, 'getEnvVar');\n\t}\n\n\treturn walletValue;\n}\n", "import { readFileSync, writeFileSync } from \"fs\";\nimport path from \"path\";\n\nimport { getNetworkEnvKey } from \"../networks/getNetworkEnvKey\";\n\nimport { envPrefixes } from \"../constants/deploymentVariables\";\nimport { ConceroNetworkNames } from \"../../types/ConceroNetwork\";\nimport { EnvFileName, EnvPrefixes } from \"../../types/deploymentVariables\";\nimport log from \"./log\";\n\nexport type ContractPrefix = keyof EnvPrefixes;\n\nexport function updateEnvVariable(key: string, newValue: string, envFileName: EnvFileName) {\n\tconst filePath = path.join(__dirname, `../.env.${envFileName}`);\n\tif (!filePath) throw new Error(`File not found: ${filePath}`);\n\n\tconst envContents = readFileSync(filePath, \"utf8\");\n\tlet lines = envContents.split(/\\r?\\n/);\n\n\tif (!lines.some(line => line.startsWith(`${key}=`))) {\n\t\tlog(`Key ${key} not found in .env file. Adding to ${filePath}`, \"updateEnvVariable\");\n\t\tlines.push(`${key}=${newValue}`);\n\t}\n\n\tconst newLines = lines.map(line => {\n\t\tlet [currentKey, currentValue] = line.split(\"=\");\n\t\tif (currentKey === key) {\n\t\t\treturn `${key}=${newValue}`;\n\t\t}\n\t\treturn line;\n\t});\n\n\twriteFileSync(filePath, newLines.join(\"\\n\"));\n\tprocess.env[key] = newValue;\n}\n\nexport function updateEnvAddress(\n\tprefix: ContractPrefix,\n\tnewValue: string,\n\tenvFileName: EnvFileName,\n\tnetworkPostfix?: ConceroNetworkNames | string,\n): void {\n\tconst searchKey = networkPostfix\n\t\t? `${envPrefixes[prefix]}_${getNetworkEnvKey(networkPostfix)}`\n\t\t: envPrefixes[prefix];\n\n\tupdateEnvVariable(searchKey, newValue, envFileName);\n}\n\nexport default updateEnvVariable;\n", "import type { WaitForTransactionReceiptParameters } from \"viem/actions/public/waitForTransactionReceipt\";\n\nimport { EnvPrefixes } from \"../../types/deploymentVariables\";\nimport { ConceroNetwork } from \"../../types/ConceroNetwork\";\n\nenum ProxyEnum {\n\trouterProxy = \"routerProxy\",\n\tverifierProxy = \"verifierProxy\",\n\tpriceFeedProxy = \"priceFeedProxy\",\n\tcreValidatorLibProxy = \"creValidatorLibProxy\",\n\trelayerLibProxy = \"relayerLibProxy\",\n}\n\nfunction getViemReceiptConfig(chain: ConceroNetwork): Partial {\n\treturn {\n\t\ttimeout: 0,\n\t\tconfirmations: chain.confirmations,\n\t};\n}\n\nconst envPrefixes: EnvPrefixes = {\n\trouter: \"CONCERO_ROUTER\",\n\trouterProxy: \"CONCERO_ROUTER_PROXY\",\n\trouterProxyAdmin: \"CONCERO_ROUTER_PROXY_ADMIN\",\n\tverifier: \"CONCERO_VERIFIER\",\n\tverifierProxy: \"CONCERO_VERIFIER_PROXY\",\n\tverifierProxyAdmin: \"CONCERO_VERIFIER_PROXY_ADMIN\",\n\tpriceFeed: \"CONCERO_PRICE_FEED\",\n\tpriceFeedProxy: \"CONCERO_PRICE_FEED_PROXY\",\n\tpriceFeedProxyAdmin: \"CONCERO_PRICE_FEED_PROXY_ADMIN\",\n\tlpToken: \"LPTOKEN\",\n\tpause: \"CONCERO_PAUSE\",\n\tcreValidatorLibProxy: \"CONCERO_CRE_VALIDATOR_LIB_PROXY\",\n\tcreValidatorLibProxyAdmin: \"CONCERO_CRE_VALIDATOR_LIB_PROXY_ADMIN\",\n\tcreValidatorLib: \"CONCERO_CRE_VALIDATOR_LIB\",\n\trelayerLib: \"CONCERO_RELAYER_LIB\",\n\trelayerLibProxy: \"CONCERO_RELAYER_LIB_PROXY\",\n\trelayerLibProxyAdmin: \"CONCERO_RELAYER_LIB_PROXY_ADMIN\",\n};\n\nconst ADMIN_SLOT = \"0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103\";\nconst ADMIN_ROLE = \"0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42\";\n\nexport {\n\tProxyEnum,\n\tenvPrefixes,\n\tgetViemReceiptConfig,\n\tADMIN_SLOT,\n\tADMIN_ROLE,\n};\n", "import mainnetChains from '@concero/concero-networks/output/chains.mainnet.json';\nimport testnetChains from '@concero/concero-networks/output/chains.testnet.json';\nimport type { Chain } from '@concero/concero-networks/src/types';\nimport { type NetworkType } from '../../types/ConceroNetwork';\n\nimport {\n\tChainDefinition,\n\tConceroNetwork,\n} from '../../types/ConceroNetwork';\nimport { getWallet } from '../utils';\nimport { createViemChain } from '../utils/createViemChain';\nimport { getTrezorDeployEnabled } from '../utils/getTrezorDeployEnabled';\n\nconst mainnetProxyDeployerPK = getWallet(\n\t'mainnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\nconst testnetProxyDeployerPK = getWallet(\n\t'testnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\n\nconst mainnetDeployerPK = getWallet('mainnet', 'deployer', 'privateKey');\nconst testnetDeployerPK = getWallet('testnet', 'deployer', 'privateKey');\n\nconst trezorDeployEnabled = getTrezorDeployEnabled();\n\nconst testnetAccounts = [testnetDeployerPK, testnetProxyDeployerPK];\n\nconst networkTypes: Record = {\n\tmainnet: 'mainnet',\n\ttestnet: 'testnet',\n\tlocalhost: 'localhost',\n};\n\nexport type ConceroMainnetNetworkNames =\n\t(typeof mainnetChains)[keyof typeof mainnetChains]['name'];\nexport type ConceroTestnetNetworkNames =\n\t(typeof testnetChains)[keyof typeof testnetChains]['name'];\n\nfunction createExtendedNetworks>(\n\tchains: T,\n\tnetworkType: NetworkType,\n\taccounts: (string | undefined)[]\n): Record {\n\tconst validAccounts = accounts.filter((acc): acc is string => !!acc);\n\t\n\treturn Object.fromEntries(\n\t\tObject.values(chains).map(chain => {\n\t\t\tconst chainDefinition: ChainDefinition = {\n\t\t\t\tid: parseInt(chain.id),\n\t\t\t\tname: chain.name,\n\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\tisTestnet: chain.isTestnet ?? false,\n\t\t\t\t...(chain.blockExplorers?.[0] && {\n\t\t\t\t\tblockExplorer: {\n\t\t\t\t\t\tname: chain.blockExplorers[0].name,\n\t\t\t\t\t\turl: chain.blockExplorers[0].url,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t};\n\n\t\t\tconst viemChain = createViemChain(chainDefinition);\n\n\t\t\treturn [\n\t\t\t\tchain.name,\n\t\t\t\t{\n\t\t\t\t\tname: chain.name,\n\t\t\t\t\tchainId: parseInt(chain.id),\n\t\t\t\t\ttype: networkType,\n\t\t\t\t\turl: chain.rpcUrls[0] || '',\n\t\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\t\tsaveDeployments: false,\n\t\t\t\t\t...(!trezorDeployEnabled && { accounts: validAccounts }),\n\t\t\t\t\tchainSelector: BigInt(chain.chainSelector),\n\t\t\t\t\tconfirmations: 1,\n\t\t\t\t\tviemChain,\n\t\t\t\t\t...(trezorDeployEnabled && {\n\t\t\t\t\t\ttrezorDerivationPaths: [\n\t\t\t\t\t\t\t[44, 60, 0, 0, 0],\n\t\t\t\t\t\t\t[44, 60, 0, 0, 1],\n\t\t\t\t\t\t],\n\t\t\t\t\t\ttrezorInsecureDerivation: true,\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t];\n\t\t})\n\t) as Record;\n}\n\nexport const testnetNetworks = createExtendedNetworks(\n\ttestnetChains as unknown as Record,\n\tnetworkTypes.testnet,\n\ttestnetAccounts\n);\n\nexport const mainnetNetworks = createExtendedNetworks(\n\tmainnetChains as unknown as Record,\n\tnetworkTypes.mainnet,\n\t[mainnetDeployerPK, mainnetProxyDeployerPK]\n);\n\nexport const conceroNetworks: Record = {\n\t...testnetNetworks,\n\t...mainnetNetworks,\n};\n", "import { HardhatRuntimeEnvironment } from 'hardhat/types';\n\nimport { conceroNetworks } from '../constants/conceroNetworks';\nimport { ContractPrefix, EnvFileName } from '../../types/deploymentVariables';\nimport { getTrezorDeployEnabled, log, updateEnvAddress } from '../utils';\n\nexport interface ITxParams {\n\tgasLimit: bigint;\n}\n\nexport interface IGenericDeployParams {\n\thre: HardhatRuntimeEnvironment;\n\tcontractName: string;\n\tcontractPrefix: ContractPrefix;\n\ttxParams?: Partial;\n}\n\nexport const genericDeploy = async (\n\t{ hre, contractName, contractPrefix, txParams }: IGenericDeployParams,\n\t...contractConstructorArgs: any[]\n) => {\n\tconst [deployer] = await hre.ethers.getSigners();\n\tconst chain = conceroNetworks[hre.network.name];\n\n\tlog(\n\t\t`Deploy ${contractName} from address: ${await deployer.getAddress()}`,\n\t\t'contract deploy',\n\t\tchain.name\n\t);\n\n\tconst contractFactory = await hre.ethers.getContractFactory(contractName);\n\n\tconst deployOverrides = txParams?.gasLimit ? { gasLimit: txParams.gasLimit } : {};\n\n\tconst deployTx = contractFactory.getDeployTransaction(\n\t\t...contractConstructorArgs,\n\t\tdeployOverrides\n\t);\n\n\tconst isTrezorDeployEnabled = getTrezorDeployEnabled();\n\tif (deployTx.data && isTrezorDeployEnabled) {\n\t\tlog(\n\t\t\t`${contractName} input data: ${deployTx.data} \\n size: ${(deployTx.data.length - 2) / 2}`,\n\t\t\t'bytecode',\n\t\t\tchain.name\n\t\t);\n\t}\n\n\tconst contract = await contractFactory.deploy(...contractConstructorArgs, deployOverrides);\n\tawait contract.deploymentTransaction()?.wait();\n\tconst deploymentAddress = await contract.getAddress();\n\n\tif (hre.tenderly) {\n\t\tawait hre.tenderly.verify({ name: contractName, address: deploymentAddress });\n\t}\n\n\tlog(\n\t\t`Deployed at: ${deploymentAddress}`,\n\t\t`deploy ${contractName}`,\n\t\tchain.name\n\t);\n\n\tupdateEnvAddress(\n\t\tcontractPrefix,\n\t\tdeploymentAddress,\n\t\t`deployments.${chain.type}` as EnvFileName,\n\t\tchain.name,\n\t);\n\n\treturn contract.deploymentTransaction()?.hash;\n};\n", "import {\n\tAddress,\n\terc20Abi,\n\tformatUnits,\n\tHash,\n\tparseUnits,\n\tPublicClient,\n\tWalletClient,\n} from 'viem';\n\nexport class TokenSender {\n\tprivate walletClient: WalletClient;\n\tprivate publicClient: PublicClient;\n\n\tconstructor(walletClient: WalletClient, publicClient: PublicClient) {\n\t\tthis.walletClient = walletClient;\n\t\tthis.publicClient = publicClient;\n\t}\n\n\tpublic async sendToken(\n\t\ttokenAddress: Address,\n\t\tamount: string,\n\t\trecipient: Address\n\t): Promise {\n\t\tconst [tokenDecimals, tokenSymbol, tokenBalance] = await Promise.all([\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'decimals',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'symbol',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'balanceOf',\n\t\t\t\targs: [this.walletClient.account?.address!],\n\t\t\t}),\n\t\t]);\n\n\t\tconsole.log(\n\t\t\t`Current ${tokenSymbol} balance ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t);\n\n\t\tif (parseUnits(amount, tokenDecimals) > tokenBalance) {\n\t\t\tthrow new Error(\n\t\t\t\t`Insufficient balance. Required: ${amount}, available: ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t\t);\n\t\t}\n\n\t\tconst txHash = await this.walletClient.writeContract({\n\t\t\taddress: tokenAddress,\n\t\t\tabi: erc20Abi,\n\t\t\tfunctionName: 'transfer',\n\t\t\targs: [recipient, parseUnits(amount, tokenDecimals)],\n\t\t\tchain: this.walletClient.chain,\n\t\t\taccount: this.walletClient.account!,\n\t\t});\n\n\t\tconst { status } = await this.publicClient.waitForTransactionReceipt({\n\t\t\thash: txHash,\n\t\t});\n\n\t\tif (status !== 'success') {\n\t\t\tthrow new Error(`Error sending token. Hash: ${txHash}`);\n\t\t}\n\n\t\tconsole.log(`Token successfully sent. Hash: ${txHash}`);\n\n\t\treturn txHash;\n\t}\n}\n", "import { PublicClient } from 'viem';\n\ntype GasData = {\n\tgasPrice?: string;\n\tmaxFeePerGas?: string;\n\tmaxPriorityFeePerGas?: string;\n};\n\nexport async function getActualGasData(\n\tpublicClient: PublicClient\n): Promise {\n\tconst block = await publicClient.getBlock();\n\n\tconst isEIP1559 = !!block.baseFeePerGas;\n\n\tlet gasPrice = 0n;\n\tlet maxPriorityFeePerGas = 0n;\n\ttry {\n\t\tif (isEIP1559) {\n\t\t\tconst { maxFeePerGas } = await publicClient.estimateFeesPerGas();\n\t\t\tgasPrice = maxFeePerGas;\n\t\t\tmaxPriorityFeePerGas =\n\t\t\t\tawait publicClient.estimateMaxPriorityFeePerGas();\n\t\t} else {\n\t\t\tgasPrice = await publicClient.getGasPrice();\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('Error getting actual gas data:', error);\n\t\treturn {\n\t\t\tgasPrice: '0',\n\t\t\tmaxFeePerGas: '0',\n\t\t\tmaxPriorityFeePerGas: '0',\n\t\t};\n\t}\n\n\tconst gasDataLegacy = {\n\t\tgasPrice: gasPrice.toString(),\n\t};\n\n\tconst gasDataEIP1559 = {\n\t\tmaxFeePerGas: gasPrice.toString(),\n\t\tmaxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n\t};\n\n\tconst gasData: GasData = isEIP1559 ? gasDataEIP1559 : gasDataLegacy;\n\n\treturn gasData;\n}\n", "import { Deployment } from 'hardhat-deploy/types';\nimport { HardhatRuntimeEnvironment } from 'hardhat/types';\nimport { PublicClient } from 'viem';\nimport { getActualGasData } from './getActualGasData';\n\ntype HardhatDeployWrapperArgs = {\n\thre: HardhatRuntimeEnvironment;\n\targs: any[];\n\tpublicClient: PublicClient;\n\tproxy?: boolean;\n\tgasLimit?: number;\n\tlog?: boolean;\n\tlibraries?: {\n\t\t[key: string]: `0x${string}`;\n\t};\n\tskipIfAlreadyDeployed: boolean;\n};\n\nexport async function hardhatDeployWrapper(\n\tcontractName: string,\n\t{\n\t\thre,\n\t\targs,\n\t\tpublicClient,\n\t\tproxy = false,\n\t\tgasLimit,\n\t\tlog = false,\n\t\tlibraries,\n\t\tskipIfAlreadyDeployed = false,\n\t}: HardhatDeployWrapperArgs\n): Promise {\n\tlet actualDeployer;\n\n\tif (proxy) {\n\t\tconst { proxyDeployer } = await hre.getNamedAccounts();\n\t\tactualDeployer = proxyDeployer;\n\t} else {\n\t\tconst { deployer } = await hre.getNamedAccounts();\n\t\tactualDeployer = deployer;\n\t}\n\n\tconst { deploy } = hre.deployments;\n\n\tconst nonce = await publicClient.getTransactionCount({\n\t\taddress: actualDeployer as `0x${string}`,\n\t});\n\n\tconst gasData = await getActualGasData(publicClient);\n\tconst waitConfirmations = hre.network.name.startsWith('ethereum') ? 1 : 3;\n\n\tif (log) {\n\t\tconsole.log(\n\t\t\t`\\x1b[34m[hardhatDeployWrapper]\\x1b[0m\\x1b[35m[args]\\x1b[0m`,\n\t\t\t{\n\t\t\t\tfrom: actualDeployer,\n\t\t\t\targs,\n\t\t\t\tnonce,\n\t\t\t\tgasLimit: gasLimit ? gasLimit : 'auto',\n\t\t\t\tgasData,\n\t\t\t\twaitConfirmations,\n\t\t\t}\n\t\t);\n\t}\n\n\tlet deployment: Deployment;\n\ttry {\n\t\tconsole.log('Starting deployment of:', contractName);\n\t\tdeployment = await deploy(contractName, {\n\t\t\tfrom: actualDeployer,\n\t\t\targs: args,\n\t\t\tlog: true,\n\t\t\tautoMine: true,\n\t\t\tnonce,\n\t\t\twaitConfirmations,\n\t\t\t...(gasLimit ? { gasLimit } : {}),\n\t\t\t...gasData,\n\t\t\t...(libraries ? { libraries } : {}),\n\t\t\tskipIfAlreadyDeployed,\n\t\t});\n\t} catch (error) {\n\t\tconsole.error('Error deploying contract:', error);\n\t\tthrow error;\n\t}\n\n\treturn deployment;\n}\n"], - "mappings": "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", - "names": ["err", "process", "process", "networkTypes", "log"] + "sources": ["../src/types/networkTypes.ts", "../src/utils/createViemChain.ts", "../src/utils/getEnvVar.ts", "../src/utils/log.ts", "../src/utils/formatting.ts", "../src/networks/getNetworkEnvKey.ts", "../src/utils/getTrezorDeployEnabled.ts", "../src/utils/getWallet.ts", "../src/utils/ethersSignerCallContract.ts", "../src/utils/compileContracts.ts", "../src/utils/localhostViemChain.ts", "../src/utils/extractProxyAdminAddress.ts", "../src/utils/createEnvUpdater.ts", "../src/utils/getActualGasData.ts", "../src/utils/getViemClients.ts", "../src/constants/conceroNetworks.ts", "../src/constants/config.ts", "../src/deploy/GenericDeploy.ts", "../src/tokens/TokenSender.ts"], + "sourcesContent": ["import { type NetworkType } from './ConceroNetwork';\n\nexport const networkTypes: Record = {\n\tmainnet: 'mainnet',\n\ttestnet: 'testnet',\n\tlocalhost: 'localhost',\n};\n", "import { defineChain } from 'viem';\n\nimport { type ChainDefinition } from '../types';\n\nexport function createViemChain(\n\tchainDefinition: ChainDefinition\n): ReturnType {\n\treturn defineChain({\n\t\tid: chainDefinition.id,\n\t\tname: chainDefinition.name,\n\t\tnativeCurrency: {\n\t\t\tdecimals: 18,\n\t\t\tname: 'eth',\n\t\t\tsymbol: 'eth',\n\t\t},\n\t\trpcUrls: {\n\t\t\tdefault: { http: chainDefinition.rpcUrls },\n\t\t},\n\t\tblockExplorers: chainDefinition.blockExplorer\n\t\t\t? {\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\tname: chainDefinition.blockExplorer.name,\n\t\t\t\t\t\turl: chainDefinition.blockExplorer.url,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: undefined,\n\t\ttestnet: chainDefinition.isTestnet,\n\t});\n}\n", "import process from 'process';\nimport { Address } from 'viem';\n\nimport { warn } from './log';\nimport { shorten } from './formatting';\nimport { getNetworkEnvKey } from '../networks';\n\nexport function getEnvVar(key: string, defaultValue?: string): string {\n\tconst value = process.env[key];\n\tif (value === undefined || value === '') {\n\t\tif (defaultValue !== undefined) return defaultValue;\n\t\twarn(`Missing env variable: ${key}`, 'getEnvVar');\n\t\treturn '';\n\t}\n\n\treturn value;\n}\n\nexport interface EnvAddressConfig> {\n\tprefixes: TPrefixes;\n}\n\nexport function createEnvAddressGetter>(\n\tconfig: EnvAddressConfig,\n) {\n\tfunction getEnvAddress(\n\t\tprefix: keyof TPrefixes,\n\t\tnetworkName?: string,\n\t): [Address, string] {\n\t\tconst searchKey = networkName\n\t\t\t? `${config.prefixes[prefix]}_${getNetworkEnvKey(networkName)}`\n\t\t\t: config.prefixes[prefix];\n\n\t\tconst value = getEnvVar(searchKey) as Address;\n\t\tconst friendlyName = `${String(prefix)}(${shorten(value)})`\n\n\t\treturn [value, friendlyName];\n\t}\n\n\treturn { getEnvAddress };\n}\n", "const networkColors: Record = {\n\tethereum: '\\x1b[30m', // grey\n\tarbitrum: '\\x1b[34m', // blue\n\tpolygon: '\\x1b[35m', // magenta\n\tavalanche: '\\x1b[31m', // red\n\tbase: '\\x1b[36m', // cyan\n\tethereumSepolia: '\\x1b[30m', // grey\n\tarbitrumSepolia: '\\x1b[34m', // blue\n\toptimismSepolia: '\\x1b[31m', // red\n\tpolygonAmoy: '\\x1b[35m', // magenta\n\tavalancheFuji: '\\x1b[31m', // red\n\tbaseSepolia: '\\x1b[36m', // cyan\n\thardhat: '\\x1b[32m', // green\n\tlocalhost: '\\x1b[32m', // green\n};\nconst reset = '\\x1b[0m';\n\nexport function log(message: any, functionName: string, networkName?: string) {\n\tconst greenFill = '\\x1b[32m';\n\tconst network = networkName ? `\\x1b[35m[${networkName}]${reset}` : '';\n\n\tconsole.log(`${network}${greenFill}[${functionName}]${reset}`, message);\n}\n\nexport function warn(message: any, functionName: string) {\n\tconst yellowFill = '\\x1b[33m';\n\n\tconsole.log(`${yellowFill}[${functionName}]${reset}`, message);\n}\n\nexport function err(message: any, functionName: string, networkName?: string) {\n\tconst redFill = '\\x1b[31m';\n\tconst network = networkName\n\t\t? `${networkColors[networkName]}[${networkName}]${reset}`\n\t\t: '';\n\n\tconsole.log(\n\t\t`${network}${redFill}[${functionName}] ERROR:${reset}`,\n\t\tmessage\n\t);\n}\n\nexport default log;\n", "import { type Address } from \"viem\";\n\nexport function shorten(address: Address) {\n\treturn `${address.slice(0, 6)}...${address.slice(-4)}`;\n}\n\nexport function formatGas(gasAmountWei: bigint) {\n\t// splits gas number with commas like so: 1,000,000\n\treturn gasAmountWei.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n}\n", "/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkEnvKey(networkName: string): string {\n if (!networkName) {\n throw new Error('Network name must be provided');\n }\n return camelCaseToCapsSnakeCase(networkName);\n}\n\n/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkKey(NETWORK_NAME: string): string {\n if (!NETWORK_NAME) {\n throw new Error('Network name must be provided');\n }\n return capsSnakeCaseToCamelCase(NETWORK_NAME);\n}\n\n/**\n * Converts a string from CAPS_SNAKE_CASE to camelCase\n *\n * @param snakeCaseString The string in CAPS_SNAKE_CASE format\n * @returns The string converted to camelCase format\n */\nexport function capsSnakeCaseToCamelCase(snakeCaseString: string): string {\n if (!snakeCaseString) {\n throw new Error('String must be provided');\n }\n\n return snakeCaseString\n .toLowerCase()\n .replace(/_([a-z])/g, (_, char) => char.toUpperCase());\n}\n\n/**\n * Converts a string from camelCase to CAPS_SNAKE_CASE\n *\n * @param camelCaseString The string in camelCase format\n * @returns The string converted to CAPS_SNAKE_CASE format\n */\nexport function camelCaseToCapsSnakeCase(camelCaseString: string): string {\n if (!camelCaseString) {\n throw new Error('String must be provided');\n }\n\n return camelCaseString.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toUpperCase();\n}\n\nexport function getNetworkName(networkEnvKey: string): string {\n if (!networkEnvKey) {\n throw new Error('Network name must be provided');\n }\n\n return networkEnvKey\n .toLowerCase()\n .split('_')\n .map((word, index) =>\n index === 0 ? word : word[0].toUpperCase() + word.slice(1)\n )\n .join('');\n}\n", "import { getEnvVar } from './getEnvVar';\n\nexport const getTrezorDeployEnabled = () =>\n\tgetEnvVar('TREZOR_DEPLOY_ENABLED', 'false') === 'true';\n", "import { type NetworkType } from '../types';\nimport { warn } from './log';\n\nexport function getWallet(\n\tchainType: NetworkType,\n\taccountType:\n\t\t| 'proxyDeployer'\n\t\t| 'deployer'\n\t\t| 'operator',\n\twalletType: 'privateKey' | 'address'\n) {\n\tlet prefix;\n\tlet walletKey;\n\tswitch (accountType) {\n\t\tcase 'proxyDeployer':\n\t\t\tprefix = 'PROXY_DEPLOYER';\n\t\t\tbreak;\n\t\tcase 'deployer':\n\t\t\tprefix = 'DEPLOYER';\n\t\t\tbreak;\n\t\tcase 'operator':\n\t\t\tprefix = 'OPERATOR';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown account type: ${accountType}`);\n\t}\n\n\tswitch (walletType) {\n\t\tcase 'privateKey':\n\t\t\twalletKey = 'PRIVATE_KEY';\n\t\t\tbreak;\n\t\tcase 'address':\n\t\t\twalletKey = 'ADDRESS';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown wallet type: ${walletType}`);\n\t}\n\n\t// Determine the environment variable key based on the wallet type\n\tconst envKey = `${chainType.toUpperCase()}_${prefix}_${walletKey}`;\n\tconst walletValue = process.env[envKey];\n\n\tif (!walletValue) {\n\t\twarn(`Missing env variable: ${envKey}`, 'getEnvVar');\n\t}\n\n\treturn walletValue;\n}\n", "import { HardhatRuntimeEnvironment } from \"hardhat/types\";\nimport { Address, Hash } from \"viem\";\n\nimport { log } from \"./log\";\n\nexport const ethersSignerCallContract = async (\n\thre: HardhatRuntimeEnvironment,\n\tcontract: Address,\n\tabi: any[],\n\tfunctionName: string,\n\t...functionArgs: any[]\n) => {\n\tconst [ethersSigner] = await hre.ethers.getSigners();\n\tconst ethersContract = new hre.ethers.Contract(contract, abi, ethersSigner);\n\tconst unsignedTx = await ethersContract[functionName].populateTransaction(...functionArgs);\n\n\tlog(\n\t\t`Size: ${(unsignedTx.data.length - 2) / 2}, Input data: ${unsignedTx.data}, Address: ${unsignedTx.to}`,\n\t\tfunctionName,\n\t\thre.network.name,\n\t);\n\n\treturn (await ethersSigner.sendTransaction(unsignedTx)).hash as Hash;\n};\n", "/*\nhardhat compile\n --concurrency Number of compilation jobs executed in parallel. Defaults to the number of CPU cores - 1 (default: 9)\n --force Force compilation ignoring cache\n --no-size-contracts Don't size contracts after running this task, even if runOnCompile option is enabled\n --no-typechain Skip Typechain compilation\n --quiet Makes the compilation process less verbose\n */\nimport { execSync } from \"child_process\";\n\ninterface HardhatCompileParams {\n\tconcurrency?: number;\n\tforce?: boolean;\n\tnoSizeContracts?: boolean;\n\tnoTypechain?: boolean;\n\tquiet?: boolean;\n}\n\nexport function compileContracts({ quiet = true, force = false }: HardhatCompileParams) {\n\tconst packageManager = process.env[\"PACKAGE_MANAGER\"] || \"yarn\";\n\tconst command = `${packageManager} compile`;\n\tconst args = [];\n\t// if (concurrency) args.push(`--concurrency ${concurrency}`);\n\t// if (noSizeContracts) args.push(\"--no-size-contracts\");\n\t// if (noTypechain) args.push(\"--no-typechain\");\n\tif (quiet) args.push(\"--quiet\");\n\tif (force) args.push(\"--force\");\n\texecSync(`${command} ${args.join(\" \")}`, { stdio: \"inherit\" });\n}\n", "import { defineChain } from \"viem\";\n\nexport const localhostViemChain = defineChain({\n\tid: Number(process.env.LOCALHOST_FORK_CHAIN_ID),\n\tname: \"localhost\",\n\tnativeCurrency: {\n\t\tdecimals: 18,\n\t\tname: \"eth\",\n\t\tsymbol: \"eth\",\n\t},\n\trpcUrls: {\n\t\tdefault: { http: [process.env.LOCALHOST_RPC_URL ?? \"http://127.0.0.1:8545\"] },\n\t},\n\ttestnet: true,\n});\n\nexport const hardhatViemChain = defineChain({\n\tid: Number(process.env.HARDHAT_CHAIN_ID),\n\tname: \"hardhat\",\n\tnativeCurrency: {\n\t\tdecimals: 18,\n\t\tname: \"eth\",\n\t\tsymbol: \"eth\",\n\t},\n\trpcUrls: {\n\t\tdefault: { http: [process.env.HARDHAT_RPC_URL ?? \"http://127.0.0.1:8545\"] },\n\t},\n\ttestnet: true,\n});\n", "import { ethers } from 'ethers';\n\nexport function extractProxyAdminAddress(receipt: ethers.TransactionReceipt | null): string {\n\tif (!receipt) return ethers.ZeroAddress;\n\n\tconst adminChangedTopic = ethers.id(\"AdminChanged(address,address)\");\n\tconst adminChangedLog = receipt.logs.find((log: ethers.Log) => log.topics[0] === adminChangedTopic);\n\n\tif (!adminChangedLog) return ethers.ZeroAddress;\n\n\ttry {\n\t\tconst abiCoder = ethers.AbiCoder.defaultAbiCoder();\n\t\tconst [, newAdmin] = abiCoder.decode(['address', 'address'], adminChangedLog.data);\n\t\treturn newAdmin;\n\t} catch {\n\t\treturn ethers.ZeroAddress;\n\t}\n}", "import { existsSync, readFileSync, writeFileSync } from \"fs\";\nimport path from \"path\";\nimport { getNetworkEnvKey } from \"../networks/getNetworkEnvKey\";\nimport log from \"./log\";\n\nexport interface EnvUpdaterConfig> {\n\tprefixes: TPrefixes;\n\tbasePath: string;\n}\n\nexport function createEnvUpdater<\n\tTPrefixes extends Record,\n\tTEnvFileName extends string,\n>(config: EnvUpdaterConfig) {\n\tfunction updateEnvVariable(\n\t\tkey: string,\n\t\tnewValue: string,\n\t\tenvFileName: TEnvFileName,\n\t): void {\n\t\tconst filePath = path.join(config.basePath, `.env.${envFileName}`);\n\n\t\tif (!existsSync(filePath)) {\n\t\t\tthrow new Error(`File not found: ${filePath}`);\n\t\t}\n\n\t\tconst envContents = readFileSync(filePath, \"utf8\");\n\t\tlet lines = envContents.split(/\\r?\\n/);\n\n\t\tconst keyExists = lines.some(line => line.startsWith(`${key}=`));\n\n\t\tif (!keyExists) {\n\t\t\tlog(\n\t\t\t\t`Key ${key} not found in .env file. Adding to ${filePath}`,\n\t\t\t\t\"updateEnvVariable\",\n\t\t\t);\n\t\t\tlines.push(`${key}=${newValue}`);\n\t\t} else {\n\t\t\tlines = lines.map(line => {\n\t\t\t\tconst [currentKey] = line.split(\"=\");\n\t\t\t\tif (currentKey === key) {\n\t\t\t\t\treturn `${key}=${newValue}`;\n\t\t\t\t}\n\t\t\t\treturn line;\n\t\t\t});\n\t\t}\n\n\t\twriteFileSync(filePath, lines.join(\"\\n\"));\n\t\tprocess.env[key] = newValue;\n\t}\n\n\tfunction updateEnvAddress(\n\t\tprefix: keyof TPrefixes,\n\t\tnewValue: string,\n\t\tenvFileName: TEnvFileName,\n\t\tnetworkPostfix?: string,\n\t): void {\n\t\tconst searchKey = networkPostfix\n\t\t\t? `${config.prefixes[prefix]}_${getNetworkEnvKey(networkPostfix)}`\n\t\t\t: String(config.prefixes[prefix]);\n\n\t\tupdateEnvVariable(searchKey, newValue, envFileName);\n\t}\n\n\treturn { updateEnvVariable, updateEnvAddress };\n}\n", "import { PublicClient } from 'viem';\n\ntype GasData = {\n\tgasPrice?: string;\n\tmaxFeePerGas?: string;\n\tmaxPriorityFeePerGas?: string;\n};\n\nexport async function getActualGasData(\n\tpublicClient: PublicClient\n): Promise {\n\tconst block = await publicClient.getBlock();\n\n\tconst isEIP1559 = !!block.baseFeePerGas;\n\n\tlet gasPrice = 0n;\n\tlet maxPriorityFeePerGas = 0n;\n\ttry {\n\t\tif (isEIP1559) {\n\t\t\tconst { maxFeePerGas } = await publicClient.estimateFeesPerGas();\n\t\t\tgasPrice = maxFeePerGas;\n\t\t\tmaxPriorityFeePerGas =\n\t\t\t\tawait publicClient.estimateMaxPriorityFeePerGas();\n\t\t} else {\n\t\t\tgasPrice = await publicClient.getGasPrice();\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('Error getting actual gas data:', error);\n\t\treturn {\n\t\t\tgasPrice: '0',\n\t\t\tmaxFeePerGas: '0',\n\t\t\tmaxPriorityFeePerGas: '0',\n\t\t};\n\t}\n\n\tconst gasDataLegacy = {\n\t\tgasPrice: gasPrice.toString(),\n\t};\n\n\tconst gasDataEIP1559 = {\n\t\tmaxFeePerGas: gasPrice.toString(),\n\t\tmaxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n\t};\n\n\tconst gasData: GasData = isEIP1559 ? gasDataEIP1559 : gasDataLegacy;\n\n\treturn gasData;\n}\n", "import {\n\tChain,\n\ttype TestClient,\n\ttype PublicClient,\n\ttype WalletClient,\n\tcreatePublicClient,\n\tcreateTestClient,\n\tcreateWalletClient,\n\tfallback,\n\thttp,\n\tpublicActions,\n\twalletActions,\n\tnonceManager,\n} from \"viem\";\nimport { privateKeyToAccount, type PrivateKeyAccount } from \"viem/accounts\";\n\nimport { type ConceroNetwork, type NetworkType } from \"../types\";\nimport { getWallet } from \"../utils\";\nimport { localhostViemChain } from \"./localhostViemChain\";\nimport { conceroNetworks } from \"../constants/conceroNetworks\";\n\nfunction getClients(\n\tviemChain: Chain,\n\turl: string | undefined,\n\taccount: PrivateKeyAccount = privateKeyToAccount(\n\t\t`0x${process.env.TESTNET_DEPLOYER_PRIVATE_KEY}`,\n\t),\n): {\n\twalletClient: WalletClient;\n\tpublicClient: PublicClient;\n\taccount: PrivateKeyAccount;\n} {\n\tconst publicClient = createPublicClient({ transport: http(url), chain: viemChain });\n\tconst walletClient = createWalletClient({ transport: http(url), chain: viemChain, account });\n\n\treturn { walletClient, publicClient, account };\n}\n\nexport type ExtendedTestClient = TestClient & WalletClient & PublicClient;\n\nfunction getTestClient(account: PrivateKeyAccount): ExtendedTestClient {\n\tconst testClient = createTestClient({\n\t\tchain: localhostViemChain,\n\t\tmode: \"hardhat\",\n\t\ttransport: http(),\n\t\taccount,\n\t})\n\t\t.extend(publicActions)\n\t\t.extend(walletActions);\n\n\treturn testClient as unknown as ExtendedTestClient;\n}\n\nfunction getFallbackClients(\n\tchain: ConceroNetwork,\n\taccount?: PrivateKeyAccount,\n): {\n\twalletClient: WalletClient;\n\tpublicClient: PublicClient;\n\taccount: PrivateKeyAccount;\n} {\n\tif (!account) {\n\t\tswitch (chain.type) {\n\t\t\tcase \"mainnet\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.MAINNET_DEPLOYER_PRIVATE_KEY}`);\n\t\t\t\tbreak;\n\t\t\tcase \"testnet\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.TESTNET_DEPLOYER_PRIVATE_KEY}`, {\n\t\t\t\t\tnonceManager: nonceManager,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"localhost\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.LOCALHOST_DEPLOYER_PRIVATE_KEY}`);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unsupported chain type: ${chain.type}`);\n\t\t}\n\t}\n\n\tconst { viemChain, name } = chain;\n\n\tif (!conceroNetworks[name].rpcUrls.length) {\n\t\tthrow new Error(`No URLs configured for chain: ${name}`);\n\t}\n\n\tconst transport = fallback(\n\t\tconceroNetworks[name].rpcUrls.map(url =>\n\t\t\thttp(url, {\n\t\t\t\ttimeout: 10000,\n\t\t\t\tretryCount: 1,\n\t\t\t\tretryDelay: 250,\n\t\t\t\tonFetchResponse: async response => {\n\t\t\t\t\tif (response.status >= 400) {\n\t\t\t\t\t\tthrow new Error(`HTTP error: ${response.status} ${response.statusText}`);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t}),\n\t\t),\n\t);\n\tconst publicClient = createPublicClient({ transport, chain: viemChain });\n\tconst walletClient = createWalletClient({ transport, chain: viemChain, account });\n\n\treturn { walletClient, publicClient, account };\n}\n\nfunction getViemAccount(\n\tchainType: NetworkType,\n\taccountType: \"proxyDeployer\" | \"deployer\",\n) {\n\tconst privateKey = `0x${getWallet(chainType, accountType, \"privateKey\")}`;\n\n\treturn privateKeyToAccount(privateKey as `0x${string}`, {\n\t\tnonceManager: nonceManager,\n\t});\n}\n\nexport { getClients, getFallbackClients, getTestClient, getViemAccount };\n", "import mainnetChains from '@concero/concero-networks/output/chains.mainnet.json';\nimport testnetChains from '@concero/concero-networks/output/chains.testnet.json';\nimport type { Chain } from '@concero/concero-networks/src/types';\n\nimport {\n\ttype NetworkType,\n\ttype ChainDefinition,\n\ttype ConceroNetwork,\n\tnetworkTypes,\n} from '../types';\nimport { getWallet } from '../utils';\nimport { createViemChain } from '../utils/createViemChain';\nimport { getTrezorDeployEnabled } from '../utils/getTrezorDeployEnabled';\n\nconst mainnetProxyDeployerPK = getWallet(\n\t'mainnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\nconst testnetProxyDeployerPK = getWallet(\n\t'testnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\n\nconst mainnetDeployerPK = getWallet('mainnet', 'deployer', 'privateKey');\nconst testnetDeployerPK = getWallet('testnet', 'deployer', 'privateKey');\n\nconst trezorDeployEnabled = getTrezorDeployEnabled();\n\nconst testnetAccounts = [testnetDeployerPK, testnetProxyDeployerPK];\n\nexport type ConceroMainnetNetworkNames =\n\t(typeof mainnetChains)[keyof typeof mainnetChains]['name'];\nexport type ConceroTestnetNetworkNames =\n\t(typeof testnetChains)[keyof typeof testnetChains]['name'];\n\nfunction createExtendedNetworks>(\n\tchains: T,\n\tnetworkType: NetworkType,\n\taccounts: (string | undefined)[]\n): Record {\n\tconst validAccounts = accounts.filter((acc): acc is string => !!acc);\n\n\treturn Object.fromEntries(\n\t\tObject.values(chains).map(chain => {\n\t\t\tconst chainDefinition: ChainDefinition = {\n\t\t\t\tid: parseInt(chain.id),\n\t\t\t\tname: chain.name,\n\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\tisTestnet: chain.isTestnet ?? false,\n\t\t\t\t...(chain.blockExplorers?.[0] && {\n\t\t\t\t\tblockExplorer: {\n\t\t\t\t\t\tname: chain.blockExplorers[0].name,\n\t\t\t\t\t\turl: chain.blockExplorers[0].url,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t};\n\n\t\t\tconst viemChain = createViemChain(chainDefinition);\n\n\t\t\treturn [\n\t\t\t\tchain.name,\n\t\t\t\t{\n\t\t\t\t\tname: chain.name,\n\t\t\t\t\tchainId: parseInt(chain.id),\n\t\t\t\t\ttype: networkType,\n\t\t\t\t\turl: chain.rpcUrls[0] || '',\n\t\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\t\tsaveDeployments: false,\n\t\t\t\t\t...(!trezorDeployEnabled && { accounts: validAccounts }),\n\t\t\t\t\tchainSelector: BigInt(chain.chainSelector),\n\t\t\t\t\tconfirmations: 1,\n\t\t\t\t\tviemChain,\n\t\t\t\t\t...(trezorDeployEnabled && {\n\t\t\t\t\t\ttrezorDerivationPaths: [\n\t\t\t\t\t\t\t[44, 60, 0, 0, 0],\n\t\t\t\t\t\t\t[44, 60, 0, 0, 1],\n\t\t\t\t\t\t],\n\t\t\t\t\t\ttrezorInsecureDerivation: true,\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t];\n\t\t})\n\t) as Record;\n}\n\nexport const testnetNetworks = createExtendedNetworks(\n\ttestnetChains as unknown as Record,\n\tnetworkTypes.testnet,\n\ttestnetAccounts\n);\n\nexport const mainnetNetworks = createExtendedNetworks(\n\tmainnetChains as unknown as Record,\n\tnetworkTypes.mainnet,\n\t[mainnetDeployerPK, mainnetProxyDeployerPK]\n);\n\nexport const conceroNetworks: Record = {\n\t...testnetNetworks,\n\t...mainnetNetworks,\n};\n", "export const config = {\n DEFAULT_BLOCK_CONFIRMATIONS: 2,\n};\n", "import { HardhatRuntimeEnvironment } from 'hardhat/types';\n\nimport { conceroNetworks } from '../constants/conceroNetworks';\nimport { getTrezorDeployEnabled, log } from '../utils';\nimport { extractProxyAdminAddress } from '../utils/extractProxyAdminAddress';\n\nexport interface ITxParams {\n\tgasLimit: bigint;\n}\n\nexport interface IDeployResult {\n\thash: string;\n\taddress: string;\n\tchainType: string;\n\tchainName: string;\n\tproxyAdminAddress: string;\n}\n\nexport interface IGenericDeployParams {\n\thre: HardhatRuntimeEnvironment;\n\tcontractName: string;\n\ttxParams?: Partial;\n}\n\nexport const genericDeploy = async (\n\t{ hre, contractName, txParams }: IGenericDeployParams,\n\t...contractConstructorArgs: any[]\n): Promise => {\n\tconst [deployer] = await hre.ethers.getSigners();\n\tconst chain = conceroNetworks[hre.network.name];\n\n\tlog(\n\t\t`Deploy ${contractName} from address: ${await deployer.getAddress()}`,\n\t\t'contract deploy',\n\t\tchain.name\n\t);\n\n\tconst contractFactory = await hre.ethers.getContractFactory(contractName);\n\n\tconst deployOverrides = txParams?.gasLimit ? { gasLimit: txParams.gasLimit } : {};\n\n\tconst deployTx = contractFactory.getDeployTransaction(\n\t\t...contractConstructorArgs,\n\t\tdeployOverrides\n\t);\n\n\tconst isTrezorDeployEnabled = getTrezorDeployEnabled();\n\tif (deployTx.data && isTrezorDeployEnabled) {\n\t\tlog(\n\t\t\t`${contractName} input data: ${deployTx.data} \\n size: ${(deployTx.data.length - 2) / 2}`,\n\t\t\t'bytecode',\n\t\t\tchain.name\n\t\t);\n\t}\n\n\tconst contract = await contractFactory.deploy(...contractConstructorArgs, deployOverrides);\n\tconst receipt = await contract.deploymentTransaction()?.wait();\n\tconst deploymentAddress = await contract.getAddress();\n\n\tif (hre.tenderly) {\n\t\tawait hre.tenderly.verify({ name: contractName, address: deploymentAddress });\n\t}\n\n\tlog(\n\t\t`Deployed at: ${deploymentAddress}`,\n\t\t`deploy ${contractName}`,\n\t\tchain.name\n\t);\n\n\treturn {\n\t\thash: contract.deploymentTransaction()?.hash,\n\t\taddress: deploymentAddress,\n\t\tchainName: chain.name,\n\t\tchainType: chain.type,\n\t\tproxyAdminAddress: extractProxyAdminAddress(receipt)\n\t};\n};\n", "import {\n\tAddress,\n\terc20Abi,\n\tformatUnits,\n\tHash,\n\tparseUnits,\n\tPublicClient,\n\tWalletClient,\n} from 'viem';\n\nexport class TokenSender {\n\tprivate walletClient: WalletClient;\n\tprivate publicClient: PublicClient;\n\n\tconstructor(walletClient: WalletClient, publicClient: PublicClient) {\n\t\tthis.walletClient = walletClient;\n\t\tthis.publicClient = publicClient;\n\t}\n\n\tpublic async sendToken(\n\t\ttokenAddress: Address,\n\t\tamount: string,\n\t\trecipient: Address\n\t): Promise {\n\t\tconst [tokenDecimals, tokenSymbol, tokenBalance] = await Promise.all([\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'decimals',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'symbol',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'balanceOf',\n\t\t\t\targs: [this.walletClient.account?.address!],\n\t\t\t}),\n\t\t]);\n\n\t\tconsole.log(\n\t\t\t`Current ${tokenSymbol} balance ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t);\n\n\t\tif (parseUnits(amount, tokenDecimals) > tokenBalance) {\n\t\t\tthrow new Error(\n\t\t\t\t`Insufficient balance. Required: ${amount}, available: ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t\t);\n\t\t}\n\n\t\tconst txHash = await this.walletClient.writeContract({\n\t\t\taddress: tokenAddress,\n\t\t\tabi: erc20Abi,\n\t\t\tfunctionName: 'transfer',\n\t\t\targs: [recipient, parseUnits(amount, tokenDecimals)],\n\t\t\tchain: this.walletClient.chain,\n\t\t\taccount: this.walletClient.account!,\n\t\t});\n\n\t\tconst { status } = await this.publicClient.waitForTransactionReceipt({\n\t\t\thash: txHash,\n\t\t});\n\n\t\tif (status !== 'success') {\n\t\t\tthrow new Error(`Error sending token. Hash: ${txHash}`);\n\t\t}\n\n\t\tconsole.log(`Token successfully sent. Hash: ${txHash}`);\n\n\t\treturn txHash;\n\t}\n}\n"], + "mappings": "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", + "names": ["process", "process", "config", "defineChain", "log", "config"] } diff --git a/dist/types/src/constants/conceroNetworks.d.ts b/dist/types/src/constants/conceroNetworks.d.ts index ae9765c..38bf5f7 100644 --- a/dist/types/src/constants/conceroNetworks.d.ts +++ b/dist/types/src/constants/conceroNetworks.d.ts @@ -1,6 +1,6 @@ import mainnetChains from '@concero/concero-networks/output/chains.mainnet.json'; import testnetChains from '@concero/concero-networks/output/chains.testnet.json'; -import { ConceroNetwork } from '../../types/ConceroNetwork'; +import { type ConceroNetwork } from '../types'; export type ConceroMainnetNetworkNames = (typeof mainnetChains)[keyof typeof mainnetChains]['name']; export type ConceroTestnetNetworkNames = (typeof testnetChains)[keyof typeof testnetChains]['name']; export declare const testnetNetworks: Record; diff --git a/dist/types/src/constants/deploymentVariables.d.ts b/dist/types/src/constants/deploymentVariables.d.ts index 4c73bb4..197be3c 100644 --- a/dist/types/src/constants/deploymentVariables.d.ts +++ b/dist/types/src/constants/deploymentVariables.d.ts @@ -10,6 +10,5 @@ declare enum ProxyEnum { } declare function getViemReceiptConfig(chain: ConceroNetwork): Partial; declare const envPrefixes: EnvPrefixes; -declare const ADMIN_SLOT = "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; declare const ADMIN_ROLE = "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42"; -export { ProxyEnum, envPrefixes, getViemReceiptConfig, ADMIN_SLOT, ADMIN_ROLE, }; +export { ProxyEnum, envPrefixes, getViemReceiptConfig, ADMIN_ROLE, }; diff --git a/dist/types/src/deploy/GenericDeploy.d.ts b/dist/types/src/deploy/GenericDeploy.d.ts index 50c4772..3ffe14c 100644 --- a/dist/types/src/deploy/GenericDeploy.d.ts +++ b/dist/types/src/deploy/GenericDeploy.d.ts @@ -1,12 +1,17 @@ import { HardhatRuntimeEnvironment } from 'hardhat/types'; -import { ContractPrefix } from '../../types/deploymentVariables'; export interface ITxParams { gasLimit: bigint; } +export interface IDeployResult { + hash: string; + address: string; + chainType: string; + chainName: string; + proxyAdminAddress: string; +} export interface IGenericDeployParams { hre: HardhatRuntimeEnvironment; contractName: string; - contractPrefix: ContractPrefix; txParams?: Partial; } -export declare const genericDeploy: ({ hre, contractName, contractPrefix, txParams }: IGenericDeployParams, ...contractConstructorArgs: any[]) => Promise; +export declare const genericDeploy: ({ hre, contractName, txParams }: IGenericDeployParams, ...contractConstructorArgs: any[]) => Promise; diff --git a/dist/types/src/index.d.ts b/dist/types/src/index.d.ts index 33dd77f..a3b44ee 100644 --- a/dist/types/src/index.d.ts +++ b/dist/types/src/index.d.ts @@ -1,7 +1,7 @@ -import { config } from './constants/config'; -import { getNetworkEnvKey, getNetworkKey, networkTypes, type ConceroNetwork, type NetworkType } from './networks'; -import { genericDeploy } from './deploy/GenericDeploy'; -import { TokenSender } from './tokens/TokenSender'; -import { hardhatDeployWrapper } from './deploy/hardhatDeployWrapper'; -export { ConceroNetwork, config, getNetworkEnvKey, getNetworkKey, networkTypes, TokenSender, hardhatDeployWrapper, genericDeploy, }; -export type { NetworkType }; +export * from './types'; +export * from './utils'; +export * from './networks'; +export { config } from './constants/config'; +export { conceroNetworks, testnetNetworks, mainnetNetworks, type ConceroMainnetNetworkNames, type ConceroTestnetNetworkNames, } from './constants/conceroNetworks'; +export { genericDeploy, type IDeployResult, type IGenericDeployParams, type ITxParams } from './deploy/GenericDeploy'; +export { TokenSender } from './tokens/TokenSender'; diff --git a/dist/types/src/networks/index.d.ts b/dist/types/src/networks/index.d.ts index 71551d0..b5fd3b5 100644 --- a/dist/types/src/networks/index.d.ts +++ b/dist/types/src/networks/index.d.ts @@ -1,5 +1,2 @@ -import { getNetworkEnvKey, getNetworkKey } from './getNetworkEnvKey'; -import { networkTypes } from './networkTypes'; -import { type ConceroNetwork, type NetworkType } from './types'; -export { getNetworkEnvKey, getNetworkKey, networkTypes }; -export type { ConceroNetwork, NetworkType }; +export { getNetworkEnvKey, getNetworkKey } from './getNetworkEnvKey'; +export { networkTypes, type ConceroNetwork, type NetworkType } from '../types'; diff --git a/dist/types/src/types/ConceroNetwork.d.ts b/dist/types/src/types/ConceroNetwork.d.ts new file mode 100644 index 0000000..e947f3b --- /dev/null +++ b/dist/types/src/types/ConceroNetwork.d.ts @@ -0,0 +1,41 @@ +import { Chain } from 'viem'; +export type NetworkType = 'mainnet' | 'testnet' | 'localhost'; +export type ConceroNetworkNames = string; +export type ConceroNetwork = { + chainId: number; + name: string; + type: NetworkType; + chainSelector: bigint; + accounts?: string[]; + viemChain: Chain; + confirmations: number; + url: string; + rpcUrls: string[]; + saveDeployments?: boolean; + trezorDerivationPaths?: number[][]; + trezorInsecureDerivation?: boolean; +}; +export interface ChainDefinition { + id: number; + name: string; + rpcUrls: string[]; + blockExplorer?: { + name: string; + url: string; + }; + isTestnet: boolean; +} +export type ConceroLocalNetwork = ConceroNetwork & { + saveDeployments?: boolean; + forking?: { + url: string; + enabled: boolean; + blockNumber?: number; + }; +}; +export type ConceroHardhatNetwork = Omit & { + accounts: Array<{ + privateKey: string; + balance: string; + }>; +}; diff --git a/dist/types/src/types/index.d.ts b/dist/types/src/types/index.d.ts new file mode 100644 index 0000000..64441be --- /dev/null +++ b/dist/types/src/types/index.d.ts @@ -0,0 +1,2 @@ +export { type NetworkType, type ConceroNetwork, type ConceroNetworkNames, type ChainDefinition, type ConceroLocalNetwork, type ConceroHardhatNetwork, } from './ConceroNetwork'; +export { networkTypes } from './networkTypes'; diff --git a/dist/types/src/types/networkTypes.d.ts b/dist/types/src/types/networkTypes.d.ts new file mode 100644 index 0000000..5f173ee --- /dev/null +++ b/dist/types/src/types/networkTypes.d.ts @@ -0,0 +1,2 @@ +import { type NetworkType } from './ConceroNetwork'; +export declare const networkTypes: Record; diff --git a/dist/types/src/utils/compileContracts.d.ts b/dist/types/src/utils/compileContracts.d.ts new file mode 100644 index 0000000..8463b24 --- /dev/null +++ b/dist/types/src/utils/compileContracts.d.ts @@ -0,0 +1,9 @@ +interface HardhatCompileParams { + concurrency?: number; + force?: boolean; + noSizeContracts?: boolean; + noTypechain?: boolean; + quiet?: boolean; +} +export declare function compileContracts({ quiet, force }: HardhatCompileParams): void; +export {}; diff --git a/dist/types/src/utils/createDotEnvLoader.d.ts b/dist/types/src/utils/createDotEnvLoader.d.ts new file mode 100644 index 0000000..8823178 --- /dev/null +++ b/dist/types/src/utils/createDotEnvLoader.d.ts @@ -0,0 +1,6 @@ +export interface DotEnvLoaderConfig { + baseFiles: string[]; + stageFiles?: string[]; + deploymentFiles?: string[]; +} +export declare function createDotEnvLoader(config: DotEnvLoaderConfig): (basePath?: string) => void; diff --git a/dist/types/src/utils/createEnvUpdater.d.ts b/dist/types/src/utils/createEnvUpdater.d.ts new file mode 100644 index 0000000..e65a8bd --- /dev/null +++ b/dist/types/src/utils/createEnvUpdater.d.ts @@ -0,0 +1,8 @@ +export interface EnvUpdaterConfig> { + prefixes: TPrefixes; + basePath: string; +} +export declare function createEnvUpdater, TEnvFileName extends string>(config: EnvUpdaterConfig): { + updateEnvVariable: (key: string, newValue: string, envFileName: TEnvFileName) => void; + updateEnvAddress: (prefix: keyof TPrefixes, newValue: string, envFileName: TEnvFileName, networkPostfix?: string) => void; +}; diff --git a/dist/types/src/utils/createViemChain.d.ts b/dist/types/src/utils/createViemChain.d.ts index 6bdf4bf..0b09564 100644 --- a/dist/types/src/utils/createViemChain.d.ts +++ b/dist/types/src/utils/createViemChain.d.ts @@ -1,3 +1,3 @@ import { defineChain } from 'viem'; -import { ChainDefinition } from '../../types/ConceroNetwork'; +import { type ChainDefinition } from '../types'; export declare function createViemChain(chainDefinition: ChainDefinition): ReturnType; diff --git a/dist/types/src/utils/ethersSignerCallContract.d.ts b/dist/types/src/utils/ethersSignerCallContract.d.ts new file mode 100644 index 0000000..b3e606f --- /dev/null +++ b/dist/types/src/utils/ethersSignerCallContract.d.ts @@ -0,0 +1,3 @@ +import { HardhatRuntimeEnvironment } from "hardhat/types"; +import { Address } from "viem"; +export declare const ethersSignerCallContract: (hre: HardhatRuntimeEnvironment, contract: Address, abi: any[], functionName: string, ...functionArgs: any[]) => Promise<`0x${string}`>; diff --git a/dist/types/src/utils/extractProxyAdminAddress.d.ts b/dist/types/src/utils/extractProxyAdminAddress.d.ts new file mode 100644 index 0000000..f3a81b9 --- /dev/null +++ b/dist/types/src/utils/extractProxyAdminAddress.d.ts @@ -0,0 +1,2 @@ +import { ethers } from 'ethers'; +export declare function extractProxyAdminAddress(receipt: ethers.TransactionReceipt | null): string; diff --git a/dist/types/src/utils/formatting.d.ts b/dist/types/src/utils/formatting.d.ts new file mode 100644 index 0000000..e740890 --- /dev/null +++ b/dist/types/src/utils/formatting.d.ts @@ -0,0 +1,3 @@ +import { type Address } from "viem"; +export declare function shorten(address: Address): string; +export declare function formatGas(gasAmountWei: bigint): string; diff --git a/dist/types/src/utils/getActualGasData.d.ts b/dist/types/src/utils/getActualGasData.d.ts new file mode 100644 index 0000000..738c305 --- /dev/null +++ b/dist/types/src/utils/getActualGasData.d.ts @@ -0,0 +1,8 @@ +import { PublicClient } from 'viem'; +type GasData = { + gasPrice?: string; + maxFeePerGas?: string; + maxPriorityFeePerGas?: string; +}; +export declare function getActualGasData(publicClient: PublicClient): Promise; +export {}; diff --git a/dist/types/src/utils/getEnvVar.d.ts b/dist/types/src/utils/getEnvVar.d.ts index 82fb9b7..c1a70f5 100644 --- a/dist/types/src/utils/getEnvVar.d.ts +++ b/dist/types/src/utils/getEnvVar.d.ts @@ -1,2 +1,8 @@ -declare function getEnvVar(key: string): string | undefined; -export { getEnvVar }; +import { Address } from 'viem'; +export declare function getEnvVar(key: string, defaultValue?: string): string; +export interface EnvAddressConfig> { + prefixes: TPrefixes; +} +export declare function createEnvAddressGetter>(config: EnvAddressConfig): { + getEnvAddress: (prefix: keyof TPrefixes, networkName?: string) => [Address, string]; +}; diff --git a/dist/types/src/utils/getViemClients.d.ts b/dist/types/src/utils/getViemClients.d.ts new file mode 100644 index 0000000..eb2f376 --- /dev/null +++ b/dist/types/src/utils/getViemClients.d.ts @@ -0,0 +1,34 @@ +import { Chain, type TestClient, type PublicClient, type WalletClient } from "viem"; +import { type PrivateKeyAccount } from "viem/accounts"; +import { type ConceroNetwork, type NetworkType } from "../types"; +declare function getClients(viemChain: Chain, url: string | undefined, account?: PrivateKeyAccount): { + walletClient: WalletClient; + publicClient: PublicClient; + account: PrivateKeyAccount; +}; +export type ExtendedTestClient = TestClient & WalletClient & PublicClient; +declare function getTestClient(account: PrivateKeyAccount): ExtendedTestClient; +declare function getFallbackClients(chain: ConceroNetwork, account?: PrivateKeyAccount): { + walletClient: WalletClient; + publicClient: PublicClient; + account: PrivateKeyAccount; +}; +declare function getViemAccount(chainType: NetworkType, accountType: "proxyDeployer" | "deployer"): { + address: import("viem").Address; + nonceManager?: import("viem").NonceManager | undefined; + sign: (parameters: { + hash: import("viem").Hash; + }) => Promise; + signAuthorization: (parameters: import("viem/_types/types/authorization").AuthorizationRequest) => Promise; + signMessage: ({ message }: { + message: import("viem").SignableMessage; + }) => Promise; + signTransaction: = import("viem").SerializeTransactionFn, transaction extends Parameters[0] = Parameters[0]>(transaction: transaction, options?: { + serializer?: serializer | undefined; + } | undefined) => Promise>, import("viem").Hex> extends true ? import("viem").TransactionSerialized> : import("viem").Hex>; + signTypedData: , primaryType extends keyof typedData | "EIP712Domain" = keyof typedData>(parameters: import("viem").TypedDataDefinition) => Promise; + publicKey: import("viem").Hex; + source: "privateKey"; + type: "local"; +}; +export { getClients, getFallbackClients, getTestClient, getViemAccount }; diff --git a/dist/types/src/utils/getWallet.d.ts b/dist/types/src/utils/getWallet.d.ts index 47a83e6..d67fe10 100644 --- a/dist/types/src/utils/getWallet.d.ts +++ b/dist/types/src/utils/getWallet.d.ts @@ -1,2 +1,2 @@ -import { NetworkType } from '../networks/types'; -export declare function getWallet(chainType: NetworkType, accountType: 'proxyDeployer' | 'deployer' | 'operator' | 'priceFeedProxyDeployer', walletType: 'privateKey' | 'address'): string | undefined; +import { type NetworkType } from '../types'; +export declare function getWallet(chainType: NetworkType, accountType: 'proxyDeployer' | 'deployer' | 'operator', walletType: 'privateKey' | 'address'): string | undefined; diff --git a/dist/types/src/utils/index.d.ts b/dist/types/src/utils/index.d.ts index 1522c74..179a524 100644 --- a/dist/types/src/utils/index.d.ts +++ b/dist/types/src/utils/index.d.ts @@ -1,7 +1,13 @@ -import { createViemChain } from './createViemChain'; -import { getEnvVar } from './getEnvVar'; -import { getTrezorDeployEnabled } from './getTrezorDeployEnabled'; -import { getWallet } from './getWallet'; -import { err, log, warn } from './log'; -import { updateEnvAddress } from './updateEnvVariable'; -export { createViemChain, err, getEnvVar, getTrezorDeployEnabled, getWallet, log, warn, updateEnvAddress, }; +export { createViemChain } from './createViemChain'; +export { getEnvVar, createEnvAddressGetter } from './getEnvVar'; +export { getTrezorDeployEnabled } from './getTrezorDeployEnabled'; +export { getWallet } from './getWallet'; +export { err, log, warn } from './log'; +export { shorten, formatGas } from './formatting'; +export { ethersSignerCallContract } from './ethersSignerCallContract'; +export { compileContracts } from './compileContracts'; +export { localhostViemChain } from './localhostViemChain'; +export { extractProxyAdminAddress } from './extractProxyAdminAddress'; +export { createEnvUpdater, type EnvUpdaterConfig } from './createEnvUpdater'; +export { getActualGasData } from './getActualGasData'; +export { getClients, getFallbackClients, getTestClient, getViemAccount, type ExtendedTestClient, } from './getViemClients'; diff --git a/dist/types/src/utils/loadEnvFiles.d.ts b/dist/types/src/utils/loadEnvFiles.d.ts new file mode 100644 index 0000000..8823178 --- /dev/null +++ b/dist/types/src/utils/loadEnvFiles.d.ts @@ -0,0 +1,6 @@ +export interface DotEnvLoaderConfig { + baseFiles: string[]; + stageFiles?: string[]; + deploymentFiles?: string[]; +} +export declare function createDotEnvLoader(config: DotEnvLoaderConfig): (basePath?: string) => void; diff --git a/dist/types/src/utils/localhostViemChain.d.ts b/dist/types/src/utils/localhostViemChain.d.ts new file mode 100644 index 0000000..02239c8 --- /dev/null +++ b/dist/types/src/utils/localhostViemChain.d.ts @@ -0,0 +1,82 @@ +export declare const localhostViemChain: { + blockExplorers?: { + [key: string]: { + name: string; + url: string; + apiUrl?: string | undefined; + }; + default: { + name: string; + url: string; + apiUrl?: string | undefined; + }; + } | undefined | undefined; + contracts?: { + [x: string]: import("viem").ChainContract | { + [sourceId: number]: import("viem").ChainContract | undefined; + } | undefined; + ensRegistry?: import("viem").ChainContract | undefined; + ensUniversalResolver?: import("viem").ChainContract | undefined; + multicall3?: import("viem").ChainContract | undefined; + universalSignatureVerifier?: import("viem").ChainContract | undefined; + } | undefined; + id: number; + name: "localhost"; + nativeCurrency: { + readonly decimals: 18; + readonly name: "eth"; + readonly symbol: "eth"; + }; + rpcUrls: { + readonly default: { + readonly http: readonly [string]; + }; + }; + sourceId?: number | undefined | undefined; + testnet: true; + custom?: Record | undefined; + fees?: import("viem").ChainFees | undefined; + formatters?: undefined; + serializers?: import("viem").ChainSerializers | undefined; +}; +export declare const hardhatViemChain: { + blockExplorers?: { + [key: string]: { + name: string; + url: string; + apiUrl?: string | undefined; + }; + default: { + name: string; + url: string; + apiUrl?: string | undefined; + }; + } | undefined | undefined; + contracts?: { + [x: string]: import("viem").ChainContract | { + [sourceId: number]: import("viem").ChainContract | undefined; + } | undefined; + ensRegistry?: import("viem").ChainContract | undefined; + ensUniversalResolver?: import("viem").ChainContract | undefined; + multicall3?: import("viem").ChainContract | undefined; + universalSignatureVerifier?: import("viem").ChainContract | undefined; + } | undefined; + id: number; + name: "hardhat"; + nativeCurrency: { + readonly decimals: 18; + readonly name: "eth"; + readonly symbol: "eth"; + }; + rpcUrls: { + readonly default: { + readonly http: readonly [string]; + }; + }; + sourceId?: number | undefined | undefined; + testnet: true; + custom?: Record | undefined; + fees?: import("viem").ChainFees | undefined; + formatters?: undefined; + serializers?: import("viem").ChainSerializers | undefined; +}; diff --git a/dist/types/types/networkTypes.d.ts b/dist/types/types/networkTypes.d.ts new file mode 100644 index 0000000..5f173ee --- /dev/null +++ b/dist/types/types/networkTypes.d.ts @@ -0,0 +1,2 @@ +import { type NetworkType } from './ConceroNetwork'; +export declare const networkTypes: Record; diff --git a/hardhat.d.ts b/hardhat.d.ts new file mode 100644 index 0000000..72747b4 --- /dev/null +++ b/hardhat.d.ts @@ -0,0 +1,9 @@ +import 'hardhat/types/runtime'; + +declare module 'hardhat/types/runtime' { + interface HardhatRuntimeEnvironment { + tenderly?: { + verify(params: { name: string; address: string }): Promise; + }; + } +} diff --git a/package.json b/package.json index c36ed18..0af8580 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,9 @@ "types": "./dist/types/src/index.d.ts", "require": "./dist/index.cjs.js", "import": "./dist/index.esm.js" + }, + "./types": { + "types": "./dist/types/src/types/index.d.ts" } }, "files": [ @@ -29,8 +32,8 @@ "node": ">=18" }, "scripts": { - "build:cjs": "esbuild ./src/index.ts --bundle --platform=node --format=cjs --sourcemap --outfile=dist/index.cjs.js", - "build:esm": "esbuild ./src/index.ts --bundle --platform=node --format=esm --sourcemap --outfile=dist/index.esm.js", + "build:cjs": "esbuild ./src/index.ts --bundle --platform=node --format=cjs --sourcemap --external:viem --external:ethers --external:hardhat --external:hardhat-deploy --external:@concero/concero-networks --outfile=dist/index.cjs.js", + "build:esm": "esbuild ./src/index.ts --bundle --platform=node --format=esm --sourcemap --external:viem --external:ethers --external:hardhat --external:hardhat-deploy --external:@concero/concero-networks --outfile=dist/index.esm.js", "build": "npm run build:types && npm run build:cjs && npm run build:esm", "build:types": "tsc --project tsconfig.json", "lint": "eslint --config .eslint.config.mjs", diff --git a/src/constants/conceroNetworks.ts b/src/constants/conceroNetworks.ts index 26c202a..8bda9ce 100644 --- a/src/constants/conceroNetworks.ts +++ b/src/constants/conceroNetworks.ts @@ -1,12 +1,13 @@ import mainnetChains from '@concero/concero-networks/output/chains.mainnet.json'; import testnetChains from '@concero/concero-networks/output/chains.testnet.json'; import type { Chain } from '@concero/concero-networks/src/types'; -import { type NetworkType } from '../../types/ConceroNetwork'; import { - ChainDefinition, - ConceroNetwork, -} from '../../types/ConceroNetwork'; + type NetworkType, + type ChainDefinition, + type ConceroNetwork, + networkTypes, +} from '../types'; import { getWallet } from '../utils'; import { createViemChain } from '../utils/createViemChain'; import { getTrezorDeployEnabled } from '../utils/getTrezorDeployEnabled'; @@ -29,12 +30,6 @@ const trezorDeployEnabled = getTrezorDeployEnabled(); const testnetAccounts = [testnetDeployerPK, testnetProxyDeployerPK]; -const networkTypes: Record = { - mainnet: 'mainnet', - testnet: 'testnet', - localhost: 'localhost', -}; - export type ConceroMainnetNetworkNames = (typeof mainnetChains)[keyof typeof mainnetChains]['name']; export type ConceroTestnetNetworkNames = @@ -46,7 +41,7 @@ function createExtendedNetworks>( accounts: (string | undefined)[] ): Record { const validAccounts = accounts.filter((acc): acc is string => !!acc); - + return Object.fromEntries( Object.values(chains).map(chain => { const chainDefinition: ChainDefinition = { diff --git a/src/constants/deploymentVariables.ts b/src/constants/deploymentVariables.ts deleted file mode 100644 index b9767af..0000000 --- a/src/constants/deploymentVariables.ts +++ /dev/null @@ -1,50 +0,0 @@ -import type { WaitForTransactionReceiptParameters } from "viem/actions/public/waitForTransactionReceipt"; - -import { EnvPrefixes } from "../../types/deploymentVariables"; -import { ConceroNetwork } from "../../types/ConceroNetwork"; - -enum ProxyEnum { - routerProxy = "routerProxy", - verifierProxy = "verifierProxy", - priceFeedProxy = "priceFeedProxy", - creValidatorLibProxy = "creValidatorLibProxy", - relayerLibProxy = "relayerLibProxy", -} - -function getViemReceiptConfig(chain: ConceroNetwork): Partial { - return { - timeout: 0, - confirmations: chain.confirmations, - }; -} - -const envPrefixes: EnvPrefixes = { - router: "CONCERO_ROUTER", - routerProxy: "CONCERO_ROUTER_PROXY", - routerProxyAdmin: "CONCERO_ROUTER_PROXY_ADMIN", - verifier: "CONCERO_VERIFIER", - verifierProxy: "CONCERO_VERIFIER_PROXY", - verifierProxyAdmin: "CONCERO_VERIFIER_PROXY_ADMIN", - priceFeed: "CONCERO_PRICE_FEED", - priceFeedProxy: "CONCERO_PRICE_FEED_PROXY", - priceFeedProxyAdmin: "CONCERO_PRICE_FEED_PROXY_ADMIN", - lpToken: "LPTOKEN", - pause: "CONCERO_PAUSE", - creValidatorLibProxy: "CONCERO_CRE_VALIDATOR_LIB_PROXY", - creValidatorLibProxyAdmin: "CONCERO_CRE_VALIDATOR_LIB_PROXY_ADMIN", - creValidatorLib: "CONCERO_CRE_VALIDATOR_LIB", - relayerLib: "CONCERO_RELAYER_LIB", - relayerLibProxy: "CONCERO_RELAYER_LIB_PROXY", - relayerLibProxyAdmin: "CONCERO_RELAYER_LIB_PROXY_ADMIN", -}; - -const ADMIN_SLOT = "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103"; -const ADMIN_ROLE = "0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42"; - -export { - ProxyEnum, - envPrefixes, - getViemReceiptConfig, - ADMIN_SLOT, - ADMIN_ROLE, -}; diff --git a/src/deploy/GenericDeploy.ts b/src/deploy/GenericDeploy.ts index 519a71f..d34cda8 100644 --- a/src/deploy/GenericDeploy.ts +++ b/src/deploy/GenericDeploy.ts @@ -1,24 +1,31 @@ import { HardhatRuntimeEnvironment } from 'hardhat/types'; import { conceroNetworks } from '../constants/conceroNetworks'; -import { ContractPrefix, EnvFileName } from '../../types/deploymentVariables'; -import { getTrezorDeployEnabled, log, updateEnvAddress } from '../utils'; +import { getTrezorDeployEnabled, log } from '../utils'; +import { extractProxyAdminAddress } from '../utils/extractProxyAdminAddress'; export interface ITxParams { gasLimit: bigint; } +export interface IDeployResult { + hash: string; + address: string; + chainType: string; + chainName: string; + proxyAdminAddress: string; +} + export interface IGenericDeployParams { hre: HardhatRuntimeEnvironment; contractName: string; - contractPrefix: ContractPrefix; txParams?: Partial; } export const genericDeploy = async ( - { hre, contractName, contractPrefix, txParams }: IGenericDeployParams, + { hre, contractName, txParams }: IGenericDeployParams, ...contractConstructorArgs: any[] -) => { +): Promise => { const [deployer] = await hre.ethers.getSigners(); const chain = conceroNetworks[hre.network.name]; @@ -47,7 +54,7 @@ export const genericDeploy = async ( } const contract = await contractFactory.deploy(...contractConstructorArgs, deployOverrides); - await contract.deploymentTransaction()?.wait(); + const receipt = await contract.deploymentTransaction()?.wait(); const deploymentAddress = await contract.getAddress(); if (hre.tenderly) { @@ -60,12 +67,11 @@ export const genericDeploy = async ( chain.name ); - updateEnvAddress( - contractPrefix, - deploymentAddress, - `deployments.${chain.type}` as EnvFileName, - chain.name, - ); - - return contract.deploymentTransaction()?.hash; + return { + hash: contract.deploymentTransaction()?.hash, + address: deploymentAddress, + chainName: chain.name, + chainType: chain.type, + proxyAdminAddress: extractProxyAdminAddress(receipt) + }; }; diff --git a/src/deploy/hardhatDeployWrapper.ts b/src/deploy/hardhatDeployWrapper.ts deleted file mode 100644 index 0443886..0000000 --- a/src/deploy/hardhatDeployWrapper.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { Deployment } from 'hardhat-deploy/types'; -import { HardhatRuntimeEnvironment } from 'hardhat/types'; -import { PublicClient } from 'viem'; -import { getActualGasData } from './getActualGasData'; - -type HardhatDeployWrapperArgs = { - hre: HardhatRuntimeEnvironment; - args: any[]; - publicClient: PublicClient; - proxy?: boolean; - gasLimit?: number; - log?: boolean; - libraries?: { - [key: string]: `0x${string}`; - }; - skipIfAlreadyDeployed: boolean; -}; - -export async function hardhatDeployWrapper( - contractName: string, - { - hre, - args, - publicClient, - proxy = false, - gasLimit, - log = false, - libraries, - skipIfAlreadyDeployed = false, - }: HardhatDeployWrapperArgs -): Promise { - let actualDeployer; - - if (proxy) { - const { proxyDeployer } = await hre.getNamedAccounts(); - actualDeployer = proxyDeployer; - } else { - const { deployer } = await hre.getNamedAccounts(); - actualDeployer = deployer; - } - - const { deploy } = hre.deployments; - - const nonce = await publicClient.getTransactionCount({ - address: actualDeployer as `0x${string}`, - }); - - const gasData = await getActualGasData(publicClient); - const waitConfirmations = hre.network.name.startsWith('ethereum') ? 1 : 3; - - if (log) { - console.log( - `\x1b[34m[hardhatDeployWrapper]\x1b[0m\x1b[35m[args]\x1b[0m`, - { - from: actualDeployer, - args, - nonce, - gasLimit: gasLimit ? gasLimit : 'auto', - gasData, - waitConfirmations, - } - ); - } - - let deployment: Deployment; - try { - console.log('Starting deployment of:', contractName); - deployment = await deploy(contractName, { - from: actualDeployer, - args: args, - log: true, - autoMine: true, - nonce, - waitConfirmations, - ...(gasLimit ? { gasLimit } : {}), - ...gasData, - ...(libraries ? { libraries } : {}), - skipIfAlreadyDeployed, - }); - } catch (error) { - console.error('Error deploying contract:', error); - throw error; - } - - return deployment; -} diff --git a/src/index.ts b/src/index.ts index 16ff46e..22d6346 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,25 +1,24 @@ -import { config } from './constants/config'; -import { - getNetworkEnvKey, - getNetworkKey, - networkTypes, - type ConceroNetwork, - type NetworkType, -} from './networks'; -import { genericDeploy } from './deploy/GenericDeploy'; +// Types +export * from './types'; -import { TokenSender } from './tokens/TokenSender'; +// Utils +export * from './utils'; -import { hardhatDeployWrapper } from './deploy/hardhatDeployWrapper'; +// Networks +export * from './networks'; +// Constants +export { config } from './constants/config'; export { - ConceroNetwork, - config, - getNetworkEnvKey, - getNetworkKey, - networkTypes, - TokenSender, - hardhatDeployWrapper, - genericDeploy, -}; -export type { NetworkType }; + conceroNetworks, + testnetNetworks, + mainnetNetworks, + type ConceroMainnetNetworkNames, + type ConceroTestnetNetworkNames, +} from './constants/conceroNetworks'; + +// Deploy +export { genericDeploy, type IDeployResult, type IGenericDeployParams, type ITxParams } from './deploy/GenericDeploy'; + +// Tokens +export { TokenSender } from './tokens/TokenSender'; diff --git a/src/networks/index.ts b/src/networks/index.ts index 260cccc..b5fd3b5 100644 --- a/src/networks/index.ts +++ b/src/networks/index.ts @@ -1,6 +1,2 @@ -import { getNetworkEnvKey, getNetworkKey } from './getNetworkEnvKey'; -import { networkTypes } from './networkTypes'; -import { type ConceroNetwork, type NetworkType } from './types'; - -export { getNetworkEnvKey, getNetworkKey, networkTypes }; -export type { ConceroNetwork, NetworkType }; +export { getNetworkEnvKey, getNetworkKey } from './getNetworkEnvKey'; +export { networkTypes, type ConceroNetwork, type NetworkType } from '../types'; diff --git a/src/networks/networkTypes.ts b/src/networks/networkTypes.ts deleted file mode 100644 index 371f9f7..0000000 --- a/src/networks/networkTypes.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { type NetworkType } from './types'; - -export const networkTypes: Record = { - mainnet: 'mainnet', - testnet: 'testnet', - localhost: 'localhost', -}; diff --git a/src/networks/types.ts b/src/networks/types.ts deleted file mode 100644 index 78c5ea0..0000000 --- a/src/networks/types.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Chain } from 'viem'; - -export type NetworkType = 'mainnet' | 'testnet' | 'localhost'; -export type ConceroNetwork = { - name: string; - type: NetworkType; - chainId: number; - chainSelector: number; - confirmations: number; - viemChain: Chain; -}; diff --git a/types/ConceroNetwork.ts b/src/types/ConceroNetwork.ts similarity index 99% rename from types/ConceroNetwork.ts rename to src/types/ConceroNetwork.ts index 966bb34..dbfa1c0 100644 --- a/types/ConceroNetwork.ts +++ b/src/types/ConceroNetwork.ts @@ -38,6 +38,7 @@ export type ConceroLocalNetwork = ConceroNetwork & { blockNumber?: number; }; }; + export type ConceroHardhatNetwork = Omit & { accounts: Array<{ privateKey: string; diff --git a/src/types/index.ts b/src/types/index.ts new file mode 100644 index 0000000..ae00eb0 --- /dev/null +++ b/src/types/index.ts @@ -0,0 +1,10 @@ +export { + type NetworkType, + type ConceroNetwork, + type ConceroNetworkNames, + type ChainDefinition, + type ConceroLocalNetwork, + type ConceroHardhatNetwork, +} from './ConceroNetwork'; + +export { networkTypes } from './networkTypes'; diff --git a/src/types/networkTypes.ts b/src/types/networkTypes.ts new file mode 100644 index 0000000..946fb62 --- /dev/null +++ b/src/types/networkTypes.ts @@ -0,0 +1,7 @@ +import { type NetworkType } from './ConceroNetwork'; + +export const networkTypes: Record = { + mainnet: 'mainnet', + testnet: 'testnet', + localhost: 'localhost', +}; diff --git a/src/utils/compileContracts.ts b/src/utils/compileContracts.ts new file mode 100644 index 0000000..85256ac --- /dev/null +++ b/src/utils/compileContracts.ts @@ -0,0 +1,29 @@ +/* +hardhat compile + --concurrency Number of compilation jobs executed in parallel. Defaults to the number of CPU cores - 1 (default: 9) + --force Force compilation ignoring cache + --no-size-contracts Don't size contracts after running this task, even if runOnCompile option is enabled + --no-typechain Skip Typechain compilation + --quiet Makes the compilation process less verbose + */ +import { execSync } from "child_process"; + +interface HardhatCompileParams { + concurrency?: number; + force?: boolean; + noSizeContracts?: boolean; + noTypechain?: boolean; + quiet?: boolean; +} + +export function compileContracts({ quiet = true, force = false }: HardhatCompileParams) { + const packageManager = process.env["PACKAGE_MANAGER"] || "yarn"; + const command = `${packageManager} compile`; + const args = []; + // if (concurrency) args.push(`--concurrency ${concurrency}`); + // if (noSizeContracts) args.push("--no-size-contracts"); + // if (noTypechain) args.push("--no-typechain"); + if (quiet) args.push("--quiet"); + if (force) args.push("--force"); + execSync(`${command} ${args.join(" ")}`, { stdio: "inherit" }); +} diff --git a/src/utils/createEnvUpdater.ts b/src/utils/createEnvUpdater.ts new file mode 100644 index 0000000..b89a31b --- /dev/null +++ b/src/utils/createEnvUpdater.ts @@ -0,0 +1,65 @@ +import { existsSync, readFileSync, writeFileSync } from "fs"; +import path from "path"; +import { getNetworkEnvKey } from "../networks/getNetworkEnvKey"; +import log from "./log"; + +export interface EnvUpdaterConfig> { + prefixes: TPrefixes; + basePath: string; +} + +export function createEnvUpdater< + TPrefixes extends Record, + TEnvFileName extends string, +>(config: EnvUpdaterConfig) { + function updateEnvVariable( + key: string, + newValue: string, + envFileName: TEnvFileName, + ): void { + const filePath = path.join(config.basePath, `.env.${envFileName}`); + + if (!existsSync(filePath)) { + throw new Error(`File not found: ${filePath}`); + } + + const envContents = readFileSync(filePath, "utf8"); + let lines = envContents.split(/\r?\n/); + + const keyExists = lines.some(line => line.startsWith(`${key}=`)); + + if (!keyExists) { + log( + `Key ${key} not found in .env file. Adding to ${filePath}`, + "updateEnvVariable", + ); + lines.push(`${key}=${newValue}`); + } else { + lines = lines.map(line => { + const [currentKey] = line.split("="); + if (currentKey === key) { + return `${key}=${newValue}`; + } + return line; + }); + } + + writeFileSync(filePath, lines.join("\n")); + process.env[key] = newValue; + } + + function updateEnvAddress( + prefix: keyof TPrefixes, + newValue: string, + envFileName: TEnvFileName, + networkPostfix?: string, + ): void { + const searchKey = networkPostfix + ? `${config.prefixes[prefix]}_${getNetworkEnvKey(networkPostfix)}` + : String(config.prefixes[prefix]); + + updateEnvVariable(searchKey, newValue, envFileName); + } + + return { updateEnvVariable, updateEnvAddress }; +} diff --git a/src/utils/createViemChain.ts b/src/utils/createViemChain.ts index 731b87b..b5c8743 100644 --- a/src/utils/createViemChain.ts +++ b/src/utils/createViemChain.ts @@ -1,6 +1,6 @@ import { defineChain } from 'viem'; -import { ChainDefinition } from '../../types/ConceroNetwork'; +import { type ChainDefinition } from '../types'; export function createViemChain( chainDefinition: ChainDefinition @@ -18,11 +18,11 @@ export function createViemChain( }, blockExplorers: chainDefinition.blockExplorer ? { - default: { - name: chainDefinition.blockExplorer.name, - url: chainDefinition.blockExplorer.url, - }, - } + default: { + name: chainDefinition.blockExplorer.name, + url: chainDefinition.blockExplorer.url, + }, + } : undefined, testnet: chainDefinition.isTestnet, }); diff --git a/src/utils/ethersSignerCallContract.ts b/src/utils/ethersSignerCallContract.ts new file mode 100644 index 0000000..76b6435 --- /dev/null +++ b/src/utils/ethersSignerCallContract.ts @@ -0,0 +1,24 @@ +import { HardhatRuntimeEnvironment } from "hardhat/types"; +import { Address, Hash } from "viem"; + +import { log } from "./log"; + +export const ethersSignerCallContract = async ( + hre: HardhatRuntimeEnvironment, + contract: Address, + abi: any[], + functionName: string, + ...functionArgs: any[] +) => { + const [ethersSigner] = await hre.ethers.getSigners(); + const ethersContract = new hre.ethers.Contract(contract, abi, ethersSigner); + const unsignedTx = await ethersContract[functionName].populateTransaction(...functionArgs); + + log( + `Size: ${(unsignedTx.data.length - 2) / 2}, Input data: ${unsignedTx.data}, Address: ${unsignedTx.to}`, + functionName, + hre.network.name, + ); + + return (await ethersSigner.sendTransaction(unsignedTx)).hash as Hash; +}; diff --git a/src/utils/extractProxyAdminAddress.ts b/src/utils/extractProxyAdminAddress.ts new file mode 100644 index 0000000..b0cd993 --- /dev/null +++ b/src/utils/extractProxyAdminAddress.ts @@ -0,0 +1,18 @@ +import { ethers } from 'ethers'; + +export function extractProxyAdminAddress(receipt: ethers.TransactionReceipt | null): string { + if (!receipt) return ethers.ZeroAddress; + + const adminChangedTopic = ethers.id("AdminChanged(address,address)"); + const adminChangedLog = receipt.logs.find((log: ethers.Log) => log.topics[0] === adminChangedTopic); + + if (!adminChangedLog) return ethers.ZeroAddress; + + try { + const abiCoder = ethers.AbiCoder.defaultAbiCoder(); + const [, newAdmin] = abiCoder.decode(['address', 'address'], adminChangedLog.data); + return newAdmin; + } catch { + return ethers.ZeroAddress; + } +} \ No newline at end of file diff --git a/src/utils/formatting.ts b/src/utils/formatting.ts new file mode 100644 index 0000000..a9ba957 --- /dev/null +++ b/src/utils/formatting.ts @@ -0,0 +1,10 @@ +import { type Address } from "viem"; + +export function shorten(address: Address) { + return `${address.slice(0, 6)}...${address.slice(-4)}`; +} + +export function formatGas(gasAmountWei: bigint) { + // splits gas number with commas like so: 1,000,000 + return gasAmountWei.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); +} diff --git a/src/deploy/getActualGasData.ts b/src/utils/getActualGasData.ts similarity index 100% rename from src/deploy/getActualGasData.ts rename to src/utils/getActualGasData.ts diff --git a/src/utils/getEnvVar.ts b/src/utils/getEnvVar.ts index 815c50f..450e887 100644 --- a/src/utils/getEnvVar.ts +++ b/src/utils/getEnvVar.ts @@ -1,15 +1,41 @@ import process from 'process'; +import { Address } from 'viem'; import { warn } from './log'; +import { shorten } from './formatting'; +import { getNetworkEnvKey } from '../networks'; -function getEnvVar(key: string): string | undefined { +export function getEnvVar(key: string, defaultValue?: string): string { const value = process.env[key]; if (value === undefined || value === '') { + if (defaultValue !== undefined) return defaultValue; warn(`Missing env variable: ${key}`, 'getEnvVar'); - return undefined; + return ''; } return value; } -export { getEnvVar }; +export interface EnvAddressConfig> { + prefixes: TPrefixes; +} + +export function createEnvAddressGetter>( + config: EnvAddressConfig, +) { + function getEnvAddress( + prefix: keyof TPrefixes, + networkName?: string, + ): [Address, string] { + const searchKey = networkName + ? `${config.prefixes[prefix]}_${getNetworkEnvKey(networkName)}` + : config.prefixes[prefix]; + + const value = getEnvVar(searchKey) as Address; + const friendlyName = `${String(prefix)}(${shorten(value)})` + + return [value, friendlyName]; + } + + return { getEnvAddress }; +} diff --git a/src/utils/getTrezorDeployEnabled.ts b/src/utils/getTrezorDeployEnabled.ts index 9c18b8d..1960501 100644 --- a/src/utils/getTrezorDeployEnabled.ts +++ b/src/utils/getTrezorDeployEnabled.ts @@ -1,4 +1,4 @@ import { getEnvVar } from './getEnvVar'; export const getTrezorDeployEnabled = () => - getEnvVar('TREZOR_DEPLOY_ENABLED') === 'true'; + getEnvVar('TREZOR_DEPLOY_ENABLED', 'false') === 'true'; diff --git a/src/utils/getViemClients.ts b/src/utils/getViemClients.ts new file mode 100644 index 0000000..e8ba9f5 --- /dev/null +++ b/src/utils/getViemClients.ts @@ -0,0 +1,117 @@ +import { + Chain, + type TestClient, + type PublicClient, + type WalletClient, + createPublicClient, + createTestClient, + createWalletClient, + fallback, + http, + publicActions, + walletActions, + nonceManager, +} from "viem"; +import { privateKeyToAccount, type PrivateKeyAccount } from "viem/accounts"; + +import { type ConceroNetwork, type NetworkType } from "../types"; +import { getWallet } from "../utils"; +import { localhostViemChain } from "./localhostViemChain"; +import { conceroNetworks } from "../constants/conceroNetworks"; + +function getClients( + viemChain: Chain, + url: string | undefined, + account: PrivateKeyAccount = privateKeyToAccount( + `0x${process.env.TESTNET_DEPLOYER_PRIVATE_KEY}`, + ), +): { + walletClient: WalletClient; + publicClient: PublicClient; + account: PrivateKeyAccount; +} { + const publicClient = createPublicClient({ transport: http(url), chain: viemChain }); + const walletClient = createWalletClient({ transport: http(url), chain: viemChain, account }); + + return { walletClient, publicClient, account }; +} + +export type ExtendedTestClient = TestClient & WalletClient & PublicClient; + +function getTestClient(account: PrivateKeyAccount): ExtendedTestClient { + const testClient = createTestClient({ + chain: localhostViemChain, + mode: "hardhat", + transport: http(), + account, + }) + .extend(publicActions) + .extend(walletActions); + + return testClient as unknown as ExtendedTestClient; +} + +function getFallbackClients( + chain: ConceroNetwork, + account?: PrivateKeyAccount, +): { + walletClient: WalletClient; + publicClient: PublicClient; + account: PrivateKeyAccount; +} { + if (!account) { + switch (chain.type) { + case "mainnet": + account = privateKeyToAccount(`0x${process.env.MAINNET_DEPLOYER_PRIVATE_KEY}`); + break; + case "testnet": + account = privateKeyToAccount(`0x${process.env.TESTNET_DEPLOYER_PRIVATE_KEY}`, { + nonceManager: nonceManager, + }); + break; + case "localhost": + account = privateKeyToAccount(`0x${process.env.LOCALHOST_DEPLOYER_PRIVATE_KEY}`); + break; + default: + throw new Error(`Unsupported chain type: ${chain.type}`); + } + } + + const { viemChain, name } = chain; + + if (!conceroNetworks[name].rpcUrls.length) { + throw new Error(`No URLs configured for chain: ${name}`); + } + + const transport = fallback( + conceroNetworks[name].rpcUrls.map(url => + http(url, { + timeout: 10000, + retryCount: 1, + retryDelay: 250, + onFetchResponse: async response => { + if (response.status >= 400) { + throw new Error(`HTTP error: ${response.status} ${response.statusText}`); + } + }, + }), + ), + ); + const publicClient = createPublicClient({ transport, chain: viemChain }); + const walletClient = createWalletClient({ transport, chain: viemChain, account }); + + return { walletClient, publicClient, account }; +} + +function getViemAccount( + chainType: NetworkType, + accountType: "proxyDeployer" | "deployer", +) { + const privateKey = `0x${getWallet(chainType, accountType, "privateKey")}`; + + return privateKeyToAccount(privateKey as `0x${string}`, { + nonceManager: nonceManager, + }); +} + +export { getClients, getFallbackClients, getTestClient, getViemAccount }; diff --git a/src/utils/getWallet.ts b/src/utils/getWallet.ts index 984b9dc..b1ba21a 100644 --- a/src/utils/getWallet.ts +++ b/src/utils/getWallet.ts @@ -1,4 +1,4 @@ -import { NetworkType } from '../networks/types'; +import { type NetworkType } from '../types'; import { warn } from './log'; export function getWallet( @@ -6,8 +6,7 @@ export function getWallet( accountType: | 'proxyDeployer' | 'deployer' - | 'operator' - | 'priceFeedProxyDeployer', + | 'operator', walletType: 'privateKey' | 'address' ) { let prefix; @@ -22,9 +21,6 @@ export function getWallet( case 'operator': prefix = 'OPERATOR'; break; - case 'priceFeedProxyDeployer': - prefix = 'PRICE_FEED_PROXY_DEPLOYER'; - break; default: throw new Error(`Unknown account type: ${accountType}`); } diff --git a/src/utils/index.ts b/src/utils/index.ts index fa3c07c..4acc4a1 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1,17 +1,19 @@ -import { createViemChain } from './createViemChain'; -import { getEnvVar } from './getEnvVar'; -import { getTrezorDeployEnabled } from './getTrezorDeployEnabled'; -import { getWallet } from './getWallet'; -import { err, log, warn } from './log'; -import { updateEnvAddress } from './updateEnvVariable'; - +export { createViemChain } from './createViemChain'; +export { getEnvVar, createEnvAddressGetter } from './getEnvVar'; +export { getTrezorDeployEnabled } from './getTrezorDeployEnabled'; +export { getWallet } from './getWallet'; +export { err, log, warn } from './log'; +export { shorten, formatGas } from './formatting'; +export { ethersSignerCallContract } from './ethersSignerCallContract'; +export { compileContracts } from './compileContracts'; +export { localhostViemChain } from './localhostViemChain'; +export { extractProxyAdminAddress } from './extractProxyAdminAddress'; +export { createEnvUpdater, type EnvUpdaterConfig } from './createEnvUpdater'; +export { getActualGasData } from './getActualGasData'; export { - createViemChain, - err, - getEnvVar, - getTrezorDeployEnabled, - getWallet, - log, - warn, - updateEnvAddress, -}; + getClients, + getFallbackClients, + getTestClient, + getViemAccount, + type ExtendedTestClient, +} from './getViemClients'; diff --git a/src/utils/localhostViemChain.ts b/src/utils/localhostViemChain.ts new file mode 100644 index 0000000..2c6420e --- /dev/null +++ b/src/utils/localhostViemChain.ts @@ -0,0 +1,29 @@ +import { defineChain } from "viem"; + +export const localhostViemChain = defineChain({ + id: Number(process.env.LOCALHOST_FORK_CHAIN_ID), + name: "localhost", + nativeCurrency: { + decimals: 18, + name: "eth", + symbol: "eth", + }, + rpcUrls: { + default: { http: [process.env.LOCALHOST_RPC_URL ?? "http://127.0.0.1:8545"] }, + }, + testnet: true, +}); + +export const hardhatViemChain = defineChain({ + id: Number(process.env.HARDHAT_CHAIN_ID), + name: "hardhat", + nativeCurrency: { + decimals: 18, + name: "eth", + symbol: "eth", + }, + rpcUrls: { + default: { http: [process.env.HARDHAT_RPC_URL ?? "http://127.0.0.1:8545"] }, + }, + testnet: true, +}); diff --git a/src/utils/updateEnvVariable.ts b/src/utils/updateEnvVariable.ts deleted file mode 100644 index 5538ab6..0000000 --- a/src/utils/updateEnvVariable.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { readFileSync, writeFileSync } from "fs"; -import path from "path"; - -import { getNetworkEnvKey } from "../networks/getNetworkEnvKey"; - -import { envPrefixes } from "../constants/deploymentVariables"; -import { ConceroNetworkNames } from "../../types/ConceroNetwork"; -import { EnvFileName, EnvPrefixes } from "../../types/deploymentVariables"; -import log from "./log"; - -export type ContractPrefix = keyof EnvPrefixes; - -export function updateEnvVariable(key: string, newValue: string, envFileName: EnvFileName) { - const filePath = path.join(__dirname, `../.env.${envFileName}`); - if (!filePath) throw new Error(`File not found: ${filePath}`); - - const envContents = readFileSync(filePath, "utf8"); - let lines = envContents.split(/\r?\n/); - - if (!lines.some(line => line.startsWith(`${key}=`))) { - log(`Key ${key} not found in .env file. Adding to ${filePath}`, "updateEnvVariable"); - lines.push(`${key}=${newValue}`); - } - - const newLines = lines.map(line => { - let [currentKey, currentValue] = line.split("="); - if (currentKey === key) { - return `${key}=${newValue}`; - } - return line; - }); - - writeFileSync(filePath, newLines.join("\n")); - process.env[key] = newValue; -} - -export function updateEnvAddress( - prefix: ContractPrefix, - newValue: string, - envFileName: EnvFileName, - networkPostfix?: ConceroNetworkNames | string, -): void { - const searchKey = networkPostfix - ? `${envPrefixes[prefix]}_${getNetworkEnvKey(networkPostfix)}` - : envPrefixes[prefix]; - - updateEnvVariable(searchKey, newValue, envFileName); -} - -export default updateEnvVariable; diff --git a/types/deploymentVariables.ts b/types/deploymentVariables.ts deleted file mode 100644 index fcf013f..0000000 --- a/types/deploymentVariables.ts +++ /dev/null @@ -1,27 +0,0 @@ -export type EnvPrefixes = { - router: string; - routerProxy: string; - routerProxyAdmin: string; - verifier: string; - verifierProxy: string; - verifierProxyAdmin: string; - priceFeed: string; - priceFeedProxy: string; - priceFeedProxyAdmin: string; - lpToken: string; - pause: string; - creValidatorLib: string; - creValidatorLibProxy: string; - creValidatorLibProxyAdmin: string; - relayerLib: string; - relayerLibProxy: string; - relayerLibProxyAdmin: string; -}; - -export type ContractPrefix = keyof EnvPrefixes; - -export type EnvFileName = -| "deployments.mainnet" -| "deployments.testnet" -| "deployments.localhost" - diff --git a/types/hardhat.d.ts b/types/hardhat.d.ts deleted file mode 100644 index ea30111..0000000 --- a/types/hardhat.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import 'hardhat/types/runtime'; - -declare module 'hardhat/types/runtime' { - interface HardhatRuntimeEnvironment { - tenderly?: { - verify(params: { name: string; address: string }): Promise; - }; - } -} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 155799e..12de0f4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -96,7 +96,7 @@ "@concero/concero-networks@https://github.com/concero/concero-networks": version "1.0.0" - resolved "https://github.com/concero/concero-networks#206d1543d3cc5e8007c68a3f8f16616eca5508da" + resolved "https://github.com/concero/concero-networks#476bbdd0ddf467f9b0ed78a9c45e2294cec30129" dependencies: axios "^1.13.2" esbuild "^0.27.0" @@ -2581,9 +2581,9 @@ decamelize@^4.0.0: integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== decode-named-character-reference@^1.0.0: - version "1.2.0" - resolved "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz#25c32ae6dd5e21889549d40f676030e9514cc0ed" - integrity sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q== + version "1.3.0" + resolved "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz#3e40603760874c2e5867691b599d73a7da25b53f" + integrity sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q== dependencies: character-entities "^2.0.0" From 83e640bf8b7ef9d191015d9a9b12f8e512c8a325 Mon Sep 17 00:00:00 2001 From: Roman Yarlykov Date: Wed, 21 Jan 2026 10:52:44 +0500 Subject: [PATCH 3/5] fix: add libraries to genericDeploy --- dist/index.cjs.js | 79 ++++++++++- dist/index.cjs.js.map | 6 +- dist/index.esm.js | 78 ++++++++++- dist/index.esm.js.map | 6 +- dist/types/src/deploy/GenericDeploy.d.ts | 1 + dist/types/src/utils/getGasParameters.d.ts | 14 ++ dist/types/src/utils/index.d.ts | 1 + src/deploy/GenericDeploy.ts | 3 +- src/utils/getGasParameters.ts | 145 +++++++++++++++++++++ src/utils/index.ts | 1 + 10 files changed, 325 insertions(+), 9 deletions(-) create mode 100644 dist/types/src/utils/getGasParameters.d.ts create mode 100644 src/utils/getGasParameters.ts diff --git a/dist/index.cjs.js b/dist/index.cjs.js index 372d8d6..87aa89b 100644 --- a/dist/index.cjs.js +++ b/dist/index.cjs.js @@ -46,6 +46,7 @@ __export(index_exports, { getClients: () => getClients, getEnvVar: () => getEnvVar, getFallbackClients: () => getFallbackClients, + getGasParameters: () => getGasParameters, getNetworkEnvKey: () => getNetworkEnvKey, getNetworkKey: () => getNetworkKey, getTestClient: () => getTestClient, @@ -518,6 +519,81 @@ function getViemAccount(chainType, accountType) { }); } +// src/utils/getGasParameters.ts +var NETWORK_MINIMUMS = { + polygon: { + minTipCap: BigInt(3e10), + // 30 gwei + minBaseFee: BigInt(3e10) + // 30 gwei + } + // Add other networks as needed +}; +async function getGasParameters(chain, priorityMultiplier = 1, maxFeeMultiplier = 1) { + const { publicClient } = getFallbackClients(chain); + try { + const block = await publicClient.getBlock(); + const baseFee = block.baseFeePerGas ?? BigInt(0); + const networkMinimums = getNetworkMinimums(chain); + const suggestedPriorityFee = await getSuggestedPriorityFee(publicClient, chain); + const calculatedPriorityFee = calculatePriorityFee( + suggestedPriorityFee, + priorityMultiplier + ); + const priorityFee = calculatedPriorityFee > networkMinimums.minTipCap ? calculatedPriorityFee : networkMinimums.minTipCap; + const calculatedMaxFee = calculateMaxFee(baseFee, priorityFee, maxFeeMultiplier); + const minRequiredMaxFee = networkMinimums.minBaseFee + priorityFee; + const maxFeePerGas = calculatedMaxFee > minRequiredMaxFee ? calculatedMaxFee : minRequiredMaxFee; + return { + maxFeePerGas, + maxPriorityFeePerGas: priorityFee + }; + } catch (error) { + const networkMinimums = getNetworkMinimums(chain); + const gasPrice = await publicClient.getGasPrice(); + const priorityFee = networkMinimums.minTipCap; + return { + maxFeePerGas: gasPrice > networkMinimums.minBaseFee + priorityFee ? gasPrice : networkMinimums.minBaseFee + priorityFee, + maxPriorityFeePerGas: priorityFee + }; + } +} +function getNetworkMinimums(chain) { + const isPolygon = chain.chainId === 137 || chain.name.toLowerCase().includes("polygon"); + if (isPolygon) { + return NETWORK_MINIMUMS.polygon; + } + return { + minTipCap: BigInt(15e8), + // 1.5 gwei + minBaseFee: BigInt(1e9) + // 1 gwei + }; +} +async function getSuggestedPriorityFee(publicClient, chain) { + try { + const isPolygon = chain.chainId === 137 || chain.name.toLowerCase().includes("polygon"); + const blocksToAnalyze = isPolygon ? 5 : 10; + const blocks = await Promise.all( + Array.from( + { length: blocksToAnalyze }, + (_, i) => publicClient.getBlock({ blockNumber: BigInt(-1 - i) }) + ) + ); + const priorityFees = blocks.map((block) => block.baseFeePerGas ?? BigInt(0)).sort((a, b) => a < b ? -1 : 1); + const index = isPolygon ? Math.floor(priorityFees.length * 0.75) : Math.floor(priorityFees.length * 0.5); + return priorityFees[index]; + } catch { + return getNetworkMinimums(chain).minTipCap; + } +} +function calculatePriorityFee(basePriorityFee, multiplier) { + return BigInt(Math.ceil(Number(basePriorityFee) * multiplier)); +} +function calculateMaxFee(baseFee, priorityFee, multiplier) { + return BigInt(Math.ceil(Number(baseFee) * multiplier)) + priorityFee; +} + // src/constants/config.ts var config = { DEFAULT_BLOCK_CONFIRMATIONS: 2 @@ -532,7 +608,7 @@ var genericDeploy = async ({ hre, contractName, txParams }, ...contractConstruct "contract deploy", chain.name ); - const contractFactory = await hre.ethers.getContractFactory(contractName); + const contractFactory = await hre.ethers.getContractFactory(contractName, { libraries: txParams?.libraries }); const deployOverrides = txParams?.gasLimit ? { gasLimit: txParams.gasLimit } : {}; const deployTx = contractFactory.getDeployTransaction( ...contractConstructorArgs, @@ -641,6 +717,7 @@ var TokenSender = class { getClients, getEnvVar, getFallbackClients, + getGasParameters, getNetworkEnvKey, getNetworkKey, getTestClient, diff --git a/dist/index.cjs.js.map b/dist/index.cjs.js.map index 988c1dc..ebee2ee 100644 --- a/dist/index.cjs.js.map +++ b/dist/index.cjs.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../src/index.ts", "../src/types/networkTypes.ts", "../src/utils/createViemChain.ts", "../src/utils/getEnvVar.ts", "../src/utils/log.ts", "../src/utils/formatting.ts", "../src/networks/getNetworkEnvKey.ts", "../src/utils/getTrezorDeployEnabled.ts", "../src/utils/getWallet.ts", "../src/utils/ethersSignerCallContract.ts", "../src/utils/compileContracts.ts", "../src/utils/localhostViemChain.ts", "../src/utils/extractProxyAdminAddress.ts", "../src/utils/createEnvUpdater.ts", "../src/utils/getActualGasData.ts", "../src/utils/getViemClients.ts", "../src/constants/conceroNetworks.ts", "../src/constants/config.ts", "../src/deploy/GenericDeploy.ts", "../src/tokens/TokenSender.ts"], - "sourcesContent": ["// Types\nexport * from './types';\n\n// Utils\nexport * from './utils';\n\n// Networks\nexport * from './networks';\n\n// Constants\nexport { config } from './constants/config';\nexport {\n\tconceroNetworks,\n\ttestnetNetworks,\n\tmainnetNetworks,\n\ttype ConceroMainnetNetworkNames,\n\ttype ConceroTestnetNetworkNames,\n} from './constants/conceroNetworks';\n\n// Deploy\nexport { genericDeploy, type IDeployResult, type IGenericDeployParams, type ITxParams } from './deploy/GenericDeploy';\n\n// Tokens\nexport { TokenSender } from './tokens/TokenSender';\n", "import { type NetworkType } from './ConceroNetwork';\n\nexport const networkTypes: Record = {\n\tmainnet: 'mainnet',\n\ttestnet: 'testnet',\n\tlocalhost: 'localhost',\n};\n", "import { defineChain } from 'viem';\n\nimport { type ChainDefinition } from '../types';\n\nexport function createViemChain(\n\tchainDefinition: ChainDefinition\n): ReturnType {\n\treturn defineChain({\n\t\tid: chainDefinition.id,\n\t\tname: chainDefinition.name,\n\t\tnativeCurrency: {\n\t\t\tdecimals: 18,\n\t\t\tname: 'eth',\n\t\t\tsymbol: 'eth',\n\t\t},\n\t\trpcUrls: {\n\t\t\tdefault: { http: chainDefinition.rpcUrls },\n\t\t},\n\t\tblockExplorers: chainDefinition.blockExplorer\n\t\t\t? {\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\tname: chainDefinition.blockExplorer.name,\n\t\t\t\t\t\turl: chainDefinition.blockExplorer.url,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: undefined,\n\t\ttestnet: chainDefinition.isTestnet,\n\t});\n}\n", "import process from 'process';\nimport { Address } from 'viem';\n\nimport { warn } from './log';\nimport { shorten } from './formatting';\nimport { getNetworkEnvKey } from '../networks';\n\nexport function getEnvVar(key: string, defaultValue?: string): string {\n\tconst value = process.env[key];\n\tif (value === undefined || value === '') {\n\t\tif (defaultValue !== undefined) return defaultValue;\n\t\twarn(`Missing env variable: ${key}`, 'getEnvVar');\n\t\treturn '';\n\t}\n\n\treturn value;\n}\n\nexport interface EnvAddressConfig> {\n\tprefixes: TPrefixes;\n}\n\nexport function createEnvAddressGetter>(\n\tconfig: EnvAddressConfig,\n) {\n\tfunction getEnvAddress(\n\t\tprefix: keyof TPrefixes,\n\t\tnetworkName?: string,\n\t): [Address, string] {\n\t\tconst searchKey = networkName\n\t\t\t? `${config.prefixes[prefix]}_${getNetworkEnvKey(networkName)}`\n\t\t\t: config.prefixes[prefix];\n\n\t\tconst value = getEnvVar(searchKey) as Address;\n\t\tconst friendlyName = `${String(prefix)}(${shorten(value)})`\n\n\t\treturn [value, friendlyName];\n\t}\n\n\treturn { getEnvAddress };\n}\n", "const networkColors: Record = {\n\tethereum: '\\x1b[30m', // grey\n\tarbitrum: '\\x1b[34m', // blue\n\tpolygon: '\\x1b[35m', // magenta\n\tavalanche: '\\x1b[31m', // red\n\tbase: '\\x1b[36m', // cyan\n\tethereumSepolia: '\\x1b[30m', // grey\n\tarbitrumSepolia: '\\x1b[34m', // blue\n\toptimismSepolia: '\\x1b[31m', // red\n\tpolygonAmoy: '\\x1b[35m', // magenta\n\tavalancheFuji: '\\x1b[31m', // red\n\tbaseSepolia: '\\x1b[36m', // cyan\n\thardhat: '\\x1b[32m', // green\n\tlocalhost: '\\x1b[32m', // green\n};\nconst reset = '\\x1b[0m';\n\nexport function log(message: any, functionName: string, networkName?: string) {\n\tconst greenFill = '\\x1b[32m';\n\tconst network = networkName ? `\\x1b[35m[${networkName}]${reset}` : '';\n\n\tconsole.log(`${network}${greenFill}[${functionName}]${reset}`, message);\n}\n\nexport function warn(message: any, functionName: string) {\n\tconst yellowFill = '\\x1b[33m';\n\n\tconsole.log(`${yellowFill}[${functionName}]${reset}`, message);\n}\n\nexport function err(message: any, functionName: string, networkName?: string) {\n\tconst redFill = '\\x1b[31m';\n\tconst network = networkName\n\t\t? `${networkColors[networkName]}[${networkName}]${reset}`\n\t\t: '';\n\n\tconsole.log(\n\t\t`${network}${redFill}[${functionName}] ERROR:${reset}`,\n\t\tmessage\n\t);\n}\n\nexport default log;\n", "import { type Address } from \"viem\";\n\nexport function shorten(address: Address) {\n\treturn `${address.slice(0, 6)}...${address.slice(-4)}`;\n}\n\nexport function formatGas(gasAmountWei: bigint) {\n\t// splits gas number with commas like so: 1,000,000\n\treturn gasAmountWei.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n}\n", "/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkEnvKey(networkName: string): string {\n if (!networkName) {\n throw new Error('Network name must be provided');\n }\n return camelCaseToCapsSnakeCase(networkName);\n}\n\n/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkKey(NETWORK_NAME: string): string {\n if (!NETWORK_NAME) {\n throw new Error('Network name must be provided');\n }\n return capsSnakeCaseToCamelCase(NETWORK_NAME);\n}\n\n/**\n * Converts a string from CAPS_SNAKE_CASE to camelCase\n *\n * @param snakeCaseString The string in CAPS_SNAKE_CASE format\n * @returns The string converted to camelCase format\n */\nexport function capsSnakeCaseToCamelCase(snakeCaseString: string): string {\n if (!snakeCaseString) {\n throw new Error('String must be provided');\n }\n\n return snakeCaseString\n .toLowerCase()\n .replace(/_([a-z])/g, (_, char) => char.toUpperCase());\n}\n\n/**\n * Converts a string from camelCase to CAPS_SNAKE_CASE\n *\n * @param camelCaseString The string in camelCase format\n * @returns The string converted to CAPS_SNAKE_CASE format\n */\nexport function camelCaseToCapsSnakeCase(camelCaseString: string): string {\n if (!camelCaseString) {\n throw new Error('String must be provided');\n }\n\n return camelCaseString.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toUpperCase();\n}\n\nexport function getNetworkName(networkEnvKey: string): string {\n if (!networkEnvKey) {\n throw new Error('Network name must be provided');\n }\n\n return networkEnvKey\n .toLowerCase()\n .split('_')\n .map((word, index) =>\n index === 0 ? word : word[0].toUpperCase() + word.slice(1)\n )\n .join('');\n}\n", "import { getEnvVar } from './getEnvVar';\n\nexport const getTrezorDeployEnabled = () =>\n\tgetEnvVar('TREZOR_DEPLOY_ENABLED', 'false') === 'true';\n", "import { type NetworkType } from '../types';\nimport { warn } from './log';\n\nexport function getWallet(\n\tchainType: NetworkType,\n\taccountType:\n\t\t| 'proxyDeployer'\n\t\t| 'deployer'\n\t\t| 'operator',\n\twalletType: 'privateKey' | 'address'\n) {\n\tlet prefix;\n\tlet walletKey;\n\tswitch (accountType) {\n\t\tcase 'proxyDeployer':\n\t\t\tprefix = 'PROXY_DEPLOYER';\n\t\t\tbreak;\n\t\tcase 'deployer':\n\t\t\tprefix = 'DEPLOYER';\n\t\t\tbreak;\n\t\tcase 'operator':\n\t\t\tprefix = 'OPERATOR';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown account type: ${accountType}`);\n\t}\n\n\tswitch (walletType) {\n\t\tcase 'privateKey':\n\t\t\twalletKey = 'PRIVATE_KEY';\n\t\t\tbreak;\n\t\tcase 'address':\n\t\t\twalletKey = 'ADDRESS';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown wallet type: ${walletType}`);\n\t}\n\n\t// Determine the environment variable key based on the wallet type\n\tconst envKey = `${chainType.toUpperCase()}_${prefix}_${walletKey}`;\n\tconst walletValue = process.env[envKey];\n\n\tif (!walletValue) {\n\t\twarn(`Missing env variable: ${envKey}`, 'getEnvVar');\n\t}\n\n\treturn walletValue;\n}\n", "import { HardhatRuntimeEnvironment } from \"hardhat/types\";\nimport { Address, Hash } from \"viem\";\n\nimport { log } from \"./log\";\n\nexport const ethersSignerCallContract = async (\n\thre: HardhatRuntimeEnvironment,\n\tcontract: Address,\n\tabi: any[],\n\tfunctionName: string,\n\t...functionArgs: any[]\n) => {\n\tconst [ethersSigner] = await hre.ethers.getSigners();\n\tconst ethersContract = new hre.ethers.Contract(contract, abi, ethersSigner);\n\tconst unsignedTx = await ethersContract[functionName].populateTransaction(...functionArgs);\n\n\tlog(\n\t\t`Size: ${(unsignedTx.data.length - 2) / 2}, Input data: ${unsignedTx.data}, Address: ${unsignedTx.to}`,\n\t\tfunctionName,\n\t\thre.network.name,\n\t);\n\n\treturn (await ethersSigner.sendTransaction(unsignedTx)).hash as Hash;\n};\n", "/*\nhardhat compile\n --concurrency Number of compilation jobs executed in parallel. Defaults to the number of CPU cores - 1 (default: 9)\n --force Force compilation ignoring cache\n --no-size-contracts Don't size contracts after running this task, even if runOnCompile option is enabled\n --no-typechain Skip Typechain compilation\n --quiet Makes the compilation process less verbose\n */\nimport { execSync } from \"child_process\";\n\ninterface HardhatCompileParams {\n\tconcurrency?: number;\n\tforce?: boolean;\n\tnoSizeContracts?: boolean;\n\tnoTypechain?: boolean;\n\tquiet?: boolean;\n}\n\nexport function compileContracts({ quiet = true, force = false }: HardhatCompileParams) {\n\tconst packageManager = process.env[\"PACKAGE_MANAGER\"] || \"yarn\";\n\tconst command = `${packageManager} compile`;\n\tconst args = [];\n\t// if (concurrency) args.push(`--concurrency ${concurrency}`);\n\t// if (noSizeContracts) args.push(\"--no-size-contracts\");\n\t// if (noTypechain) args.push(\"--no-typechain\");\n\tif (quiet) args.push(\"--quiet\");\n\tif (force) args.push(\"--force\");\n\texecSync(`${command} ${args.join(\" \")}`, { stdio: \"inherit\" });\n}\n", "import { defineChain } from \"viem\";\n\nexport const localhostViemChain = defineChain({\n\tid: Number(process.env.LOCALHOST_FORK_CHAIN_ID),\n\tname: \"localhost\",\n\tnativeCurrency: {\n\t\tdecimals: 18,\n\t\tname: \"eth\",\n\t\tsymbol: \"eth\",\n\t},\n\trpcUrls: {\n\t\tdefault: { http: [process.env.LOCALHOST_RPC_URL ?? \"http://127.0.0.1:8545\"] },\n\t},\n\ttestnet: true,\n});\n\nexport const hardhatViemChain = defineChain({\n\tid: Number(process.env.HARDHAT_CHAIN_ID),\n\tname: \"hardhat\",\n\tnativeCurrency: {\n\t\tdecimals: 18,\n\t\tname: \"eth\",\n\t\tsymbol: \"eth\",\n\t},\n\trpcUrls: {\n\t\tdefault: { http: [process.env.HARDHAT_RPC_URL ?? \"http://127.0.0.1:8545\"] },\n\t},\n\ttestnet: true,\n});\n", "import { ethers } from 'ethers';\n\nexport function extractProxyAdminAddress(receipt: ethers.TransactionReceipt | null): string {\n\tif (!receipt) return ethers.ZeroAddress;\n\n\tconst adminChangedTopic = ethers.id(\"AdminChanged(address,address)\");\n\tconst adminChangedLog = receipt.logs.find((log: ethers.Log) => log.topics[0] === adminChangedTopic);\n\n\tif (!adminChangedLog) return ethers.ZeroAddress;\n\n\ttry {\n\t\tconst abiCoder = ethers.AbiCoder.defaultAbiCoder();\n\t\tconst [, newAdmin] = abiCoder.decode(['address', 'address'], adminChangedLog.data);\n\t\treturn newAdmin;\n\t} catch {\n\t\treturn ethers.ZeroAddress;\n\t}\n}", "import { existsSync, readFileSync, writeFileSync } from \"fs\";\nimport path from \"path\";\nimport { getNetworkEnvKey } from \"../networks/getNetworkEnvKey\";\nimport log from \"./log\";\n\nexport interface EnvUpdaterConfig> {\n\tprefixes: TPrefixes;\n\tbasePath: string;\n}\n\nexport function createEnvUpdater<\n\tTPrefixes extends Record,\n\tTEnvFileName extends string,\n>(config: EnvUpdaterConfig) {\n\tfunction updateEnvVariable(\n\t\tkey: string,\n\t\tnewValue: string,\n\t\tenvFileName: TEnvFileName,\n\t): void {\n\t\tconst filePath = path.join(config.basePath, `.env.${envFileName}`);\n\n\t\tif (!existsSync(filePath)) {\n\t\t\tthrow new Error(`File not found: ${filePath}`);\n\t\t}\n\n\t\tconst envContents = readFileSync(filePath, \"utf8\");\n\t\tlet lines = envContents.split(/\\r?\\n/);\n\n\t\tconst keyExists = lines.some(line => line.startsWith(`${key}=`));\n\n\t\tif (!keyExists) {\n\t\t\tlog(\n\t\t\t\t`Key ${key} not found in .env file. Adding to ${filePath}`,\n\t\t\t\t\"updateEnvVariable\",\n\t\t\t);\n\t\t\tlines.push(`${key}=${newValue}`);\n\t\t} else {\n\t\t\tlines = lines.map(line => {\n\t\t\t\tconst [currentKey] = line.split(\"=\");\n\t\t\t\tif (currentKey === key) {\n\t\t\t\t\treturn `${key}=${newValue}`;\n\t\t\t\t}\n\t\t\t\treturn line;\n\t\t\t});\n\t\t}\n\n\t\twriteFileSync(filePath, lines.join(\"\\n\"));\n\t\tprocess.env[key] = newValue;\n\t}\n\n\tfunction updateEnvAddress(\n\t\tprefix: keyof TPrefixes,\n\t\tnewValue: string,\n\t\tenvFileName: TEnvFileName,\n\t\tnetworkPostfix?: string,\n\t): void {\n\t\tconst searchKey = networkPostfix\n\t\t\t? `${config.prefixes[prefix]}_${getNetworkEnvKey(networkPostfix)}`\n\t\t\t: String(config.prefixes[prefix]);\n\n\t\tupdateEnvVariable(searchKey, newValue, envFileName);\n\t}\n\n\treturn { updateEnvVariable, updateEnvAddress };\n}\n", "import { PublicClient } from 'viem';\n\ntype GasData = {\n\tgasPrice?: string;\n\tmaxFeePerGas?: string;\n\tmaxPriorityFeePerGas?: string;\n};\n\nexport async function getActualGasData(\n\tpublicClient: PublicClient\n): Promise {\n\tconst block = await publicClient.getBlock();\n\n\tconst isEIP1559 = !!block.baseFeePerGas;\n\n\tlet gasPrice = 0n;\n\tlet maxPriorityFeePerGas = 0n;\n\ttry {\n\t\tif (isEIP1559) {\n\t\t\tconst { maxFeePerGas } = await publicClient.estimateFeesPerGas();\n\t\t\tgasPrice = maxFeePerGas;\n\t\t\tmaxPriorityFeePerGas =\n\t\t\t\tawait publicClient.estimateMaxPriorityFeePerGas();\n\t\t} else {\n\t\t\tgasPrice = await publicClient.getGasPrice();\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('Error getting actual gas data:', error);\n\t\treturn {\n\t\t\tgasPrice: '0',\n\t\t\tmaxFeePerGas: '0',\n\t\t\tmaxPriorityFeePerGas: '0',\n\t\t};\n\t}\n\n\tconst gasDataLegacy = {\n\t\tgasPrice: gasPrice.toString(),\n\t};\n\n\tconst gasDataEIP1559 = {\n\t\tmaxFeePerGas: gasPrice.toString(),\n\t\tmaxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n\t};\n\n\tconst gasData: GasData = isEIP1559 ? gasDataEIP1559 : gasDataLegacy;\n\n\treturn gasData;\n}\n", "import {\n\tChain,\n\ttype TestClient,\n\ttype PublicClient,\n\ttype WalletClient,\n\tcreatePublicClient,\n\tcreateTestClient,\n\tcreateWalletClient,\n\tfallback,\n\thttp,\n\tpublicActions,\n\twalletActions,\n\tnonceManager,\n} from \"viem\";\nimport { privateKeyToAccount, type PrivateKeyAccount } from \"viem/accounts\";\n\nimport { type ConceroNetwork, type NetworkType } from \"../types\";\nimport { getWallet } from \"../utils\";\nimport { localhostViemChain } from \"./localhostViemChain\";\nimport { conceroNetworks } from \"../constants/conceroNetworks\";\n\nfunction getClients(\n\tviemChain: Chain,\n\turl: string | undefined,\n\taccount: PrivateKeyAccount = privateKeyToAccount(\n\t\t`0x${process.env.TESTNET_DEPLOYER_PRIVATE_KEY}`,\n\t),\n): {\n\twalletClient: WalletClient;\n\tpublicClient: PublicClient;\n\taccount: PrivateKeyAccount;\n} {\n\tconst publicClient = createPublicClient({ transport: http(url), chain: viemChain });\n\tconst walletClient = createWalletClient({ transport: http(url), chain: viemChain, account });\n\n\treturn { walletClient, publicClient, account };\n}\n\nexport type ExtendedTestClient = TestClient & WalletClient & PublicClient;\n\nfunction getTestClient(account: PrivateKeyAccount): ExtendedTestClient {\n\tconst testClient = createTestClient({\n\t\tchain: localhostViemChain,\n\t\tmode: \"hardhat\",\n\t\ttransport: http(),\n\t\taccount,\n\t})\n\t\t.extend(publicActions)\n\t\t.extend(walletActions);\n\n\treturn testClient as unknown as ExtendedTestClient;\n}\n\nfunction getFallbackClients(\n\tchain: ConceroNetwork,\n\taccount?: PrivateKeyAccount,\n): {\n\twalletClient: WalletClient;\n\tpublicClient: PublicClient;\n\taccount: PrivateKeyAccount;\n} {\n\tif (!account) {\n\t\tswitch (chain.type) {\n\t\t\tcase \"mainnet\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.MAINNET_DEPLOYER_PRIVATE_KEY}`);\n\t\t\t\tbreak;\n\t\t\tcase \"testnet\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.TESTNET_DEPLOYER_PRIVATE_KEY}`, {\n\t\t\t\t\tnonceManager: nonceManager,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"localhost\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.LOCALHOST_DEPLOYER_PRIVATE_KEY}`);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unsupported chain type: ${chain.type}`);\n\t\t}\n\t}\n\n\tconst { viemChain, name } = chain;\n\n\tif (!conceroNetworks[name].rpcUrls.length) {\n\t\tthrow new Error(`No URLs configured for chain: ${name}`);\n\t}\n\n\tconst transport = fallback(\n\t\tconceroNetworks[name].rpcUrls.map(url =>\n\t\t\thttp(url, {\n\t\t\t\ttimeout: 10000,\n\t\t\t\tretryCount: 1,\n\t\t\t\tretryDelay: 250,\n\t\t\t\tonFetchResponse: async response => {\n\t\t\t\t\tif (response.status >= 400) {\n\t\t\t\t\t\tthrow new Error(`HTTP error: ${response.status} ${response.statusText}`);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t}),\n\t\t),\n\t);\n\tconst publicClient = createPublicClient({ transport, chain: viemChain });\n\tconst walletClient = createWalletClient({ transport, chain: viemChain, account });\n\n\treturn { walletClient, publicClient, account };\n}\n\nfunction getViemAccount(\n\tchainType: NetworkType,\n\taccountType: \"proxyDeployer\" | \"deployer\",\n) {\n\tconst privateKey = `0x${getWallet(chainType, accountType, \"privateKey\")}`;\n\n\treturn privateKeyToAccount(privateKey as `0x${string}`, {\n\t\tnonceManager: nonceManager,\n\t});\n}\n\nexport { getClients, getFallbackClients, getTestClient, getViemAccount };\n", "import mainnetChains from '@concero/concero-networks/output/chains.mainnet.json';\nimport testnetChains from '@concero/concero-networks/output/chains.testnet.json';\nimport type { Chain } from '@concero/concero-networks/src/types';\n\nimport {\n\ttype NetworkType,\n\ttype ChainDefinition,\n\ttype ConceroNetwork,\n\tnetworkTypes,\n} from '../types';\nimport { getWallet } from '../utils';\nimport { createViemChain } from '../utils/createViemChain';\nimport { getTrezorDeployEnabled } from '../utils/getTrezorDeployEnabled';\n\nconst mainnetProxyDeployerPK = getWallet(\n\t'mainnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\nconst testnetProxyDeployerPK = getWallet(\n\t'testnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\n\nconst mainnetDeployerPK = getWallet('mainnet', 'deployer', 'privateKey');\nconst testnetDeployerPK = getWallet('testnet', 'deployer', 'privateKey');\n\nconst trezorDeployEnabled = getTrezorDeployEnabled();\n\nconst testnetAccounts = [testnetDeployerPK, testnetProxyDeployerPK];\n\nexport type ConceroMainnetNetworkNames =\n\t(typeof mainnetChains)[keyof typeof mainnetChains]['name'];\nexport type ConceroTestnetNetworkNames =\n\t(typeof testnetChains)[keyof typeof testnetChains]['name'];\n\nfunction createExtendedNetworks>(\n\tchains: T,\n\tnetworkType: NetworkType,\n\taccounts: (string | undefined)[]\n): Record {\n\tconst validAccounts = accounts.filter((acc): acc is string => !!acc);\n\n\treturn Object.fromEntries(\n\t\tObject.values(chains).map(chain => {\n\t\t\tconst chainDefinition: ChainDefinition = {\n\t\t\t\tid: parseInt(chain.id),\n\t\t\t\tname: chain.name,\n\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\tisTestnet: chain.isTestnet ?? false,\n\t\t\t\t...(chain.blockExplorers?.[0] && {\n\t\t\t\t\tblockExplorer: {\n\t\t\t\t\t\tname: chain.blockExplorers[0].name,\n\t\t\t\t\t\turl: chain.blockExplorers[0].url,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t};\n\n\t\t\tconst viemChain = createViemChain(chainDefinition);\n\n\t\t\treturn [\n\t\t\t\tchain.name,\n\t\t\t\t{\n\t\t\t\t\tname: chain.name,\n\t\t\t\t\tchainId: parseInt(chain.id),\n\t\t\t\t\ttype: networkType,\n\t\t\t\t\turl: chain.rpcUrls[0] || '',\n\t\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\t\tsaveDeployments: false,\n\t\t\t\t\t...(!trezorDeployEnabled && { accounts: validAccounts }),\n\t\t\t\t\tchainSelector: BigInt(chain.chainSelector),\n\t\t\t\t\tconfirmations: 1,\n\t\t\t\t\tviemChain,\n\t\t\t\t\t...(trezorDeployEnabled && {\n\t\t\t\t\t\ttrezorDerivationPaths: [\n\t\t\t\t\t\t\t[44, 60, 0, 0, 0],\n\t\t\t\t\t\t\t[44, 60, 0, 0, 1],\n\t\t\t\t\t\t],\n\t\t\t\t\t\ttrezorInsecureDerivation: true,\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t];\n\t\t})\n\t) as Record;\n}\n\nexport const testnetNetworks = createExtendedNetworks(\n\ttestnetChains as unknown as Record,\n\tnetworkTypes.testnet,\n\ttestnetAccounts\n);\n\nexport const mainnetNetworks = createExtendedNetworks(\n\tmainnetChains as unknown as Record,\n\tnetworkTypes.mainnet,\n\t[mainnetDeployerPK, mainnetProxyDeployerPK]\n);\n\nexport const conceroNetworks: Record = {\n\t...testnetNetworks,\n\t...mainnetNetworks,\n};\n", "export const config = {\n DEFAULT_BLOCK_CONFIRMATIONS: 2,\n};\n", "import { HardhatRuntimeEnvironment } from 'hardhat/types';\n\nimport { conceroNetworks } from '../constants/conceroNetworks';\nimport { getTrezorDeployEnabled, log } from '../utils';\nimport { extractProxyAdminAddress } from '../utils/extractProxyAdminAddress';\n\nexport interface ITxParams {\n\tgasLimit: bigint;\n}\n\nexport interface IDeployResult {\n\thash: string;\n\taddress: string;\n\tchainType: string;\n\tchainName: string;\n\tproxyAdminAddress: string;\n}\n\nexport interface IGenericDeployParams {\n\thre: HardhatRuntimeEnvironment;\n\tcontractName: string;\n\ttxParams?: Partial;\n}\n\nexport const genericDeploy = async (\n\t{ hre, contractName, txParams }: IGenericDeployParams,\n\t...contractConstructorArgs: any[]\n): Promise => {\n\tconst [deployer] = await hre.ethers.getSigners();\n\tconst chain = conceroNetworks[hre.network.name];\n\n\tlog(\n\t\t`Deploy ${contractName} from address: ${await deployer.getAddress()}`,\n\t\t'contract deploy',\n\t\tchain.name\n\t);\n\n\tconst contractFactory = await hre.ethers.getContractFactory(contractName);\n\n\tconst deployOverrides = txParams?.gasLimit ? { gasLimit: txParams.gasLimit } : {};\n\n\tconst deployTx = contractFactory.getDeployTransaction(\n\t\t...contractConstructorArgs,\n\t\tdeployOverrides\n\t);\n\n\tconst isTrezorDeployEnabled = getTrezorDeployEnabled();\n\tif (deployTx.data && isTrezorDeployEnabled) {\n\t\tlog(\n\t\t\t`${contractName} input data: ${deployTx.data} \\n size: ${(deployTx.data.length - 2) / 2}`,\n\t\t\t'bytecode',\n\t\t\tchain.name\n\t\t);\n\t}\n\n\tconst contract = await contractFactory.deploy(...contractConstructorArgs, deployOverrides);\n\tconst receipt = await contract.deploymentTransaction()?.wait();\n\tconst deploymentAddress = await contract.getAddress();\n\n\tif (hre.tenderly) {\n\t\tawait hre.tenderly.verify({ name: contractName, address: deploymentAddress });\n\t}\n\n\tlog(\n\t\t`Deployed at: ${deploymentAddress}`,\n\t\t`deploy ${contractName}`,\n\t\tchain.name\n\t);\n\n\treturn {\n\t\thash: contract.deploymentTransaction()?.hash,\n\t\taddress: deploymentAddress,\n\t\tchainName: chain.name,\n\t\tchainType: chain.type,\n\t\tproxyAdminAddress: extractProxyAdminAddress(receipt)\n\t};\n};\n", "import {\n\tAddress,\n\terc20Abi,\n\tformatUnits,\n\tHash,\n\tparseUnits,\n\tPublicClient,\n\tWalletClient,\n} from 'viem';\n\nexport class TokenSender {\n\tprivate walletClient: WalletClient;\n\tprivate publicClient: PublicClient;\n\n\tconstructor(walletClient: WalletClient, publicClient: PublicClient) {\n\t\tthis.walletClient = walletClient;\n\t\tthis.publicClient = publicClient;\n\t}\n\n\tpublic async sendToken(\n\t\ttokenAddress: Address,\n\t\tamount: string,\n\t\trecipient: Address\n\t): Promise {\n\t\tconst [tokenDecimals, tokenSymbol, tokenBalance] = await Promise.all([\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'decimals',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'symbol',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'balanceOf',\n\t\t\t\targs: [this.walletClient.account?.address!],\n\t\t\t}),\n\t\t]);\n\n\t\tconsole.log(\n\t\t\t`Current ${tokenSymbol} balance ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t);\n\n\t\tif (parseUnits(amount, tokenDecimals) > tokenBalance) {\n\t\t\tthrow new Error(\n\t\t\t\t`Insufficient balance. Required: ${amount}, available: ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t\t);\n\t\t}\n\n\t\tconst txHash = await this.walletClient.writeContract({\n\t\t\taddress: tokenAddress,\n\t\t\tabi: erc20Abi,\n\t\t\tfunctionName: 'transfer',\n\t\t\targs: [recipient, parseUnits(amount, tokenDecimals)],\n\t\t\tchain: this.walletClient.chain,\n\t\t\taccount: this.walletClient.account!,\n\t\t});\n\n\t\tconst { status } = await this.publicClient.waitForTransactionReceipt({\n\t\t\thash: txHash,\n\t\t});\n\n\t\tif (status !== 'success') {\n\t\t\tthrow new Error(`Error sending token. Hash: ${txHash}`);\n\t\t}\n\n\t\tconsole.log(`Token successfully sent. Hash: ${txHash}`);\n\n\t\treturn txHash;\n\t}\n}\n"], - "mappings": "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", + "sources": ["../src/index.ts", "../src/types/networkTypes.ts", "../src/utils/createViemChain.ts", "../src/utils/getEnvVar.ts", "../src/utils/log.ts", "../src/utils/formatting.ts", "../src/networks/getNetworkEnvKey.ts", "../src/utils/getTrezorDeployEnabled.ts", "../src/utils/getWallet.ts", "../src/utils/ethersSignerCallContract.ts", "../src/utils/compileContracts.ts", "../src/utils/localhostViemChain.ts", "../src/utils/extractProxyAdminAddress.ts", "../src/utils/createEnvUpdater.ts", "../src/utils/getActualGasData.ts", "../src/utils/getViemClients.ts", "../src/constants/conceroNetworks.ts", "../src/utils/getGasParameters.ts", "../src/constants/config.ts", "../src/deploy/GenericDeploy.ts", "../src/tokens/TokenSender.ts"], + "sourcesContent": ["// Types\nexport * from './types';\n\n// Utils\nexport * from './utils';\n\n// Networks\nexport * from './networks';\n\n// Constants\nexport { config } from './constants/config';\nexport {\n\tconceroNetworks,\n\ttestnetNetworks,\n\tmainnetNetworks,\n\ttype ConceroMainnetNetworkNames,\n\ttype ConceroTestnetNetworkNames,\n} from './constants/conceroNetworks';\n\n// Deploy\nexport { genericDeploy, type IDeployResult, type IGenericDeployParams, type ITxParams } from './deploy/GenericDeploy';\n\n// Tokens\nexport { TokenSender } from './tokens/TokenSender';\n", "import { type NetworkType } from './ConceroNetwork';\n\nexport const networkTypes: Record = {\n\tmainnet: 'mainnet',\n\ttestnet: 'testnet',\n\tlocalhost: 'localhost',\n};\n", "import { defineChain } from 'viem';\n\nimport { type ChainDefinition } from '../types';\n\nexport function createViemChain(\n\tchainDefinition: ChainDefinition\n): ReturnType {\n\treturn defineChain({\n\t\tid: chainDefinition.id,\n\t\tname: chainDefinition.name,\n\t\tnativeCurrency: {\n\t\t\tdecimals: 18,\n\t\t\tname: 'eth',\n\t\t\tsymbol: 'eth',\n\t\t},\n\t\trpcUrls: {\n\t\t\tdefault: { http: chainDefinition.rpcUrls },\n\t\t},\n\t\tblockExplorers: chainDefinition.blockExplorer\n\t\t\t? {\n\t\t\t\tdefault: {\n\t\t\t\t\tname: chainDefinition.blockExplorer.name,\n\t\t\t\t\turl: chainDefinition.blockExplorer.url,\n\t\t\t\t},\n\t\t\t}\n\t\t\t: undefined,\n\t\ttestnet: chainDefinition.isTestnet,\n\t});\n}\n", "import process from 'process';\nimport { Address } from 'viem';\n\nimport { warn } from './log';\nimport { shorten } from './formatting';\nimport { getNetworkEnvKey } from '../networks';\n\nexport function getEnvVar(key: string, defaultValue?: string): string {\n\tconst value = process.env[key];\n\tif (value === undefined || value === '') {\n\t\tif (defaultValue !== undefined) return defaultValue;\n\t\twarn(`Missing env variable: ${key}`, 'getEnvVar');\n\t\treturn '';\n\t}\n\n\treturn value;\n}\n\nexport interface EnvAddressConfig> {\n\tprefixes: TPrefixes;\n}\n\nexport function createEnvAddressGetter>(\n\tconfig: EnvAddressConfig,\n) {\n\tfunction getEnvAddress(\n\t\tprefix: keyof TPrefixes,\n\t\tnetworkName?: string,\n\t): [Address, string] {\n\t\tconst searchKey = networkName\n\t\t\t? `${config.prefixes[prefix]}_${getNetworkEnvKey(networkName)}`\n\t\t\t: config.prefixes[prefix];\n\n\t\tconst value = getEnvVar(searchKey) as Address;\n\t\tconst friendlyName = `${String(prefix)}(${shorten(value)})`\n\n\t\treturn [value, friendlyName];\n\t}\n\n\treturn { getEnvAddress };\n}\n", "const networkColors: Record = {\n\tethereum: '\\x1b[30m', // grey\n\tarbitrum: '\\x1b[34m', // blue\n\tpolygon: '\\x1b[35m', // magenta\n\tavalanche: '\\x1b[31m', // red\n\tbase: '\\x1b[36m', // cyan\n\tethereumSepolia: '\\x1b[30m', // grey\n\tarbitrumSepolia: '\\x1b[34m', // blue\n\toptimismSepolia: '\\x1b[31m', // red\n\tpolygonAmoy: '\\x1b[35m', // magenta\n\tavalancheFuji: '\\x1b[31m', // red\n\tbaseSepolia: '\\x1b[36m', // cyan\n\thardhat: '\\x1b[32m', // green\n\tlocalhost: '\\x1b[32m', // green\n};\nconst reset = '\\x1b[0m';\n\nexport function log(message: any, functionName: string, networkName?: string) {\n\tconst greenFill = '\\x1b[32m';\n\tconst network = networkName ? `\\x1b[35m[${networkName}]${reset}` : '';\n\n\tconsole.log(`${network}${greenFill}[${functionName}]${reset}`, message);\n}\n\nexport function warn(message: any, functionName: string) {\n\tconst yellowFill = '\\x1b[33m';\n\n\tconsole.log(`${yellowFill}[${functionName}]${reset}`, message);\n}\n\nexport function err(message: any, functionName: string, networkName?: string) {\n\tconst redFill = '\\x1b[31m';\n\tconst network = networkName\n\t\t? `${networkColors[networkName]}[${networkName}]${reset}`\n\t\t: '';\n\n\tconsole.log(\n\t\t`${network}${redFill}[${functionName}] ERROR:${reset}`,\n\t\tmessage\n\t);\n}\n\nexport default log;\n", "import { type Address } from \"viem\";\n\nexport function shorten(address: Address) {\n\treturn `${address.slice(0, 6)}...${address.slice(-4)}`;\n}\n\nexport function formatGas(gasAmountWei: bigint) {\n\t// splits gas number with commas like so: 1,000,000\n\treturn gasAmountWei.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n}\n", "/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkEnvKey(networkName: string): string {\n if (!networkName) {\n throw new Error('Network name must be provided');\n }\n return camelCaseToCapsSnakeCase(networkName);\n}\n\n/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkKey(NETWORK_NAME: string): string {\n if (!NETWORK_NAME) {\n throw new Error('Network name must be provided');\n }\n return capsSnakeCaseToCamelCase(NETWORK_NAME);\n}\n\n/**\n * Converts a string from CAPS_SNAKE_CASE to camelCase\n *\n * @param snakeCaseString The string in CAPS_SNAKE_CASE format\n * @returns The string converted to camelCase format\n */\nexport function capsSnakeCaseToCamelCase(snakeCaseString: string): string {\n if (!snakeCaseString) {\n throw new Error('String must be provided');\n }\n\n return snakeCaseString\n .toLowerCase()\n .replace(/_([a-z])/g, (_, char) => char.toUpperCase());\n}\n\n/**\n * Converts a string from camelCase to CAPS_SNAKE_CASE\n *\n * @param camelCaseString The string in camelCase format\n * @returns The string converted to CAPS_SNAKE_CASE format\n */\nexport function camelCaseToCapsSnakeCase(camelCaseString: string): string {\n if (!camelCaseString) {\n throw new Error('String must be provided');\n }\n\n return camelCaseString.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toUpperCase();\n}\n\nexport function getNetworkName(networkEnvKey: string): string {\n if (!networkEnvKey) {\n throw new Error('Network name must be provided');\n }\n\n return networkEnvKey\n .toLowerCase()\n .split('_')\n .map((word, index) =>\n index === 0 ? word : word[0].toUpperCase() + word.slice(1)\n )\n .join('');\n}\n", "import { getEnvVar } from './getEnvVar';\n\nexport const getTrezorDeployEnabled = () =>\n\tgetEnvVar('TREZOR_DEPLOY_ENABLED', 'false') === 'true';\n", "import { type NetworkType } from '../types';\nimport { warn } from './log';\n\nexport function getWallet(\n\tchainType: NetworkType,\n\taccountType:\n\t\t| 'proxyDeployer'\n\t\t| 'deployer'\n\t\t| 'operator',\n\twalletType: 'privateKey' | 'address'\n) {\n\tlet prefix;\n\tlet walletKey;\n\tswitch (accountType) {\n\t\tcase 'proxyDeployer':\n\t\t\tprefix = 'PROXY_DEPLOYER';\n\t\t\tbreak;\n\t\tcase 'deployer':\n\t\t\tprefix = 'DEPLOYER';\n\t\t\tbreak;\n\t\tcase 'operator':\n\t\t\tprefix = 'OPERATOR';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown account type: ${accountType}`);\n\t}\n\n\tswitch (walletType) {\n\t\tcase 'privateKey':\n\t\t\twalletKey = 'PRIVATE_KEY';\n\t\t\tbreak;\n\t\tcase 'address':\n\t\t\twalletKey = 'ADDRESS';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown wallet type: ${walletType}`);\n\t}\n\n\t// Determine the environment variable key based on the wallet type\n\tconst envKey = `${chainType.toUpperCase()}_${prefix}_${walletKey}`;\n\tconst walletValue = process.env[envKey];\n\n\tif (!walletValue) {\n\t\twarn(`Missing env variable: ${envKey}`, 'getEnvVar');\n\t}\n\n\treturn walletValue;\n}\n", "import { HardhatRuntimeEnvironment } from \"hardhat/types\";\nimport { Address, Hash } from \"viem\";\n\nimport { log } from \"./log\";\n\nexport const ethersSignerCallContract = async (\n\thre: HardhatRuntimeEnvironment,\n\tcontract: Address,\n\tabi: any[],\n\tfunctionName: string,\n\t...functionArgs: any[]\n) => {\n\tconst [ethersSigner] = await hre.ethers.getSigners();\n\tconst ethersContract = new hre.ethers.Contract(contract, abi, ethersSigner);\n\tconst unsignedTx = await ethersContract[functionName].populateTransaction(...functionArgs);\n\n\tlog(\n\t\t`Size: ${(unsignedTx.data.length - 2) / 2}, Input data: ${unsignedTx.data}, Address: ${unsignedTx.to}`,\n\t\tfunctionName,\n\t\thre.network.name,\n\t);\n\n\treturn (await ethersSigner.sendTransaction(unsignedTx)).hash as Hash;\n};\n", "/*\nhardhat compile\n --concurrency Number of compilation jobs executed in parallel. Defaults to the number of CPU cores - 1 (default: 9)\n --force Force compilation ignoring cache\n --no-size-contracts Don't size contracts after running this task, even if runOnCompile option is enabled\n --no-typechain Skip Typechain compilation\n --quiet Makes the compilation process less verbose\n */\nimport { execSync } from \"child_process\";\n\ninterface HardhatCompileParams {\n\tconcurrency?: number;\n\tforce?: boolean;\n\tnoSizeContracts?: boolean;\n\tnoTypechain?: boolean;\n\tquiet?: boolean;\n}\n\nexport function compileContracts({ quiet = true, force = false }: HardhatCompileParams) {\n\tconst packageManager = process.env[\"PACKAGE_MANAGER\"] || \"yarn\";\n\tconst command = `${packageManager} compile`;\n\tconst args = [];\n\t// if (concurrency) args.push(`--concurrency ${concurrency}`);\n\t// if (noSizeContracts) args.push(\"--no-size-contracts\");\n\t// if (noTypechain) args.push(\"--no-typechain\");\n\tif (quiet) args.push(\"--quiet\");\n\tif (force) args.push(\"--force\");\n\texecSync(`${command} ${args.join(\" \")}`, { stdio: \"inherit\" });\n}\n", "import { defineChain } from \"viem\";\n\nexport const localhostViemChain = defineChain({\n\tid: Number(process.env.LOCALHOST_FORK_CHAIN_ID),\n\tname: \"localhost\",\n\tnativeCurrency: {\n\t\tdecimals: 18,\n\t\tname: \"eth\",\n\t\tsymbol: \"eth\",\n\t},\n\trpcUrls: {\n\t\tdefault: { http: [process.env.LOCALHOST_RPC_URL ?? \"http://127.0.0.1:8545\"] },\n\t},\n\ttestnet: true,\n});\n\nexport const hardhatViemChain = defineChain({\n\tid: Number(process.env.HARDHAT_CHAIN_ID),\n\tname: \"hardhat\",\n\tnativeCurrency: {\n\t\tdecimals: 18,\n\t\tname: \"eth\",\n\t\tsymbol: \"eth\",\n\t},\n\trpcUrls: {\n\t\tdefault: { http: [process.env.HARDHAT_RPC_URL ?? \"http://127.0.0.1:8545\"] },\n\t},\n\ttestnet: true,\n});\n", "import { ethers } from 'ethers';\n\nexport function extractProxyAdminAddress(receipt: ethers.TransactionReceipt | null): string {\n\tif (!receipt) return ethers.ZeroAddress;\n\n\tconst adminChangedTopic = ethers.id(\"AdminChanged(address,address)\");\n\tconst adminChangedLog = receipt.logs.find((log: ethers.Log) => log.topics[0] === adminChangedTopic);\n\n\tif (!adminChangedLog) return ethers.ZeroAddress;\n\n\ttry {\n\t\tconst abiCoder = ethers.AbiCoder.defaultAbiCoder();\n\t\tconst [, newAdmin] = abiCoder.decode(['address', 'address'], adminChangedLog.data);\n\t\treturn newAdmin;\n\t} catch {\n\t\treturn ethers.ZeroAddress;\n\t}\n}", "import { existsSync, readFileSync, writeFileSync } from \"fs\";\nimport path from \"path\";\nimport { getNetworkEnvKey } from \"../networks/getNetworkEnvKey\";\nimport log from \"./log\";\n\nexport interface EnvUpdaterConfig> {\n\tprefixes: TPrefixes;\n\tbasePath: string;\n}\n\nexport function createEnvUpdater<\n\tTPrefixes extends Record,\n\tTEnvFileName extends string,\n>(config: EnvUpdaterConfig) {\n\tfunction updateEnvVariable(\n\t\tkey: string,\n\t\tnewValue: string,\n\t\tenvFileName: TEnvFileName,\n\t): void {\n\t\tconst filePath = path.join(config.basePath, `.env.${envFileName}`);\n\n\t\tif (!existsSync(filePath)) {\n\t\t\tthrow new Error(`File not found: ${filePath}`);\n\t\t}\n\n\t\tconst envContents = readFileSync(filePath, \"utf8\");\n\t\tlet lines = envContents.split(/\\r?\\n/);\n\n\t\tconst keyExists = lines.some(line => line.startsWith(`${key}=`));\n\n\t\tif (!keyExists) {\n\t\t\tlog(\n\t\t\t\t`Key ${key} not found in .env file. Adding to ${filePath}`,\n\t\t\t\t\"updateEnvVariable\",\n\t\t\t);\n\t\t\tlines.push(`${key}=${newValue}`);\n\t\t} else {\n\t\t\tlines = lines.map(line => {\n\t\t\t\tconst [currentKey] = line.split(\"=\");\n\t\t\t\tif (currentKey === key) {\n\t\t\t\t\treturn `${key}=${newValue}`;\n\t\t\t\t}\n\t\t\t\treturn line;\n\t\t\t});\n\t\t}\n\n\t\twriteFileSync(filePath, lines.join(\"\\n\"));\n\t\tprocess.env[key] = newValue;\n\t}\n\n\tfunction updateEnvAddress(\n\t\tprefix: keyof TPrefixes,\n\t\tnewValue: string,\n\t\tenvFileName: TEnvFileName,\n\t\tnetworkPostfix?: string,\n\t): void {\n\t\tconst searchKey = networkPostfix\n\t\t\t? `${config.prefixes[prefix]}_${getNetworkEnvKey(networkPostfix)}`\n\t\t\t: String(config.prefixes[prefix]);\n\n\t\tupdateEnvVariable(searchKey, newValue, envFileName);\n\t}\n\n\treturn { updateEnvVariable, updateEnvAddress };\n}\n", "import { PublicClient } from 'viem';\n\ntype GasData = {\n\tgasPrice?: string;\n\tmaxFeePerGas?: string;\n\tmaxPriorityFeePerGas?: string;\n};\n\nexport async function getActualGasData(\n\tpublicClient: PublicClient\n): Promise {\n\tconst block = await publicClient.getBlock();\n\n\tconst isEIP1559 = !!block.baseFeePerGas;\n\n\tlet gasPrice = 0n;\n\tlet maxPriorityFeePerGas = 0n;\n\ttry {\n\t\tif (isEIP1559) {\n\t\t\tconst { maxFeePerGas } = await publicClient.estimateFeesPerGas();\n\t\t\tgasPrice = maxFeePerGas;\n\t\t\tmaxPriorityFeePerGas =\n\t\t\t\tawait publicClient.estimateMaxPriorityFeePerGas();\n\t\t} else {\n\t\t\tgasPrice = await publicClient.getGasPrice();\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('Error getting actual gas data:', error);\n\t\treturn {\n\t\t\tgasPrice: '0',\n\t\t\tmaxFeePerGas: '0',\n\t\t\tmaxPriorityFeePerGas: '0',\n\t\t};\n\t}\n\n\tconst gasDataLegacy = {\n\t\tgasPrice: gasPrice.toString(),\n\t};\n\n\tconst gasDataEIP1559 = {\n\t\tmaxFeePerGas: gasPrice.toString(),\n\t\tmaxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n\t};\n\n\tconst gasData: GasData = isEIP1559 ? gasDataEIP1559 : gasDataLegacy;\n\n\treturn gasData;\n}\n", "import {\n\tChain,\n\ttype TestClient,\n\ttype PublicClient,\n\ttype WalletClient,\n\tcreatePublicClient,\n\tcreateTestClient,\n\tcreateWalletClient,\n\tfallback,\n\thttp,\n\tpublicActions,\n\twalletActions,\n\tnonceManager,\n} from \"viem\";\nimport { privateKeyToAccount, type PrivateKeyAccount } from \"viem/accounts\";\n\nimport { type ConceroNetwork, type NetworkType } from \"../types\";\nimport { getWallet } from \"../utils\";\nimport { localhostViemChain } from \"./localhostViemChain\";\nimport { conceroNetworks } from \"../constants/conceroNetworks\";\n\nfunction getClients(\n\tviemChain: Chain,\n\turl: string | undefined,\n\taccount: PrivateKeyAccount = privateKeyToAccount(\n\t\t`0x${process.env.TESTNET_DEPLOYER_PRIVATE_KEY}`,\n\t),\n): {\n\twalletClient: WalletClient;\n\tpublicClient: PublicClient;\n\taccount: PrivateKeyAccount;\n} {\n\tconst publicClient = createPublicClient({ transport: http(url), chain: viemChain });\n\tconst walletClient = createWalletClient({ transport: http(url), chain: viemChain, account });\n\n\treturn { walletClient, publicClient, account };\n}\n\nexport type ExtendedTestClient = TestClient & WalletClient & PublicClient;\n\nfunction getTestClient(account: PrivateKeyAccount): ExtendedTestClient {\n\tconst testClient = createTestClient({\n\t\tchain: localhostViemChain,\n\t\tmode: \"hardhat\",\n\t\ttransport: http(),\n\t\taccount,\n\t})\n\t\t.extend(publicActions)\n\t\t.extend(walletActions);\n\n\treturn testClient as unknown as ExtendedTestClient;\n}\n\nfunction getFallbackClients(\n\tchain: ConceroNetwork,\n\taccount?: PrivateKeyAccount,\n): {\n\twalletClient: WalletClient;\n\tpublicClient: PublicClient;\n\taccount: PrivateKeyAccount;\n} {\n\tif (!account) {\n\t\tswitch (chain.type) {\n\t\t\tcase \"mainnet\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.MAINNET_DEPLOYER_PRIVATE_KEY}`);\n\t\t\t\tbreak;\n\t\t\tcase \"testnet\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.TESTNET_DEPLOYER_PRIVATE_KEY}`, {\n\t\t\t\t\tnonceManager: nonceManager,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"localhost\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.LOCALHOST_DEPLOYER_PRIVATE_KEY}`);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unsupported chain type: ${chain.type}`);\n\t\t}\n\t}\n\n\tconst { viemChain, name } = chain;\n\n\tif (!conceroNetworks[name].rpcUrls.length) {\n\t\tthrow new Error(`No URLs configured for chain: ${name}`);\n\t}\n\n\tconst transport = fallback(\n\t\tconceroNetworks[name].rpcUrls.map(url =>\n\t\t\thttp(url, {\n\t\t\t\ttimeout: 10000,\n\t\t\t\tretryCount: 1,\n\t\t\t\tretryDelay: 250,\n\t\t\t\tonFetchResponse: async response => {\n\t\t\t\t\tif (response.status >= 400) {\n\t\t\t\t\t\tthrow new Error(`HTTP error: ${response.status} ${response.statusText}`);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t}),\n\t\t),\n\t);\n\tconst publicClient = createPublicClient({ transport, chain: viemChain });\n\tconst walletClient = createWalletClient({ transport, chain: viemChain, account });\n\n\treturn { walletClient, publicClient, account };\n}\n\nfunction getViemAccount(\n\tchainType: NetworkType,\n\taccountType: \"proxyDeployer\" | \"deployer\",\n) {\n\tconst privateKey = `0x${getWallet(chainType, accountType, \"privateKey\")}`;\n\n\treturn privateKeyToAccount(privateKey as `0x${string}`, {\n\t\tnonceManager: nonceManager,\n\t});\n}\n\nexport { getClients, getFallbackClients, getTestClient, getViemAccount };\n", "import mainnetChains from '@concero/concero-networks/output/chains.mainnet.json';\nimport testnetChains from '@concero/concero-networks/output/chains.testnet.json';\nimport type { Chain } from '@concero/concero-networks/src/types';\n\nimport {\n\ttype NetworkType,\n\ttype ChainDefinition,\n\ttype ConceroNetwork,\n\tnetworkTypes,\n} from '../types';\nimport { getWallet } from '../utils';\nimport { createViemChain } from '../utils/createViemChain';\nimport { getTrezorDeployEnabled } from '../utils/getTrezorDeployEnabled';\n\nconst mainnetProxyDeployerPK = getWallet(\n\t'mainnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\nconst testnetProxyDeployerPK = getWallet(\n\t'testnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\n\nconst mainnetDeployerPK = getWallet('mainnet', 'deployer', 'privateKey');\nconst testnetDeployerPK = getWallet('testnet', 'deployer', 'privateKey');\n\nconst trezorDeployEnabled = getTrezorDeployEnabled();\n\nconst testnetAccounts = [testnetDeployerPK, testnetProxyDeployerPK];\n\nexport type ConceroMainnetNetworkNames =\n\t(typeof mainnetChains)[keyof typeof mainnetChains]['name'];\nexport type ConceroTestnetNetworkNames =\n\t(typeof testnetChains)[keyof typeof testnetChains]['name'];\n\nfunction createExtendedNetworks>(\n\tchains: T,\n\tnetworkType: NetworkType,\n\taccounts: (string | undefined)[]\n): Record {\n\tconst validAccounts = accounts.filter((acc): acc is string => !!acc);\n\n\treturn Object.fromEntries(\n\t\tObject.values(chains).map(chain => {\n\t\t\tconst chainDefinition: ChainDefinition = {\n\t\t\t\tid: parseInt(chain.id),\n\t\t\t\tname: chain.name,\n\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\tisTestnet: chain.isTestnet ?? false,\n\t\t\t\t...(chain.blockExplorers?.[0] && {\n\t\t\t\t\tblockExplorer: {\n\t\t\t\t\t\tname: chain.blockExplorers[0].name,\n\t\t\t\t\t\turl: chain.blockExplorers[0].url,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t};\n\n\t\t\tconst viemChain = createViemChain(chainDefinition);\n\n\t\t\treturn [\n\t\t\t\tchain.name,\n\t\t\t\t{\n\t\t\t\t\tname: chain.name,\n\t\t\t\t\tchainId: parseInt(chain.id),\n\t\t\t\t\ttype: networkType,\n\t\t\t\t\turl: chain.rpcUrls[0] || '',\n\t\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\t\tsaveDeployments: false,\n\t\t\t\t\t...(!trezorDeployEnabled && { accounts: validAccounts }),\n\t\t\t\t\tchainSelector: BigInt(chain.chainSelector),\n\t\t\t\t\tconfirmations: 1,\n\t\t\t\t\tviemChain,\n\t\t\t\t\t...(trezorDeployEnabled && {\n\t\t\t\t\t\ttrezorDerivationPaths: [\n\t\t\t\t\t\t\t[44, 60, 0, 0, 0],\n\t\t\t\t\t\t\t[44, 60, 0, 0, 1],\n\t\t\t\t\t\t],\n\t\t\t\t\t\ttrezorInsecureDerivation: true,\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t];\n\t\t})\n\t) as Record;\n}\n\nexport const testnetNetworks = createExtendedNetworks(\n\ttestnetChains as unknown as Record,\n\tnetworkTypes.testnet,\n\ttestnetAccounts\n);\n\nexport const mainnetNetworks = createExtendedNetworks(\n\tmainnetChains as unknown as Record,\n\tnetworkTypes.mainnet,\n\t[mainnetDeployerPK, mainnetProxyDeployerPK]\n);\n\nexport const conceroNetworks: Record = {\n\t...testnetNetworks,\n\t...mainnetNetworks,\n};\n", "import { type PublicClient } from \"viem\";\n\nimport { ConceroNetwork } from \"../types/ConceroNetwork\";\nimport { getFallbackClients } from \"./getViemClients\";\n\ninterface GasParameters {\n\tmaxFeePerGas: bigint;\n\tmaxPriorityFeePerGas: bigint;\n}\n\n// Network-specific minimum gas parameters (in wei)\nconst NETWORK_MINIMUMS = {\n\tpolygon: {\n\t\tminTipCap: BigInt(30_000_000_000), // 30 gwei\n\t\tminBaseFee: BigInt(30_000_000_000), // 30 gwei\n\t},\n\t// Add other networks as needed\n} as const;\n\n/**\n * Gets optimized gas parameters for priority transaction processing\n * @param chain - The network configuration\n * @param priorityMultiplier - Multiplier for maxPriorityFeePerGas (default: 2)\n * @param maxFeeMultiplier - Multiplier for maxFeePerGas buffer (default: 2)\n * @returns GasParameters object containing maxFeePerGas and maxPriorityFeePerGas\n */\nexport async function getGasParameters(\n\tchain: ConceroNetwork,\n\tpriorityMultiplier = 1,\n\tmaxFeeMultiplier = 1,\n): Promise {\n\tconst { publicClient } = getFallbackClients(chain);\n\n\ttry {\n\t\t// Get latest block to calculate gas parameters\n\t\tconst block = await publicClient.getBlock();\n\t\tconst baseFee = block.baseFeePerGas ?? BigInt(0);\n\n\t\t// Get network-specific minimums\n\t\tconst networkMinimums = getNetworkMinimums(chain);\n\n\t\t// Calculate priority fee with buffer for faster inclusion\n\t\tconst suggestedPriorityFee = await getSuggestedPriorityFee(publicClient, chain);\n\t\tconst calculatedPriorityFee = calculatePriorityFee(\n\t\t\tsuggestedPriorityFee,\n\t\t\tpriorityMultiplier,\n\t\t);\n\n\t\t// Ensure priority fee meets network minimum\n\t\tconst priorityFee =\n\t\t\tcalculatedPriorityFee > networkMinimums.minTipCap\n\t\t\t\t? calculatedPriorityFee\n\t\t\t\t: networkMinimums.minTipCap;\n\n\t\t// Calculate max fee ensuring it meets network minimums\n\t\tconst calculatedMaxFee = calculateMaxFee(baseFee, priorityFee, maxFeeMultiplier);\n\t\tconst minRequiredMaxFee = networkMinimums.minBaseFee + priorityFee;\n\t\tconst maxFeePerGas =\n\t\t\tcalculatedMaxFee > minRequiredMaxFee ? calculatedMaxFee : minRequiredMaxFee;\n\n\t\treturn {\n\t\t\tmaxFeePerGas,\n\t\t\tmaxPriorityFeePerGas: priorityFee,\n\t\t};\n\t} catch (error) {\n\t\t// Fallback with network minimums\n\t\tconst networkMinimums = getNetworkMinimums(chain);\n\t\tconst gasPrice = await publicClient.getGasPrice();\n\t\tconst priorityFee = networkMinimums.minTipCap;\n\n\t\treturn {\n\t\t\tmaxFeePerGas:\n\t\t\t\tgasPrice > networkMinimums.minBaseFee + priorityFee\n\t\t\t\t\t? gasPrice\n\t\t\t\t\t: networkMinimums.minBaseFee + priorityFee,\n\t\t\tmaxPriorityFeePerGas: priorityFee,\n\t\t};\n\t}\n}\n\n/**\n * Gets network-specific minimum gas parameters\n */\nfunction getNetworkMinimums(chain: ConceroNetwork) {\n\t// Check if chain is Polygon (you'll need to implement this check based on your CNetwork type)\n\tconst isPolygon = chain.chainId === 137 || chain.name.toLowerCase().includes(\"polygon\");\n\n\tif (isPolygon) {\n\t\treturn NETWORK_MINIMUMS.polygon;\n\t}\n\n\t// Default minimums for other networks\n\treturn {\n\t\tminTipCap: BigInt(1_500_000_000), // 1.5 gwei\n\t\tminBaseFee: BigInt(1_000_000_000), // 1 gwei\n\t};\n}\n\n/**\n * Gets the suggested priority fee from recent blocks\n */\nasync function getSuggestedPriorityFee(\n\tpublicClient: PublicClient,\n\tchain: ConceroNetwork,\n): Promise {\n\ttry {\n\t\t// For Polygon, we want to be more aggressive with priority fees\n\t\tconst isPolygon = chain.chainId === 137 || chain.name.toLowerCase().includes(\"polygon\");\n\t\tconst blocksToAnalyze = isPolygon ? 5 : 10; // Look at fewer blocks on Polygon for more recent data\n\n\t\tconst blocks = await Promise.all(\n\t\t\tArray.from({ length: blocksToAnalyze }, (_, i) =>\n\t\t\t\tpublicClient.getBlock({ blockNumber: BigInt(-1 - i) }),\n\t\t\t),\n\t\t);\n\n\t\t// For Polygon, use 75th percentile instead of median for higher priority\n\t\tconst priorityFees = blocks\n\t\t\t.map(block => block.baseFeePerGas ?? BigInt(0))\n\t\t\t.sort((a, b) => (a < b ? -1 : 1));\n\n\t\tconst index = isPolygon\n\t\t\t? Math.floor(priorityFees.length * 0.75)\n\t\t\t: Math.floor(priorityFees.length * 0.5);\n\n\t\treturn priorityFees[index];\n\t} catch {\n\t\t// Use network-specific minimum as fallback\n\t\treturn getNetworkMinimums(chain).minTipCap;\n\t}\n}\n\n/**\n * Calculates priority fee with buffer\n */\nfunction calculatePriorityFee(basePriorityFee: bigint, multiplier: number): bigint {\n\treturn BigInt(Math.ceil(Number(basePriorityFee) * multiplier));\n}\n\n/**\n * Calculates max fee with buffer\n */\nfunction calculateMaxFee(baseFee: bigint, priorityFee: bigint, multiplier: number): bigint {\n\treturn BigInt(Math.ceil(Number(baseFee) * multiplier)) + priorityFee;\n}\n", "export const config = {\n DEFAULT_BLOCK_CONFIRMATIONS: 2,\n};\n", "import { HardhatRuntimeEnvironment } from 'hardhat/types';\n\nimport { conceroNetworks } from '../constants/conceroNetworks';\nimport { getTrezorDeployEnabled, log } from '../utils';\nimport { extractProxyAdminAddress } from '../utils/extractProxyAdminAddress';\n\nexport interface ITxParams {\n\tgasLimit: bigint;\n\tlibraries: Record;\n}\n\nexport interface IDeployResult {\n\thash: string;\n\taddress: string;\n\tchainType: string;\n\tchainName: string;\n\tproxyAdminAddress: string;\n}\n\nexport interface IGenericDeployParams {\n\thre: HardhatRuntimeEnvironment;\n\tcontractName: string;\n\ttxParams?: Partial;\n}\n\nexport const genericDeploy = async (\n\t{ hre, contractName, txParams }: IGenericDeployParams,\n\t...contractConstructorArgs: any[]\n): Promise => {\n\tconst [deployer] = await hre.ethers.getSigners();\n\tconst chain = conceroNetworks[hre.network.name];\n\n\tlog(\n\t\t`Deploy ${contractName} from address: ${await deployer.getAddress()}`,\n\t\t'contract deploy',\n\t\tchain.name\n\t);\n\n\tconst contractFactory = await hre.ethers.getContractFactory(contractName, { libraries: txParams?.libraries });\n\n\tconst deployOverrides = txParams?.gasLimit ? { gasLimit: txParams.gasLimit } : {};\n\n\tconst deployTx = contractFactory.getDeployTransaction(\n\t\t...contractConstructorArgs,\n\t\tdeployOverrides\n\t);\n\n\tconst isTrezorDeployEnabled = getTrezorDeployEnabled();\n\tif (deployTx.data && isTrezorDeployEnabled) {\n\t\tlog(\n\t\t\t`${contractName} input data: ${deployTx.data} \\n size: ${(deployTx.data.length - 2) / 2}`,\n\t\t\t'bytecode',\n\t\t\tchain.name\n\t\t);\n\t}\n\n\tconst contract = await contractFactory.deploy(...contractConstructorArgs, deployOverrides);\n\tconst receipt = await contract.deploymentTransaction()?.wait();\n\tconst deploymentAddress = await contract.getAddress();\n\n\tif (hre.tenderly) {\n\t\tawait hre.tenderly.verify({ name: contractName, address: deploymentAddress });\n\t}\n\n\tlog(\n\t\t`Deployed at: ${deploymentAddress}`,\n\t\t`deploy ${contractName}`,\n\t\tchain.name\n\t);\n\n\treturn {\n\t\thash: contract.deploymentTransaction()?.hash,\n\t\taddress: deploymentAddress,\n\t\tchainName: chain.name,\n\t\tchainType: chain.type,\n\t\tproxyAdminAddress: extractProxyAdminAddress(receipt)\n\t};\n};\n", "import {\n\tAddress,\n\terc20Abi,\n\tformatUnits,\n\tHash,\n\tparseUnits,\n\tPublicClient,\n\tWalletClient,\n} from 'viem';\n\nexport class TokenSender {\n\tprivate walletClient: WalletClient;\n\tprivate publicClient: PublicClient;\n\n\tconstructor(walletClient: WalletClient, publicClient: PublicClient) {\n\t\tthis.walletClient = walletClient;\n\t\tthis.publicClient = publicClient;\n\t}\n\n\tpublic async sendToken(\n\t\ttokenAddress: Address,\n\t\tamount: string,\n\t\trecipient: Address\n\t): Promise {\n\t\tconst [tokenDecimals, tokenSymbol, tokenBalance] = await Promise.all([\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'decimals',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'symbol',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'balanceOf',\n\t\t\t\targs: [this.walletClient.account?.address!],\n\t\t\t}),\n\t\t]);\n\n\t\tconsole.log(\n\t\t\t`Current ${tokenSymbol} balance ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t);\n\n\t\tif (parseUnits(amount, tokenDecimals) > tokenBalance) {\n\t\t\tthrow new Error(\n\t\t\t\t`Insufficient balance. Required: ${amount}, available: ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t\t);\n\t\t}\n\n\t\tconst txHash = await this.walletClient.writeContract({\n\t\t\taddress: tokenAddress,\n\t\t\tabi: erc20Abi,\n\t\t\tfunctionName: 'transfer',\n\t\t\targs: [recipient, parseUnits(amount, tokenDecimals)],\n\t\t\tchain: this.walletClient.chain,\n\t\t\taccount: this.walletClient.account!,\n\t\t});\n\n\t\tconst { status } = await this.publicClient.waitForTransactionReceipt({\n\t\t\thash: txHash,\n\t\t});\n\n\t\tif (status !== 'success') {\n\t\t\tthrow new Error(`Error sending token. Hash: ${txHash}`);\n\t\t}\n\n\t\tconsole.log(`Token successfully sent. Hash: ${txHash}`);\n\n\t\treturn txHash;\n\t}\n}\n"], + "mappings": "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", "names": ["process", "config", "import_viem", "log", "config", "path", "import_viem", "testnetChains", "mainnetChains", "import_viem"] } diff --git a/dist/index.esm.js b/dist/index.esm.js index d9f6320..49a1224 100644 --- a/dist/index.esm.js +++ b/dist/index.esm.js @@ -463,6 +463,81 @@ function getViemAccount(chainType, accountType) { }); } +// src/utils/getGasParameters.ts +var NETWORK_MINIMUMS = { + polygon: { + minTipCap: BigInt(3e10), + // 30 gwei + minBaseFee: BigInt(3e10) + // 30 gwei + } + // Add other networks as needed +}; +async function getGasParameters(chain, priorityMultiplier = 1, maxFeeMultiplier = 1) { + const { publicClient } = getFallbackClients(chain); + try { + const block = await publicClient.getBlock(); + const baseFee = block.baseFeePerGas ?? BigInt(0); + const networkMinimums = getNetworkMinimums(chain); + const suggestedPriorityFee = await getSuggestedPriorityFee(publicClient, chain); + const calculatedPriorityFee = calculatePriorityFee( + suggestedPriorityFee, + priorityMultiplier + ); + const priorityFee = calculatedPriorityFee > networkMinimums.minTipCap ? calculatedPriorityFee : networkMinimums.minTipCap; + const calculatedMaxFee = calculateMaxFee(baseFee, priorityFee, maxFeeMultiplier); + const minRequiredMaxFee = networkMinimums.minBaseFee + priorityFee; + const maxFeePerGas = calculatedMaxFee > minRequiredMaxFee ? calculatedMaxFee : minRequiredMaxFee; + return { + maxFeePerGas, + maxPriorityFeePerGas: priorityFee + }; + } catch (error) { + const networkMinimums = getNetworkMinimums(chain); + const gasPrice = await publicClient.getGasPrice(); + const priorityFee = networkMinimums.minTipCap; + return { + maxFeePerGas: gasPrice > networkMinimums.minBaseFee + priorityFee ? gasPrice : networkMinimums.minBaseFee + priorityFee, + maxPriorityFeePerGas: priorityFee + }; + } +} +function getNetworkMinimums(chain) { + const isPolygon = chain.chainId === 137 || chain.name.toLowerCase().includes("polygon"); + if (isPolygon) { + return NETWORK_MINIMUMS.polygon; + } + return { + minTipCap: BigInt(15e8), + // 1.5 gwei + minBaseFee: BigInt(1e9) + // 1 gwei + }; +} +async function getSuggestedPriorityFee(publicClient, chain) { + try { + const isPolygon = chain.chainId === 137 || chain.name.toLowerCase().includes("polygon"); + const blocksToAnalyze = isPolygon ? 5 : 10; + const blocks = await Promise.all( + Array.from( + { length: blocksToAnalyze }, + (_, i) => publicClient.getBlock({ blockNumber: BigInt(-1 - i) }) + ) + ); + const priorityFees = blocks.map((block) => block.baseFeePerGas ?? BigInt(0)).sort((a, b) => a < b ? -1 : 1); + const index = isPolygon ? Math.floor(priorityFees.length * 0.75) : Math.floor(priorityFees.length * 0.5); + return priorityFees[index]; + } catch { + return getNetworkMinimums(chain).minTipCap; + } +} +function calculatePriorityFee(basePriorityFee, multiplier) { + return BigInt(Math.ceil(Number(basePriorityFee) * multiplier)); +} +function calculateMaxFee(baseFee, priorityFee, multiplier) { + return BigInt(Math.ceil(Number(baseFee) * multiplier)) + priorityFee; +} + // src/constants/config.ts var config = { DEFAULT_BLOCK_CONFIRMATIONS: 2 @@ -477,7 +552,7 @@ var genericDeploy = async ({ hre, contractName, txParams }, ...contractConstruct "contract deploy", chain.name ); - const contractFactory = await hre.ethers.getContractFactory(contractName); + const contractFactory = await hre.ethers.getContractFactory(contractName, { libraries: txParams?.libraries }); const deployOverrides = txParams?.gasLimit ? { gasLimit: txParams.gasLimit } : {}; const deployTx = contractFactory.getDeployTransaction( ...contractConstructorArgs, @@ -589,6 +664,7 @@ export { getClients, getEnvVar, getFallbackClients, + getGasParameters, getNetworkEnvKey, getNetworkKey, getTestClient, diff --git a/dist/index.esm.js.map b/dist/index.esm.js.map index 289d082..9782a3f 100644 --- a/dist/index.esm.js.map +++ b/dist/index.esm.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../src/types/networkTypes.ts", "../src/utils/createViemChain.ts", "../src/utils/getEnvVar.ts", "../src/utils/log.ts", "../src/utils/formatting.ts", "../src/networks/getNetworkEnvKey.ts", "../src/utils/getTrezorDeployEnabled.ts", "../src/utils/getWallet.ts", "../src/utils/ethersSignerCallContract.ts", "../src/utils/compileContracts.ts", "../src/utils/localhostViemChain.ts", "../src/utils/extractProxyAdminAddress.ts", "../src/utils/createEnvUpdater.ts", "../src/utils/getActualGasData.ts", "../src/utils/getViemClients.ts", "../src/constants/conceroNetworks.ts", "../src/constants/config.ts", "../src/deploy/GenericDeploy.ts", "../src/tokens/TokenSender.ts"], - "sourcesContent": ["import { type NetworkType } from './ConceroNetwork';\n\nexport const networkTypes: Record = {\n\tmainnet: 'mainnet',\n\ttestnet: 'testnet',\n\tlocalhost: 'localhost',\n};\n", "import { defineChain } from 'viem';\n\nimport { type ChainDefinition } from '../types';\n\nexport function createViemChain(\n\tchainDefinition: ChainDefinition\n): ReturnType {\n\treturn defineChain({\n\t\tid: chainDefinition.id,\n\t\tname: chainDefinition.name,\n\t\tnativeCurrency: {\n\t\t\tdecimals: 18,\n\t\t\tname: 'eth',\n\t\t\tsymbol: 'eth',\n\t\t},\n\t\trpcUrls: {\n\t\t\tdefault: { http: chainDefinition.rpcUrls },\n\t\t},\n\t\tblockExplorers: chainDefinition.blockExplorer\n\t\t\t? {\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\tname: chainDefinition.blockExplorer.name,\n\t\t\t\t\t\turl: chainDefinition.blockExplorer.url,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: undefined,\n\t\ttestnet: chainDefinition.isTestnet,\n\t});\n}\n", "import process from 'process';\nimport { Address } from 'viem';\n\nimport { warn } from './log';\nimport { shorten } from './formatting';\nimport { getNetworkEnvKey } from '../networks';\n\nexport function getEnvVar(key: string, defaultValue?: string): string {\n\tconst value = process.env[key];\n\tif (value === undefined || value === '') {\n\t\tif (defaultValue !== undefined) return defaultValue;\n\t\twarn(`Missing env variable: ${key}`, 'getEnvVar');\n\t\treturn '';\n\t}\n\n\treturn value;\n}\n\nexport interface EnvAddressConfig> {\n\tprefixes: TPrefixes;\n}\n\nexport function createEnvAddressGetter>(\n\tconfig: EnvAddressConfig,\n) {\n\tfunction getEnvAddress(\n\t\tprefix: keyof TPrefixes,\n\t\tnetworkName?: string,\n\t): [Address, string] {\n\t\tconst searchKey = networkName\n\t\t\t? `${config.prefixes[prefix]}_${getNetworkEnvKey(networkName)}`\n\t\t\t: config.prefixes[prefix];\n\n\t\tconst value = getEnvVar(searchKey) as Address;\n\t\tconst friendlyName = `${String(prefix)}(${shorten(value)})`\n\n\t\treturn [value, friendlyName];\n\t}\n\n\treturn { getEnvAddress };\n}\n", "const networkColors: Record = {\n\tethereum: '\\x1b[30m', // grey\n\tarbitrum: '\\x1b[34m', // blue\n\tpolygon: '\\x1b[35m', // magenta\n\tavalanche: '\\x1b[31m', // red\n\tbase: '\\x1b[36m', // cyan\n\tethereumSepolia: '\\x1b[30m', // grey\n\tarbitrumSepolia: '\\x1b[34m', // blue\n\toptimismSepolia: '\\x1b[31m', // red\n\tpolygonAmoy: '\\x1b[35m', // magenta\n\tavalancheFuji: '\\x1b[31m', // red\n\tbaseSepolia: '\\x1b[36m', // cyan\n\thardhat: '\\x1b[32m', // green\n\tlocalhost: '\\x1b[32m', // green\n};\nconst reset = '\\x1b[0m';\n\nexport function log(message: any, functionName: string, networkName?: string) {\n\tconst greenFill = '\\x1b[32m';\n\tconst network = networkName ? `\\x1b[35m[${networkName}]${reset}` : '';\n\n\tconsole.log(`${network}${greenFill}[${functionName}]${reset}`, message);\n}\n\nexport function warn(message: any, functionName: string) {\n\tconst yellowFill = '\\x1b[33m';\n\n\tconsole.log(`${yellowFill}[${functionName}]${reset}`, message);\n}\n\nexport function err(message: any, functionName: string, networkName?: string) {\n\tconst redFill = '\\x1b[31m';\n\tconst network = networkName\n\t\t? `${networkColors[networkName]}[${networkName}]${reset}`\n\t\t: '';\n\n\tconsole.log(\n\t\t`${network}${redFill}[${functionName}] ERROR:${reset}`,\n\t\tmessage\n\t);\n}\n\nexport default log;\n", "import { type Address } from \"viem\";\n\nexport function shorten(address: Address) {\n\treturn `${address.slice(0, 6)}...${address.slice(-4)}`;\n}\n\nexport function formatGas(gasAmountWei: bigint) {\n\t// splits gas number with commas like so: 1,000,000\n\treturn gasAmountWei.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n}\n", "/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkEnvKey(networkName: string): string {\n if (!networkName) {\n throw new Error('Network name must be provided');\n }\n return camelCaseToCapsSnakeCase(networkName);\n}\n\n/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkKey(NETWORK_NAME: string): string {\n if (!NETWORK_NAME) {\n throw new Error('Network name must be provided');\n }\n return capsSnakeCaseToCamelCase(NETWORK_NAME);\n}\n\n/**\n * Converts a string from CAPS_SNAKE_CASE to camelCase\n *\n * @param snakeCaseString The string in CAPS_SNAKE_CASE format\n * @returns The string converted to camelCase format\n */\nexport function capsSnakeCaseToCamelCase(snakeCaseString: string): string {\n if (!snakeCaseString) {\n throw new Error('String must be provided');\n }\n\n return snakeCaseString\n .toLowerCase()\n .replace(/_([a-z])/g, (_, char) => char.toUpperCase());\n}\n\n/**\n * Converts a string from camelCase to CAPS_SNAKE_CASE\n *\n * @param camelCaseString The string in camelCase format\n * @returns The string converted to CAPS_SNAKE_CASE format\n */\nexport function camelCaseToCapsSnakeCase(camelCaseString: string): string {\n if (!camelCaseString) {\n throw new Error('String must be provided');\n }\n\n return camelCaseString.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toUpperCase();\n}\n\nexport function getNetworkName(networkEnvKey: string): string {\n if (!networkEnvKey) {\n throw new Error('Network name must be provided');\n }\n\n return networkEnvKey\n .toLowerCase()\n .split('_')\n .map((word, index) =>\n index === 0 ? word : word[0].toUpperCase() + word.slice(1)\n )\n .join('');\n}\n", "import { getEnvVar } from './getEnvVar';\n\nexport const getTrezorDeployEnabled = () =>\n\tgetEnvVar('TREZOR_DEPLOY_ENABLED', 'false') === 'true';\n", "import { type NetworkType } from '../types';\nimport { warn } from './log';\n\nexport function getWallet(\n\tchainType: NetworkType,\n\taccountType:\n\t\t| 'proxyDeployer'\n\t\t| 'deployer'\n\t\t| 'operator',\n\twalletType: 'privateKey' | 'address'\n) {\n\tlet prefix;\n\tlet walletKey;\n\tswitch (accountType) {\n\t\tcase 'proxyDeployer':\n\t\t\tprefix = 'PROXY_DEPLOYER';\n\t\t\tbreak;\n\t\tcase 'deployer':\n\t\t\tprefix = 'DEPLOYER';\n\t\t\tbreak;\n\t\tcase 'operator':\n\t\t\tprefix = 'OPERATOR';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown account type: ${accountType}`);\n\t}\n\n\tswitch (walletType) {\n\t\tcase 'privateKey':\n\t\t\twalletKey = 'PRIVATE_KEY';\n\t\t\tbreak;\n\t\tcase 'address':\n\t\t\twalletKey = 'ADDRESS';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown wallet type: ${walletType}`);\n\t}\n\n\t// Determine the environment variable key based on the wallet type\n\tconst envKey = `${chainType.toUpperCase()}_${prefix}_${walletKey}`;\n\tconst walletValue = process.env[envKey];\n\n\tif (!walletValue) {\n\t\twarn(`Missing env variable: ${envKey}`, 'getEnvVar');\n\t}\n\n\treturn walletValue;\n}\n", "import { HardhatRuntimeEnvironment } from \"hardhat/types\";\nimport { Address, Hash } from \"viem\";\n\nimport { log } from \"./log\";\n\nexport const ethersSignerCallContract = async (\n\thre: HardhatRuntimeEnvironment,\n\tcontract: Address,\n\tabi: any[],\n\tfunctionName: string,\n\t...functionArgs: any[]\n) => {\n\tconst [ethersSigner] = await hre.ethers.getSigners();\n\tconst ethersContract = new hre.ethers.Contract(contract, abi, ethersSigner);\n\tconst unsignedTx = await ethersContract[functionName].populateTransaction(...functionArgs);\n\n\tlog(\n\t\t`Size: ${(unsignedTx.data.length - 2) / 2}, Input data: ${unsignedTx.data}, Address: ${unsignedTx.to}`,\n\t\tfunctionName,\n\t\thre.network.name,\n\t);\n\n\treturn (await ethersSigner.sendTransaction(unsignedTx)).hash as Hash;\n};\n", "/*\nhardhat compile\n --concurrency Number of compilation jobs executed in parallel. Defaults to the number of CPU cores - 1 (default: 9)\n --force Force compilation ignoring cache\n --no-size-contracts Don't size contracts after running this task, even if runOnCompile option is enabled\n --no-typechain Skip Typechain compilation\n --quiet Makes the compilation process less verbose\n */\nimport { execSync } from \"child_process\";\n\ninterface HardhatCompileParams {\n\tconcurrency?: number;\n\tforce?: boolean;\n\tnoSizeContracts?: boolean;\n\tnoTypechain?: boolean;\n\tquiet?: boolean;\n}\n\nexport function compileContracts({ quiet = true, force = false }: HardhatCompileParams) {\n\tconst packageManager = process.env[\"PACKAGE_MANAGER\"] || \"yarn\";\n\tconst command = `${packageManager} compile`;\n\tconst args = [];\n\t// if (concurrency) args.push(`--concurrency ${concurrency}`);\n\t// if (noSizeContracts) args.push(\"--no-size-contracts\");\n\t// if (noTypechain) args.push(\"--no-typechain\");\n\tif (quiet) args.push(\"--quiet\");\n\tif (force) args.push(\"--force\");\n\texecSync(`${command} ${args.join(\" \")}`, { stdio: \"inherit\" });\n}\n", "import { defineChain } from \"viem\";\n\nexport const localhostViemChain = defineChain({\n\tid: Number(process.env.LOCALHOST_FORK_CHAIN_ID),\n\tname: \"localhost\",\n\tnativeCurrency: {\n\t\tdecimals: 18,\n\t\tname: \"eth\",\n\t\tsymbol: \"eth\",\n\t},\n\trpcUrls: {\n\t\tdefault: { http: [process.env.LOCALHOST_RPC_URL ?? \"http://127.0.0.1:8545\"] },\n\t},\n\ttestnet: true,\n});\n\nexport const hardhatViemChain = defineChain({\n\tid: Number(process.env.HARDHAT_CHAIN_ID),\n\tname: \"hardhat\",\n\tnativeCurrency: {\n\t\tdecimals: 18,\n\t\tname: \"eth\",\n\t\tsymbol: \"eth\",\n\t},\n\trpcUrls: {\n\t\tdefault: { http: [process.env.HARDHAT_RPC_URL ?? \"http://127.0.0.1:8545\"] },\n\t},\n\ttestnet: true,\n});\n", "import { ethers } from 'ethers';\n\nexport function extractProxyAdminAddress(receipt: ethers.TransactionReceipt | null): string {\n\tif (!receipt) return ethers.ZeroAddress;\n\n\tconst adminChangedTopic = ethers.id(\"AdminChanged(address,address)\");\n\tconst adminChangedLog = receipt.logs.find((log: ethers.Log) => log.topics[0] === adminChangedTopic);\n\n\tif (!adminChangedLog) return ethers.ZeroAddress;\n\n\ttry {\n\t\tconst abiCoder = ethers.AbiCoder.defaultAbiCoder();\n\t\tconst [, newAdmin] = abiCoder.decode(['address', 'address'], adminChangedLog.data);\n\t\treturn newAdmin;\n\t} catch {\n\t\treturn ethers.ZeroAddress;\n\t}\n}", "import { existsSync, readFileSync, writeFileSync } from \"fs\";\nimport path from \"path\";\nimport { getNetworkEnvKey } from \"../networks/getNetworkEnvKey\";\nimport log from \"./log\";\n\nexport interface EnvUpdaterConfig> {\n\tprefixes: TPrefixes;\n\tbasePath: string;\n}\n\nexport function createEnvUpdater<\n\tTPrefixes extends Record,\n\tTEnvFileName extends string,\n>(config: EnvUpdaterConfig) {\n\tfunction updateEnvVariable(\n\t\tkey: string,\n\t\tnewValue: string,\n\t\tenvFileName: TEnvFileName,\n\t): void {\n\t\tconst filePath = path.join(config.basePath, `.env.${envFileName}`);\n\n\t\tif (!existsSync(filePath)) {\n\t\t\tthrow new Error(`File not found: ${filePath}`);\n\t\t}\n\n\t\tconst envContents = readFileSync(filePath, \"utf8\");\n\t\tlet lines = envContents.split(/\\r?\\n/);\n\n\t\tconst keyExists = lines.some(line => line.startsWith(`${key}=`));\n\n\t\tif (!keyExists) {\n\t\t\tlog(\n\t\t\t\t`Key ${key} not found in .env file. Adding to ${filePath}`,\n\t\t\t\t\"updateEnvVariable\",\n\t\t\t);\n\t\t\tlines.push(`${key}=${newValue}`);\n\t\t} else {\n\t\t\tlines = lines.map(line => {\n\t\t\t\tconst [currentKey] = line.split(\"=\");\n\t\t\t\tif (currentKey === key) {\n\t\t\t\t\treturn `${key}=${newValue}`;\n\t\t\t\t}\n\t\t\t\treturn line;\n\t\t\t});\n\t\t}\n\n\t\twriteFileSync(filePath, lines.join(\"\\n\"));\n\t\tprocess.env[key] = newValue;\n\t}\n\n\tfunction updateEnvAddress(\n\t\tprefix: keyof TPrefixes,\n\t\tnewValue: string,\n\t\tenvFileName: TEnvFileName,\n\t\tnetworkPostfix?: string,\n\t): void {\n\t\tconst searchKey = networkPostfix\n\t\t\t? `${config.prefixes[prefix]}_${getNetworkEnvKey(networkPostfix)}`\n\t\t\t: String(config.prefixes[prefix]);\n\n\t\tupdateEnvVariable(searchKey, newValue, envFileName);\n\t}\n\n\treturn { updateEnvVariable, updateEnvAddress };\n}\n", "import { PublicClient } from 'viem';\n\ntype GasData = {\n\tgasPrice?: string;\n\tmaxFeePerGas?: string;\n\tmaxPriorityFeePerGas?: string;\n};\n\nexport async function getActualGasData(\n\tpublicClient: PublicClient\n): Promise {\n\tconst block = await publicClient.getBlock();\n\n\tconst isEIP1559 = !!block.baseFeePerGas;\n\n\tlet gasPrice = 0n;\n\tlet maxPriorityFeePerGas = 0n;\n\ttry {\n\t\tif (isEIP1559) {\n\t\t\tconst { maxFeePerGas } = await publicClient.estimateFeesPerGas();\n\t\t\tgasPrice = maxFeePerGas;\n\t\t\tmaxPriorityFeePerGas =\n\t\t\t\tawait publicClient.estimateMaxPriorityFeePerGas();\n\t\t} else {\n\t\t\tgasPrice = await publicClient.getGasPrice();\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('Error getting actual gas data:', error);\n\t\treturn {\n\t\t\tgasPrice: '0',\n\t\t\tmaxFeePerGas: '0',\n\t\t\tmaxPriorityFeePerGas: '0',\n\t\t};\n\t}\n\n\tconst gasDataLegacy = {\n\t\tgasPrice: gasPrice.toString(),\n\t};\n\n\tconst gasDataEIP1559 = {\n\t\tmaxFeePerGas: gasPrice.toString(),\n\t\tmaxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n\t};\n\n\tconst gasData: GasData = isEIP1559 ? gasDataEIP1559 : gasDataLegacy;\n\n\treturn gasData;\n}\n", "import {\n\tChain,\n\ttype TestClient,\n\ttype PublicClient,\n\ttype WalletClient,\n\tcreatePublicClient,\n\tcreateTestClient,\n\tcreateWalletClient,\n\tfallback,\n\thttp,\n\tpublicActions,\n\twalletActions,\n\tnonceManager,\n} from \"viem\";\nimport { privateKeyToAccount, type PrivateKeyAccount } from \"viem/accounts\";\n\nimport { type ConceroNetwork, type NetworkType } from \"../types\";\nimport { getWallet } from \"../utils\";\nimport { localhostViemChain } from \"./localhostViemChain\";\nimport { conceroNetworks } from \"../constants/conceroNetworks\";\n\nfunction getClients(\n\tviemChain: Chain,\n\turl: string | undefined,\n\taccount: PrivateKeyAccount = privateKeyToAccount(\n\t\t`0x${process.env.TESTNET_DEPLOYER_PRIVATE_KEY}`,\n\t),\n): {\n\twalletClient: WalletClient;\n\tpublicClient: PublicClient;\n\taccount: PrivateKeyAccount;\n} {\n\tconst publicClient = createPublicClient({ transport: http(url), chain: viemChain });\n\tconst walletClient = createWalletClient({ transport: http(url), chain: viemChain, account });\n\n\treturn { walletClient, publicClient, account };\n}\n\nexport type ExtendedTestClient = TestClient & WalletClient & PublicClient;\n\nfunction getTestClient(account: PrivateKeyAccount): ExtendedTestClient {\n\tconst testClient = createTestClient({\n\t\tchain: localhostViemChain,\n\t\tmode: \"hardhat\",\n\t\ttransport: http(),\n\t\taccount,\n\t})\n\t\t.extend(publicActions)\n\t\t.extend(walletActions);\n\n\treturn testClient as unknown as ExtendedTestClient;\n}\n\nfunction getFallbackClients(\n\tchain: ConceroNetwork,\n\taccount?: PrivateKeyAccount,\n): {\n\twalletClient: WalletClient;\n\tpublicClient: PublicClient;\n\taccount: PrivateKeyAccount;\n} {\n\tif (!account) {\n\t\tswitch (chain.type) {\n\t\t\tcase \"mainnet\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.MAINNET_DEPLOYER_PRIVATE_KEY}`);\n\t\t\t\tbreak;\n\t\t\tcase \"testnet\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.TESTNET_DEPLOYER_PRIVATE_KEY}`, {\n\t\t\t\t\tnonceManager: nonceManager,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"localhost\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.LOCALHOST_DEPLOYER_PRIVATE_KEY}`);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unsupported chain type: ${chain.type}`);\n\t\t}\n\t}\n\n\tconst { viemChain, name } = chain;\n\n\tif (!conceroNetworks[name].rpcUrls.length) {\n\t\tthrow new Error(`No URLs configured for chain: ${name}`);\n\t}\n\n\tconst transport = fallback(\n\t\tconceroNetworks[name].rpcUrls.map(url =>\n\t\t\thttp(url, {\n\t\t\t\ttimeout: 10000,\n\t\t\t\tretryCount: 1,\n\t\t\t\tretryDelay: 250,\n\t\t\t\tonFetchResponse: async response => {\n\t\t\t\t\tif (response.status >= 400) {\n\t\t\t\t\t\tthrow new Error(`HTTP error: ${response.status} ${response.statusText}`);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t}),\n\t\t),\n\t);\n\tconst publicClient = createPublicClient({ transport, chain: viemChain });\n\tconst walletClient = createWalletClient({ transport, chain: viemChain, account });\n\n\treturn { walletClient, publicClient, account };\n}\n\nfunction getViemAccount(\n\tchainType: NetworkType,\n\taccountType: \"proxyDeployer\" | \"deployer\",\n) {\n\tconst privateKey = `0x${getWallet(chainType, accountType, \"privateKey\")}`;\n\n\treturn privateKeyToAccount(privateKey as `0x${string}`, {\n\t\tnonceManager: nonceManager,\n\t});\n}\n\nexport { getClients, getFallbackClients, getTestClient, getViemAccount };\n", "import mainnetChains from '@concero/concero-networks/output/chains.mainnet.json';\nimport testnetChains from '@concero/concero-networks/output/chains.testnet.json';\nimport type { Chain } from '@concero/concero-networks/src/types';\n\nimport {\n\ttype NetworkType,\n\ttype ChainDefinition,\n\ttype ConceroNetwork,\n\tnetworkTypes,\n} from '../types';\nimport { getWallet } from '../utils';\nimport { createViemChain } from '../utils/createViemChain';\nimport { getTrezorDeployEnabled } from '../utils/getTrezorDeployEnabled';\n\nconst mainnetProxyDeployerPK = getWallet(\n\t'mainnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\nconst testnetProxyDeployerPK = getWallet(\n\t'testnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\n\nconst mainnetDeployerPK = getWallet('mainnet', 'deployer', 'privateKey');\nconst testnetDeployerPK = getWallet('testnet', 'deployer', 'privateKey');\n\nconst trezorDeployEnabled = getTrezorDeployEnabled();\n\nconst testnetAccounts = [testnetDeployerPK, testnetProxyDeployerPK];\n\nexport type ConceroMainnetNetworkNames =\n\t(typeof mainnetChains)[keyof typeof mainnetChains]['name'];\nexport type ConceroTestnetNetworkNames =\n\t(typeof testnetChains)[keyof typeof testnetChains]['name'];\n\nfunction createExtendedNetworks>(\n\tchains: T,\n\tnetworkType: NetworkType,\n\taccounts: (string | undefined)[]\n): Record {\n\tconst validAccounts = accounts.filter((acc): acc is string => !!acc);\n\n\treturn Object.fromEntries(\n\t\tObject.values(chains).map(chain => {\n\t\t\tconst chainDefinition: ChainDefinition = {\n\t\t\t\tid: parseInt(chain.id),\n\t\t\t\tname: chain.name,\n\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\tisTestnet: chain.isTestnet ?? false,\n\t\t\t\t...(chain.blockExplorers?.[0] && {\n\t\t\t\t\tblockExplorer: {\n\t\t\t\t\t\tname: chain.blockExplorers[0].name,\n\t\t\t\t\t\turl: chain.blockExplorers[0].url,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t};\n\n\t\t\tconst viemChain = createViemChain(chainDefinition);\n\n\t\t\treturn [\n\t\t\t\tchain.name,\n\t\t\t\t{\n\t\t\t\t\tname: chain.name,\n\t\t\t\t\tchainId: parseInt(chain.id),\n\t\t\t\t\ttype: networkType,\n\t\t\t\t\turl: chain.rpcUrls[0] || '',\n\t\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\t\tsaveDeployments: false,\n\t\t\t\t\t...(!trezorDeployEnabled && { accounts: validAccounts }),\n\t\t\t\t\tchainSelector: BigInt(chain.chainSelector),\n\t\t\t\t\tconfirmations: 1,\n\t\t\t\t\tviemChain,\n\t\t\t\t\t...(trezorDeployEnabled && {\n\t\t\t\t\t\ttrezorDerivationPaths: [\n\t\t\t\t\t\t\t[44, 60, 0, 0, 0],\n\t\t\t\t\t\t\t[44, 60, 0, 0, 1],\n\t\t\t\t\t\t],\n\t\t\t\t\t\ttrezorInsecureDerivation: true,\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t];\n\t\t})\n\t) as Record;\n}\n\nexport const testnetNetworks = createExtendedNetworks(\n\ttestnetChains as unknown as Record,\n\tnetworkTypes.testnet,\n\ttestnetAccounts\n);\n\nexport const mainnetNetworks = createExtendedNetworks(\n\tmainnetChains as unknown as Record,\n\tnetworkTypes.mainnet,\n\t[mainnetDeployerPK, mainnetProxyDeployerPK]\n);\n\nexport const conceroNetworks: Record = {\n\t...testnetNetworks,\n\t...mainnetNetworks,\n};\n", "export const config = {\n DEFAULT_BLOCK_CONFIRMATIONS: 2,\n};\n", "import { HardhatRuntimeEnvironment } from 'hardhat/types';\n\nimport { conceroNetworks } from '../constants/conceroNetworks';\nimport { getTrezorDeployEnabled, log } from '../utils';\nimport { extractProxyAdminAddress } from '../utils/extractProxyAdminAddress';\n\nexport interface ITxParams {\n\tgasLimit: bigint;\n}\n\nexport interface IDeployResult {\n\thash: string;\n\taddress: string;\n\tchainType: string;\n\tchainName: string;\n\tproxyAdminAddress: string;\n}\n\nexport interface IGenericDeployParams {\n\thre: HardhatRuntimeEnvironment;\n\tcontractName: string;\n\ttxParams?: Partial;\n}\n\nexport const genericDeploy = async (\n\t{ hre, contractName, txParams }: IGenericDeployParams,\n\t...contractConstructorArgs: any[]\n): Promise => {\n\tconst [deployer] = await hre.ethers.getSigners();\n\tconst chain = conceroNetworks[hre.network.name];\n\n\tlog(\n\t\t`Deploy ${contractName} from address: ${await deployer.getAddress()}`,\n\t\t'contract deploy',\n\t\tchain.name\n\t);\n\n\tconst contractFactory = await hre.ethers.getContractFactory(contractName);\n\n\tconst deployOverrides = txParams?.gasLimit ? { gasLimit: txParams.gasLimit } : {};\n\n\tconst deployTx = contractFactory.getDeployTransaction(\n\t\t...contractConstructorArgs,\n\t\tdeployOverrides\n\t);\n\n\tconst isTrezorDeployEnabled = getTrezorDeployEnabled();\n\tif (deployTx.data && isTrezorDeployEnabled) {\n\t\tlog(\n\t\t\t`${contractName} input data: ${deployTx.data} \\n size: ${(deployTx.data.length - 2) / 2}`,\n\t\t\t'bytecode',\n\t\t\tchain.name\n\t\t);\n\t}\n\n\tconst contract = await contractFactory.deploy(...contractConstructorArgs, deployOverrides);\n\tconst receipt = await contract.deploymentTransaction()?.wait();\n\tconst deploymentAddress = await contract.getAddress();\n\n\tif (hre.tenderly) {\n\t\tawait hre.tenderly.verify({ name: contractName, address: deploymentAddress });\n\t}\n\n\tlog(\n\t\t`Deployed at: ${deploymentAddress}`,\n\t\t`deploy ${contractName}`,\n\t\tchain.name\n\t);\n\n\treturn {\n\t\thash: contract.deploymentTransaction()?.hash,\n\t\taddress: deploymentAddress,\n\t\tchainName: chain.name,\n\t\tchainType: chain.type,\n\t\tproxyAdminAddress: extractProxyAdminAddress(receipt)\n\t};\n};\n", "import {\n\tAddress,\n\terc20Abi,\n\tformatUnits,\n\tHash,\n\tparseUnits,\n\tPublicClient,\n\tWalletClient,\n} from 'viem';\n\nexport class TokenSender {\n\tprivate walletClient: WalletClient;\n\tprivate publicClient: PublicClient;\n\n\tconstructor(walletClient: WalletClient, publicClient: PublicClient) {\n\t\tthis.walletClient = walletClient;\n\t\tthis.publicClient = publicClient;\n\t}\n\n\tpublic async sendToken(\n\t\ttokenAddress: Address,\n\t\tamount: string,\n\t\trecipient: Address\n\t): Promise {\n\t\tconst [tokenDecimals, tokenSymbol, tokenBalance] = await Promise.all([\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'decimals',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'symbol',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'balanceOf',\n\t\t\t\targs: [this.walletClient.account?.address!],\n\t\t\t}),\n\t\t]);\n\n\t\tconsole.log(\n\t\t\t`Current ${tokenSymbol} balance ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t);\n\n\t\tif (parseUnits(amount, tokenDecimals) > tokenBalance) {\n\t\t\tthrow new Error(\n\t\t\t\t`Insufficient balance. Required: ${amount}, available: ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t\t);\n\t\t}\n\n\t\tconst txHash = await this.walletClient.writeContract({\n\t\t\taddress: tokenAddress,\n\t\t\tabi: erc20Abi,\n\t\t\tfunctionName: 'transfer',\n\t\t\targs: [recipient, parseUnits(amount, tokenDecimals)],\n\t\t\tchain: this.walletClient.chain,\n\t\t\taccount: this.walletClient.account!,\n\t\t});\n\n\t\tconst { status } = await this.publicClient.waitForTransactionReceipt({\n\t\t\thash: txHash,\n\t\t});\n\n\t\tif (status !== 'success') {\n\t\t\tthrow new Error(`Error sending token. Hash: ${txHash}`);\n\t\t}\n\n\t\tconsole.log(`Token successfully sent. Hash: ${txHash}`);\n\n\t\treturn txHash;\n\t}\n}\n"], - "mappings": "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", + "sources": ["../src/types/networkTypes.ts", "../src/utils/createViemChain.ts", "../src/utils/getEnvVar.ts", "../src/utils/log.ts", "../src/utils/formatting.ts", "../src/networks/getNetworkEnvKey.ts", "../src/utils/getTrezorDeployEnabled.ts", "../src/utils/getWallet.ts", "../src/utils/ethersSignerCallContract.ts", "../src/utils/compileContracts.ts", "../src/utils/localhostViemChain.ts", "../src/utils/extractProxyAdminAddress.ts", "../src/utils/createEnvUpdater.ts", "../src/utils/getActualGasData.ts", "../src/utils/getViemClients.ts", "../src/constants/conceroNetworks.ts", "../src/utils/getGasParameters.ts", "../src/constants/config.ts", "../src/deploy/GenericDeploy.ts", "../src/tokens/TokenSender.ts"], + "sourcesContent": ["import { type NetworkType } from './ConceroNetwork';\n\nexport const networkTypes: Record = {\n\tmainnet: 'mainnet',\n\ttestnet: 'testnet',\n\tlocalhost: 'localhost',\n};\n", "import { defineChain } from 'viem';\n\nimport { type ChainDefinition } from '../types';\n\nexport function createViemChain(\n\tchainDefinition: ChainDefinition\n): ReturnType {\n\treturn defineChain({\n\t\tid: chainDefinition.id,\n\t\tname: chainDefinition.name,\n\t\tnativeCurrency: {\n\t\t\tdecimals: 18,\n\t\t\tname: 'eth',\n\t\t\tsymbol: 'eth',\n\t\t},\n\t\trpcUrls: {\n\t\t\tdefault: { http: chainDefinition.rpcUrls },\n\t\t},\n\t\tblockExplorers: chainDefinition.blockExplorer\n\t\t\t? {\n\t\t\t\tdefault: {\n\t\t\t\t\tname: chainDefinition.blockExplorer.name,\n\t\t\t\t\turl: chainDefinition.blockExplorer.url,\n\t\t\t\t},\n\t\t\t}\n\t\t\t: undefined,\n\t\ttestnet: chainDefinition.isTestnet,\n\t});\n}\n", "import process from 'process';\nimport { Address } from 'viem';\n\nimport { warn } from './log';\nimport { shorten } from './formatting';\nimport { getNetworkEnvKey } from '../networks';\n\nexport function getEnvVar(key: string, defaultValue?: string): string {\n\tconst value = process.env[key];\n\tif (value === undefined || value === '') {\n\t\tif (defaultValue !== undefined) return defaultValue;\n\t\twarn(`Missing env variable: ${key}`, 'getEnvVar');\n\t\treturn '';\n\t}\n\n\treturn value;\n}\n\nexport interface EnvAddressConfig> {\n\tprefixes: TPrefixes;\n}\n\nexport function createEnvAddressGetter>(\n\tconfig: EnvAddressConfig,\n) {\n\tfunction getEnvAddress(\n\t\tprefix: keyof TPrefixes,\n\t\tnetworkName?: string,\n\t): [Address, string] {\n\t\tconst searchKey = networkName\n\t\t\t? `${config.prefixes[prefix]}_${getNetworkEnvKey(networkName)}`\n\t\t\t: config.prefixes[prefix];\n\n\t\tconst value = getEnvVar(searchKey) as Address;\n\t\tconst friendlyName = `${String(prefix)}(${shorten(value)})`\n\n\t\treturn [value, friendlyName];\n\t}\n\n\treturn { getEnvAddress };\n}\n", "const networkColors: Record = {\n\tethereum: '\\x1b[30m', // grey\n\tarbitrum: '\\x1b[34m', // blue\n\tpolygon: '\\x1b[35m', // magenta\n\tavalanche: '\\x1b[31m', // red\n\tbase: '\\x1b[36m', // cyan\n\tethereumSepolia: '\\x1b[30m', // grey\n\tarbitrumSepolia: '\\x1b[34m', // blue\n\toptimismSepolia: '\\x1b[31m', // red\n\tpolygonAmoy: '\\x1b[35m', // magenta\n\tavalancheFuji: '\\x1b[31m', // red\n\tbaseSepolia: '\\x1b[36m', // cyan\n\thardhat: '\\x1b[32m', // green\n\tlocalhost: '\\x1b[32m', // green\n};\nconst reset = '\\x1b[0m';\n\nexport function log(message: any, functionName: string, networkName?: string) {\n\tconst greenFill = '\\x1b[32m';\n\tconst network = networkName ? `\\x1b[35m[${networkName}]${reset}` : '';\n\n\tconsole.log(`${network}${greenFill}[${functionName}]${reset}`, message);\n}\n\nexport function warn(message: any, functionName: string) {\n\tconst yellowFill = '\\x1b[33m';\n\n\tconsole.log(`${yellowFill}[${functionName}]${reset}`, message);\n}\n\nexport function err(message: any, functionName: string, networkName?: string) {\n\tconst redFill = '\\x1b[31m';\n\tconst network = networkName\n\t\t? `${networkColors[networkName]}[${networkName}]${reset}`\n\t\t: '';\n\n\tconsole.log(\n\t\t`${network}${redFill}[${functionName}] ERROR:${reset}`,\n\t\tmessage\n\t);\n}\n\nexport default log;\n", "import { type Address } from \"viem\";\n\nexport function shorten(address: Address) {\n\treturn `${address.slice(0, 6)}...${address.slice(-4)}`;\n}\n\nexport function formatGas(gasAmountWei: bigint) {\n\t// splits gas number with commas like so: 1,000,000\n\treturn gasAmountWei.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n}\n", "/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkEnvKey(networkName: string): string {\n if (!networkName) {\n throw new Error('Network name must be provided');\n }\n return camelCaseToCapsSnakeCase(networkName);\n}\n\n/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkKey(NETWORK_NAME: string): string {\n if (!NETWORK_NAME) {\n throw new Error('Network name must be provided');\n }\n return capsSnakeCaseToCamelCase(NETWORK_NAME);\n}\n\n/**\n * Converts a string from CAPS_SNAKE_CASE to camelCase\n *\n * @param snakeCaseString The string in CAPS_SNAKE_CASE format\n * @returns The string converted to camelCase format\n */\nexport function capsSnakeCaseToCamelCase(snakeCaseString: string): string {\n if (!snakeCaseString) {\n throw new Error('String must be provided');\n }\n\n return snakeCaseString\n .toLowerCase()\n .replace(/_([a-z])/g, (_, char) => char.toUpperCase());\n}\n\n/**\n * Converts a string from camelCase to CAPS_SNAKE_CASE\n *\n * @param camelCaseString The string in camelCase format\n * @returns The string converted to CAPS_SNAKE_CASE format\n */\nexport function camelCaseToCapsSnakeCase(camelCaseString: string): string {\n if (!camelCaseString) {\n throw new Error('String must be provided');\n }\n\n return camelCaseString.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toUpperCase();\n}\n\nexport function getNetworkName(networkEnvKey: string): string {\n if (!networkEnvKey) {\n throw new Error('Network name must be provided');\n }\n\n return networkEnvKey\n .toLowerCase()\n .split('_')\n .map((word, index) =>\n index === 0 ? word : word[0].toUpperCase() + word.slice(1)\n )\n .join('');\n}\n", "import { getEnvVar } from './getEnvVar';\n\nexport const getTrezorDeployEnabled = () =>\n\tgetEnvVar('TREZOR_DEPLOY_ENABLED', 'false') === 'true';\n", "import { type NetworkType } from '../types';\nimport { warn } from './log';\n\nexport function getWallet(\n\tchainType: NetworkType,\n\taccountType:\n\t\t| 'proxyDeployer'\n\t\t| 'deployer'\n\t\t| 'operator',\n\twalletType: 'privateKey' | 'address'\n) {\n\tlet prefix;\n\tlet walletKey;\n\tswitch (accountType) {\n\t\tcase 'proxyDeployer':\n\t\t\tprefix = 'PROXY_DEPLOYER';\n\t\t\tbreak;\n\t\tcase 'deployer':\n\t\t\tprefix = 'DEPLOYER';\n\t\t\tbreak;\n\t\tcase 'operator':\n\t\t\tprefix = 'OPERATOR';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown account type: ${accountType}`);\n\t}\n\n\tswitch (walletType) {\n\t\tcase 'privateKey':\n\t\t\twalletKey = 'PRIVATE_KEY';\n\t\t\tbreak;\n\t\tcase 'address':\n\t\t\twalletKey = 'ADDRESS';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown wallet type: ${walletType}`);\n\t}\n\n\t// Determine the environment variable key based on the wallet type\n\tconst envKey = `${chainType.toUpperCase()}_${prefix}_${walletKey}`;\n\tconst walletValue = process.env[envKey];\n\n\tif (!walletValue) {\n\t\twarn(`Missing env variable: ${envKey}`, 'getEnvVar');\n\t}\n\n\treturn walletValue;\n}\n", "import { HardhatRuntimeEnvironment } from \"hardhat/types\";\nimport { Address, Hash } from \"viem\";\n\nimport { log } from \"./log\";\n\nexport const ethersSignerCallContract = async (\n\thre: HardhatRuntimeEnvironment,\n\tcontract: Address,\n\tabi: any[],\n\tfunctionName: string,\n\t...functionArgs: any[]\n) => {\n\tconst [ethersSigner] = await hre.ethers.getSigners();\n\tconst ethersContract = new hre.ethers.Contract(contract, abi, ethersSigner);\n\tconst unsignedTx = await ethersContract[functionName].populateTransaction(...functionArgs);\n\n\tlog(\n\t\t`Size: ${(unsignedTx.data.length - 2) / 2}, Input data: ${unsignedTx.data}, Address: ${unsignedTx.to}`,\n\t\tfunctionName,\n\t\thre.network.name,\n\t);\n\n\treturn (await ethersSigner.sendTransaction(unsignedTx)).hash as Hash;\n};\n", "/*\nhardhat compile\n --concurrency Number of compilation jobs executed in parallel. Defaults to the number of CPU cores - 1 (default: 9)\n --force Force compilation ignoring cache\n --no-size-contracts Don't size contracts after running this task, even if runOnCompile option is enabled\n --no-typechain Skip Typechain compilation\n --quiet Makes the compilation process less verbose\n */\nimport { execSync } from \"child_process\";\n\ninterface HardhatCompileParams {\n\tconcurrency?: number;\n\tforce?: boolean;\n\tnoSizeContracts?: boolean;\n\tnoTypechain?: boolean;\n\tquiet?: boolean;\n}\n\nexport function compileContracts({ quiet = true, force = false }: HardhatCompileParams) {\n\tconst packageManager = process.env[\"PACKAGE_MANAGER\"] || \"yarn\";\n\tconst command = `${packageManager} compile`;\n\tconst args = [];\n\t// if (concurrency) args.push(`--concurrency ${concurrency}`);\n\t// if (noSizeContracts) args.push(\"--no-size-contracts\");\n\t// if (noTypechain) args.push(\"--no-typechain\");\n\tif (quiet) args.push(\"--quiet\");\n\tif (force) args.push(\"--force\");\n\texecSync(`${command} ${args.join(\" \")}`, { stdio: \"inherit\" });\n}\n", "import { defineChain } from \"viem\";\n\nexport const localhostViemChain = defineChain({\n\tid: Number(process.env.LOCALHOST_FORK_CHAIN_ID),\n\tname: \"localhost\",\n\tnativeCurrency: {\n\t\tdecimals: 18,\n\t\tname: \"eth\",\n\t\tsymbol: \"eth\",\n\t},\n\trpcUrls: {\n\t\tdefault: { http: [process.env.LOCALHOST_RPC_URL ?? \"http://127.0.0.1:8545\"] },\n\t},\n\ttestnet: true,\n});\n\nexport const hardhatViemChain = defineChain({\n\tid: Number(process.env.HARDHAT_CHAIN_ID),\n\tname: \"hardhat\",\n\tnativeCurrency: {\n\t\tdecimals: 18,\n\t\tname: \"eth\",\n\t\tsymbol: \"eth\",\n\t},\n\trpcUrls: {\n\t\tdefault: { http: [process.env.HARDHAT_RPC_URL ?? \"http://127.0.0.1:8545\"] },\n\t},\n\ttestnet: true,\n});\n", "import { ethers } from 'ethers';\n\nexport function extractProxyAdminAddress(receipt: ethers.TransactionReceipt | null): string {\n\tif (!receipt) return ethers.ZeroAddress;\n\n\tconst adminChangedTopic = ethers.id(\"AdminChanged(address,address)\");\n\tconst adminChangedLog = receipt.logs.find((log: ethers.Log) => log.topics[0] === adminChangedTopic);\n\n\tif (!adminChangedLog) return ethers.ZeroAddress;\n\n\ttry {\n\t\tconst abiCoder = ethers.AbiCoder.defaultAbiCoder();\n\t\tconst [, newAdmin] = abiCoder.decode(['address', 'address'], adminChangedLog.data);\n\t\treturn newAdmin;\n\t} catch {\n\t\treturn ethers.ZeroAddress;\n\t}\n}", "import { existsSync, readFileSync, writeFileSync } from \"fs\";\nimport path from \"path\";\nimport { getNetworkEnvKey } from \"../networks/getNetworkEnvKey\";\nimport log from \"./log\";\n\nexport interface EnvUpdaterConfig> {\n\tprefixes: TPrefixes;\n\tbasePath: string;\n}\n\nexport function createEnvUpdater<\n\tTPrefixes extends Record,\n\tTEnvFileName extends string,\n>(config: EnvUpdaterConfig) {\n\tfunction updateEnvVariable(\n\t\tkey: string,\n\t\tnewValue: string,\n\t\tenvFileName: TEnvFileName,\n\t): void {\n\t\tconst filePath = path.join(config.basePath, `.env.${envFileName}`);\n\n\t\tif (!existsSync(filePath)) {\n\t\t\tthrow new Error(`File not found: ${filePath}`);\n\t\t}\n\n\t\tconst envContents = readFileSync(filePath, \"utf8\");\n\t\tlet lines = envContents.split(/\\r?\\n/);\n\n\t\tconst keyExists = lines.some(line => line.startsWith(`${key}=`));\n\n\t\tif (!keyExists) {\n\t\t\tlog(\n\t\t\t\t`Key ${key} not found in .env file. Adding to ${filePath}`,\n\t\t\t\t\"updateEnvVariable\",\n\t\t\t);\n\t\t\tlines.push(`${key}=${newValue}`);\n\t\t} else {\n\t\t\tlines = lines.map(line => {\n\t\t\t\tconst [currentKey] = line.split(\"=\");\n\t\t\t\tif (currentKey === key) {\n\t\t\t\t\treturn `${key}=${newValue}`;\n\t\t\t\t}\n\t\t\t\treturn line;\n\t\t\t});\n\t\t}\n\n\t\twriteFileSync(filePath, lines.join(\"\\n\"));\n\t\tprocess.env[key] = newValue;\n\t}\n\n\tfunction updateEnvAddress(\n\t\tprefix: keyof TPrefixes,\n\t\tnewValue: string,\n\t\tenvFileName: TEnvFileName,\n\t\tnetworkPostfix?: string,\n\t): void {\n\t\tconst searchKey = networkPostfix\n\t\t\t? `${config.prefixes[prefix]}_${getNetworkEnvKey(networkPostfix)}`\n\t\t\t: String(config.prefixes[prefix]);\n\n\t\tupdateEnvVariable(searchKey, newValue, envFileName);\n\t}\n\n\treturn { updateEnvVariable, updateEnvAddress };\n}\n", "import { PublicClient } from 'viem';\n\ntype GasData = {\n\tgasPrice?: string;\n\tmaxFeePerGas?: string;\n\tmaxPriorityFeePerGas?: string;\n};\n\nexport async function getActualGasData(\n\tpublicClient: PublicClient\n): Promise {\n\tconst block = await publicClient.getBlock();\n\n\tconst isEIP1559 = !!block.baseFeePerGas;\n\n\tlet gasPrice = 0n;\n\tlet maxPriorityFeePerGas = 0n;\n\ttry {\n\t\tif (isEIP1559) {\n\t\t\tconst { maxFeePerGas } = await publicClient.estimateFeesPerGas();\n\t\t\tgasPrice = maxFeePerGas;\n\t\t\tmaxPriorityFeePerGas =\n\t\t\t\tawait publicClient.estimateMaxPriorityFeePerGas();\n\t\t} else {\n\t\t\tgasPrice = await publicClient.getGasPrice();\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('Error getting actual gas data:', error);\n\t\treturn {\n\t\t\tgasPrice: '0',\n\t\t\tmaxFeePerGas: '0',\n\t\t\tmaxPriorityFeePerGas: '0',\n\t\t};\n\t}\n\n\tconst gasDataLegacy = {\n\t\tgasPrice: gasPrice.toString(),\n\t};\n\n\tconst gasDataEIP1559 = {\n\t\tmaxFeePerGas: gasPrice.toString(),\n\t\tmaxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n\t};\n\n\tconst gasData: GasData = isEIP1559 ? gasDataEIP1559 : gasDataLegacy;\n\n\treturn gasData;\n}\n", "import {\n\tChain,\n\ttype TestClient,\n\ttype PublicClient,\n\ttype WalletClient,\n\tcreatePublicClient,\n\tcreateTestClient,\n\tcreateWalletClient,\n\tfallback,\n\thttp,\n\tpublicActions,\n\twalletActions,\n\tnonceManager,\n} from \"viem\";\nimport { privateKeyToAccount, type PrivateKeyAccount } from \"viem/accounts\";\n\nimport { type ConceroNetwork, type NetworkType } from \"../types\";\nimport { getWallet } from \"../utils\";\nimport { localhostViemChain } from \"./localhostViemChain\";\nimport { conceroNetworks } from \"../constants/conceroNetworks\";\n\nfunction getClients(\n\tviemChain: Chain,\n\turl: string | undefined,\n\taccount: PrivateKeyAccount = privateKeyToAccount(\n\t\t`0x${process.env.TESTNET_DEPLOYER_PRIVATE_KEY}`,\n\t),\n): {\n\twalletClient: WalletClient;\n\tpublicClient: PublicClient;\n\taccount: PrivateKeyAccount;\n} {\n\tconst publicClient = createPublicClient({ transport: http(url), chain: viemChain });\n\tconst walletClient = createWalletClient({ transport: http(url), chain: viemChain, account });\n\n\treturn { walletClient, publicClient, account };\n}\n\nexport type ExtendedTestClient = TestClient & WalletClient & PublicClient;\n\nfunction getTestClient(account: PrivateKeyAccount): ExtendedTestClient {\n\tconst testClient = createTestClient({\n\t\tchain: localhostViemChain,\n\t\tmode: \"hardhat\",\n\t\ttransport: http(),\n\t\taccount,\n\t})\n\t\t.extend(publicActions)\n\t\t.extend(walletActions);\n\n\treturn testClient as unknown as ExtendedTestClient;\n}\n\nfunction getFallbackClients(\n\tchain: ConceroNetwork,\n\taccount?: PrivateKeyAccount,\n): {\n\twalletClient: WalletClient;\n\tpublicClient: PublicClient;\n\taccount: PrivateKeyAccount;\n} {\n\tif (!account) {\n\t\tswitch (chain.type) {\n\t\t\tcase \"mainnet\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.MAINNET_DEPLOYER_PRIVATE_KEY}`);\n\t\t\t\tbreak;\n\t\t\tcase \"testnet\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.TESTNET_DEPLOYER_PRIVATE_KEY}`, {\n\t\t\t\t\tnonceManager: nonceManager,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"localhost\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.LOCALHOST_DEPLOYER_PRIVATE_KEY}`);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unsupported chain type: ${chain.type}`);\n\t\t}\n\t}\n\n\tconst { viemChain, name } = chain;\n\n\tif (!conceroNetworks[name].rpcUrls.length) {\n\t\tthrow new Error(`No URLs configured for chain: ${name}`);\n\t}\n\n\tconst transport = fallback(\n\t\tconceroNetworks[name].rpcUrls.map(url =>\n\t\t\thttp(url, {\n\t\t\t\ttimeout: 10000,\n\t\t\t\tretryCount: 1,\n\t\t\t\tretryDelay: 250,\n\t\t\t\tonFetchResponse: async response => {\n\t\t\t\t\tif (response.status >= 400) {\n\t\t\t\t\t\tthrow new Error(`HTTP error: ${response.status} ${response.statusText}`);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t}),\n\t\t),\n\t);\n\tconst publicClient = createPublicClient({ transport, chain: viemChain });\n\tconst walletClient = createWalletClient({ transport, chain: viemChain, account });\n\n\treturn { walletClient, publicClient, account };\n}\n\nfunction getViemAccount(\n\tchainType: NetworkType,\n\taccountType: \"proxyDeployer\" | \"deployer\",\n) {\n\tconst privateKey = `0x${getWallet(chainType, accountType, \"privateKey\")}`;\n\n\treturn privateKeyToAccount(privateKey as `0x${string}`, {\n\t\tnonceManager: nonceManager,\n\t});\n}\n\nexport { getClients, getFallbackClients, getTestClient, getViemAccount };\n", "import mainnetChains from '@concero/concero-networks/output/chains.mainnet.json';\nimport testnetChains from '@concero/concero-networks/output/chains.testnet.json';\nimport type { Chain } from '@concero/concero-networks/src/types';\n\nimport {\n\ttype NetworkType,\n\ttype ChainDefinition,\n\ttype ConceroNetwork,\n\tnetworkTypes,\n} from '../types';\nimport { getWallet } from '../utils';\nimport { createViemChain } from '../utils/createViemChain';\nimport { getTrezorDeployEnabled } from '../utils/getTrezorDeployEnabled';\n\nconst mainnetProxyDeployerPK = getWallet(\n\t'mainnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\nconst testnetProxyDeployerPK = getWallet(\n\t'testnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\n\nconst mainnetDeployerPK = getWallet('mainnet', 'deployer', 'privateKey');\nconst testnetDeployerPK = getWallet('testnet', 'deployer', 'privateKey');\n\nconst trezorDeployEnabled = getTrezorDeployEnabled();\n\nconst testnetAccounts = [testnetDeployerPK, testnetProxyDeployerPK];\n\nexport type ConceroMainnetNetworkNames =\n\t(typeof mainnetChains)[keyof typeof mainnetChains]['name'];\nexport type ConceroTestnetNetworkNames =\n\t(typeof testnetChains)[keyof typeof testnetChains]['name'];\n\nfunction createExtendedNetworks>(\n\tchains: T,\n\tnetworkType: NetworkType,\n\taccounts: (string | undefined)[]\n): Record {\n\tconst validAccounts = accounts.filter((acc): acc is string => !!acc);\n\n\treturn Object.fromEntries(\n\t\tObject.values(chains).map(chain => {\n\t\t\tconst chainDefinition: ChainDefinition = {\n\t\t\t\tid: parseInt(chain.id),\n\t\t\t\tname: chain.name,\n\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\tisTestnet: chain.isTestnet ?? false,\n\t\t\t\t...(chain.blockExplorers?.[0] && {\n\t\t\t\t\tblockExplorer: {\n\t\t\t\t\t\tname: chain.blockExplorers[0].name,\n\t\t\t\t\t\turl: chain.blockExplorers[0].url,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t};\n\n\t\t\tconst viemChain = createViemChain(chainDefinition);\n\n\t\t\treturn [\n\t\t\t\tchain.name,\n\t\t\t\t{\n\t\t\t\t\tname: chain.name,\n\t\t\t\t\tchainId: parseInt(chain.id),\n\t\t\t\t\ttype: networkType,\n\t\t\t\t\turl: chain.rpcUrls[0] || '',\n\t\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\t\tsaveDeployments: false,\n\t\t\t\t\t...(!trezorDeployEnabled && { accounts: validAccounts }),\n\t\t\t\t\tchainSelector: BigInt(chain.chainSelector),\n\t\t\t\t\tconfirmations: 1,\n\t\t\t\t\tviemChain,\n\t\t\t\t\t...(trezorDeployEnabled && {\n\t\t\t\t\t\ttrezorDerivationPaths: [\n\t\t\t\t\t\t\t[44, 60, 0, 0, 0],\n\t\t\t\t\t\t\t[44, 60, 0, 0, 1],\n\t\t\t\t\t\t],\n\t\t\t\t\t\ttrezorInsecureDerivation: true,\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t];\n\t\t})\n\t) as Record;\n}\n\nexport const testnetNetworks = createExtendedNetworks(\n\ttestnetChains as unknown as Record,\n\tnetworkTypes.testnet,\n\ttestnetAccounts\n);\n\nexport const mainnetNetworks = createExtendedNetworks(\n\tmainnetChains as unknown as Record,\n\tnetworkTypes.mainnet,\n\t[mainnetDeployerPK, mainnetProxyDeployerPK]\n);\n\nexport const conceroNetworks: Record = {\n\t...testnetNetworks,\n\t...mainnetNetworks,\n};\n", "import { type PublicClient } from \"viem\";\n\nimport { ConceroNetwork } from \"../types/ConceroNetwork\";\nimport { getFallbackClients } from \"./getViemClients\";\n\ninterface GasParameters {\n\tmaxFeePerGas: bigint;\n\tmaxPriorityFeePerGas: bigint;\n}\n\n// Network-specific minimum gas parameters (in wei)\nconst NETWORK_MINIMUMS = {\n\tpolygon: {\n\t\tminTipCap: BigInt(30_000_000_000), // 30 gwei\n\t\tminBaseFee: BigInt(30_000_000_000), // 30 gwei\n\t},\n\t// Add other networks as needed\n} as const;\n\n/**\n * Gets optimized gas parameters for priority transaction processing\n * @param chain - The network configuration\n * @param priorityMultiplier - Multiplier for maxPriorityFeePerGas (default: 2)\n * @param maxFeeMultiplier - Multiplier for maxFeePerGas buffer (default: 2)\n * @returns GasParameters object containing maxFeePerGas and maxPriorityFeePerGas\n */\nexport async function getGasParameters(\n\tchain: ConceroNetwork,\n\tpriorityMultiplier = 1,\n\tmaxFeeMultiplier = 1,\n): Promise {\n\tconst { publicClient } = getFallbackClients(chain);\n\n\ttry {\n\t\t// Get latest block to calculate gas parameters\n\t\tconst block = await publicClient.getBlock();\n\t\tconst baseFee = block.baseFeePerGas ?? BigInt(0);\n\n\t\t// Get network-specific minimums\n\t\tconst networkMinimums = getNetworkMinimums(chain);\n\n\t\t// Calculate priority fee with buffer for faster inclusion\n\t\tconst suggestedPriorityFee = await getSuggestedPriorityFee(publicClient, chain);\n\t\tconst calculatedPriorityFee = calculatePriorityFee(\n\t\t\tsuggestedPriorityFee,\n\t\t\tpriorityMultiplier,\n\t\t);\n\n\t\t// Ensure priority fee meets network minimum\n\t\tconst priorityFee =\n\t\t\tcalculatedPriorityFee > networkMinimums.minTipCap\n\t\t\t\t? calculatedPriorityFee\n\t\t\t\t: networkMinimums.minTipCap;\n\n\t\t// Calculate max fee ensuring it meets network minimums\n\t\tconst calculatedMaxFee = calculateMaxFee(baseFee, priorityFee, maxFeeMultiplier);\n\t\tconst minRequiredMaxFee = networkMinimums.minBaseFee + priorityFee;\n\t\tconst maxFeePerGas =\n\t\t\tcalculatedMaxFee > minRequiredMaxFee ? calculatedMaxFee : minRequiredMaxFee;\n\n\t\treturn {\n\t\t\tmaxFeePerGas,\n\t\t\tmaxPriorityFeePerGas: priorityFee,\n\t\t};\n\t} catch (error) {\n\t\t// Fallback with network minimums\n\t\tconst networkMinimums = getNetworkMinimums(chain);\n\t\tconst gasPrice = await publicClient.getGasPrice();\n\t\tconst priorityFee = networkMinimums.minTipCap;\n\n\t\treturn {\n\t\t\tmaxFeePerGas:\n\t\t\t\tgasPrice > networkMinimums.minBaseFee + priorityFee\n\t\t\t\t\t? gasPrice\n\t\t\t\t\t: networkMinimums.minBaseFee + priorityFee,\n\t\t\tmaxPriorityFeePerGas: priorityFee,\n\t\t};\n\t}\n}\n\n/**\n * Gets network-specific minimum gas parameters\n */\nfunction getNetworkMinimums(chain: ConceroNetwork) {\n\t// Check if chain is Polygon (you'll need to implement this check based on your CNetwork type)\n\tconst isPolygon = chain.chainId === 137 || chain.name.toLowerCase().includes(\"polygon\");\n\n\tif (isPolygon) {\n\t\treturn NETWORK_MINIMUMS.polygon;\n\t}\n\n\t// Default minimums for other networks\n\treturn {\n\t\tminTipCap: BigInt(1_500_000_000), // 1.5 gwei\n\t\tminBaseFee: BigInt(1_000_000_000), // 1 gwei\n\t};\n}\n\n/**\n * Gets the suggested priority fee from recent blocks\n */\nasync function getSuggestedPriorityFee(\n\tpublicClient: PublicClient,\n\tchain: ConceroNetwork,\n): Promise {\n\ttry {\n\t\t// For Polygon, we want to be more aggressive with priority fees\n\t\tconst isPolygon = chain.chainId === 137 || chain.name.toLowerCase().includes(\"polygon\");\n\t\tconst blocksToAnalyze = isPolygon ? 5 : 10; // Look at fewer blocks on Polygon for more recent data\n\n\t\tconst blocks = await Promise.all(\n\t\t\tArray.from({ length: blocksToAnalyze }, (_, i) =>\n\t\t\t\tpublicClient.getBlock({ blockNumber: BigInt(-1 - i) }),\n\t\t\t),\n\t\t);\n\n\t\t// For Polygon, use 75th percentile instead of median for higher priority\n\t\tconst priorityFees = blocks\n\t\t\t.map(block => block.baseFeePerGas ?? BigInt(0))\n\t\t\t.sort((a, b) => (a < b ? -1 : 1));\n\n\t\tconst index = isPolygon\n\t\t\t? Math.floor(priorityFees.length * 0.75)\n\t\t\t: Math.floor(priorityFees.length * 0.5);\n\n\t\treturn priorityFees[index];\n\t} catch {\n\t\t// Use network-specific minimum as fallback\n\t\treturn getNetworkMinimums(chain).minTipCap;\n\t}\n}\n\n/**\n * Calculates priority fee with buffer\n */\nfunction calculatePriorityFee(basePriorityFee: bigint, multiplier: number): bigint {\n\treturn BigInt(Math.ceil(Number(basePriorityFee) * multiplier));\n}\n\n/**\n * Calculates max fee with buffer\n */\nfunction calculateMaxFee(baseFee: bigint, priorityFee: bigint, multiplier: number): bigint {\n\treturn BigInt(Math.ceil(Number(baseFee) * multiplier)) + priorityFee;\n}\n", "export const config = {\n DEFAULT_BLOCK_CONFIRMATIONS: 2,\n};\n", "import { HardhatRuntimeEnvironment } from 'hardhat/types';\n\nimport { conceroNetworks } from '../constants/conceroNetworks';\nimport { getTrezorDeployEnabled, log } from '../utils';\nimport { extractProxyAdminAddress } from '../utils/extractProxyAdminAddress';\n\nexport interface ITxParams {\n\tgasLimit: bigint;\n\tlibraries: Record;\n}\n\nexport interface IDeployResult {\n\thash: string;\n\taddress: string;\n\tchainType: string;\n\tchainName: string;\n\tproxyAdminAddress: string;\n}\n\nexport interface IGenericDeployParams {\n\thre: HardhatRuntimeEnvironment;\n\tcontractName: string;\n\ttxParams?: Partial;\n}\n\nexport const genericDeploy = async (\n\t{ hre, contractName, txParams }: IGenericDeployParams,\n\t...contractConstructorArgs: any[]\n): Promise => {\n\tconst [deployer] = await hre.ethers.getSigners();\n\tconst chain = conceroNetworks[hre.network.name];\n\n\tlog(\n\t\t`Deploy ${contractName} from address: ${await deployer.getAddress()}`,\n\t\t'contract deploy',\n\t\tchain.name\n\t);\n\n\tconst contractFactory = await hre.ethers.getContractFactory(contractName, { libraries: txParams?.libraries });\n\n\tconst deployOverrides = txParams?.gasLimit ? { gasLimit: txParams.gasLimit } : {};\n\n\tconst deployTx = contractFactory.getDeployTransaction(\n\t\t...contractConstructorArgs,\n\t\tdeployOverrides\n\t);\n\n\tconst isTrezorDeployEnabled = getTrezorDeployEnabled();\n\tif (deployTx.data && isTrezorDeployEnabled) {\n\t\tlog(\n\t\t\t`${contractName} input data: ${deployTx.data} \\n size: ${(deployTx.data.length - 2) / 2}`,\n\t\t\t'bytecode',\n\t\t\tchain.name\n\t\t);\n\t}\n\n\tconst contract = await contractFactory.deploy(...contractConstructorArgs, deployOverrides);\n\tconst receipt = await contract.deploymentTransaction()?.wait();\n\tconst deploymentAddress = await contract.getAddress();\n\n\tif (hre.tenderly) {\n\t\tawait hre.tenderly.verify({ name: contractName, address: deploymentAddress });\n\t}\n\n\tlog(\n\t\t`Deployed at: ${deploymentAddress}`,\n\t\t`deploy ${contractName}`,\n\t\tchain.name\n\t);\n\n\treturn {\n\t\thash: contract.deploymentTransaction()?.hash,\n\t\taddress: deploymentAddress,\n\t\tchainName: chain.name,\n\t\tchainType: chain.type,\n\t\tproxyAdminAddress: extractProxyAdminAddress(receipt)\n\t};\n};\n", "import {\n\tAddress,\n\terc20Abi,\n\tformatUnits,\n\tHash,\n\tparseUnits,\n\tPublicClient,\n\tWalletClient,\n} from 'viem';\n\nexport class TokenSender {\n\tprivate walletClient: WalletClient;\n\tprivate publicClient: PublicClient;\n\n\tconstructor(walletClient: WalletClient, publicClient: PublicClient) {\n\t\tthis.walletClient = walletClient;\n\t\tthis.publicClient = publicClient;\n\t}\n\n\tpublic async sendToken(\n\t\ttokenAddress: Address,\n\t\tamount: string,\n\t\trecipient: Address\n\t): Promise {\n\t\tconst [tokenDecimals, tokenSymbol, tokenBalance] = await Promise.all([\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'decimals',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'symbol',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'balanceOf',\n\t\t\t\targs: [this.walletClient.account?.address!],\n\t\t\t}),\n\t\t]);\n\n\t\tconsole.log(\n\t\t\t`Current ${tokenSymbol} balance ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t);\n\n\t\tif (parseUnits(amount, tokenDecimals) > tokenBalance) {\n\t\t\tthrow new Error(\n\t\t\t\t`Insufficient balance. Required: ${amount}, available: ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t\t);\n\t\t}\n\n\t\tconst txHash = await this.walletClient.writeContract({\n\t\t\taddress: tokenAddress,\n\t\t\tabi: erc20Abi,\n\t\t\tfunctionName: 'transfer',\n\t\t\targs: [recipient, parseUnits(amount, tokenDecimals)],\n\t\t\tchain: this.walletClient.chain,\n\t\t\taccount: this.walletClient.account!,\n\t\t});\n\n\t\tconst { status } = await this.publicClient.waitForTransactionReceipt({\n\t\t\thash: txHash,\n\t\t});\n\n\t\tif (status !== 'success') {\n\t\t\tthrow new Error(`Error sending token. Hash: ${txHash}`);\n\t\t}\n\n\t\tconsole.log(`Token successfully sent. Hash: ${txHash}`);\n\n\t\treturn txHash;\n\t}\n}\n"], + "mappings": "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", "names": ["process", "process", "config", "defineChain", "log", "config"] } diff --git a/dist/types/src/deploy/GenericDeploy.d.ts b/dist/types/src/deploy/GenericDeploy.d.ts index 3ffe14c..1fe7b2a 100644 --- a/dist/types/src/deploy/GenericDeploy.d.ts +++ b/dist/types/src/deploy/GenericDeploy.d.ts @@ -1,6 +1,7 @@ import { HardhatRuntimeEnvironment } from 'hardhat/types'; export interface ITxParams { gasLimit: bigint; + libraries: Record; } export interface IDeployResult { hash: string; diff --git a/dist/types/src/utils/getGasParameters.d.ts b/dist/types/src/utils/getGasParameters.d.ts new file mode 100644 index 0000000..b3b9f23 --- /dev/null +++ b/dist/types/src/utils/getGasParameters.d.ts @@ -0,0 +1,14 @@ +import { ConceroNetwork } from "../types/ConceroNetwork"; +interface GasParameters { + maxFeePerGas: bigint; + maxPriorityFeePerGas: bigint; +} +/** + * Gets optimized gas parameters for priority transaction processing + * @param chain - The network configuration + * @param priorityMultiplier - Multiplier for maxPriorityFeePerGas (default: 2) + * @param maxFeeMultiplier - Multiplier for maxFeePerGas buffer (default: 2) + * @returns GasParameters object containing maxFeePerGas and maxPriorityFeePerGas + */ +export declare function getGasParameters(chain: ConceroNetwork, priorityMultiplier?: number, maxFeeMultiplier?: number): Promise; +export {}; diff --git a/dist/types/src/utils/index.d.ts b/dist/types/src/utils/index.d.ts index 179a524..45c05f9 100644 --- a/dist/types/src/utils/index.d.ts +++ b/dist/types/src/utils/index.d.ts @@ -10,4 +10,5 @@ export { localhostViemChain } from './localhostViemChain'; export { extractProxyAdminAddress } from './extractProxyAdminAddress'; export { createEnvUpdater, type EnvUpdaterConfig } from './createEnvUpdater'; export { getActualGasData } from './getActualGasData'; +export { getGasParameters } from './getGasParameters'; export { getClients, getFallbackClients, getTestClient, getViemAccount, type ExtendedTestClient, } from './getViemClients'; diff --git a/src/deploy/GenericDeploy.ts b/src/deploy/GenericDeploy.ts index d34cda8..a73d783 100644 --- a/src/deploy/GenericDeploy.ts +++ b/src/deploy/GenericDeploy.ts @@ -6,6 +6,7 @@ import { extractProxyAdminAddress } from '../utils/extractProxyAdminAddress'; export interface ITxParams { gasLimit: bigint; + libraries: Record; } export interface IDeployResult { @@ -35,7 +36,7 @@ export const genericDeploy = async ( chain.name ); - const contractFactory = await hre.ethers.getContractFactory(contractName); + const contractFactory = await hre.ethers.getContractFactory(contractName, { libraries: txParams?.libraries }); const deployOverrides = txParams?.gasLimit ? { gasLimit: txParams.gasLimit } : {}; diff --git a/src/utils/getGasParameters.ts b/src/utils/getGasParameters.ts new file mode 100644 index 0000000..2978244 --- /dev/null +++ b/src/utils/getGasParameters.ts @@ -0,0 +1,145 @@ +import { type PublicClient } from "viem"; + +import { ConceroNetwork } from "../types/ConceroNetwork"; +import { getFallbackClients } from "./getViemClients"; + +interface GasParameters { + maxFeePerGas: bigint; + maxPriorityFeePerGas: bigint; +} + +// Network-specific minimum gas parameters (in wei) +const NETWORK_MINIMUMS = { + polygon: { + minTipCap: BigInt(30_000_000_000), // 30 gwei + minBaseFee: BigInt(30_000_000_000), // 30 gwei + }, + // Add other networks as needed +} as const; + +/** + * Gets optimized gas parameters for priority transaction processing + * @param chain - The network configuration + * @param priorityMultiplier - Multiplier for maxPriorityFeePerGas (default: 2) + * @param maxFeeMultiplier - Multiplier for maxFeePerGas buffer (default: 2) + * @returns GasParameters object containing maxFeePerGas and maxPriorityFeePerGas + */ +export async function getGasParameters( + chain: ConceroNetwork, + priorityMultiplier = 1, + maxFeeMultiplier = 1, +): Promise { + const { publicClient } = getFallbackClients(chain); + + try { + // Get latest block to calculate gas parameters + const block = await publicClient.getBlock(); + const baseFee = block.baseFeePerGas ?? BigInt(0); + + // Get network-specific minimums + const networkMinimums = getNetworkMinimums(chain); + + // Calculate priority fee with buffer for faster inclusion + const suggestedPriorityFee = await getSuggestedPriorityFee(publicClient, chain); + const calculatedPriorityFee = calculatePriorityFee( + suggestedPriorityFee, + priorityMultiplier, + ); + + // Ensure priority fee meets network minimum + const priorityFee = + calculatedPriorityFee > networkMinimums.minTipCap + ? calculatedPriorityFee + : networkMinimums.minTipCap; + + // Calculate max fee ensuring it meets network minimums + const calculatedMaxFee = calculateMaxFee(baseFee, priorityFee, maxFeeMultiplier); + const minRequiredMaxFee = networkMinimums.minBaseFee + priorityFee; + const maxFeePerGas = + calculatedMaxFee > minRequiredMaxFee ? calculatedMaxFee : minRequiredMaxFee; + + return { + maxFeePerGas, + maxPriorityFeePerGas: priorityFee, + }; + } catch (error) { + // Fallback with network minimums + const networkMinimums = getNetworkMinimums(chain); + const gasPrice = await publicClient.getGasPrice(); + const priorityFee = networkMinimums.minTipCap; + + return { + maxFeePerGas: + gasPrice > networkMinimums.minBaseFee + priorityFee + ? gasPrice + : networkMinimums.minBaseFee + priorityFee, + maxPriorityFeePerGas: priorityFee, + }; + } +} + +/** + * Gets network-specific minimum gas parameters + */ +function getNetworkMinimums(chain: ConceroNetwork) { + // Check if chain is Polygon (you'll need to implement this check based on your CNetwork type) + const isPolygon = chain.chainId === 137 || chain.name.toLowerCase().includes("polygon"); + + if (isPolygon) { + return NETWORK_MINIMUMS.polygon; + } + + // Default minimums for other networks + return { + minTipCap: BigInt(1_500_000_000), // 1.5 gwei + minBaseFee: BigInt(1_000_000_000), // 1 gwei + }; +} + +/** + * Gets the suggested priority fee from recent blocks + */ +async function getSuggestedPriorityFee( + publicClient: PublicClient, + chain: ConceroNetwork, +): Promise { + try { + // For Polygon, we want to be more aggressive with priority fees + const isPolygon = chain.chainId === 137 || chain.name.toLowerCase().includes("polygon"); + const blocksToAnalyze = isPolygon ? 5 : 10; // Look at fewer blocks on Polygon for more recent data + + const blocks = await Promise.all( + Array.from({ length: blocksToAnalyze }, (_, i) => + publicClient.getBlock({ blockNumber: BigInt(-1 - i) }), + ), + ); + + // For Polygon, use 75th percentile instead of median for higher priority + const priorityFees = blocks + .map(block => block.baseFeePerGas ?? BigInt(0)) + .sort((a, b) => (a < b ? -1 : 1)); + + const index = isPolygon + ? Math.floor(priorityFees.length * 0.75) + : Math.floor(priorityFees.length * 0.5); + + return priorityFees[index]; + } catch { + // Use network-specific minimum as fallback + return getNetworkMinimums(chain).minTipCap; + } +} + +/** + * Calculates priority fee with buffer + */ +function calculatePriorityFee(basePriorityFee: bigint, multiplier: number): bigint { + return BigInt(Math.ceil(Number(basePriorityFee) * multiplier)); +} + +/** + * Calculates max fee with buffer + */ +function calculateMaxFee(baseFee: bigint, priorityFee: bigint, multiplier: number): bigint { + return BigInt(Math.ceil(Number(baseFee) * multiplier)) + priorityFee; +} diff --git a/src/utils/index.ts b/src/utils/index.ts index 4acc4a1..9d96ab6 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -10,6 +10,7 @@ export { localhostViemChain } from './localhostViemChain'; export { extractProxyAdminAddress } from './extractProxyAdminAddress'; export { createEnvUpdater, type EnvUpdaterConfig } from './createEnvUpdater'; export { getActualGasData } from './getActualGasData'; +export { getGasParameters } from './getGasParameters'; export { getClients, getFallbackClients, From b1f5a80f53d0f3a2ba343e6da30ab4f2d62a33eb Mon Sep 17 00:00:00 2001 From: Roman Yarlykov Date: Wed, 21 Jan 2026 13:44:31 +0500 Subject: [PATCH 4/5] add: createViemAccountGetter, createWalletGetter --- dist/index.cjs.js | 69 +++++++++++--------- dist/index.cjs.js.map | 8 +-- dist/index.esm.js | 66 ++++++++++--------- dist/index.esm.js.map | 8 +-- dist/types/src/utils/createWalletGetter.d.ts | 13 ++++ dist/types/src/utils/getViemClients.d.ts | 27 +++++++- dist/types/src/utils/getWallet.d.ts | 3 +- dist/types/src/utils/index.d.ts | 4 +- src/utils/createWalletGetter.ts | 47 +++++++++++++ src/utils/getViemClients.ts | 26 +++++++- src/utils/getWallet.ts | 50 +------------- src/utils/index.ts | 4 +- 12 files changed, 197 insertions(+), 128 deletions(-) create mode 100644 dist/types/src/utils/createWalletGetter.d.ts create mode 100644 src/utils/createWalletGetter.ts diff --git a/dist/index.cjs.js b/dist/index.cjs.js index 87aa89b..050fb8c 100644 --- a/dist/index.cjs.js +++ b/dist/index.cjs.js @@ -31,12 +31,15 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru var index_exports = {}; __export(index_exports, { TokenSender: () => TokenSender, + baseAccountTypePrefixes: () => baseAccountTypePrefixes, compileContracts: () => compileContracts, conceroNetworks: () => conceroNetworks, config: () => config, createEnvAddressGetter: () => createEnvAddressGetter, createEnvUpdater: () => createEnvUpdater, + createViemAccountGetter: () => createViemAccountGetter, createViemChain: () => createViemChain, + createWalletGetter: () => createWalletGetter, err: () => err, ethersSignerCallContract: () => ethersSignerCallContract, extractProxyAdminAddress: () => extractProxyAdminAddress, @@ -203,40 +206,30 @@ function createEnvAddressGetter(config2) { // src/utils/getTrezorDeployEnabled.ts var getTrezorDeployEnabled = () => getEnvVar("TREZOR_DEPLOY_ENABLED", "false") === "true"; -// src/utils/getWallet.ts -function getWallet(chainType, accountType, walletType) { - let prefix; - let walletKey; - switch (accountType) { - case "proxyDeployer": - prefix = "PROXY_DEPLOYER"; - break; - case "deployer": - prefix = "DEPLOYER"; - break; - case "operator": - prefix = "OPERATOR"; - break; - default: - throw new Error(`Unknown account type: ${accountType}`); - } - switch (walletType) { - case "privateKey": - walletKey = "PRIVATE_KEY"; - break; - case "address": - walletKey = "ADDRESS"; - break; - default: - throw new Error(`Unknown wallet type: ${walletType}`); - } - const envKey = `${chainType.toUpperCase()}_${prefix}_${walletKey}`; - const walletValue = process.env[envKey]; - if (!walletValue) { - warn(`Missing env variable: ${envKey}`, "getEnvVar"); +// src/utils/createWalletGetter.ts +var baseAccountTypePrefixes = { + proxyDeployer: "PROXY_DEPLOYER", + deployer: "DEPLOYER" +}; +function createWalletGetter(config2) { + function getWallet2(chainType, accountType, walletType) { + const prefix = config2.accountTypePrefixes[accountType]; + if (!prefix) { + throw new Error(`Unknown account type: ${String(accountType)}`); + } + const walletKey = walletType === "privateKey" ? "PRIVATE_KEY" : "ADDRESS"; + const envKey = `${chainType.toUpperCase()}_${prefix}_${walletKey}`; + const walletValue = process.env[envKey]; + if (!walletValue) { + warn(`Missing env variable: ${envKey}`, "getWallet"); + } + return walletValue; } - return walletValue; + return { getWallet: getWallet2 }; } +var { getWallet } = createWalletGetter({ + accountTypePrefixes: baseAccountTypePrefixes +}); // src/utils/ethersSignerCallContract.ts var ethersSignerCallContract = async (hre, contract, abi, functionName, ...functionArgs) => { @@ -518,6 +511,15 @@ function getViemAccount(chainType, accountType) { nonceManager: import_viem3.nonceManager }); } +function createViemAccountGetter(config2) { + function getViemAccount2(chainType, accountType) { + const privateKey = `0x${config2.getWallet(chainType, accountType, "privateKey")}`; + return (0, import_accounts.privateKeyToAccount)(privateKey, { + nonceManager: import_viem3.nonceManager + }); + } + return { getViemAccount: getViemAccount2 }; +} // src/utils/getGasParameters.ts var NETWORK_MINIMUMS = { @@ -702,12 +704,15 @@ var TokenSender = class { // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { TokenSender, + baseAccountTypePrefixes, compileContracts, conceroNetworks, config, createEnvAddressGetter, createEnvUpdater, + createViemAccountGetter, createViemChain, + createWalletGetter, err, ethersSignerCallContract, extractProxyAdminAddress, diff --git a/dist/index.cjs.js.map b/dist/index.cjs.js.map index ebee2ee..b75278c 100644 --- a/dist/index.cjs.js.map +++ b/dist/index.cjs.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../src/index.ts", "../src/types/networkTypes.ts", "../src/utils/createViemChain.ts", "../src/utils/getEnvVar.ts", "../src/utils/log.ts", "../src/utils/formatting.ts", "../src/networks/getNetworkEnvKey.ts", "../src/utils/getTrezorDeployEnabled.ts", "../src/utils/getWallet.ts", "../src/utils/ethersSignerCallContract.ts", "../src/utils/compileContracts.ts", "../src/utils/localhostViemChain.ts", "../src/utils/extractProxyAdminAddress.ts", "../src/utils/createEnvUpdater.ts", "../src/utils/getActualGasData.ts", "../src/utils/getViemClients.ts", "../src/constants/conceroNetworks.ts", "../src/utils/getGasParameters.ts", "../src/constants/config.ts", "../src/deploy/GenericDeploy.ts", "../src/tokens/TokenSender.ts"], - "sourcesContent": ["// Types\nexport * from './types';\n\n// Utils\nexport * from './utils';\n\n// Networks\nexport * from './networks';\n\n// Constants\nexport { config } from './constants/config';\nexport {\n\tconceroNetworks,\n\ttestnetNetworks,\n\tmainnetNetworks,\n\ttype ConceroMainnetNetworkNames,\n\ttype ConceroTestnetNetworkNames,\n} from './constants/conceroNetworks';\n\n// Deploy\nexport { genericDeploy, type IDeployResult, type IGenericDeployParams, type ITxParams } from './deploy/GenericDeploy';\n\n// Tokens\nexport { TokenSender } from './tokens/TokenSender';\n", "import { type NetworkType } from './ConceroNetwork';\n\nexport const networkTypes: Record = {\n\tmainnet: 'mainnet',\n\ttestnet: 'testnet',\n\tlocalhost: 'localhost',\n};\n", "import { defineChain } from 'viem';\n\nimport { type ChainDefinition } from '../types';\n\nexport function createViemChain(\n\tchainDefinition: ChainDefinition\n): ReturnType {\n\treturn defineChain({\n\t\tid: chainDefinition.id,\n\t\tname: chainDefinition.name,\n\t\tnativeCurrency: {\n\t\t\tdecimals: 18,\n\t\t\tname: 'eth',\n\t\t\tsymbol: 'eth',\n\t\t},\n\t\trpcUrls: {\n\t\t\tdefault: { http: chainDefinition.rpcUrls },\n\t\t},\n\t\tblockExplorers: chainDefinition.blockExplorer\n\t\t\t? {\n\t\t\t\tdefault: {\n\t\t\t\t\tname: chainDefinition.blockExplorer.name,\n\t\t\t\t\turl: chainDefinition.blockExplorer.url,\n\t\t\t\t},\n\t\t\t}\n\t\t\t: undefined,\n\t\ttestnet: chainDefinition.isTestnet,\n\t});\n}\n", "import process from 'process';\nimport { Address } from 'viem';\n\nimport { warn } from './log';\nimport { shorten } from './formatting';\nimport { getNetworkEnvKey } from '../networks';\n\nexport function getEnvVar(key: string, defaultValue?: string): string {\n\tconst value = process.env[key];\n\tif (value === undefined || value === '') {\n\t\tif (defaultValue !== undefined) return defaultValue;\n\t\twarn(`Missing env variable: ${key}`, 'getEnvVar');\n\t\treturn '';\n\t}\n\n\treturn value;\n}\n\nexport interface EnvAddressConfig> {\n\tprefixes: TPrefixes;\n}\n\nexport function createEnvAddressGetter>(\n\tconfig: EnvAddressConfig,\n) {\n\tfunction getEnvAddress(\n\t\tprefix: keyof TPrefixes,\n\t\tnetworkName?: string,\n\t): [Address, string] {\n\t\tconst searchKey = networkName\n\t\t\t? `${config.prefixes[prefix]}_${getNetworkEnvKey(networkName)}`\n\t\t\t: config.prefixes[prefix];\n\n\t\tconst value = getEnvVar(searchKey) as Address;\n\t\tconst friendlyName = `${String(prefix)}(${shorten(value)})`\n\n\t\treturn [value, friendlyName];\n\t}\n\n\treturn { getEnvAddress };\n}\n", "const networkColors: Record = {\n\tethereum: '\\x1b[30m', // grey\n\tarbitrum: '\\x1b[34m', // blue\n\tpolygon: '\\x1b[35m', // magenta\n\tavalanche: '\\x1b[31m', // red\n\tbase: '\\x1b[36m', // cyan\n\tethereumSepolia: '\\x1b[30m', // grey\n\tarbitrumSepolia: '\\x1b[34m', // blue\n\toptimismSepolia: '\\x1b[31m', // red\n\tpolygonAmoy: '\\x1b[35m', // magenta\n\tavalancheFuji: '\\x1b[31m', // red\n\tbaseSepolia: '\\x1b[36m', // cyan\n\thardhat: '\\x1b[32m', // green\n\tlocalhost: '\\x1b[32m', // green\n};\nconst reset = '\\x1b[0m';\n\nexport function log(message: any, functionName: string, networkName?: string) {\n\tconst greenFill = '\\x1b[32m';\n\tconst network = networkName ? `\\x1b[35m[${networkName}]${reset}` : '';\n\n\tconsole.log(`${network}${greenFill}[${functionName}]${reset}`, message);\n}\n\nexport function warn(message: any, functionName: string) {\n\tconst yellowFill = '\\x1b[33m';\n\n\tconsole.log(`${yellowFill}[${functionName}]${reset}`, message);\n}\n\nexport function err(message: any, functionName: string, networkName?: string) {\n\tconst redFill = '\\x1b[31m';\n\tconst network = networkName\n\t\t? `${networkColors[networkName]}[${networkName}]${reset}`\n\t\t: '';\n\n\tconsole.log(\n\t\t`${network}${redFill}[${functionName}] ERROR:${reset}`,\n\t\tmessage\n\t);\n}\n\nexport default log;\n", "import { type Address } from \"viem\";\n\nexport function shorten(address: Address) {\n\treturn `${address.slice(0, 6)}...${address.slice(-4)}`;\n}\n\nexport function formatGas(gasAmountWei: bigint) {\n\t// splits gas number with commas like so: 1,000,000\n\treturn gasAmountWei.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n}\n", "/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkEnvKey(networkName: string): string {\n if (!networkName) {\n throw new Error('Network name must be provided');\n }\n return camelCaseToCapsSnakeCase(networkName);\n}\n\n/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkKey(NETWORK_NAME: string): string {\n if (!NETWORK_NAME) {\n throw new Error('Network name must be provided');\n }\n return capsSnakeCaseToCamelCase(NETWORK_NAME);\n}\n\n/**\n * Converts a string from CAPS_SNAKE_CASE to camelCase\n *\n * @param snakeCaseString The string in CAPS_SNAKE_CASE format\n * @returns The string converted to camelCase format\n */\nexport function capsSnakeCaseToCamelCase(snakeCaseString: string): string {\n if (!snakeCaseString) {\n throw new Error('String must be provided');\n }\n\n return snakeCaseString\n .toLowerCase()\n .replace(/_([a-z])/g, (_, char) => char.toUpperCase());\n}\n\n/**\n * Converts a string from camelCase to CAPS_SNAKE_CASE\n *\n * @param camelCaseString The string in camelCase format\n * @returns The string converted to CAPS_SNAKE_CASE format\n */\nexport function camelCaseToCapsSnakeCase(camelCaseString: string): string {\n if (!camelCaseString) {\n throw new Error('String must be provided');\n }\n\n return camelCaseString.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toUpperCase();\n}\n\nexport function getNetworkName(networkEnvKey: string): string {\n if (!networkEnvKey) {\n throw new Error('Network name must be provided');\n }\n\n return networkEnvKey\n .toLowerCase()\n .split('_')\n .map((word, index) =>\n index === 0 ? word : word[0].toUpperCase() + word.slice(1)\n )\n .join('');\n}\n", "import { getEnvVar } from './getEnvVar';\n\nexport const getTrezorDeployEnabled = () =>\n\tgetEnvVar('TREZOR_DEPLOY_ENABLED', 'false') === 'true';\n", "import { type NetworkType } from '../types';\nimport { warn } from './log';\n\nexport function getWallet(\n\tchainType: NetworkType,\n\taccountType:\n\t\t| 'proxyDeployer'\n\t\t| 'deployer'\n\t\t| 'operator',\n\twalletType: 'privateKey' | 'address'\n) {\n\tlet prefix;\n\tlet walletKey;\n\tswitch (accountType) {\n\t\tcase 'proxyDeployer':\n\t\t\tprefix = 'PROXY_DEPLOYER';\n\t\t\tbreak;\n\t\tcase 'deployer':\n\t\t\tprefix = 'DEPLOYER';\n\t\t\tbreak;\n\t\tcase 'operator':\n\t\t\tprefix = 'OPERATOR';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown account type: ${accountType}`);\n\t}\n\n\tswitch (walletType) {\n\t\tcase 'privateKey':\n\t\t\twalletKey = 'PRIVATE_KEY';\n\t\t\tbreak;\n\t\tcase 'address':\n\t\t\twalletKey = 'ADDRESS';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown wallet type: ${walletType}`);\n\t}\n\n\t// Determine the environment variable key based on the wallet type\n\tconst envKey = `${chainType.toUpperCase()}_${prefix}_${walletKey}`;\n\tconst walletValue = process.env[envKey];\n\n\tif (!walletValue) {\n\t\twarn(`Missing env variable: ${envKey}`, 'getEnvVar');\n\t}\n\n\treturn walletValue;\n}\n", "import { HardhatRuntimeEnvironment } from \"hardhat/types\";\nimport { Address, Hash } from \"viem\";\n\nimport { log } from \"./log\";\n\nexport const ethersSignerCallContract = async (\n\thre: HardhatRuntimeEnvironment,\n\tcontract: Address,\n\tabi: any[],\n\tfunctionName: string,\n\t...functionArgs: any[]\n) => {\n\tconst [ethersSigner] = await hre.ethers.getSigners();\n\tconst ethersContract = new hre.ethers.Contract(contract, abi, ethersSigner);\n\tconst unsignedTx = await ethersContract[functionName].populateTransaction(...functionArgs);\n\n\tlog(\n\t\t`Size: ${(unsignedTx.data.length - 2) / 2}, Input data: ${unsignedTx.data}, Address: ${unsignedTx.to}`,\n\t\tfunctionName,\n\t\thre.network.name,\n\t);\n\n\treturn (await ethersSigner.sendTransaction(unsignedTx)).hash as Hash;\n};\n", "/*\nhardhat compile\n --concurrency Number of compilation jobs executed in parallel. Defaults to the number of CPU cores - 1 (default: 9)\n --force Force compilation ignoring cache\n --no-size-contracts Don't size contracts after running this task, even if runOnCompile option is enabled\n --no-typechain Skip Typechain compilation\n --quiet Makes the compilation process less verbose\n */\nimport { execSync } from \"child_process\";\n\ninterface HardhatCompileParams {\n\tconcurrency?: number;\n\tforce?: boolean;\n\tnoSizeContracts?: boolean;\n\tnoTypechain?: boolean;\n\tquiet?: boolean;\n}\n\nexport function compileContracts({ quiet = true, force = false }: HardhatCompileParams) {\n\tconst packageManager = process.env[\"PACKAGE_MANAGER\"] || \"yarn\";\n\tconst command = `${packageManager} compile`;\n\tconst args = [];\n\t// if (concurrency) args.push(`--concurrency ${concurrency}`);\n\t// if (noSizeContracts) args.push(\"--no-size-contracts\");\n\t// if (noTypechain) args.push(\"--no-typechain\");\n\tif (quiet) args.push(\"--quiet\");\n\tif (force) args.push(\"--force\");\n\texecSync(`${command} ${args.join(\" \")}`, { stdio: \"inherit\" });\n}\n", "import { defineChain } from \"viem\";\n\nexport const localhostViemChain = defineChain({\n\tid: Number(process.env.LOCALHOST_FORK_CHAIN_ID),\n\tname: \"localhost\",\n\tnativeCurrency: {\n\t\tdecimals: 18,\n\t\tname: \"eth\",\n\t\tsymbol: \"eth\",\n\t},\n\trpcUrls: {\n\t\tdefault: { http: [process.env.LOCALHOST_RPC_URL ?? \"http://127.0.0.1:8545\"] },\n\t},\n\ttestnet: true,\n});\n\nexport const hardhatViemChain = defineChain({\n\tid: Number(process.env.HARDHAT_CHAIN_ID),\n\tname: \"hardhat\",\n\tnativeCurrency: {\n\t\tdecimals: 18,\n\t\tname: \"eth\",\n\t\tsymbol: \"eth\",\n\t},\n\trpcUrls: {\n\t\tdefault: { http: [process.env.HARDHAT_RPC_URL ?? \"http://127.0.0.1:8545\"] },\n\t},\n\ttestnet: true,\n});\n", "import { ethers } from 'ethers';\n\nexport function extractProxyAdminAddress(receipt: ethers.TransactionReceipt | null): string {\n\tif (!receipt) return ethers.ZeroAddress;\n\n\tconst adminChangedTopic = ethers.id(\"AdminChanged(address,address)\");\n\tconst adminChangedLog = receipt.logs.find((log: ethers.Log) => log.topics[0] === adminChangedTopic);\n\n\tif (!adminChangedLog) return ethers.ZeroAddress;\n\n\ttry {\n\t\tconst abiCoder = ethers.AbiCoder.defaultAbiCoder();\n\t\tconst [, newAdmin] = abiCoder.decode(['address', 'address'], adminChangedLog.data);\n\t\treturn newAdmin;\n\t} catch {\n\t\treturn ethers.ZeroAddress;\n\t}\n}", "import { existsSync, readFileSync, writeFileSync } from \"fs\";\nimport path from \"path\";\nimport { getNetworkEnvKey } from \"../networks/getNetworkEnvKey\";\nimport log from \"./log\";\n\nexport interface EnvUpdaterConfig> {\n\tprefixes: TPrefixes;\n\tbasePath: string;\n}\n\nexport function createEnvUpdater<\n\tTPrefixes extends Record,\n\tTEnvFileName extends string,\n>(config: EnvUpdaterConfig) {\n\tfunction updateEnvVariable(\n\t\tkey: string,\n\t\tnewValue: string,\n\t\tenvFileName: TEnvFileName,\n\t): void {\n\t\tconst filePath = path.join(config.basePath, `.env.${envFileName}`);\n\n\t\tif (!existsSync(filePath)) {\n\t\t\tthrow new Error(`File not found: ${filePath}`);\n\t\t}\n\n\t\tconst envContents = readFileSync(filePath, \"utf8\");\n\t\tlet lines = envContents.split(/\\r?\\n/);\n\n\t\tconst keyExists = lines.some(line => line.startsWith(`${key}=`));\n\n\t\tif (!keyExists) {\n\t\t\tlog(\n\t\t\t\t`Key ${key} not found in .env file. Adding to ${filePath}`,\n\t\t\t\t\"updateEnvVariable\",\n\t\t\t);\n\t\t\tlines.push(`${key}=${newValue}`);\n\t\t} else {\n\t\t\tlines = lines.map(line => {\n\t\t\t\tconst [currentKey] = line.split(\"=\");\n\t\t\t\tif (currentKey === key) {\n\t\t\t\t\treturn `${key}=${newValue}`;\n\t\t\t\t}\n\t\t\t\treturn line;\n\t\t\t});\n\t\t}\n\n\t\twriteFileSync(filePath, lines.join(\"\\n\"));\n\t\tprocess.env[key] = newValue;\n\t}\n\n\tfunction updateEnvAddress(\n\t\tprefix: keyof TPrefixes,\n\t\tnewValue: string,\n\t\tenvFileName: TEnvFileName,\n\t\tnetworkPostfix?: string,\n\t): void {\n\t\tconst searchKey = networkPostfix\n\t\t\t? `${config.prefixes[prefix]}_${getNetworkEnvKey(networkPostfix)}`\n\t\t\t: String(config.prefixes[prefix]);\n\n\t\tupdateEnvVariable(searchKey, newValue, envFileName);\n\t}\n\n\treturn { updateEnvVariable, updateEnvAddress };\n}\n", "import { PublicClient } from 'viem';\n\ntype GasData = {\n\tgasPrice?: string;\n\tmaxFeePerGas?: string;\n\tmaxPriorityFeePerGas?: string;\n};\n\nexport async function getActualGasData(\n\tpublicClient: PublicClient\n): Promise {\n\tconst block = await publicClient.getBlock();\n\n\tconst isEIP1559 = !!block.baseFeePerGas;\n\n\tlet gasPrice = 0n;\n\tlet maxPriorityFeePerGas = 0n;\n\ttry {\n\t\tif (isEIP1559) {\n\t\t\tconst { maxFeePerGas } = await publicClient.estimateFeesPerGas();\n\t\t\tgasPrice = maxFeePerGas;\n\t\t\tmaxPriorityFeePerGas =\n\t\t\t\tawait publicClient.estimateMaxPriorityFeePerGas();\n\t\t} else {\n\t\t\tgasPrice = await publicClient.getGasPrice();\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('Error getting actual gas data:', error);\n\t\treturn {\n\t\t\tgasPrice: '0',\n\t\t\tmaxFeePerGas: '0',\n\t\t\tmaxPriorityFeePerGas: '0',\n\t\t};\n\t}\n\n\tconst gasDataLegacy = {\n\t\tgasPrice: gasPrice.toString(),\n\t};\n\n\tconst gasDataEIP1559 = {\n\t\tmaxFeePerGas: gasPrice.toString(),\n\t\tmaxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n\t};\n\n\tconst gasData: GasData = isEIP1559 ? gasDataEIP1559 : gasDataLegacy;\n\n\treturn gasData;\n}\n", "import {\n\tChain,\n\ttype TestClient,\n\ttype PublicClient,\n\ttype WalletClient,\n\tcreatePublicClient,\n\tcreateTestClient,\n\tcreateWalletClient,\n\tfallback,\n\thttp,\n\tpublicActions,\n\twalletActions,\n\tnonceManager,\n} from \"viem\";\nimport { privateKeyToAccount, type PrivateKeyAccount } from \"viem/accounts\";\n\nimport { type ConceroNetwork, type NetworkType } from \"../types\";\nimport { getWallet } from \"../utils\";\nimport { localhostViemChain } from \"./localhostViemChain\";\nimport { conceroNetworks } from \"../constants/conceroNetworks\";\n\nfunction getClients(\n\tviemChain: Chain,\n\turl: string | undefined,\n\taccount: PrivateKeyAccount = privateKeyToAccount(\n\t\t`0x${process.env.TESTNET_DEPLOYER_PRIVATE_KEY}`,\n\t),\n): {\n\twalletClient: WalletClient;\n\tpublicClient: PublicClient;\n\taccount: PrivateKeyAccount;\n} {\n\tconst publicClient = createPublicClient({ transport: http(url), chain: viemChain });\n\tconst walletClient = createWalletClient({ transport: http(url), chain: viemChain, account });\n\n\treturn { walletClient, publicClient, account };\n}\n\nexport type ExtendedTestClient = TestClient & WalletClient & PublicClient;\n\nfunction getTestClient(account: PrivateKeyAccount): ExtendedTestClient {\n\tconst testClient = createTestClient({\n\t\tchain: localhostViemChain,\n\t\tmode: \"hardhat\",\n\t\ttransport: http(),\n\t\taccount,\n\t})\n\t\t.extend(publicActions)\n\t\t.extend(walletActions);\n\n\treturn testClient as unknown as ExtendedTestClient;\n}\n\nfunction getFallbackClients(\n\tchain: ConceroNetwork,\n\taccount?: PrivateKeyAccount,\n): {\n\twalletClient: WalletClient;\n\tpublicClient: PublicClient;\n\taccount: PrivateKeyAccount;\n} {\n\tif (!account) {\n\t\tswitch (chain.type) {\n\t\t\tcase \"mainnet\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.MAINNET_DEPLOYER_PRIVATE_KEY}`);\n\t\t\t\tbreak;\n\t\t\tcase \"testnet\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.TESTNET_DEPLOYER_PRIVATE_KEY}`, {\n\t\t\t\t\tnonceManager: nonceManager,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"localhost\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.LOCALHOST_DEPLOYER_PRIVATE_KEY}`);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unsupported chain type: ${chain.type}`);\n\t\t}\n\t}\n\n\tconst { viemChain, name } = chain;\n\n\tif (!conceroNetworks[name].rpcUrls.length) {\n\t\tthrow new Error(`No URLs configured for chain: ${name}`);\n\t}\n\n\tconst transport = fallback(\n\t\tconceroNetworks[name].rpcUrls.map(url =>\n\t\t\thttp(url, {\n\t\t\t\ttimeout: 10000,\n\t\t\t\tretryCount: 1,\n\t\t\t\tretryDelay: 250,\n\t\t\t\tonFetchResponse: async response => {\n\t\t\t\t\tif (response.status >= 400) {\n\t\t\t\t\t\tthrow new Error(`HTTP error: ${response.status} ${response.statusText}`);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t}),\n\t\t),\n\t);\n\tconst publicClient = createPublicClient({ transport, chain: viemChain });\n\tconst walletClient = createWalletClient({ transport, chain: viemChain, account });\n\n\treturn { walletClient, publicClient, account };\n}\n\nfunction getViemAccount(\n\tchainType: NetworkType,\n\taccountType: \"proxyDeployer\" | \"deployer\",\n) {\n\tconst privateKey = `0x${getWallet(chainType, accountType, \"privateKey\")}`;\n\n\treturn privateKeyToAccount(privateKey as `0x${string}`, {\n\t\tnonceManager: nonceManager,\n\t});\n}\n\nexport { getClients, getFallbackClients, getTestClient, getViemAccount };\n", "import mainnetChains from '@concero/concero-networks/output/chains.mainnet.json';\nimport testnetChains from '@concero/concero-networks/output/chains.testnet.json';\nimport type { Chain } from '@concero/concero-networks/src/types';\n\nimport {\n\ttype NetworkType,\n\ttype ChainDefinition,\n\ttype ConceroNetwork,\n\tnetworkTypes,\n} from '../types';\nimport { getWallet } from '../utils';\nimport { createViemChain } from '../utils/createViemChain';\nimport { getTrezorDeployEnabled } from '../utils/getTrezorDeployEnabled';\n\nconst mainnetProxyDeployerPK = getWallet(\n\t'mainnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\nconst testnetProxyDeployerPK = getWallet(\n\t'testnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\n\nconst mainnetDeployerPK = getWallet('mainnet', 'deployer', 'privateKey');\nconst testnetDeployerPK = getWallet('testnet', 'deployer', 'privateKey');\n\nconst trezorDeployEnabled = getTrezorDeployEnabled();\n\nconst testnetAccounts = [testnetDeployerPK, testnetProxyDeployerPK];\n\nexport type ConceroMainnetNetworkNames =\n\t(typeof mainnetChains)[keyof typeof mainnetChains]['name'];\nexport type ConceroTestnetNetworkNames =\n\t(typeof testnetChains)[keyof typeof testnetChains]['name'];\n\nfunction createExtendedNetworks>(\n\tchains: T,\n\tnetworkType: NetworkType,\n\taccounts: (string | undefined)[]\n): Record {\n\tconst validAccounts = accounts.filter((acc): acc is string => !!acc);\n\n\treturn Object.fromEntries(\n\t\tObject.values(chains).map(chain => {\n\t\t\tconst chainDefinition: ChainDefinition = {\n\t\t\t\tid: parseInt(chain.id),\n\t\t\t\tname: chain.name,\n\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\tisTestnet: chain.isTestnet ?? false,\n\t\t\t\t...(chain.blockExplorers?.[0] && {\n\t\t\t\t\tblockExplorer: {\n\t\t\t\t\t\tname: chain.blockExplorers[0].name,\n\t\t\t\t\t\turl: chain.blockExplorers[0].url,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t};\n\n\t\t\tconst viemChain = createViemChain(chainDefinition);\n\n\t\t\treturn [\n\t\t\t\tchain.name,\n\t\t\t\t{\n\t\t\t\t\tname: chain.name,\n\t\t\t\t\tchainId: parseInt(chain.id),\n\t\t\t\t\ttype: networkType,\n\t\t\t\t\turl: chain.rpcUrls[0] || '',\n\t\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\t\tsaveDeployments: false,\n\t\t\t\t\t...(!trezorDeployEnabled && { accounts: validAccounts }),\n\t\t\t\t\tchainSelector: BigInt(chain.chainSelector),\n\t\t\t\t\tconfirmations: 1,\n\t\t\t\t\tviemChain,\n\t\t\t\t\t...(trezorDeployEnabled && {\n\t\t\t\t\t\ttrezorDerivationPaths: [\n\t\t\t\t\t\t\t[44, 60, 0, 0, 0],\n\t\t\t\t\t\t\t[44, 60, 0, 0, 1],\n\t\t\t\t\t\t],\n\t\t\t\t\t\ttrezorInsecureDerivation: true,\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t];\n\t\t})\n\t) as Record;\n}\n\nexport const testnetNetworks = createExtendedNetworks(\n\ttestnetChains as unknown as Record,\n\tnetworkTypes.testnet,\n\ttestnetAccounts\n);\n\nexport const mainnetNetworks = createExtendedNetworks(\n\tmainnetChains as unknown as Record,\n\tnetworkTypes.mainnet,\n\t[mainnetDeployerPK, mainnetProxyDeployerPK]\n);\n\nexport const conceroNetworks: Record = {\n\t...testnetNetworks,\n\t...mainnetNetworks,\n};\n", "import { type PublicClient } from \"viem\";\n\nimport { ConceroNetwork } from \"../types/ConceroNetwork\";\nimport { getFallbackClients } from \"./getViemClients\";\n\ninterface GasParameters {\n\tmaxFeePerGas: bigint;\n\tmaxPriorityFeePerGas: bigint;\n}\n\n// Network-specific minimum gas parameters (in wei)\nconst NETWORK_MINIMUMS = {\n\tpolygon: {\n\t\tminTipCap: BigInt(30_000_000_000), // 30 gwei\n\t\tminBaseFee: BigInt(30_000_000_000), // 30 gwei\n\t},\n\t// Add other networks as needed\n} as const;\n\n/**\n * Gets optimized gas parameters for priority transaction processing\n * @param chain - The network configuration\n * @param priorityMultiplier - Multiplier for maxPriorityFeePerGas (default: 2)\n * @param maxFeeMultiplier - Multiplier for maxFeePerGas buffer (default: 2)\n * @returns GasParameters object containing maxFeePerGas and maxPriorityFeePerGas\n */\nexport async function getGasParameters(\n\tchain: ConceroNetwork,\n\tpriorityMultiplier = 1,\n\tmaxFeeMultiplier = 1,\n): Promise {\n\tconst { publicClient } = getFallbackClients(chain);\n\n\ttry {\n\t\t// Get latest block to calculate gas parameters\n\t\tconst block = await publicClient.getBlock();\n\t\tconst baseFee = block.baseFeePerGas ?? BigInt(0);\n\n\t\t// Get network-specific minimums\n\t\tconst networkMinimums = getNetworkMinimums(chain);\n\n\t\t// Calculate priority fee with buffer for faster inclusion\n\t\tconst suggestedPriorityFee = await getSuggestedPriorityFee(publicClient, chain);\n\t\tconst calculatedPriorityFee = calculatePriorityFee(\n\t\t\tsuggestedPriorityFee,\n\t\t\tpriorityMultiplier,\n\t\t);\n\n\t\t// Ensure priority fee meets network minimum\n\t\tconst priorityFee =\n\t\t\tcalculatedPriorityFee > networkMinimums.minTipCap\n\t\t\t\t? calculatedPriorityFee\n\t\t\t\t: networkMinimums.minTipCap;\n\n\t\t// Calculate max fee ensuring it meets network minimums\n\t\tconst calculatedMaxFee = calculateMaxFee(baseFee, priorityFee, maxFeeMultiplier);\n\t\tconst minRequiredMaxFee = networkMinimums.minBaseFee + priorityFee;\n\t\tconst maxFeePerGas =\n\t\t\tcalculatedMaxFee > minRequiredMaxFee ? calculatedMaxFee : minRequiredMaxFee;\n\n\t\treturn {\n\t\t\tmaxFeePerGas,\n\t\t\tmaxPriorityFeePerGas: priorityFee,\n\t\t};\n\t} catch (error) {\n\t\t// Fallback with network minimums\n\t\tconst networkMinimums = getNetworkMinimums(chain);\n\t\tconst gasPrice = await publicClient.getGasPrice();\n\t\tconst priorityFee = networkMinimums.minTipCap;\n\n\t\treturn {\n\t\t\tmaxFeePerGas:\n\t\t\t\tgasPrice > networkMinimums.minBaseFee + priorityFee\n\t\t\t\t\t? gasPrice\n\t\t\t\t\t: networkMinimums.minBaseFee + priorityFee,\n\t\t\tmaxPriorityFeePerGas: priorityFee,\n\t\t};\n\t}\n}\n\n/**\n * Gets network-specific minimum gas parameters\n */\nfunction getNetworkMinimums(chain: ConceroNetwork) {\n\t// Check if chain is Polygon (you'll need to implement this check based on your CNetwork type)\n\tconst isPolygon = chain.chainId === 137 || chain.name.toLowerCase().includes(\"polygon\");\n\n\tif (isPolygon) {\n\t\treturn NETWORK_MINIMUMS.polygon;\n\t}\n\n\t// Default minimums for other networks\n\treturn {\n\t\tminTipCap: BigInt(1_500_000_000), // 1.5 gwei\n\t\tminBaseFee: BigInt(1_000_000_000), // 1 gwei\n\t};\n}\n\n/**\n * Gets the suggested priority fee from recent blocks\n */\nasync function getSuggestedPriorityFee(\n\tpublicClient: PublicClient,\n\tchain: ConceroNetwork,\n): Promise {\n\ttry {\n\t\t// For Polygon, we want to be more aggressive with priority fees\n\t\tconst isPolygon = chain.chainId === 137 || chain.name.toLowerCase().includes(\"polygon\");\n\t\tconst blocksToAnalyze = isPolygon ? 5 : 10; // Look at fewer blocks on Polygon for more recent data\n\n\t\tconst blocks = await Promise.all(\n\t\t\tArray.from({ length: blocksToAnalyze }, (_, i) =>\n\t\t\t\tpublicClient.getBlock({ blockNumber: BigInt(-1 - i) }),\n\t\t\t),\n\t\t);\n\n\t\t// For Polygon, use 75th percentile instead of median for higher priority\n\t\tconst priorityFees = blocks\n\t\t\t.map(block => block.baseFeePerGas ?? BigInt(0))\n\t\t\t.sort((a, b) => (a < b ? -1 : 1));\n\n\t\tconst index = isPolygon\n\t\t\t? Math.floor(priorityFees.length * 0.75)\n\t\t\t: Math.floor(priorityFees.length * 0.5);\n\n\t\treturn priorityFees[index];\n\t} catch {\n\t\t// Use network-specific minimum as fallback\n\t\treturn getNetworkMinimums(chain).minTipCap;\n\t}\n}\n\n/**\n * Calculates priority fee with buffer\n */\nfunction calculatePriorityFee(basePriorityFee: bigint, multiplier: number): bigint {\n\treturn BigInt(Math.ceil(Number(basePriorityFee) * multiplier));\n}\n\n/**\n * Calculates max fee with buffer\n */\nfunction calculateMaxFee(baseFee: bigint, priorityFee: bigint, multiplier: number): bigint {\n\treturn BigInt(Math.ceil(Number(baseFee) * multiplier)) + priorityFee;\n}\n", "export const config = {\n DEFAULT_BLOCK_CONFIRMATIONS: 2,\n};\n", "import { HardhatRuntimeEnvironment } from 'hardhat/types';\n\nimport { conceroNetworks } from '../constants/conceroNetworks';\nimport { getTrezorDeployEnabled, log } from '../utils';\nimport { extractProxyAdminAddress } from '../utils/extractProxyAdminAddress';\n\nexport interface ITxParams {\n\tgasLimit: bigint;\n\tlibraries: Record;\n}\n\nexport interface IDeployResult {\n\thash: string;\n\taddress: string;\n\tchainType: string;\n\tchainName: string;\n\tproxyAdminAddress: string;\n}\n\nexport interface IGenericDeployParams {\n\thre: HardhatRuntimeEnvironment;\n\tcontractName: string;\n\ttxParams?: Partial;\n}\n\nexport const genericDeploy = async (\n\t{ hre, contractName, txParams }: IGenericDeployParams,\n\t...contractConstructorArgs: any[]\n): Promise => {\n\tconst [deployer] = await hre.ethers.getSigners();\n\tconst chain = conceroNetworks[hre.network.name];\n\n\tlog(\n\t\t`Deploy ${contractName} from address: ${await deployer.getAddress()}`,\n\t\t'contract deploy',\n\t\tchain.name\n\t);\n\n\tconst contractFactory = await hre.ethers.getContractFactory(contractName, { libraries: txParams?.libraries });\n\n\tconst deployOverrides = txParams?.gasLimit ? { gasLimit: txParams.gasLimit } : {};\n\n\tconst deployTx = contractFactory.getDeployTransaction(\n\t\t...contractConstructorArgs,\n\t\tdeployOverrides\n\t);\n\n\tconst isTrezorDeployEnabled = getTrezorDeployEnabled();\n\tif (deployTx.data && isTrezorDeployEnabled) {\n\t\tlog(\n\t\t\t`${contractName} input data: ${deployTx.data} \\n size: ${(deployTx.data.length - 2) / 2}`,\n\t\t\t'bytecode',\n\t\t\tchain.name\n\t\t);\n\t}\n\n\tconst contract = await contractFactory.deploy(...contractConstructorArgs, deployOverrides);\n\tconst receipt = await contract.deploymentTransaction()?.wait();\n\tconst deploymentAddress = await contract.getAddress();\n\n\tif (hre.tenderly) {\n\t\tawait hre.tenderly.verify({ name: contractName, address: deploymentAddress });\n\t}\n\n\tlog(\n\t\t`Deployed at: ${deploymentAddress}`,\n\t\t`deploy ${contractName}`,\n\t\tchain.name\n\t);\n\n\treturn {\n\t\thash: contract.deploymentTransaction()?.hash,\n\t\taddress: deploymentAddress,\n\t\tchainName: chain.name,\n\t\tchainType: chain.type,\n\t\tproxyAdminAddress: extractProxyAdminAddress(receipt)\n\t};\n};\n", "import {\n\tAddress,\n\terc20Abi,\n\tformatUnits,\n\tHash,\n\tparseUnits,\n\tPublicClient,\n\tWalletClient,\n} from 'viem';\n\nexport class TokenSender {\n\tprivate walletClient: WalletClient;\n\tprivate publicClient: PublicClient;\n\n\tconstructor(walletClient: WalletClient, publicClient: PublicClient) {\n\t\tthis.walletClient = walletClient;\n\t\tthis.publicClient = publicClient;\n\t}\n\n\tpublic async sendToken(\n\t\ttokenAddress: Address,\n\t\tamount: string,\n\t\trecipient: Address\n\t): Promise {\n\t\tconst [tokenDecimals, tokenSymbol, tokenBalance] = await Promise.all([\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'decimals',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'symbol',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'balanceOf',\n\t\t\t\targs: [this.walletClient.account?.address!],\n\t\t\t}),\n\t\t]);\n\n\t\tconsole.log(\n\t\t\t`Current ${tokenSymbol} balance ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t);\n\n\t\tif (parseUnits(amount, tokenDecimals) > tokenBalance) {\n\t\t\tthrow new Error(\n\t\t\t\t`Insufficient balance. Required: ${amount}, available: ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t\t);\n\t\t}\n\n\t\tconst txHash = await this.walletClient.writeContract({\n\t\t\taddress: tokenAddress,\n\t\t\tabi: erc20Abi,\n\t\t\tfunctionName: 'transfer',\n\t\t\targs: [recipient, parseUnits(amount, tokenDecimals)],\n\t\t\tchain: this.walletClient.chain,\n\t\t\taccount: this.walletClient.account!,\n\t\t});\n\n\t\tconst { status } = await this.publicClient.waitForTransactionReceipt({\n\t\t\thash: txHash,\n\t\t});\n\n\t\tif (status !== 'success') {\n\t\t\tthrow new Error(`Error sending token. Hash: ${txHash}`);\n\t\t}\n\n\t\tconsole.log(`Token successfully sent. Hash: ${txHash}`);\n\n\t\treturn txHash;\n\t}\n}\n"], - "mappings": "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", - "names": ["process", "config", "import_viem", "log", "config", "path", "import_viem", "testnetChains", "mainnetChains", "import_viem"] + "sources": ["../src/index.ts", "../src/types/networkTypes.ts", "../src/utils/createViemChain.ts", "../src/utils/getEnvVar.ts", "../src/utils/log.ts", "../src/utils/formatting.ts", "../src/networks/getNetworkEnvKey.ts", "../src/utils/getTrezorDeployEnabled.ts", "../src/utils/createWalletGetter.ts", "../src/utils/ethersSignerCallContract.ts", "../src/utils/compileContracts.ts", "../src/utils/localhostViemChain.ts", "../src/utils/extractProxyAdminAddress.ts", "../src/utils/createEnvUpdater.ts", "../src/utils/getActualGasData.ts", "../src/utils/getViemClients.ts", "../src/constants/conceroNetworks.ts", "../src/utils/getGasParameters.ts", "../src/constants/config.ts", "../src/deploy/GenericDeploy.ts", "../src/tokens/TokenSender.ts"], + "sourcesContent": ["// Types\nexport * from './types';\n\n// Utils\nexport * from './utils';\n\n// Networks\nexport * from './networks';\n\n// Constants\nexport { config } from './constants/config';\nexport {\n\tconceroNetworks,\n\ttestnetNetworks,\n\tmainnetNetworks,\n\ttype ConceroMainnetNetworkNames,\n\ttype ConceroTestnetNetworkNames,\n} from './constants/conceroNetworks';\n\n// Deploy\nexport { genericDeploy, type IDeployResult, type IGenericDeployParams, type ITxParams } from './deploy/GenericDeploy';\n\n// Tokens\nexport { TokenSender } from './tokens/TokenSender';\n", "import { type NetworkType } from './ConceroNetwork';\n\nexport const networkTypes: Record = {\n\tmainnet: 'mainnet',\n\ttestnet: 'testnet',\n\tlocalhost: 'localhost',\n};\n", "import { defineChain } from 'viem';\n\nimport { type ChainDefinition } from '../types';\n\nexport function createViemChain(\n\tchainDefinition: ChainDefinition\n): ReturnType {\n\treturn defineChain({\n\t\tid: chainDefinition.id,\n\t\tname: chainDefinition.name,\n\t\tnativeCurrency: {\n\t\t\tdecimals: 18,\n\t\t\tname: 'eth',\n\t\t\tsymbol: 'eth',\n\t\t},\n\t\trpcUrls: {\n\t\t\tdefault: { http: chainDefinition.rpcUrls },\n\t\t},\n\t\tblockExplorers: chainDefinition.blockExplorer\n\t\t\t? {\n\t\t\t\tdefault: {\n\t\t\t\t\tname: chainDefinition.blockExplorer.name,\n\t\t\t\t\turl: chainDefinition.blockExplorer.url,\n\t\t\t\t},\n\t\t\t}\n\t\t\t: undefined,\n\t\ttestnet: chainDefinition.isTestnet,\n\t});\n}\n", "import process from 'process';\nimport { Address } from 'viem';\n\nimport { warn } from './log';\nimport { shorten } from './formatting';\nimport { getNetworkEnvKey } from '../networks';\n\nexport function getEnvVar(key: string, defaultValue?: string): string {\n\tconst value = process.env[key];\n\tif (value === undefined || value === '') {\n\t\tif (defaultValue !== undefined) return defaultValue;\n\t\twarn(`Missing env variable: ${key}`, 'getEnvVar');\n\t\treturn '';\n\t}\n\n\treturn value;\n}\n\nexport interface EnvAddressConfig> {\n\tprefixes: TPrefixes;\n}\n\nexport function createEnvAddressGetter>(\n\tconfig: EnvAddressConfig,\n) {\n\tfunction getEnvAddress(\n\t\tprefix: keyof TPrefixes,\n\t\tnetworkName?: string,\n\t): [Address, string] {\n\t\tconst searchKey = networkName\n\t\t\t? `${config.prefixes[prefix]}_${getNetworkEnvKey(networkName)}`\n\t\t\t: config.prefixes[prefix];\n\n\t\tconst value = getEnvVar(searchKey) as Address;\n\t\tconst friendlyName = `${String(prefix)}(${shorten(value)})`\n\n\t\treturn [value, friendlyName];\n\t}\n\n\treturn { getEnvAddress };\n}\n", "const networkColors: Record = {\n\tethereum: '\\x1b[30m', // grey\n\tarbitrum: '\\x1b[34m', // blue\n\tpolygon: '\\x1b[35m', // magenta\n\tavalanche: '\\x1b[31m', // red\n\tbase: '\\x1b[36m', // cyan\n\tethereumSepolia: '\\x1b[30m', // grey\n\tarbitrumSepolia: '\\x1b[34m', // blue\n\toptimismSepolia: '\\x1b[31m', // red\n\tpolygonAmoy: '\\x1b[35m', // magenta\n\tavalancheFuji: '\\x1b[31m', // red\n\tbaseSepolia: '\\x1b[36m', // cyan\n\thardhat: '\\x1b[32m', // green\n\tlocalhost: '\\x1b[32m', // green\n};\nconst reset = '\\x1b[0m';\n\nexport function log(message: any, functionName: string, networkName?: string) {\n\tconst greenFill = '\\x1b[32m';\n\tconst network = networkName ? `\\x1b[35m[${networkName}]${reset}` : '';\n\n\tconsole.log(`${network}${greenFill}[${functionName}]${reset}`, message);\n}\n\nexport function warn(message: any, functionName: string) {\n\tconst yellowFill = '\\x1b[33m';\n\n\tconsole.log(`${yellowFill}[${functionName}]${reset}`, message);\n}\n\nexport function err(message: any, functionName: string, networkName?: string) {\n\tconst redFill = '\\x1b[31m';\n\tconst network = networkName\n\t\t? `${networkColors[networkName]}[${networkName}]${reset}`\n\t\t: '';\n\n\tconsole.log(\n\t\t`${network}${redFill}[${functionName}] ERROR:${reset}`,\n\t\tmessage\n\t);\n}\n\nexport default log;\n", "import { type Address } from \"viem\";\n\nexport function shorten(address: Address) {\n\treturn `${address.slice(0, 6)}...${address.slice(-4)}`;\n}\n\nexport function formatGas(gasAmountWei: bigint) {\n\t// splits gas number with commas like so: 1,000,000\n\treturn gasAmountWei.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n}\n", "/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkEnvKey(networkName: string): string {\n if (!networkName) {\n throw new Error('Network name must be provided');\n }\n return camelCaseToCapsSnakeCase(networkName);\n}\n\n/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkKey(NETWORK_NAME: string): string {\n if (!NETWORK_NAME) {\n throw new Error('Network name must be provided');\n }\n return capsSnakeCaseToCamelCase(NETWORK_NAME);\n}\n\n/**\n * Converts a string from CAPS_SNAKE_CASE to camelCase\n *\n * @param snakeCaseString The string in CAPS_SNAKE_CASE format\n * @returns The string converted to camelCase format\n */\nexport function capsSnakeCaseToCamelCase(snakeCaseString: string): string {\n if (!snakeCaseString) {\n throw new Error('String must be provided');\n }\n\n return snakeCaseString\n .toLowerCase()\n .replace(/_([a-z])/g, (_, char) => char.toUpperCase());\n}\n\n/**\n * Converts a string from camelCase to CAPS_SNAKE_CASE\n *\n * @param camelCaseString The string in camelCase format\n * @returns The string converted to CAPS_SNAKE_CASE format\n */\nexport function camelCaseToCapsSnakeCase(camelCaseString: string): string {\n if (!camelCaseString) {\n throw new Error('String must be provided');\n }\n\n return camelCaseString.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toUpperCase();\n}\n\nexport function getNetworkName(networkEnvKey: string): string {\n if (!networkEnvKey) {\n throw new Error('Network name must be provided');\n }\n\n return networkEnvKey\n .toLowerCase()\n .split('_')\n .map((word, index) =>\n index === 0 ? word : word[0].toUpperCase() + word.slice(1)\n )\n .join('');\n}\n", "import { getEnvVar } from './getEnvVar';\n\nexport const getTrezorDeployEnabled = () =>\n\tgetEnvVar('TREZOR_DEPLOY_ENABLED', 'false') === 'true';\n", "import { type NetworkType } from '../types';\nimport { warn } from './log';\n\nexport interface BaseAccountTypePrefixes extends Record {\n\tproxyDeployer: 'PROXY_DEPLOYER';\n\tdeployer: 'DEPLOYER';\n}\n\nexport const baseAccountTypePrefixes: BaseAccountTypePrefixes = {\n\tproxyDeployer: 'PROXY_DEPLOYER',\n\tdeployer: 'DEPLOYER'\n};\n\nexport interface WalletGetterConfig> {\n\taccountTypePrefixes: TPrefixes;\n}\n\nexport function createWalletGetter>(\n\tconfig: WalletGetterConfig,\n) {\n\tfunction getWallet(\n\t\tchainType: NetworkType,\n\t\taccountType: keyof TPrefixes,\n\t\twalletType: 'privateKey' | 'address',\n\t) {\n\t\tconst prefix = config.accountTypePrefixes[accountType];\n\t\tif (!prefix) {\n\t\t\tthrow new Error(`Unknown account type: ${String(accountType)}`);\n\t\t}\n\n\t\tconst walletKey = walletType === 'privateKey' ? 'PRIVATE_KEY' : 'ADDRESS';\n\t\tconst envKey = `${chainType.toUpperCase()}_${prefix}_${walletKey}`;\n\t\tconst walletValue = process.env[envKey];\n\n\t\tif (!walletValue) {\n\t\t\twarn(`Missing env variable: ${envKey}`, 'getWallet');\n\t\t}\n\n\t\treturn walletValue;\n\t}\n\n\treturn { getWallet };\n}\n\nexport const { getWallet } = createWalletGetter({\n\taccountTypePrefixes: baseAccountTypePrefixes,\n});\n", "import { HardhatRuntimeEnvironment } from \"hardhat/types\";\nimport { Address, Hash } from \"viem\";\n\nimport { log } from \"./log\";\n\nexport const ethersSignerCallContract = async (\n\thre: HardhatRuntimeEnvironment,\n\tcontract: Address,\n\tabi: any[],\n\tfunctionName: string,\n\t...functionArgs: any[]\n) => {\n\tconst [ethersSigner] = await hre.ethers.getSigners();\n\tconst ethersContract = new hre.ethers.Contract(contract, abi, ethersSigner);\n\tconst unsignedTx = await ethersContract[functionName].populateTransaction(...functionArgs);\n\n\tlog(\n\t\t`Size: ${(unsignedTx.data.length - 2) / 2}, Input data: ${unsignedTx.data}, Address: ${unsignedTx.to}`,\n\t\tfunctionName,\n\t\thre.network.name,\n\t);\n\n\treturn (await ethersSigner.sendTransaction(unsignedTx)).hash as Hash;\n};\n", "/*\nhardhat compile\n --concurrency Number of compilation jobs executed in parallel. Defaults to the number of CPU cores - 1 (default: 9)\n --force Force compilation ignoring cache\n --no-size-contracts Don't size contracts after running this task, even if runOnCompile option is enabled\n --no-typechain Skip Typechain compilation\n --quiet Makes the compilation process less verbose\n */\nimport { execSync } from \"child_process\";\n\ninterface HardhatCompileParams {\n\tconcurrency?: number;\n\tforce?: boolean;\n\tnoSizeContracts?: boolean;\n\tnoTypechain?: boolean;\n\tquiet?: boolean;\n}\n\nexport function compileContracts({ quiet = true, force = false }: HardhatCompileParams) {\n\tconst packageManager = process.env[\"PACKAGE_MANAGER\"] || \"yarn\";\n\tconst command = `${packageManager} compile`;\n\tconst args = [];\n\t// if (concurrency) args.push(`--concurrency ${concurrency}`);\n\t// if (noSizeContracts) args.push(\"--no-size-contracts\");\n\t// if (noTypechain) args.push(\"--no-typechain\");\n\tif (quiet) args.push(\"--quiet\");\n\tif (force) args.push(\"--force\");\n\texecSync(`${command} ${args.join(\" \")}`, { stdio: \"inherit\" });\n}\n", "import { defineChain } from \"viem\";\n\nexport const localhostViemChain = defineChain({\n\tid: Number(process.env.LOCALHOST_FORK_CHAIN_ID),\n\tname: \"localhost\",\n\tnativeCurrency: {\n\t\tdecimals: 18,\n\t\tname: \"eth\",\n\t\tsymbol: \"eth\",\n\t},\n\trpcUrls: {\n\t\tdefault: { http: [process.env.LOCALHOST_RPC_URL ?? \"http://127.0.0.1:8545\"] },\n\t},\n\ttestnet: true,\n});\n\nexport const hardhatViemChain = defineChain({\n\tid: Number(process.env.HARDHAT_CHAIN_ID),\n\tname: \"hardhat\",\n\tnativeCurrency: {\n\t\tdecimals: 18,\n\t\tname: \"eth\",\n\t\tsymbol: \"eth\",\n\t},\n\trpcUrls: {\n\t\tdefault: { http: [process.env.HARDHAT_RPC_URL ?? \"http://127.0.0.1:8545\"] },\n\t},\n\ttestnet: true,\n});\n", "import { ethers } from 'ethers';\n\nexport function extractProxyAdminAddress(receipt: ethers.TransactionReceipt | null): string {\n\tif (!receipt) return ethers.ZeroAddress;\n\n\tconst adminChangedTopic = ethers.id(\"AdminChanged(address,address)\");\n\tconst adminChangedLog = receipt.logs.find((log: ethers.Log) => log.topics[0] === adminChangedTopic);\n\n\tif (!adminChangedLog) return ethers.ZeroAddress;\n\n\ttry {\n\t\tconst abiCoder = ethers.AbiCoder.defaultAbiCoder();\n\t\tconst [, newAdmin] = abiCoder.decode(['address', 'address'], adminChangedLog.data);\n\t\treturn newAdmin;\n\t} catch {\n\t\treturn ethers.ZeroAddress;\n\t}\n}", "import { existsSync, readFileSync, writeFileSync } from \"fs\";\nimport path from \"path\";\nimport { getNetworkEnvKey } from \"../networks/getNetworkEnvKey\";\nimport log from \"./log\";\n\nexport interface EnvUpdaterConfig> {\n\tprefixes: TPrefixes;\n\tbasePath: string;\n}\n\nexport function createEnvUpdater<\n\tTPrefixes extends Record,\n\tTEnvFileName extends string,\n>(config: EnvUpdaterConfig) {\n\tfunction updateEnvVariable(\n\t\tkey: string,\n\t\tnewValue: string,\n\t\tenvFileName: TEnvFileName,\n\t): void {\n\t\tconst filePath = path.join(config.basePath, `.env.${envFileName}`);\n\n\t\tif (!existsSync(filePath)) {\n\t\t\tthrow new Error(`File not found: ${filePath}`);\n\t\t}\n\n\t\tconst envContents = readFileSync(filePath, \"utf8\");\n\t\tlet lines = envContents.split(/\\r?\\n/);\n\n\t\tconst keyExists = lines.some(line => line.startsWith(`${key}=`));\n\n\t\tif (!keyExists) {\n\t\t\tlog(\n\t\t\t\t`Key ${key} not found in .env file. Adding to ${filePath}`,\n\t\t\t\t\"updateEnvVariable\",\n\t\t\t);\n\t\t\tlines.push(`${key}=${newValue}`);\n\t\t} else {\n\t\t\tlines = lines.map(line => {\n\t\t\t\tconst [currentKey] = line.split(\"=\");\n\t\t\t\tif (currentKey === key) {\n\t\t\t\t\treturn `${key}=${newValue}`;\n\t\t\t\t}\n\t\t\t\treturn line;\n\t\t\t});\n\t\t}\n\n\t\twriteFileSync(filePath, lines.join(\"\\n\"));\n\t\tprocess.env[key] = newValue;\n\t}\n\n\tfunction updateEnvAddress(\n\t\tprefix: keyof TPrefixes,\n\t\tnewValue: string,\n\t\tenvFileName: TEnvFileName,\n\t\tnetworkPostfix?: string,\n\t): void {\n\t\tconst searchKey = networkPostfix\n\t\t\t? `${config.prefixes[prefix]}_${getNetworkEnvKey(networkPostfix)}`\n\t\t\t: String(config.prefixes[prefix]);\n\n\t\tupdateEnvVariable(searchKey, newValue, envFileName);\n\t}\n\n\treturn { updateEnvVariable, updateEnvAddress };\n}\n", "import { PublicClient } from 'viem';\n\ntype GasData = {\n\tgasPrice?: string;\n\tmaxFeePerGas?: string;\n\tmaxPriorityFeePerGas?: string;\n};\n\nexport async function getActualGasData(\n\tpublicClient: PublicClient\n): Promise {\n\tconst block = await publicClient.getBlock();\n\n\tconst isEIP1559 = !!block.baseFeePerGas;\n\n\tlet gasPrice = 0n;\n\tlet maxPriorityFeePerGas = 0n;\n\ttry {\n\t\tif (isEIP1559) {\n\t\t\tconst { maxFeePerGas } = await publicClient.estimateFeesPerGas();\n\t\t\tgasPrice = maxFeePerGas;\n\t\t\tmaxPriorityFeePerGas =\n\t\t\t\tawait publicClient.estimateMaxPriorityFeePerGas();\n\t\t} else {\n\t\t\tgasPrice = await publicClient.getGasPrice();\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('Error getting actual gas data:', error);\n\t\treturn {\n\t\t\tgasPrice: '0',\n\t\t\tmaxFeePerGas: '0',\n\t\t\tmaxPriorityFeePerGas: '0',\n\t\t};\n\t}\n\n\tconst gasDataLegacy = {\n\t\tgasPrice: gasPrice.toString(),\n\t};\n\n\tconst gasDataEIP1559 = {\n\t\tmaxFeePerGas: gasPrice.toString(),\n\t\tmaxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n\t};\n\n\tconst gasData: GasData = isEIP1559 ? gasDataEIP1559 : gasDataLegacy;\n\n\treturn gasData;\n}\n", "import {\n\tChain,\n\ttype TestClient,\n\ttype PublicClient,\n\ttype WalletClient,\n\tcreatePublicClient,\n\tcreateTestClient,\n\tcreateWalletClient,\n\tfallback,\n\thttp,\n\tpublicActions,\n\twalletActions,\n\tnonceManager,\n} from \"viem\";\nimport { privateKeyToAccount, type PrivateKeyAccount } from \"viem/accounts\";\n\nimport { type ConceroNetwork, type NetworkType } from \"../types\";\nimport { getWallet, type BaseAccountTypePrefixes } from \"../utils\";\nimport { localhostViemChain } from \"./localhostViemChain\";\nimport { conceroNetworks } from \"../constants/conceroNetworks\";\n\nfunction getClients(\n\tviemChain: Chain,\n\turl: string | undefined,\n\taccount: PrivateKeyAccount = privateKeyToAccount(\n\t\t`0x${process.env.TESTNET_DEPLOYER_PRIVATE_KEY}`,\n\t),\n): {\n\twalletClient: WalletClient;\n\tpublicClient: PublicClient;\n\taccount: PrivateKeyAccount;\n} {\n\tconst publicClient = createPublicClient({ transport: http(url), chain: viemChain });\n\tconst walletClient = createWalletClient({ transport: http(url), chain: viemChain, account });\n\n\treturn { walletClient, publicClient, account };\n}\n\nexport type ExtendedTestClient = TestClient & WalletClient & PublicClient;\n\nfunction getTestClient(account: PrivateKeyAccount): ExtendedTestClient {\n\tconst testClient = createTestClient({\n\t\tchain: localhostViemChain,\n\t\tmode: \"hardhat\",\n\t\ttransport: http(),\n\t\taccount,\n\t})\n\t\t.extend(publicActions)\n\t\t.extend(walletActions);\n\n\treturn testClient as unknown as ExtendedTestClient;\n}\n\nfunction getFallbackClients(\n\tchain: ConceroNetwork,\n\taccount?: PrivateKeyAccount,\n): {\n\twalletClient: WalletClient;\n\tpublicClient: PublicClient;\n\taccount: PrivateKeyAccount;\n} {\n\tif (!account) {\n\t\tswitch (chain.type) {\n\t\t\tcase \"mainnet\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.MAINNET_DEPLOYER_PRIVATE_KEY}`);\n\t\t\t\tbreak;\n\t\t\tcase \"testnet\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.TESTNET_DEPLOYER_PRIVATE_KEY}`, {\n\t\t\t\t\tnonceManager: nonceManager,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"localhost\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.LOCALHOST_DEPLOYER_PRIVATE_KEY}`);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unsupported chain type: ${chain.type}`);\n\t\t}\n\t}\n\n\tconst { viemChain, name } = chain;\n\n\tif (!conceroNetworks[name].rpcUrls.length) {\n\t\tthrow new Error(`No URLs configured for chain: ${name}`);\n\t}\n\n\tconst transport = fallback(\n\t\tconceroNetworks[name].rpcUrls.map(url =>\n\t\t\thttp(url, {\n\t\t\t\ttimeout: 10000,\n\t\t\t\tretryCount: 1,\n\t\t\t\tretryDelay: 250,\n\t\t\t\tonFetchResponse: async response => {\n\t\t\t\t\tif (response.status >= 400) {\n\t\t\t\t\t\tthrow new Error(`HTTP error: ${response.status} ${response.statusText}`);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t}),\n\t\t),\n\t);\n\tconst publicClient = createPublicClient({ transport, chain: viemChain });\n\tconst walletClient = createWalletClient({ transport, chain: viemChain, account });\n\n\treturn { walletClient, publicClient, account };\n}\n\nfunction getViemAccount(\n\tchainType: NetworkType,\n\taccountType: keyof BaseAccountTypePrefixes,\n) {\n\tconst privateKey = `0x${getWallet(chainType, accountType, \"privateKey\")}`;\n\n\treturn privateKeyToAccount(privateKey as `0x${string}`, {\n\t\tnonceManager: nonceManager,\n\t});\n}\n\nexport interface ViemAccountGetterConfig> {\n\taccountTypePrefixes: TPrefixes;\n\tgetWallet: (chainType: NetworkType, accountType: keyof TPrefixes, walletType: 'privateKey' | 'address') => string | undefined;\n}\n\nexport function createViemAccountGetter>(\n\tconfig: ViemAccountGetterConfig,\n) {\n\tfunction getViemAccount(\n\t\tchainType: NetworkType,\n\t\taccountType: keyof TPrefixes,\n\t) {\n\t\tconst privateKey = `0x${config.getWallet(chainType, accountType, \"privateKey\")}`;\n\n\t\treturn privateKeyToAccount(privateKey as `0x${string}`, {\n\t\t\tnonceManager: nonceManager,\n\t\t});\n\t}\n\n\treturn { getViemAccount };\n}\n\nexport { getClients, getFallbackClients, getTestClient, getViemAccount };\n", "import mainnetChains from '@concero/concero-networks/output/chains.mainnet.json';\nimport testnetChains from '@concero/concero-networks/output/chains.testnet.json';\nimport type { Chain } from '@concero/concero-networks/src/types';\n\nimport {\n\ttype NetworkType,\n\ttype ChainDefinition,\n\ttype ConceroNetwork,\n\tnetworkTypes,\n} from '../types';\nimport { getWallet } from '../utils';\nimport { createViemChain } from '../utils/createViemChain';\nimport { getTrezorDeployEnabled } from '../utils/getTrezorDeployEnabled';\n\nconst mainnetProxyDeployerPK = getWallet(\n\t'mainnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\nconst testnetProxyDeployerPK = getWallet(\n\t'testnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\n\nconst mainnetDeployerPK = getWallet('mainnet', 'deployer', 'privateKey');\nconst testnetDeployerPK = getWallet('testnet', 'deployer', 'privateKey');\n\nconst trezorDeployEnabled = getTrezorDeployEnabled();\n\nconst testnetAccounts = [testnetDeployerPK, testnetProxyDeployerPK];\n\nexport type ConceroMainnetNetworkNames =\n\t(typeof mainnetChains)[keyof typeof mainnetChains]['name'];\nexport type ConceroTestnetNetworkNames =\n\t(typeof testnetChains)[keyof typeof testnetChains]['name'];\n\nfunction createExtendedNetworks>(\n\tchains: T,\n\tnetworkType: NetworkType,\n\taccounts: (string | undefined)[]\n): Record {\n\tconst validAccounts = accounts.filter((acc): acc is string => !!acc);\n\n\treturn Object.fromEntries(\n\t\tObject.values(chains).map(chain => {\n\t\t\tconst chainDefinition: ChainDefinition = {\n\t\t\t\tid: parseInt(chain.id),\n\t\t\t\tname: chain.name,\n\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\tisTestnet: chain.isTestnet ?? false,\n\t\t\t\t...(chain.blockExplorers?.[0] && {\n\t\t\t\t\tblockExplorer: {\n\t\t\t\t\t\tname: chain.blockExplorers[0].name,\n\t\t\t\t\t\turl: chain.blockExplorers[0].url,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t};\n\n\t\t\tconst viemChain = createViemChain(chainDefinition);\n\n\t\t\treturn [\n\t\t\t\tchain.name,\n\t\t\t\t{\n\t\t\t\t\tname: chain.name,\n\t\t\t\t\tchainId: parseInt(chain.id),\n\t\t\t\t\ttype: networkType,\n\t\t\t\t\turl: chain.rpcUrls[0] || '',\n\t\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\t\tsaveDeployments: false,\n\t\t\t\t\t...(!trezorDeployEnabled && { accounts: validAccounts }),\n\t\t\t\t\tchainSelector: BigInt(chain.chainSelector),\n\t\t\t\t\tconfirmations: 1,\n\t\t\t\t\tviemChain,\n\t\t\t\t\t...(trezorDeployEnabled && {\n\t\t\t\t\t\ttrezorDerivationPaths: [\n\t\t\t\t\t\t\t[44, 60, 0, 0, 0],\n\t\t\t\t\t\t\t[44, 60, 0, 0, 1],\n\t\t\t\t\t\t],\n\t\t\t\t\t\ttrezorInsecureDerivation: true,\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t];\n\t\t})\n\t) as Record;\n}\n\nexport const testnetNetworks = createExtendedNetworks(\n\ttestnetChains as unknown as Record,\n\tnetworkTypes.testnet,\n\ttestnetAccounts\n);\n\nexport const mainnetNetworks = createExtendedNetworks(\n\tmainnetChains as unknown as Record,\n\tnetworkTypes.mainnet,\n\t[mainnetDeployerPK, mainnetProxyDeployerPK]\n);\n\nexport const conceroNetworks: Record = {\n\t...testnetNetworks,\n\t...mainnetNetworks,\n};\n", "import { type PublicClient } from \"viem\";\n\nimport { ConceroNetwork } from \"../types/ConceroNetwork\";\nimport { getFallbackClients } from \"./getViemClients\";\n\ninterface GasParameters {\n\tmaxFeePerGas: bigint;\n\tmaxPriorityFeePerGas: bigint;\n}\n\n// Network-specific minimum gas parameters (in wei)\nconst NETWORK_MINIMUMS = {\n\tpolygon: {\n\t\tminTipCap: BigInt(30_000_000_000), // 30 gwei\n\t\tminBaseFee: BigInt(30_000_000_000), // 30 gwei\n\t},\n\t// Add other networks as needed\n} as const;\n\n/**\n * Gets optimized gas parameters for priority transaction processing\n * @param chain - The network configuration\n * @param priorityMultiplier - Multiplier for maxPriorityFeePerGas (default: 2)\n * @param maxFeeMultiplier - Multiplier for maxFeePerGas buffer (default: 2)\n * @returns GasParameters object containing maxFeePerGas and maxPriorityFeePerGas\n */\nexport async function getGasParameters(\n\tchain: ConceroNetwork,\n\tpriorityMultiplier = 1,\n\tmaxFeeMultiplier = 1,\n): Promise {\n\tconst { publicClient } = getFallbackClients(chain);\n\n\ttry {\n\t\t// Get latest block to calculate gas parameters\n\t\tconst block = await publicClient.getBlock();\n\t\tconst baseFee = block.baseFeePerGas ?? BigInt(0);\n\n\t\t// Get network-specific minimums\n\t\tconst networkMinimums = getNetworkMinimums(chain);\n\n\t\t// Calculate priority fee with buffer for faster inclusion\n\t\tconst suggestedPriorityFee = await getSuggestedPriorityFee(publicClient, chain);\n\t\tconst calculatedPriorityFee = calculatePriorityFee(\n\t\t\tsuggestedPriorityFee,\n\t\t\tpriorityMultiplier,\n\t\t);\n\n\t\t// Ensure priority fee meets network minimum\n\t\tconst priorityFee =\n\t\t\tcalculatedPriorityFee > networkMinimums.minTipCap\n\t\t\t\t? calculatedPriorityFee\n\t\t\t\t: networkMinimums.minTipCap;\n\n\t\t// Calculate max fee ensuring it meets network minimums\n\t\tconst calculatedMaxFee = calculateMaxFee(baseFee, priorityFee, maxFeeMultiplier);\n\t\tconst minRequiredMaxFee = networkMinimums.minBaseFee + priorityFee;\n\t\tconst maxFeePerGas =\n\t\t\tcalculatedMaxFee > minRequiredMaxFee ? calculatedMaxFee : minRequiredMaxFee;\n\n\t\treturn {\n\t\t\tmaxFeePerGas,\n\t\t\tmaxPriorityFeePerGas: priorityFee,\n\t\t};\n\t} catch (error) {\n\t\t// Fallback with network minimums\n\t\tconst networkMinimums = getNetworkMinimums(chain);\n\t\tconst gasPrice = await publicClient.getGasPrice();\n\t\tconst priorityFee = networkMinimums.minTipCap;\n\n\t\treturn {\n\t\t\tmaxFeePerGas:\n\t\t\t\tgasPrice > networkMinimums.minBaseFee + priorityFee\n\t\t\t\t\t? gasPrice\n\t\t\t\t\t: networkMinimums.minBaseFee + priorityFee,\n\t\t\tmaxPriorityFeePerGas: priorityFee,\n\t\t};\n\t}\n}\n\n/**\n * Gets network-specific minimum gas parameters\n */\nfunction getNetworkMinimums(chain: ConceroNetwork) {\n\t// Check if chain is Polygon (you'll need to implement this check based on your CNetwork type)\n\tconst isPolygon = chain.chainId === 137 || chain.name.toLowerCase().includes(\"polygon\");\n\n\tif (isPolygon) {\n\t\treturn NETWORK_MINIMUMS.polygon;\n\t}\n\n\t// Default minimums for other networks\n\treturn {\n\t\tminTipCap: BigInt(1_500_000_000), // 1.5 gwei\n\t\tminBaseFee: BigInt(1_000_000_000), // 1 gwei\n\t};\n}\n\n/**\n * Gets the suggested priority fee from recent blocks\n */\nasync function getSuggestedPriorityFee(\n\tpublicClient: PublicClient,\n\tchain: ConceroNetwork,\n): Promise {\n\ttry {\n\t\t// For Polygon, we want to be more aggressive with priority fees\n\t\tconst isPolygon = chain.chainId === 137 || chain.name.toLowerCase().includes(\"polygon\");\n\t\tconst blocksToAnalyze = isPolygon ? 5 : 10; // Look at fewer blocks on Polygon for more recent data\n\n\t\tconst blocks = await Promise.all(\n\t\t\tArray.from({ length: blocksToAnalyze }, (_, i) =>\n\t\t\t\tpublicClient.getBlock({ blockNumber: BigInt(-1 - i) }),\n\t\t\t),\n\t\t);\n\n\t\t// For Polygon, use 75th percentile instead of median for higher priority\n\t\tconst priorityFees = blocks\n\t\t\t.map(block => block.baseFeePerGas ?? BigInt(0))\n\t\t\t.sort((a, b) => (a < b ? -1 : 1));\n\n\t\tconst index = isPolygon\n\t\t\t? Math.floor(priorityFees.length * 0.75)\n\t\t\t: Math.floor(priorityFees.length * 0.5);\n\n\t\treturn priorityFees[index];\n\t} catch {\n\t\t// Use network-specific minimum as fallback\n\t\treturn getNetworkMinimums(chain).minTipCap;\n\t}\n}\n\n/**\n * Calculates priority fee with buffer\n */\nfunction calculatePriorityFee(basePriorityFee: bigint, multiplier: number): bigint {\n\treturn BigInt(Math.ceil(Number(basePriorityFee) * multiplier));\n}\n\n/**\n * Calculates max fee with buffer\n */\nfunction calculateMaxFee(baseFee: bigint, priorityFee: bigint, multiplier: number): bigint {\n\treturn BigInt(Math.ceil(Number(baseFee) * multiplier)) + priorityFee;\n}\n", "export const config = {\n DEFAULT_BLOCK_CONFIRMATIONS: 2,\n};\n", "import { HardhatRuntimeEnvironment } from 'hardhat/types';\n\nimport { conceroNetworks } from '../constants/conceroNetworks';\nimport { getTrezorDeployEnabled, log } from '../utils';\nimport { extractProxyAdminAddress } from '../utils/extractProxyAdminAddress';\n\nexport interface ITxParams {\n\tgasLimit: bigint;\n\tlibraries: Record;\n}\n\nexport interface IDeployResult {\n\thash: string;\n\taddress: string;\n\tchainType: string;\n\tchainName: string;\n\tproxyAdminAddress: string;\n}\n\nexport interface IGenericDeployParams {\n\thre: HardhatRuntimeEnvironment;\n\tcontractName: string;\n\ttxParams?: Partial;\n}\n\nexport const genericDeploy = async (\n\t{ hre, contractName, txParams }: IGenericDeployParams,\n\t...contractConstructorArgs: any[]\n): Promise => {\n\tconst [deployer] = await hre.ethers.getSigners();\n\tconst chain = conceroNetworks[hre.network.name];\n\n\tlog(\n\t\t`Deploy ${contractName} from address: ${await deployer.getAddress()}`,\n\t\t'contract deploy',\n\t\tchain.name\n\t);\n\n\tconst contractFactory = await hre.ethers.getContractFactory(contractName, { libraries: txParams?.libraries });\n\n\tconst deployOverrides = txParams?.gasLimit ? { gasLimit: txParams.gasLimit } : {};\n\n\tconst deployTx = contractFactory.getDeployTransaction(\n\t\t...contractConstructorArgs,\n\t\tdeployOverrides\n\t);\n\n\tconst isTrezorDeployEnabled = getTrezorDeployEnabled();\n\tif (deployTx.data && isTrezorDeployEnabled) {\n\t\tlog(\n\t\t\t`${contractName} input data: ${deployTx.data} \\n size: ${(deployTx.data.length - 2) / 2}`,\n\t\t\t'bytecode',\n\t\t\tchain.name\n\t\t);\n\t}\n\n\tconst contract = await contractFactory.deploy(...contractConstructorArgs, deployOverrides);\n\tconst receipt = await contract.deploymentTransaction()?.wait();\n\tconst deploymentAddress = await contract.getAddress();\n\n\tif (hre.tenderly) {\n\t\tawait hre.tenderly.verify({ name: contractName, address: deploymentAddress });\n\t}\n\n\tlog(\n\t\t`Deployed at: ${deploymentAddress}`,\n\t\t`deploy ${contractName}`,\n\t\tchain.name\n\t);\n\n\treturn {\n\t\thash: contract.deploymentTransaction()?.hash,\n\t\taddress: deploymentAddress,\n\t\tchainName: chain.name,\n\t\tchainType: chain.type,\n\t\tproxyAdminAddress: extractProxyAdminAddress(receipt)\n\t};\n};\n", "import {\n\tAddress,\n\terc20Abi,\n\tformatUnits,\n\tHash,\n\tparseUnits,\n\tPublicClient,\n\tWalletClient,\n} from 'viem';\n\nexport class TokenSender {\n\tprivate walletClient: WalletClient;\n\tprivate publicClient: PublicClient;\n\n\tconstructor(walletClient: WalletClient, publicClient: PublicClient) {\n\t\tthis.walletClient = walletClient;\n\t\tthis.publicClient = publicClient;\n\t}\n\n\tpublic async sendToken(\n\t\ttokenAddress: Address,\n\t\tamount: string,\n\t\trecipient: Address\n\t): Promise {\n\t\tconst [tokenDecimals, tokenSymbol, tokenBalance] = await Promise.all([\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'decimals',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'symbol',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'balanceOf',\n\t\t\t\targs: [this.walletClient.account?.address!],\n\t\t\t}),\n\t\t]);\n\n\t\tconsole.log(\n\t\t\t`Current ${tokenSymbol} balance ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t);\n\n\t\tif (parseUnits(amount, tokenDecimals) > tokenBalance) {\n\t\t\tthrow new Error(\n\t\t\t\t`Insufficient balance. Required: ${amount}, available: ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t\t);\n\t\t}\n\n\t\tconst txHash = await this.walletClient.writeContract({\n\t\t\taddress: tokenAddress,\n\t\t\tabi: erc20Abi,\n\t\t\tfunctionName: 'transfer',\n\t\t\targs: [recipient, parseUnits(amount, tokenDecimals)],\n\t\t\tchain: this.walletClient.chain,\n\t\t\taccount: this.walletClient.account!,\n\t\t});\n\n\t\tconst { status } = await this.publicClient.waitForTransactionReceipt({\n\t\t\thash: txHash,\n\t\t});\n\n\t\tif (status !== 'success') {\n\t\t\tthrow new Error(`Error sending token. Hash: ${txHash}`);\n\t\t}\n\n\t\tconsole.log(`Token successfully sent. Hash: ${txHash}`);\n\n\t\treturn txHash;\n\t}\n}\n"], + "mappings": "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", + "names": ["process", "config", "config", "getWallet", "import_viem", "log", "config", "path", "import_viem", "testnetChains", "mainnetChains", "config", "getViemAccount", "import_viem"] } diff --git a/dist/index.esm.js b/dist/index.esm.js index 49a1224..05fc0a8 100644 --- a/dist/index.esm.js +++ b/dist/index.esm.js @@ -138,40 +138,30 @@ function createEnvAddressGetter(config2) { // src/utils/getTrezorDeployEnabled.ts var getTrezorDeployEnabled = () => getEnvVar("TREZOR_DEPLOY_ENABLED", "false") === "true"; -// src/utils/getWallet.ts -function getWallet(chainType, accountType, walletType) { - let prefix; - let walletKey; - switch (accountType) { - case "proxyDeployer": - prefix = "PROXY_DEPLOYER"; - break; - case "deployer": - prefix = "DEPLOYER"; - break; - case "operator": - prefix = "OPERATOR"; - break; - default: - throw new Error(`Unknown account type: ${accountType}`); - } - switch (walletType) { - case "privateKey": - walletKey = "PRIVATE_KEY"; - break; - case "address": - walletKey = "ADDRESS"; - break; - default: - throw new Error(`Unknown wallet type: ${walletType}`); - } - const envKey = `${chainType.toUpperCase()}_${prefix}_${walletKey}`; - const walletValue = process.env[envKey]; - if (!walletValue) { - warn(`Missing env variable: ${envKey}`, "getEnvVar"); +// src/utils/createWalletGetter.ts +var baseAccountTypePrefixes = { + proxyDeployer: "PROXY_DEPLOYER", + deployer: "DEPLOYER" +}; +function createWalletGetter(config2) { + function getWallet2(chainType, accountType, walletType) { + const prefix = config2.accountTypePrefixes[accountType]; + if (!prefix) { + throw new Error(`Unknown account type: ${String(accountType)}`); + } + const walletKey = walletType === "privateKey" ? "PRIVATE_KEY" : "ADDRESS"; + const envKey = `${chainType.toUpperCase()}_${prefix}_${walletKey}`; + const walletValue = process.env[envKey]; + if (!walletValue) { + warn(`Missing env variable: ${envKey}`, "getWallet"); + } + return walletValue; } - return walletValue; + return { getWallet: getWallet2 }; } +var { getWallet } = createWalletGetter({ + accountTypePrefixes: baseAccountTypePrefixes +}); // src/utils/ethersSignerCallContract.ts var ethersSignerCallContract = async (hre, contract, abi, functionName, ...functionArgs) => { @@ -462,6 +452,15 @@ function getViemAccount(chainType, accountType) { nonceManager }); } +function createViemAccountGetter(config2) { + function getViemAccount2(chainType, accountType) { + const privateKey = `0x${config2.getWallet(chainType, accountType, "privateKey")}`; + return privateKeyToAccount(privateKey, { + nonceManager + }); + } + return { getViemAccount: getViemAccount2 }; +} // src/utils/getGasParameters.ts var NETWORK_MINIMUMS = { @@ -649,12 +648,15 @@ var TokenSender = class { }; export { TokenSender, + baseAccountTypePrefixes, compileContracts, conceroNetworks, config, createEnvAddressGetter, createEnvUpdater, + createViemAccountGetter, createViemChain, + createWalletGetter, err, ethersSignerCallContract, extractProxyAdminAddress, diff --git a/dist/index.esm.js.map b/dist/index.esm.js.map index 9782a3f..3109ecc 100644 --- a/dist/index.esm.js.map +++ b/dist/index.esm.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": ["../src/types/networkTypes.ts", "../src/utils/createViemChain.ts", "../src/utils/getEnvVar.ts", "../src/utils/log.ts", "../src/utils/formatting.ts", "../src/networks/getNetworkEnvKey.ts", "../src/utils/getTrezorDeployEnabled.ts", "../src/utils/getWallet.ts", "../src/utils/ethersSignerCallContract.ts", "../src/utils/compileContracts.ts", "../src/utils/localhostViemChain.ts", "../src/utils/extractProxyAdminAddress.ts", "../src/utils/createEnvUpdater.ts", "../src/utils/getActualGasData.ts", "../src/utils/getViemClients.ts", "../src/constants/conceroNetworks.ts", "../src/utils/getGasParameters.ts", "../src/constants/config.ts", "../src/deploy/GenericDeploy.ts", "../src/tokens/TokenSender.ts"], - "sourcesContent": ["import { type NetworkType } from './ConceroNetwork';\n\nexport const networkTypes: Record = {\n\tmainnet: 'mainnet',\n\ttestnet: 'testnet',\n\tlocalhost: 'localhost',\n};\n", "import { defineChain } from 'viem';\n\nimport { type ChainDefinition } from '../types';\n\nexport function createViemChain(\n\tchainDefinition: ChainDefinition\n): ReturnType {\n\treturn defineChain({\n\t\tid: chainDefinition.id,\n\t\tname: chainDefinition.name,\n\t\tnativeCurrency: {\n\t\t\tdecimals: 18,\n\t\t\tname: 'eth',\n\t\t\tsymbol: 'eth',\n\t\t},\n\t\trpcUrls: {\n\t\t\tdefault: { http: chainDefinition.rpcUrls },\n\t\t},\n\t\tblockExplorers: chainDefinition.blockExplorer\n\t\t\t? {\n\t\t\t\tdefault: {\n\t\t\t\t\tname: chainDefinition.blockExplorer.name,\n\t\t\t\t\turl: chainDefinition.blockExplorer.url,\n\t\t\t\t},\n\t\t\t}\n\t\t\t: undefined,\n\t\ttestnet: chainDefinition.isTestnet,\n\t});\n}\n", "import process from 'process';\nimport { Address } from 'viem';\n\nimport { warn } from './log';\nimport { shorten } from './formatting';\nimport { getNetworkEnvKey } from '../networks';\n\nexport function getEnvVar(key: string, defaultValue?: string): string {\n\tconst value = process.env[key];\n\tif (value === undefined || value === '') {\n\t\tif (defaultValue !== undefined) return defaultValue;\n\t\twarn(`Missing env variable: ${key}`, 'getEnvVar');\n\t\treturn '';\n\t}\n\n\treturn value;\n}\n\nexport interface EnvAddressConfig> {\n\tprefixes: TPrefixes;\n}\n\nexport function createEnvAddressGetter>(\n\tconfig: EnvAddressConfig,\n) {\n\tfunction getEnvAddress(\n\t\tprefix: keyof TPrefixes,\n\t\tnetworkName?: string,\n\t): [Address, string] {\n\t\tconst searchKey = networkName\n\t\t\t? `${config.prefixes[prefix]}_${getNetworkEnvKey(networkName)}`\n\t\t\t: config.prefixes[prefix];\n\n\t\tconst value = getEnvVar(searchKey) as Address;\n\t\tconst friendlyName = `${String(prefix)}(${shorten(value)})`\n\n\t\treturn [value, friendlyName];\n\t}\n\n\treturn { getEnvAddress };\n}\n", "const networkColors: Record = {\n\tethereum: '\\x1b[30m', // grey\n\tarbitrum: '\\x1b[34m', // blue\n\tpolygon: '\\x1b[35m', // magenta\n\tavalanche: '\\x1b[31m', // red\n\tbase: '\\x1b[36m', // cyan\n\tethereumSepolia: '\\x1b[30m', // grey\n\tarbitrumSepolia: '\\x1b[34m', // blue\n\toptimismSepolia: '\\x1b[31m', // red\n\tpolygonAmoy: '\\x1b[35m', // magenta\n\tavalancheFuji: '\\x1b[31m', // red\n\tbaseSepolia: '\\x1b[36m', // cyan\n\thardhat: '\\x1b[32m', // green\n\tlocalhost: '\\x1b[32m', // green\n};\nconst reset = '\\x1b[0m';\n\nexport function log(message: any, functionName: string, networkName?: string) {\n\tconst greenFill = '\\x1b[32m';\n\tconst network = networkName ? `\\x1b[35m[${networkName}]${reset}` : '';\n\n\tconsole.log(`${network}${greenFill}[${functionName}]${reset}`, message);\n}\n\nexport function warn(message: any, functionName: string) {\n\tconst yellowFill = '\\x1b[33m';\n\n\tconsole.log(`${yellowFill}[${functionName}]${reset}`, message);\n}\n\nexport function err(message: any, functionName: string, networkName?: string) {\n\tconst redFill = '\\x1b[31m';\n\tconst network = networkName\n\t\t? `${networkColors[networkName]}[${networkName}]${reset}`\n\t\t: '';\n\n\tconsole.log(\n\t\t`${network}${redFill}[${functionName}] ERROR:${reset}`,\n\t\tmessage\n\t);\n}\n\nexport default log;\n", "import { type Address } from \"viem\";\n\nexport function shorten(address: Address) {\n\treturn `${address.slice(0, 6)}...${address.slice(-4)}`;\n}\n\nexport function formatGas(gasAmountWei: bigint) {\n\t// splits gas number with commas like so: 1,000,000\n\treturn gasAmountWei.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n}\n", "/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkEnvKey(networkName: string): string {\n if (!networkName) {\n throw new Error('Network name must be provided');\n }\n return camelCaseToCapsSnakeCase(networkName);\n}\n\n/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkKey(NETWORK_NAME: string): string {\n if (!NETWORK_NAME) {\n throw new Error('Network name must be provided');\n }\n return capsSnakeCaseToCamelCase(NETWORK_NAME);\n}\n\n/**\n * Converts a string from CAPS_SNAKE_CASE to camelCase\n *\n * @param snakeCaseString The string in CAPS_SNAKE_CASE format\n * @returns The string converted to camelCase format\n */\nexport function capsSnakeCaseToCamelCase(snakeCaseString: string): string {\n if (!snakeCaseString) {\n throw new Error('String must be provided');\n }\n\n return snakeCaseString\n .toLowerCase()\n .replace(/_([a-z])/g, (_, char) => char.toUpperCase());\n}\n\n/**\n * Converts a string from camelCase to CAPS_SNAKE_CASE\n *\n * @param camelCaseString The string in camelCase format\n * @returns The string converted to CAPS_SNAKE_CASE format\n */\nexport function camelCaseToCapsSnakeCase(camelCaseString: string): string {\n if (!camelCaseString) {\n throw new Error('String must be provided');\n }\n\n return camelCaseString.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toUpperCase();\n}\n\nexport function getNetworkName(networkEnvKey: string): string {\n if (!networkEnvKey) {\n throw new Error('Network name must be provided');\n }\n\n return networkEnvKey\n .toLowerCase()\n .split('_')\n .map((word, index) =>\n index === 0 ? word : word[0].toUpperCase() + word.slice(1)\n )\n .join('');\n}\n", "import { getEnvVar } from './getEnvVar';\n\nexport const getTrezorDeployEnabled = () =>\n\tgetEnvVar('TREZOR_DEPLOY_ENABLED', 'false') === 'true';\n", "import { type NetworkType } from '../types';\nimport { warn } from './log';\n\nexport function getWallet(\n\tchainType: NetworkType,\n\taccountType:\n\t\t| 'proxyDeployer'\n\t\t| 'deployer'\n\t\t| 'operator',\n\twalletType: 'privateKey' | 'address'\n) {\n\tlet prefix;\n\tlet walletKey;\n\tswitch (accountType) {\n\t\tcase 'proxyDeployer':\n\t\t\tprefix = 'PROXY_DEPLOYER';\n\t\t\tbreak;\n\t\tcase 'deployer':\n\t\t\tprefix = 'DEPLOYER';\n\t\t\tbreak;\n\t\tcase 'operator':\n\t\t\tprefix = 'OPERATOR';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown account type: ${accountType}`);\n\t}\n\n\tswitch (walletType) {\n\t\tcase 'privateKey':\n\t\t\twalletKey = 'PRIVATE_KEY';\n\t\t\tbreak;\n\t\tcase 'address':\n\t\t\twalletKey = 'ADDRESS';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow new Error(`Unknown wallet type: ${walletType}`);\n\t}\n\n\t// Determine the environment variable key based on the wallet type\n\tconst envKey = `${chainType.toUpperCase()}_${prefix}_${walletKey}`;\n\tconst walletValue = process.env[envKey];\n\n\tif (!walletValue) {\n\t\twarn(`Missing env variable: ${envKey}`, 'getEnvVar');\n\t}\n\n\treturn walletValue;\n}\n", "import { HardhatRuntimeEnvironment } from \"hardhat/types\";\nimport { Address, Hash } from \"viem\";\n\nimport { log } from \"./log\";\n\nexport const ethersSignerCallContract = async (\n\thre: HardhatRuntimeEnvironment,\n\tcontract: Address,\n\tabi: any[],\n\tfunctionName: string,\n\t...functionArgs: any[]\n) => {\n\tconst [ethersSigner] = await hre.ethers.getSigners();\n\tconst ethersContract = new hre.ethers.Contract(contract, abi, ethersSigner);\n\tconst unsignedTx = await ethersContract[functionName].populateTransaction(...functionArgs);\n\n\tlog(\n\t\t`Size: ${(unsignedTx.data.length - 2) / 2}, Input data: ${unsignedTx.data}, Address: ${unsignedTx.to}`,\n\t\tfunctionName,\n\t\thre.network.name,\n\t);\n\n\treturn (await ethersSigner.sendTransaction(unsignedTx)).hash as Hash;\n};\n", "/*\nhardhat compile\n --concurrency Number of compilation jobs executed in parallel. Defaults to the number of CPU cores - 1 (default: 9)\n --force Force compilation ignoring cache\n --no-size-contracts Don't size contracts after running this task, even if runOnCompile option is enabled\n --no-typechain Skip Typechain compilation\n --quiet Makes the compilation process less verbose\n */\nimport { execSync } from \"child_process\";\n\ninterface HardhatCompileParams {\n\tconcurrency?: number;\n\tforce?: boolean;\n\tnoSizeContracts?: boolean;\n\tnoTypechain?: boolean;\n\tquiet?: boolean;\n}\n\nexport function compileContracts({ quiet = true, force = false }: HardhatCompileParams) {\n\tconst packageManager = process.env[\"PACKAGE_MANAGER\"] || \"yarn\";\n\tconst command = `${packageManager} compile`;\n\tconst args = [];\n\t// if (concurrency) args.push(`--concurrency ${concurrency}`);\n\t// if (noSizeContracts) args.push(\"--no-size-contracts\");\n\t// if (noTypechain) args.push(\"--no-typechain\");\n\tif (quiet) args.push(\"--quiet\");\n\tif (force) args.push(\"--force\");\n\texecSync(`${command} ${args.join(\" \")}`, { stdio: \"inherit\" });\n}\n", "import { defineChain } from \"viem\";\n\nexport const localhostViemChain = defineChain({\n\tid: Number(process.env.LOCALHOST_FORK_CHAIN_ID),\n\tname: \"localhost\",\n\tnativeCurrency: {\n\t\tdecimals: 18,\n\t\tname: \"eth\",\n\t\tsymbol: \"eth\",\n\t},\n\trpcUrls: {\n\t\tdefault: { http: [process.env.LOCALHOST_RPC_URL ?? \"http://127.0.0.1:8545\"] },\n\t},\n\ttestnet: true,\n});\n\nexport const hardhatViemChain = defineChain({\n\tid: Number(process.env.HARDHAT_CHAIN_ID),\n\tname: \"hardhat\",\n\tnativeCurrency: {\n\t\tdecimals: 18,\n\t\tname: \"eth\",\n\t\tsymbol: \"eth\",\n\t},\n\trpcUrls: {\n\t\tdefault: { http: [process.env.HARDHAT_RPC_URL ?? \"http://127.0.0.1:8545\"] },\n\t},\n\ttestnet: true,\n});\n", "import { ethers } from 'ethers';\n\nexport function extractProxyAdminAddress(receipt: ethers.TransactionReceipt | null): string {\n\tif (!receipt) return ethers.ZeroAddress;\n\n\tconst adminChangedTopic = ethers.id(\"AdminChanged(address,address)\");\n\tconst adminChangedLog = receipt.logs.find((log: ethers.Log) => log.topics[0] === adminChangedTopic);\n\n\tif (!adminChangedLog) return ethers.ZeroAddress;\n\n\ttry {\n\t\tconst abiCoder = ethers.AbiCoder.defaultAbiCoder();\n\t\tconst [, newAdmin] = abiCoder.decode(['address', 'address'], adminChangedLog.data);\n\t\treturn newAdmin;\n\t} catch {\n\t\treturn ethers.ZeroAddress;\n\t}\n}", "import { existsSync, readFileSync, writeFileSync } from \"fs\";\nimport path from \"path\";\nimport { getNetworkEnvKey } from \"../networks/getNetworkEnvKey\";\nimport log from \"./log\";\n\nexport interface EnvUpdaterConfig> {\n\tprefixes: TPrefixes;\n\tbasePath: string;\n}\n\nexport function createEnvUpdater<\n\tTPrefixes extends Record,\n\tTEnvFileName extends string,\n>(config: EnvUpdaterConfig) {\n\tfunction updateEnvVariable(\n\t\tkey: string,\n\t\tnewValue: string,\n\t\tenvFileName: TEnvFileName,\n\t): void {\n\t\tconst filePath = path.join(config.basePath, `.env.${envFileName}`);\n\n\t\tif (!existsSync(filePath)) {\n\t\t\tthrow new Error(`File not found: ${filePath}`);\n\t\t}\n\n\t\tconst envContents = readFileSync(filePath, \"utf8\");\n\t\tlet lines = envContents.split(/\\r?\\n/);\n\n\t\tconst keyExists = lines.some(line => line.startsWith(`${key}=`));\n\n\t\tif (!keyExists) {\n\t\t\tlog(\n\t\t\t\t`Key ${key} not found in .env file. Adding to ${filePath}`,\n\t\t\t\t\"updateEnvVariable\",\n\t\t\t);\n\t\t\tlines.push(`${key}=${newValue}`);\n\t\t} else {\n\t\t\tlines = lines.map(line => {\n\t\t\t\tconst [currentKey] = line.split(\"=\");\n\t\t\t\tif (currentKey === key) {\n\t\t\t\t\treturn `${key}=${newValue}`;\n\t\t\t\t}\n\t\t\t\treturn line;\n\t\t\t});\n\t\t}\n\n\t\twriteFileSync(filePath, lines.join(\"\\n\"));\n\t\tprocess.env[key] = newValue;\n\t}\n\n\tfunction updateEnvAddress(\n\t\tprefix: keyof TPrefixes,\n\t\tnewValue: string,\n\t\tenvFileName: TEnvFileName,\n\t\tnetworkPostfix?: string,\n\t): void {\n\t\tconst searchKey = networkPostfix\n\t\t\t? `${config.prefixes[prefix]}_${getNetworkEnvKey(networkPostfix)}`\n\t\t\t: String(config.prefixes[prefix]);\n\n\t\tupdateEnvVariable(searchKey, newValue, envFileName);\n\t}\n\n\treturn { updateEnvVariable, updateEnvAddress };\n}\n", "import { PublicClient } from 'viem';\n\ntype GasData = {\n\tgasPrice?: string;\n\tmaxFeePerGas?: string;\n\tmaxPriorityFeePerGas?: string;\n};\n\nexport async function getActualGasData(\n\tpublicClient: PublicClient\n): Promise {\n\tconst block = await publicClient.getBlock();\n\n\tconst isEIP1559 = !!block.baseFeePerGas;\n\n\tlet gasPrice = 0n;\n\tlet maxPriorityFeePerGas = 0n;\n\ttry {\n\t\tif (isEIP1559) {\n\t\t\tconst { maxFeePerGas } = await publicClient.estimateFeesPerGas();\n\t\t\tgasPrice = maxFeePerGas;\n\t\t\tmaxPriorityFeePerGas =\n\t\t\t\tawait publicClient.estimateMaxPriorityFeePerGas();\n\t\t} else {\n\t\t\tgasPrice = await publicClient.getGasPrice();\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('Error getting actual gas data:', error);\n\t\treturn {\n\t\t\tgasPrice: '0',\n\t\t\tmaxFeePerGas: '0',\n\t\t\tmaxPriorityFeePerGas: '0',\n\t\t};\n\t}\n\n\tconst gasDataLegacy = {\n\t\tgasPrice: gasPrice.toString(),\n\t};\n\n\tconst gasDataEIP1559 = {\n\t\tmaxFeePerGas: gasPrice.toString(),\n\t\tmaxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n\t};\n\n\tconst gasData: GasData = isEIP1559 ? gasDataEIP1559 : gasDataLegacy;\n\n\treturn gasData;\n}\n", "import {\n\tChain,\n\ttype TestClient,\n\ttype PublicClient,\n\ttype WalletClient,\n\tcreatePublicClient,\n\tcreateTestClient,\n\tcreateWalletClient,\n\tfallback,\n\thttp,\n\tpublicActions,\n\twalletActions,\n\tnonceManager,\n} from \"viem\";\nimport { privateKeyToAccount, type PrivateKeyAccount } from \"viem/accounts\";\n\nimport { type ConceroNetwork, type NetworkType } from \"../types\";\nimport { getWallet } from \"../utils\";\nimport { localhostViemChain } from \"./localhostViemChain\";\nimport { conceroNetworks } from \"../constants/conceroNetworks\";\n\nfunction getClients(\n\tviemChain: Chain,\n\turl: string | undefined,\n\taccount: PrivateKeyAccount = privateKeyToAccount(\n\t\t`0x${process.env.TESTNET_DEPLOYER_PRIVATE_KEY}`,\n\t),\n): {\n\twalletClient: WalletClient;\n\tpublicClient: PublicClient;\n\taccount: PrivateKeyAccount;\n} {\n\tconst publicClient = createPublicClient({ transport: http(url), chain: viemChain });\n\tconst walletClient = createWalletClient({ transport: http(url), chain: viemChain, account });\n\n\treturn { walletClient, publicClient, account };\n}\n\nexport type ExtendedTestClient = TestClient & WalletClient & PublicClient;\n\nfunction getTestClient(account: PrivateKeyAccount): ExtendedTestClient {\n\tconst testClient = createTestClient({\n\t\tchain: localhostViemChain,\n\t\tmode: \"hardhat\",\n\t\ttransport: http(),\n\t\taccount,\n\t})\n\t\t.extend(publicActions)\n\t\t.extend(walletActions);\n\n\treturn testClient as unknown as ExtendedTestClient;\n}\n\nfunction getFallbackClients(\n\tchain: ConceroNetwork,\n\taccount?: PrivateKeyAccount,\n): {\n\twalletClient: WalletClient;\n\tpublicClient: PublicClient;\n\taccount: PrivateKeyAccount;\n} {\n\tif (!account) {\n\t\tswitch (chain.type) {\n\t\t\tcase \"mainnet\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.MAINNET_DEPLOYER_PRIVATE_KEY}`);\n\t\t\t\tbreak;\n\t\t\tcase \"testnet\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.TESTNET_DEPLOYER_PRIVATE_KEY}`, {\n\t\t\t\t\tnonceManager: nonceManager,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"localhost\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.LOCALHOST_DEPLOYER_PRIVATE_KEY}`);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unsupported chain type: ${chain.type}`);\n\t\t}\n\t}\n\n\tconst { viemChain, name } = chain;\n\n\tif (!conceroNetworks[name].rpcUrls.length) {\n\t\tthrow new Error(`No URLs configured for chain: ${name}`);\n\t}\n\n\tconst transport = fallback(\n\t\tconceroNetworks[name].rpcUrls.map(url =>\n\t\t\thttp(url, {\n\t\t\t\ttimeout: 10000,\n\t\t\t\tretryCount: 1,\n\t\t\t\tretryDelay: 250,\n\t\t\t\tonFetchResponse: async response => {\n\t\t\t\t\tif (response.status >= 400) {\n\t\t\t\t\t\tthrow new Error(`HTTP error: ${response.status} ${response.statusText}`);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t}),\n\t\t),\n\t);\n\tconst publicClient = createPublicClient({ transport, chain: viemChain });\n\tconst walletClient = createWalletClient({ transport, chain: viemChain, account });\n\n\treturn { walletClient, publicClient, account };\n}\n\nfunction getViemAccount(\n\tchainType: NetworkType,\n\taccountType: \"proxyDeployer\" | \"deployer\",\n) {\n\tconst privateKey = `0x${getWallet(chainType, accountType, \"privateKey\")}`;\n\n\treturn privateKeyToAccount(privateKey as `0x${string}`, {\n\t\tnonceManager: nonceManager,\n\t});\n}\n\nexport { getClients, getFallbackClients, getTestClient, getViemAccount };\n", "import mainnetChains from '@concero/concero-networks/output/chains.mainnet.json';\nimport testnetChains from '@concero/concero-networks/output/chains.testnet.json';\nimport type { Chain } from '@concero/concero-networks/src/types';\n\nimport {\n\ttype NetworkType,\n\ttype ChainDefinition,\n\ttype ConceroNetwork,\n\tnetworkTypes,\n} from '../types';\nimport { getWallet } from '../utils';\nimport { createViemChain } from '../utils/createViemChain';\nimport { getTrezorDeployEnabled } from '../utils/getTrezorDeployEnabled';\n\nconst mainnetProxyDeployerPK = getWallet(\n\t'mainnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\nconst testnetProxyDeployerPK = getWallet(\n\t'testnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\n\nconst mainnetDeployerPK = getWallet('mainnet', 'deployer', 'privateKey');\nconst testnetDeployerPK = getWallet('testnet', 'deployer', 'privateKey');\n\nconst trezorDeployEnabled = getTrezorDeployEnabled();\n\nconst testnetAccounts = [testnetDeployerPK, testnetProxyDeployerPK];\n\nexport type ConceroMainnetNetworkNames =\n\t(typeof mainnetChains)[keyof typeof mainnetChains]['name'];\nexport type ConceroTestnetNetworkNames =\n\t(typeof testnetChains)[keyof typeof testnetChains]['name'];\n\nfunction createExtendedNetworks>(\n\tchains: T,\n\tnetworkType: NetworkType,\n\taccounts: (string | undefined)[]\n): Record {\n\tconst validAccounts = accounts.filter((acc): acc is string => !!acc);\n\n\treturn Object.fromEntries(\n\t\tObject.values(chains).map(chain => {\n\t\t\tconst chainDefinition: ChainDefinition = {\n\t\t\t\tid: parseInt(chain.id),\n\t\t\t\tname: chain.name,\n\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\tisTestnet: chain.isTestnet ?? false,\n\t\t\t\t...(chain.blockExplorers?.[0] && {\n\t\t\t\t\tblockExplorer: {\n\t\t\t\t\t\tname: chain.blockExplorers[0].name,\n\t\t\t\t\t\turl: chain.blockExplorers[0].url,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t};\n\n\t\t\tconst viemChain = createViemChain(chainDefinition);\n\n\t\t\treturn [\n\t\t\t\tchain.name,\n\t\t\t\t{\n\t\t\t\t\tname: chain.name,\n\t\t\t\t\tchainId: parseInt(chain.id),\n\t\t\t\t\ttype: networkType,\n\t\t\t\t\turl: chain.rpcUrls[0] || '',\n\t\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\t\tsaveDeployments: false,\n\t\t\t\t\t...(!trezorDeployEnabled && { accounts: validAccounts }),\n\t\t\t\t\tchainSelector: BigInt(chain.chainSelector),\n\t\t\t\t\tconfirmations: 1,\n\t\t\t\t\tviemChain,\n\t\t\t\t\t...(trezorDeployEnabled && {\n\t\t\t\t\t\ttrezorDerivationPaths: [\n\t\t\t\t\t\t\t[44, 60, 0, 0, 0],\n\t\t\t\t\t\t\t[44, 60, 0, 0, 1],\n\t\t\t\t\t\t],\n\t\t\t\t\t\ttrezorInsecureDerivation: true,\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t];\n\t\t})\n\t) as Record;\n}\n\nexport const testnetNetworks = createExtendedNetworks(\n\ttestnetChains as unknown as Record,\n\tnetworkTypes.testnet,\n\ttestnetAccounts\n);\n\nexport const mainnetNetworks = createExtendedNetworks(\n\tmainnetChains as unknown as Record,\n\tnetworkTypes.mainnet,\n\t[mainnetDeployerPK, mainnetProxyDeployerPK]\n);\n\nexport const conceroNetworks: Record = {\n\t...testnetNetworks,\n\t...mainnetNetworks,\n};\n", "import { type PublicClient } from \"viem\";\n\nimport { ConceroNetwork } from \"../types/ConceroNetwork\";\nimport { getFallbackClients } from \"./getViemClients\";\n\ninterface GasParameters {\n\tmaxFeePerGas: bigint;\n\tmaxPriorityFeePerGas: bigint;\n}\n\n// Network-specific minimum gas parameters (in wei)\nconst NETWORK_MINIMUMS = {\n\tpolygon: {\n\t\tminTipCap: BigInt(30_000_000_000), // 30 gwei\n\t\tminBaseFee: BigInt(30_000_000_000), // 30 gwei\n\t},\n\t// Add other networks as needed\n} as const;\n\n/**\n * Gets optimized gas parameters for priority transaction processing\n * @param chain - The network configuration\n * @param priorityMultiplier - Multiplier for maxPriorityFeePerGas (default: 2)\n * @param maxFeeMultiplier - Multiplier for maxFeePerGas buffer (default: 2)\n * @returns GasParameters object containing maxFeePerGas and maxPriorityFeePerGas\n */\nexport async function getGasParameters(\n\tchain: ConceroNetwork,\n\tpriorityMultiplier = 1,\n\tmaxFeeMultiplier = 1,\n): Promise {\n\tconst { publicClient } = getFallbackClients(chain);\n\n\ttry {\n\t\t// Get latest block to calculate gas parameters\n\t\tconst block = await publicClient.getBlock();\n\t\tconst baseFee = block.baseFeePerGas ?? BigInt(0);\n\n\t\t// Get network-specific minimums\n\t\tconst networkMinimums = getNetworkMinimums(chain);\n\n\t\t// Calculate priority fee with buffer for faster inclusion\n\t\tconst suggestedPriorityFee = await getSuggestedPriorityFee(publicClient, chain);\n\t\tconst calculatedPriorityFee = calculatePriorityFee(\n\t\t\tsuggestedPriorityFee,\n\t\t\tpriorityMultiplier,\n\t\t);\n\n\t\t// Ensure priority fee meets network minimum\n\t\tconst priorityFee =\n\t\t\tcalculatedPriorityFee > networkMinimums.minTipCap\n\t\t\t\t? calculatedPriorityFee\n\t\t\t\t: networkMinimums.minTipCap;\n\n\t\t// Calculate max fee ensuring it meets network minimums\n\t\tconst calculatedMaxFee = calculateMaxFee(baseFee, priorityFee, maxFeeMultiplier);\n\t\tconst minRequiredMaxFee = networkMinimums.minBaseFee + priorityFee;\n\t\tconst maxFeePerGas =\n\t\t\tcalculatedMaxFee > minRequiredMaxFee ? calculatedMaxFee : minRequiredMaxFee;\n\n\t\treturn {\n\t\t\tmaxFeePerGas,\n\t\t\tmaxPriorityFeePerGas: priorityFee,\n\t\t};\n\t} catch (error) {\n\t\t// Fallback with network minimums\n\t\tconst networkMinimums = getNetworkMinimums(chain);\n\t\tconst gasPrice = await publicClient.getGasPrice();\n\t\tconst priorityFee = networkMinimums.minTipCap;\n\n\t\treturn {\n\t\t\tmaxFeePerGas:\n\t\t\t\tgasPrice > networkMinimums.minBaseFee + priorityFee\n\t\t\t\t\t? gasPrice\n\t\t\t\t\t: networkMinimums.minBaseFee + priorityFee,\n\t\t\tmaxPriorityFeePerGas: priorityFee,\n\t\t};\n\t}\n}\n\n/**\n * Gets network-specific minimum gas parameters\n */\nfunction getNetworkMinimums(chain: ConceroNetwork) {\n\t// Check if chain is Polygon (you'll need to implement this check based on your CNetwork type)\n\tconst isPolygon = chain.chainId === 137 || chain.name.toLowerCase().includes(\"polygon\");\n\n\tif (isPolygon) {\n\t\treturn NETWORK_MINIMUMS.polygon;\n\t}\n\n\t// Default minimums for other networks\n\treturn {\n\t\tminTipCap: BigInt(1_500_000_000), // 1.5 gwei\n\t\tminBaseFee: BigInt(1_000_000_000), // 1 gwei\n\t};\n}\n\n/**\n * Gets the suggested priority fee from recent blocks\n */\nasync function getSuggestedPriorityFee(\n\tpublicClient: PublicClient,\n\tchain: ConceroNetwork,\n): Promise {\n\ttry {\n\t\t// For Polygon, we want to be more aggressive with priority fees\n\t\tconst isPolygon = chain.chainId === 137 || chain.name.toLowerCase().includes(\"polygon\");\n\t\tconst blocksToAnalyze = isPolygon ? 5 : 10; // Look at fewer blocks on Polygon for more recent data\n\n\t\tconst blocks = await Promise.all(\n\t\t\tArray.from({ length: blocksToAnalyze }, (_, i) =>\n\t\t\t\tpublicClient.getBlock({ blockNumber: BigInt(-1 - i) }),\n\t\t\t),\n\t\t);\n\n\t\t// For Polygon, use 75th percentile instead of median for higher priority\n\t\tconst priorityFees = blocks\n\t\t\t.map(block => block.baseFeePerGas ?? BigInt(0))\n\t\t\t.sort((a, b) => (a < b ? -1 : 1));\n\n\t\tconst index = isPolygon\n\t\t\t? Math.floor(priorityFees.length * 0.75)\n\t\t\t: Math.floor(priorityFees.length * 0.5);\n\n\t\treturn priorityFees[index];\n\t} catch {\n\t\t// Use network-specific minimum as fallback\n\t\treturn getNetworkMinimums(chain).minTipCap;\n\t}\n}\n\n/**\n * Calculates priority fee with buffer\n */\nfunction calculatePriorityFee(basePriorityFee: bigint, multiplier: number): bigint {\n\treturn BigInt(Math.ceil(Number(basePriorityFee) * multiplier));\n}\n\n/**\n * Calculates max fee with buffer\n */\nfunction calculateMaxFee(baseFee: bigint, priorityFee: bigint, multiplier: number): bigint {\n\treturn BigInt(Math.ceil(Number(baseFee) * multiplier)) + priorityFee;\n}\n", "export const config = {\n DEFAULT_BLOCK_CONFIRMATIONS: 2,\n};\n", "import { HardhatRuntimeEnvironment } from 'hardhat/types';\n\nimport { conceroNetworks } from '../constants/conceroNetworks';\nimport { getTrezorDeployEnabled, log } from '../utils';\nimport { extractProxyAdminAddress } from '../utils/extractProxyAdminAddress';\n\nexport interface ITxParams {\n\tgasLimit: bigint;\n\tlibraries: Record;\n}\n\nexport interface IDeployResult {\n\thash: string;\n\taddress: string;\n\tchainType: string;\n\tchainName: string;\n\tproxyAdminAddress: string;\n}\n\nexport interface IGenericDeployParams {\n\thre: HardhatRuntimeEnvironment;\n\tcontractName: string;\n\ttxParams?: Partial;\n}\n\nexport const genericDeploy = async (\n\t{ hre, contractName, txParams }: IGenericDeployParams,\n\t...contractConstructorArgs: any[]\n): Promise => {\n\tconst [deployer] = await hre.ethers.getSigners();\n\tconst chain = conceroNetworks[hre.network.name];\n\n\tlog(\n\t\t`Deploy ${contractName} from address: ${await deployer.getAddress()}`,\n\t\t'contract deploy',\n\t\tchain.name\n\t);\n\n\tconst contractFactory = await hre.ethers.getContractFactory(contractName, { libraries: txParams?.libraries });\n\n\tconst deployOverrides = txParams?.gasLimit ? { gasLimit: txParams.gasLimit } : {};\n\n\tconst deployTx = contractFactory.getDeployTransaction(\n\t\t...contractConstructorArgs,\n\t\tdeployOverrides\n\t);\n\n\tconst isTrezorDeployEnabled = getTrezorDeployEnabled();\n\tif (deployTx.data && isTrezorDeployEnabled) {\n\t\tlog(\n\t\t\t`${contractName} input data: ${deployTx.data} \\n size: ${(deployTx.data.length - 2) / 2}`,\n\t\t\t'bytecode',\n\t\t\tchain.name\n\t\t);\n\t}\n\n\tconst contract = await contractFactory.deploy(...contractConstructorArgs, deployOverrides);\n\tconst receipt = await contract.deploymentTransaction()?.wait();\n\tconst deploymentAddress = await contract.getAddress();\n\n\tif (hre.tenderly) {\n\t\tawait hre.tenderly.verify({ name: contractName, address: deploymentAddress });\n\t}\n\n\tlog(\n\t\t`Deployed at: ${deploymentAddress}`,\n\t\t`deploy ${contractName}`,\n\t\tchain.name\n\t);\n\n\treturn {\n\t\thash: contract.deploymentTransaction()?.hash,\n\t\taddress: deploymentAddress,\n\t\tchainName: chain.name,\n\t\tchainType: chain.type,\n\t\tproxyAdminAddress: extractProxyAdminAddress(receipt)\n\t};\n};\n", "import {\n\tAddress,\n\terc20Abi,\n\tformatUnits,\n\tHash,\n\tparseUnits,\n\tPublicClient,\n\tWalletClient,\n} from 'viem';\n\nexport class TokenSender {\n\tprivate walletClient: WalletClient;\n\tprivate publicClient: PublicClient;\n\n\tconstructor(walletClient: WalletClient, publicClient: PublicClient) {\n\t\tthis.walletClient = walletClient;\n\t\tthis.publicClient = publicClient;\n\t}\n\n\tpublic async sendToken(\n\t\ttokenAddress: Address,\n\t\tamount: string,\n\t\trecipient: Address\n\t): Promise {\n\t\tconst [tokenDecimals, tokenSymbol, tokenBalance] = await Promise.all([\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'decimals',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'symbol',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'balanceOf',\n\t\t\t\targs: [this.walletClient.account?.address!],\n\t\t\t}),\n\t\t]);\n\n\t\tconsole.log(\n\t\t\t`Current ${tokenSymbol} balance ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t);\n\n\t\tif (parseUnits(amount, tokenDecimals) > tokenBalance) {\n\t\t\tthrow new Error(\n\t\t\t\t`Insufficient balance. Required: ${amount}, available: ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t\t);\n\t\t}\n\n\t\tconst txHash = await this.walletClient.writeContract({\n\t\t\taddress: tokenAddress,\n\t\t\tabi: erc20Abi,\n\t\t\tfunctionName: 'transfer',\n\t\t\targs: [recipient, parseUnits(amount, tokenDecimals)],\n\t\t\tchain: this.walletClient.chain,\n\t\t\taccount: this.walletClient.account!,\n\t\t});\n\n\t\tconst { status } = await this.publicClient.waitForTransactionReceipt({\n\t\t\thash: txHash,\n\t\t});\n\n\t\tif (status !== 'success') {\n\t\t\tthrow new Error(`Error sending token. Hash: ${txHash}`);\n\t\t}\n\n\t\tconsole.log(`Token successfully sent. Hash: ${txHash}`);\n\n\t\treturn txHash;\n\t}\n}\n"], - "mappings": "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", - "names": ["process", "process", "config", "defineChain", "log", "config"] + "sources": ["../src/types/networkTypes.ts", "../src/utils/createViemChain.ts", "../src/utils/getEnvVar.ts", "../src/utils/log.ts", "../src/utils/formatting.ts", "../src/networks/getNetworkEnvKey.ts", "../src/utils/getTrezorDeployEnabled.ts", "../src/utils/createWalletGetter.ts", "../src/utils/ethersSignerCallContract.ts", "../src/utils/compileContracts.ts", "../src/utils/localhostViemChain.ts", "../src/utils/extractProxyAdminAddress.ts", "../src/utils/createEnvUpdater.ts", "../src/utils/getActualGasData.ts", "../src/utils/getViemClients.ts", "../src/constants/conceroNetworks.ts", "../src/utils/getGasParameters.ts", "../src/constants/config.ts", "../src/deploy/GenericDeploy.ts", "../src/tokens/TokenSender.ts"], + "sourcesContent": ["import { type NetworkType } from './ConceroNetwork';\n\nexport const networkTypes: Record = {\n\tmainnet: 'mainnet',\n\ttestnet: 'testnet',\n\tlocalhost: 'localhost',\n};\n", "import { defineChain } from 'viem';\n\nimport { type ChainDefinition } from '../types';\n\nexport function createViemChain(\n\tchainDefinition: ChainDefinition\n): ReturnType {\n\treturn defineChain({\n\t\tid: chainDefinition.id,\n\t\tname: chainDefinition.name,\n\t\tnativeCurrency: {\n\t\t\tdecimals: 18,\n\t\t\tname: 'eth',\n\t\t\tsymbol: 'eth',\n\t\t},\n\t\trpcUrls: {\n\t\t\tdefault: { http: chainDefinition.rpcUrls },\n\t\t},\n\t\tblockExplorers: chainDefinition.blockExplorer\n\t\t\t? {\n\t\t\t\tdefault: {\n\t\t\t\t\tname: chainDefinition.blockExplorer.name,\n\t\t\t\t\turl: chainDefinition.blockExplorer.url,\n\t\t\t\t},\n\t\t\t}\n\t\t\t: undefined,\n\t\ttestnet: chainDefinition.isTestnet,\n\t});\n}\n", "import process from 'process';\nimport { Address } from 'viem';\n\nimport { warn } from './log';\nimport { shorten } from './formatting';\nimport { getNetworkEnvKey } from '../networks';\n\nexport function getEnvVar(key: string, defaultValue?: string): string {\n\tconst value = process.env[key];\n\tif (value === undefined || value === '') {\n\t\tif (defaultValue !== undefined) return defaultValue;\n\t\twarn(`Missing env variable: ${key}`, 'getEnvVar');\n\t\treturn '';\n\t}\n\n\treturn value;\n}\n\nexport interface EnvAddressConfig> {\n\tprefixes: TPrefixes;\n}\n\nexport function createEnvAddressGetter>(\n\tconfig: EnvAddressConfig,\n) {\n\tfunction getEnvAddress(\n\t\tprefix: keyof TPrefixes,\n\t\tnetworkName?: string,\n\t): [Address, string] {\n\t\tconst searchKey = networkName\n\t\t\t? `${config.prefixes[prefix]}_${getNetworkEnvKey(networkName)}`\n\t\t\t: config.prefixes[prefix];\n\n\t\tconst value = getEnvVar(searchKey) as Address;\n\t\tconst friendlyName = `${String(prefix)}(${shorten(value)})`\n\n\t\treturn [value, friendlyName];\n\t}\n\n\treturn { getEnvAddress };\n}\n", "const networkColors: Record = {\n\tethereum: '\\x1b[30m', // grey\n\tarbitrum: '\\x1b[34m', // blue\n\tpolygon: '\\x1b[35m', // magenta\n\tavalanche: '\\x1b[31m', // red\n\tbase: '\\x1b[36m', // cyan\n\tethereumSepolia: '\\x1b[30m', // grey\n\tarbitrumSepolia: '\\x1b[34m', // blue\n\toptimismSepolia: '\\x1b[31m', // red\n\tpolygonAmoy: '\\x1b[35m', // magenta\n\tavalancheFuji: '\\x1b[31m', // red\n\tbaseSepolia: '\\x1b[36m', // cyan\n\thardhat: '\\x1b[32m', // green\n\tlocalhost: '\\x1b[32m', // green\n};\nconst reset = '\\x1b[0m';\n\nexport function log(message: any, functionName: string, networkName?: string) {\n\tconst greenFill = '\\x1b[32m';\n\tconst network = networkName ? `\\x1b[35m[${networkName}]${reset}` : '';\n\n\tconsole.log(`${network}${greenFill}[${functionName}]${reset}`, message);\n}\n\nexport function warn(message: any, functionName: string) {\n\tconst yellowFill = '\\x1b[33m';\n\n\tconsole.log(`${yellowFill}[${functionName}]${reset}`, message);\n}\n\nexport function err(message: any, functionName: string, networkName?: string) {\n\tconst redFill = '\\x1b[31m';\n\tconst network = networkName\n\t\t? `${networkColors[networkName]}[${networkName}]${reset}`\n\t\t: '';\n\n\tconsole.log(\n\t\t`${network}${redFill}[${functionName}] ERROR:${reset}`,\n\t\tmessage\n\t);\n}\n\nexport default log;\n", "import { type Address } from \"viem\";\n\nexport function shorten(address: Address) {\n\treturn `${address.slice(0, 6)}...${address.slice(-4)}`;\n}\n\nexport function formatGas(gasAmountWei: bigint) {\n\t// splits gas number with commas like so: 1,000,000\n\treturn gasAmountWei.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n}\n", "/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkEnvKey(networkName: string): string {\n if (!networkName) {\n throw new Error('Network name must be provided');\n }\n return camelCaseToCapsSnakeCase(networkName);\n}\n\n/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkKey(NETWORK_NAME: string): string {\n if (!NETWORK_NAME) {\n throw new Error('Network name must be provided');\n }\n return capsSnakeCaseToCamelCase(NETWORK_NAME);\n}\n\n/**\n * Converts a string from CAPS_SNAKE_CASE to camelCase\n *\n * @param snakeCaseString The string in CAPS_SNAKE_CASE format\n * @returns The string converted to camelCase format\n */\nexport function capsSnakeCaseToCamelCase(snakeCaseString: string): string {\n if (!snakeCaseString) {\n throw new Error('String must be provided');\n }\n\n return snakeCaseString\n .toLowerCase()\n .replace(/_([a-z])/g, (_, char) => char.toUpperCase());\n}\n\n/**\n * Converts a string from camelCase to CAPS_SNAKE_CASE\n *\n * @param camelCaseString The string in camelCase format\n * @returns The string converted to CAPS_SNAKE_CASE format\n */\nexport function camelCaseToCapsSnakeCase(camelCaseString: string): string {\n if (!camelCaseString) {\n throw new Error('String must be provided');\n }\n\n return camelCaseString.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toUpperCase();\n}\n\nexport function getNetworkName(networkEnvKey: string): string {\n if (!networkEnvKey) {\n throw new Error('Network name must be provided');\n }\n\n return networkEnvKey\n .toLowerCase()\n .split('_')\n .map((word, index) =>\n index === 0 ? word : word[0].toUpperCase() + word.slice(1)\n )\n .join('');\n}\n", "import { getEnvVar } from './getEnvVar';\n\nexport const getTrezorDeployEnabled = () =>\n\tgetEnvVar('TREZOR_DEPLOY_ENABLED', 'false') === 'true';\n", "import { type NetworkType } from '../types';\nimport { warn } from './log';\n\nexport interface BaseAccountTypePrefixes extends Record {\n\tproxyDeployer: 'PROXY_DEPLOYER';\n\tdeployer: 'DEPLOYER';\n}\n\nexport const baseAccountTypePrefixes: BaseAccountTypePrefixes = {\n\tproxyDeployer: 'PROXY_DEPLOYER',\n\tdeployer: 'DEPLOYER'\n};\n\nexport interface WalletGetterConfig> {\n\taccountTypePrefixes: TPrefixes;\n}\n\nexport function createWalletGetter>(\n\tconfig: WalletGetterConfig,\n) {\n\tfunction getWallet(\n\t\tchainType: NetworkType,\n\t\taccountType: keyof TPrefixes,\n\t\twalletType: 'privateKey' | 'address',\n\t) {\n\t\tconst prefix = config.accountTypePrefixes[accountType];\n\t\tif (!prefix) {\n\t\t\tthrow new Error(`Unknown account type: ${String(accountType)}`);\n\t\t}\n\n\t\tconst walletKey = walletType === 'privateKey' ? 'PRIVATE_KEY' : 'ADDRESS';\n\t\tconst envKey = `${chainType.toUpperCase()}_${prefix}_${walletKey}`;\n\t\tconst walletValue = process.env[envKey];\n\n\t\tif (!walletValue) {\n\t\t\twarn(`Missing env variable: ${envKey}`, 'getWallet');\n\t\t}\n\n\t\treturn walletValue;\n\t}\n\n\treturn { getWallet };\n}\n\nexport const { getWallet } = createWalletGetter({\n\taccountTypePrefixes: baseAccountTypePrefixes,\n});\n", "import { HardhatRuntimeEnvironment } from \"hardhat/types\";\nimport { Address, Hash } from \"viem\";\n\nimport { log } from \"./log\";\n\nexport const ethersSignerCallContract = async (\n\thre: HardhatRuntimeEnvironment,\n\tcontract: Address,\n\tabi: any[],\n\tfunctionName: string,\n\t...functionArgs: any[]\n) => {\n\tconst [ethersSigner] = await hre.ethers.getSigners();\n\tconst ethersContract = new hre.ethers.Contract(contract, abi, ethersSigner);\n\tconst unsignedTx = await ethersContract[functionName].populateTransaction(...functionArgs);\n\n\tlog(\n\t\t`Size: ${(unsignedTx.data.length - 2) / 2}, Input data: ${unsignedTx.data}, Address: ${unsignedTx.to}`,\n\t\tfunctionName,\n\t\thre.network.name,\n\t);\n\n\treturn (await ethersSigner.sendTransaction(unsignedTx)).hash as Hash;\n};\n", "/*\nhardhat compile\n --concurrency Number of compilation jobs executed in parallel. Defaults to the number of CPU cores - 1 (default: 9)\n --force Force compilation ignoring cache\n --no-size-contracts Don't size contracts after running this task, even if runOnCompile option is enabled\n --no-typechain Skip Typechain compilation\n --quiet Makes the compilation process less verbose\n */\nimport { execSync } from \"child_process\";\n\ninterface HardhatCompileParams {\n\tconcurrency?: number;\n\tforce?: boolean;\n\tnoSizeContracts?: boolean;\n\tnoTypechain?: boolean;\n\tquiet?: boolean;\n}\n\nexport function compileContracts({ quiet = true, force = false }: HardhatCompileParams) {\n\tconst packageManager = process.env[\"PACKAGE_MANAGER\"] || \"yarn\";\n\tconst command = `${packageManager} compile`;\n\tconst args = [];\n\t// if (concurrency) args.push(`--concurrency ${concurrency}`);\n\t// if (noSizeContracts) args.push(\"--no-size-contracts\");\n\t// if (noTypechain) args.push(\"--no-typechain\");\n\tif (quiet) args.push(\"--quiet\");\n\tif (force) args.push(\"--force\");\n\texecSync(`${command} ${args.join(\" \")}`, { stdio: \"inherit\" });\n}\n", "import { defineChain } from \"viem\";\n\nexport const localhostViemChain = defineChain({\n\tid: Number(process.env.LOCALHOST_FORK_CHAIN_ID),\n\tname: \"localhost\",\n\tnativeCurrency: {\n\t\tdecimals: 18,\n\t\tname: \"eth\",\n\t\tsymbol: \"eth\",\n\t},\n\trpcUrls: {\n\t\tdefault: { http: [process.env.LOCALHOST_RPC_URL ?? \"http://127.0.0.1:8545\"] },\n\t},\n\ttestnet: true,\n});\n\nexport const hardhatViemChain = defineChain({\n\tid: Number(process.env.HARDHAT_CHAIN_ID),\n\tname: \"hardhat\",\n\tnativeCurrency: {\n\t\tdecimals: 18,\n\t\tname: \"eth\",\n\t\tsymbol: \"eth\",\n\t},\n\trpcUrls: {\n\t\tdefault: { http: [process.env.HARDHAT_RPC_URL ?? \"http://127.0.0.1:8545\"] },\n\t},\n\ttestnet: true,\n});\n", "import { ethers } from 'ethers';\n\nexport function extractProxyAdminAddress(receipt: ethers.TransactionReceipt | null): string {\n\tif (!receipt) return ethers.ZeroAddress;\n\n\tconst adminChangedTopic = ethers.id(\"AdminChanged(address,address)\");\n\tconst adminChangedLog = receipt.logs.find((log: ethers.Log) => log.topics[0] === adminChangedTopic);\n\n\tif (!adminChangedLog) return ethers.ZeroAddress;\n\n\ttry {\n\t\tconst abiCoder = ethers.AbiCoder.defaultAbiCoder();\n\t\tconst [, newAdmin] = abiCoder.decode(['address', 'address'], adminChangedLog.data);\n\t\treturn newAdmin;\n\t} catch {\n\t\treturn ethers.ZeroAddress;\n\t}\n}", "import { existsSync, readFileSync, writeFileSync } from \"fs\";\nimport path from \"path\";\nimport { getNetworkEnvKey } from \"../networks/getNetworkEnvKey\";\nimport log from \"./log\";\n\nexport interface EnvUpdaterConfig> {\n\tprefixes: TPrefixes;\n\tbasePath: string;\n}\n\nexport function createEnvUpdater<\n\tTPrefixes extends Record,\n\tTEnvFileName extends string,\n>(config: EnvUpdaterConfig) {\n\tfunction updateEnvVariable(\n\t\tkey: string,\n\t\tnewValue: string,\n\t\tenvFileName: TEnvFileName,\n\t): void {\n\t\tconst filePath = path.join(config.basePath, `.env.${envFileName}`);\n\n\t\tif (!existsSync(filePath)) {\n\t\t\tthrow new Error(`File not found: ${filePath}`);\n\t\t}\n\n\t\tconst envContents = readFileSync(filePath, \"utf8\");\n\t\tlet lines = envContents.split(/\\r?\\n/);\n\n\t\tconst keyExists = lines.some(line => line.startsWith(`${key}=`));\n\n\t\tif (!keyExists) {\n\t\t\tlog(\n\t\t\t\t`Key ${key} not found in .env file. Adding to ${filePath}`,\n\t\t\t\t\"updateEnvVariable\",\n\t\t\t);\n\t\t\tlines.push(`${key}=${newValue}`);\n\t\t} else {\n\t\t\tlines = lines.map(line => {\n\t\t\t\tconst [currentKey] = line.split(\"=\");\n\t\t\t\tif (currentKey === key) {\n\t\t\t\t\treturn `${key}=${newValue}`;\n\t\t\t\t}\n\t\t\t\treturn line;\n\t\t\t});\n\t\t}\n\n\t\twriteFileSync(filePath, lines.join(\"\\n\"));\n\t\tprocess.env[key] = newValue;\n\t}\n\n\tfunction updateEnvAddress(\n\t\tprefix: keyof TPrefixes,\n\t\tnewValue: string,\n\t\tenvFileName: TEnvFileName,\n\t\tnetworkPostfix?: string,\n\t): void {\n\t\tconst searchKey = networkPostfix\n\t\t\t? `${config.prefixes[prefix]}_${getNetworkEnvKey(networkPostfix)}`\n\t\t\t: String(config.prefixes[prefix]);\n\n\t\tupdateEnvVariable(searchKey, newValue, envFileName);\n\t}\n\n\treturn { updateEnvVariable, updateEnvAddress };\n}\n", "import { PublicClient } from 'viem';\n\ntype GasData = {\n\tgasPrice?: string;\n\tmaxFeePerGas?: string;\n\tmaxPriorityFeePerGas?: string;\n};\n\nexport async function getActualGasData(\n\tpublicClient: PublicClient\n): Promise {\n\tconst block = await publicClient.getBlock();\n\n\tconst isEIP1559 = !!block.baseFeePerGas;\n\n\tlet gasPrice = 0n;\n\tlet maxPriorityFeePerGas = 0n;\n\ttry {\n\t\tif (isEIP1559) {\n\t\t\tconst { maxFeePerGas } = await publicClient.estimateFeesPerGas();\n\t\t\tgasPrice = maxFeePerGas;\n\t\t\tmaxPriorityFeePerGas =\n\t\t\t\tawait publicClient.estimateMaxPriorityFeePerGas();\n\t\t} else {\n\t\t\tgasPrice = await publicClient.getGasPrice();\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('Error getting actual gas data:', error);\n\t\treturn {\n\t\t\tgasPrice: '0',\n\t\t\tmaxFeePerGas: '0',\n\t\t\tmaxPriorityFeePerGas: '0',\n\t\t};\n\t}\n\n\tconst gasDataLegacy = {\n\t\tgasPrice: gasPrice.toString(),\n\t};\n\n\tconst gasDataEIP1559 = {\n\t\tmaxFeePerGas: gasPrice.toString(),\n\t\tmaxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n\t};\n\n\tconst gasData: GasData = isEIP1559 ? gasDataEIP1559 : gasDataLegacy;\n\n\treturn gasData;\n}\n", "import {\n\tChain,\n\ttype TestClient,\n\ttype PublicClient,\n\ttype WalletClient,\n\tcreatePublicClient,\n\tcreateTestClient,\n\tcreateWalletClient,\n\tfallback,\n\thttp,\n\tpublicActions,\n\twalletActions,\n\tnonceManager,\n} from \"viem\";\nimport { privateKeyToAccount, type PrivateKeyAccount } from \"viem/accounts\";\n\nimport { type ConceroNetwork, type NetworkType } from \"../types\";\nimport { getWallet, type BaseAccountTypePrefixes } from \"../utils\";\nimport { localhostViemChain } from \"./localhostViemChain\";\nimport { conceroNetworks } from \"../constants/conceroNetworks\";\n\nfunction getClients(\n\tviemChain: Chain,\n\turl: string | undefined,\n\taccount: PrivateKeyAccount = privateKeyToAccount(\n\t\t`0x${process.env.TESTNET_DEPLOYER_PRIVATE_KEY}`,\n\t),\n): {\n\twalletClient: WalletClient;\n\tpublicClient: PublicClient;\n\taccount: PrivateKeyAccount;\n} {\n\tconst publicClient = createPublicClient({ transport: http(url), chain: viemChain });\n\tconst walletClient = createWalletClient({ transport: http(url), chain: viemChain, account });\n\n\treturn { walletClient, publicClient, account };\n}\n\nexport type ExtendedTestClient = TestClient & WalletClient & PublicClient;\n\nfunction getTestClient(account: PrivateKeyAccount): ExtendedTestClient {\n\tconst testClient = createTestClient({\n\t\tchain: localhostViemChain,\n\t\tmode: \"hardhat\",\n\t\ttransport: http(),\n\t\taccount,\n\t})\n\t\t.extend(publicActions)\n\t\t.extend(walletActions);\n\n\treturn testClient as unknown as ExtendedTestClient;\n}\n\nfunction getFallbackClients(\n\tchain: ConceroNetwork,\n\taccount?: PrivateKeyAccount,\n): {\n\twalletClient: WalletClient;\n\tpublicClient: PublicClient;\n\taccount: PrivateKeyAccount;\n} {\n\tif (!account) {\n\t\tswitch (chain.type) {\n\t\t\tcase \"mainnet\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.MAINNET_DEPLOYER_PRIVATE_KEY}`);\n\t\t\t\tbreak;\n\t\t\tcase \"testnet\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.TESTNET_DEPLOYER_PRIVATE_KEY}`, {\n\t\t\t\t\tnonceManager: nonceManager,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"localhost\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.LOCALHOST_DEPLOYER_PRIVATE_KEY}`);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unsupported chain type: ${chain.type}`);\n\t\t}\n\t}\n\n\tconst { viemChain, name } = chain;\n\n\tif (!conceroNetworks[name].rpcUrls.length) {\n\t\tthrow new Error(`No URLs configured for chain: ${name}`);\n\t}\n\n\tconst transport = fallback(\n\t\tconceroNetworks[name].rpcUrls.map(url =>\n\t\t\thttp(url, {\n\t\t\t\ttimeout: 10000,\n\t\t\t\tretryCount: 1,\n\t\t\t\tretryDelay: 250,\n\t\t\t\tonFetchResponse: async response => {\n\t\t\t\t\tif (response.status >= 400) {\n\t\t\t\t\t\tthrow new Error(`HTTP error: ${response.status} ${response.statusText}`);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t}),\n\t\t),\n\t);\n\tconst publicClient = createPublicClient({ transport, chain: viemChain });\n\tconst walletClient = createWalletClient({ transport, chain: viemChain, account });\n\n\treturn { walletClient, publicClient, account };\n}\n\nfunction getViemAccount(\n\tchainType: NetworkType,\n\taccountType: keyof BaseAccountTypePrefixes,\n) {\n\tconst privateKey = `0x${getWallet(chainType, accountType, \"privateKey\")}`;\n\n\treturn privateKeyToAccount(privateKey as `0x${string}`, {\n\t\tnonceManager: nonceManager,\n\t});\n}\n\nexport interface ViemAccountGetterConfig> {\n\taccountTypePrefixes: TPrefixes;\n\tgetWallet: (chainType: NetworkType, accountType: keyof TPrefixes, walletType: 'privateKey' | 'address') => string | undefined;\n}\n\nexport function createViemAccountGetter>(\n\tconfig: ViemAccountGetterConfig,\n) {\n\tfunction getViemAccount(\n\t\tchainType: NetworkType,\n\t\taccountType: keyof TPrefixes,\n\t) {\n\t\tconst privateKey = `0x${config.getWallet(chainType, accountType, \"privateKey\")}`;\n\n\t\treturn privateKeyToAccount(privateKey as `0x${string}`, {\n\t\t\tnonceManager: nonceManager,\n\t\t});\n\t}\n\n\treturn { getViemAccount };\n}\n\nexport { getClients, getFallbackClients, getTestClient, getViemAccount };\n", "import mainnetChains from '@concero/concero-networks/output/chains.mainnet.json';\nimport testnetChains from '@concero/concero-networks/output/chains.testnet.json';\nimport type { Chain } from '@concero/concero-networks/src/types';\n\nimport {\n\ttype NetworkType,\n\ttype ChainDefinition,\n\ttype ConceroNetwork,\n\tnetworkTypes,\n} from '../types';\nimport { getWallet } from '../utils';\nimport { createViemChain } from '../utils/createViemChain';\nimport { getTrezorDeployEnabled } from '../utils/getTrezorDeployEnabled';\n\nconst mainnetProxyDeployerPK = getWallet(\n\t'mainnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\nconst testnetProxyDeployerPK = getWallet(\n\t'testnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\n\nconst mainnetDeployerPK = getWallet('mainnet', 'deployer', 'privateKey');\nconst testnetDeployerPK = getWallet('testnet', 'deployer', 'privateKey');\n\nconst trezorDeployEnabled = getTrezorDeployEnabled();\n\nconst testnetAccounts = [testnetDeployerPK, testnetProxyDeployerPK];\n\nexport type ConceroMainnetNetworkNames =\n\t(typeof mainnetChains)[keyof typeof mainnetChains]['name'];\nexport type ConceroTestnetNetworkNames =\n\t(typeof testnetChains)[keyof typeof testnetChains]['name'];\n\nfunction createExtendedNetworks>(\n\tchains: T,\n\tnetworkType: NetworkType,\n\taccounts: (string | undefined)[]\n): Record {\n\tconst validAccounts = accounts.filter((acc): acc is string => !!acc);\n\n\treturn Object.fromEntries(\n\t\tObject.values(chains).map(chain => {\n\t\t\tconst chainDefinition: ChainDefinition = {\n\t\t\t\tid: parseInt(chain.id),\n\t\t\t\tname: chain.name,\n\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\tisTestnet: chain.isTestnet ?? false,\n\t\t\t\t...(chain.blockExplorers?.[0] && {\n\t\t\t\t\tblockExplorer: {\n\t\t\t\t\t\tname: chain.blockExplorers[0].name,\n\t\t\t\t\t\turl: chain.blockExplorers[0].url,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t};\n\n\t\t\tconst viemChain = createViemChain(chainDefinition);\n\n\t\t\treturn [\n\t\t\t\tchain.name,\n\t\t\t\t{\n\t\t\t\t\tname: chain.name,\n\t\t\t\t\tchainId: parseInt(chain.id),\n\t\t\t\t\ttype: networkType,\n\t\t\t\t\turl: chain.rpcUrls[0] || '',\n\t\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\t\tsaveDeployments: false,\n\t\t\t\t\t...(!trezorDeployEnabled && { accounts: validAccounts }),\n\t\t\t\t\tchainSelector: BigInt(chain.chainSelector),\n\t\t\t\t\tconfirmations: 1,\n\t\t\t\t\tviemChain,\n\t\t\t\t\t...(trezorDeployEnabled && {\n\t\t\t\t\t\ttrezorDerivationPaths: [\n\t\t\t\t\t\t\t[44, 60, 0, 0, 0],\n\t\t\t\t\t\t\t[44, 60, 0, 0, 1],\n\t\t\t\t\t\t],\n\t\t\t\t\t\ttrezorInsecureDerivation: true,\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t];\n\t\t})\n\t) as Record;\n}\n\nexport const testnetNetworks = createExtendedNetworks(\n\ttestnetChains as unknown as Record,\n\tnetworkTypes.testnet,\n\ttestnetAccounts\n);\n\nexport const mainnetNetworks = createExtendedNetworks(\n\tmainnetChains as unknown as Record,\n\tnetworkTypes.mainnet,\n\t[mainnetDeployerPK, mainnetProxyDeployerPK]\n);\n\nexport const conceroNetworks: Record = {\n\t...testnetNetworks,\n\t...mainnetNetworks,\n};\n", "import { type PublicClient } from \"viem\";\n\nimport { ConceroNetwork } from \"../types/ConceroNetwork\";\nimport { getFallbackClients } from \"./getViemClients\";\n\ninterface GasParameters {\n\tmaxFeePerGas: bigint;\n\tmaxPriorityFeePerGas: bigint;\n}\n\n// Network-specific minimum gas parameters (in wei)\nconst NETWORK_MINIMUMS = {\n\tpolygon: {\n\t\tminTipCap: BigInt(30_000_000_000), // 30 gwei\n\t\tminBaseFee: BigInt(30_000_000_000), // 30 gwei\n\t},\n\t// Add other networks as needed\n} as const;\n\n/**\n * Gets optimized gas parameters for priority transaction processing\n * @param chain - The network configuration\n * @param priorityMultiplier - Multiplier for maxPriorityFeePerGas (default: 2)\n * @param maxFeeMultiplier - Multiplier for maxFeePerGas buffer (default: 2)\n * @returns GasParameters object containing maxFeePerGas and maxPriorityFeePerGas\n */\nexport async function getGasParameters(\n\tchain: ConceroNetwork,\n\tpriorityMultiplier = 1,\n\tmaxFeeMultiplier = 1,\n): Promise {\n\tconst { publicClient } = getFallbackClients(chain);\n\n\ttry {\n\t\t// Get latest block to calculate gas parameters\n\t\tconst block = await publicClient.getBlock();\n\t\tconst baseFee = block.baseFeePerGas ?? BigInt(0);\n\n\t\t// Get network-specific minimums\n\t\tconst networkMinimums = getNetworkMinimums(chain);\n\n\t\t// Calculate priority fee with buffer for faster inclusion\n\t\tconst suggestedPriorityFee = await getSuggestedPriorityFee(publicClient, chain);\n\t\tconst calculatedPriorityFee = calculatePriorityFee(\n\t\t\tsuggestedPriorityFee,\n\t\t\tpriorityMultiplier,\n\t\t);\n\n\t\t// Ensure priority fee meets network minimum\n\t\tconst priorityFee =\n\t\t\tcalculatedPriorityFee > networkMinimums.minTipCap\n\t\t\t\t? calculatedPriorityFee\n\t\t\t\t: networkMinimums.minTipCap;\n\n\t\t// Calculate max fee ensuring it meets network minimums\n\t\tconst calculatedMaxFee = calculateMaxFee(baseFee, priorityFee, maxFeeMultiplier);\n\t\tconst minRequiredMaxFee = networkMinimums.minBaseFee + priorityFee;\n\t\tconst maxFeePerGas =\n\t\t\tcalculatedMaxFee > minRequiredMaxFee ? calculatedMaxFee : minRequiredMaxFee;\n\n\t\treturn {\n\t\t\tmaxFeePerGas,\n\t\t\tmaxPriorityFeePerGas: priorityFee,\n\t\t};\n\t} catch (error) {\n\t\t// Fallback with network minimums\n\t\tconst networkMinimums = getNetworkMinimums(chain);\n\t\tconst gasPrice = await publicClient.getGasPrice();\n\t\tconst priorityFee = networkMinimums.minTipCap;\n\n\t\treturn {\n\t\t\tmaxFeePerGas:\n\t\t\t\tgasPrice > networkMinimums.minBaseFee + priorityFee\n\t\t\t\t\t? gasPrice\n\t\t\t\t\t: networkMinimums.minBaseFee + priorityFee,\n\t\t\tmaxPriorityFeePerGas: priorityFee,\n\t\t};\n\t}\n}\n\n/**\n * Gets network-specific minimum gas parameters\n */\nfunction getNetworkMinimums(chain: ConceroNetwork) {\n\t// Check if chain is Polygon (you'll need to implement this check based on your CNetwork type)\n\tconst isPolygon = chain.chainId === 137 || chain.name.toLowerCase().includes(\"polygon\");\n\n\tif (isPolygon) {\n\t\treturn NETWORK_MINIMUMS.polygon;\n\t}\n\n\t// Default minimums for other networks\n\treturn {\n\t\tminTipCap: BigInt(1_500_000_000), // 1.5 gwei\n\t\tminBaseFee: BigInt(1_000_000_000), // 1 gwei\n\t};\n}\n\n/**\n * Gets the suggested priority fee from recent blocks\n */\nasync function getSuggestedPriorityFee(\n\tpublicClient: PublicClient,\n\tchain: ConceroNetwork,\n): Promise {\n\ttry {\n\t\t// For Polygon, we want to be more aggressive with priority fees\n\t\tconst isPolygon = chain.chainId === 137 || chain.name.toLowerCase().includes(\"polygon\");\n\t\tconst blocksToAnalyze = isPolygon ? 5 : 10; // Look at fewer blocks on Polygon for more recent data\n\n\t\tconst blocks = await Promise.all(\n\t\t\tArray.from({ length: blocksToAnalyze }, (_, i) =>\n\t\t\t\tpublicClient.getBlock({ blockNumber: BigInt(-1 - i) }),\n\t\t\t),\n\t\t);\n\n\t\t// For Polygon, use 75th percentile instead of median for higher priority\n\t\tconst priorityFees = blocks\n\t\t\t.map(block => block.baseFeePerGas ?? BigInt(0))\n\t\t\t.sort((a, b) => (a < b ? -1 : 1));\n\n\t\tconst index = isPolygon\n\t\t\t? Math.floor(priorityFees.length * 0.75)\n\t\t\t: Math.floor(priorityFees.length * 0.5);\n\n\t\treturn priorityFees[index];\n\t} catch {\n\t\t// Use network-specific minimum as fallback\n\t\treturn getNetworkMinimums(chain).minTipCap;\n\t}\n}\n\n/**\n * Calculates priority fee with buffer\n */\nfunction calculatePriorityFee(basePriorityFee: bigint, multiplier: number): bigint {\n\treturn BigInt(Math.ceil(Number(basePriorityFee) * multiplier));\n}\n\n/**\n * Calculates max fee with buffer\n */\nfunction calculateMaxFee(baseFee: bigint, priorityFee: bigint, multiplier: number): bigint {\n\treturn BigInt(Math.ceil(Number(baseFee) * multiplier)) + priorityFee;\n}\n", "export const config = {\n DEFAULT_BLOCK_CONFIRMATIONS: 2,\n};\n", "import { HardhatRuntimeEnvironment } from 'hardhat/types';\n\nimport { conceroNetworks } from '../constants/conceroNetworks';\nimport { getTrezorDeployEnabled, log } from '../utils';\nimport { extractProxyAdminAddress } from '../utils/extractProxyAdminAddress';\n\nexport interface ITxParams {\n\tgasLimit: bigint;\n\tlibraries: Record;\n}\n\nexport interface IDeployResult {\n\thash: string;\n\taddress: string;\n\tchainType: string;\n\tchainName: string;\n\tproxyAdminAddress: string;\n}\n\nexport interface IGenericDeployParams {\n\thre: HardhatRuntimeEnvironment;\n\tcontractName: string;\n\ttxParams?: Partial;\n}\n\nexport const genericDeploy = async (\n\t{ hre, contractName, txParams }: IGenericDeployParams,\n\t...contractConstructorArgs: any[]\n): Promise => {\n\tconst [deployer] = await hre.ethers.getSigners();\n\tconst chain = conceroNetworks[hre.network.name];\n\n\tlog(\n\t\t`Deploy ${contractName} from address: ${await deployer.getAddress()}`,\n\t\t'contract deploy',\n\t\tchain.name\n\t);\n\n\tconst contractFactory = await hre.ethers.getContractFactory(contractName, { libraries: txParams?.libraries });\n\n\tconst deployOverrides = txParams?.gasLimit ? { gasLimit: txParams.gasLimit } : {};\n\n\tconst deployTx = contractFactory.getDeployTransaction(\n\t\t...contractConstructorArgs,\n\t\tdeployOverrides\n\t);\n\n\tconst isTrezorDeployEnabled = getTrezorDeployEnabled();\n\tif (deployTx.data && isTrezorDeployEnabled) {\n\t\tlog(\n\t\t\t`${contractName} input data: ${deployTx.data} \\n size: ${(deployTx.data.length - 2) / 2}`,\n\t\t\t'bytecode',\n\t\t\tchain.name\n\t\t);\n\t}\n\n\tconst contract = await contractFactory.deploy(...contractConstructorArgs, deployOverrides);\n\tconst receipt = await contract.deploymentTransaction()?.wait();\n\tconst deploymentAddress = await contract.getAddress();\n\n\tif (hre.tenderly) {\n\t\tawait hre.tenderly.verify({ name: contractName, address: deploymentAddress });\n\t}\n\n\tlog(\n\t\t`Deployed at: ${deploymentAddress}`,\n\t\t`deploy ${contractName}`,\n\t\tchain.name\n\t);\n\n\treturn {\n\t\thash: contract.deploymentTransaction()?.hash,\n\t\taddress: deploymentAddress,\n\t\tchainName: chain.name,\n\t\tchainType: chain.type,\n\t\tproxyAdminAddress: extractProxyAdminAddress(receipt)\n\t};\n};\n", "import {\n\tAddress,\n\terc20Abi,\n\tformatUnits,\n\tHash,\n\tparseUnits,\n\tPublicClient,\n\tWalletClient,\n} from 'viem';\n\nexport class TokenSender {\n\tprivate walletClient: WalletClient;\n\tprivate publicClient: PublicClient;\n\n\tconstructor(walletClient: WalletClient, publicClient: PublicClient) {\n\t\tthis.walletClient = walletClient;\n\t\tthis.publicClient = publicClient;\n\t}\n\n\tpublic async sendToken(\n\t\ttokenAddress: Address,\n\t\tamount: string,\n\t\trecipient: Address\n\t): Promise {\n\t\tconst [tokenDecimals, tokenSymbol, tokenBalance] = await Promise.all([\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'decimals',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'symbol',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'balanceOf',\n\t\t\t\targs: [this.walletClient.account?.address!],\n\t\t\t}),\n\t\t]);\n\n\t\tconsole.log(\n\t\t\t`Current ${tokenSymbol} balance ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t);\n\n\t\tif (parseUnits(amount, tokenDecimals) > tokenBalance) {\n\t\t\tthrow new Error(\n\t\t\t\t`Insufficient balance. Required: ${amount}, available: ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t\t);\n\t\t}\n\n\t\tconst txHash = await this.walletClient.writeContract({\n\t\t\taddress: tokenAddress,\n\t\t\tabi: erc20Abi,\n\t\t\tfunctionName: 'transfer',\n\t\t\targs: [recipient, parseUnits(amount, tokenDecimals)],\n\t\t\tchain: this.walletClient.chain,\n\t\t\taccount: this.walletClient.account!,\n\t\t});\n\n\t\tconst { status } = await this.publicClient.waitForTransactionReceipt({\n\t\t\thash: txHash,\n\t\t});\n\n\t\tif (status !== 'success') {\n\t\t\tthrow new Error(`Error sending token. Hash: ${txHash}`);\n\t\t}\n\n\t\tconsole.log(`Token successfully sent. Hash: ${txHash}`);\n\n\t\treturn txHash;\n\t}\n}\n"], + "mappings": ";AAEO,IAAM,eAAiD;AAAA,EAC7D,SAAS;AAAA,EACT,SAAS;AAAA,EACT,WAAW;AACZ;;;ACNA,SAAS,mBAAmB;AAIrB,SAAS,gBACf,iBACiC;AACjC,SAAO,YAAY;AAAA,IAClB,IAAI,gBAAgB;AAAA,IACpB,MAAM,gBAAgB;AAAA,IACtB,gBAAgB;AAAA,MACf,UAAU;AAAA,MACV,MAAM;AAAA,MACN,QAAQ;AAAA,IACT;AAAA,IACA,SAAS;AAAA,MACR,SAAS,EAAE,MAAM,gBAAgB,QAAQ;AAAA,IAC1C;AAAA,IACA,gBAAgB,gBAAgB,gBAC7B;AAAA,MACD,SAAS;AAAA,QACR,MAAM,gBAAgB,cAAc;AAAA,QACpC,KAAK,gBAAgB,cAAc;AAAA,MACpC;AAAA,IACD,IACE;AAAA,IACH,SAAS,gBAAgB;AAAA,EAC1B,CAAC;AACF;;;AC5BA,OAAOA,cAAa;;;ACApB,IAAM,gBAAwC;AAAA,EAC7C,UAAU;AAAA;AAAA,EACV,UAAU;AAAA;AAAA,EACV,SAAS;AAAA;AAAA,EACT,WAAW;AAAA;AAAA,EACX,MAAM;AAAA;AAAA,EACN,iBAAiB;AAAA;AAAA,EACjB,iBAAiB;AAAA;AAAA,EACjB,iBAAiB;AAAA;AAAA,EACjB,aAAa;AAAA;AAAA,EACb,eAAe;AAAA;AAAA,EACf,aAAa;AAAA;AAAA,EACb,SAAS;AAAA;AAAA,EACT,WAAW;AAAA;AACZ;AACA,IAAM,QAAQ;AAEP,SAAS,IAAI,SAAc,cAAsB,aAAsB;AAC7E,QAAM,YAAY;AAClB,QAAM,UAAU,cAAc,YAAY,WAAW,IAAI,KAAK,KAAK;AAEnE,UAAQ,IAAI,GAAG,OAAO,GAAG,SAAS,IAAI,YAAY,IAAI,KAAK,IAAI,OAAO;AACvE;AAEO,SAAS,KAAK,SAAc,cAAsB;AACxD,QAAM,aAAa;AAEnB,UAAQ,IAAI,GAAG,UAAU,IAAI,YAAY,IAAI,KAAK,IAAI,OAAO;AAC9D;AAEO,SAAS,IAAI,SAAc,cAAsB,aAAsB;AAC7E,QAAM,UAAU;AAChB,QAAM,UAAU,cACb,GAAG,cAAc,WAAW,CAAC,IAAI,WAAW,IAAI,KAAK,KACrD;AAEH,UAAQ;AAAA,IACP,GAAG,OAAO,GAAG,OAAO,IAAI,YAAY,WAAW,KAAK;AAAA,IACpD;AAAA,EACD;AACD;AAEA,IAAO,cAAQ;;;ACxCR,SAAS,QAAQ,SAAkB;AACzC,SAAO,GAAG,QAAQ,MAAM,GAAG,CAAC,CAAC,MAAM,QAAQ,MAAM,EAAE,CAAC;AACrD;AAEO,SAAS,UAAU,cAAsB;AAE/C,SAAO,aAAa,SAAS,EAAE,QAAQ,yBAAyB,GAAG;AACpE;;;ACHO,SAAS,iBAAiB,aAA6B;AAC5D,MAAI,CAAC,aAAa;AAChB,UAAM,IAAI,MAAM,+BAA+B;AAAA,EACjD;AACA,SAAO,yBAAyB,WAAW;AAC7C;AAQO,SAAS,cAAc,cAA8B;AAC1D,MAAI,CAAC,cAAc;AACjB,UAAM,IAAI,MAAM,+BAA+B;AAAA,EACjD;AACA,SAAO,yBAAyB,YAAY;AAC9C;AAQO,SAAS,yBAAyB,iBAAiC;AACxE,MAAI,CAAC,iBAAiB;AACpB,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAEA,SAAO,gBACJ,YAAY,EACZ,QAAQ,aAAa,CAAC,GAAG,SAAS,KAAK,YAAY,CAAC;AACzD;AAQO,SAAS,yBAAyB,iBAAiC;AACxE,MAAI,CAAC,iBAAiB;AACpB,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAEA,SAAO,gBAAgB,QAAQ,sBAAsB,OAAO,EAAE,YAAY;AAC5E;;;AH/CO,SAAS,UAAU,KAAa,cAA+B;AACrE,QAAM,QAAQC,SAAQ,IAAI,GAAG;AAC7B,MAAI,UAAU,UAAa,UAAU,IAAI;AACxC,QAAI,iBAAiB,OAAW,QAAO;AACvC,SAAK,yBAAyB,GAAG,IAAI,WAAW;AAChD,WAAO;AAAA,EACR;AAEA,SAAO;AACR;AAMO,SAAS,uBACfC,SACC;AACD,WAAS,cACR,QACA,aACoB;AACpB,UAAM,YAAY,cACf,GAAGA,QAAO,SAAS,MAAM,CAAC,IAAI,iBAAiB,WAAW,CAAC,KAC3DA,QAAO,SAAS,MAAM;AAEzB,UAAM,QAAQ,UAAU,SAAS;AACjC,UAAM,eAAe,GAAG,OAAO,MAAM,CAAC,IAAI,QAAQ,KAAK,CAAC;AAExD,WAAO,CAAC,OAAO,YAAY;AAAA,EAC5B;AAEA,SAAO,EAAE,cAAc;AACxB;;;AItCO,IAAM,yBAAyB,MACrC,UAAU,yBAAyB,OAAO,MAAM;;;ACK1C,IAAM,0BAAmD;AAAA,EAC/D,eAAe;AAAA,EACf,UAAU;AACX;AAMO,SAAS,mBACfC,SACC;AACD,WAASC,WACR,WACA,aACA,YACC;AACD,UAAM,SAASD,QAAO,oBAAoB,WAAW;AACrD,QAAI,CAAC,QAAQ;AACZ,YAAM,IAAI,MAAM,yBAAyB,OAAO,WAAW,CAAC,EAAE;AAAA,IAC/D;AAEA,UAAM,YAAY,eAAe,eAAe,gBAAgB;AAChE,UAAM,SAAS,GAAG,UAAU,YAAY,CAAC,IAAI,MAAM,IAAI,SAAS;AAChE,UAAM,cAAc,QAAQ,IAAI,MAAM;AAEtC,QAAI,CAAC,aAAa;AACjB,WAAK,yBAAyB,MAAM,IAAI,WAAW;AAAA,IACpD;AAEA,WAAO;AAAA,EACR;AAEA,SAAO,EAAE,WAAAC,WAAU;AACpB;AAEO,IAAM,EAAE,UAAU,IAAI,mBAAmB;AAAA,EAC/C,qBAAqB;AACtB,CAAC;;;ACzCM,IAAM,2BAA2B,OACvC,KACA,UACA,KACA,iBACG,iBACC;AACJ,QAAM,CAAC,YAAY,IAAI,MAAM,IAAI,OAAO,WAAW;AACnD,QAAM,iBAAiB,IAAI,IAAI,OAAO,SAAS,UAAU,KAAK,YAAY;AAC1E,QAAM,aAAa,MAAM,eAAe,YAAY,EAAE,oBAAoB,GAAG,YAAY;AAEzF;AAAA,IACC,UAAU,WAAW,KAAK,SAAS,KAAK,CAAC,iBAAiB,WAAW,IAAI,cAAc,WAAW,EAAE;AAAA,IACpG;AAAA,IACA,IAAI,QAAQ;AAAA,EACb;AAEA,UAAQ,MAAM,aAAa,gBAAgB,UAAU,GAAG;AACzD;;;ACfA,SAAS,gBAAgB;AAUlB,SAAS,iBAAiB,EAAE,QAAQ,MAAM,QAAQ,MAAM,GAAyB;AACvF,QAAM,iBAAiB,QAAQ,IAAI,iBAAiB,KAAK;AACzD,QAAM,UAAU,GAAG,cAAc;AACjC,QAAM,OAAO,CAAC;AAId,MAAI,MAAO,MAAK,KAAK,SAAS;AAC9B,MAAI,MAAO,MAAK,KAAK,SAAS;AAC9B,WAAS,GAAG,OAAO,IAAI,KAAK,KAAK,GAAG,CAAC,IAAI,EAAE,OAAO,UAAU,CAAC;AAC9D;;;AC5BA,SAAS,eAAAC,oBAAmB;AAErB,IAAM,qBAAqBA,aAAY;AAAA,EAC7C,IAAI,OAAO,QAAQ,IAAI,uBAAuB;AAAA,EAC9C,MAAM;AAAA,EACN,gBAAgB;AAAA,IACf,UAAU;AAAA,IACV,MAAM;AAAA,IACN,QAAQ;AAAA,EACT;AAAA,EACA,SAAS;AAAA,IACR,SAAS,EAAE,MAAM,CAAC,QAAQ,IAAI,qBAAqB,uBAAuB,EAAE;AAAA,EAC7E;AAAA,EACA,SAAS;AACV,CAAC;AAEM,IAAM,mBAAmBA,aAAY;AAAA,EAC3C,IAAI,OAAO,QAAQ,IAAI,gBAAgB;AAAA,EACvC,MAAM;AAAA,EACN,gBAAgB;AAAA,IACf,UAAU;AAAA,IACV,MAAM;AAAA,IACN,QAAQ;AAAA,EACT;AAAA,EACA,SAAS;AAAA,IACR,SAAS,EAAE,MAAM,CAAC,QAAQ,IAAI,mBAAmB,uBAAuB,EAAE;AAAA,EAC3E;AAAA,EACA,SAAS;AACV,CAAC;;;AC5BD,SAAS,cAAc;AAEhB,SAAS,yBAAyB,SAAmD;AAC3F,MAAI,CAAC,QAAS,QAAO,OAAO;AAE5B,QAAM,oBAAoB,OAAO,GAAG,+BAA+B;AACnE,QAAM,kBAAkB,QAAQ,KAAK,KAAK,CAACC,SAAoBA,KAAI,OAAO,CAAC,MAAM,iBAAiB;AAElG,MAAI,CAAC,gBAAiB,QAAO,OAAO;AAEpC,MAAI;AACH,UAAM,WAAW,OAAO,SAAS,gBAAgB;AACjD,UAAM,CAAC,EAAE,QAAQ,IAAI,SAAS,OAAO,CAAC,WAAW,SAAS,GAAG,gBAAgB,IAAI;AACjF,WAAO;AAAA,EACR,QAAQ;AACP,WAAO,OAAO;AAAA,EACf;AACD;;;ACjBA,SAAS,YAAY,cAAc,qBAAqB;AACxD,OAAO,UAAU;AASV,SAAS,iBAGdC,SAAqC;AACtC,WAAS,kBACR,KACA,UACA,aACO;AACP,UAAM,WAAW,KAAK,KAAKA,QAAO,UAAU,QAAQ,WAAW,EAAE;AAEjE,QAAI,CAAC,WAAW,QAAQ,GAAG;AAC1B,YAAM,IAAI,MAAM,mBAAmB,QAAQ,EAAE;AAAA,IAC9C;AAEA,UAAM,cAAc,aAAa,UAAU,MAAM;AACjD,QAAI,QAAQ,YAAY,MAAM,OAAO;AAErC,UAAM,YAAY,MAAM,KAAK,UAAQ,KAAK,WAAW,GAAG,GAAG,GAAG,CAAC;AAE/D,QAAI,CAAC,WAAW;AACf;AAAA,QACC,OAAO,GAAG,sCAAsC,QAAQ;AAAA,QACxD;AAAA,MACD;AACA,YAAM,KAAK,GAAG,GAAG,IAAI,QAAQ,EAAE;AAAA,IAChC,OAAO;AACN,cAAQ,MAAM,IAAI,UAAQ;AACzB,cAAM,CAAC,UAAU,IAAI,KAAK,MAAM,GAAG;AACnC,YAAI,eAAe,KAAK;AACvB,iBAAO,GAAG,GAAG,IAAI,QAAQ;AAAA,QAC1B;AACA,eAAO;AAAA,MACR,CAAC;AAAA,IACF;AAEA,kBAAc,UAAU,MAAM,KAAK,IAAI,CAAC;AACxC,YAAQ,IAAI,GAAG,IAAI;AAAA,EACpB;AAEA,WAAS,iBACR,QACA,UACA,aACA,gBACO;AACP,UAAM,YAAY,iBACf,GAAGA,QAAO,SAAS,MAAM,CAAC,IAAI,iBAAiB,cAAc,CAAC,KAC9D,OAAOA,QAAO,SAAS,MAAM,CAAC;AAEjC,sBAAkB,WAAW,UAAU,WAAW;AAAA,EACnD;AAEA,SAAO,EAAE,mBAAmB,iBAAiB;AAC9C;;;ACxDA,eAAsB,iBACrB,cACmB;AACnB,QAAM,QAAQ,MAAM,aAAa,SAAS;AAE1C,QAAM,YAAY,CAAC,CAAC,MAAM;AAE1B,MAAI,WAAW;AACf,MAAI,uBAAuB;AAC3B,MAAI;AACH,QAAI,WAAW;AACd,YAAM,EAAE,aAAa,IAAI,MAAM,aAAa,mBAAmB;AAC/D,iBAAW;AACX,6BACC,MAAM,aAAa,6BAA6B;AAAA,IAClD,OAAO;AACN,iBAAW,MAAM,aAAa,YAAY;AAAA,IAC3C;AAAA,EACD,SAAS,OAAO;AACf,YAAQ,MAAM,kCAAkC,KAAK;AACrD,WAAO;AAAA,MACN,UAAU;AAAA,MACV,cAAc;AAAA,MACd,sBAAsB;AAAA,IACvB;AAAA,EACD;AAEA,QAAM,gBAAgB;AAAA,IACrB,UAAU,SAAS,SAAS;AAAA,EAC7B;AAEA,QAAM,iBAAiB;AAAA,IACtB,cAAc,SAAS,SAAS;AAAA,IAChC,sBAAsB,qBAAqB,SAAS;AAAA,EACrD;AAEA,QAAM,UAAmB,YAAY,iBAAiB;AAEtD,SAAO;AACR;;;AC/CA;AAAA,EAKC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AACP,SAAS,2BAAmD;;;ACd5D,OAAO,mBAAmB;AAC1B,OAAO,mBAAmB;AAa1B,IAAM,yBAAyB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AACD;AACA,IAAM,yBAAyB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AACD;AAEA,IAAM,oBAAoB,UAAU,WAAW,YAAY,YAAY;AACvE,IAAM,oBAAoB,UAAU,WAAW,YAAY,YAAY;AAEvE,IAAM,sBAAsB,uBAAuB;AAEnD,IAAM,kBAAkB,CAAC,mBAAmB,sBAAsB;AAOlE,SAAS,uBACR,QACA,aACA,UAC6C;AAC7C,QAAM,gBAAgB,SAAS,OAAO,CAAC,QAAuB,CAAC,CAAC,GAAG;AAEnE,SAAO,OAAO;AAAA,IACb,OAAO,OAAO,MAAM,EAAE,IAAI,WAAS;AAClC,YAAM,kBAAmC;AAAA,QACxC,IAAI,SAAS,MAAM,EAAE;AAAA,QACrB,MAAM,MAAM;AAAA,QACZ,SAAS,MAAM;AAAA,QACf,WAAW,MAAM,aAAa;AAAA,QAC9B,GAAI,MAAM,iBAAiB,CAAC,KAAK;AAAA,UAChC,eAAe;AAAA,YACd,MAAM,MAAM,eAAe,CAAC,EAAE;AAAA,YAC9B,KAAK,MAAM,eAAe,CAAC,EAAE;AAAA,UAC9B;AAAA,QACD;AAAA,MACD;AAEA,YAAM,YAAY,gBAAgB,eAAe;AAEjD,aAAO;AAAA,QACN,MAAM;AAAA,QACN;AAAA,UACC,MAAM,MAAM;AAAA,UACZ,SAAS,SAAS,MAAM,EAAE;AAAA,UAC1B,MAAM;AAAA,UACN,KAAK,MAAM,QAAQ,CAAC,KAAK;AAAA,UACzB,SAAS,MAAM;AAAA,UACf,iBAAiB;AAAA,UACjB,GAAI,CAAC,uBAAuB,EAAE,UAAU,cAAc;AAAA,UACtD,eAAe,OAAO,MAAM,aAAa;AAAA,UACzC,eAAe;AAAA,UACf;AAAA,UACA,GAAI,uBAAuB;AAAA,YAC1B,uBAAuB;AAAA,cACtB,CAAC,IAAI,IAAI,GAAG,GAAG,CAAC;AAAA,cAChB,CAAC,IAAI,IAAI,GAAG,GAAG,CAAC;AAAA,YACjB;AAAA,YACA,0BAA0B;AAAA,UAC3B;AAAA,QACD;AAAA,MACD;AAAA,IACD,CAAC;AAAA,EACF;AACD;AAEO,IAAM,kBAAkB;AAAA,EAC9B;AAAA,EACA,aAAa;AAAA,EACb;AACD;AAEO,IAAM,kBAAkB;AAAA,EAC9B;AAAA,EACA,aAAa;AAAA,EACb,CAAC,mBAAmB,sBAAsB;AAC3C;AAEO,IAAM,kBAAkD;AAAA,EAC9D,GAAG;AAAA,EACH,GAAG;AACJ;;;ADjFA,SAAS,WACR,WACA,KACA,UAA6B;AAAA,EAC5B,KAAK,QAAQ,IAAI,4BAA4B;AAC9C,GAKC;AACD,QAAM,eAAe,mBAAmB,EAAE,WAAW,KAAK,GAAG,GAAG,OAAO,UAAU,CAAC;AAClF,QAAM,eAAe,mBAAmB,EAAE,WAAW,KAAK,GAAG,GAAG,OAAO,WAAW,QAAQ,CAAC;AAE3F,SAAO,EAAE,cAAc,cAAc,QAAQ;AAC9C;AAIA,SAAS,cAAc,SAAgD;AACtE,QAAM,aAAa,iBAAiB;AAAA,IACnC,OAAO;AAAA,IACP,MAAM;AAAA,IACN,WAAW,KAAK;AAAA,IAChB;AAAA,EACD,CAAC,EACC,OAAO,aAAa,EACpB,OAAO,aAAa;AAEtB,SAAO;AACR;AAEA,SAAS,mBACR,OACA,SAKC;AACD,MAAI,CAAC,SAAS;AACb,YAAQ,MAAM,MAAM;AAAA,MACnB,KAAK;AACJ,kBAAU,oBAAoB,KAAK,QAAQ,IAAI,4BAA4B,EAAE;AAC7E;AAAA,MACD,KAAK;AACJ,kBAAU,oBAAoB,KAAK,QAAQ,IAAI,4BAA4B,IAAI;AAAA,UAC9E;AAAA,QACD,CAAC;AACD;AAAA,MACD,KAAK;AACJ,kBAAU,oBAAoB,KAAK,QAAQ,IAAI,8BAA8B,EAAE;AAC/E;AAAA,MACD;AACC,cAAM,IAAI,MAAM,2BAA2B,MAAM,IAAI,EAAE;AAAA,IACzD;AAAA,EACD;AAEA,QAAM,EAAE,WAAW,KAAK,IAAI;AAE5B,MAAI,CAAC,gBAAgB,IAAI,EAAE,QAAQ,QAAQ;AAC1C,UAAM,IAAI,MAAM,iCAAiC,IAAI,EAAE;AAAA,EACxD;AAEA,QAAM,YAAY;AAAA,IACjB,gBAAgB,IAAI,EAAE,QAAQ;AAAA,MAAI,SACjC,KAAK,KAAK;AAAA,QACT,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,iBAAiB,OAAM,aAAY;AAClC,cAAI,SAAS,UAAU,KAAK;AAC3B,kBAAM,IAAI,MAAM,eAAe,SAAS,MAAM,IAAI,SAAS,UAAU,EAAE;AAAA,UACxE;AAAA,QACD;AAAA,MACD,CAAC;AAAA,IACF;AAAA,EACD;AACA,QAAM,eAAe,mBAAmB,EAAE,WAAW,OAAO,UAAU,CAAC;AACvE,QAAM,eAAe,mBAAmB,EAAE,WAAW,OAAO,WAAW,QAAQ,CAAC;AAEhF,SAAO,EAAE,cAAc,cAAc,QAAQ;AAC9C;AAEA,SAAS,eACR,WACA,aACC;AACD,QAAM,aAAa,KAAK,UAAU,WAAW,aAAa,YAAY,CAAC;AAEvE,SAAO,oBAAoB,YAA6B;AAAA,IACvD;AAAA,EACD,CAAC;AACF;AAOO,SAAS,wBACfC,SACC;AACD,WAASC,gBACR,WACA,aACC;AACD,UAAM,aAAa,KAAKD,QAAO,UAAU,WAAW,aAAa,YAAY,CAAC;AAE9E,WAAO,oBAAoB,YAA6B;AAAA,MACvD;AAAA,IACD,CAAC;AAAA,EACF;AAEA,SAAO,EAAE,gBAAAC,gBAAe;AACzB;;;AE7HA,IAAM,mBAAmB;AAAA,EACxB,SAAS;AAAA,IACR,WAAW,OAAO,IAAc;AAAA;AAAA,IAChC,YAAY,OAAO,IAAc;AAAA;AAAA,EAClC;AAAA;AAED;AASA,eAAsB,iBACrB,OACA,qBAAqB,GACrB,mBAAmB,GACM;AACzB,QAAM,EAAE,aAAa,IAAI,mBAAmB,KAAK;AAEjD,MAAI;AAEH,UAAM,QAAQ,MAAM,aAAa,SAAS;AAC1C,UAAM,UAAU,MAAM,iBAAiB,OAAO,CAAC;AAG/C,UAAM,kBAAkB,mBAAmB,KAAK;AAGhD,UAAM,uBAAuB,MAAM,wBAAwB,cAAc,KAAK;AAC9E,UAAM,wBAAwB;AAAA,MAC7B;AAAA,MACA;AAAA,IACD;AAGA,UAAM,cACL,wBAAwB,gBAAgB,YACrC,wBACA,gBAAgB;AAGpB,UAAM,mBAAmB,gBAAgB,SAAS,aAAa,gBAAgB;AAC/E,UAAM,oBAAoB,gBAAgB,aAAa;AACvD,UAAM,eACL,mBAAmB,oBAAoB,mBAAmB;AAE3D,WAAO;AAAA,MACN;AAAA,MACA,sBAAsB;AAAA,IACvB;AAAA,EACD,SAAS,OAAO;AAEf,UAAM,kBAAkB,mBAAmB,KAAK;AAChD,UAAM,WAAW,MAAM,aAAa,YAAY;AAChD,UAAM,cAAc,gBAAgB;AAEpC,WAAO;AAAA,MACN,cACC,WAAW,gBAAgB,aAAa,cACrC,WACA,gBAAgB,aAAa;AAAA,MACjC,sBAAsB;AAAA,IACvB;AAAA,EACD;AACD;AAKA,SAAS,mBAAmB,OAAuB;AAElD,QAAM,YAAY,MAAM,YAAY,OAAO,MAAM,KAAK,YAAY,EAAE,SAAS,SAAS;AAEtF,MAAI,WAAW;AACd,WAAO,iBAAiB;AAAA,EACzB;AAGA,SAAO;AAAA,IACN,WAAW,OAAO,IAAa;AAAA;AAAA,IAC/B,YAAY,OAAO,GAAa;AAAA;AAAA,EACjC;AACD;AAKA,eAAe,wBACd,cACA,OACkB;AAClB,MAAI;AAEH,UAAM,YAAY,MAAM,YAAY,OAAO,MAAM,KAAK,YAAY,EAAE,SAAS,SAAS;AACtF,UAAM,kBAAkB,YAAY,IAAI;AAExC,UAAM,SAAS,MAAM,QAAQ;AAAA,MAC5B,MAAM;AAAA,QAAK,EAAE,QAAQ,gBAAgB;AAAA,QAAG,CAAC,GAAG,MAC3C,aAAa,SAAS,EAAE,aAAa,OAAO,KAAK,CAAC,EAAE,CAAC;AAAA,MACtD;AAAA,IACD;AAGA,UAAM,eAAe,OACnB,IAAI,WAAS,MAAM,iBAAiB,OAAO,CAAC,CAAC,EAC7C,KAAK,CAAC,GAAG,MAAO,IAAI,IAAI,KAAK,CAAE;AAEjC,UAAM,QAAQ,YACX,KAAK,MAAM,aAAa,SAAS,IAAI,IACrC,KAAK,MAAM,aAAa,SAAS,GAAG;AAEvC,WAAO,aAAa,KAAK;AAAA,EAC1B,QAAQ;AAEP,WAAO,mBAAmB,KAAK,EAAE;AAAA,EAClC;AACD;AAKA,SAAS,qBAAqB,iBAAyB,YAA4B;AAClF,SAAO,OAAO,KAAK,KAAK,OAAO,eAAe,IAAI,UAAU,CAAC;AAC9D;AAKA,SAAS,gBAAgB,SAAiB,aAAqB,YAA4B;AAC1F,SAAO,OAAO,KAAK,KAAK,OAAO,OAAO,IAAI,UAAU,CAAC,IAAI;AAC1D;;;AChJO,IAAM,SAAS;AAAA,EACpB,6BAA6B;AAC/B;;;ACuBO,IAAM,gBAAgB,OAC5B,EAAE,KAAK,cAAc,SAAS,MAC3B,4BACyB;AAC5B,QAAM,CAAC,QAAQ,IAAI,MAAM,IAAI,OAAO,WAAW;AAC/C,QAAM,QAAQ,gBAAgB,IAAI,QAAQ,IAAI;AAE9C;AAAA,IACC,UAAU,YAAY,kBAAkB,MAAM,SAAS,WAAW,CAAC;AAAA,IACnE;AAAA,IACA,MAAM;AAAA,EACP;AAEA,QAAM,kBAAkB,MAAM,IAAI,OAAO,mBAAmB,cAAc,EAAE,WAAW,UAAU,UAAU,CAAC;AAE5G,QAAM,kBAAkB,UAAU,WAAW,EAAE,UAAU,SAAS,SAAS,IAAI,CAAC;AAEhF,QAAM,WAAW,gBAAgB;AAAA,IAChC,GAAG;AAAA,IACH;AAAA,EACD;AAEA,QAAM,wBAAwB,uBAAuB;AACrD,MAAI,SAAS,QAAQ,uBAAuB;AAC3C;AAAA,MACC,GAAG,YAAY,gBAAgB,SAAS,IAAI;AAAA,UAAc,SAAS,KAAK,SAAS,KAAK,CAAC;AAAA,MACvF;AAAA,MACA,MAAM;AAAA,IACP;AAAA,EACD;AAEA,QAAM,WAAW,MAAM,gBAAgB,OAAO,GAAG,yBAAyB,eAAe;AACzF,QAAM,UAAU,MAAM,SAAS,sBAAsB,GAAG,KAAK;AAC7D,QAAM,oBAAoB,MAAM,SAAS,WAAW;AAEpD,MAAI,IAAI,UAAU;AACjB,UAAM,IAAI,SAAS,OAAO,EAAE,MAAM,cAAc,SAAS,kBAAkB,CAAC;AAAA,EAC7E;AAEA;AAAA,IACC,gBAAgB,iBAAiB;AAAA,IACjC,UAAU,YAAY;AAAA,IACtB,MAAM;AAAA,EACP;AAEA,SAAO;AAAA,IACN,MAAM,SAAS,sBAAsB,GAAG;AAAA,IACxC,SAAS;AAAA,IACT,WAAW,MAAM;AAAA,IACjB,WAAW,MAAM;AAAA,IACjB,mBAAmB,yBAAyB,OAAO;AAAA,EACpD;AACD;;;AC7EA;AAAA,EAEC;AAAA,EACA;AAAA,EAEA;AAAA,OAGM;AAEA,IAAM,cAAN,MAAkB;AAAA,EAChB;AAAA,EACA;AAAA,EAER,YAAY,cAA4B,cAA4B;AACnE,SAAK,eAAe;AACpB,SAAK,eAAe;AAAA,EACrB;AAAA,EAEA,MAAa,UACZ,cACA,QACA,WACgB;AAChB,UAAM,CAAC,eAAe,aAAa,YAAY,IAAI,MAAM,QAAQ,IAAI;AAAA,MACpE,KAAK,aAAa,aAAa;AAAA,QAC9B,SAAS;AAAA,QACT,KAAK;AAAA,QACL,cAAc;AAAA,QACd,MAAM,CAAC;AAAA,MACR,CAAC;AAAA,MACD,KAAK,aAAa,aAAa;AAAA,QAC9B,SAAS;AAAA,QACT,KAAK;AAAA,QACL,cAAc;AAAA,QACd,MAAM,CAAC;AAAA,MACR,CAAC;AAAA,MACD,KAAK,aAAa,aAAa;AAAA,QAC9B,SAAS;AAAA,QACT,KAAK;AAAA,QACL,cAAc;AAAA,QACd,MAAM,CAAC,KAAK,aAAa,SAAS,OAAQ;AAAA,MAC3C,CAAC;AAAA,IACF,CAAC;AAED,YAAQ;AAAA,MACP,WAAW,WAAW,YAAY,YAAY,cAAc,aAAa,CAAC;AAAA,IAC3E;AAEA,QAAI,WAAW,QAAQ,aAAa,IAAI,cAAc;AACrD,YAAM,IAAI;AAAA,QACT,mCAAmC,MAAM,gBAAgB,YAAY,cAAc,aAAa,CAAC;AAAA,MAClG;AAAA,IACD;AAEA,UAAM,SAAS,MAAM,KAAK,aAAa,cAAc;AAAA,MACpD,SAAS;AAAA,MACT,KAAK;AAAA,MACL,cAAc;AAAA,MACd,MAAM,CAAC,WAAW,WAAW,QAAQ,aAAa,CAAC;AAAA,MACnD,OAAO,KAAK,aAAa;AAAA,MACzB,SAAS,KAAK,aAAa;AAAA,IAC5B,CAAC;AAED,UAAM,EAAE,OAAO,IAAI,MAAM,KAAK,aAAa,0BAA0B;AAAA,MACpE,MAAM;AAAA,IACP,CAAC;AAED,QAAI,WAAW,WAAW;AACzB,YAAM,IAAI,MAAM,8BAA8B,MAAM,EAAE;AAAA,IACvD;AAEA,YAAQ,IAAI,kCAAkC,MAAM,EAAE;AAEtD,WAAO;AAAA,EACR;AACD;", + "names": ["process", "process", "config", "config", "getWallet", "defineChain", "log", "config", "config", "getViemAccount"] } diff --git a/dist/types/src/utils/createWalletGetter.d.ts b/dist/types/src/utils/createWalletGetter.d.ts new file mode 100644 index 0000000..ae6dca5 --- /dev/null +++ b/dist/types/src/utils/createWalletGetter.d.ts @@ -0,0 +1,13 @@ +import { type NetworkType } from '../types'; +export interface BaseAccountTypePrefixes extends Record { + proxyDeployer: 'PROXY_DEPLOYER'; + deployer: 'DEPLOYER'; +} +export declare const baseAccountTypePrefixes: BaseAccountTypePrefixes; +export interface WalletGetterConfig> { + accountTypePrefixes: TPrefixes; +} +export declare function createWalletGetter>(config: WalletGetterConfig): { + getWallet: (chainType: NetworkType, accountType: keyof TPrefixes, walletType: "privateKey" | "address") => string | undefined; +}; +export declare const getWallet: (chainType: NetworkType, accountType: keyof BaseAccountTypePrefixes, walletType: "privateKey" | "address") => string | undefined; diff --git a/dist/types/src/utils/getViemClients.d.ts b/dist/types/src/utils/getViemClients.d.ts index eb2f376..c146688 100644 --- a/dist/types/src/utils/getViemClients.d.ts +++ b/dist/types/src/utils/getViemClients.d.ts @@ -1,6 +1,7 @@ import { Chain, type TestClient, type PublicClient, type WalletClient } from "viem"; import { type PrivateKeyAccount } from "viem/accounts"; import { type ConceroNetwork, type NetworkType } from "../types"; +import { type BaseAccountTypePrefixes } from "../utils"; declare function getClients(viemChain: Chain, url: string | undefined, account?: PrivateKeyAccount): { walletClient: WalletClient; publicClient: PublicClient; @@ -13,7 +14,7 @@ declare function getFallbackClients(chain: ConceroNetwork, account?: PrivateKeyA publicClient: PublicClient; account: PrivateKeyAccount; }; -declare function getViemAccount(chainType: NetworkType, accountType: "proxyDeployer" | "deployer"): { +declare function getViemAccount(chainType: NetworkType, accountType: keyof BaseAccountTypePrefixes): { address: import("viem").Address; nonceManager?: import("viem").NonceManager | undefined; sign: (parameters: { @@ -31,4 +32,28 @@ declare function getViemAccount(chainType: NetworkType, accountType: "proxyDeplo source: "privateKey"; type: "local"; }; +export interface ViemAccountGetterConfig> { + accountTypePrefixes: TPrefixes; + getWallet: (chainType: NetworkType, accountType: keyof TPrefixes, walletType: 'privateKey' | 'address') => string | undefined; +} +export declare function createViemAccountGetter>(config: ViemAccountGetterConfig): { + getViemAccount: (chainType: NetworkType, accountType: keyof TPrefixes) => { + address: import("viem").Address; + nonceManager?: import("viem").NonceManager | undefined; + sign: (parameters: { + hash: import("viem").Hash; + }) => Promise; + signAuthorization: (parameters: import("viem/_types/types/authorization").AuthorizationRequest) => Promise; + signMessage: ({ message }: { + message: import("viem").SignableMessage; + }) => Promise; + signTransaction: = import("viem").SerializeTransactionFn, transaction extends Parameters[0] = Parameters[0]>(transaction: transaction, options?: { + serializer?: serializer | undefined; + } | undefined) => Promise>, import("viem").Hex> extends true ? import("viem").TransactionSerialized> : import("viem").Hex>; + signTypedData: , primaryType extends keyof typedData | "EIP712Domain" = keyof typedData>(parameters: import("viem").TypedDataDefinition) => Promise; + publicKey: import("viem").Hex; + source: "privateKey"; + type: "local"; + }; +}; export { getClients, getFallbackClients, getTestClient, getViemAccount }; diff --git a/dist/types/src/utils/getWallet.d.ts b/dist/types/src/utils/getWallet.d.ts index d67fe10..9d342c2 100644 --- a/dist/types/src/utils/getWallet.d.ts +++ b/dist/types/src/utils/getWallet.d.ts @@ -1,2 +1 @@ -import { type NetworkType } from '../types'; -export declare function getWallet(chainType: NetworkType, accountType: 'proxyDeployer' | 'deployer' | 'operator', walletType: 'privateKey' | 'address'): string | undefined; +export { getWallet, createWalletGetter, baseAccountTypePrefixes, type BaseAccountTypePrefixes, type WalletGetterConfig } from './createWalletGetter'; diff --git a/dist/types/src/utils/index.d.ts b/dist/types/src/utils/index.d.ts index 45c05f9..0ae7d7e 100644 --- a/dist/types/src/utils/index.d.ts +++ b/dist/types/src/utils/index.d.ts @@ -1,7 +1,7 @@ export { createViemChain } from './createViemChain'; export { getEnvVar, createEnvAddressGetter } from './getEnvVar'; export { getTrezorDeployEnabled } from './getTrezorDeployEnabled'; -export { getWallet } from './getWallet'; +export { getWallet, createWalletGetter, baseAccountTypePrefixes, type BaseAccountTypePrefixes, type WalletGetterConfig } from './getWallet'; export { err, log, warn } from './log'; export { shorten, formatGas } from './formatting'; export { ethersSignerCallContract } from './ethersSignerCallContract'; @@ -11,4 +11,4 @@ export { extractProxyAdminAddress } from './extractProxyAdminAddress'; export { createEnvUpdater, type EnvUpdaterConfig } from './createEnvUpdater'; export { getActualGasData } from './getActualGasData'; export { getGasParameters } from './getGasParameters'; -export { getClients, getFallbackClients, getTestClient, getViemAccount, type ExtendedTestClient, } from './getViemClients'; +export { getClients, getFallbackClients, getTestClient, getViemAccount, createViemAccountGetter, type ExtendedTestClient, type ViemAccountGetterConfig, } from './getViemClients'; diff --git a/src/utils/createWalletGetter.ts b/src/utils/createWalletGetter.ts new file mode 100644 index 0000000..d0ada70 --- /dev/null +++ b/src/utils/createWalletGetter.ts @@ -0,0 +1,47 @@ +import { type NetworkType } from '../types'; +import { warn } from './log'; + +export interface BaseAccountTypePrefixes extends Record { + proxyDeployer: 'PROXY_DEPLOYER'; + deployer: 'DEPLOYER'; +} + +export const baseAccountTypePrefixes: BaseAccountTypePrefixes = { + proxyDeployer: 'PROXY_DEPLOYER', + deployer: 'DEPLOYER' +}; + +export interface WalletGetterConfig> { + accountTypePrefixes: TPrefixes; +} + +export function createWalletGetter>( + config: WalletGetterConfig, +) { + function getWallet( + chainType: NetworkType, + accountType: keyof TPrefixes, + walletType: 'privateKey' | 'address', + ) { + const prefix = config.accountTypePrefixes[accountType]; + if (!prefix) { + throw new Error(`Unknown account type: ${String(accountType)}`); + } + + const walletKey = walletType === 'privateKey' ? 'PRIVATE_KEY' : 'ADDRESS'; + const envKey = `${chainType.toUpperCase()}_${prefix}_${walletKey}`; + const walletValue = process.env[envKey]; + + if (!walletValue) { + warn(`Missing env variable: ${envKey}`, 'getWallet'); + } + + return walletValue; + } + + return { getWallet }; +} + +export const { getWallet } = createWalletGetter({ + accountTypePrefixes: baseAccountTypePrefixes, +}); diff --git a/src/utils/getViemClients.ts b/src/utils/getViemClients.ts index e8ba9f5..bf8f593 100644 --- a/src/utils/getViemClients.ts +++ b/src/utils/getViemClients.ts @@ -15,7 +15,7 @@ import { import { privateKeyToAccount, type PrivateKeyAccount } from "viem/accounts"; import { type ConceroNetwork, type NetworkType } from "../types"; -import { getWallet } from "../utils"; +import { getWallet, type BaseAccountTypePrefixes } from "../utils"; import { localhostViemChain } from "./localhostViemChain"; import { conceroNetworks } from "../constants/conceroNetworks"; @@ -105,7 +105,7 @@ function getFallbackClients( function getViemAccount( chainType: NetworkType, - accountType: "proxyDeployer" | "deployer", + accountType: keyof BaseAccountTypePrefixes, ) { const privateKey = `0x${getWallet(chainType, accountType, "privateKey")}`; @@ -114,4 +114,26 @@ function getViemAccount( }); } +export interface ViemAccountGetterConfig> { + accountTypePrefixes: TPrefixes; + getWallet: (chainType: NetworkType, accountType: keyof TPrefixes, walletType: 'privateKey' | 'address') => string | undefined; +} + +export function createViemAccountGetter>( + config: ViemAccountGetterConfig, +) { + function getViemAccount( + chainType: NetworkType, + accountType: keyof TPrefixes, + ) { + const privateKey = `0x${config.getWallet(chainType, accountType, "privateKey")}`; + + return privateKeyToAccount(privateKey as `0x${string}`, { + nonceManager: nonceManager, + }); + } + + return { getViemAccount }; +} + export { getClients, getFallbackClients, getTestClient, getViemAccount }; diff --git a/src/utils/getWallet.ts b/src/utils/getWallet.ts index b1ba21a..141dc28 100644 --- a/src/utils/getWallet.ts +++ b/src/utils/getWallet.ts @@ -1,48 +1,2 @@ -import { type NetworkType } from '../types'; -import { warn } from './log'; - -export function getWallet( - chainType: NetworkType, - accountType: - | 'proxyDeployer' - | 'deployer' - | 'operator', - walletType: 'privateKey' | 'address' -) { - let prefix; - let walletKey; - switch (accountType) { - case 'proxyDeployer': - prefix = 'PROXY_DEPLOYER'; - break; - case 'deployer': - prefix = 'DEPLOYER'; - break; - case 'operator': - prefix = 'OPERATOR'; - break; - default: - throw new Error(`Unknown account type: ${accountType}`); - } - - switch (walletType) { - case 'privateKey': - walletKey = 'PRIVATE_KEY'; - break; - case 'address': - walletKey = 'ADDRESS'; - break; - default: - throw new Error(`Unknown wallet type: ${walletType}`); - } - - // Determine the environment variable key based on the wallet type - const envKey = `${chainType.toUpperCase()}_${prefix}_${walletKey}`; - const walletValue = process.env[envKey]; - - if (!walletValue) { - warn(`Missing env variable: ${envKey}`, 'getEnvVar'); - } - - return walletValue; -} +// Re-export getWallet from createWalletGetter for backward compatibility +export { getWallet, createWalletGetter, baseAccountTypePrefixes, type BaseAccountTypePrefixes, type WalletGetterConfig } from './createWalletGetter'; diff --git a/src/utils/index.ts b/src/utils/index.ts index 9d96ab6..26f1a8f 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1,7 +1,7 @@ export { createViemChain } from './createViemChain'; export { getEnvVar, createEnvAddressGetter } from './getEnvVar'; export { getTrezorDeployEnabled } from './getTrezorDeployEnabled'; -export { getWallet } from './getWallet'; +export { getWallet, createWalletGetter, baseAccountTypePrefixes, type BaseAccountTypePrefixes, type WalletGetterConfig } from './getWallet'; export { err, log, warn } from './log'; export { shorten, formatGas } from './formatting'; export { ethersSignerCallContract } from './ethersSignerCallContract'; @@ -16,5 +16,7 @@ export { getFallbackClients, getTestClient, getViemAccount, + createViemAccountGetter, type ExtendedTestClient, + type ViemAccountGetterConfig, } from './getViemClients'; From d6b1bbad18eb6ab7a375d136426f99ac6e1ebbb2 Mon Sep 17 00:00:00 2001 From: Roman Yarlykov Date: Fri, 23 Jan 2026 11:21:51 +0500 Subject: [PATCH 5/5] refactor: genericDeploy - IDeployResult type - add try catch to tenderly verify --- dist/index.cjs.js | 13 ++++++++++--- dist/index.cjs.js.map | 4 ++-- dist/index.esm.js | 13 ++++++++++--- dist/index.esm.js.map | 4 ++-- dist/types/src/deploy/GenericDeploy.d.ts | 5 +++-- src/deploy/GenericDeploy.ts | 19 +++++++++++++------ 6 files changed, 40 insertions(+), 18 deletions(-) diff --git a/dist/index.cjs.js b/dist/index.cjs.js index 050fb8c..40bc6b2 100644 --- a/dist/index.cjs.js +++ b/dist/index.cjs.js @@ -629,7 +629,14 @@ var genericDeploy = async ({ hre, contractName, txParams }, ...contractConstruct const receipt = await contract.deploymentTransaction()?.wait(); const deploymentAddress = await contract.getAddress(); if (hre.tenderly) { - await hre.tenderly.verify({ name: contractName, address: deploymentAddress }); + try { + await hre.tenderly.verify({ + name: contractName, + address: deploymentAddress + }); + } catch (e) { + console.error(JSON.stringify(e)); + } } log( `Deployed at: ${deploymentAddress}`, @@ -637,11 +644,11 @@ var genericDeploy = async ({ hre, contractName, txParams }, ...contractConstruct chain.name ); return { - hash: contract.deploymentTransaction()?.hash, address: deploymentAddress, chainName: chain.name, chainType: chain.type, - proxyAdminAddress: extractProxyAdminAddress(receipt) + chainId: chain.chainId, + receipt }; }; diff --git a/dist/index.cjs.js.map b/dist/index.cjs.js.map index b75278c..5fbb6c5 100644 --- a/dist/index.cjs.js.map +++ b/dist/index.cjs.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../src/index.ts", "../src/types/networkTypes.ts", "../src/utils/createViemChain.ts", "../src/utils/getEnvVar.ts", "../src/utils/log.ts", "../src/utils/formatting.ts", "../src/networks/getNetworkEnvKey.ts", "../src/utils/getTrezorDeployEnabled.ts", "../src/utils/createWalletGetter.ts", "../src/utils/ethersSignerCallContract.ts", "../src/utils/compileContracts.ts", "../src/utils/localhostViemChain.ts", "../src/utils/extractProxyAdminAddress.ts", "../src/utils/createEnvUpdater.ts", "../src/utils/getActualGasData.ts", "../src/utils/getViemClients.ts", "../src/constants/conceroNetworks.ts", "../src/utils/getGasParameters.ts", "../src/constants/config.ts", "../src/deploy/GenericDeploy.ts", "../src/tokens/TokenSender.ts"], - "sourcesContent": ["// Types\nexport * from './types';\n\n// Utils\nexport * from './utils';\n\n// Networks\nexport * from './networks';\n\n// Constants\nexport { config } from './constants/config';\nexport {\n\tconceroNetworks,\n\ttestnetNetworks,\n\tmainnetNetworks,\n\ttype ConceroMainnetNetworkNames,\n\ttype ConceroTestnetNetworkNames,\n} from './constants/conceroNetworks';\n\n// Deploy\nexport { genericDeploy, type IDeployResult, type IGenericDeployParams, type ITxParams } from './deploy/GenericDeploy';\n\n// Tokens\nexport { TokenSender } from './tokens/TokenSender';\n", "import { type NetworkType } from './ConceroNetwork';\n\nexport const networkTypes: Record = {\n\tmainnet: 'mainnet',\n\ttestnet: 'testnet',\n\tlocalhost: 'localhost',\n};\n", "import { defineChain } from 'viem';\n\nimport { type ChainDefinition } from '../types';\n\nexport function createViemChain(\n\tchainDefinition: ChainDefinition\n): ReturnType {\n\treturn defineChain({\n\t\tid: chainDefinition.id,\n\t\tname: chainDefinition.name,\n\t\tnativeCurrency: {\n\t\t\tdecimals: 18,\n\t\t\tname: 'eth',\n\t\t\tsymbol: 'eth',\n\t\t},\n\t\trpcUrls: {\n\t\t\tdefault: { http: chainDefinition.rpcUrls },\n\t\t},\n\t\tblockExplorers: chainDefinition.blockExplorer\n\t\t\t? {\n\t\t\t\tdefault: {\n\t\t\t\t\tname: chainDefinition.blockExplorer.name,\n\t\t\t\t\turl: chainDefinition.blockExplorer.url,\n\t\t\t\t},\n\t\t\t}\n\t\t\t: undefined,\n\t\ttestnet: chainDefinition.isTestnet,\n\t});\n}\n", "import process from 'process';\nimport { Address } from 'viem';\n\nimport { warn } from './log';\nimport { shorten } from './formatting';\nimport { getNetworkEnvKey } from '../networks';\n\nexport function getEnvVar(key: string, defaultValue?: string): string {\n\tconst value = process.env[key];\n\tif (value === undefined || value === '') {\n\t\tif (defaultValue !== undefined) return defaultValue;\n\t\twarn(`Missing env variable: ${key}`, 'getEnvVar');\n\t\treturn '';\n\t}\n\n\treturn value;\n}\n\nexport interface EnvAddressConfig> {\n\tprefixes: TPrefixes;\n}\n\nexport function createEnvAddressGetter>(\n\tconfig: EnvAddressConfig,\n) {\n\tfunction getEnvAddress(\n\t\tprefix: keyof TPrefixes,\n\t\tnetworkName?: string,\n\t): [Address, string] {\n\t\tconst searchKey = networkName\n\t\t\t? `${config.prefixes[prefix]}_${getNetworkEnvKey(networkName)}`\n\t\t\t: config.prefixes[prefix];\n\n\t\tconst value = getEnvVar(searchKey) as Address;\n\t\tconst friendlyName = `${String(prefix)}(${shorten(value)})`\n\n\t\treturn [value, friendlyName];\n\t}\n\n\treturn { getEnvAddress };\n}\n", "const networkColors: Record = {\n\tethereum: '\\x1b[30m', // grey\n\tarbitrum: '\\x1b[34m', // blue\n\tpolygon: '\\x1b[35m', // magenta\n\tavalanche: '\\x1b[31m', // red\n\tbase: '\\x1b[36m', // cyan\n\tethereumSepolia: '\\x1b[30m', // grey\n\tarbitrumSepolia: '\\x1b[34m', // blue\n\toptimismSepolia: '\\x1b[31m', // red\n\tpolygonAmoy: '\\x1b[35m', // magenta\n\tavalancheFuji: '\\x1b[31m', // red\n\tbaseSepolia: '\\x1b[36m', // cyan\n\thardhat: '\\x1b[32m', // green\n\tlocalhost: '\\x1b[32m', // green\n};\nconst reset = '\\x1b[0m';\n\nexport function log(message: any, functionName: string, networkName?: string) {\n\tconst greenFill = '\\x1b[32m';\n\tconst network = networkName ? `\\x1b[35m[${networkName}]${reset}` : '';\n\n\tconsole.log(`${network}${greenFill}[${functionName}]${reset}`, message);\n}\n\nexport function warn(message: any, functionName: string) {\n\tconst yellowFill = '\\x1b[33m';\n\n\tconsole.log(`${yellowFill}[${functionName}]${reset}`, message);\n}\n\nexport function err(message: any, functionName: string, networkName?: string) {\n\tconst redFill = '\\x1b[31m';\n\tconst network = networkName\n\t\t? `${networkColors[networkName]}[${networkName}]${reset}`\n\t\t: '';\n\n\tconsole.log(\n\t\t`${network}${redFill}[${functionName}] ERROR:${reset}`,\n\t\tmessage\n\t);\n}\n\nexport default log;\n", "import { type Address } from \"viem\";\n\nexport function shorten(address: Address) {\n\treturn `${address.slice(0, 6)}...${address.slice(-4)}`;\n}\n\nexport function formatGas(gasAmountWei: bigint) {\n\t// splits gas number with commas like so: 1,000,000\n\treturn gasAmountWei.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n}\n", "/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkEnvKey(networkName: string): string {\n if (!networkName) {\n throw new Error('Network name must be provided');\n }\n return camelCaseToCapsSnakeCase(networkName);\n}\n\n/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkKey(NETWORK_NAME: string): string {\n if (!NETWORK_NAME) {\n throw new Error('Network name must be provided');\n }\n return capsSnakeCaseToCamelCase(NETWORK_NAME);\n}\n\n/**\n * Converts a string from CAPS_SNAKE_CASE to camelCase\n *\n * @param snakeCaseString The string in CAPS_SNAKE_CASE format\n * @returns The string converted to camelCase format\n */\nexport function capsSnakeCaseToCamelCase(snakeCaseString: string): string {\n if (!snakeCaseString) {\n throw new Error('String must be provided');\n }\n\n return snakeCaseString\n .toLowerCase()\n .replace(/_([a-z])/g, (_, char) => char.toUpperCase());\n}\n\n/**\n * Converts a string from camelCase to CAPS_SNAKE_CASE\n *\n * @param camelCaseString The string in camelCase format\n * @returns The string converted to CAPS_SNAKE_CASE format\n */\nexport function camelCaseToCapsSnakeCase(camelCaseString: string): string {\n if (!camelCaseString) {\n throw new Error('String must be provided');\n }\n\n return camelCaseString.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toUpperCase();\n}\n\nexport function getNetworkName(networkEnvKey: string): string {\n if (!networkEnvKey) {\n throw new Error('Network name must be provided');\n }\n\n return networkEnvKey\n .toLowerCase()\n .split('_')\n .map((word, index) =>\n index === 0 ? word : word[0].toUpperCase() + word.slice(1)\n )\n .join('');\n}\n", "import { getEnvVar } from './getEnvVar';\n\nexport const getTrezorDeployEnabled = () =>\n\tgetEnvVar('TREZOR_DEPLOY_ENABLED', 'false') === 'true';\n", "import { type NetworkType } from '../types';\nimport { warn } from './log';\n\nexport interface BaseAccountTypePrefixes extends Record {\n\tproxyDeployer: 'PROXY_DEPLOYER';\n\tdeployer: 'DEPLOYER';\n}\n\nexport const baseAccountTypePrefixes: BaseAccountTypePrefixes = {\n\tproxyDeployer: 'PROXY_DEPLOYER',\n\tdeployer: 'DEPLOYER'\n};\n\nexport interface WalletGetterConfig> {\n\taccountTypePrefixes: TPrefixes;\n}\n\nexport function createWalletGetter>(\n\tconfig: WalletGetterConfig,\n) {\n\tfunction getWallet(\n\t\tchainType: NetworkType,\n\t\taccountType: keyof TPrefixes,\n\t\twalletType: 'privateKey' | 'address',\n\t) {\n\t\tconst prefix = config.accountTypePrefixes[accountType];\n\t\tif (!prefix) {\n\t\t\tthrow new Error(`Unknown account type: ${String(accountType)}`);\n\t\t}\n\n\t\tconst walletKey = walletType === 'privateKey' ? 'PRIVATE_KEY' : 'ADDRESS';\n\t\tconst envKey = `${chainType.toUpperCase()}_${prefix}_${walletKey}`;\n\t\tconst walletValue = process.env[envKey];\n\n\t\tif (!walletValue) {\n\t\t\twarn(`Missing env variable: ${envKey}`, 'getWallet');\n\t\t}\n\n\t\treturn walletValue;\n\t}\n\n\treturn { getWallet };\n}\n\nexport const { getWallet } = createWalletGetter({\n\taccountTypePrefixes: baseAccountTypePrefixes,\n});\n", "import { HardhatRuntimeEnvironment } from \"hardhat/types\";\nimport { Address, Hash } from \"viem\";\n\nimport { log } from \"./log\";\n\nexport const ethersSignerCallContract = async (\n\thre: HardhatRuntimeEnvironment,\n\tcontract: Address,\n\tabi: any[],\n\tfunctionName: string,\n\t...functionArgs: any[]\n) => {\n\tconst [ethersSigner] = await hre.ethers.getSigners();\n\tconst ethersContract = new hre.ethers.Contract(contract, abi, ethersSigner);\n\tconst unsignedTx = await ethersContract[functionName].populateTransaction(...functionArgs);\n\n\tlog(\n\t\t`Size: ${(unsignedTx.data.length - 2) / 2}, Input data: ${unsignedTx.data}, Address: ${unsignedTx.to}`,\n\t\tfunctionName,\n\t\thre.network.name,\n\t);\n\n\treturn (await ethersSigner.sendTransaction(unsignedTx)).hash as Hash;\n};\n", "/*\nhardhat compile\n --concurrency Number of compilation jobs executed in parallel. Defaults to the number of CPU cores - 1 (default: 9)\n --force Force compilation ignoring cache\n --no-size-contracts Don't size contracts after running this task, even if runOnCompile option is enabled\n --no-typechain Skip Typechain compilation\n --quiet Makes the compilation process less verbose\n */\nimport { execSync } from \"child_process\";\n\ninterface HardhatCompileParams {\n\tconcurrency?: number;\n\tforce?: boolean;\n\tnoSizeContracts?: boolean;\n\tnoTypechain?: boolean;\n\tquiet?: boolean;\n}\n\nexport function compileContracts({ quiet = true, force = false }: HardhatCompileParams) {\n\tconst packageManager = process.env[\"PACKAGE_MANAGER\"] || \"yarn\";\n\tconst command = `${packageManager} compile`;\n\tconst args = [];\n\t// if (concurrency) args.push(`--concurrency ${concurrency}`);\n\t// if (noSizeContracts) args.push(\"--no-size-contracts\");\n\t// if (noTypechain) args.push(\"--no-typechain\");\n\tif (quiet) args.push(\"--quiet\");\n\tif (force) args.push(\"--force\");\n\texecSync(`${command} ${args.join(\" \")}`, { stdio: \"inherit\" });\n}\n", "import { defineChain } from \"viem\";\n\nexport const localhostViemChain = defineChain({\n\tid: Number(process.env.LOCALHOST_FORK_CHAIN_ID),\n\tname: \"localhost\",\n\tnativeCurrency: {\n\t\tdecimals: 18,\n\t\tname: \"eth\",\n\t\tsymbol: \"eth\",\n\t},\n\trpcUrls: {\n\t\tdefault: { http: [process.env.LOCALHOST_RPC_URL ?? \"http://127.0.0.1:8545\"] },\n\t},\n\ttestnet: true,\n});\n\nexport const hardhatViemChain = defineChain({\n\tid: Number(process.env.HARDHAT_CHAIN_ID),\n\tname: \"hardhat\",\n\tnativeCurrency: {\n\t\tdecimals: 18,\n\t\tname: \"eth\",\n\t\tsymbol: \"eth\",\n\t},\n\trpcUrls: {\n\t\tdefault: { http: [process.env.HARDHAT_RPC_URL ?? \"http://127.0.0.1:8545\"] },\n\t},\n\ttestnet: true,\n});\n", "import { ethers } from 'ethers';\n\nexport function extractProxyAdminAddress(receipt: ethers.TransactionReceipt | null): string {\n\tif (!receipt) return ethers.ZeroAddress;\n\n\tconst adminChangedTopic = ethers.id(\"AdminChanged(address,address)\");\n\tconst adminChangedLog = receipt.logs.find((log: ethers.Log) => log.topics[0] === adminChangedTopic);\n\n\tif (!adminChangedLog) return ethers.ZeroAddress;\n\n\ttry {\n\t\tconst abiCoder = ethers.AbiCoder.defaultAbiCoder();\n\t\tconst [, newAdmin] = abiCoder.decode(['address', 'address'], adminChangedLog.data);\n\t\treturn newAdmin;\n\t} catch {\n\t\treturn ethers.ZeroAddress;\n\t}\n}", "import { existsSync, readFileSync, writeFileSync } from \"fs\";\nimport path from \"path\";\nimport { getNetworkEnvKey } from \"../networks/getNetworkEnvKey\";\nimport log from \"./log\";\n\nexport interface EnvUpdaterConfig> {\n\tprefixes: TPrefixes;\n\tbasePath: string;\n}\n\nexport function createEnvUpdater<\n\tTPrefixes extends Record,\n\tTEnvFileName extends string,\n>(config: EnvUpdaterConfig) {\n\tfunction updateEnvVariable(\n\t\tkey: string,\n\t\tnewValue: string,\n\t\tenvFileName: TEnvFileName,\n\t): void {\n\t\tconst filePath = path.join(config.basePath, `.env.${envFileName}`);\n\n\t\tif (!existsSync(filePath)) {\n\t\t\tthrow new Error(`File not found: ${filePath}`);\n\t\t}\n\n\t\tconst envContents = readFileSync(filePath, \"utf8\");\n\t\tlet lines = envContents.split(/\\r?\\n/);\n\n\t\tconst keyExists = lines.some(line => line.startsWith(`${key}=`));\n\n\t\tif (!keyExists) {\n\t\t\tlog(\n\t\t\t\t`Key ${key} not found in .env file. Adding to ${filePath}`,\n\t\t\t\t\"updateEnvVariable\",\n\t\t\t);\n\t\t\tlines.push(`${key}=${newValue}`);\n\t\t} else {\n\t\t\tlines = lines.map(line => {\n\t\t\t\tconst [currentKey] = line.split(\"=\");\n\t\t\t\tif (currentKey === key) {\n\t\t\t\t\treturn `${key}=${newValue}`;\n\t\t\t\t}\n\t\t\t\treturn line;\n\t\t\t});\n\t\t}\n\n\t\twriteFileSync(filePath, lines.join(\"\\n\"));\n\t\tprocess.env[key] = newValue;\n\t}\n\n\tfunction updateEnvAddress(\n\t\tprefix: keyof TPrefixes,\n\t\tnewValue: string,\n\t\tenvFileName: TEnvFileName,\n\t\tnetworkPostfix?: string,\n\t): void {\n\t\tconst searchKey = networkPostfix\n\t\t\t? `${config.prefixes[prefix]}_${getNetworkEnvKey(networkPostfix)}`\n\t\t\t: String(config.prefixes[prefix]);\n\n\t\tupdateEnvVariable(searchKey, newValue, envFileName);\n\t}\n\n\treturn { updateEnvVariable, updateEnvAddress };\n}\n", "import { PublicClient } from 'viem';\n\ntype GasData = {\n\tgasPrice?: string;\n\tmaxFeePerGas?: string;\n\tmaxPriorityFeePerGas?: string;\n};\n\nexport async function getActualGasData(\n\tpublicClient: PublicClient\n): Promise {\n\tconst block = await publicClient.getBlock();\n\n\tconst isEIP1559 = !!block.baseFeePerGas;\n\n\tlet gasPrice = 0n;\n\tlet maxPriorityFeePerGas = 0n;\n\ttry {\n\t\tif (isEIP1559) {\n\t\t\tconst { maxFeePerGas } = await publicClient.estimateFeesPerGas();\n\t\t\tgasPrice = maxFeePerGas;\n\t\t\tmaxPriorityFeePerGas =\n\t\t\t\tawait publicClient.estimateMaxPriorityFeePerGas();\n\t\t} else {\n\t\t\tgasPrice = await publicClient.getGasPrice();\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('Error getting actual gas data:', error);\n\t\treturn {\n\t\t\tgasPrice: '0',\n\t\t\tmaxFeePerGas: '0',\n\t\t\tmaxPriorityFeePerGas: '0',\n\t\t};\n\t}\n\n\tconst gasDataLegacy = {\n\t\tgasPrice: gasPrice.toString(),\n\t};\n\n\tconst gasDataEIP1559 = {\n\t\tmaxFeePerGas: gasPrice.toString(),\n\t\tmaxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n\t};\n\n\tconst gasData: GasData = isEIP1559 ? gasDataEIP1559 : gasDataLegacy;\n\n\treturn gasData;\n}\n", "import {\n\tChain,\n\ttype TestClient,\n\ttype PublicClient,\n\ttype WalletClient,\n\tcreatePublicClient,\n\tcreateTestClient,\n\tcreateWalletClient,\n\tfallback,\n\thttp,\n\tpublicActions,\n\twalletActions,\n\tnonceManager,\n} from \"viem\";\nimport { privateKeyToAccount, type PrivateKeyAccount } from \"viem/accounts\";\n\nimport { type ConceroNetwork, type NetworkType } from \"../types\";\nimport { getWallet, type BaseAccountTypePrefixes } from \"../utils\";\nimport { localhostViemChain } from \"./localhostViemChain\";\nimport { conceroNetworks } from \"../constants/conceroNetworks\";\n\nfunction getClients(\n\tviemChain: Chain,\n\turl: string | undefined,\n\taccount: PrivateKeyAccount = privateKeyToAccount(\n\t\t`0x${process.env.TESTNET_DEPLOYER_PRIVATE_KEY}`,\n\t),\n): {\n\twalletClient: WalletClient;\n\tpublicClient: PublicClient;\n\taccount: PrivateKeyAccount;\n} {\n\tconst publicClient = createPublicClient({ transport: http(url), chain: viemChain });\n\tconst walletClient = createWalletClient({ transport: http(url), chain: viemChain, account });\n\n\treturn { walletClient, publicClient, account };\n}\n\nexport type ExtendedTestClient = TestClient & WalletClient & PublicClient;\n\nfunction getTestClient(account: PrivateKeyAccount): ExtendedTestClient {\n\tconst testClient = createTestClient({\n\t\tchain: localhostViemChain,\n\t\tmode: \"hardhat\",\n\t\ttransport: http(),\n\t\taccount,\n\t})\n\t\t.extend(publicActions)\n\t\t.extend(walletActions);\n\n\treturn testClient as unknown as ExtendedTestClient;\n}\n\nfunction getFallbackClients(\n\tchain: ConceroNetwork,\n\taccount?: PrivateKeyAccount,\n): {\n\twalletClient: WalletClient;\n\tpublicClient: PublicClient;\n\taccount: PrivateKeyAccount;\n} {\n\tif (!account) {\n\t\tswitch (chain.type) {\n\t\t\tcase \"mainnet\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.MAINNET_DEPLOYER_PRIVATE_KEY}`);\n\t\t\t\tbreak;\n\t\t\tcase \"testnet\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.TESTNET_DEPLOYER_PRIVATE_KEY}`, {\n\t\t\t\t\tnonceManager: nonceManager,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"localhost\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.LOCALHOST_DEPLOYER_PRIVATE_KEY}`);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unsupported chain type: ${chain.type}`);\n\t\t}\n\t}\n\n\tconst { viemChain, name } = chain;\n\n\tif (!conceroNetworks[name].rpcUrls.length) {\n\t\tthrow new Error(`No URLs configured for chain: ${name}`);\n\t}\n\n\tconst transport = fallback(\n\t\tconceroNetworks[name].rpcUrls.map(url =>\n\t\t\thttp(url, {\n\t\t\t\ttimeout: 10000,\n\t\t\t\tretryCount: 1,\n\t\t\t\tretryDelay: 250,\n\t\t\t\tonFetchResponse: async response => {\n\t\t\t\t\tif (response.status >= 400) {\n\t\t\t\t\t\tthrow new Error(`HTTP error: ${response.status} ${response.statusText}`);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t}),\n\t\t),\n\t);\n\tconst publicClient = createPublicClient({ transport, chain: viemChain });\n\tconst walletClient = createWalletClient({ transport, chain: viemChain, account });\n\n\treturn { walletClient, publicClient, account };\n}\n\nfunction getViemAccount(\n\tchainType: NetworkType,\n\taccountType: keyof BaseAccountTypePrefixes,\n) {\n\tconst privateKey = `0x${getWallet(chainType, accountType, \"privateKey\")}`;\n\n\treturn privateKeyToAccount(privateKey as `0x${string}`, {\n\t\tnonceManager: nonceManager,\n\t});\n}\n\nexport interface ViemAccountGetterConfig> {\n\taccountTypePrefixes: TPrefixes;\n\tgetWallet: (chainType: NetworkType, accountType: keyof TPrefixes, walletType: 'privateKey' | 'address') => string | undefined;\n}\n\nexport function createViemAccountGetter>(\n\tconfig: ViemAccountGetterConfig,\n) {\n\tfunction getViemAccount(\n\t\tchainType: NetworkType,\n\t\taccountType: keyof TPrefixes,\n\t) {\n\t\tconst privateKey = `0x${config.getWallet(chainType, accountType, \"privateKey\")}`;\n\n\t\treturn privateKeyToAccount(privateKey as `0x${string}`, {\n\t\t\tnonceManager: nonceManager,\n\t\t});\n\t}\n\n\treturn { getViemAccount };\n}\n\nexport { getClients, getFallbackClients, getTestClient, getViemAccount };\n", "import mainnetChains from '@concero/concero-networks/output/chains.mainnet.json';\nimport testnetChains from '@concero/concero-networks/output/chains.testnet.json';\nimport type { Chain } from '@concero/concero-networks/src/types';\n\nimport {\n\ttype NetworkType,\n\ttype ChainDefinition,\n\ttype ConceroNetwork,\n\tnetworkTypes,\n} from '../types';\nimport { getWallet } from '../utils';\nimport { createViemChain } from '../utils/createViemChain';\nimport { getTrezorDeployEnabled } from '../utils/getTrezorDeployEnabled';\n\nconst mainnetProxyDeployerPK = getWallet(\n\t'mainnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\nconst testnetProxyDeployerPK = getWallet(\n\t'testnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\n\nconst mainnetDeployerPK = getWallet('mainnet', 'deployer', 'privateKey');\nconst testnetDeployerPK = getWallet('testnet', 'deployer', 'privateKey');\n\nconst trezorDeployEnabled = getTrezorDeployEnabled();\n\nconst testnetAccounts = [testnetDeployerPK, testnetProxyDeployerPK];\n\nexport type ConceroMainnetNetworkNames =\n\t(typeof mainnetChains)[keyof typeof mainnetChains]['name'];\nexport type ConceroTestnetNetworkNames =\n\t(typeof testnetChains)[keyof typeof testnetChains]['name'];\n\nfunction createExtendedNetworks>(\n\tchains: T,\n\tnetworkType: NetworkType,\n\taccounts: (string | undefined)[]\n): Record {\n\tconst validAccounts = accounts.filter((acc): acc is string => !!acc);\n\n\treturn Object.fromEntries(\n\t\tObject.values(chains).map(chain => {\n\t\t\tconst chainDefinition: ChainDefinition = {\n\t\t\t\tid: parseInt(chain.id),\n\t\t\t\tname: chain.name,\n\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\tisTestnet: chain.isTestnet ?? false,\n\t\t\t\t...(chain.blockExplorers?.[0] && {\n\t\t\t\t\tblockExplorer: {\n\t\t\t\t\t\tname: chain.blockExplorers[0].name,\n\t\t\t\t\t\turl: chain.blockExplorers[0].url,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t};\n\n\t\t\tconst viemChain = createViemChain(chainDefinition);\n\n\t\t\treturn [\n\t\t\t\tchain.name,\n\t\t\t\t{\n\t\t\t\t\tname: chain.name,\n\t\t\t\t\tchainId: parseInt(chain.id),\n\t\t\t\t\ttype: networkType,\n\t\t\t\t\turl: chain.rpcUrls[0] || '',\n\t\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\t\tsaveDeployments: false,\n\t\t\t\t\t...(!trezorDeployEnabled && { accounts: validAccounts }),\n\t\t\t\t\tchainSelector: BigInt(chain.chainSelector),\n\t\t\t\t\tconfirmations: 1,\n\t\t\t\t\tviemChain,\n\t\t\t\t\t...(trezorDeployEnabled && {\n\t\t\t\t\t\ttrezorDerivationPaths: [\n\t\t\t\t\t\t\t[44, 60, 0, 0, 0],\n\t\t\t\t\t\t\t[44, 60, 0, 0, 1],\n\t\t\t\t\t\t],\n\t\t\t\t\t\ttrezorInsecureDerivation: true,\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t];\n\t\t})\n\t) as Record;\n}\n\nexport const testnetNetworks = createExtendedNetworks(\n\ttestnetChains as unknown as Record,\n\tnetworkTypes.testnet,\n\ttestnetAccounts\n);\n\nexport const mainnetNetworks = createExtendedNetworks(\n\tmainnetChains as unknown as Record,\n\tnetworkTypes.mainnet,\n\t[mainnetDeployerPK, mainnetProxyDeployerPK]\n);\n\nexport const conceroNetworks: Record = {\n\t...testnetNetworks,\n\t...mainnetNetworks,\n};\n", "import { type PublicClient } from \"viem\";\n\nimport { ConceroNetwork } from \"../types/ConceroNetwork\";\nimport { getFallbackClients } from \"./getViemClients\";\n\ninterface GasParameters {\n\tmaxFeePerGas: bigint;\n\tmaxPriorityFeePerGas: bigint;\n}\n\n// Network-specific minimum gas parameters (in wei)\nconst NETWORK_MINIMUMS = {\n\tpolygon: {\n\t\tminTipCap: BigInt(30_000_000_000), // 30 gwei\n\t\tminBaseFee: BigInt(30_000_000_000), // 30 gwei\n\t},\n\t// Add other networks as needed\n} as const;\n\n/**\n * Gets optimized gas parameters for priority transaction processing\n * @param chain - The network configuration\n * @param priorityMultiplier - Multiplier for maxPriorityFeePerGas (default: 2)\n * @param maxFeeMultiplier - Multiplier for maxFeePerGas buffer (default: 2)\n * @returns GasParameters object containing maxFeePerGas and maxPriorityFeePerGas\n */\nexport async function getGasParameters(\n\tchain: ConceroNetwork,\n\tpriorityMultiplier = 1,\n\tmaxFeeMultiplier = 1,\n): Promise {\n\tconst { publicClient } = getFallbackClients(chain);\n\n\ttry {\n\t\t// Get latest block to calculate gas parameters\n\t\tconst block = await publicClient.getBlock();\n\t\tconst baseFee = block.baseFeePerGas ?? BigInt(0);\n\n\t\t// Get network-specific minimums\n\t\tconst networkMinimums = getNetworkMinimums(chain);\n\n\t\t// Calculate priority fee with buffer for faster inclusion\n\t\tconst suggestedPriorityFee = await getSuggestedPriorityFee(publicClient, chain);\n\t\tconst calculatedPriorityFee = calculatePriorityFee(\n\t\t\tsuggestedPriorityFee,\n\t\t\tpriorityMultiplier,\n\t\t);\n\n\t\t// Ensure priority fee meets network minimum\n\t\tconst priorityFee =\n\t\t\tcalculatedPriorityFee > networkMinimums.minTipCap\n\t\t\t\t? calculatedPriorityFee\n\t\t\t\t: networkMinimums.minTipCap;\n\n\t\t// Calculate max fee ensuring it meets network minimums\n\t\tconst calculatedMaxFee = calculateMaxFee(baseFee, priorityFee, maxFeeMultiplier);\n\t\tconst minRequiredMaxFee = networkMinimums.minBaseFee + priorityFee;\n\t\tconst maxFeePerGas =\n\t\t\tcalculatedMaxFee > minRequiredMaxFee ? calculatedMaxFee : minRequiredMaxFee;\n\n\t\treturn {\n\t\t\tmaxFeePerGas,\n\t\t\tmaxPriorityFeePerGas: priorityFee,\n\t\t};\n\t} catch (error) {\n\t\t// Fallback with network minimums\n\t\tconst networkMinimums = getNetworkMinimums(chain);\n\t\tconst gasPrice = await publicClient.getGasPrice();\n\t\tconst priorityFee = networkMinimums.minTipCap;\n\n\t\treturn {\n\t\t\tmaxFeePerGas:\n\t\t\t\tgasPrice > networkMinimums.minBaseFee + priorityFee\n\t\t\t\t\t? gasPrice\n\t\t\t\t\t: networkMinimums.minBaseFee + priorityFee,\n\t\t\tmaxPriorityFeePerGas: priorityFee,\n\t\t};\n\t}\n}\n\n/**\n * Gets network-specific minimum gas parameters\n */\nfunction getNetworkMinimums(chain: ConceroNetwork) {\n\t// Check if chain is Polygon (you'll need to implement this check based on your CNetwork type)\n\tconst isPolygon = chain.chainId === 137 || chain.name.toLowerCase().includes(\"polygon\");\n\n\tif (isPolygon) {\n\t\treturn NETWORK_MINIMUMS.polygon;\n\t}\n\n\t// Default minimums for other networks\n\treturn {\n\t\tminTipCap: BigInt(1_500_000_000), // 1.5 gwei\n\t\tminBaseFee: BigInt(1_000_000_000), // 1 gwei\n\t};\n}\n\n/**\n * Gets the suggested priority fee from recent blocks\n */\nasync function getSuggestedPriorityFee(\n\tpublicClient: PublicClient,\n\tchain: ConceroNetwork,\n): Promise {\n\ttry {\n\t\t// For Polygon, we want to be more aggressive with priority fees\n\t\tconst isPolygon = chain.chainId === 137 || chain.name.toLowerCase().includes(\"polygon\");\n\t\tconst blocksToAnalyze = isPolygon ? 5 : 10; // Look at fewer blocks on Polygon for more recent data\n\n\t\tconst blocks = await Promise.all(\n\t\t\tArray.from({ length: blocksToAnalyze }, (_, i) =>\n\t\t\t\tpublicClient.getBlock({ blockNumber: BigInt(-1 - i) }),\n\t\t\t),\n\t\t);\n\n\t\t// For Polygon, use 75th percentile instead of median for higher priority\n\t\tconst priorityFees = blocks\n\t\t\t.map(block => block.baseFeePerGas ?? BigInt(0))\n\t\t\t.sort((a, b) => (a < b ? -1 : 1));\n\n\t\tconst index = isPolygon\n\t\t\t? Math.floor(priorityFees.length * 0.75)\n\t\t\t: Math.floor(priorityFees.length * 0.5);\n\n\t\treturn priorityFees[index];\n\t} catch {\n\t\t// Use network-specific minimum as fallback\n\t\treturn getNetworkMinimums(chain).minTipCap;\n\t}\n}\n\n/**\n * Calculates priority fee with buffer\n */\nfunction calculatePriorityFee(basePriorityFee: bigint, multiplier: number): bigint {\n\treturn BigInt(Math.ceil(Number(basePriorityFee) * multiplier));\n}\n\n/**\n * Calculates max fee with buffer\n */\nfunction calculateMaxFee(baseFee: bigint, priorityFee: bigint, multiplier: number): bigint {\n\treturn BigInt(Math.ceil(Number(baseFee) * multiplier)) + priorityFee;\n}\n", "export const config = {\n DEFAULT_BLOCK_CONFIRMATIONS: 2,\n};\n", "import { HardhatRuntimeEnvironment } from 'hardhat/types';\n\nimport { conceroNetworks } from '../constants/conceroNetworks';\nimport { getTrezorDeployEnabled, log } from '../utils';\nimport { extractProxyAdminAddress } from '../utils/extractProxyAdminAddress';\n\nexport interface ITxParams {\n\tgasLimit: bigint;\n\tlibraries: Record;\n}\n\nexport interface IDeployResult {\n\thash: string;\n\taddress: string;\n\tchainType: string;\n\tchainName: string;\n\tproxyAdminAddress: string;\n}\n\nexport interface IGenericDeployParams {\n\thre: HardhatRuntimeEnvironment;\n\tcontractName: string;\n\ttxParams?: Partial;\n}\n\nexport const genericDeploy = async (\n\t{ hre, contractName, txParams }: IGenericDeployParams,\n\t...contractConstructorArgs: any[]\n): Promise => {\n\tconst [deployer] = await hre.ethers.getSigners();\n\tconst chain = conceroNetworks[hre.network.name];\n\n\tlog(\n\t\t`Deploy ${contractName} from address: ${await deployer.getAddress()}`,\n\t\t'contract deploy',\n\t\tchain.name\n\t);\n\n\tconst contractFactory = await hre.ethers.getContractFactory(contractName, { libraries: txParams?.libraries });\n\n\tconst deployOverrides = txParams?.gasLimit ? { gasLimit: txParams.gasLimit } : {};\n\n\tconst deployTx = contractFactory.getDeployTransaction(\n\t\t...contractConstructorArgs,\n\t\tdeployOverrides\n\t);\n\n\tconst isTrezorDeployEnabled = getTrezorDeployEnabled();\n\tif (deployTx.data && isTrezorDeployEnabled) {\n\t\tlog(\n\t\t\t`${contractName} input data: ${deployTx.data} \\n size: ${(deployTx.data.length - 2) / 2}`,\n\t\t\t'bytecode',\n\t\t\tchain.name\n\t\t);\n\t}\n\n\tconst contract = await contractFactory.deploy(...contractConstructorArgs, deployOverrides);\n\tconst receipt = await contract.deploymentTransaction()?.wait();\n\tconst deploymentAddress = await contract.getAddress();\n\n\tif (hre.tenderly) {\n\t\tawait hre.tenderly.verify({ name: contractName, address: deploymentAddress });\n\t}\n\n\tlog(\n\t\t`Deployed at: ${deploymentAddress}`,\n\t\t`deploy ${contractName}`,\n\t\tchain.name\n\t);\n\n\treturn {\n\t\thash: contract.deploymentTransaction()?.hash,\n\t\taddress: deploymentAddress,\n\t\tchainName: chain.name,\n\t\tchainType: chain.type,\n\t\tproxyAdminAddress: extractProxyAdminAddress(receipt)\n\t};\n};\n", "import {\n\tAddress,\n\terc20Abi,\n\tformatUnits,\n\tHash,\n\tparseUnits,\n\tPublicClient,\n\tWalletClient,\n} from 'viem';\n\nexport class TokenSender {\n\tprivate walletClient: WalletClient;\n\tprivate publicClient: PublicClient;\n\n\tconstructor(walletClient: WalletClient, publicClient: PublicClient) {\n\t\tthis.walletClient = walletClient;\n\t\tthis.publicClient = publicClient;\n\t}\n\n\tpublic async sendToken(\n\t\ttokenAddress: Address,\n\t\tamount: string,\n\t\trecipient: Address\n\t): Promise {\n\t\tconst [tokenDecimals, tokenSymbol, tokenBalance] = await Promise.all([\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'decimals',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'symbol',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'balanceOf',\n\t\t\t\targs: [this.walletClient.account?.address!],\n\t\t\t}),\n\t\t]);\n\n\t\tconsole.log(\n\t\t\t`Current ${tokenSymbol} balance ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t);\n\n\t\tif (parseUnits(amount, tokenDecimals) > tokenBalance) {\n\t\t\tthrow new Error(\n\t\t\t\t`Insufficient balance. Required: ${amount}, available: ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t\t);\n\t\t}\n\n\t\tconst txHash = await this.walletClient.writeContract({\n\t\t\taddress: tokenAddress,\n\t\t\tabi: erc20Abi,\n\t\t\tfunctionName: 'transfer',\n\t\t\targs: [recipient, parseUnits(amount, tokenDecimals)],\n\t\t\tchain: this.walletClient.chain,\n\t\t\taccount: this.walletClient.account!,\n\t\t});\n\n\t\tconst { status } = await this.publicClient.waitForTransactionReceipt({\n\t\t\thash: txHash,\n\t\t});\n\n\t\tif (status !== 'success') {\n\t\t\tthrow new Error(`Error sending token. Hash: ${txHash}`);\n\t\t}\n\n\t\tconsole.log(`Token successfully sent. Hash: ${txHash}`);\n\n\t\treturn txHash;\n\t}\n}\n"], - "mappings": "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", + "sourcesContent": ["// Types\nexport * from './types';\n\n// Utils\nexport * from './utils';\n\n// Networks\nexport * from './networks';\n\n// Constants\nexport { config } from './constants/config';\nexport {\n\tconceroNetworks,\n\ttestnetNetworks,\n\tmainnetNetworks,\n\ttype ConceroMainnetNetworkNames,\n\ttype ConceroTestnetNetworkNames,\n} from './constants/conceroNetworks';\n\n// Deploy\nexport { genericDeploy, type IDeployResult, type IGenericDeployParams, type ITxParams } from './deploy/GenericDeploy';\n\n// Tokens\nexport { TokenSender } from './tokens/TokenSender';\n", "import { type NetworkType } from './ConceroNetwork';\n\nexport const networkTypes: Record = {\n\tmainnet: 'mainnet',\n\ttestnet: 'testnet',\n\tlocalhost: 'localhost',\n};\n", "import { defineChain } from 'viem';\n\nimport { type ChainDefinition } from '../types';\n\nexport function createViemChain(\n\tchainDefinition: ChainDefinition\n): ReturnType {\n\treturn defineChain({\n\t\tid: chainDefinition.id,\n\t\tname: chainDefinition.name,\n\t\tnativeCurrency: {\n\t\t\tdecimals: 18,\n\t\t\tname: 'eth',\n\t\t\tsymbol: 'eth',\n\t\t},\n\t\trpcUrls: {\n\t\t\tdefault: { http: chainDefinition.rpcUrls },\n\t\t},\n\t\tblockExplorers: chainDefinition.blockExplorer\n\t\t\t? {\n\t\t\t\tdefault: {\n\t\t\t\t\tname: chainDefinition.blockExplorer.name,\n\t\t\t\t\turl: chainDefinition.blockExplorer.url,\n\t\t\t\t},\n\t\t\t}\n\t\t\t: undefined,\n\t\ttestnet: chainDefinition.isTestnet,\n\t});\n}\n", "import process from 'process';\nimport { Address } from 'viem';\n\nimport { warn } from './log';\nimport { shorten } from './formatting';\nimport { getNetworkEnvKey } from '../networks';\n\nexport function getEnvVar(key: string, defaultValue?: string): string {\n\tconst value = process.env[key];\n\tif (value === undefined || value === '') {\n\t\tif (defaultValue !== undefined) return defaultValue;\n\t\twarn(`Missing env variable: ${key}`, 'getEnvVar');\n\t\treturn '';\n\t}\n\n\treturn value;\n}\n\nexport interface EnvAddressConfig> {\n\tprefixes: TPrefixes;\n}\n\nexport function createEnvAddressGetter>(\n\tconfig: EnvAddressConfig,\n) {\n\tfunction getEnvAddress(\n\t\tprefix: keyof TPrefixes,\n\t\tnetworkName?: string,\n\t): [Address, string] {\n\t\tconst searchKey = networkName\n\t\t\t? `${config.prefixes[prefix]}_${getNetworkEnvKey(networkName)}`\n\t\t\t: config.prefixes[prefix];\n\n\t\tconst value = getEnvVar(searchKey) as Address;\n\t\tconst friendlyName = `${String(prefix)}(${shorten(value)})`\n\n\t\treturn [value, friendlyName];\n\t}\n\n\treturn { getEnvAddress };\n}\n", "const networkColors: Record = {\n\tethereum: '\\x1b[30m', // grey\n\tarbitrum: '\\x1b[34m', // blue\n\tpolygon: '\\x1b[35m', // magenta\n\tavalanche: '\\x1b[31m', // red\n\tbase: '\\x1b[36m', // cyan\n\tethereumSepolia: '\\x1b[30m', // grey\n\tarbitrumSepolia: '\\x1b[34m', // blue\n\toptimismSepolia: '\\x1b[31m', // red\n\tpolygonAmoy: '\\x1b[35m', // magenta\n\tavalancheFuji: '\\x1b[31m', // red\n\tbaseSepolia: '\\x1b[36m', // cyan\n\thardhat: '\\x1b[32m', // green\n\tlocalhost: '\\x1b[32m', // green\n};\nconst reset = '\\x1b[0m';\n\nexport function log(message: any, functionName: string, networkName?: string) {\n\tconst greenFill = '\\x1b[32m';\n\tconst network = networkName ? `\\x1b[35m[${networkName}]${reset}` : '';\n\n\tconsole.log(`${network}${greenFill}[${functionName}]${reset}`, message);\n}\n\nexport function warn(message: any, functionName: string) {\n\tconst yellowFill = '\\x1b[33m';\n\n\tconsole.log(`${yellowFill}[${functionName}]${reset}`, message);\n}\n\nexport function err(message: any, functionName: string, networkName?: string) {\n\tconst redFill = '\\x1b[31m';\n\tconst network = networkName\n\t\t? `${networkColors[networkName]}[${networkName}]${reset}`\n\t\t: '';\n\n\tconsole.log(\n\t\t`${network}${redFill}[${functionName}] ERROR:${reset}`,\n\t\tmessage\n\t);\n}\n\nexport default log;\n", "import { type Address } from \"viem\";\n\nexport function shorten(address: Address) {\n\treturn `${address.slice(0, 6)}...${address.slice(-4)}`;\n}\n\nexport function formatGas(gasAmountWei: bigint) {\n\t// splits gas number with commas like so: 1,000,000\n\treturn gasAmountWei.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n}\n", "/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkEnvKey(networkName: string): string {\n if (!networkName) {\n throw new Error('Network name must be provided');\n }\n return camelCaseToCapsSnakeCase(networkName);\n}\n\n/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkKey(NETWORK_NAME: string): string {\n if (!NETWORK_NAME) {\n throw new Error('Network name must be provided');\n }\n return capsSnakeCaseToCamelCase(NETWORK_NAME);\n}\n\n/**\n * Converts a string from CAPS_SNAKE_CASE to camelCase\n *\n * @param snakeCaseString The string in CAPS_SNAKE_CASE format\n * @returns The string converted to camelCase format\n */\nexport function capsSnakeCaseToCamelCase(snakeCaseString: string): string {\n if (!snakeCaseString) {\n throw new Error('String must be provided');\n }\n\n return snakeCaseString\n .toLowerCase()\n .replace(/_([a-z])/g, (_, char) => char.toUpperCase());\n}\n\n/**\n * Converts a string from camelCase to CAPS_SNAKE_CASE\n *\n * @param camelCaseString The string in camelCase format\n * @returns The string converted to CAPS_SNAKE_CASE format\n */\nexport function camelCaseToCapsSnakeCase(camelCaseString: string): string {\n if (!camelCaseString) {\n throw new Error('String must be provided');\n }\n\n return camelCaseString.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toUpperCase();\n}\n\nexport function getNetworkName(networkEnvKey: string): string {\n if (!networkEnvKey) {\n throw new Error('Network name must be provided');\n }\n\n return networkEnvKey\n .toLowerCase()\n .split('_')\n .map((word, index) =>\n index === 0 ? word : word[0].toUpperCase() + word.slice(1)\n )\n .join('');\n}\n", "import { getEnvVar } from './getEnvVar';\n\nexport const getTrezorDeployEnabled = () =>\n\tgetEnvVar('TREZOR_DEPLOY_ENABLED', 'false') === 'true';\n", "import { type NetworkType } from '../types';\nimport { warn } from './log';\n\nexport interface BaseAccountTypePrefixes extends Record {\n\tproxyDeployer: 'PROXY_DEPLOYER';\n\tdeployer: 'DEPLOYER';\n}\n\nexport const baseAccountTypePrefixes: BaseAccountTypePrefixes = {\n\tproxyDeployer: 'PROXY_DEPLOYER',\n\tdeployer: 'DEPLOYER'\n};\n\nexport interface WalletGetterConfig> {\n\taccountTypePrefixes: TPrefixes;\n}\n\nexport function createWalletGetter>(\n\tconfig: WalletGetterConfig,\n) {\n\tfunction getWallet(\n\t\tchainType: NetworkType,\n\t\taccountType: keyof TPrefixes,\n\t\twalletType: 'privateKey' | 'address',\n\t) {\n\t\tconst prefix = config.accountTypePrefixes[accountType];\n\t\tif (!prefix) {\n\t\t\tthrow new Error(`Unknown account type: ${String(accountType)}`);\n\t\t}\n\n\t\tconst walletKey = walletType === 'privateKey' ? 'PRIVATE_KEY' : 'ADDRESS';\n\t\tconst envKey = `${chainType.toUpperCase()}_${prefix}_${walletKey}`;\n\t\tconst walletValue = process.env[envKey];\n\n\t\tif (!walletValue) {\n\t\t\twarn(`Missing env variable: ${envKey}`, 'getWallet');\n\t\t}\n\n\t\treturn walletValue;\n\t}\n\n\treturn { getWallet };\n}\n\nexport const { getWallet } = createWalletGetter({\n\taccountTypePrefixes: baseAccountTypePrefixes,\n});\n", "import { HardhatRuntimeEnvironment } from \"hardhat/types\";\nimport { Address, Hash } from \"viem\";\n\nimport { log } from \"./log\";\n\nexport const ethersSignerCallContract = async (\n\thre: HardhatRuntimeEnvironment,\n\tcontract: Address,\n\tabi: any[],\n\tfunctionName: string,\n\t...functionArgs: any[]\n) => {\n\tconst [ethersSigner] = await hre.ethers.getSigners();\n\tconst ethersContract = new hre.ethers.Contract(contract, abi, ethersSigner);\n\tconst unsignedTx = await ethersContract[functionName].populateTransaction(...functionArgs);\n\n\tlog(\n\t\t`Size: ${(unsignedTx.data.length - 2) / 2}, Input data: ${unsignedTx.data}, Address: ${unsignedTx.to}`,\n\t\tfunctionName,\n\t\thre.network.name,\n\t);\n\n\treturn (await ethersSigner.sendTransaction(unsignedTx)).hash as Hash;\n};\n", "/*\nhardhat compile\n --concurrency Number of compilation jobs executed in parallel. Defaults to the number of CPU cores - 1 (default: 9)\n --force Force compilation ignoring cache\n --no-size-contracts Don't size contracts after running this task, even if runOnCompile option is enabled\n --no-typechain Skip Typechain compilation\n --quiet Makes the compilation process less verbose\n */\nimport { execSync } from \"child_process\";\n\ninterface HardhatCompileParams {\n\tconcurrency?: number;\n\tforce?: boolean;\n\tnoSizeContracts?: boolean;\n\tnoTypechain?: boolean;\n\tquiet?: boolean;\n}\n\nexport function compileContracts({ quiet = true, force = false }: HardhatCompileParams) {\n\tconst packageManager = process.env[\"PACKAGE_MANAGER\"] || \"yarn\";\n\tconst command = `${packageManager} compile`;\n\tconst args = [];\n\t// if (concurrency) args.push(`--concurrency ${concurrency}`);\n\t// if (noSizeContracts) args.push(\"--no-size-contracts\");\n\t// if (noTypechain) args.push(\"--no-typechain\");\n\tif (quiet) args.push(\"--quiet\");\n\tif (force) args.push(\"--force\");\n\texecSync(`${command} ${args.join(\" \")}`, { stdio: \"inherit\" });\n}\n", "import { defineChain } from \"viem\";\n\nexport const localhostViemChain = defineChain({\n\tid: Number(process.env.LOCALHOST_FORK_CHAIN_ID),\n\tname: \"localhost\",\n\tnativeCurrency: {\n\t\tdecimals: 18,\n\t\tname: \"eth\",\n\t\tsymbol: \"eth\",\n\t},\n\trpcUrls: {\n\t\tdefault: { http: [process.env.LOCALHOST_RPC_URL ?? \"http://127.0.0.1:8545\"] },\n\t},\n\ttestnet: true,\n});\n\nexport const hardhatViemChain = defineChain({\n\tid: Number(process.env.HARDHAT_CHAIN_ID),\n\tname: \"hardhat\",\n\tnativeCurrency: {\n\t\tdecimals: 18,\n\t\tname: \"eth\",\n\t\tsymbol: \"eth\",\n\t},\n\trpcUrls: {\n\t\tdefault: { http: [process.env.HARDHAT_RPC_URL ?? \"http://127.0.0.1:8545\"] },\n\t},\n\ttestnet: true,\n});\n", "import { ethers } from 'ethers';\n\nexport function extractProxyAdminAddress(receipt: ethers.TransactionReceipt | null): string {\n\tif (!receipt) return ethers.ZeroAddress;\n\n\tconst adminChangedTopic = ethers.id(\"AdminChanged(address,address)\");\n\tconst adminChangedLog = receipt.logs.find((log: ethers.Log) => log.topics[0] === adminChangedTopic);\n\n\tif (!adminChangedLog) return ethers.ZeroAddress;\n\n\ttry {\n\t\tconst abiCoder = ethers.AbiCoder.defaultAbiCoder();\n\t\tconst [, newAdmin] = abiCoder.decode(['address', 'address'], adminChangedLog.data);\n\t\treturn newAdmin;\n\t} catch {\n\t\treturn ethers.ZeroAddress;\n\t}\n}", "import { existsSync, readFileSync, writeFileSync } from \"fs\";\nimport path from \"path\";\nimport { getNetworkEnvKey } from \"../networks/getNetworkEnvKey\";\nimport log from \"./log\";\n\nexport interface EnvUpdaterConfig> {\n\tprefixes: TPrefixes;\n\tbasePath: string;\n}\n\nexport function createEnvUpdater<\n\tTPrefixes extends Record,\n\tTEnvFileName extends string,\n>(config: EnvUpdaterConfig) {\n\tfunction updateEnvVariable(\n\t\tkey: string,\n\t\tnewValue: string,\n\t\tenvFileName: TEnvFileName,\n\t): void {\n\t\tconst filePath = path.join(config.basePath, `.env.${envFileName}`);\n\n\t\tif (!existsSync(filePath)) {\n\t\t\tthrow new Error(`File not found: ${filePath}`);\n\t\t}\n\n\t\tconst envContents = readFileSync(filePath, \"utf8\");\n\t\tlet lines = envContents.split(/\\r?\\n/);\n\n\t\tconst keyExists = lines.some(line => line.startsWith(`${key}=`));\n\n\t\tif (!keyExists) {\n\t\t\tlog(\n\t\t\t\t`Key ${key} not found in .env file. Adding to ${filePath}`,\n\t\t\t\t\"updateEnvVariable\",\n\t\t\t);\n\t\t\tlines.push(`${key}=${newValue}`);\n\t\t} else {\n\t\t\tlines = lines.map(line => {\n\t\t\t\tconst [currentKey] = line.split(\"=\");\n\t\t\t\tif (currentKey === key) {\n\t\t\t\t\treturn `${key}=${newValue}`;\n\t\t\t\t}\n\t\t\t\treturn line;\n\t\t\t});\n\t\t}\n\n\t\twriteFileSync(filePath, lines.join(\"\\n\"));\n\t\tprocess.env[key] = newValue;\n\t}\n\n\tfunction updateEnvAddress(\n\t\tprefix: keyof TPrefixes,\n\t\tnewValue: string,\n\t\tenvFileName: TEnvFileName,\n\t\tnetworkPostfix?: string,\n\t): void {\n\t\tconst searchKey = networkPostfix\n\t\t\t? `${config.prefixes[prefix]}_${getNetworkEnvKey(networkPostfix)}`\n\t\t\t: String(config.prefixes[prefix]);\n\n\t\tupdateEnvVariable(searchKey, newValue, envFileName);\n\t}\n\n\treturn { updateEnvVariable, updateEnvAddress };\n}\n", "import { PublicClient } from 'viem';\n\ntype GasData = {\n\tgasPrice?: string;\n\tmaxFeePerGas?: string;\n\tmaxPriorityFeePerGas?: string;\n};\n\nexport async function getActualGasData(\n\tpublicClient: PublicClient\n): Promise {\n\tconst block = await publicClient.getBlock();\n\n\tconst isEIP1559 = !!block.baseFeePerGas;\n\n\tlet gasPrice = 0n;\n\tlet maxPriorityFeePerGas = 0n;\n\ttry {\n\t\tif (isEIP1559) {\n\t\t\tconst { maxFeePerGas } = await publicClient.estimateFeesPerGas();\n\t\t\tgasPrice = maxFeePerGas;\n\t\t\tmaxPriorityFeePerGas =\n\t\t\t\tawait publicClient.estimateMaxPriorityFeePerGas();\n\t\t} else {\n\t\t\tgasPrice = await publicClient.getGasPrice();\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('Error getting actual gas data:', error);\n\t\treturn {\n\t\t\tgasPrice: '0',\n\t\t\tmaxFeePerGas: '0',\n\t\t\tmaxPriorityFeePerGas: '0',\n\t\t};\n\t}\n\n\tconst gasDataLegacy = {\n\t\tgasPrice: gasPrice.toString(),\n\t};\n\n\tconst gasDataEIP1559 = {\n\t\tmaxFeePerGas: gasPrice.toString(),\n\t\tmaxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n\t};\n\n\tconst gasData: GasData = isEIP1559 ? gasDataEIP1559 : gasDataLegacy;\n\n\treturn gasData;\n}\n", "import {\n\tChain,\n\ttype TestClient,\n\ttype PublicClient,\n\ttype WalletClient,\n\tcreatePublicClient,\n\tcreateTestClient,\n\tcreateWalletClient,\n\tfallback,\n\thttp,\n\tpublicActions,\n\twalletActions,\n\tnonceManager,\n} from \"viem\";\nimport { privateKeyToAccount, type PrivateKeyAccount } from \"viem/accounts\";\n\nimport { type ConceroNetwork, type NetworkType } from \"../types\";\nimport { getWallet, type BaseAccountTypePrefixes } from \"../utils\";\nimport { localhostViemChain } from \"./localhostViemChain\";\nimport { conceroNetworks } from \"../constants/conceroNetworks\";\n\nfunction getClients(\n\tviemChain: Chain,\n\turl: string | undefined,\n\taccount: PrivateKeyAccount = privateKeyToAccount(\n\t\t`0x${process.env.TESTNET_DEPLOYER_PRIVATE_KEY}`,\n\t),\n): {\n\twalletClient: WalletClient;\n\tpublicClient: PublicClient;\n\taccount: PrivateKeyAccount;\n} {\n\tconst publicClient = createPublicClient({ transport: http(url), chain: viemChain });\n\tconst walletClient = createWalletClient({ transport: http(url), chain: viemChain, account });\n\n\treturn { walletClient, publicClient, account };\n}\n\nexport type ExtendedTestClient = TestClient & WalletClient & PublicClient;\n\nfunction getTestClient(account: PrivateKeyAccount): ExtendedTestClient {\n\tconst testClient = createTestClient({\n\t\tchain: localhostViemChain,\n\t\tmode: \"hardhat\",\n\t\ttransport: http(),\n\t\taccount,\n\t})\n\t\t.extend(publicActions)\n\t\t.extend(walletActions);\n\n\treturn testClient as unknown as ExtendedTestClient;\n}\n\nfunction getFallbackClients(\n\tchain: ConceroNetwork,\n\taccount?: PrivateKeyAccount,\n): {\n\twalletClient: WalletClient;\n\tpublicClient: PublicClient;\n\taccount: PrivateKeyAccount;\n} {\n\tif (!account) {\n\t\tswitch (chain.type) {\n\t\t\tcase \"mainnet\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.MAINNET_DEPLOYER_PRIVATE_KEY}`);\n\t\t\t\tbreak;\n\t\t\tcase \"testnet\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.TESTNET_DEPLOYER_PRIVATE_KEY}`, {\n\t\t\t\t\tnonceManager: nonceManager,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"localhost\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.LOCALHOST_DEPLOYER_PRIVATE_KEY}`);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unsupported chain type: ${chain.type}`);\n\t\t}\n\t}\n\n\tconst { viemChain, name } = chain;\n\n\tif (!conceroNetworks[name].rpcUrls.length) {\n\t\tthrow new Error(`No URLs configured for chain: ${name}`);\n\t}\n\n\tconst transport = fallback(\n\t\tconceroNetworks[name].rpcUrls.map(url =>\n\t\t\thttp(url, {\n\t\t\t\ttimeout: 10000,\n\t\t\t\tretryCount: 1,\n\t\t\t\tretryDelay: 250,\n\t\t\t\tonFetchResponse: async response => {\n\t\t\t\t\tif (response.status >= 400) {\n\t\t\t\t\t\tthrow new Error(`HTTP error: ${response.status} ${response.statusText}`);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t}),\n\t\t),\n\t);\n\tconst publicClient = createPublicClient({ transport, chain: viemChain });\n\tconst walletClient = createWalletClient({ transport, chain: viemChain, account });\n\n\treturn { walletClient, publicClient, account };\n}\n\nfunction getViemAccount(\n\tchainType: NetworkType,\n\taccountType: keyof BaseAccountTypePrefixes,\n) {\n\tconst privateKey = `0x${getWallet(chainType, accountType, \"privateKey\")}`;\n\n\treturn privateKeyToAccount(privateKey as `0x${string}`, {\n\t\tnonceManager: nonceManager,\n\t});\n}\n\nexport interface ViemAccountGetterConfig> {\n\taccountTypePrefixes: TPrefixes;\n\tgetWallet: (chainType: NetworkType, accountType: keyof TPrefixes, walletType: 'privateKey' | 'address') => string | undefined;\n}\n\nexport function createViemAccountGetter>(\n\tconfig: ViemAccountGetterConfig,\n) {\n\tfunction getViemAccount(\n\t\tchainType: NetworkType,\n\t\taccountType: keyof TPrefixes,\n\t) {\n\t\tconst privateKey = `0x${config.getWallet(chainType, accountType, \"privateKey\")}`;\n\n\t\treturn privateKeyToAccount(privateKey as `0x${string}`, {\n\t\t\tnonceManager: nonceManager,\n\t\t});\n\t}\n\n\treturn { getViemAccount };\n}\n\nexport { getClients, getFallbackClients, getTestClient, getViemAccount };\n", "import mainnetChains from '@concero/concero-networks/output/chains.mainnet.json';\nimport testnetChains from '@concero/concero-networks/output/chains.testnet.json';\nimport type { Chain } from '@concero/concero-networks/src/types';\n\nimport {\n\ttype NetworkType,\n\ttype ChainDefinition,\n\ttype ConceroNetwork,\n\tnetworkTypes,\n} from '../types';\nimport { getWallet } from '../utils';\nimport { createViemChain } from '../utils/createViemChain';\nimport { getTrezorDeployEnabled } from '../utils/getTrezorDeployEnabled';\n\nconst mainnetProxyDeployerPK = getWallet(\n\t'mainnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\nconst testnetProxyDeployerPK = getWallet(\n\t'testnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\n\nconst mainnetDeployerPK = getWallet('mainnet', 'deployer', 'privateKey');\nconst testnetDeployerPK = getWallet('testnet', 'deployer', 'privateKey');\n\nconst trezorDeployEnabled = getTrezorDeployEnabled();\n\nconst testnetAccounts = [testnetDeployerPK, testnetProxyDeployerPK];\n\nexport type ConceroMainnetNetworkNames =\n\t(typeof mainnetChains)[keyof typeof mainnetChains]['name'];\nexport type ConceroTestnetNetworkNames =\n\t(typeof testnetChains)[keyof typeof testnetChains]['name'];\n\nfunction createExtendedNetworks>(\n\tchains: T,\n\tnetworkType: NetworkType,\n\taccounts: (string | undefined)[]\n): Record {\n\tconst validAccounts = accounts.filter((acc): acc is string => !!acc);\n\n\treturn Object.fromEntries(\n\t\tObject.values(chains).map(chain => {\n\t\t\tconst chainDefinition: ChainDefinition = {\n\t\t\t\tid: parseInt(chain.id),\n\t\t\t\tname: chain.name,\n\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\tisTestnet: chain.isTestnet ?? false,\n\t\t\t\t...(chain.blockExplorers?.[0] && {\n\t\t\t\t\tblockExplorer: {\n\t\t\t\t\t\tname: chain.blockExplorers[0].name,\n\t\t\t\t\t\turl: chain.blockExplorers[0].url,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t};\n\n\t\t\tconst viemChain = createViemChain(chainDefinition);\n\n\t\t\treturn [\n\t\t\t\tchain.name,\n\t\t\t\t{\n\t\t\t\t\tname: chain.name,\n\t\t\t\t\tchainId: parseInt(chain.id),\n\t\t\t\t\ttype: networkType,\n\t\t\t\t\turl: chain.rpcUrls[0] || '',\n\t\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\t\tsaveDeployments: false,\n\t\t\t\t\t...(!trezorDeployEnabled && { accounts: validAccounts }),\n\t\t\t\t\tchainSelector: BigInt(chain.chainSelector),\n\t\t\t\t\tconfirmations: 1,\n\t\t\t\t\tviemChain,\n\t\t\t\t\t...(trezorDeployEnabled && {\n\t\t\t\t\t\ttrezorDerivationPaths: [\n\t\t\t\t\t\t\t[44, 60, 0, 0, 0],\n\t\t\t\t\t\t\t[44, 60, 0, 0, 1],\n\t\t\t\t\t\t],\n\t\t\t\t\t\ttrezorInsecureDerivation: true,\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t];\n\t\t})\n\t) as Record;\n}\n\nexport const testnetNetworks = createExtendedNetworks(\n\ttestnetChains as unknown as Record,\n\tnetworkTypes.testnet,\n\ttestnetAccounts\n);\n\nexport const mainnetNetworks = createExtendedNetworks(\n\tmainnetChains as unknown as Record,\n\tnetworkTypes.mainnet,\n\t[mainnetDeployerPK, mainnetProxyDeployerPK]\n);\n\nexport const conceroNetworks: Record = {\n\t...testnetNetworks,\n\t...mainnetNetworks,\n};\n", "import { type PublicClient } from \"viem\";\n\nimport { ConceroNetwork } from \"../types/ConceroNetwork\";\nimport { getFallbackClients } from \"./getViemClients\";\n\ninterface GasParameters {\n\tmaxFeePerGas: bigint;\n\tmaxPriorityFeePerGas: bigint;\n}\n\n// Network-specific minimum gas parameters (in wei)\nconst NETWORK_MINIMUMS = {\n\tpolygon: {\n\t\tminTipCap: BigInt(30_000_000_000), // 30 gwei\n\t\tminBaseFee: BigInt(30_000_000_000), // 30 gwei\n\t},\n\t// Add other networks as needed\n} as const;\n\n/**\n * Gets optimized gas parameters for priority transaction processing\n * @param chain - The network configuration\n * @param priorityMultiplier - Multiplier for maxPriorityFeePerGas (default: 2)\n * @param maxFeeMultiplier - Multiplier for maxFeePerGas buffer (default: 2)\n * @returns GasParameters object containing maxFeePerGas and maxPriorityFeePerGas\n */\nexport async function getGasParameters(\n\tchain: ConceroNetwork,\n\tpriorityMultiplier = 1,\n\tmaxFeeMultiplier = 1,\n): Promise {\n\tconst { publicClient } = getFallbackClients(chain);\n\n\ttry {\n\t\t// Get latest block to calculate gas parameters\n\t\tconst block = await publicClient.getBlock();\n\t\tconst baseFee = block.baseFeePerGas ?? BigInt(0);\n\n\t\t// Get network-specific minimums\n\t\tconst networkMinimums = getNetworkMinimums(chain);\n\n\t\t// Calculate priority fee with buffer for faster inclusion\n\t\tconst suggestedPriorityFee = await getSuggestedPriorityFee(publicClient, chain);\n\t\tconst calculatedPriorityFee = calculatePriorityFee(\n\t\t\tsuggestedPriorityFee,\n\t\t\tpriorityMultiplier,\n\t\t);\n\n\t\t// Ensure priority fee meets network minimum\n\t\tconst priorityFee =\n\t\t\tcalculatedPriorityFee > networkMinimums.minTipCap\n\t\t\t\t? calculatedPriorityFee\n\t\t\t\t: networkMinimums.minTipCap;\n\n\t\t// Calculate max fee ensuring it meets network minimums\n\t\tconst calculatedMaxFee = calculateMaxFee(baseFee, priorityFee, maxFeeMultiplier);\n\t\tconst minRequiredMaxFee = networkMinimums.minBaseFee + priorityFee;\n\t\tconst maxFeePerGas =\n\t\t\tcalculatedMaxFee > minRequiredMaxFee ? calculatedMaxFee : minRequiredMaxFee;\n\n\t\treturn {\n\t\t\tmaxFeePerGas,\n\t\t\tmaxPriorityFeePerGas: priorityFee,\n\t\t};\n\t} catch (error) {\n\t\t// Fallback with network minimums\n\t\tconst networkMinimums = getNetworkMinimums(chain);\n\t\tconst gasPrice = await publicClient.getGasPrice();\n\t\tconst priorityFee = networkMinimums.minTipCap;\n\n\t\treturn {\n\t\t\tmaxFeePerGas:\n\t\t\t\tgasPrice > networkMinimums.minBaseFee + priorityFee\n\t\t\t\t\t? gasPrice\n\t\t\t\t\t: networkMinimums.minBaseFee + priorityFee,\n\t\t\tmaxPriorityFeePerGas: priorityFee,\n\t\t};\n\t}\n}\n\n/**\n * Gets network-specific minimum gas parameters\n */\nfunction getNetworkMinimums(chain: ConceroNetwork) {\n\t// Check if chain is Polygon (you'll need to implement this check based on your CNetwork type)\n\tconst isPolygon = chain.chainId === 137 || chain.name.toLowerCase().includes(\"polygon\");\n\n\tif (isPolygon) {\n\t\treturn NETWORK_MINIMUMS.polygon;\n\t}\n\n\t// Default minimums for other networks\n\treturn {\n\t\tminTipCap: BigInt(1_500_000_000), // 1.5 gwei\n\t\tminBaseFee: BigInt(1_000_000_000), // 1 gwei\n\t};\n}\n\n/**\n * Gets the suggested priority fee from recent blocks\n */\nasync function getSuggestedPriorityFee(\n\tpublicClient: PublicClient,\n\tchain: ConceroNetwork,\n): Promise {\n\ttry {\n\t\t// For Polygon, we want to be more aggressive with priority fees\n\t\tconst isPolygon = chain.chainId === 137 || chain.name.toLowerCase().includes(\"polygon\");\n\t\tconst blocksToAnalyze = isPolygon ? 5 : 10; // Look at fewer blocks on Polygon for more recent data\n\n\t\tconst blocks = await Promise.all(\n\t\t\tArray.from({ length: blocksToAnalyze }, (_, i) =>\n\t\t\t\tpublicClient.getBlock({ blockNumber: BigInt(-1 - i) }),\n\t\t\t),\n\t\t);\n\n\t\t// For Polygon, use 75th percentile instead of median for higher priority\n\t\tconst priorityFees = blocks\n\t\t\t.map(block => block.baseFeePerGas ?? BigInt(0))\n\t\t\t.sort((a, b) => (a < b ? -1 : 1));\n\n\t\tconst index = isPolygon\n\t\t\t? Math.floor(priorityFees.length * 0.75)\n\t\t\t: Math.floor(priorityFees.length * 0.5);\n\n\t\treturn priorityFees[index];\n\t} catch {\n\t\t// Use network-specific minimum as fallback\n\t\treturn getNetworkMinimums(chain).minTipCap;\n\t}\n}\n\n/**\n * Calculates priority fee with buffer\n */\nfunction calculatePriorityFee(basePriorityFee: bigint, multiplier: number): bigint {\n\treturn BigInt(Math.ceil(Number(basePriorityFee) * multiplier));\n}\n\n/**\n * Calculates max fee with buffer\n */\nfunction calculateMaxFee(baseFee: bigint, priorityFee: bigint, multiplier: number): bigint {\n\treturn BigInt(Math.ceil(Number(baseFee) * multiplier)) + priorityFee;\n}\n", "export const config = {\n DEFAULT_BLOCK_CONFIRMATIONS: 2,\n};\n", "import { HardhatRuntimeEnvironment } from 'hardhat/types';\nimport { TransactionReceipt } from 'ethers';\n\nimport { conceroNetworks } from '../constants/conceroNetworks';\nimport { getTrezorDeployEnabled, log } from '../utils';\n\nexport interface ITxParams {\n\tgasLimit: bigint;\n\tlibraries: Record;\n}\n\nexport interface IDeployResult {\n\taddress: string;\n\tchainType: string;\n\tchainName: string;\n\tchainId: number;\n\treceipt: TransactionReceipt;\n}\n\nexport interface IGenericDeployParams {\n\thre: HardhatRuntimeEnvironment;\n\tcontractName: string;\n\ttxParams?: Partial;\n}\n\nexport const genericDeploy = async (\n\t{ hre, contractName, txParams }: IGenericDeployParams,\n\t...contractConstructorArgs: any[]\n): Promise => {\n\tconst [deployer] = await hre.ethers.getSigners();\n\tconst chain = conceroNetworks[hre.network.name];\n\n\tlog(\n\t\t`Deploy ${contractName} from address: ${await deployer.getAddress()}`,\n\t\t'contract deploy',\n\t\tchain.name\n\t);\n\n\tconst contractFactory = await hre.ethers.getContractFactory(contractName, { libraries: txParams?.libraries });\n\n\tconst deployOverrides = txParams?.gasLimit ? { gasLimit: txParams.gasLimit } : {};\n\n\tconst deployTx = contractFactory.getDeployTransaction(\n\t\t...contractConstructorArgs,\n\t\tdeployOverrides\n\t);\n\n\tconst isTrezorDeployEnabled = getTrezorDeployEnabled();\n\tif (deployTx.data && isTrezorDeployEnabled) {\n\t\tlog(\n\t\t\t`${contractName} input data: ${deployTx.data} \\n size: ${(deployTx.data.length - 2) / 2}`,\n\t\t\t'bytecode',\n\t\t\tchain.name\n\t\t);\n\t}\n\n\tconst contract = await contractFactory.deploy(...contractConstructorArgs, deployOverrides);\n\tconst receipt = await contract.deploymentTransaction()?.wait();\n\tconst deploymentAddress = await contract.getAddress();\n\n\tif (hre.tenderly) {\n\t\ttry {\n\t\t\tawait hre.tenderly.verify({\n\t\t\t\tname: contractName,\n\t\t\t\taddress: deploymentAddress,\n\t\t\t});\n\t\t} catch (e) {\n\t\t\tconsole.error(JSON.stringify(e));\n\t\t}\n\t}\n\n\tlog(\n\t\t`Deployed at: ${deploymentAddress}`,\n\t\t`deploy ${contractName}`,\n\t\tchain.name\n\t);\n\n\treturn {\n\t\taddress: deploymentAddress,\n\t\tchainName: chain.name,\n\t\tchainType: chain.type,\n\t\tchainId: chain.chainId,\n\t\treceipt\n\t};\n};\n", "import {\n\tAddress,\n\terc20Abi,\n\tformatUnits,\n\tHash,\n\tparseUnits,\n\tPublicClient,\n\tWalletClient,\n} from 'viem';\n\nexport class TokenSender {\n\tprivate walletClient: WalletClient;\n\tprivate publicClient: PublicClient;\n\n\tconstructor(walletClient: WalletClient, publicClient: PublicClient) {\n\t\tthis.walletClient = walletClient;\n\t\tthis.publicClient = publicClient;\n\t}\n\n\tpublic async sendToken(\n\t\ttokenAddress: Address,\n\t\tamount: string,\n\t\trecipient: Address\n\t): Promise {\n\t\tconst [tokenDecimals, tokenSymbol, tokenBalance] = await Promise.all([\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'decimals',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'symbol',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'balanceOf',\n\t\t\t\targs: [this.walletClient.account?.address!],\n\t\t\t}),\n\t\t]);\n\n\t\tconsole.log(\n\t\t\t`Current ${tokenSymbol} balance ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t);\n\n\t\tif (parseUnits(amount, tokenDecimals) > tokenBalance) {\n\t\t\tthrow new Error(\n\t\t\t\t`Insufficient balance. Required: ${amount}, available: ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t\t);\n\t\t}\n\n\t\tconst txHash = await this.walletClient.writeContract({\n\t\t\taddress: tokenAddress,\n\t\t\tabi: erc20Abi,\n\t\t\tfunctionName: 'transfer',\n\t\t\targs: [recipient, parseUnits(amount, tokenDecimals)],\n\t\t\tchain: this.walletClient.chain,\n\t\t\taccount: this.walletClient.account!,\n\t\t});\n\n\t\tconst { status } = await this.publicClient.waitForTransactionReceipt({\n\t\t\thash: txHash,\n\t\t});\n\n\t\tif (status !== 'success') {\n\t\t\tthrow new Error(`Error sending token. Hash: ${txHash}`);\n\t\t}\n\n\t\tconsole.log(`Token successfully sent. Hash: ${txHash}`);\n\n\t\treturn txHash;\n\t}\n}\n"], + "mappings": "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", "names": ["process", "config", "config", "getWallet", "import_viem", "log", "config", "path", "import_viem", "testnetChains", "mainnetChains", "config", "getViemAccount", "import_viem"] } diff --git a/dist/index.esm.js b/dist/index.esm.js index 05fc0a8..ac2623f 100644 --- a/dist/index.esm.js +++ b/dist/index.esm.js @@ -570,7 +570,14 @@ var genericDeploy = async ({ hre, contractName, txParams }, ...contractConstruct const receipt = await contract.deploymentTransaction()?.wait(); const deploymentAddress = await contract.getAddress(); if (hre.tenderly) { - await hre.tenderly.verify({ name: contractName, address: deploymentAddress }); + try { + await hre.tenderly.verify({ + name: contractName, + address: deploymentAddress + }); + } catch (e) { + console.error(JSON.stringify(e)); + } } log( `Deployed at: ${deploymentAddress}`, @@ -578,11 +585,11 @@ var genericDeploy = async ({ hre, contractName, txParams }, ...contractConstruct chain.name ); return { - hash: contract.deploymentTransaction()?.hash, address: deploymentAddress, chainName: chain.name, chainType: chain.type, - proxyAdminAddress: extractProxyAdminAddress(receipt) + chainId: chain.chainId, + receipt }; }; diff --git a/dist/index.esm.js.map b/dist/index.esm.js.map index 3109ecc..933b991 100644 --- a/dist/index.esm.js.map +++ b/dist/index.esm.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../src/types/networkTypes.ts", "../src/utils/createViemChain.ts", "../src/utils/getEnvVar.ts", "../src/utils/log.ts", "../src/utils/formatting.ts", "../src/networks/getNetworkEnvKey.ts", "../src/utils/getTrezorDeployEnabled.ts", "../src/utils/createWalletGetter.ts", "../src/utils/ethersSignerCallContract.ts", "../src/utils/compileContracts.ts", "../src/utils/localhostViemChain.ts", "../src/utils/extractProxyAdminAddress.ts", "../src/utils/createEnvUpdater.ts", "../src/utils/getActualGasData.ts", "../src/utils/getViemClients.ts", "../src/constants/conceroNetworks.ts", "../src/utils/getGasParameters.ts", "../src/constants/config.ts", "../src/deploy/GenericDeploy.ts", "../src/tokens/TokenSender.ts"], - "sourcesContent": ["import { type NetworkType } from './ConceroNetwork';\n\nexport const networkTypes: Record = {\n\tmainnet: 'mainnet',\n\ttestnet: 'testnet',\n\tlocalhost: 'localhost',\n};\n", "import { defineChain } from 'viem';\n\nimport { type ChainDefinition } from '../types';\n\nexport function createViemChain(\n\tchainDefinition: ChainDefinition\n): ReturnType {\n\treturn defineChain({\n\t\tid: chainDefinition.id,\n\t\tname: chainDefinition.name,\n\t\tnativeCurrency: {\n\t\t\tdecimals: 18,\n\t\t\tname: 'eth',\n\t\t\tsymbol: 'eth',\n\t\t},\n\t\trpcUrls: {\n\t\t\tdefault: { http: chainDefinition.rpcUrls },\n\t\t},\n\t\tblockExplorers: chainDefinition.blockExplorer\n\t\t\t? {\n\t\t\t\tdefault: {\n\t\t\t\t\tname: chainDefinition.blockExplorer.name,\n\t\t\t\t\turl: chainDefinition.blockExplorer.url,\n\t\t\t\t},\n\t\t\t}\n\t\t\t: undefined,\n\t\ttestnet: chainDefinition.isTestnet,\n\t});\n}\n", "import process from 'process';\nimport { Address } from 'viem';\n\nimport { warn } from './log';\nimport { shorten } from './formatting';\nimport { getNetworkEnvKey } from '../networks';\n\nexport function getEnvVar(key: string, defaultValue?: string): string {\n\tconst value = process.env[key];\n\tif (value === undefined || value === '') {\n\t\tif (defaultValue !== undefined) return defaultValue;\n\t\twarn(`Missing env variable: ${key}`, 'getEnvVar');\n\t\treturn '';\n\t}\n\n\treturn value;\n}\n\nexport interface EnvAddressConfig> {\n\tprefixes: TPrefixes;\n}\n\nexport function createEnvAddressGetter>(\n\tconfig: EnvAddressConfig,\n) {\n\tfunction getEnvAddress(\n\t\tprefix: keyof TPrefixes,\n\t\tnetworkName?: string,\n\t): [Address, string] {\n\t\tconst searchKey = networkName\n\t\t\t? `${config.prefixes[prefix]}_${getNetworkEnvKey(networkName)}`\n\t\t\t: config.prefixes[prefix];\n\n\t\tconst value = getEnvVar(searchKey) as Address;\n\t\tconst friendlyName = `${String(prefix)}(${shorten(value)})`\n\n\t\treturn [value, friendlyName];\n\t}\n\n\treturn { getEnvAddress };\n}\n", "const networkColors: Record = {\n\tethereum: '\\x1b[30m', // grey\n\tarbitrum: '\\x1b[34m', // blue\n\tpolygon: '\\x1b[35m', // magenta\n\tavalanche: '\\x1b[31m', // red\n\tbase: '\\x1b[36m', // cyan\n\tethereumSepolia: '\\x1b[30m', // grey\n\tarbitrumSepolia: '\\x1b[34m', // blue\n\toptimismSepolia: '\\x1b[31m', // red\n\tpolygonAmoy: '\\x1b[35m', // magenta\n\tavalancheFuji: '\\x1b[31m', // red\n\tbaseSepolia: '\\x1b[36m', // cyan\n\thardhat: '\\x1b[32m', // green\n\tlocalhost: '\\x1b[32m', // green\n};\nconst reset = '\\x1b[0m';\n\nexport function log(message: any, functionName: string, networkName?: string) {\n\tconst greenFill = '\\x1b[32m';\n\tconst network = networkName ? `\\x1b[35m[${networkName}]${reset}` : '';\n\n\tconsole.log(`${network}${greenFill}[${functionName}]${reset}`, message);\n}\n\nexport function warn(message: any, functionName: string) {\n\tconst yellowFill = '\\x1b[33m';\n\n\tconsole.log(`${yellowFill}[${functionName}]${reset}`, message);\n}\n\nexport function err(message: any, functionName: string, networkName?: string) {\n\tconst redFill = '\\x1b[31m';\n\tconst network = networkName\n\t\t? `${networkColors[networkName]}[${networkName}]${reset}`\n\t\t: '';\n\n\tconsole.log(\n\t\t`${network}${redFill}[${functionName}] ERROR:${reset}`,\n\t\tmessage\n\t);\n}\n\nexport default log;\n", "import { type Address } from \"viem\";\n\nexport function shorten(address: Address) {\n\treturn `${address.slice(0, 6)}...${address.slice(-4)}`;\n}\n\nexport function formatGas(gasAmountWei: bigint) {\n\t// splits gas number with commas like so: 1,000,000\n\treturn gasAmountWei.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n}\n", "/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkEnvKey(networkName: string): string {\n if (!networkName) {\n throw new Error('Network name must be provided');\n }\n return camelCaseToCapsSnakeCase(networkName);\n}\n\n/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkKey(NETWORK_NAME: string): string {\n if (!NETWORK_NAME) {\n throw new Error('Network name must be provided');\n }\n return capsSnakeCaseToCamelCase(NETWORK_NAME);\n}\n\n/**\n * Converts a string from CAPS_SNAKE_CASE to camelCase\n *\n * @param snakeCaseString The string in CAPS_SNAKE_CASE format\n * @returns The string converted to camelCase format\n */\nexport function capsSnakeCaseToCamelCase(snakeCaseString: string): string {\n if (!snakeCaseString) {\n throw new Error('String must be provided');\n }\n\n return snakeCaseString\n .toLowerCase()\n .replace(/_([a-z])/g, (_, char) => char.toUpperCase());\n}\n\n/**\n * Converts a string from camelCase to CAPS_SNAKE_CASE\n *\n * @param camelCaseString The string in camelCase format\n * @returns The string converted to CAPS_SNAKE_CASE format\n */\nexport function camelCaseToCapsSnakeCase(camelCaseString: string): string {\n if (!camelCaseString) {\n throw new Error('String must be provided');\n }\n\n return camelCaseString.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toUpperCase();\n}\n\nexport function getNetworkName(networkEnvKey: string): string {\n if (!networkEnvKey) {\n throw new Error('Network name must be provided');\n }\n\n return networkEnvKey\n .toLowerCase()\n .split('_')\n .map((word, index) =>\n index === 0 ? word : word[0].toUpperCase() + word.slice(1)\n )\n .join('');\n}\n", "import { getEnvVar } from './getEnvVar';\n\nexport const getTrezorDeployEnabled = () =>\n\tgetEnvVar('TREZOR_DEPLOY_ENABLED', 'false') === 'true';\n", "import { type NetworkType } from '../types';\nimport { warn } from './log';\n\nexport interface BaseAccountTypePrefixes extends Record {\n\tproxyDeployer: 'PROXY_DEPLOYER';\n\tdeployer: 'DEPLOYER';\n}\n\nexport const baseAccountTypePrefixes: BaseAccountTypePrefixes = {\n\tproxyDeployer: 'PROXY_DEPLOYER',\n\tdeployer: 'DEPLOYER'\n};\n\nexport interface WalletGetterConfig> {\n\taccountTypePrefixes: TPrefixes;\n}\n\nexport function createWalletGetter>(\n\tconfig: WalletGetterConfig,\n) {\n\tfunction getWallet(\n\t\tchainType: NetworkType,\n\t\taccountType: keyof TPrefixes,\n\t\twalletType: 'privateKey' | 'address',\n\t) {\n\t\tconst prefix = config.accountTypePrefixes[accountType];\n\t\tif (!prefix) {\n\t\t\tthrow new Error(`Unknown account type: ${String(accountType)}`);\n\t\t}\n\n\t\tconst walletKey = walletType === 'privateKey' ? 'PRIVATE_KEY' : 'ADDRESS';\n\t\tconst envKey = `${chainType.toUpperCase()}_${prefix}_${walletKey}`;\n\t\tconst walletValue = process.env[envKey];\n\n\t\tif (!walletValue) {\n\t\t\twarn(`Missing env variable: ${envKey}`, 'getWallet');\n\t\t}\n\n\t\treturn walletValue;\n\t}\n\n\treturn { getWallet };\n}\n\nexport const { getWallet } = createWalletGetter({\n\taccountTypePrefixes: baseAccountTypePrefixes,\n});\n", "import { HardhatRuntimeEnvironment } from \"hardhat/types\";\nimport { Address, Hash } from \"viem\";\n\nimport { log } from \"./log\";\n\nexport const ethersSignerCallContract = async (\n\thre: HardhatRuntimeEnvironment,\n\tcontract: Address,\n\tabi: any[],\n\tfunctionName: string,\n\t...functionArgs: any[]\n) => {\n\tconst [ethersSigner] = await hre.ethers.getSigners();\n\tconst ethersContract = new hre.ethers.Contract(contract, abi, ethersSigner);\n\tconst unsignedTx = await ethersContract[functionName].populateTransaction(...functionArgs);\n\n\tlog(\n\t\t`Size: ${(unsignedTx.data.length - 2) / 2}, Input data: ${unsignedTx.data}, Address: ${unsignedTx.to}`,\n\t\tfunctionName,\n\t\thre.network.name,\n\t);\n\n\treturn (await ethersSigner.sendTransaction(unsignedTx)).hash as Hash;\n};\n", "/*\nhardhat compile\n --concurrency Number of compilation jobs executed in parallel. Defaults to the number of CPU cores - 1 (default: 9)\n --force Force compilation ignoring cache\n --no-size-contracts Don't size contracts after running this task, even if runOnCompile option is enabled\n --no-typechain Skip Typechain compilation\n --quiet Makes the compilation process less verbose\n */\nimport { execSync } from \"child_process\";\n\ninterface HardhatCompileParams {\n\tconcurrency?: number;\n\tforce?: boolean;\n\tnoSizeContracts?: boolean;\n\tnoTypechain?: boolean;\n\tquiet?: boolean;\n}\n\nexport function compileContracts({ quiet = true, force = false }: HardhatCompileParams) {\n\tconst packageManager = process.env[\"PACKAGE_MANAGER\"] || \"yarn\";\n\tconst command = `${packageManager} compile`;\n\tconst args = [];\n\t// if (concurrency) args.push(`--concurrency ${concurrency}`);\n\t// if (noSizeContracts) args.push(\"--no-size-contracts\");\n\t// if (noTypechain) args.push(\"--no-typechain\");\n\tif (quiet) args.push(\"--quiet\");\n\tif (force) args.push(\"--force\");\n\texecSync(`${command} ${args.join(\" \")}`, { stdio: \"inherit\" });\n}\n", "import { defineChain } from \"viem\";\n\nexport const localhostViemChain = defineChain({\n\tid: Number(process.env.LOCALHOST_FORK_CHAIN_ID),\n\tname: \"localhost\",\n\tnativeCurrency: {\n\t\tdecimals: 18,\n\t\tname: \"eth\",\n\t\tsymbol: \"eth\",\n\t},\n\trpcUrls: {\n\t\tdefault: { http: [process.env.LOCALHOST_RPC_URL ?? \"http://127.0.0.1:8545\"] },\n\t},\n\ttestnet: true,\n});\n\nexport const hardhatViemChain = defineChain({\n\tid: Number(process.env.HARDHAT_CHAIN_ID),\n\tname: \"hardhat\",\n\tnativeCurrency: {\n\t\tdecimals: 18,\n\t\tname: \"eth\",\n\t\tsymbol: \"eth\",\n\t},\n\trpcUrls: {\n\t\tdefault: { http: [process.env.HARDHAT_RPC_URL ?? \"http://127.0.0.1:8545\"] },\n\t},\n\ttestnet: true,\n});\n", "import { ethers } from 'ethers';\n\nexport function extractProxyAdminAddress(receipt: ethers.TransactionReceipt | null): string {\n\tif (!receipt) return ethers.ZeroAddress;\n\n\tconst adminChangedTopic = ethers.id(\"AdminChanged(address,address)\");\n\tconst adminChangedLog = receipt.logs.find((log: ethers.Log) => log.topics[0] === adminChangedTopic);\n\n\tif (!adminChangedLog) return ethers.ZeroAddress;\n\n\ttry {\n\t\tconst abiCoder = ethers.AbiCoder.defaultAbiCoder();\n\t\tconst [, newAdmin] = abiCoder.decode(['address', 'address'], adminChangedLog.data);\n\t\treturn newAdmin;\n\t} catch {\n\t\treturn ethers.ZeroAddress;\n\t}\n}", "import { existsSync, readFileSync, writeFileSync } from \"fs\";\nimport path from \"path\";\nimport { getNetworkEnvKey } from \"../networks/getNetworkEnvKey\";\nimport log from \"./log\";\n\nexport interface EnvUpdaterConfig> {\n\tprefixes: TPrefixes;\n\tbasePath: string;\n}\n\nexport function createEnvUpdater<\n\tTPrefixes extends Record,\n\tTEnvFileName extends string,\n>(config: EnvUpdaterConfig) {\n\tfunction updateEnvVariable(\n\t\tkey: string,\n\t\tnewValue: string,\n\t\tenvFileName: TEnvFileName,\n\t): void {\n\t\tconst filePath = path.join(config.basePath, `.env.${envFileName}`);\n\n\t\tif (!existsSync(filePath)) {\n\t\t\tthrow new Error(`File not found: ${filePath}`);\n\t\t}\n\n\t\tconst envContents = readFileSync(filePath, \"utf8\");\n\t\tlet lines = envContents.split(/\\r?\\n/);\n\n\t\tconst keyExists = lines.some(line => line.startsWith(`${key}=`));\n\n\t\tif (!keyExists) {\n\t\t\tlog(\n\t\t\t\t`Key ${key} not found in .env file. Adding to ${filePath}`,\n\t\t\t\t\"updateEnvVariable\",\n\t\t\t);\n\t\t\tlines.push(`${key}=${newValue}`);\n\t\t} else {\n\t\t\tlines = lines.map(line => {\n\t\t\t\tconst [currentKey] = line.split(\"=\");\n\t\t\t\tif (currentKey === key) {\n\t\t\t\t\treturn `${key}=${newValue}`;\n\t\t\t\t}\n\t\t\t\treturn line;\n\t\t\t});\n\t\t}\n\n\t\twriteFileSync(filePath, lines.join(\"\\n\"));\n\t\tprocess.env[key] = newValue;\n\t}\n\n\tfunction updateEnvAddress(\n\t\tprefix: keyof TPrefixes,\n\t\tnewValue: string,\n\t\tenvFileName: TEnvFileName,\n\t\tnetworkPostfix?: string,\n\t): void {\n\t\tconst searchKey = networkPostfix\n\t\t\t? `${config.prefixes[prefix]}_${getNetworkEnvKey(networkPostfix)}`\n\t\t\t: String(config.prefixes[prefix]);\n\n\t\tupdateEnvVariable(searchKey, newValue, envFileName);\n\t}\n\n\treturn { updateEnvVariable, updateEnvAddress };\n}\n", "import { PublicClient } from 'viem';\n\ntype GasData = {\n\tgasPrice?: string;\n\tmaxFeePerGas?: string;\n\tmaxPriorityFeePerGas?: string;\n};\n\nexport async function getActualGasData(\n\tpublicClient: PublicClient\n): Promise {\n\tconst block = await publicClient.getBlock();\n\n\tconst isEIP1559 = !!block.baseFeePerGas;\n\n\tlet gasPrice = 0n;\n\tlet maxPriorityFeePerGas = 0n;\n\ttry {\n\t\tif (isEIP1559) {\n\t\t\tconst { maxFeePerGas } = await publicClient.estimateFeesPerGas();\n\t\t\tgasPrice = maxFeePerGas;\n\t\t\tmaxPriorityFeePerGas =\n\t\t\t\tawait publicClient.estimateMaxPriorityFeePerGas();\n\t\t} else {\n\t\t\tgasPrice = await publicClient.getGasPrice();\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('Error getting actual gas data:', error);\n\t\treturn {\n\t\t\tgasPrice: '0',\n\t\t\tmaxFeePerGas: '0',\n\t\t\tmaxPriorityFeePerGas: '0',\n\t\t};\n\t}\n\n\tconst gasDataLegacy = {\n\t\tgasPrice: gasPrice.toString(),\n\t};\n\n\tconst gasDataEIP1559 = {\n\t\tmaxFeePerGas: gasPrice.toString(),\n\t\tmaxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n\t};\n\n\tconst gasData: GasData = isEIP1559 ? gasDataEIP1559 : gasDataLegacy;\n\n\treturn gasData;\n}\n", "import {\n\tChain,\n\ttype TestClient,\n\ttype PublicClient,\n\ttype WalletClient,\n\tcreatePublicClient,\n\tcreateTestClient,\n\tcreateWalletClient,\n\tfallback,\n\thttp,\n\tpublicActions,\n\twalletActions,\n\tnonceManager,\n} from \"viem\";\nimport { privateKeyToAccount, type PrivateKeyAccount } from \"viem/accounts\";\n\nimport { type ConceroNetwork, type NetworkType } from \"../types\";\nimport { getWallet, type BaseAccountTypePrefixes } from \"../utils\";\nimport { localhostViemChain } from \"./localhostViemChain\";\nimport { conceroNetworks } from \"../constants/conceroNetworks\";\n\nfunction getClients(\n\tviemChain: Chain,\n\turl: string | undefined,\n\taccount: PrivateKeyAccount = privateKeyToAccount(\n\t\t`0x${process.env.TESTNET_DEPLOYER_PRIVATE_KEY}`,\n\t),\n): {\n\twalletClient: WalletClient;\n\tpublicClient: PublicClient;\n\taccount: PrivateKeyAccount;\n} {\n\tconst publicClient = createPublicClient({ transport: http(url), chain: viemChain });\n\tconst walletClient = createWalletClient({ transport: http(url), chain: viemChain, account });\n\n\treturn { walletClient, publicClient, account };\n}\n\nexport type ExtendedTestClient = TestClient & WalletClient & PublicClient;\n\nfunction getTestClient(account: PrivateKeyAccount): ExtendedTestClient {\n\tconst testClient = createTestClient({\n\t\tchain: localhostViemChain,\n\t\tmode: \"hardhat\",\n\t\ttransport: http(),\n\t\taccount,\n\t})\n\t\t.extend(publicActions)\n\t\t.extend(walletActions);\n\n\treturn testClient as unknown as ExtendedTestClient;\n}\n\nfunction getFallbackClients(\n\tchain: ConceroNetwork,\n\taccount?: PrivateKeyAccount,\n): {\n\twalletClient: WalletClient;\n\tpublicClient: PublicClient;\n\taccount: PrivateKeyAccount;\n} {\n\tif (!account) {\n\t\tswitch (chain.type) {\n\t\t\tcase \"mainnet\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.MAINNET_DEPLOYER_PRIVATE_KEY}`);\n\t\t\t\tbreak;\n\t\t\tcase \"testnet\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.TESTNET_DEPLOYER_PRIVATE_KEY}`, {\n\t\t\t\t\tnonceManager: nonceManager,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"localhost\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.LOCALHOST_DEPLOYER_PRIVATE_KEY}`);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unsupported chain type: ${chain.type}`);\n\t\t}\n\t}\n\n\tconst { viemChain, name } = chain;\n\n\tif (!conceroNetworks[name].rpcUrls.length) {\n\t\tthrow new Error(`No URLs configured for chain: ${name}`);\n\t}\n\n\tconst transport = fallback(\n\t\tconceroNetworks[name].rpcUrls.map(url =>\n\t\t\thttp(url, {\n\t\t\t\ttimeout: 10000,\n\t\t\t\tretryCount: 1,\n\t\t\t\tretryDelay: 250,\n\t\t\t\tonFetchResponse: async response => {\n\t\t\t\t\tif (response.status >= 400) {\n\t\t\t\t\t\tthrow new Error(`HTTP error: ${response.status} ${response.statusText}`);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t}),\n\t\t),\n\t);\n\tconst publicClient = createPublicClient({ transport, chain: viemChain });\n\tconst walletClient = createWalletClient({ transport, chain: viemChain, account });\n\n\treturn { walletClient, publicClient, account };\n}\n\nfunction getViemAccount(\n\tchainType: NetworkType,\n\taccountType: keyof BaseAccountTypePrefixes,\n) {\n\tconst privateKey = `0x${getWallet(chainType, accountType, \"privateKey\")}`;\n\n\treturn privateKeyToAccount(privateKey as `0x${string}`, {\n\t\tnonceManager: nonceManager,\n\t});\n}\n\nexport interface ViemAccountGetterConfig> {\n\taccountTypePrefixes: TPrefixes;\n\tgetWallet: (chainType: NetworkType, accountType: keyof TPrefixes, walletType: 'privateKey' | 'address') => string | undefined;\n}\n\nexport function createViemAccountGetter>(\n\tconfig: ViemAccountGetterConfig,\n) {\n\tfunction getViemAccount(\n\t\tchainType: NetworkType,\n\t\taccountType: keyof TPrefixes,\n\t) {\n\t\tconst privateKey = `0x${config.getWallet(chainType, accountType, \"privateKey\")}`;\n\n\t\treturn privateKeyToAccount(privateKey as `0x${string}`, {\n\t\t\tnonceManager: nonceManager,\n\t\t});\n\t}\n\n\treturn { getViemAccount };\n}\n\nexport { getClients, getFallbackClients, getTestClient, getViemAccount };\n", "import mainnetChains from '@concero/concero-networks/output/chains.mainnet.json';\nimport testnetChains from '@concero/concero-networks/output/chains.testnet.json';\nimport type { Chain } from '@concero/concero-networks/src/types';\n\nimport {\n\ttype NetworkType,\n\ttype ChainDefinition,\n\ttype ConceroNetwork,\n\tnetworkTypes,\n} from '../types';\nimport { getWallet } from '../utils';\nimport { createViemChain } from '../utils/createViemChain';\nimport { getTrezorDeployEnabled } from '../utils/getTrezorDeployEnabled';\n\nconst mainnetProxyDeployerPK = getWallet(\n\t'mainnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\nconst testnetProxyDeployerPK = getWallet(\n\t'testnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\n\nconst mainnetDeployerPK = getWallet('mainnet', 'deployer', 'privateKey');\nconst testnetDeployerPK = getWallet('testnet', 'deployer', 'privateKey');\n\nconst trezorDeployEnabled = getTrezorDeployEnabled();\n\nconst testnetAccounts = [testnetDeployerPK, testnetProxyDeployerPK];\n\nexport type ConceroMainnetNetworkNames =\n\t(typeof mainnetChains)[keyof typeof mainnetChains]['name'];\nexport type ConceroTestnetNetworkNames =\n\t(typeof testnetChains)[keyof typeof testnetChains]['name'];\n\nfunction createExtendedNetworks>(\n\tchains: T,\n\tnetworkType: NetworkType,\n\taccounts: (string | undefined)[]\n): Record {\n\tconst validAccounts = accounts.filter((acc): acc is string => !!acc);\n\n\treturn Object.fromEntries(\n\t\tObject.values(chains).map(chain => {\n\t\t\tconst chainDefinition: ChainDefinition = {\n\t\t\t\tid: parseInt(chain.id),\n\t\t\t\tname: chain.name,\n\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\tisTestnet: chain.isTestnet ?? false,\n\t\t\t\t...(chain.blockExplorers?.[0] && {\n\t\t\t\t\tblockExplorer: {\n\t\t\t\t\t\tname: chain.blockExplorers[0].name,\n\t\t\t\t\t\turl: chain.blockExplorers[0].url,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t};\n\n\t\t\tconst viemChain = createViemChain(chainDefinition);\n\n\t\t\treturn [\n\t\t\t\tchain.name,\n\t\t\t\t{\n\t\t\t\t\tname: chain.name,\n\t\t\t\t\tchainId: parseInt(chain.id),\n\t\t\t\t\ttype: networkType,\n\t\t\t\t\turl: chain.rpcUrls[0] || '',\n\t\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\t\tsaveDeployments: false,\n\t\t\t\t\t...(!trezorDeployEnabled && { accounts: validAccounts }),\n\t\t\t\t\tchainSelector: BigInt(chain.chainSelector),\n\t\t\t\t\tconfirmations: 1,\n\t\t\t\t\tviemChain,\n\t\t\t\t\t...(trezorDeployEnabled && {\n\t\t\t\t\t\ttrezorDerivationPaths: [\n\t\t\t\t\t\t\t[44, 60, 0, 0, 0],\n\t\t\t\t\t\t\t[44, 60, 0, 0, 1],\n\t\t\t\t\t\t],\n\t\t\t\t\t\ttrezorInsecureDerivation: true,\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t];\n\t\t})\n\t) as Record;\n}\n\nexport const testnetNetworks = createExtendedNetworks(\n\ttestnetChains as unknown as Record,\n\tnetworkTypes.testnet,\n\ttestnetAccounts\n);\n\nexport const mainnetNetworks = createExtendedNetworks(\n\tmainnetChains as unknown as Record,\n\tnetworkTypes.mainnet,\n\t[mainnetDeployerPK, mainnetProxyDeployerPK]\n);\n\nexport const conceroNetworks: Record = {\n\t...testnetNetworks,\n\t...mainnetNetworks,\n};\n", "import { type PublicClient } from \"viem\";\n\nimport { ConceroNetwork } from \"../types/ConceroNetwork\";\nimport { getFallbackClients } from \"./getViemClients\";\n\ninterface GasParameters {\n\tmaxFeePerGas: bigint;\n\tmaxPriorityFeePerGas: bigint;\n}\n\n// Network-specific minimum gas parameters (in wei)\nconst NETWORK_MINIMUMS = {\n\tpolygon: {\n\t\tminTipCap: BigInt(30_000_000_000), // 30 gwei\n\t\tminBaseFee: BigInt(30_000_000_000), // 30 gwei\n\t},\n\t// Add other networks as needed\n} as const;\n\n/**\n * Gets optimized gas parameters for priority transaction processing\n * @param chain - The network configuration\n * @param priorityMultiplier - Multiplier for maxPriorityFeePerGas (default: 2)\n * @param maxFeeMultiplier - Multiplier for maxFeePerGas buffer (default: 2)\n * @returns GasParameters object containing maxFeePerGas and maxPriorityFeePerGas\n */\nexport async function getGasParameters(\n\tchain: ConceroNetwork,\n\tpriorityMultiplier = 1,\n\tmaxFeeMultiplier = 1,\n): Promise {\n\tconst { publicClient } = getFallbackClients(chain);\n\n\ttry {\n\t\t// Get latest block to calculate gas parameters\n\t\tconst block = await publicClient.getBlock();\n\t\tconst baseFee = block.baseFeePerGas ?? BigInt(0);\n\n\t\t// Get network-specific minimums\n\t\tconst networkMinimums = getNetworkMinimums(chain);\n\n\t\t// Calculate priority fee with buffer for faster inclusion\n\t\tconst suggestedPriorityFee = await getSuggestedPriorityFee(publicClient, chain);\n\t\tconst calculatedPriorityFee = calculatePriorityFee(\n\t\t\tsuggestedPriorityFee,\n\t\t\tpriorityMultiplier,\n\t\t);\n\n\t\t// Ensure priority fee meets network minimum\n\t\tconst priorityFee =\n\t\t\tcalculatedPriorityFee > networkMinimums.minTipCap\n\t\t\t\t? calculatedPriorityFee\n\t\t\t\t: networkMinimums.minTipCap;\n\n\t\t// Calculate max fee ensuring it meets network minimums\n\t\tconst calculatedMaxFee = calculateMaxFee(baseFee, priorityFee, maxFeeMultiplier);\n\t\tconst minRequiredMaxFee = networkMinimums.minBaseFee + priorityFee;\n\t\tconst maxFeePerGas =\n\t\t\tcalculatedMaxFee > minRequiredMaxFee ? calculatedMaxFee : minRequiredMaxFee;\n\n\t\treturn {\n\t\t\tmaxFeePerGas,\n\t\t\tmaxPriorityFeePerGas: priorityFee,\n\t\t};\n\t} catch (error) {\n\t\t// Fallback with network minimums\n\t\tconst networkMinimums = getNetworkMinimums(chain);\n\t\tconst gasPrice = await publicClient.getGasPrice();\n\t\tconst priorityFee = networkMinimums.minTipCap;\n\n\t\treturn {\n\t\t\tmaxFeePerGas:\n\t\t\t\tgasPrice > networkMinimums.minBaseFee + priorityFee\n\t\t\t\t\t? gasPrice\n\t\t\t\t\t: networkMinimums.minBaseFee + priorityFee,\n\t\t\tmaxPriorityFeePerGas: priorityFee,\n\t\t};\n\t}\n}\n\n/**\n * Gets network-specific minimum gas parameters\n */\nfunction getNetworkMinimums(chain: ConceroNetwork) {\n\t// Check if chain is Polygon (you'll need to implement this check based on your CNetwork type)\n\tconst isPolygon = chain.chainId === 137 || chain.name.toLowerCase().includes(\"polygon\");\n\n\tif (isPolygon) {\n\t\treturn NETWORK_MINIMUMS.polygon;\n\t}\n\n\t// Default minimums for other networks\n\treturn {\n\t\tminTipCap: BigInt(1_500_000_000), // 1.5 gwei\n\t\tminBaseFee: BigInt(1_000_000_000), // 1 gwei\n\t};\n}\n\n/**\n * Gets the suggested priority fee from recent blocks\n */\nasync function getSuggestedPriorityFee(\n\tpublicClient: PublicClient,\n\tchain: ConceroNetwork,\n): Promise {\n\ttry {\n\t\t// For Polygon, we want to be more aggressive with priority fees\n\t\tconst isPolygon = chain.chainId === 137 || chain.name.toLowerCase().includes(\"polygon\");\n\t\tconst blocksToAnalyze = isPolygon ? 5 : 10; // Look at fewer blocks on Polygon for more recent data\n\n\t\tconst blocks = await Promise.all(\n\t\t\tArray.from({ length: blocksToAnalyze }, (_, i) =>\n\t\t\t\tpublicClient.getBlock({ blockNumber: BigInt(-1 - i) }),\n\t\t\t),\n\t\t);\n\n\t\t// For Polygon, use 75th percentile instead of median for higher priority\n\t\tconst priorityFees = blocks\n\t\t\t.map(block => block.baseFeePerGas ?? BigInt(0))\n\t\t\t.sort((a, b) => (a < b ? -1 : 1));\n\n\t\tconst index = isPolygon\n\t\t\t? Math.floor(priorityFees.length * 0.75)\n\t\t\t: Math.floor(priorityFees.length * 0.5);\n\n\t\treturn priorityFees[index];\n\t} catch {\n\t\t// Use network-specific minimum as fallback\n\t\treturn getNetworkMinimums(chain).minTipCap;\n\t}\n}\n\n/**\n * Calculates priority fee with buffer\n */\nfunction calculatePriorityFee(basePriorityFee: bigint, multiplier: number): bigint {\n\treturn BigInt(Math.ceil(Number(basePriorityFee) * multiplier));\n}\n\n/**\n * Calculates max fee with buffer\n */\nfunction calculateMaxFee(baseFee: bigint, priorityFee: bigint, multiplier: number): bigint {\n\treturn BigInt(Math.ceil(Number(baseFee) * multiplier)) + priorityFee;\n}\n", "export const config = {\n DEFAULT_BLOCK_CONFIRMATIONS: 2,\n};\n", "import { HardhatRuntimeEnvironment } from 'hardhat/types';\n\nimport { conceroNetworks } from '../constants/conceroNetworks';\nimport { getTrezorDeployEnabled, log } from '../utils';\nimport { extractProxyAdminAddress } from '../utils/extractProxyAdminAddress';\n\nexport interface ITxParams {\n\tgasLimit: bigint;\n\tlibraries: Record;\n}\n\nexport interface IDeployResult {\n\thash: string;\n\taddress: string;\n\tchainType: string;\n\tchainName: string;\n\tproxyAdminAddress: string;\n}\n\nexport interface IGenericDeployParams {\n\thre: HardhatRuntimeEnvironment;\n\tcontractName: string;\n\ttxParams?: Partial;\n}\n\nexport const genericDeploy = async (\n\t{ hre, contractName, txParams }: IGenericDeployParams,\n\t...contractConstructorArgs: any[]\n): Promise => {\n\tconst [deployer] = await hre.ethers.getSigners();\n\tconst chain = conceroNetworks[hre.network.name];\n\n\tlog(\n\t\t`Deploy ${contractName} from address: ${await deployer.getAddress()}`,\n\t\t'contract deploy',\n\t\tchain.name\n\t);\n\n\tconst contractFactory = await hre.ethers.getContractFactory(contractName, { libraries: txParams?.libraries });\n\n\tconst deployOverrides = txParams?.gasLimit ? { gasLimit: txParams.gasLimit } : {};\n\n\tconst deployTx = contractFactory.getDeployTransaction(\n\t\t...contractConstructorArgs,\n\t\tdeployOverrides\n\t);\n\n\tconst isTrezorDeployEnabled = getTrezorDeployEnabled();\n\tif (deployTx.data && isTrezorDeployEnabled) {\n\t\tlog(\n\t\t\t`${contractName} input data: ${deployTx.data} \\n size: ${(deployTx.data.length - 2) / 2}`,\n\t\t\t'bytecode',\n\t\t\tchain.name\n\t\t);\n\t}\n\n\tconst contract = await contractFactory.deploy(...contractConstructorArgs, deployOverrides);\n\tconst receipt = await contract.deploymentTransaction()?.wait();\n\tconst deploymentAddress = await contract.getAddress();\n\n\tif (hre.tenderly) {\n\t\tawait hre.tenderly.verify({ name: contractName, address: deploymentAddress });\n\t}\n\n\tlog(\n\t\t`Deployed at: ${deploymentAddress}`,\n\t\t`deploy ${contractName}`,\n\t\tchain.name\n\t);\n\n\treturn {\n\t\thash: contract.deploymentTransaction()?.hash,\n\t\taddress: deploymentAddress,\n\t\tchainName: chain.name,\n\t\tchainType: chain.type,\n\t\tproxyAdminAddress: extractProxyAdminAddress(receipt)\n\t};\n};\n", "import {\n\tAddress,\n\terc20Abi,\n\tformatUnits,\n\tHash,\n\tparseUnits,\n\tPublicClient,\n\tWalletClient,\n} from 'viem';\n\nexport class TokenSender {\n\tprivate walletClient: WalletClient;\n\tprivate publicClient: PublicClient;\n\n\tconstructor(walletClient: WalletClient, publicClient: PublicClient) {\n\t\tthis.walletClient = walletClient;\n\t\tthis.publicClient = publicClient;\n\t}\n\n\tpublic async sendToken(\n\t\ttokenAddress: Address,\n\t\tamount: string,\n\t\trecipient: Address\n\t): Promise {\n\t\tconst [tokenDecimals, tokenSymbol, tokenBalance] = await Promise.all([\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'decimals',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'symbol',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'balanceOf',\n\t\t\t\targs: [this.walletClient.account?.address!],\n\t\t\t}),\n\t\t]);\n\n\t\tconsole.log(\n\t\t\t`Current ${tokenSymbol} balance ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t);\n\n\t\tif (parseUnits(amount, tokenDecimals) > tokenBalance) {\n\t\t\tthrow new Error(\n\t\t\t\t`Insufficient balance. Required: ${amount}, available: ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t\t);\n\t\t}\n\n\t\tconst txHash = await this.walletClient.writeContract({\n\t\t\taddress: tokenAddress,\n\t\t\tabi: erc20Abi,\n\t\t\tfunctionName: 'transfer',\n\t\t\targs: [recipient, parseUnits(amount, tokenDecimals)],\n\t\t\tchain: this.walletClient.chain,\n\t\t\taccount: this.walletClient.account!,\n\t\t});\n\n\t\tconst { status } = await this.publicClient.waitForTransactionReceipt({\n\t\t\thash: txHash,\n\t\t});\n\n\t\tif (status !== 'success') {\n\t\t\tthrow new Error(`Error sending token. Hash: ${txHash}`);\n\t\t}\n\n\t\tconsole.log(`Token successfully sent. Hash: ${txHash}`);\n\n\t\treturn txHash;\n\t}\n}\n"], - "mappings": "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", + "sourcesContent": ["import { type NetworkType } from './ConceroNetwork';\n\nexport const networkTypes: Record = {\n\tmainnet: 'mainnet',\n\ttestnet: 'testnet',\n\tlocalhost: 'localhost',\n};\n", "import { defineChain } from 'viem';\n\nimport { type ChainDefinition } from '../types';\n\nexport function createViemChain(\n\tchainDefinition: ChainDefinition\n): ReturnType {\n\treturn defineChain({\n\t\tid: chainDefinition.id,\n\t\tname: chainDefinition.name,\n\t\tnativeCurrency: {\n\t\t\tdecimals: 18,\n\t\t\tname: 'eth',\n\t\t\tsymbol: 'eth',\n\t\t},\n\t\trpcUrls: {\n\t\t\tdefault: { http: chainDefinition.rpcUrls },\n\t\t},\n\t\tblockExplorers: chainDefinition.blockExplorer\n\t\t\t? {\n\t\t\t\tdefault: {\n\t\t\t\t\tname: chainDefinition.blockExplorer.name,\n\t\t\t\t\turl: chainDefinition.blockExplorer.url,\n\t\t\t\t},\n\t\t\t}\n\t\t\t: undefined,\n\t\ttestnet: chainDefinition.isTestnet,\n\t});\n}\n", "import process from 'process';\nimport { Address } from 'viem';\n\nimport { warn } from './log';\nimport { shorten } from './formatting';\nimport { getNetworkEnvKey } from '../networks';\n\nexport function getEnvVar(key: string, defaultValue?: string): string {\n\tconst value = process.env[key];\n\tif (value === undefined || value === '') {\n\t\tif (defaultValue !== undefined) return defaultValue;\n\t\twarn(`Missing env variable: ${key}`, 'getEnvVar');\n\t\treturn '';\n\t}\n\n\treturn value;\n}\n\nexport interface EnvAddressConfig> {\n\tprefixes: TPrefixes;\n}\n\nexport function createEnvAddressGetter>(\n\tconfig: EnvAddressConfig,\n) {\n\tfunction getEnvAddress(\n\t\tprefix: keyof TPrefixes,\n\t\tnetworkName?: string,\n\t): [Address, string] {\n\t\tconst searchKey = networkName\n\t\t\t? `${config.prefixes[prefix]}_${getNetworkEnvKey(networkName)}`\n\t\t\t: config.prefixes[prefix];\n\n\t\tconst value = getEnvVar(searchKey) as Address;\n\t\tconst friendlyName = `${String(prefix)}(${shorten(value)})`\n\n\t\treturn [value, friendlyName];\n\t}\n\n\treturn { getEnvAddress };\n}\n", "const networkColors: Record = {\n\tethereum: '\\x1b[30m', // grey\n\tarbitrum: '\\x1b[34m', // blue\n\tpolygon: '\\x1b[35m', // magenta\n\tavalanche: '\\x1b[31m', // red\n\tbase: '\\x1b[36m', // cyan\n\tethereumSepolia: '\\x1b[30m', // grey\n\tarbitrumSepolia: '\\x1b[34m', // blue\n\toptimismSepolia: '\\x1b[31m', // red\n\tpolygonAmoy: '\\x1b[35m', // magenta\n\tavalancheFuji: '\\x1b[31m', // red\n\tbaseSepolia: '\\x1b[36m', // cyan\n\thardhat: '\\x1b[32m', // green\n\tlocalhost: '\\x1b[32m', // green\n};\nconst reset = '\\x1b[0m';\n\nexport function log(message: any, functionName: string, networkName?: string) {\n\tconst greenFill = '\\x1b[32m';\n\tconst network = networkName ? `\\x1b[35m[${networkName}]${reset}` : '';\n\n\tconsole.log(`${network}${greenFill}[${functionName}]${reset}`, message);\n}\n\nexport function warn(message: any, functionName: string) {\n\tconst yellowFill = '\\x1b[33m';\n\n\tconsole.log(`${yellowFill}[${functionName}]${reset}`, message);\n}\n\nexport function err(message: any, functionName: string, networkName?: string) {\n\tconst redFill = '\\x1b[31m';\n\tconst network = networkName\n\t\t? `${networkColors[networkName]}[${networkName}]${reset}`\n\t\t: '';\n\n\tconsole.log(\n\t\t`${network}${redFill}[${functionName}] ERROR:${reset}`,\n\t\tmessage\n\t);\n}\n\nexport default log;\n", "import { type Address } from \"viem\";\n\nexport function shorten(address: Address) {\n\treturn `${address.slice(0, 6)}...${address.slice(-4)}`;\n}\n\nexport function formatGas(gasAmountWei: bigint) {\n\t// splits gas number with commas like so: 1,000,000\n\treturn gasAmountWei.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n}\n", "/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkEnvKey(networkName: string): string {\n if (!networkName) {\n throw new Error('Network name must be provided');\n }\n return camelCaseToCapsSnakeCase(networkName);\n}\n\n/**\n * Converts a network name from camelCase to SNAKE_CASE\n *\n * @param networkName The network name in camelCase\n * @returns The network name in SNAKE_CASE\n */\nexport function getNetworkKey(NETWORK_NAME: string): string {\n if (!NETWORK_NAME) {\n throw new Error('Network name must be provided');\n }\n return capsSnakeCaseToCamelCase(NETWORK_NAME);\n}\n\n/**\n * Converts a string from CAPS_SNAKE_CASE to camelCase\n *\n * @param snakeCaseString The string in CAPS_SNAKE_CASE format\n * @returns The string converted to camelCase format\n */\nexport function capsSnakeCaseToCamelCase(snakeCaseString: string): string {\n if (!snakeCaseString) {\n throw new Error('String must be provided');\n }\n\n return snakeCaseString\n .toLowerCase()\n .replace(/_([a-z])/g, (_, char) => char.toUpperCase());\n}\n\n/**\n * Converts a string from camelCase to CAPS_SNAKE_CASE\n *\n * @param camelCaseString The string in camelCase format\n * @returns The string converted to CAPS_SNAKE_CASE format\n */\nexport function camelCaseToCapsSnakeCase(camelCaseString: string): string {\n if (!camelCaseString) {\n throw new Error('String must be provided');\n }\n\n return camelCaseString.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toUpperCase();\n}\n\nexport function getNetworkName(networkEnvKey: string): string {\n if (!networkEnvKey) {\n throw new Error('Network name must be provided');\n }\n\n return networkEnvKey\n .toLowerCase()\n .split('_')\n .map((word, index) =>\n index === 0 ? word : word[0].toUpperCase() + word.slice(1)\n )\n .join('');\n}\n", "import { getEnvVar } from './getEnvVar';\n\nexport const getTrezorDeployEnabled = () =>\n\tgetEnvVar('TREZOR_DEPLOY_ENABLED', 'false') === 'true';\n", "import { type NetworkType } from '../types';\nimport { warn } from './log';\n\nexport interface BaseAccountTypePrefixes extends Record {\n\tproxyDeployer: 'PROXY_DEPLOYER';\n\tdeployer: 'DEPLOYER';\n}\n\nexport const baseAccountTypePrefixes: BaseAccountTypePrefixes = {\n\tproxyDeployer: 'PROXY_DEPLOYER',\n\tdeployer: 'DEPLOYER'\n};\n\nexport interface WalletGetterConfig> {\n\taccountTypePrefixes: TPrefixes;\n}\n\nexport function createWalletGetter>(\n\tconfig: WalletGetterConfig,\n) {\n\tfunction getWallet(\n\t\tchainType: NetworkType,\n\t\taccountType: keyof TPrefixes,\n\t\twalletType: 'privateKey' | 'address',\n\t) {\n\t\tconst prefix = config.accountTypePrefixes[accountType];\n\t\tif (!prefix) {\n\t\t\tthrow new Error(`Unknown account type: ${String(accountType)}`);\n\t\t}\n\n\t\tconst walletKey = walletType === 'privateKey' ? 'PRIVATE_KEY' : 'ADDRESS';\n\t\tconst envKey = `${chainType.toUpperCase()}_${prefix}_${walletKey}`;\n\t\tconst walletValue = process.env[envKey];\n\n\t\tif (!walletValue) {\n\t\t\twarn(`Missing env variable: ${envKey}`, 'getWallet');\n\t\t}\n\n\t\treturn walletValue;\n\t}\n\n\treturn { getWallet };\n}\n\nexport const { getWallet } = createWalletGetter({\n\taccountTypePrefixes: baseAccountTypePrefixes,\n});\n", "import { HardhatRuntimeEnvironment } from \"hardhat/types\";\nimport { Address, Hash } from \"viem\";\n\nimport { log } from \"./log\";\n\nexport const ethersSignerCallContract = async (\n\thre: HardhatRuntimeEnvironment,\n\tcontract: Address,\n\tabi: any[],\n\tfunctionName: string,\n\t...functionArgs: any[]\n) => {\n\tconst [ethersSigner] = await hre.ethers.getSigners();\n\tconst ethersContract = new hre.ethers.Contract(contract, abi, ethersSigner);\n\tconst unsignedTx = await ethersContract[functionName].populateTransaction(...functionArgs);\n\n\tlog(\n\t\t`Size: ${(unsignedTx.data.length - 2) / 2}, Input data: ${unsignedTx.data}, Address: ${unsignedTx.to}`,\n\t\tfunctionName,\n\t\thre.network.name,\n\t);\n\n\treturn (await ethersSigner.sendTransaction(unsignedTx)).hash as Hash;\n};\n", "/*\nhardhat compile\n --concurrency Number of compilation jobs executed in parallel. Defaults to the number of CPU cores - 1 (default: 9)\n --force Force compilation ignoring cache\n --no-size-contracts Don't size contracts after running this task, even if runOnCompile option is enabled\n --no-typechain Skip Typechain compilation\n --quiet Makes the compilation process less verbose\n */\nimport { execSync } from \"child_process\";\n\ninterface HardhatCompileParams {\n\tconcurrency?: number;\n\tforce?: boolean;\n\tnoSizeContracts?: boolean;\n\tnoTypechain?: boolean;\n\tquiet?: boolean;\n}\n\nexport function compileContracts({ quiet = true, force = false }: HardhatCompileParams) {\n\tconst packageManager = process.env[\"PACKAGE_MANAGER\"] || \"yarn\";\n\tconst command = `${packageManager} compile`;\n\tconst args = [];\n\t// if (concurrency) args.push(`--concurrency ${concurrency}`);\n\t// if (noSizeContracts) args.push(\"--no-size-contracts\");\n\t// if (noTypechain) args.push(\"--no-typechain\");\n\tif (quiet) args.push(\"--quiet\");\n\tif (force) args.push(\"--force\");\n\texecSync(`${command} ${args.join(\" \")}`, { stdio: \"inherit\" });\n}\n", "import { defineChain } from \"viem\";\n\nexport const localhostViemChain = defineChain({\n\tid: Number(process.env.LOCALHOST_FORK_CHAIN_ID),\n\tname: \"localhost\",\n\tnativeCurrency: {\n\t\tdecimals: 18,\n\t\tname: \"eth\",\n\t\tsymbol: \"eth\",\n\t},\n\trpcUrls: {\n\t\tdefault: { http: [process.env.LOCALHOST_RPC_URL ?? \"http://127.0.0.1:8545\"] },\n\t},\n\ttestnet: true,\n});\n\nexport const hardhatViemChain = defineChain({\n\tid: Number(process.env.HARDHAT_CHAIN_ID),\n\tname: \"hardhat\",\n\tnativeCurrency: {\n\t\tdecimals: 18,\n\t\tname: \"eth\",\n\t\tsymbol: \"eth\",\n\t},\n\trpcUrls: {\n\t\tdefault: { http: [process.env.HARDHAT_RPC_URL ?? \"http://127.0.0.1:8545\"] },\n\t},\n\ttestnet: true,\n});\n", "import { ethers } from 'ethers';\n\nexport function extractProxyAdminAddress(receipt: ethers.TransactionReceipt | null): string {\n\tif (!receipt) return ethers.ZeroAddress;\n\n\tconst adminChangedTopic = ethers.id(\"AdminChanged(address,address)\");\n\tconst adminChangedLog = receipt.logs.find((log: ethers.Log) => log.topics[0] === adminChangedTopic);\n\n\tif (!adminChangedLog) return ethers.ZeroAddress;\n\n\ttry {\n\t\tconst abiCoder = ethers.AbiCoder.defaultAbiCoder();\n\t\tconst [, newAdmin] = abiCoder.decode(['address', 'address'], adminChangedLog.data);\n\t\treturn newAdmin;\n\t} catch {\n\t\treturn ethers.ZeroAddress;\n\t}\n}", "import { existsSync, readFileSync, writeFileSync } from \"fs\";\nimport path from \"path\";\nimport { getNetworkEnvKey } from \"../networks/getNetworkEnvKey\";\nimport log from \"./log\";\n\nexport interface EnvUpdaterConfig> {\n\tprefixes: TPrefixes;\n\tbasePath: string;\n}\n\nexport function createEnvUpdater<\n\tTPrefixes extends Record,\n\tTEnvFileName extends string,\n>(config: EnvUpdaterConfig) {\n\tfunction updateEnvVariable(\n\t\tkey: string,\n\t\tnewValue: string,\n\t\tenvFileName: TEnvFileName,\n\t): void {\n\t\tconst filePath = path.join(config.basePath, `.env.${envFileName}`);\n\n\t\tif (!existsSync(filePath)) {\n\t\t\tthrow new Error(`File not found: ${filePath}`);\n\t\t}\n\n\t\tconst envContents = readFileSync(filePath, \"utf8\");\n\t\tlet lines = envContents.split(/\\r?\\n/);\n\n\t\tconst keyExists = lines.some(line => line.startsWith(`${key}=`));\n\n\t\tif (!keyExists) {\n\t\t\tlog(\n\t\t\t\t`Key ${key} not found in .env file. Adding to ${filePath}`,\n\t\t\t\t\"updateEnvVariable\",\n\t\t\t);\n\t\t\tlines.push(`${key}=${newValue}`);\n\t\t} else {\n\t\t\tlines = lines.map(line => {\n\t\t\t\tconst [currentKey] = line.split(\"=\");\n\t\t\t\tif (currentKey === key) {\n\t\t\t\t\treturn `${key}=${newValue}`;\n\t\t\t\t}\n\t\t\t\treturn line;\n\t\t\t});\n\t\t}\n\n\t\twriteFileSync(filePath, lines.join(\"\\n\"));\n\t\tprocess.env[key] = newValue;\n\t}\n\n\tfunction updateEnvAddress(\n\t\tprefix: keyof TPrefixes,\n\t\tnewValue: string,\n\t\tenvFileName: TEnvFileName,\n\t\tnetworkPostfix?: string,\n\t): void {\n\t\tconst searchKey = networkPostfix\n\t\t\t? `${config.prefixes[prefix]}_${getNetworkEnvKey(networkPostfix)}`\n\t\t\t: String(config.prefixes[prefix]);\n\n\t\tupdateEnvVariable(searchKey, newValue, envFileName);\n\t}\n\n\treturn { updateEnvVariable, updateEnvAddress };\n}\n", "import { PublicClient } from 'viem';\n\ntype GasData = {\n\tgasPrice?: string;\n\tmaxFeePerGas?: string;\n\tmaxPriorityFeePerGas?: string;\n};\n\nexport async function getActualGasData(\n\tpublicClient: PublicClient\n): Promise {\n\tconst block = await publicClient.getBlock();\n\n\tconst isEIP1559 = !!block.baseFeePerGas;\n\n\tlet gasPrice = 0n;\n\tlet maxPriorityFeePerGas = 0n;\n\ttry {\n\t\tif (isEIP1559) {\n\t\t\tconst { maxFeePerGas } = await publicClient.estimateFeesPerGas();\n\t\t\tgasPrice = maxFeePerGas;\n\t\t\tmaxPriorityFeePerGas =\n\t\t\t\tawait publicClient.estimateMaxPriorityFeePerGas();\n\t\t} else {\n\t\t\tgasPrice = await publicClient.getGasPrice();\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('Error getting actual gas data:', error);\n\t\treturn {\n\t\t\tgasPrice: '0',\n\t\t\tmaxFeePerGas: '0',\n\t\t\tmaxPriorityFeePerGas: '0',\n\t\t};\n\t}\n\n\tconst gasDataLegacy = {\n\t\tgasPrice: gasPrice.toString(),\n\t};\n\n\tconst gasDataEIP1559 = {\n\t\tmaxFeePerGas: gasPrice.toString(),\n\t\tmaxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n\t};\n\n\tconst gasData: GasData = isEIP1559 ? gasDataEIP1559 : gasDataLegacy;\n\n\treturn gasData;\n}\n", "import {\n\tChain,\n\ttype TestClient,\n\ttype PublicClient,\n\ttype WalletClient,\n\tcreatePublicClient,\n\tcreateTestClient,\n\tcreateWalletClient,\n\tfallback,\n\thttp,\n\tpublicActions,\n\twalletActions,\n\tnonceManager,\n} from \"viem\";\nimport { privateKeyToAccount, type PrivateKeyAccount } from \"viem/accounts\";\n\nimport { type ConceroNetwork, type NetworkType } from \"../types\";\nimport { getWallet, type BaseAccountTypePrefixes } from \"../utils\";\nimport { localhostViemChain } from \"./localhostViemChain\";\nimport { conceroNetworks } from \"../constants/conceroNetworks\";\n\nfunction getClients(\n\tviemChain: Chain,\n\turl: string | undefined,\n\taccount: PrivateKeyAccount = privateKeyToAccount(\n\t\t`0x${process.env.TESTNET_DEPLOYER_PRIVATE_KEY}`,\n\t),\n): {\n\twalletClient: WalletClient;\n\tpublicClient: PublicClient;\n\taccount: PrivateKeyAccount;\n} {\n\tconst publicClient = createPublicClient({ transport: http(url), chain: viemChain });\n\tconst walletClient = createWalletClient({ transport: http(url), chain: viemChain, account });\n\n\treturn { walletClient, publicClient, account };\n}\n\nexport type ExtendedTestClient = TestClient & WalletClient & PublicClient;\n\nfunction getTestClient(account: PrivateKeyAccount): ExtendedTestClient {\n\tconst testClient = createTestClient({\n\t\tchain: localhostViemChain,\n\t\tmode: \"hardhat\",\n\t\ttransport: http(),\n\t\taccount,\n\t})\n\t\t.extend(publicActions)\n\t\t.extend(walletActions);\n\n\treturn testClient as unknown as ExtendedTestClient;\n}\n\nfunction getFallbackClients(\n\tchain: ConceroNetwork,\n\taccount?: PrivateKeyAccount,\n): {\n\twalletClient: WalletClient;\n\tpublicClient: PublicClient;\n\taccount: PrivateKeyAccount;\n} {\n\tif (!account) {\n\t\tswitch (chain.type) {\n\t\t\tcase \"mainnet\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.MAINNET_DEPLOYER_PRIVATE_KEY}`);\n\t\t\t\tbreak;\n\t\t\tcase \"testnet\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.TESTNET_DEPLOYER_PRIVATE_KEY}`, {\n\t\t\t\t\tnonceManager: nonceManager,\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"localhost\":\n\t\t\t\taccount = privateKeyToAccount(`0x${process.env.LOCALHOST_DEPLOYER_PRIVATE_KEY}`);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unsupported chain type: ${chain.type}`);\n\t\t}\n\t}\n\n\tconst { viemChain, name } = chain;\n\n\tif (!conceroNetworks[name].rpcUrls.length) {\n\t\tthrow new Error(`No URLs configured for chain: ${name}`);\n\t}\n\n\tconst transport = fallback(\n\t\tconceroNetworks[name].rpcUrls.map(url =>\n\t\t\thttp(url, {\n\t\t\t\ttimeout: 10000,\n\t\t\t\tretryCount: 1,\n\t\t\t\tretryDelay: 250,\n\t\t\t\tonFetchResponse: async response => {\n\t\t\t\t\tif (response.status >= 400) {\n\t\t\t\t\t\tthrow new Error(`HTTP error: ${response.status} ${response.statusText}`);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t}),\n\t\t),\n\t);\n\tconst publicClient = createPublicClient({ transport, chain: viemChain });\n\tconst walletClient = createWalletClient({ transport, chain: viemChain, account });\n\n\treturn { walletClient, publicClient, account };\n}\n\nfunction getViemAccount(\n\tchainType: NetworkType,\n\taccountType: keyof BaseAccountTypePrefixes,\n) {\n\tconst privateKey = `0x${getWallet(chainType, accountType, \"privateKey\")}`;\n\n\treturn privateKeyToAccount(privateKey as `0x${string}`, {\n\t\tnonceManager: nonceManager,\n\t});\n}\n\nexport interface ViemAccountGetterConfig> {\n\taccountTypePrefixes: TPrefixes;\n\tgetWallet: (chainType: NetworkType, accountType: keyof TPrefixes, walletType: 'privateKey' | 'address') => string | undefined;\n}\n\nexport function createViemAccountGetter>(\n\tconfig: ViemAccountGetterConfig,\n) {\n\tfunction getViemAccount(\n\t\tchainType: NetworkType,\n\t\taccountType: keyof TPrefixes,\n\t) {\n\t\tconst privateKey = `0x${config.getWallet(chainType, accountType, \"privateKey\")}`;\n\n\t\treturn privateKeyToAccount(privateKey as `0x${string}`, {\n\t\t\tnonceManager: nonceManager,\n\t\t});\n\t}\n\n\treturn { getViemAccount };\n}\n\nexport { getClients, getFallbackClients, getTestClient, getViemAccount };\n", "import mainnetChains from '@concero/concero-networks/output/chains.mainnet.json';\nimport testnetChains from '@concero/concero-networks/output/chains.testnet.json';\nimport type { Chain } from '@concero/concero-networks/src/types';\n\nimport {\n\ttype NetworkType,\n\ttype ChainDefinition,\n\ttype ConceroNetwork,\n\tnetworkTypes,\n} from '../types';\nimport { getWallet } from '../utils';\nimport { createViemChain } from '../utils/createViemChain';\nimport { getTrezorDeployEnabled } from '../utils/getTrezorDeployEnabled';\n\nconst mainnetProxyDeployerPK = getWallet(\n\t'mainnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\nconst testnetProxyDeployerPK = getWallet(\n\t'testnet',\n\t'proxyDeployer',\n\t'privateKey'\n);\n\nconst mainnetDeployerPK = getWallet('mainnet', 'deployer', 'privateKey');\nconst testnetDeployerPK = getWallet('testnet', 'deployer', 'privateKey');\n\nconst trezorDeployEnabled = getTrezorDeployEnabled();\n\nconst testnetAccounts = [testnetDeployerPK, testnetProxyDeployerPK];\n\nexport type ConceroMainnetNetworkNames =\n\t(typeof mainnetChains)[keyof typeof mainnetChains]['name'];\nexport type ConceroTestnetNetworkNames =\n\t(typeof testnetChains)[keyof typeof testnetChains]['name'];\n\nfunction createExtendedNetworks>(\n\tchains: T,\n\tnetworkType: NetworkType,\n\taccounts: (string | undefined)[]\n): Record {\n\tconst validAccounts = accounts.filter((acc): acc is string => !!acc);\n\n\treturn Object.fromEntries(\n\t\tObject.values(chains).map(chain => {\n\t\t\tconst chainDefinition: ChainDefinition = {\n\t\t\t\tid: parseInt(chain.id),\n\t\t\t\tname: chain.name,\n\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\tisTestnet: chain.isTestnet ?? false,\n\t\t\t\t...(chain.blockExplorers?.[0] && {\n\t\t\t\t\tblockExplorer: {\n\t\t\t\t\t\tname: chain.blockExplorers[0].name,\n\t\t\t\t\t\turl: chain.blockExplorers[0].url,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t};\n\n\t\t\tconst viemChain = createViemChain(chainDefinition);\n\n\t\t\treturn [\n\t\t\t\tchain.name,\n\t\t\t\t{\n\t\t\t\t\tname: chain.name,\n\t\t\t\t\tchainId: parseInt(chain.id),\n\t\t\t\t\ttype: networkType,\n\t\t\t\t\turl: chain.rpcUrls[0] || '',\n\t\t\t\t\trpcUrls: chain.rpcUrls,\n\t\t\t\t\tsaveDeployments: false,\n\t\t\t\t\t...(!trezorDeployEnabled && { accounts: validAccounts }),\n\t\t\t\t\tchainSelector: BigInt(chain.chainSelector),\n\t\t\t\t\tconfirmations: 1,\n\t\t\t\t\tviemChain,\n\t\t\t\t\t...(trezorDeployEnabled && {\n\t\t\t\t\t\ttrezorDerivationPaths: [\n\t\t\t\t\t\t\t[44, 60, 0, 0, 0],\n\t\t\t\t\t\t\t[44, 60, 0, 0, 1],\n\t\t\t\t\t\t],\n\t\t\t\t\t\ttrezorInsecureDerivation: true,\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t];\n\t\t})\n\t) as Record;\n}\n\nexport const testnetNetworks = createExtendedNetworks(\n\ttestnetChains as unknown as Record,\n\tnetworkTypes.testnet,\n\ttestnetAccounts\n);\n\nexport const mainnetNetworks = createExtendedNetworks(\n\tmainnetChains as unknown as Record,\n\tnetworkTypes.mainnet,\n\t[mainnetDeployerPK, mainnetProxyDeployerPK]\n);\n\nexport const conceroNetworks: Record = {\n\t...testnetNetworks,\n\t...mainnetNetworks,\n};\n", "import { type PublicClient } from \"viem\";\n\nimport { ConceroNetwork } from \"../types/ConceroNetwork\";\nimport { getFallbackClients } from \"./getViemClients\";\n\ninterface GasParameters {\n\tmaxFeePerGas: bigint;\n\tmaxPriorityFeePerGas: bigint;\n}\n\n// Network-specific minimum gas parameters (in wei)\nconst NETWORK_MINIMUMS = {\n\tpolygon: {\n\t\tminTipCap: BigInt(30_000_000_000), // 30 gwei\n\t\tminBaseFee: BigInt(30_000_000_000), // 30 gwei\n\t},\n\t// Add other networks as needed\n} as const;\n\n/**\n * Gets optimized gas parameters for priority transaction processing\n * @param chain - The network configuration\n * @param priorityMultiplier - Multiplier for maxPriorityFeePerGas (default: 2)\n * @param maxFeeMultiplier - Multiplier for maxFeePerGas buffer (default: 2)\n * @returns GasParameters object containing maxFeePerGas and maxPriorityFeePerGas\n */\nexport async function getGasParameters(\n\tchain: ConceroNetwork,\n\tpriorityMultiplier = 1,\n\tmaxFeeMultiplier = 1,\n): Promise {\n\tconst { publicClient } = getFallbackClients(chain);\n\n\ttry {\n\t\t// Get latest block to calculate gas parameters\n\t\tconst block = await publicClient.getBlock();\n\t\tconst baseFee = block.baseFeePerGas ?? BigInt(0);\n\n\t\t// Get network-specific minimums\n\t\tconst networkMinimums = getNetworkMinimums(chain);\n\n\t\t// Calculate priority fee with buffer for faster inclusion\n\t\tconst suggestedPriorityFee = await getSuggestedPriorityFee(publicClient, chain);\n\t\tconst calculatedPriorityFee = calculatePriorityFee(\n\t\t\tsuggestedPriorityFee,\n\t\t\tpriorityMultiplier,\n\t\t);\n\n\t\t// Ensure priority fee meets network minimum\n\t\tconst priorityFee =\n\t\t\tcalculatedPriorityFee > networkMinimums.minTipCap\n\t\t\t\t? calculatedPriorityFee\n\t\t\t\t: networkMinimums.minTipCap;\n\n\t\t// Calculate max fee ensuring it meets network minimums\n\t\tconst calculatedMaxFee = calculateMaxFee(baseFee, priorityFee, maxFeeMultiplier);\n\t\tconst minRequiredMaxFee = networkMinimums.minBaseFee + priorityFee;\n\t\tconst maxFeePerGas =\n\t\t\tcalculatedMaxFee > minRequiredMaxFee ? calculatedMaxFee : minRequiredMaxFee;\n\n\t\treturn {\n\t\t\tmaxFeePerGas,\n\t\t\tmaxPriorityFeePerGas: priorityFee,\n\t\t};\n\t} catch (error) {\n\t\t// Fallback with network minimums\n\t\tconst networkMinimums = getNetworkMinimums(chain);\n\t\tconst gasPrice = await publicClient.getGasPrice();\n\t\tconst priorityFee = networkMinimums.minTipCap;\n\n\t\treturn {\n\t\t\tmaxFeePerGas:\n\t\t\t\tgasPrice > networkMinimums.minBaseFee + priorityFee\n\t\t\t\t\t? gasPrice\n\t\t\t\t\t: networkMinimums.minBaseFee + priorityFee,\n\t\t\tmaxPriorityFeePerGas: priorityFee,\n\t\t};\n\t}\n}\n\n/**\n * Gets network-specific minimum gas parameters\n */\nfunction getNetworkMinimums(chain: ConceroNetwork) {\n\t// Check if chain is Polygon (you'll need to implement this check based on your CNetwork type)\n\tconst isPolygon = chain.chainId === 137 || chain.name.toLowerCase().includes(\"polygon\");\n\n\tif (isPolygon) {\n\t\treturn NETWORK_MINIMUMS.polygon;\n\t}\n\n\t// Default minimums for other networks\n\treturn {\n\t\tminTipCap: BigInt(1_500_000_000), // 1.5 gwei\n\t\tminBaseFee: BigInt(1_000_000_000), // 1 gwei\n\t};\n}\n\n/**\n * Gets the suggested priority fee from recent blocks\n */\nasync function getSuggestedPriorityFee(\n\tpublicClient: PublicClient,\n\tchain: ConceroNetwork,\n): Promise {\n\ttry {\n\t\t// For Polygon, we want to be more aggressive with priority fees\n\t\tconst isPolygon = chain.chainId === 137 || chain.name.toLowerCase().includes(\"polygon\");\n\t\tconst blocksToAnalyze = isPolygon ? 5 : 10; // Look at fewer blocks on Polygon for more recent data\n\n\t\tconst blocks = await Promise.all(\n\t\t\tArray.from({ length: blocksToAnalyze }, (_, i) =>\n\t\t\t\tpublicClient.getBlock({ blockNumber: BigInt(-1 - i) }),\n\t\t\t),\n\t\t);\n\n\t\t// For Polygon, use 75th percentile instead of median for higher priority\n\t\tconst priorityFees = blocks\n\t\t\t.map(block => block.baseFeePerGas ?? BigInt(0))\n\t\t\t.sort((a, b) => (a < b ? -1 : 1));\n\n\t\tconst index = isPolygon\n\t\t\t? Math.floor(priorityFees.length * 0.75)\n\t\t\t: Math.floor(priorityFees.length * 0.5);\n\n\t\treturn priorityFees[index];\n\t} catch {\n\t\t// Use network-specific minimum as fallback\n\t\treturn getNetworkMinimums(chain).minTipCap;\n\t}\n}\n\n/**\n * Calculates priority fee with buffer\n */\nfunction calculatePriorityFee(basePriorityFee: bigint, multiplier: number): bigint {\n\treturn BigInt(Math.ceil(Number(basePriorityFee) * multiplier));\n}\n\n/**\n * Calculates max fee with buffer\n */\nfunction calculateMaxFee(baseFee: bigint, priorityFee: bigint, multiplier: number): bigint {\n\treturn BigInt(Math.ceil(Number(baseFee) * multiplier)) + priorityFee;\n}\n", "export const config = {\n DEFAULT_BLOCK_CONFIRMATIONS: 2,\n};\n", "import { HardhatRuntimeEnvironment } from 'hardhat/types';\nimport { TransactionReceipt } from 'ethers';\n\nimport { conceroNetworks } from '../constants/conceroNetworks';\nimport { getTrezorDeployEnabled, log } from '../utils';\n\nexport interface ITxParams {\n\tgasLimit: bigint;\n\tlibraries: Record;\n}\n\nexport interface IDeployResult {\n\taddress: string;\n\tchainType: string;\n\tchainName: string;\n\tchainId: number;\n\treceipt: TransactionReceipt;\n}\n\nexport interface IGenericDeployParams {\n\thre: HardhatRuntimeEnvironment;\n\tcontractName: string;\n\ttxParams?: Partial;\n}\n\nexport const genericDeploy = async (\n\t{ hre, contractName, txParams }: IGenericDeployParams,\n\t...contractConstructorArgs: any[]\n): Promise => {\n\tconst [deployer] = await hre.ethers.getSigners();\n\tconst chain = conceroNetworks[hre.network.name];\n\n\tlog(\n\t\t`Deploy ${contractName} from address: ${await deployer.getAddress()}`,\n\t\t'contract deploy',\n\t\tchain.name\n\t);\n\n\tconst contractFactory = await hre.ethers.getContractFactory(contractName, { libraries: txParams?.libraries });\n\n\tconst deployOverrides = txParams?.gasLimit ? { gasLimit: txParams.gasLimit } : {};\n\n\tconst deployTx = contractFactory.getDeployTransaction(\n\t\t...contractConstructorArgs,\n\t\tdeployOverrides\n\t);\n\n\tconst isTrezorDeployEnabled = getTrezorDeployEnabled();\n\tif (deployTx.data && isTrezorDeployEnabled) {\n\t\tlog(\n\t\t\t`${contractName} input data: ${deployTx.data} \\n size: ${(deployTx.data.length - 2) / 2}`,\n\t\t\t'bytecode',\n\t\t\tchain.name\n\t\t);\n\t}\n\n\tconst contract = await contractFactory.deploy(...contractConstructorArgs, deployOverrides);\n\tconst receipt = await contract.deploymentTransaction()?.wait();\n\tconst deploymentAddress = await contract.getAddress();\n\n\tif (hre.tenderly) {\n\t\ttry {\n\t\t\tawait hre.tenderly.verify({\n\t\t\t\tname: contractName,\n\t\t\t\taddress: deploymentAddress,\n\t\t\t});\n\t\t} catch (e) {\n\t\t\tconsole.error(JSON.stringify(e));\n\t\t}\n\t}\n\n\tlog(\n\t\t`Deployed at: ${deploymentAddress}`,\n\t\t`deploy ${contractName}`,\n\t\tchain.name\n\t);\n\n\treturn {\n\t\taddress: deploymentAddress,\n\t\tchainName: chain.name,\n\t\tchainType: chain.type,\n\t\tchainId: chain.chainId,\n\t\treceipt\n\t};\n};\n", "import {\n\tAddress,\n\terc20Abi,\n\tformatUnits,\n\tHash,\n\tparseUnits,\n\tPublicClient,\n\tWalletClient,\n} from 'viem';\n\nexport class TokenSender {\n\tprivate walletClient: WalletClient;\n\tprivate publicClient: PublicClient;\n\n\tconstructor(walletClient: WalletClient, publicClient: PublicClient) {\n\t\tthis.walletClient = walletClient;\n\t\tthis.publicClient = publicClient;\n\t}\n\n\tpublic async sendToken(\n\t\ttokenAddress: Address,\n\t\tamount: string,\n\t\trecipient: Address\n\t): Promise {\n\t\tconst [tokenDecimals, tokenSymbol, tokenBalance] = await Promise.all([\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'decimals',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'symbol',\n\t\t\t\targs: [],\n\t\t\t}),\n\t\t\tthis.publicClient.readContract({\n\t\t\t\taddress: tokenAddress,\n\t\t\t\tabi: erc20Abi,\n\t\t\t\tfunctionName: 'balanceOf',\n\t\t\t\targs: [this.walletClient.account?.address!],\n\t\t\t}),\n\t\t]);\n\n\t\tconsole.log(\n\t\t\t`Current ${tokenSymbol} balance ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t);\n\n\t\tif (parseUnits(amount, tokenDecimals) > tokenBalance) {\n\t\t\tthrow new Error(\n\t\t\t\t`Insufficient balance. Required: ${amount}, available: ${formatUnits(tokenBalance, tokenDecimals)}`\n\t\t\t);\n\t\t}\n\n\t\tconst txHash = await this.walletClient.writeContract({\n\t\t\taddress: tokenAddress,\n\t\t\tabi: erc20Abi,\n\t\t\tfunctionName: 'transfer',\n\t\t\targs: [recipient, parseUnits(amount, tokenDecimals)],\n\t\t\tchain: this.walletClient.chain,\n\t\t\taccount: this.walletClient.account!,\n\t\t});\n\n\t\tconst { status } = await this.publicClient.waitForTransactionReceipt({\n\t\t\thash: txHash,\n\t\t});\n\n\t\tif (status !== 'success') {\n\t\t\tthrow new Error(`Error sending token. Hash: ${txHash}`);\n\t\t}\n\n\t\tconsole.log(`Token successfully sent. Hash: ${txHash}`);\n\n\t\treturn txHash;\n\t}\n}\n"], + "mappings": "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", "names": ["process", "process", "config", "config", "getWallet", "defineChain", "log", "config", "config", "getViemAccount"] } diff --git a/dist/types/src/deploy/GenericDeploy.d.ts b/dist/types/src/deploy/GenericDeploy.d.ts index 1fe7b2a..e3d1048 100644 --- a/dist/types/src/deploy/GenericDeploy.d.ts +++ b/dist/types/src/deploy/GenericDeploy.d.ts @@ -1,14 +1,15 @@ import { HardhatRuntimeEnvironment } from 'hardhat/types'; +import { TransactionReceipt } from 'ethers'; export interface ITxParams { gasLimit: bigint; libraries: Record; } export interface IDeployResult { - hash: string; address: string; chainType: string; chainName: string; - proxyAdminAddress: string; + chainId: number; + receipt: TransactionReceipt; } export interface IGenericDeployParams { hre: HardhatRuntimeEnvironment; diff --git a/src/deploy/GenericDeploy.ts b/src/deploy/GenericDeploy.ts index a73d783..7c4a052 100644 --- a/src/deploy/GenericDeploy.ts +++ b/src/deploy/GenericDeploy.ts @@ -1,8 +1,8 @@ import { HardhatRuntimeEnvironment } from 'hardhat/types'; +import { TransactionReceipt } from 'ethers'; import { conceroNetworks } from '../constants/conceroNetworks'; import { getTrezorDeployEnabled, log } from '../utils'; -import { extractProxyAdminAddress } from '../utils/extractProxyAdminAddress'; export interface ITxParams { gasLimit: bigint; @@ -10,11 +10,11 @@ export interface ITxParams { } export interface IDeployResult { - hash: string; address: string; chainType: string; chainName: string; - proxyAdminAddress: string; + chainId: number; + receipt: TransactionReceipt; } export interface IGenericDeployParams { @@ -59,7 +59,14 @@ export const genericDeploy = async ( const deploymentAddress = await contract.getAddress(); if (hre.tenderly) { - await hre.tenderly.verify({ name: contractName, address: deploymentAddress }); + try { + await hre.tenderly.verify({ + name: contractName, + address: deploymentAddress, + }); + } catch (e) { + console.error(JSON.stringify(e)); + } } log( @@ -69,10 +76,10 @@ export const genericDeploy = async ( ); return { - hash: contract.deploymentTransaction()?.hash, address: deploymentAddress, chainName: chain.name, chainType: chain.type, - proxyAdminAddress: extractProxyAdminAddress(receipt) + chainId: chain.chainId, + receipt }; };