From 1860a5321c4c3a1af518dfafd0a51ae3fc25aaf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ogle?= Date: Sat, 26 Aug 2023 16:28:21 +0200 Subject: [PATCH] Remove watch chains script (#68) * Remove the yarn dev script for watching chain data * Expand linting checks to include prettier and tsc * Add .ts files to prettier options * Remove unnecessary lint:tsc script --- README.md | 3 -- chains/base.json | 33 +++++++------ chains/linea.json | 32 ++++++------- chains/mantle.json | 32 ++++++------- package.json | 8 ++-- scripts/calculate-average-block-times.ts | 2 +- scripts/generate-chains.ts | 39 +++------------ scripts/ping-providers.ts | 6 +-- scripts/validate-chains.ts | 3 +- src/hardhat-config.ts | 5 +- src/types.ts | 7 ++- src/validations/deep-equal.test.ts | 1 - src/validations/deep-equal.ts | 1 - yarn.lock | 60 ++---------------------- 14 files changed, 72 insertions(+), 160 deletions(-) diff --git a/README.md b/README.md index a5363812..a4463237 100644 --- a/README.md +++ b/README.md @@ -161,9 +161,6 @@ The TypeScript file is generated by running any of these commands ```sh yarn generate:chains - -# Alternatively, watch the chains/ directory and regenerate on file change -yarn dev ``` ### Validation diff --git a/chains/base.json b/chains/base.json index f35421eb..eb76f1a1 100644 --- a/chains/base.json +++ b/chains/base.json @@ -1,19 +1,18 @@ { - "name": "Base", - "alias": "base", - "id": "8453", - "symbol": "ETH", - "testnet": false, - "providerUrl": "https://mainnet.base.org", - "explorer": { - "api": { - "url": "https://api.basescan.org/api", - "key": { - "required": true - } - }, - "browserUrl": "https://basescan.org/" + "name": "Base", + "alias": "base", + "id": "8453", + "symbol": "ETH", + "testnet": false, + "providerUrl": "https://mainnet.base.org", + "explorer": { + "api": { + "url": "https://api.basescan.org/api", + "key": { + "required": true + } }, - "blockTimeMs": 2000 - } - \ No newline at end of file + "browserUrl": "https://basescan.org/" + }, + "blockTimeMs": 2000 +} diff --git a/chains/linea.json b/chains/linea.json index 696b8b69..d39083de 100644 --- a/chains/linea.json +++ b/chains/linea.json @@ -1,18 +1,18 @@ { - "name": "Linea", - "alias": "linea", - "id": "59144", - "symbol": "ETH", - "testnet": false, - "providerUrl": "https://rpc.linea.build", - "explorer": { - "api": { - "url": "https://lineascan.build/api", - "key": { - "required": true - } - }, - "browserUrl": "https://lineascan.build/" + "name": "Linea", + "alias": "linea", + "id": "59144", + "symbol": "ETH", + "testnet": false, + "providerUrl": "https://rpc.linea.build", + "explorer": { + "api": { + "url": "https://lineascan.build/api", + "key": { + "required": true + } }, - "blockTimeMs": 12099 -} \ No newline at end of file + "browserUrl": "https://lineascan.build/" + }, + "blockTimeMs": 12099 +} diff --git a/chains/mantle.json b/chains/mantle.json index ab4f0b7b..d590aaf4 100644 --- a/chains/mantle.json +++ b/chains/mantle.json @@ -1,18 +1,18 @@ { - "name": "Mantle", - "alias": "mantle", - "id": "5000", - "symbol": "MNT", - "testnet": false, - "providerUrl": "https://rpc.testnet.mantle.xyz/", - "explorer": { - "api": { - "url": "https://explorer.mantle.xyz/api", - "key": { - "required": false - } - }, - "browserUrl": "https://explorer.mantle.xyz/" + "name": "Mantle", + "alias": "mantle", + "id": "5000", + "symbol": "MNT", + "testnet": false, + "providerUrl": "https://rpc.testnet.mantle.xyz/", + "explorer": { + "api": { + "url": "https://explorer.mantle.xyz/api", + "key": { + "required": false + } }, - "blockTimeMs": 362 - } + "browserUrl": "https://explorer.mantle.xyz/" + }, + "blockTimeMs": 362 +} diff --git a/package.json b/package.json index 6a8433ac..9a217fdf 100644 --- a/package.json +++ b/package.json @@ -16,12 +16,13 @@ "scripts": { "build": "yarn clean && yarn generate:chains && tsc -p tsconfig.build.json", "clean": "rimraf ./dist", - "dev": "ts-node scripts/generate-chains.ts --watch", "generate:chains": "ts-node scripts/generate-chains.ts", - "lint": "eslint . --ext .js,.ts", + "lint": "yarn lint:eslint && yarn lint:prettier", + "lint:eslint": "eslint . --ext .js,.ts", + "lint:prettier": "prettier --check \"./**/*.{ts,js,md,json}\"", "prepare": "husky install", "prepublishOnly": "yarn validate:chains", - "prettier": "prettier --write \"./**/*.{js,md,json}\"", + "prettier": "prettier --write \"./**/*.{ts,js,md,json}\"", "providers:ping": "ts-node scripts/ping-providers.ts", "providers:time": "ts-node scripts/calculate-average-block-times.ts", "test": "node --test --loader ts-node/esm ./src/**/*.test.ts", @@ -36,7 +37,6 @@ "@types/prettier": "^3.0.0", "@typescript-eslint/eslint-plugin": "^6.2.1", "@typescript-eslint/parser": "^6.2.1", - "chokidar": "^3.5.3", "eslint": "^8.46.0", "eslint-plugin-import": "^2.28.0", "ethers": "^6.6.7", diff --git a/scripts/calculate-average-block-times.ts b/scripts/calculate-average-block-times.ts index 592dad47..3e37c45b 100644 --- a/scripts/calculate-average-block-times.ts +++ b/scripts/calculate-average-block-times.ts @@ -6,7 +6,7 @@ import { CHAINS } from '../src'; const BLOCK_LOOKBACK = 400_000; async function calculateAverageBlockTimes(): Promise { - const specifiedChain = CHAINS.find(chain => chain.alias === process.env.CHAIN); + const specifiedChain = CHAINS.find((chain) => chain.alias === process.env.CHAIN); const chains = specifiedChain ? [specifiedChain] : CHAINS; const results = await Promise.allSettled( diff --git a/scripts/generate-chains.ts b/scripts/generate-chains.ts index 32f96cf9..e8d5d981 100644 --- a/scripts/generate-chains.ts +++ b/scripts/generate-chains.ts @@ -1,6 +1,5 @@ import fs from 'fs'; import path from 'path'; -import chokidar from 'chokidar'; import prettier from 'prettier'; const PRETTIER_CONFIG = path.join(__dirname, '../.prettierrc'); @@ -43,35 +42,9 @@ async function mergeJsonFiles(): Promise { console.log(`Combined chains been saved as ${OUTPUT_FILE}`); } -function watchJsonFiles(): void { - // ignored: by default we want to ignore dotfiles while watching - // persistent: continue the process as long as the directory is being watched - // See: https://github.com/paulmillr/chokidar#api - const watcher = chokidar.watch([INPUT_DIR], { ignored: /^\./, persistent: true }); - - watcher - .on('add', (path) => { - console.log(`File ${path} has been added`); - mergeJsonFiles(); - }) - .on('change', (path) => { - console.log(`File ${path} has been changed`); - mergeJsonFiles(); - }) - .on('unlink', (path) => { - console.log(`File ${path} has been removed`); - mergeJsonFiles(); - }); -} - -if (process.argv.includes('--watch')) { - watchJsonFiles(); -} else { - mergeJsonFiles() - .then(() => process.exit(0)) - .catch((error) => { - console.log(error); - process.exit(1); - }); -} - +mergeJsonFiles() + .then(() => process.exit(0)) + .catch((error) => { + console.log(error); + process.exit(1); + }); diff --git a/scripts/ping-providers.ts b/scripts/ping-providers.ts index 76f97956..178570ea 100644 --- a/scripts/ping-providers.ts +++ b/scripts/ping-providers.ts @@ -1,16 +1,14 @@ import { JsonRpcProvider } from 'ethers'; import { CHAINS } from '../src'; -const specifiedChain = CHAINS.find(chain => chain.alias === process.env.CHAIN); +const specifiedChain = CHAINS.find((chain) => chain.alias === process.env.CHAIN); const chains = specifiedChain ? [specifiedChain] : CHAINS; chains.forEach(async (chain) => { const provider = new JsonRpcProvider(chain.providerUrl); const chainId = (await provider.getNetwork()).chainId; if (chainId.toString() !== chain.id) { - throw new Error( - `${chain.alias} provider reports chain ID to be ${chainId}, while it is defined to be ${chain.id}` - ); + throw new Error(`${chain.alias} provider reports chain ID to be ${chainId}, while it is defined to be ${chain.id}`); } const blockTimestamp = (await provider.getBlock('latest'))!.timestamp; const deltaTime = Math.floor(new Date().getTime() / 1000) - blockTimestamp; diff --git a/scripts/validate-chains.ts b/scripts/validate-chains.ts index 9834b40e..bdc5c004 100644 --- a/scripts/validate-chains.ts +++ b/scripts/validate-chains.ts @@ -26,7 +26,7 @@ if (CHAINS.length !== jsonChains.length) { jsonFiles.forEach((filePath: string, index: number) => { const chain = jsonChains[index]!; if (filePath.replace('.json', '') !== chain.alias) { - console.log('JSON file name must match the chain\'s alias'); + console.log("JSON file name must match the chain's alias"); console.log(`Current value: ${filePath}.json. Expected: ${chain.alias}.json`); process.exit(1); } @@ -54,4 +54,3 @@ jsonChains.forEach((chain: any, index: number) => { console.log('Successfully validated chains!'); process.exit(0); - diff --git a/src/hardhat-config.ts b/src/hardhat-config.ts index d3522b24..2eee451f 100644 --- a/src/hardhat-config.ts +++ b/src/hardhat-config.ts @@ -3,7 +3,9 @@ import { toUpperSnakeCase } from './utils/strings'; import { Chain, HardhatEtherscanConfig, HardhatNetworksConfig } from './types'; export function getEnvVariableNames(): string[] { - const apiKeyEnvNames = CHAINS.filter((chain) => chain.explorer?.api?.key?.required).map((chain) => etherscanApiKeyName(chain)); + const apiKeyEnvNames = CHAINS.filter((chain) => chain.explorer?.api?.key?.required).map((chain) => + etherscanApiKeyName(chain) + ); const networkRpcUrlNames = CHAINS.map((chain) => chain.providerUrl); @@ -71,4 +73,3 @@ export function networks(): HardhatNetworksConfig { return networks; }, {} as HardhatNetworksConfig); } - diff --git a/src/types.ts b/src/types.ts index d8574d7f..3f2a5de6 100644 --- a/src/types.ts +++ b/src/types.ts @@ -39,18 +39,17 @@ export interface HardhatNetworksConfig { accounts: { mnemonic: string }; chainId: number; url: string; - } + }; } // https://hardhat.org/hardhat-runner/plugins/nomicfoundation-hardhat-verify#adding-support-for-other-networks export interface HardhatEtherscanCustomChain { network: string; chainId: number; - urls: { apiURL: string; browserURL: string; } + urls: { apiURL: string; browserURL: string }; } export interface HardhatEtherscanConfig { - apiKey: { [alias: string]: string; } + apiKey: { [alias: string]: string }; customChains: HardhatEtherscanCustomChain[]; } - diff --git a/src/validations/deep-equal.test.ts b/src/validations/deep-equal.test.ts index 0c87029c..0deb5937 100644 --- a/src/validations/deep-equal.test.ts +++ b/src/validations/deep-equal.test.ts @@ -54,4 +54,3 @@ describe('deepEqual', () => { assert.equal(deepEqual(func1, func2), false); }); }); - diff --git a/src/validations/deep-equal.ts b/src/validations/deep-equal.ts index 4245c0c5..9267a704 100644 --- a/src/validations/deep-equal.ts +++ b/src/validations/deep-equal.ts @@ -30,4 +30,3 @@ export function deepEqual(obj1: any, obj2: any): boolean { return true; } - diff --git a/yarn.lock b/yarn.lock index 5329b94a..da6d236c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -326,14 +326,6 @@ ansi-styles@^6.1.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - arg@^4.1.0: version "4.1.3" resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" @@ -421,11 +413,6 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -441,7 +428,7 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^3.0.2, braces@~3.0.2: +braces@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -469,21 +456,6 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - 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" - color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -888,11 +860,6 @@ 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: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -931,7 +898,7 @@ get-symbol-description@^1.0.0: call-bind "^1.0.2" get-intrinsic "^1.1.1" -glob-parent@^5.1.2, 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" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -1108,13 +1075,6 @@ is-bigint@^1.0.1: dependencies: has-bigints "^1.0.1" -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - is-boolean-object@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" @@ -1152,7 +1112,7 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/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: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -1361,11 +1321,6 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - object-inspect@^1.12.3, object-inspect@^1.9.0: version "1.12.3" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" @@ -1487,7 +1442,7 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: +picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -1512,13 +1467,6 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - regexp.prototype.flags@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb"