diff --git a/contracts/deploy b/contracts/deploy index 3fb7c709..b48ee53f 100755 --- a/contracts/deploy +++ b/contracts/deploy @@ -1,192 +1,8 @@ -#!/usr/bin/env -S npx ts-node --transpile-only +#!/usr/bin/env -S npx tsx -const HELP = ` -deploy - deploy the Liquity contracts. - -Usage: - ./deploy [OPTIONS] - -Arguments: - NETWORK_PRESET The network preset to use, which can be one of: - - local: Deploy to a local network - - mainnet: Deploy to the Ethereum mainnet - - tenderly-devnet: Deploy to a Tenderly devnet - -Options: - --chain-id Chain ID to deploy to - --deployer Address or private key to deploy with. Will - require a Ledger if an address is provided. - --ledger-path HD path to use with the Ledger (only used when - DEPLOYER is an address) - --etherscan-api-key Etherscan API key for contracts verification - (mainnet only) - --help, -h Show this help message - --open-demo-troves Open demo troves after deployment (local only) - --rpc-url RPC URL to use - --verify Verify contracts on Etherscan after deployment - (requires ETHERSCAN_API_KEY to be set). - -Note: options can also be set via corresponding environment variables, -e.g. --chain-id can be set via CHAIN_ID instead. Parameters take precedence over variables. -`; - -const ANVIL_FIRST_ACCOUNT = "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"; - -async function parseArgs() { - const { typeFlag } = await import("type-flag"); - - const { - _: [networkPreset], - flags: options, - } = typeFlag({ - chainId: { type: Number }, - deployer: { type: String }, - etherscanApiKey: { type: String }, - help: { type: Boolean, alias: "h" }, - ledgerPath: { type: String }, - openDemoTroves: { type: Boolean }, - rpcUrl: { type: String }, - verify: { type: Boolean }, - }); - - options.chainId ??= process.env.CHAIN_ID; - options.deployer ??= process.env.DEPLOYER; - options.etherscanApiKey ??= process.env.ETHERSCAN_API_KEY; - options.ledgerPath ??= process.env.LEDGER_PATH; - options.openDemoTroves ??= Boolean( - process.env.OPEN_DEMO_TROVES && process.env.OPEN_DEMO_TROVES !== "false", - ); - options.rpcUrl ??= process.env.RPC_URL; - options.verify ??= Boolean( - process.env.VERIFY && process.env.VERIFY !== "false", - ); - - return { networkPreset, options }; -} - -async function main() { - const { $, echo, fs } = await import("zx"); - - const { networkPreset, options } = await parseArgs(); - - if (options.help) { - echo`${HELP}`; - process.exit(0); - } - - // network preset: local - if (networkPreset === "local") { - options.chainId ??= 31337; - options.deployer ??= ANVIL_FIRST_ACCOUNT; - options.rpcUrl ??= "http://localhost:8545"; - } - - // network preset: tenderly-devnet - if (networkPreset === "tenderly-devnet") { - options.chainId ??= 1; - options.rpcUrl ??= ( - await $`tenderly devnet spawn-rpc ${[ - "--project", - "project", - "--template", - "liquity2", - ]} 2>&1`.quiet() - ).stdout.trim(); - } - - // network preset: mainnet - if (networkPreset === "mainnet") { - options.chainId ??= 1; - } - - // handle missing options - if (!options.chainId) { - throw new Error("--chain-id is required"); - } - if (!options.rpcUrl) { - throw new Error("--rpc-url is required"); - } - if (!options.deployer) { - throw new Error("--deployer is required"); - } - if (options.verify && !options.etherscanApiKey) { - throw new Error( - "--verify requires --etherscan-api-key ", - ); - } - - const forgeArgs = [ - "script", - "scripts/DeployLiquity2.s.sol:DeployLiquity2Script", - "--chain-id", - options.chainId, - "--rpc-url", - options.rpcUrl, - "--broadcast", - ]; - - // verify - if (options.verify) { - forgeArgs.push("--verify"); - forgeArgs.push("--etherscan-api-key"); - forgeArgs.push(options.etherscanApiKey); - } - - // Ledger signing - if (options.deployer.startsWith("0x") && options.deployer.length === 42) { - forgeArgs.push("--ledger"); - if (options.ledgerPath) { - forgeArgs.push("--hd-paths"); - forgeArgs.push(options.ledgerPath); - } - } - - echo` -Environment: - - CHAIN_ID: ${options.chainId} - DEPLOYER: ${options.deployer} - LEDGER_PATH: ${options.ledgerPath} - ETHERSCAN_API_KEY: ${options.etherscanApiKey && "(secret)"} - OPEN_DEMO_TROVES: ${options.openDemoTroves ? "yes" : "no"} - RPC_URL: ${options.rpcUrl} - VERIFY: ${options.verify ? "yes" : "no"} -`; - - const envVars = [ - `DEPLOYER=${options.deployer}`, - ]; - - if (options.openDemoTroves) { - envVars.push("OPEN_DEMO_TROVES=true"); - } - - // deploy - await $`${envVars} forge ${forgeArgs}`; - - // get deployed contracts - const latestRun = await fs.readJson( - `broadcast/DeployLiquity2.s.sol/${options.chainId}/run-latest.json`, - ); - const deployedContracts = latestRun.transactions - .filter((tx) => tx.transactionType === "CREATE") - .map((tx) => [tx.contractName, tx.contractAddress]); - - // format deployed contracts - const longestContractName = Math.max( - ...deployedContracts.map(([name]) => name.length), - ); - const deployedContractsFormatted = deployedContracts - .map(([name, address]) => `${name.padEnd(longestContractName)} ${address}`) - .join("\n"); - - echo("Contract deployment complete."); - echo(""); - echo(deployedContractsFormatted); - echo(""); -} - -main().catch((error) => { - console.error(error); +require("./utils/deploy-cli").main().catch(({ message }) => { + console.error(""); + console.error(` Error: ${message}`); + console.error(""); process.exit(1); }); diff --git a/contracts/package.json b/contracts/package.json index 0c9f6ca9..5fc517f5 100644 --- a/contracts/package.json +++ b/contracts/package.json @@ -41,7 +41,7 @@ "hardhat-gas-reporter": "^1.0.8", "solidity-coverage": "^0.8.8", "ts-node": ">=8.0.0", - "type-flag": "^3.0.0", + "tsx": "^4.7.1", "typechain": "^8.1.0", "typescript": ">=4.5.0", "zx": "^7.2.3" diff --git a/contracts/utils/deploy-cli.ts b/contracts/utils/deploy-cli.ts new file mode 100644 index 00000000..3064c131 --- /dev/null +++ b/contracts/utils/deploy-cli.ts @@ -0,0 +1,233 @@ +import { $, argv, echo, fs } from "zx"; + +const HELP = ` +deploy - deploy the Liquity contracts. + +Usage: + ./deploy [NETWORK_PRESET] [OPTIONS] + +Arguments: + NETWORK_PRESET A network preset, which is a shorthand for setting certain options + such as the chain ID and RPC URL. Options take precedence over + network presets. Available presets: + - local: Deploy to a local network + - mainnet: Deploy to the Ethereum mainnet + - tenderly-devnet: Deploy to a Tenderly devnet + + +Options: + --chain-id Chain ID to deploy to. + --deployer Address or private key to deploy with. + Requires a Ledger if an address is used. + --ledger-path HD path to use with the Ledger (only used + when DEPLOYER is an address). + --etherscan-api-key Etherscan API key to verify the contracts + (mainnet only). + --help, -h Show this help message. + --open-demo-troves Open demo troves after deployment (local + only). + --rpc-url RPC URL to use. + --verify Verify contracts on Etherscan after + deployment (requires ETHERSCAN_API_KEY). + +Note: options can also be set via corresponding environment variables, +e.g. --chain-id can be set via CHAIN_ID instead. Parameters take precedence over variables. +`; + +const ANVIL_FIRST_ACCOUNT = "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"; + +export async function main() { + const { networkPreset, options } = await parseArgs(); + + if (options.help) { + echo`${HELP}`; + process.exit(0); + } + + // network preset: local + if (networkPreset === "local") { + options.chainId ??= 31337; + options.deployer ??= ANVIL_FIRST_ACCOUNT; + options.rpcUrl ??= "http://localhost:8545"; + } + + // network preset: tenderly-devnet + if (networkPreset === "tenderly-devnet") { + options.chainId ??= 1; + options.rpcUrl ??= ( + await $`tenderly devnet spawn-rpc ${[ + "--project", + "project", + "--template", + "liquity2", + ]} 2>&1`.quiet() + ).stdout.trim(); + } + + // network preset: mainnet + if (networkPreset === "mainnet") { + options.chainId ??= 1; + } + + // handle missing options + if (!options.chainId) { + throw new Error("--chain-id is required"); + } + if (!options.rpcUrl) { + throw new Error("--rpc-url is required"); + } + if (!options.deployer) { + throw new Error("--deployer is required"); + } + if (options.verify && !options.etherscanApiKey) { + throw new Error( + "--verify requires --etherscan-api-key ", + ); + } + + const forgeArgs: string[] = [ + "script", + "scripts/DeployLiquity2.s.sol:DeployLiquity2Script", + "--chain-id", + String(options.chainId), + "--rpc-url", + options.rpcUrl, + "--broadcast", + ]; + + // verify + if (options.verify && options.etherscanApiKey) { + forgeArgs.push("--verify"); + forgeArgs.push("--etherscan-api-key"); + forgeArgs.push(options.etherscanApiKey); + } + + // Ledger signing + if (options.deployer.startsWith("0x") && options.deployer.length === 42) { + forgeArgs.push("--ledger"); + if (options.ledgerPath) { + forgeArgs.push("--hd-paths"); + forgeArgs.push(options.ledgerPath); + } + } + + echo` +Deploying Liquity contracts with the following settings: + + CHAIN_ID: ${options.chainId} + DEPLOYER: ${options.deployer} + LEDGER_PATH: ${options.ledgerPath} + ETHERSCAN_API_KEY: ${options.etherscanApiKey && "(secret)"} + OPEN_DEMO_TROVES: ${options.openDemoTroves ? "yes" : "no"} + RPC_URL: ${options.rpcUrl} + VERIFY: ${options.verify ? "yes" : "no"} +`; + + const envVars = [ + `DEPLOYER=${options.deployer}`, + ]; + + if (options.openDemoTroves) { + envVars.push("OPEN_DEMO_TROVES=true"); + } + + // deploy + await $`${envVars} forge ${forgeArgs}`; + + const deployedContracts = await getDeployedContracts( + `broadcast/DeployLiquity2.s.sol/${options.chainId}/run-latest.json`, + ); + + // format deployed contracts + const longestContractName = Math.max( + ...deployedContracts.map(([name]) => name.length), + ); + const deployedContractsFormatted = deployedContracts + .map(([name, address]) => `${name.padEnd(longestContractName)} ${address}`) + .join("\n"); + + echo("Contract deployment complete."); + echo(""); + echo(deployedContractsFormatted); + echo(""); +} + +function isDeploymentLog(log: unknown): log is { + transactions: Array<{ + transactionType: "CREATE"; + contractName: string; + contractAddress: string; + }>; +} { + return ( + typeof log === "object" + && log !== null + && "transactions" in log + && Array.isArray(log.transactions) + && log.transactions + .filter(tx => ( + typeof tx === "object" + && tx !== null + && tx.transactionType === "CREATE" + )) + .every(tx => ( + typeof tx.contractName === "string" + && typeof tx.contractAddress === "string" + )) + ); +} + +async function getDeployedContracts(jsonPath: string) { + const latestRun = await fs.readJson(jsonPath); + + if (isDeploymentLog(latestRun)) { + return latestRun.transactions + .filter((tx) => tx.transactionType === "CREATE") + .map((tx) => [tx.contractName, tx.contractAddress]); + } + + throw new Error("Invalid deployment log: " + JSON.stringify(latestRun)); +} + +function argInt(name: string) { + return typeof argv[name] === "number" ? parseInt(argv[name], 10) : undefined; +} + +function argBoolean(name: string) { + // allow "false" + return argv[name] === "false" ? false : Boolean(argv[name]); +} + +async function parseArgs() { + const options = { + chainId: argInt("chain-id"), + deployer: argv["deployer"], + etherscanApiKey: argv["etherscan-api-key"], + help: "help" in argv || "h" in argv, + ledgerPath: argv["ledger-path"], + openDemoTroves: argBoolean("open-demo-troves"), + rpcUrl: argv["rpc-url"], + verify: argBoolean("verify"), + }; + + const [networkPreset] = argv._; + + if (options.chainId === undefined) { + const chainIdEnv = parseInt(process.env.CHAIN_ID ?? "", 10); + if (chainIdEnv && isNaN(chainIdEnv)) { + options.chainId = chainIdEnv; + } + } + options.deployer ??= process.env.DEPLOYER; + options.etherscanApiKey ??= process.env.ETHERSCAN_API_KEY; + options.ledgerPath ??= process.env.LEDGER_PATH; + options.openDemoTroves ??= Boolean( + process.env.OPEN_DEMO_TROVES && process.env.OPEN_DEMO_TROVES !== "false", + ); + options.rpcUrl ??= process.env.RPC_URL; + options.verify ??= Boolean( + process.env.VERIFY && process.env.VERIFY !== "false", + ); + + return { options, networkPreset }; +} diff --git a/contracts/yarn.lock b/contracts/yarn.lock index b8265ecd..27a070b8 100644 --- a/contracts/yarn.lock +++ b/contracts/yarn.lock @@ -95,6 +95,121 @@ resolved "https://registry.yarnpkg.com/@ensdomains/resolver/-/resolver-0.2.4.tgz#c10fe28bf5efbf49bff4666d909aed0265efbc89" integrity sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA== +"@esbuild/aix-ppc64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" + integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA== + +"@esbuild/android-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" + integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA== + +"@esbuild/android-arm@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" + integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w== + +"@esbuild/android-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" + integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew== + +"@esbuild/darwin-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" + integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g== + +"@esbuild/darwin-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" + integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A== + +"@esbuild/freebsd-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" + integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA== + +"@esbuild/freebsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" + integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg== + +"@esbuild/linux-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" + integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA== + +"@esbuild/linux-arm@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" + integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w== + +"@esbuild/linux-ia32@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" + integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA== + +"@esbuild/linux-loong64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" + integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA== + +"@esbuild/linux-mips64el@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" + integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w== + +"@esbuild/linux-ppc64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" + integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg== + +"@esbuild/linux-riscv64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" + integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg== + +"@esbuild/linux-s390x@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" + integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg== + +"@esbuild/linux-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" + integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg== + +"@esbuild/netbsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" + integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA== + +"@esbuild/openbsd-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" + integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw== + +"@esbuild/sunos-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" + integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA== + +"@esbuild/win32-arm64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" + integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A== + +"@esbuild/win32-ia32@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" + integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ== + +"@esbuild/win32-x64@0.19.12": + version "0.19.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" + integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA== + "@ethereumjs/common@2.5.0": version "2.5.0" resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.5.0.tgz#ec61551b31bef7a69d1dc634d8932468866a4268" @@ -2680,6 +2795,35 @@ es6-symbol@^3.1.1, es6-symbol@^3.1.3: d "^1.0.1" ext "^1.1.2" +esbuild@~0.19.10: + version "0.19.12" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.12.tgz#dc82ee5dc79e82f5a5c3b4323a2a641827db3e04" + integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg== + optionalDependencies: + "@esbuild/aix-ppc64" "0.19.12" + "@esbuild/android-arm" "0.19.12" + "@esbuild/android-arm64" "0.19.12" + "@esbuild/android-x64" "0.19.12" + "@esbuild/darwin-arm64" "0.19.12" + "@esbuild/darwin-x64" "0.19.12" + "@esbuild/freebsd-arm64" "0.19.12" + "@esbuild/freebsd-x64" "0.19.12" + "@esbuild/linux-arm" "0.19.12" + "@esbuild/linux-arm64" "0.19.12" + "@esbuild/linux-ia32" "0.19.12" + "@esbuild/linux-loong64" "0.19.12" + "@esbuild/linux-mips64el" "0.19.12" + "@esbuild/linux-ppc64" "0.19.12" + "@esbuild/linux-riscv64" "0.19.12" + "@esbuild/linux-s390x" "0.19.12" + "@esbuild/linux-x64" "0.19.12" + "@esbuild/netbsd-x64" "0.19.12" + "@esbuild/openbsd-x64" "0.19.12" + "@esbuild/sunos-x64" "0.19.12" + "@esbuild/win32-arm64" "0.19.12" + "@esbuild/win32-ia32" "0.19.12" + "@esbuild/win32-x64" "0.19.12" + escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -3304,7 +3448,7 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@~2.3.2: +fsevents@~2.3.2, fsevents@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== @@ -3366,6 +3510,13 @@ get-stream@^6.0.1: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== +get-tsconfig@^4.7.2: + version "4.7.3" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.3.tgz#0498163d98f7b58484dd4906999c0c9d5f103f83" + integrity sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg== + dependencies: + resolve-pkg-maps "^1.0.0" + getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -5326,6 +5477,11 @@ resolve-from@^3.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== +resolve-pkg-maps@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== + resolve@1.1.x: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" @@ -6105,6 +6261,16 @@ tsort@0.0.1: resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== +tsx@^4.7.1: + version "4.7.1" + resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.7.1.tgz#27af6cbf4e1cdfcb9b5425b1c61bb7e668eb5e84" + integrity sha512-8d6VuibXHtlN5E3zFkgY8u4DX7Y3Z27zvvPKVmLon/D4AjuKzarkUBTLDBgj9iTQ0hg5xM7c/mYiRVM+HETf0g== + dependencies: + esbuild "~0.19.10" + get-tsconfig "^4.7.2" + optionalDependencies: + fsevents "~2.3.3" + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -6149,11 +6315,6 @@ type-fest@^0.7.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== -type-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/type-flag/-/type-flag-3.0.0.tgz#2caef2f20f2c71e960fe1d3b6f57bae8c8246459" - integrity sha512-3YaYwMseXCAhBB14RXW5cRQfJQlEknS6i4C8fCfeUdS3ihG9EdccdR9kt3vP73ZdeTGmPb4bZtkDn5XMIn1DLA== - type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"